Sqlmap как пользоваться windows

Инструменты Kali Linux

Список инструментов для тестирования на проникновение и их описание

sqlmap

Описание sqlmap

sqlmap — это инструмент с открытым исходным кодом для тестирования на проникновение, который автоматизирует процесс выявления и эксплуатации уязвимости SQL-инъекця и захват серверов баз данных. Он поставляется с мощным движком выявления и многими нишевыми функциями для конечного тестера на проникновение, имеет широкий набор возможностей, начиная от сбора отпечатков баз данных по полученной от них данным, до доступа к файловой системе и выполнения команд в операционной системе посредством внеполосных (out-of-band) подключений.

  • Полная поддержка для таких систем управления базами данных как MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase, SAP MaxDB и HSQLDB.
  • Полная поддержка шести техник SQL-инъекций: слепая логическая (boolean-based blind), слепая, основанная на времени (time-based blind), основанная на ошибке (error-based), основанная на запросе UNION (UNION query-based), многоярусные запросы (stacked queries) и внеполосная (out-of-band).
  • Поддержка прямого подключения к базе данных без прохода через SQL инъекцию, посредством введения учётных данных СУБД, IP адреса, порта и имени БД.
  • Поддержка перечисления пользователей, хешей паролей, привилегий, ролей, БД, таблиц и колонок.
  • Автоматическое распознавание форматов хешей паролей и предложение их взлома с использованием атаки по словарю.
  • Поддержка сдампливания записей таблиц БД, диапазона записей или указанных колонок по пользовательскому выбору.
  • Пользователь также может выбрать сдампливать только диапазон символов из каждой записи колонки.
  • Поддержка поиска указанных имён БД, указанных таблиц по всем БД или указанным колонкам по всем таблицам БД. Это полезно, например, для идентификации таблиц, содержащих пользовательские учётные данные приложений, где колонки с соответствующими именами колонок содержат такие строки как имя и пароль.
  • Поддержка загрузки и выгрузки любого файла из файловой системы с сервера БД, когда ПО БД MySQL, PostgreSQL или Microsoft SQL Server.
  • Поддержка выполнения произвольных команд на ОС сервера БД и получение их стандартного вывода когда ПО MySQL, PostgreSQL или Microsoft SQL Server.
  • Поддержка установления внедиапазонного TCP подключения между атакующей машиной и лежащей в основе сервера базы данных операционной системой. Этот канал по выбору пользователя может быть интерактивным приглашением командной строки, сессией Meterpreter или сессией графического пользовательского интерфейса (VNC).
  • Поддержка повышения пользовательских привилегий процесса базы данных через команду Metasploit’а — Meterpreter getsystem.

Автор: Bernardo Damele Assumpcao Guimaraes, Miroslav Stampar

Справка по sqlmap

Руководство по sqlmap

Страница man присутствует, но является устаревшей и не дополняет ничего нового к справке.

Доступные tamper скрипты sqlmap

  • 0x2char.py — Заменить каждую (MySQL) 0x кодированную строку на эквивалентный CONCAT(CHAR(),…) двойник
  • apostrophemask.py — Заменить символ апострофа (‘) на его UTF-8 full width аналог (то есть ‘ -> %EF%BC%87)
  • apostrophenullencode.py — Заменить символ апострофа (‘) на его нелегальный double unicode аналог (то есть ‘ -> %00%27)
  • appendnullbyte.py — Appends (Access) NULL byte character (%00) at the end of payload
  • base64encode.py — Base64-encodes all characters in a given payload
  • between.py — Replaces greater than operator (‘>’) with ‘NOT BETWEEN 0 AND #’ and equals operator (‘=’) with ‘BETWEEN # AND #’
  • bluecoat.py — Replaces space character after SQL statement with a valid random blank character. Afterwards replace character ‘=’ with operator LIKE
  • chardoubleencode.py — Double URL-encodes all characters in a given payload (not processing already encoded) (e.g. SELECT -> %2553%2545%254C%2545%2543%2554)
  • charencode.py — URL-encodes all characters in a given payload (not processing already encoded) (e.g. SELECT -> %53%45%4C%45%43%54)
  • charunicodeencode.py — Unicode-URL-encodes all characters in a given payload (not processing already encoded) (e.g. SELECT -> %u0053%u0045%u004C%u0045%u0043%u0054)
  • charunicodeescape.py — Unicode-escapes non-encoded characters in a given payload (not processing already encoded) (e.g. SELECT -> \u0053\u0045\u004C\u0045\u0043\u0054)
  • commalesslimit.py — Replaces (MySQL) instances like ‘LIMIT M, N’ with ‘LIMIT N OFFSET M’ counterpart
  • commalessmid.py — Replaces (MySQL) instances like ‘MID(A, B, C)’ with ‘MID(A FROM B FOR C)’ counterpart
  • commentbeforeparentheses.py — Prepends (inline) comment before parentheses (e.g. ( -> /**/()
  • concat2concatws.py — Replaces (MySQL) instances like ‘CONCAT(A, B)’ with ‘CONCAT_WS(MID(CHAR(0), 0, 0), A, B)’ counterpart
  • equaltolike.py — Replaces all occurrences of operator equal (‘=’) with ‘LIKE’ counterpart
  • escapequotes.py — Slash escape single and double quotes (e.g. ‘ -> \’)
  • greatest.py — Replaces greater than operator (‘>’) with ‘GREATEST’ counterpart
  • halfversionedmorekeywords.py — Adds (MySQL) versioned comment before each keyword
  • htmlencode.py — HTML encode (using code points) all non-alphanumeric characters (e.g. ‘ -> ‘)
  • ifnull2casewhenisnull.py — Replaces instances like ‘IFNULL(A, B)’ with ‘CASE WHEN ISNULL(A) THEN (B) ELSE (A) END’ counterpart
  • ifnull2ifisnull.py — Replaces instances like ‘IFNULL(A, B)’ with ‘IF(ISNULL(A), B, A)’ counterpart
  • informationschemacomment.py — Add an inline comment (/**/) to the end of all occurrences of (MySQL) «information_schema» identifier
  • least.py — Replaces greater than operator (‘>’) with ‘LEAST’ counterpart
  • lowercase.py — Replaces each keyword character with lower case value (e.g. SELECT -> select)
  • luanginx.py — LUA-Nginx WAFs Bypass (e.g. Cloudflare)
  • modsecurityversioned.py — Embraces complete query with (MySQL) versioned comment
  • modsecurityzeroversioned.py — Embraces complete query with (MySQL) zero-versioned comment
  • multiplespaces.py — Adds multiple spaces (‘ ‘) around SQL keywords
  • overlongutf8.py — Converts all (non-alphanum) characters in a given payload to overlong UTF8 (not processing already encoded) (e.g. ‘ -> %C0%A7)
  • overlongutf8more.py — Converts all characters in a given payload to overlong UTF8 (not processing already encoded) (e.g. SELECT -> %C1%93%C1%85%C1%8C%C1%85%C1%83%C1%94)
  • percentage.py — Adds a percentage sign (‘%’) infront of each character (e.g. SELECT -> %S%E%L%E%C%T)
  • plus2concat.py — Replaces plus operator (‘+’) with (MsSQL) function CONCAT() counterpart
  • plus2fnconcat.py — Replaces plus operator (‘+’) with (MsSQL) ODBC function counterpart
  • randomcase.py — Replaces each keyword character with random case value (e.g. SELECT -> SEleCt)
  • randomcomments.py — Add random inline comments inside SQL keywords (e.g. SELECT -> S/**/E/**/LECT)
  • sp_password.py — Appends (MsSQL) function ‘sp_password’ to the end of the payload for automatic obfuscation from DBMS logs
  • space2comment.py — Replaces space character (‘ ‘) with comments ‘/**/’
  • space2dash.py — Replaces space character (‘ ‘) with a dash comment (‘—’) followed by a random string and a new line (‘\n’)
  • space2hash.py — Replaces (MySQL) instances of space character (‘ ‘) with a pound character (‘#’) followed by a random string and a new line (‘\n’)
  • space2morecomment.py — Replaces (MySQL) instances of space character (‘ ‘) with comments ‘/**_**/’
  • space2morehash.py — Replaces (MySQL) instances of space character (‘ ‘) with a pound character (‘#’) followed by a random string and a new line (‘\n’)
  • space2mssqlblank.py — Replaces (MsSQL) instances of space character (‘ ‘) with a random blank character from a valid set of alternate characters
  • space2mssqlhash.py — Replaces space character (‘ ‘) with a pound character (‘#’) followed by a new line (‘\n’)
  • space2mysqlblank.py — Replaces (MySQL) instances of space character (‘ ‘) with a random blank character from a valid set of alternate characters
  • space2mysqldash.py — Replaces space character (‘ ‘) with a dash comment (‘—’) followed by a new line (‘\n’)
  • space2plus.py — Replaces space character (‘ ‘) with plus (‘+’)
  • space2randomblank.py — Replaces space character (‘ ‘) with a random blank character from a valid set of alternate characters
  • symboliclogical.py — Replaces AND and OR logical operators with their symbolic counterparts (&& and ||)
  • unionalltounion.py — Replaces instances of UNION ALL SELECT with UNION SELECT counterpart
  • unmagicquotes.py — Replaces quote character (‘) with a multi-byte combo %BF%27 together with generic comment at the end (to make it work)
  • uppercase.py — Replaces each keyword character with upper case value (e.g. select -> SELECT)
  • varnish.py — Appends a HTTP header ‘X-originating-IP’ to bypass Varnish Firewall
  • versionedkeywords.py — Encloses each non-function keyword with (MySQL) versioned comment
  • versionedmorekeywords.py — Encloses each keyword with (MySQL) versioned comment
  • xforwardedfor.py — Append a fake HTTP header ‘X-Forwarded-For’

Примеры запуска sqlmap

Перечислить базы данных (—dbs) для сайта http://www.sqldummywebsite.name/rubrika.php?id=31 (-u http://www.sqldummywebsite.name/rubrika.php?id=31)

Построить список таблиц (—tables) для базы данных laminat (-D laminat) для сайта http://www.sqldummywebsite.name/rubrika.php?id=31 (-u http://www.sqldummywebsite.name/rubrika.php?id=31)

Показать колонки (—columns) для таблицы admin (-T admin) для базы данных laminat (-D laminat) для сайта http://www.sqldummywebsite.name/rubrika.php?id=31 (-u http://www.sqldummywebsite.name/rubrika.php?id=31)

Вывести дамп (—dump) для таблицы admin (-T admin) для базы данных laminat (-D laminat) для сайта http://www.sqldummywebsite.name/rubrika.php?id=31 (-u http://www.sqldummywebsite.name/rubrika.php?id=31)

Вывести содержимое (—dump) колонки login (-C login) для таблицы admin (-T admin) для базы данных laminat (-D laminat) для сайта http://www.sqldummywebsite.name/rubrika.php?id=31 (-u http://www.sqldummywebsite.name/rubrika.php?id=31)

Установка sqlmap

Программа предустановлена в Kali Linux.

Установка sqlmap в Linux

Установка sqlmap в Windows

Для запуска sqlmap под Windows, кроме sqlmap, нужен Python.

За sqlmap заходим на официальный сайт, или скачиваем по прямой ссылке zip-файл.

За Python’ом заходим на его официальный сайт в раздел загрузок. Там представлены две ветки 3.* и 2.*. В данном случае (для запуска sqlmap) нам нужна версия 2.*. На момент скачивания доступна Python 2.7.11.

Установка скаченного файла элементарна. Только запомните, в какой каталог вы его установили.

Так, теперь переходим в каталог с установленным Python. У меня это каталог C:\Python27\ (думаю, у вас также, если вы не меняли дефолтные значения).

Запустите командную строку (Win+x и в открывшемся окне выберите «Командная строка»). Теперь хватаете файл python.exe (который лежит в каталоге C:\Python27\) и перетаскиваете его в окно командной строки. В командной строке должен появится полный путь до файла. Дописываете к нему через пробел -v

И нажимаете Enter. Если видите много разной информации, в том числе и о версии, значит всё в порядке. Нажмите Ctrl+c, чтобы выйти.

Запуск sqlmap

Помните наш скаченный архив с sqlmap? Распакуйте его. Теперь в командную строку перетаскиваете файл python.exe, ставите пробел, перетаскиваете в эту же командную строку файл sqlmap.py (из архива с sqlmap) ставите ещё один пробел и пишите -h. У меня получилось так

Если появилась справка по sqlmap, значит всё работает как надо! Можно приступать к анализу сайтов.

Как использовать sqlmap на Windows

В командной строке на Windows sqlmap нужно запускать следующим образом:

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

Инструкция по использованию sqlmap. Ч.1: Основы работы (GET)

Что такое sqlmap, для чего она нужна

Программа sqlmap позволяет проверять сайты на наличие в них уязвимости SQL-инъекция, уязвимости XSS, а также эксплуатировать SQL-инъекцию. Поддерживаются разнообразные типы SQL-инъекций и разнообразные базы данных.

Что можно делать с помощью sqlmap

С помощью sqlmap можно:

  • проверять, имеется ли в сайтах уязвимость

Если сайт уязвим к SQL-инъекции, то возможно:

  • получать информацию из базы данных, в том числе дамп (всю) базу данных
  • изменять и удалять информацию из базы данных
  • заливать шелл (бэкдор) на веб-сервер

Один из сценариев использования sqlmap:

  • Получение имени пользователя и пароля из базы данных
  • Поиск панелей администрирования сайта (админок)
  • Вход в админку с полученным логином и паролем

При наличии уязвимости атака может развиваться по различным направлениям:

  • Модификация данных
  • Заливка бэкдора
  • Внедрение JavaScript кода для получения данных пользователей
  • Внедрение кода для подцепления на BeEF

Как мы можем убедиться, SQL-инъекция – очень опасная уязвимость, которая даёт злоумышленнику большие возможности.

Проверка сайтов с помощью sqlmap

Если сайт получает данные от пользователя методом GET (когда и имя переменной и передаваемые данные видны в адресной строке браузера), то нужно выбрать адрес страницы, в которой присутствует эта переменная. Она идёт после вопросительного знака (?), например:

  • http://www.dwib.org/faq2.php?id=8
  • http://www.wellerpools.com/news-read.php?id=22
  • http://newsandviews24.com/read.php?id=p_36

В первом адресе, имя переменной – id, а передаваемое значение – 8. Во втором адресе имя переменной также id, а передаваемое значение 22. В третьем примере имя переменной такое же, но передаваемое значение p_36. Одинаковое имя переменной – это случайное совпадение для разных сайтов, оно может быть любым, могут быть любыми передаваемые данные, может присутствовать несколько переменных со значениями, разделённые символом &.

Если мы хотим проверить, уязвима ли переменная id к SQL-инъекции, то нам нужно вводить адрес полностью — http://www.dwib.org/faq2.php?id=8 (а не http://www.dwib.org/faq2.php или http://www.dwib.org).

Команда для проверки переменной, передаваемой методом GET, очень проста:

Для данных сайтов команды будут:

В процессе проверки sqlmap может задавать различные вопросы и на них нужно отвечать y (т.е. Да) или n (т.е. Нет). Буква y и n могут быть заглавными или маленькими. Заглавная буква означает выбор по умолчанию, если вы с ним согласны, то просто нажмите Enter.

Примеры ситуаций и вопросов:

Эвристика определила, что цель защищена каким-то WAF/IPS/IDS. Вы хотите, чтобы sqlmap попыталась определить наименование WAF/IPS/IDS?

Мой любимый запрос:

Суть в том, что эвристика определила, что параметр может быть уязвим и уже определена удалённая СУБД, нас спрашивают, хотим ли мы продолжить проверку. А на втором скриншоте сайте ещё и уязвим к XSS.

Если вы хотите автоматизировать процесс, чтобы sqlmap не спрашивала вас каждый раз, а использовала выбор по умолчанию (там всегда лучшие варианты), то можно запустить команду с опцией —batch:

Возможные проблемы при сканировании sqlmap

Могут появиться следующей ошибки:

Она означает, что веб-сайт не хочет «разговаривать» с sqlmap. В качестве варианта нам предлагают использовать —random-agent. Если в браузере вы можете наблюдать сайт, а sqlmap пишет о невозможности подключиться, значит сайт игнорирует запросы, ориентируясь на пользовательский агент. Опция —random-agent меняет стандартное значение sqlmap на произвольные:

Ещё одной причиной такой ошибки может быть блокировка вашего IP веб-сайтом — тогда нужно использовать прокси. Если вы уже используете прокси и появляется эта ошибка, то это может означать, что у прокси проблемы со связью и стоит попробовать без него.

Результаты сканирования sqlmap

Найденные SQL-инъекции отображаются следующим образом:

Т.е. выделяются жирно-салатовым цветом, пишется имя уязвимого параметра, вид SQL-уязвимости и имеется слово injectable.

Получение списка баз данных с sqlmap

Для получения списка баз данных используется опция —dbs. Примеры:

Получение информации из баз данных

Например, для сайта wellerpools.com обнаружено две базы данных:

Я хочу узнать список таблиц в базе данных main_wellerpools. Для этого используется опция —tables. Кроме неё, нам нужно указать интересующую нас таблицу после опции -D:

По какой-то причине, мне хочется узнать список колонок из таблицы users. Для этого используется опция —columns. Кроме неё, нам нужно указать интересующую нас базу данных (-D main_wellerpools) и после ключа -T таблицу, для которой мы хотим увидеть список колонок:

Для вывода содержимого используется опция —dump. Её можно указать вместе с базой данных, и тогда будет сделан дамп всей базы данных, а можно ограничить данные одной таблицей или даже одной колонкой. Следующей командой я хочу увидеть содержимое всей таблицы users:

Взгляните на пароли – я при беглом осмотре подумал, что это хеши. Админы правда старались защититься, но это им не помогло.

Кстати, поскольку уязвим параметр, принимающий данные, отправленные методом GET, то можно сформировать запрос прямо в строке браузера таким образом, что логин и пароль пользователя будут выведены прямо на самом сайте:

Т.е. у нас имя пользователя, пароль и почта пользователей (а скорее всего даже администраторов) сайта. Если удастся найти административную панель сайта, то можно получить управление над сайтом или веб-сервером. Учитывая любовь пользователей к одинаковым паролям и зная их почтовые ящики – можно попробовать взломать почту.

В общем, SQL-инъекция – это очень опасная уязвимость.

Читайте также:  Как удалить старую системную папку windows 10
Оцените статью