2015-02-08 4 views
-4

Я могу добавить SQL с sqlmap, но не могу понять, как это работает. В моем скрипте нет команды echo или print, но sqlmap возвращает данные с именем и данными базы данных.Как sqlmap обнаруживает эту инъекцию SQL в моем скрипте?

Вот экземпляр он нашел:

$sql ="SELECT * FROM application where id=$id"; 
$act_res = mysql_query($sql); 

Если нет эха или печати, и я также остановить отчеты об ошибках, то как же sqlmap получил информацию по SQL инъекций?

+0

Какой метод использования/экспансии SQL-инъекций используется sqlmap? – Gumbo

+0

получить имя таблицы имен таблиц и т. Д. – Asik

+0

Нет, я имел в виду, что [техника] (https://github.com/sqlmapproject/sqlmap/wiki/Techniques) используется в вашем конкретном случае. – Gumbo

ответ

2

Ваш кусок кода есть одна проблема безопасности:

Вам нужно дезинфицировать ввод $id. Если идентификатор в вашей БД является int, вы можете повторно защитить SQL-инъекцию с проверкой, является ли это int с функцией is_int().

Сценарий SQLMAP попытается ввести инъекции в ваш уязвимый вход $id.

Если хакер поставил ID; SQLInjectionHere-- в $id, запрос будет:

SELECT * FROM application WHERE id=ID; SQLInjectionHere" 

Злоумышленник сможет сделать еще один запрос SQL без разрешения.

Вы также можете добавить многословен на вашем SQLMAP с -v

PS: плохая практика для использования SELECT * ( Why? )

+0

Я знаю, что это впрыскивается ... Но нет эха или печати, тогда как он получит данные с помощью SQL-инъекции. Спасибо – Asik

0

Один из способов с SLEEP(). Если вы отправляете SLEEP(5), SLEEP(10), SLEEP(15), а ответы занимают 5,3 секунды, 10,2 секунды и 15,5 секунды для генерации, вы можете быть уверены, что нашли дыру.

+0

вы можете расширить это? – MyNameIsZero

+0

можете ли вы расширить это? Какая информация дает время сна, что позволяет выявлять уязвимости? Благодарю. – MyNameIsZero

+1

@MyNameIsZero: Поскольку у вас есть полный контроль над запросом, но вы не можете увидеть какой-либо вывод, вы можете использовать 'SLEEP()' для отправки информации. Например, вы можете ввести запрос, ожидающий 1 секунду, если первая буква поля равна 'a', 2 секунды, если первая буква' b' и т. Д. В зависимости от времени, которое требуется для получения ответа, вы знаете, что такое первый символ. Вы можете повторить второй, третий и т. Д., Пока вы не выкинули все поле. – Blender