SSRF & CRLF Attacks
Last updated
Was this helpful?
Last updated
Was this helpful?
HackThebox Ready Adalah Box Dengan Tingkat Kesulitan Medium , Tingkat Mechine Matrix Lebih Mengarah CVE , Application Yang Retan Di Mesin Tersebut Adalah GITLAB , Skills learned : SSRF & CRLF Attacks , Docker Escape. Skills required : Basic Web Enumeration , Basic knowledge of Linux , Basic knowledge of Docker
Ready adalah mesin Linux tingkat kesulitan menengah. Versi server GitLab yang rentan mengarah ke remote eksekusi perintah, dengan memanfaatkan kombinasi kerentanan SSRF dan CRLF. Izin buruk pada file konfigurasi yang dicadangkan dari server Gitlab, mengungkapkan kata sandi yang ternyata dapat digunakan kembali untuk root pengguna, di dalam container buruh pelabuhan. Setelah akses root diperoleh, keluar dari penampung dimungkinkan sejak itu itu berjalan dalam mode istimewa.
CTF:
Real Life
CVE
Enumeration
Alat Alat Hacking :
Nmap
lsblk
curl
redis-cli
ssh
Open Port :
Hasil Scan Menggunakan Nmap Menunjukan Bahwa SSH , Dan Server Nginx Gitlab pada port 5080 Tersedia Di Default mereka
Kita dapat mendaftarkan akun di Github Dengan membuka bagian Register dan mengisi kolom
Setelah mendaftar, itu akan mengarahkan kita ke halaman selamat datang.
Versi Gitlab Adalah 11.4.7. Mencari kerentanan secara online di Gitlab 11.4.7, mungkin ditemukan bahwa versi ini memiliki banyak kerentanan.
Kami memiliki alat sendawa yang telah dibuka, dan dikonfigurasi sehingga browser web kami dapat meneruskan lalu lintas ke port 8080 di mana Burp mendengarkan. Kami memilih Impor proyek dan kemudian Repo dengan URL seperti yang ditunjukkan pada gambar berikut.
Kami menempatkan beberapa nilai acak di bidang yang diperlukan, dan kemudian kami mengirimkan permintaan. Kami menetapkan kolom Gitrepository URL, Nama proyek dan siput Proyek untuk diuji dan pilih Buat proyek
Setelah permintaan ditangkap, kami mengirimkannya ke tab pengulang atau menggunakan alat curl
Protokol komunikasi Redis memungkinkan untuk mengirim data dalam ascii. Artinya, kami dapat mengirim HTTP POSTrequest ini langsung ke server Redis. Untuk melakukannya, kita harus menambahkan port tempat Redis berjalan. Ini adalah laporan 6379. Selanjutnya, kita akan menambahkan muatan yang ditemukan sebelumnya di repositori GitHub.
Agar ini berfungsi, kami juga mengubah protokol http: // menjadi git: //, di awal URL. Akhirnya kami mengubah nama proyek dan jalur proyek untuk membuat yang baru. Bentuk akhir dari permintaan POST akan terlihat sebagai berikut.
Catatan: Anda harus mengganti authenticity_token dengan yang sekarang, lalu lakukan hal yang sama untuk parameter namespace_id (terletak hampir di akhir permintaan POST), dan ubah IP di payload, dengan yang lokal.
Setelah kami menyusun permintaan, kami membuka pendengar secara lokal dan mengirim permintaan.
Jika gagal karena alasan apa pun, kami masih dapat mengubah nama dan jalur proyek di akhir permintaan POST, dari test1 ke test2 dan coba lagi. Setelah kita mendapatkan shell, kita bisa menelurkan shell PTY menggunakan perintah berikut.
Di awal permintaan yang kami kirim ke Redis, ada instruksi POST yang mendefinisikan metode HTTPrequest. Instruksi POST juga merupakan perintah Redis. Oleh karena itu Redis akan mengeksekusinya, dan melanjutkan ke payload. Berikut adalah contoh output, ketika instruksi Redis acak tidak valid dan instruksi valid diberikan
Pada contoh di atas, kita dapat melihat bagaimana tanggapan Redis dalam instruksi yang berbeda. Ketika tes instruksi acak yang tidak valid diberikan, Redis akan merespons dengan kesalahan ERR perintah yang tidak diketahui 'test'. Ketika instruksi yang valid seperti GET atau POST diberikan, maka kesalahan hanya akan menunjukkan struktur perintah yang benar. Dalam kasus kami, permintaan dimulai dengan instruksi GET, yang akan dieksekusi oleh Redis. Tepat setelah perintah GET, Redis akan mengeksekusi payload yang memulai reverse shell kembali ke mesin lokal kita. Kerentanan CRLF memungkinkan untuk menambahkan baris baru ke permintaan, jika tidak, kami tidak akan dapat menambahkan pembayaran setelah instruksi GET. Ini akan mengakibatkan Redis menjalankan Host: 10.10.10.98:5080 tepat setelah instruksiGET dan keluar dengan kesalahan, karena ini adalah instruksi Redis yang salah. Menambahkan baris baru diperlukan untuk meletakkan muatan kami tepat sebelum Host: 10.10.10.98:5080 dan tepat setelah instruksi GET dari permintaan HTTP. Bendera pengguna terletak di /home/dude/user.txt.
Pencacahan direktori /opt mengungkapkan direktori /opt /backup
Cadangan file gitlab.rb ditemukan mengandung kredensial. File ini digunakan oleh Gitlab dan berisi konfigurasi sehingga pengguna dengan hak istimewa rendah seharusnya tidak memiliki akses membaca pada file ini.
Mari kita periksa apakah kata sandi wW59U!ZKMbG9+*#h
dapat digunakan kembali untuk root pengguna.
Dengan menjalankan perintah berikut, dimungkinkan untuk memeriksa apakah kita berada di dalam container docker atau tidak. Jika ya, maka beberapa grup kontrol akan menjadi milik buruh pelabuhan.
Privilege Escalation Dengan menjalankan perintah berikut, dimungkinkan untuk memeriksa apakah kita berada di dalam container docker atau tidak. Jika ya, maka beberapa grup kontrol akan menjadi milik buruh pelabuhan. Selanjutnya dengan meninjau file /opt/backup/docker-compose.yml, kita dapat mengamati bahwa kontainer berjalan dengan bendera istimewa: true.
Ketika kontainer buruh pelabuhan berjalan dalam mode privileged dan akses root diperoleh, keluar dari kontainer kemudian dimungkinkan. Kami mencoba untuk memasang direktori / dari host, di dalam kontainer buruh pelabuhan. Tetapi pertama-tama, kita perlu menjalankan perintah berikut, untuk mendapatkan nama partisi yang akan kita pasang.
Mari kita coba me-mount partisi sda2 ke direktori / mnt.
Direktori / berhasil dipasang. Kami membuat kunci SSH untuk root pengguna host.
Kami menyimpan kunci dalam file secara lokal dan menamainya id_rsa dan memberikan izin yang sesuai.
Akhirnya kami menjalankan perintah berikut untuk terhubung.
The root flag is located in /root/root.txt.
Menavigasi ke Proyek -> Jelajahi proyek -> Beralih ke "Semua" -> mengungkapkan kode sumber CMS Drupal. Di kanan atas halaman web, kami dapat menemukan tautan Help, yang menunjukkan versi Gitlab
Ada beberapa kerentanan untuk Gitlab, tetapi kami Akan fokus pada Cara Untuk mengeksploitasi kombinasi kerentanan SSRF (CVE-2018-19571) dan CRLF (CVE-2018-19585). Menurut , kedua kerentanan terjadi di versi Gitlab ini. Kerentanan SSRF ada pada versi khusus . Kami akan memicu SSRF melalui mengimpor repositori baru dengan URL. Pertama kami membuat proyek baru
Seperti yang ditunjukkan oleh , karena kerentanan CSRF, kita dapat melewati ini menggunakan versi IPv6.