Я должен сделать проект для школы о нескольких различных уязвимостях в Интернете (SQL, XSS, CSRF и т. Д.), И я сделал очень простой сайт, чтобы продемонстрировать атаки. Но по какой-то причине я просто не могу заставить SQL-инъекцию работать, атакуя логин.Моя SQL-инъекция не работает?
Вот простой код Логин:
$query = "SELECT * FROM customer WHERE cMAIL='$cmail' AND cPWD='$cpwd'";
$res = mysql_query($query) or die(mysql_error());
echo $query . mysql_error();
$count = mysql_num_rows($res);
if ($count == 1) {
echo " Reached target!";
session_start();
$_SESSION["cmail"] = $cmail;
$_SESSION["cpwd"] = $cpwd;
} else {}
Много эхо вещи так, я могу следовать инъекции, чтобы увидеть, что происходит, но это дает мне странные результаты.
Если я зарегистрируюсь как один из клиентов; Имя пользователя: [email protected], пароль = 123abc, это дает мне ожидаемый ответ:
SELECT * FROM WHERE клиента cMAIL='[email protected]»И CPWD = '123abc' Достигнута цель!
Это то, что он эхо в браузере, просто чтобы быть ясным!
И сеанс создан для jjones. Но если я делаю это: имя пользователя: 1' OR '1' = '1, пароль: (пусто) он вторит:
SELECT * FROM клиента WHERE CMail =' 1' или '1' = '1 'И cPWD =' '
Ошибок нет. У меня есть echo'd $ count, и он говорит, что из базы данных выбрано 0 строк. Таким образом, инъекция звучит, но я не получаю никаких строк, основанных на запросе. Как я могу это решить?
На сколько строк 'CPWD = '' 'верно? –
Ваш введенный SQL позволяет продолжить оставшийся исходный запрос. Как указывает Оли, 'cPWD = ''', вероятно, неверен для любых строк. Обычно вы используете что-то вроде «1» ИЛИ 1 = 1; - ', чтобы предотвратить выполнение остальной части запроса. –
@ChrisHayes Это не позволяет мне завершить запрос с помощью #, -,/* и т. Д. Я думаю, что это потому, что в конце есть метка одной кавычки, поэтому она заканчивается 'cMAIL = '1' OR 1 = 1; - «И ...». Последний знак убивает запрос, который я думаю. – Volatile