Forensic Knowledge
Author: Zulkarnaen
Last updated
Was this helpful?
Author: Zulkarnaen
Last updated
Was this helpful?
HackThebox Crossfit Adalah Box Dengan Tingkat Kesulitan Insane , Tingkat Mechine Matrix Lebih Mengarah Enumeration , Custom Exploit , Dan Real Life , Application Yang Retan Di Mesin Tersebut Adalah FTP , Exploitation : Enumeration , Forensic Knowledge , Code Review , XSS (Cross Site Scripting) , CSRF (Cross-Site Request Forgery) , CORS (Cross-Origin Resource Sharing) , Basic Reverse Engineering.
Situs web ini menggunakan sebuah mekanisme pencegahan XSS yang log Alamat IP dan User-Agen Terdeteksi XSS. Log akan ditampilkan pada halaman web yang Secara berkala dikunjungi oleh admin, Dapat Digunakan sebagai sumber Buta XSS. CORS digunakan untuk menghitung sub domain yang menerima salib-asal sumber daya dengan mengirimkan Asal header dan mencari untuk Access-Control-Allow-Origin respon header. Hal ini menyebabkan identifikasi virtualhost yang memungkinkan untuk Membuat Account FTP pengguna yang memiliki izin untuk meng-upload file ke webdirectory.
Karena hal ini virtual host tidak dapat diakses dari jarak jauh, kerentanan XSS dimanfaatkan dalam rangka Untuk melakukan serangan CSRF. Hal ini Memerlukan Membaca Sebuah anti-CSRF Token dan mengirimkannya bersama Dengan POSTING permintaan kami mengirimkan. Oleh chaining XSS dan CSRF, FTP user dapat menambahkan dan kemudian digunakan untuk meng-upload File berbahaya PHP, sehingga dalam remote command execution sebagai www-data Pengguna. Eskalasi ke user biasa hank membutuhkan membaca password hash di dunia-dibaca Ansible playbook file dan retak itu.
Perintah injeksi kerentanan ini kemudian diidentifikasi dan dimanfaatkan, yang memungkinkan kita untuk bergerak secara lateral untuk issac pengguna. Kedua cron job dapat dimanfaatkan oleh reverse engineering program C. Kami mengidentifikasi sewenang-wenang menulis primitif, yang memungkinkan file dari format yang diberikan akan dibuat sebagai root. Oleh symlinking sewenang-wenang file untuk /root/.ssh/authorized_keys sebelum program berjalan, dan menulis user-generated kunci publik untuk database yang kemudian akan ditulis ke authorized_keys file, kita mendapatkan akses SSH ke sistem sebagai root.
Custom Exploit
Real Life
Enumeration
nmap
sudo
zaproxy
LinPeas
Curl
Python
proxychains
Pspy
Radare2
Binwalk
Hashcat
rustscan
Open Port :
Keluaran Rustscan menunjukkan bahwa SSH, Apache dan FTP tersedia di port Default mereka. Server FTP dikonfigurasi untuk menggunakan SSL/TLS. Mari kita periksa sertifikat TLS :
Sertifikat CN, juga dikenal sebagai Nama umum, disetel Sebagai nilai * .crossfit.htb,
di mana alamat email terkait menggunakan subdomain gym-club.crossfit.htb.
Kami mencatat domain ini karena mungkin akan berguna nanti. Mari menuju ke port 80 menggunakan browser untuk melihat halaman web di http://10.10.10.208/
. Kami disajikan dengan halaman Apache/Debian
default.
Mesin Tersebut Menggunakan Situs web Kebugaran Dan Olahraga.
Temuan Enumeration Pada situs web menunjukkan Ada Nya beberapa From Inputan. Di bawah setiap Postingan Diwebsite Tersebut terdapat form komentar bagi pengguna untuk mengirimkan komentar.
Mari Kirimkan komentar Di salah satu Posting Blog Untuk menguji Fungsionalitas Formulir.
Balasan Dari server menunjukkan bahwa pesan Telah dikirim dan akan dievaluasi oleh Moderator. Karena ada kemungkinan seseorang melihat komentar ini Secara Manual, sebaiknya periksa apakah formulir tersebut rentan Terhadap Cross Site Scripting.
Payload paling Umum untuk Menguji kerentanan XSS Adalah Alert Function.
Setelah Komentar dikirimkan, Sebuah pesan Memberi tahu kami bahwa upaya Cross Site Scripting telah Terdeteksi Dan Diblokir.
Petunjuk Menunjukkan Bahwa Komentar Akan Ditinjau Oleh Moderator, Sedangkan Laporan Keamanan akan dianalisis oleh "admin team". Seorang admin mungkin akan memiliki lebih banyak akses daripada moderator, dan akan menjadi Target Kita yang lebih baik.
Pemindaian menunjukkan Direktori bernama security_threat
. Arahkan ke sana Menggunakan browser untuk memeriksa Apakah ada file yang tersedia.
Direktori tersebut berisi file Bernama Report.php
. Setelah Mengaksesnya, Kami Mendapatkan Pesan Berikut
Akses Ke Halaman Ini Dilarang, Tetapi menurut pesan peringatan yang kami dapatkan ketika kami mencoba Mengirim muatan XSS, ada kemungkinan administrator dapat melihatnya.
Peringatan yang dilemparkan ketika Upaya XSS terdeteksi menyatakan bahwa informasi Browser kami akan disertakan dalam laporan yang dibuat. Sebaiknya periksa apakah header User-Agent dapat disalahgunakan agar berhasil mengeksploitasi kerentanan XSS.
Mengirim komentar yang berisi tag <script>
untuk memicu deteksi XSS
, dan mencegat permintaannya di Burp
Edit User-Agent menjadi :
Ganti Alamat IP di atas dengan IP VPN Mesin Lokal Anda dan Jalankan Netcat Port 80.Ganti Alamat IP di atas dengan IP VPN Mesin Lokal Anda dan Jalankan Netcat Port 80.
Terakhir, Klick Forward :
Sebuah Pesan Memberi Tahu kami bahwa upaya XSS terdeteksi.
Namun, Terhubung Dan Diterima Pada Perintah Netcat, Dan User-Agent Terkonfirmasi Memiliki Kerentanan XSS.
Hasil dengan panjang 10701 karakter Dikecualikan, Karena itu adalah jumlah karakter di Halaman Apache default yang Ditampilkan untuk Host virtual yang tidak ada. Sayangnya, wfuzz tidak menampilkan Domain host baru.
Jika Kami Ingin Membuat Permintaan Lintas sumber ke domain yang berbeda, ini biasanya akan diblokir oleh kebijakan asal yang sama. Ada kemungkinan bahwa aturan CORS yang sesuai diterapkan untuk mengizinkan hal ini
Jika subdomain (sebut saja domain2) memungkinkan permintaan sumber Daya Lintas Sumber dari domain gym-club.crossfit.htb
, dan jika hubungan kepercayaan saling menguntungkan ( artinya domain gym-club.crossfit.htb juga mengizinkan permintaan dari domain2) , Maka server web Di http: //gymclub.crossfit.htb
akan merespons Dengan header Access-Control-Allow-Origin yang sesuai untuk permintaan yang memiliki header Origin disetel ke http://domain2.crossfit.htb
.
Alih-alih Mengaburkan header Host, kita bisa mengaburkan header Origin. Untuk membangun perintah kita, kita dapat merujuk ke dokumentasi Wfuzz. Gunakan sintaks berikut.
Ini akan Menambahkan Header Asal ke permintaan dan memfilter hasil berdasarkan keberadaan header respons Access-Control-Allow-Origin
Subdomain ftp.crossfit.htb diidentifikasi. Perbarui file /etc/hosts dengan entri ini.
Setelah Menavigasi ke http://ftp.crossfit.htb
Dengan browser kami, halaman Apache default dikembalikan.
Namun, domain ftp Dapat dijangkau Dari jaringan Internal, yang menjadikannya target potensial untuk serangan XSS ke CSRF kami.
Untuk mendapatkan Konten Halaman http://ftp.crossfit.htb
, kita Dapat Membuat File JavaScript berikut bernama Payload1.js
.
Ini akan membuat permintaan GET sinkron ke http://ftp.crossfit.htb dan mengirimkan kembali hasilnya Ke badan permintaan POST. Jalankan server HTTP Python3 pada port 80.
Kemudian mulai Jalankan Netcat di porta 8000.
Gunakan Burp Repeater untuk mengedit header User-Agent Dari permintaan kami sebelumnya sebagai berikut.
Kirim permintaan Dan setelah beberapa saat muatan JavaScript kami diunduh Dan Dijalankan Oleh Server Target Dan, Mengembalikan kepada kami konten Halaman indeks FTP.
Judul FTP Hosting - Manajemen Akun dikembalikan. Salin output Dari Netcat, Simpan Ke file HTML dan buka Di browser.
Note : Koneksi Netcat Dimatikan dengan Setiap Koneksi Dan Karenanya harus Direstart untuk setiap percobaan.
Setelah menyimpan kode HTML Di atas ke dalam file lokal dan mengunjunginya di browser, kita dapat melihat bahwa titik akhir yang teridentifikasi terlihat seperti ini. Opsi untuk "Buat Akun Baru" terlihatSetelah menyimpan kode HTML Di atas ke dalam file lokal dan mengunjunginya di browser, kita dapat melihat bahwa titik akhir yang teridentifikasi terlihat seperti ini. Opsi untuk "Buat Akun Baru" terlihat.
Buat File JavaScript baru bernama payload2.js
untuk meminta "Buat Akun Baru
" yang terletak di /accounts/create
.
Hentikan permintaan lagi dan ubah Agen-Pengguna menjadi payload2.js. Tekan CTRL + R untuk Mengirimkannya ke Repeater dan kemudian meneruskan permintaan.
Pada pendengar Netcat kami, kami mendapatkan kode Source : http://ftp.crossfit.htb/accounts/creat
Formulir tersebut memungkinkan kita untuk Membuat Pengguna baru, Tetapi kita harus menjaga token anti-CSRF, yang disebut _token dalam kode sumber HTML. Dalam kerangka ini (yaitu Laravel), Token anti-CSRF
terikat dengan Sesi, jadi kita membutuhkan cara untuk menjaga sesi antara XMLHttpRequests
. Kami tidak bisa mendapatkan halaman dengan satu permintaan, salin token dan kemudian posting formulir dengan permintaan kedua karena kami akan memiliki dua sesi terpisah dan token yang kami kirim tidak valid. Header Access-Control-Allow-Credentials
disetel ke true Di gym-club.crossfit.htb
domain,Dan hal yang sama dapat Diasumsikan untuk subdomain ftp.
Ini akan memungkinkan kita untuk mengatur properti withCredentials dari XMLHttpRequest kita ke true, untuk mempertahankan cookie sesi antara permintaan yang berurutan.
Langkah-langkah eksploitasi potensial :
Dapatkan halaman /accounts/create
Parse hasilnya dan ambil parameter _token.
Buat permintaan POST ke halaman/accounts untuk menambahkan pengguna bernama sheeraz dengan passwordsheeraz.
Kirim hasilnya kembali ke pendengar Netcat kami di porta 8000
XMLHttpRequests akan dijalankan secara sinkron. Ini lebih disukai karena panggilan asinkron dijalankan secara paralel dan dalam kasus ini, karena kita menangani permintaan HTTP , yang membutuhkan waktu, dan permintaan tidak sinkron dapat mengakibatkan hasil yang salah atau kesalahan
Permintaan satu dan tiga akan memiliki properti withCredentials Disetel ke true untuk menjaga sesi yang sama.
Simpan payload di bawah sebagai payload3j
Ubah User-Agent di jendela Burp Repeater kami untuk menyajikan file payload3.js, buka file Server HTTP Python3 pada port 80 dan pendengar Netcat pada port 8000, dan kirim permintaan.
Setelah sekitar satu menit, muatan JavaScript kami diunduh dan dijalankan dan kami mendapatkan file tanggapan berikut.
Sekarang kita dapat mengakses server FTP dengan nama pengguna sheeraz dan kata sandi Sheeraz. Upaya untuk menghubungkan dengan klien FTP Parrot OS standar tidak berhasil karena sesi harus menggunakan enkripsi.
Instal lftp karena memungkinkan kita menggunakan SSL untuk FTP. Sebelum terhubung ke server FTP, kita perlu paksa SSL dan nonaktifkan verifikasi sertifikat saat sertifikat ditandatangani sendiri.
Mendaftar direktori menunjukkan bahwa kita memiliki akses tulis ke direktori development-test.
Dilihat dari nama direktori, kami berasumsi semua file yang diunggah mungkin dihosting di host virtual disebut development-test.crossfit.htb. Mari unggah shell terbalik PHP dan coba dapatkan file cangkang kembali. Keluarkan perintah berikut secara lokal untuk membuat webshell PHP yang Dijalankan perintah melalui parameter cmd.
Sayangnya, kami tidak dapat mengakses vhost ini dari mesin kami, tetapi kami dapat menggunakan serangan XSS sekali lagi karena administrator mungkin dapat mengaksesnya.
Buka listener Netcat di Port 7777 dan server HTTP Python3 di port 80, lalu ubah Nilai User-Agent di Repeater dan mengirim permintaan.
Sebuah shell berhasil diterima. Layak untuk ditingkatkan ke shell TTY, yang lebih fungsional dan memungkinkan kita beralih ke pengguna lain jika diperlukan
Mari menghitung sistem file untuk file yang dapat dibaca dunia.
Pemindaian menunjukkan beberapa file menarik yang dapat dibaca dunia di direktori /etc/ansible/playbooks. File-file tersebut adalah buku pedoman yang mungkin yang digunakan untuk menambahkan pengguna ke semua host yang dikonfigurasi.
Playbook yang memungkinkan dapat digunakan untuk mengonfigurasi akun pengguna mesin virtual dan banyak lainnya pengaturan. Ayo serang untuk memecahkan hash menggunakan Hashcat dan daftar kata rockyou.txt. Pertama, simpan hash dalam file bernama hank_hash.
Menurut dokumentasi Ansible, kata sandi di-hash menggunakan sha512crypt algoritma. Jalankan Hashcat menggunakan mode -m 1800, yang sesuai dengan algoritme hashing ini. Sakelar -r digunakan untuk menentukan file aturan untuk beberapa iterasi dari kata sandi yang sama.
Kata sandi berhasil dipecahkan dan diidentifikasi sebagai powerpuffgirls.
Kami dapat mencoba menggunakan kredensial hank/powerpuffgirls untuk masuk ke sistem melalui SSH dan baca tanda pengguna:
Perintah id mengungkapkan keinginan untuk menjadi anggota grup admin.
Penghitungan sistem file mengungkapkan beberapa file menarik di dalam /home/isaac.
Selain itu, Pemeriksaan /etc/crontab Mengungkapkan bahwa skrip send_updates.php telah dijadwalkan Untuk mengeksekusi setiap menit :
Grup admin telah Diberi izin Membaca Pada File, Yang Berisi Kontendi Bawah.
Seperti yang dikatakan pada komentar awal, skrip ini memuat file dari direktori $msg_dir dan kemudian mengirimkannya mereka ke semua alamat email yang ditentukan di tabel pengguna.
Kode yang relevan dari /var/www/gym-club/jointheclub.php Adalah sebagai berikut. Sebaiknya periksa file composer.json untuk melihat apakah ada dependensi yang digunakan oleh aplikasi sudah usang atau dapat dieksploitasi.
Memanfaatkan kerentanan ini harus mudah, karena fakta bahwa parameter email adalah dikontrol oleh pengguna. Kami tidak dapat menggunakan formulir di halaman jointheclub.php untuk memasukkan perintah alamat email karena pemeriksaan FILTER_VALIDATE_EMAIL, tetapi kita dapat mengakses database langsung.
From Input Data kedua Ditemukan Di Halaman Contact , yang dapat digunakan untuk mengirim pesan ke administrator situs web.
Perlu Diselidiki Apakah kerentanan XSS
dapat Disalahgunakan Untuk membuat masalah Peramban Web Korban XMLHttpRequests
untuk laman web yang tidak dapat kami akses, secara efektif mengubah XSS
menjadi Pemalsuan Permintaan Lintas Situs. Karena kita telah memindai direktori di Domain gym-club.crossfit.htb
tanpa menemukan Target Potensial, Mari kita Cari subdomain potensial Lainnya Menggunakan .
Alamat Email adalah yang terdaftar di halaman ".
Versi php-shellcommand yang digunakan oleh send_updates.php adalah 1.6.0. Versi ini menderita dari kerentanan injeksi perintah yang telah ditetapkan . Masalah deskripsi diidentifikasi di
POST