Приветствую! В данной статье будет разбор простенькой машинки с Vulnhub. Я сделаю акцент на некоторых приёмах, чтобы разбор не был прям слишком примитивным. Приятного чтения!
Сбор информации
Итак, у нас тут есть порты 22(ssh), 80(http) и 33060(mysql). Не вижу смысла пока смотреть что-то кроме 80-го порта.
Нас встречает стандартная заглушка Apache. Значит будем искать директории. Запустим dirb для поиска.
dirb http://<ip>
Это дало нам понимание, где есть точка входа на сайт.
Например: вот форма авторизации для администратора /store/admin.php
Смотрим далее.
В robots.txt будет указана ещё одна директория, ведущая нас в кроличью нору (пустышка, которая не даст решения в будущем).
Также можно найти ещё какую-то недопиленную авторизацию:
Но всё же наша цель - электронный книжный магазин CSE bookstore.
Поиск уязвимостей
RCE (Простой вариант)
Сразу в глаза бросается название книжного онлайн магазина CSE Bookstore. По нему попробуем найти нужный скрипт для исследования безопасности. Готовый эксплойт с RCE-уязвимостью сразу лежал на exploit.db
Разберём суть эксплойта для детального понимания:
Для начала скрипт принимает URL-адрес целевого веб-приложения через аргумент командной строки.
python3 script.py http://example.com
Далее он создает случайное имя для вредоносного PHP-файла, состоящее из 10 случайных букв и цифр. Это делается для того, чтобы файл было сложно обнаружить на сервере.
Вредоносный код, который будет загружен на сервер, выглядит так:
<?php echo shell_exec($_GET['cmd']); ?>
Этот код позволяет выполнять команды на сервере, передавая их через параметр cmd в URL. Например:
http://example.com/shell.php?cmd=whoami - выполнит команду whoami на сервере и вернёт результат.
Скрипт отправляет POST-запрос на целевой сервер по пути /admin_add.php, загружая PHP-файл как будто это изображение. Запрос включает файл с вредоносным кодом и дополнительные данные, имитирующие форму загрузки.
После отправки файла скрипт проверяет, был ли он успешно загружен:
- Для этого он отправляет GET-запрос к предполагаемому пути файла (например, /bootstrap/img/<имя_файла>.php).
- В запросе передается тестовая команда, например: cmd=echo <имя_файла>
Если сервер возвращает имя файла, значит файл успешно загружен, и команды выполняются.
Если веб-шелл загружен, скрипт предлагает пользователю открыть интерактивную сессию.
Ничего сложного в коде эксплойта не оказалось! Старый добрый питон :)
Попробуем проэксплуатировать данную уязвимость:
И мы получили шелл. Отлично, но нам нужно что-то надёжнее и для этого прокинем свой обратный шелл, чтобы не быть ограниченными только шеллом эксплойта.
На сервере есть пакеты питона! Попробуем воспользоваться им для коннекта. Предварительно откроем прослушивание порта на атакующей машине (nc -lvnp)
И он не сработал... Немного поковырявшись и перепробовав некоторые варианты, решил от отчаяния запустить perl. И он сработал!
Теперь у нас есть нормальная оболочка для работы. Перейдя в домашнюю директорию единственного пользователя tony, найдём у него файл с паролями (Классическая наигранность CTF. Что тут поделать, машинка лёгкая). И зайти в домашнюю директорию с другой учётки (в данном случае с www на tony) при нормальной настройке прав файловой системы нельзя. Очередное упрощение задачи взлома.
admin@admin.com:admin подошёл к админу на веб-странице. Нашкодить у нас тут особо не выйдет т.к. сразу выпадает ошибка SQL. Как бы я не крутил эту потенциальную уязвимость - толку немного. Разве что можно удалить товары спокойно. Ценник поставить на 0 нельзя :) Описание поменять также не удалось.
Попробуем зайти по ssh:
И мы успешно зашли!
SQL-инъекция и RCE (Вариант сложнее)
Этот вариант решения немного сложнее т.к. без использования эксплойта. По сути, мы повторим то, что делает тот скрипт, но ручками.
Добыть данные для авторизации можно ещё и так:
Запустим mysql для поиска инъекций и их эксплуатации.
--dump (Этот флаг указывает sqlmap на извлечение данных из базы данных)
--banch (Этот флаг заставляет sqlmap работать в автоматическом режиме, без запроса подтверждений от пользователя)
Утилита вытащит все таблицы БД, но самой важной для нас будет с кредами админа.
Хорошо, у нас есть админ на странице. Попробуем загрузить вместо книги на сайт ревёрс-шелл.
Однако при добавлении файла у нас возникает ошибка
Однако если зайти по пути /bootstrap/img (подсказка была на главной странице), можно увидеть наш шелл.
Запускаем шелл (просто клацаем по файлику p0wny-shell.php):
Теперь можно проделать шаги по повышению привилегий.
Повышение привилегий
Посмотрим что может tony запускать от sudo.
Попробуем запустить какой-нибудь из бинарников, используя сайт GTFOBins. Верным решением повысить привилегии через модуль time. Остальные модули ничего не дадут.
Машинка решена!
Выводы
Кейс довольно простой и поэтому на него у меня ушло около часа времени. Данный шаблон книжного магазина прям скрипит от наличия дырок в безопасности. Я находил кучу эксплойтов для него. Не все давали результат, но есть что поисследовать.
Совет: если будете вводить креды в /admin, то у вас ничего не выйдет. Копайте на /store/admin.php - это какая-то тестовая форма, которую не закрыли админы и оставили тем самым брешь в безопасности.
Я пробовал найти XSS-уязвимость, но у меня ничего не вышло. Интересно посмотреть ваши находки в комментариях :)
Спасибо за внимание!