Категория > Новости > HTB Retired. Пишем эксплоит ROP + mprotect и используем переполнение буфера - «Новости»
HTB Retired. Пишем эксплоит ROP + mprotect и используем переполнение буфера - «Новости»18-08-2022, 00:00. Автор: Sherlock |
Hack The Box. Задачка классифицирована как сложная, хотя я бы так не сказал.warningПодключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками. РазведкаСканирование портовДобавляем IP-адрес машины в
10.10.11.154 retired.htb
И запускаем сканирование портов. Справка: сканирование портовСканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа. Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта. ports=$(nmap -p- --min-rate=500 $1 | grep^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1 Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция Результат работы скрипта Что же мы нашли? Порт 22 — служба OpenSSH 8.4p1, порт 80 — веб‑сервер Nginx. Также из результатов скана Nmap видим редирект, в котором страница передается в качестве параметра. Главная страница сайта Точка входаLFIПри таком запросе страниц сайта нужно сразу проверить, получится ли отобразить не тот файл, который был вставлен разработчиком. Попробуем запросить
curl 'http://retired.htb/index.php?page=/../../../../../../../etc/passwd'
Содержимое файла /etc/passwdУязвимость подтверждена, поэтому перейдем к эксплуатации. Нам нужно знать, какие файлы читать, поэтому поищем на сайте скрытые страницы. Так как мы уже столкнулись с форматами PHP и HTML, то такие страницы и будем искать. Для этого воспользуемся сканером ffuf. Справка: сканирование веба c ffufОдно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch и DIRB. Я предпочитаю легкий и очень быстрый ffuf. При запуске указываем следующие параметры:
Команда следующая:
ffuf -u 'http://retired.htb/FUZZ.php' -t 256 -wdirectory_2.3_medium_lowercase.txt
Результат поиска файлов PHP с помощью ffuf
ffuf -u 'http://retired.htb/FUZZ.html' -t 256 -wdirectory_2.3_medium_lowercase.txt
Результат поиска файлов HTML с помощью ffufНашли всего одну новую страницу — Страница beta.html На странице нужно загружать файл лицензии, который будет отправлен на следующий адрес:
http://retired.htb/activate_license.php
Посмотрим, что произойдет с файлом дальше. Для этого получим код найденного обработчика.
curl 'http://retired.htb/index.php?page=activate_license.php'
Исходный код activate_license.phpТаким образом, загруженный через форму файл будет отправлен приложению, которое работает на локальном порте 1337. Попробуем выяснить, что это за приложение, с помощью LFI. Я запустил Burp Intruder и передал ему список информативных файлов из Unix. Burp Intruder — вкладка Positions В результате сканирования узнаем, что нам доступен в том числе и файл Результат сканирования Зная PID процесса, мы можем получить полную командную строку, что даст нам путь к файлу.
curl 'http://retired.htb/index.php?page=/proc/487/cmdline'
Командная строка процесса 487Получаем полный путь к файлу обработчика, а также видим, что порт для прослушивания передается в качестве аргумента. Скачиваем этот файл на локальный хост для анализа.
wget 'http://retired.htb/index.php?page=/usr/bin/activate_license'
Точка опорыПереполнение буфераТеперь перейдем к анализу приложения. Каждый выбирает для себя более удобный инструмент, но я остаюсь приверженцем IDA Pro. Закидываем бинарь в декомпилятор и ищем функцию Итак, приложение стандартным способом открывает порт, ожидает соединения, и, если оно происходит и если функция Псевдокод функции main В функции Псевдокод функции activate_license Таким образом, мы нашли место для переполнения буфера, осталось определиться со смещением нагрузки и методом эксплуатации. Для этого нужно запустить программу в удаленном отладчике, переполнить буфер и посмотреть, на каком смещении от начала буфера будет вершина стека, когда программа упадет. Параметры удаленного отладчика IDA Pro Но при отладке мы не попадаем в функцию Код программы до исправленияКод программы после патча jnz Теперь сгенерируем последовательность де Брёйна, которая поможет быстро определить смещение. Генерирование последовательности де Брёйна Отправляем эти данные нашей программе и после ошибки выполнения смотрим данные в регистре
echo aaabaaac... | nc 127.0.0.1 1337
Значения регистровКонвертируем полученное значение и вычисляем смещение — 520. Получение смещения Выбирать метод долго не пришлось. Мы можем получить доступ к области неисполняемой памяти. Карта памяти Для успешной эксплуатации мы отправим вместе с данными шелл‑код, с помощью ROP-цепочек сделаем этот сегмент памяти исполняемым и передадим управление на шелл‑код. Перейти обратно к новости |