Категория > Новости > 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 И запускаем сканирование портов. Читайте также - Официальный сайт Ирвин Казино - это лицензионные игровые автоматы, слоты, ставки на спорт, а также выгодные предложения. Начинай играть в игровые автоматы на лучших официальных casino online с бонусом. Справка: сканирование портовСканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа. Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция Результат работы скрипта Что же мы нашли? Порт 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-цепочек сделаем этот сегмент памяти исполняемым и передадим управление на шелл‑код. Перейти обратно к новости |