Mengenal SQL Injection

Halo semua, sudah lama gak ngepost materi lagi, yah mungkin efek pasca liburan
Kali ini admin mau ngepost materi yang mungkin bagi kalian antara penting dan gak penting sih
Ya mungkin aja bakalan jadi penting bagi manusia-manusia yang ingin belajar Pemrograman Web
Oiya btw, kali ini admin males pake bahasa yang baku, tujuannya biar lebih mudah dimengerti oleh kalian semua :3
Lagipula saya admin baru, jd ini ya terhitung posting pertamax saya hehehe 😀
Setidaknya biarkanlah admin gabut ini untuk memberikan sedikit ilmu (padahal msh nubi) untuk kalian pembaca setia

Sebelum saya mulai menjelaskan materi yang sebenernya tergolong ilmuhitam, saya ingin berpesan kepada kalian wahai pembaca setia untuk tidak melakukan peretasan yang dapat merugikan pihak lain.
Ingat! gunakan untuk hal defensif ya jangan ofensif (walaupun kadang admin sendiri pernah khilaf)  😀

Pernahkah anda mendengar istilah SQL Injection ?
Saya rasa pasti kalian pernah mendengar hal tersebut, bahkan mungkin diantara kalian para pembaca ada yang pernah khilaf juga wkakak

Oke, jadi SQL Injection itu merupakan sebuah teknik memanipulasi Query Language yang berdampak pada database/basis data sehingga dapat menjalankan/mengeksekusi perintah sesuai yang diinginkan pelaku peretasan.

Jadi, apa aja yang bisa dilakukan dengan SQL Injection?
Jawabannya buanyaak, mulai dari bypass login, mencuri data pada database (misal username dan pass), dll
Dalam kasus yang lebih ekstrim, celah ini dimanfaatkan oleh para Carder untuk mencurry kartu kredit 🙁
Gak bsa bayangin kan klo tiba” pas akhir bulan disamperin pencabut dompet (sebut saja ia debt collector) dan bayarannya bengkak

Selanjutnya kita langsung praktik aja ya 🙂
Kita perhatikan kodingan tsb :

Kode diatas jelas bukan kode untuk kodein gebetan
Kode diatas merupakan kode PHP yang berfungsi sebagai koneksi ke database serta mengambil data dari database
Bagian terpentingnya terdapat pada kode berikut :

Kode diatas merupakan Query Language yang tergolong sebagai DML (Data Manipulation Language) yang berfungsi untuk mengambil/menampilkan data semua kolom/atribut yang berada di dalam tabel postingan yang dimana kolom/atribut dari id memiliki nilai yang sama dengan nilai yang tersimpan pada variabel $id

Oke, lanjut gimana cara ngeheknya

Oke, perhatikan urlnya

Terlihat bagaimana sistem tsb menampilkan data postingan yang menggunakan GET Method (p=1)
Artinya bisa kita simpulkan bahwa posting yang ditampilkan memiliki id bernilai 1 (perhatikan kodingan phpnya)

Okay, sekarang coba kita beri tanda petik satu untuk mengetes apakah sistem tersebut vulnerable terhadap SQL Injection atau tidak (‘)

Wohoooo, dan ternyata muncul notif error yang menandakan bahwa sistem tsb vulnerable 😀
*Selamat anda sudah jadi hekel
Btw, pada url %27 merupakan tanda petik satu yang diencode  otomatis oleh browser
Kenapa bisa error ? oke, kita lihat kode SQL yang telah kita injeksi

Error disebabkan karena kelebihan tanda petik satu, sehingga kita bisa lanjut memanipulasinya agar tidak error dan mendapatkan sesuatu

Waw, dan ternyata judul postingan menjadi 2 dan konten menjadi 3
Bagaimana bisa ???
Perhatikan url, ayo kita decode

Kemudian gabungkan dengan SQL Aslinya
Maka hasilnya membuat netizen terkejut

Kita perhatikan kode diatas, padahal kelebihan petik tapi tidak error, hmm
Itu karena ada sebuah comment yang ditulis dengan tanda dash dua kali (–)
Sehingga tanda petik tsb akan diabaikan

Kembali ke kodingan, kita pasti tau kan kalau 1 and 1=2 itu akan menghasilkan false
Sehingga query tidak ditampilkan, lalu kita beri union atau kita gabungkan dengan data lain (kali ini kita beri data palsu)
Karena pada tabel terdapat 3 kolom, maka kita gabungkan dengan 3 data, sehingga yang akan diambil adalah ketiga data palsu tersebut
Alhasil yang muncul adalah 2 dan 3, artinya judul terdapat pada kolom kedua dan konten terdapat pada kolom ketiga
Kemudian, kita lakukan manipulasi sampai mendapatkan sebuah data yang sangat krusial (Misal username dan password) dengan menggunakan payload : (mungkin akan dijelaskan pada posting selanjutnya)

Hasilnya :

Yay, akhirnya kita bisa dapet username dan passwod admin nya :3
Bagaimana ? anda terkedjoet ?
Inilah bahaya yang ditimbulkan dari SQL Injection, oleh karena itu kita harus tau bagaimana cara mencegahnya

Oke langsung aja, kali ini kita akan menggunakan sebuah teknik yang disebut Prepared Statement (https://www.w3schools.com/php/php_mysql_prepared_statements.asp)
Sehingga kita akan merubah kodingan menjadi seperti berikut :

Tadaa, akhirnya sistem yang kita buat sudah aman dari serangan SQL Injection
Kesimpulannya, jangan pernah memberi celah pada hacker
Kita harus selalu awas akan pentingnya Cyber Security, karena mencegah lebih baik daripada mengobati 😀

Mungkin cukup sekian saja yang dapat saya sampaikan
Mohon maaf apabila ada kata-kata yang kurang berkenan
Sekali lagi mohon diingat, jadikan hal ini sebagai bahan pembelajaran, bukan untuk ajang peretasan

Terima Kasih,

*Postingan ini hanyalah sebuah coretan dari seseorang yang sedang gabut