Trickster
Dalam challange kali ini, saya diarahkan ke sebuah website yg terdapat sebuah form untuk menginput dan mengupload sebuah file.png
1. Buka sebuah file png denga notepad lalu hapus semua isinya dan ganti menjadi PNG <?php echo system('whoami');?>
4. Send to Repeater lalu klik send pojok kiri atas
5. Matikan intereceptnya lalu refres browser webnya
6. Pada bagian whoami ganti menjadi pwd lalu send lagi dan refres
7. ganti pwd dengan find / -name "*.txt" lalu send dan refres browser lagi. dan disini kita menemukan file .txt nya
8. Ganti find / -name "*.txt" dengan cat path/filenya/.txt
Catatan:
Ini termasuk sebuah serangan NoSQL Injection ini terjadi ketika aplikasi web tidak memvalidasi input pengguna dengan baik saat melakukan query ke database NoSQL, seperti MongoDB. Akibatnya, penyerang bisa mengubah query dan mendapatkan akses tidak sah.
Kenapa bisa berhasil?
Ketika kamu memasukkan { "$ne": null }
ke dalam form login, server mungkin menjalankan query seperti ini di MongoDB:
Biasanya, jika kamu mengisi email dan password dengan nilai biasa, query ini hanya akan mengembalikan hasil jika email dan password cocok di database.
Namun, ketika kamu mengisi email atau password dengan {"$ne": null}
, ini mengubah query menjadi:
Di MongoDB, $ne
berarti "not equal" (tidak sama dengan). Jadi, query ini sekarang berarti:
- Cari user yang email-nya tidak null dan password-nya tidak null.
Biasanya, semua akun di database memiliki email dan password yang tidak null. Artinya, query ini akan selalu menemukan setidaknya satu akun dalam database dan bisa saja memberikan akses tanpa perlu password yang valid.
Perbedaan NoSQL Injection vs SQL Injection
Aspek | SQL Injection | NoSQL Injection |
---|---|---|
Target Database | MySQL, PostgreSQL, SQLite | MongoDB, Firebase, CouchDB |
Bahasa Query | SQL (Structured Query Language) | JSON/BSON Query |
Metode Eksploitasi | Memasukkan perintah SQL seperti ' OR 1=1 -- | Memasukkan JSON seperti { "$ne": null } |
Contoh Payload | ' OR 1=1 -- (bypass login) | { "$ne": null } (bypass login di MongoDB) |
Buka webnya di burpsuite. Sebelum klik details untuk mengirimkan request ke server, aktivkan interecept nya dulu. Jika sudah lalu klik details, pada request yg di tangkap burpsuite klik kanan lalu send to repeater
1️⃣ XML Biasa Tanpa XXE (Sebelum Diedit)
Awalnya, kita mengirim XML biasa:
- Server membaca XML ini dan mungkin hanya mencari
<ID>
, lalu mengembalikan data yang sesuai. - Tidak ada eksploitasi yang terjadi di sini karena ini adalah request normal.
2️⃣ XML dengan XXE (Setelah Diedit)
Kita mengubah XML menjadi:
Perubahan yang kita buat:
- Menambahkan
DOCTYPE
dengan<!ENTITY>
- Ini mendefinisikan entitas
&file;
yang isinya adalah file dari sistem (file:///etc/passwd
).
- Ini mendefinisikan entitas
- Menggunakan entitas dalam XML (
&file;
)- Saat server memproses
<ID>&file;</ID>
, dia akan menggantikan&file;
dengan isi dari/etc/passwd
.
- Saat server memproses
3️⃣ Kenapa Ini Bisa Membocorkan Flag?
- Banyak aplikasi berbasis Linux menyimpan file penting dalam sistem, misalnya:
/etc/passwd
→ Berisi daftar user sistem./etc/hostname
→ Berisi nama server./home/user/flag.txt
→ Bisa berisi flag dalam CTF.
- Jika aplikasi tidak mematikan external entity processing, server akan mengambil isi file tersebut dan mengirimkannya kembali dalam respons HTTP.
Hasil: Server membaca isi
/etc/passwd
, lalu mengirimkannya ke kita, sehingga kita menemukan flag dalam output!
Kesimpulan
- XML External Entity (XXE) Injection memungkinkan kita membaca file dari server.
- Dengan mendefinisikan entitas
<!ENTITY file SYSTEM "file:///etc/passwd">
, kita bisa meminta server membaca dan menampilkan isi file tersebut. - Jika aplikasi tidak memproteksi XML parsing, kita bisa membaca file sensitif yang mungkin berisi flag dalam CTF.
MatchTheRegex
klik ctrl+u untuk melihat kode programnya dan ada hint p.....F!?
Kita diarahkan ke sebuah web dengan form input login. Ketika memasukan username dan password yg telah di sediakan, ktia dialihkan ke halaman web lainnya. Akan tetapi jika kita teliti dalam melihat perubahan pada address bar, sebenarnya kita di redirect ke beberapa halaman web.
SQLiLite
SQL Direct
Secrets
Power Cookie
Modifikasi resquest bagian Cookie yg tadinya isAdmin=0 menjadi isAdmin=1
Forbidden Paths
Edit bagian filename menjadi filename=../../../../../../flag.txt&read= lalu klik send
0 Komentar