Ques/Help/Req HTB Intentions. Эксплуатируем сложную SQL-инъекцию для дампа базы данных

XakeR

Member
Регистрация
13.05.2006
Сообщения
1 912
Реакции
0
Баллы
16
Местоположение
Ukraine
Сегодня нам с тобой предстоит пройти через череду очень сложных веб‑уязвимостей, проэксплуатировав двухступенчатую SQL-инъекцию и уязвимость в модуле PHP Imagick. Для продвижения изучим Git-репозиторий, а для повышения привилегий напишем читалку файлов через пользовательский сканер.

А поможет нам в этом тренировочная машина Intentions с площадки Hack The Box сложного уровня (hard).

warning​


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



Разведка​




Добавляем IP-адрес машины в /etc/hosts:

10.10.11.220 intentions.htb

И запускаем сканирование портов.

Справка: сканирование портов​


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

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

#!/bin/bashports=$(nmap -p- —min-rate=500 $1 | grep ^[0-9] | cut -d ‘/‘ -f 1 | tr ‘n’ ‘,‘ | sed s/,$//)nmap -p$ports -A $1

Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).

Результат работы скрипта

По результатам сканирования имеем всего два открытых порта: 22 — служба OpenSSH 8.9p1 и 80 — веб‑сервер Nginx 1.18.0. Брутить SSH на машинах с HTB не принято, а на сайте нас встречает форма авторизации и регистрации.

Страница авторизации

Точка входа​


Регистрируем нового пользователя и авторизуемся на сайте.

Главная страница авторизованного пользователя

На странице профиля пользователя находим поле, на которое мы можем воздействовать.

Страница профиля пользователя

Заглянув в Burp History (а все действия я рекомендую проводить через Burp), обнаружим, что используется API.

История запросов

В поле изменения жанра я попробовал вставить нагрузку ‘ — — для SQL-инъекции и в ответе получил те же данные, только без пробелов.

Запрос на серверОтвет сервера

Стоит отметить, что нагрузку мы отправляем к API /api/v1/gallery/user/genres, а проверяем измененные данные через API /api/v1/auth/user.



Точка опоры​




Первым делом я решил перебрать разные нагрузки с помощью Burp Intruder. Но сложность в том, что нужно выполнять два запроса — один с нагрузкой, а другой для проверки результата. Тут нам могут помочь макросы, которые задаются через настройки Burp. Переходим к списку правил сессии и создаем новое.

Список правил сессий

В открывшемся окне в поле Rule action создаем новый макрос run post request macro — то есть выполняемый после основного запроса.

Настройки правила

Для созданного макроса открываем Editor и выбираем запрос к API: /api/v1/auth/user. Здесь мы получаем текущее значение настроек профиля.

Настройки макроса

Подтверждаем — и в окне с настройками созданного правила видим наш макрос.

Настройки правила

Переходим на вкладку Scope и в параметре URL scope выбираем Include all URLs, чтобы правило применялось абсолютно ко всем запросам.

Настройки правила

Подтверждаем установленные параметры и видим созданное правило в общем списке правил.

Список правил сессий

Теперь переносим запрос к API /api/v1/gallery/user/genres в Burp Intruder. В настройках переходим к опции Grep → Extract и указываем интересующее нас поле, чтобы добавить его содержимое в общую таблицу результатов Intruder.

Burp Intruder — вкладка PositionsBurp Intruder — вкладка Settings

Так как мы используем правило с несколькими запросами, перебирать нужно в один поток.

Результат перебора

Просмотрев результат, я ничего необычного не нашел, кроме того, что мы получаем ошибку при отправке символа «. Таким образом, как бы ни менялось поле жанра, ничего интересного мы не добиваемся.

Немного побродив по сайту, замечаем, что жанр также используется при просмотре галереи. Там выполняется вызов API /api/v1/gallery/user/feed.

Запрос в Burp History

Мы получаем разные изображения в зависимости от установленного у нас жанра. Этот момент тоже необходимо протестировать, поэтому возвращаемся к нашим правилам и изменяем макрос, чтобы он выполнял запрос к API /api/v1/gallery/user/feed. Для изменения выбираем Re-record macro и отмечаем нужный запрос.

Настройки макросаMacro Recorder

После изменения макроса переводим запрос в Burp Repeater и отправляем обычную нагрузку с комментарием для Boolean-based-инъекции test’or 1=1 — -.

Запрос на серверОтвет сервера

В ответ получаем ошибку — видимо, из‑за кавычки. Тогда пробуем указать нагрузку без кавычки.

Запрос на серверОтвет сервера

Запрос обработан, но данные никакие не получаем. Переходим к перебору нагрузок.



Настраиваем Burp Intruder в один поток, только в этот раз ничего извлекать из ответа не будем, а просто отсортируем результат по размеру ответа.

Burp Intruder — вкладка PositionsРезультат атаки

Присоединяйся к сообществу «Xakep.ru»!​


Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

-60%

1 год​


9990 рублей 4000 р.


[TD]

1 месяц​


920 р.
[/TD]

Я уже участник «Xakep.ru»
 
198 114Темы
635 085Сообщения
3 618 401Пользователи
EeOneНовый пользователь
Верх