Примечание. Это проект с готовым сайтом внутри виртуальной машины.Это проект старшего колледжа, над которым я работаю.Я не пытаюсь использовать настоящий, реальный веб-сайт.Это в образовательных целях, чтобы понять, насколько мощными могут быть такие эксплойты, даже с данными функциями.
В настоящее время я работаю над проектом (в безопасной и контролируемой среде внутри ВМ), который включает в себя использование уязвимостейсайт.Одна часть включает использование оператора SQL.Цель состоит в том, чтобы иметь возможность просто ввести имя пользователя и неправильный пароль и все еще иметь возможность войти в систему. Я работал над этим в течение нескольких часов без такой удачи, и я провел немало исследованийпри обнаружении доступных уязвимостей.
Когда человек отправляет свое имя пользователя и пароль (в данном случае это может быть что угодно), запускается функция со следующим подготовленным оператором SQL:
$query = "SELECT Salt FROM Accounts WHERE Username = '$quoted'";
Где $quoted
:
$quoted = $this->db->quote($user);
По сути, это добавляет дополнительную одинарную / двойную кавычку для каждой предоставленной одинарной / двойной кавычки.Несмотря на попытки использования других возможностей (например, ' OR 1=1'
и т. Д.), Самое близкое, что я придумал, это:
SELECT Salt FROM Accounts WHERE Username = '\'' OR 1=1 -- '
С переменной $user
, изначально равной \' OR 1=1 --
.Первые и последние кавычки добавляются автоматически через функцию quote () вместе с дополнительной кавычкой после экранированной одинарной кавычки.Однако это не похоже на правильный синтаксис SQL, возможно потому, что он интерпретирует весь ввод $user
как имя пользователя.
После этого есть еще один подготовленный оператор, но он использует хеш md5пароль, соединенный с солью, и я не думаю, что есть действительно какой-либо способ сделать что-нибудь вводимое в операторе, как только md5 вернет хеш.Для любопытства утверждение таково:
$query = "SELECT * FROM Accounts WHERE Username = '$user' AND Password = '$hash';
С $hash = md5($pass.$salt)
.
Кто-нибудь хочет пролить свет на какие-либо возможности?Может быть, я просто упускаю это из виду, но чувствую, что перепробовал все.
РЕДАКТИРОВАТЬ: Я решил это.Это было связано с обходом другой функции для использования инъекции.В конечном итоге он добавил имя пользователя с кодом инъекции (инъекция второго порядка), а затем произвел бы вход в систему.Процедура входа в систему указала имя пользователя для первого запроса, но второй запрос не сделал;таким образом, пользователь будет автоматически входить в систему.