- Взламываем сайты с помощью SQLMAP на Kali Linux
- Поиск уязвимых скриптов. Google dorks.
- Получение структуры баз данных сайтов. SQLMAP.
- Поиск админки сайта: CMS, интуиция, или dirbuster?
- Итоги. Черное на белом.
- Инструменты Kali Linux
- Список инструментов для тестирования на проникновение и их описание
- sqlmap
- Описание sqlmap
- Справка по sqlmap
- Руководство по sqlmap
- Доступные tamper скрипты sqlmap
- Примеры запуска sqlmap
- Установка sqlmap
- Установка sqlmap в Linux
- Установка sqlmap в Windows
Взламываем сайты с помощью SQLMAP на Kali Linux
May 22, 2018 · 6 min read
В этой статье, исключительно в ознакомительных целях, я опишу основные моменты поиска, и эксплуатации sql-инъекции на сайтах. В процессе прочтения этого материала, мы получим полноценный доступ к случайному сайту.
P.S.: в ходе создания материала, ни один сайт не пострадал.
Для этого нам понадобятся всего четыре утилиты: собственно sqlmap, dirbuster, и tor с privoxy.
Первые две программы входят в дистрибутив kali по умолчанию. Устанавливаем и запускаем сервис тора:
Аналогично устанавливаем и privoxy, но пока не будем его запускать, он нам может и не пригодиться:
Поиск уязвимых скриптов. Google dorks.
Очередь за гугл-д о рками. Для тех, кто не в курсе — некоторыми запросами в гугл, можно облегчить поиск уязвимого ресурса. Это называется “дорк”. Для примера, возьмём запрос:
Открываем любезно выданные гуглом линки потенциально уязвимых сайтов, и в адресной строке браузера, после цифр, ставим одинарную ковычку:
И ищем сайт, скрипт на котором выдаст ошибку подобного вида:
Конечно, можно обойтись и без этого, sqlmap анализирует далеко не только подобные уязвимости в скриптах, но этот шаг многократно увеличивает наши шансы на успех.
Получение структуры баз данных сайтов. SQLMAP.
Переходим непосредственно к процессу эксплуатации инъекции на обнаруженном нами сайте. В работе с sqlmap есть достаточно много различных ньансов, и разберём мы базовые. Открываем терминал. Внимание, у вас должен быть активен сервис тора. Либо во втором терминале, либо через запуск приложения.
где -u задаёт целевой адрес (вводится обязательно с протоколом http/https);
— dbs параметр для получения имён баз данных, найденных в случае успешной эксплуатации;
— tor запустит соединение через тор, — check-tor отобразит успешность подключения к сети тор;
— random-agent позволит утилите использовать случайный http-заголовок для передачи серверу, что не даст идентифицировать sqlmap;
ключ -o задействует оптимизацию процесса, что наверняка пригодится во многих случаях — например, при слепой инъекции.
Sqlmap отдал нам две таблицы на выбор. В базе information_schema нет ничего интересного, это стандартная база mysql, поэтому мы перейдём к анализу “z108098_main”:
Тут мы исключили параметр — dbs, и вместо него используем — tables. Так же, добавился новый ключ -D, который задаёт имя сканируемой базы. Этот запрос выдаст нам все таблицы базы “z108098_main”. В итоге мы получаем:
И сразу же мы наблюдаем таблицу “_admins”. Очевидно, что нам необходимо получить её. Получаем названия столбцов базы:
Добавился ключ -T, который задаёт имя сканируемой таблицы. Вместо параметра — tables, теперь используется параметр — columns. Результат не заставил себя долго ждать, хоть инъекция и была слепой в моём случае — в этом мне помог ключ -o, который использовал 10 потоков для перебора вариаций:
Теперь читаем данные из таблицы, и сохраняем её на свой жёсткий диск:
Параметр — columns мы заменили на — dump, который выдаст все строки таблицы, а так же сохранит оную на наш жёсткий диск. В итоге, получаем заветный логин и хеш пароля, для админки сайта:
Полученный хеш вы можете просто загуглить, в большинстве случаев он уже расшифрован, и выдастся первой же строкой. Если же это не сработает, придётся делать брутфорс хеша, но это уже отдельная тема, которую разбирать в рамках этой статьи мы не станем.
Поиск админки сайта: CMS, интуиция, или dirbuster?
Зачастую, поиск админки сайта создаёт проблему. Пока выполняются запросы от sqlmap, можно заняться этим.
В первую очередь, мы идём на 2ip.ru/cms, вводим имя сайта, и ожидаем завершения сканирования на популярные cms.
Если сканером обнаруживается cms, то гуглим расположение админки в них, и пробуем зайти по дефолтным адресам.
Но иногда хитрые админы либо меняют дефолтный адрес, либо используют собственную cms, как и произошло в моём случае.
Если так оно и есть, то попробуем посмотреть файл robots.txt, иногда админку можно выловить тут:
Если файл отсутствует, или там ничего нужного нам нет, то пробуем стандартные варианты вручную.
И тут успех, на втором же линке я получил форму авторизации:
Но этот способ может и не сработать и, вероятнее всего, не сработает. Для таких случаев есть мощное оружие — durbuster, который перебором по словарю выявит всевозможные скрипты сайта.
Наша первая задача — пропустить трафик от durbuster’a через tor. Для этих целей нам понадобится запустить privoxy.
Предварительно, настроим конфиг privoxy, что бы весь трафик пропускался через тор:
Добавляем строку в конец конфига. Внимание, точка в конце обязательна!
Сохраняем изменения, закрываем файл, и запускаем, собственно, privoxy:
Теперь открываем dirbuster — либо через терминал, либо выбираем его из списка Приложения > 03 — Web Application Analysis > Web Crawlers & Directory Bruteforce > dirbuster.
В самой программе, переходим в Options > Advanced Options > Http Options, и приводим настройки в соответствии со скриншотом:
Нажимаем ок, и переходим к самой программе. Необходимо выбрать словарик для брутфорса. По умолчанию, в комплекте с программой в kali есть словари. Расположены они по адресу /usr/share/dirbuster/wordlists. Лично я предпочитаю использовать маленький словарик directory-list-2.3-small.txt.
В «Target URL» сверху вписываем адрес нашего сайта, и нажимаем старт. Процесс пошёл.
Итоги. Черное на белом.
В процессе написания статьи, я понял несколько вещей. Конечно, все то же самое можно сделать не только из-под kali, да и не только под линуксом (piton as example). Но не хочу повышать порог вхождения в тему. Именно поэтому, кейс сформирован под kali linux.
Использовать любую уязвимость можно в различных целях. Я бы хотел предостеречь тебя, читатель, от поспешных и рискованных выводов и затей, в т.ч. от использования этого материала в незаконных целях. И да, за легальные пентесты весьма неплохо платят. 😉
Источник
Инструменты 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 нужно запускать следующим образом:
Источник