Serangan SQL Injection adalah salah satu bug web yang sering sekali di temukan serangan SQL Injection juga sering di luncurkan terhadap situs situs besar seperti pemerintah,lembaga,dan juga situs toko online.
Serangan SQL Injection atau yang di kenal Injeksi SQL
Serangan ini adalah teknik serangan injeksi kode yang memanfaatkan celah keamanan yang terjadi pada layar basis data. Hal ini terjadi karena data yang di inputkan oleh pengguna tidak dilakukan validasi dan di muat di dalam baris perintah query SQL.
SQL Injection
Dampak Serangan SQL Injection Terhadap Website
- Melakukan Pencurian Informasi
Apabila seorang attacker berhasil melakukan serangan SQL Injection biasanya pelaku akan mencari informasi seputar username dan password. Tidak hanya itu attacker juga mampu mendapatkan informasi seputar user dari web tersebut.
- Melakukan Eksekusi Perintah Jarak Jauh (RCE)
Serangan ini bisa di terapkan apabila pelaku berhasil mendapatkan informasi seputar database. Tidak hanya itu, penyerang juga dapat mengambil alih host atau target.
- Dapat Memodifikasi Data Pada Sebuah Website
Biasanya apabila pelaku berhasil menemukan username dan password >dan sudah hash. Mereka akan mencari admin login atau halaman login admin dan kemudian attacker mampu memodifikasi data web seperti menghapus artikel dan menanamkan backdoor.
Jenis Serangan SQL Injection
- Union-Based SQL Injection
- Error-Based SQL Injection
- Blind SQL Injection
- SQL Injection With Dios
- SQL Injection Load File Dan Into OutFile
Cara Mengetahui Bug SQL Injection Pada Suatu Web
Untuk mengetahui bug sql injection di suatu web kali ini saya menggunakan dork sederhana inurl:berita.php?id= dan akan muncul website yang sudah di index oleh google.
Dan saya mencari salah satu website yang memiliki kerentanan BUG SQL INJECTION
http://www.pd-bprbkktemanggung.com/berita.php?do=detail&id=41 dan saya menemukan situs ini kalian tambahkan tanda ’ di belakang angka 41 menjadi seperti ini
http://www.pd-bprbkktemanggung.com/berita.php?do=detail&id=41' nah apabila kalian mendapatkan pesan seperti ini
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘‘41’’’ at line 1
select * from berita where id = ‘41’’
Bug SQL Injection
Nah berarti situs tersebut memiliki kerentan sql injection dan kalian bisa mengeksekusi bug tersebut dengan tools sql map,havij atau juga bisa menggunakan cara manual. Disini saya tidak ingin mengajarkan bagaimana caranya karena ini adalah pembelajaran saja.
Cara Pencegahan Dan Cara Menutup Bug SQL Injection
- Menggunakan Parameterized SQL Query
Parameterized Query atau prepared statement adalah salah satu teknik sederhana dan bisa di katakan cukup gampang di lakukan oleh seorang pemula sekali pun. Penggunaan Parameterized Query di tujukan agar database dapat membedakan mana yang merupakan Sql Statement dan mana yang merupakan data.
Contoh Penggunakan prepare statement pada bahasa pemrograman PHP.
Prepare Statement
Melalui Mekanisme ini data yang di kirimkan pengguna akan mengantikan parameter yang berada di tanda kurung “(?)” sebagai parameter data yang di inputkan oleh pengguna.
- Lakukan Pengujian Keamanan Pada Web
Hal ini dapat kamu lakukan dengan tols scanner online apabila kamu menggunakan platform wordpress gunakan tools wpscan dan untuk cms buatan sendiri gunakan vega scanner. Hal ini bertujuan agar kamu dapat memperbaiki bug yang ada pada project web buatan kamu dan dapat mencegah nya secara dini agar tidak terjadi peretasan yang berakibat fatal nantinya.
- Backup Database
Untuk mengantisipasi website kamu di retas oleh hacker sebaiknya backup seluruh database agar suatu saat apabila ada file yang hilang kamu bisa mengembalikannya seperti semula.
Mengatasi dan Mencegah Bug SQL injection Menggunakan .Htaccess
- Code Memblokir Serangan SQL Injection Di Query String
Masukan kode di bawah ini ke .htacces kamu dan kelik save
##### Redirect If QUERY_STRING Has SQL Injection To Honeypot – START
#QUERY_STRING contains everything in the URL after the “?” ex.) mydomain.com/test.php?test=test
#Excluded the commands like, version, update, insert, and set because they are common words and have caused false positives
RewriteCond %{QUERY_STRING} !^$
RewriteCond %{REQUEST_URI} !honeypot.php/
RewriteCond %{QUERY_STRING} union [NC,OR]
RewriteCond %{QUERY_STRING} select [NC,OR]
RewriteCond %{QUERY_STRING} cast [NC,OR]
RewriteCond %{QUERY_STRING} declare [NC,OR]
RewriteCond %{QUERY_STRING} drop [NC,OR]
RewriteCond %{QUERY_STRING} md5 [NC,OR]
RewriteCond %{QUERY_STRING} benchmark [NC,OR]
RewriteCond %{QUERY_STRING} table [NC,OR]
RewriteCond %{QUERY_STRING} column [NC,OR]
RewriteCond %{QUERY_STRING} distinct [NC,OR]
RewriteCond %{QUERY_STRING} substr [NC,OR]
RewriteCond %{QUERY_STRING} concat [NC,OR]
RewriteCond %{QUERY_STRING} schema [NC,OR]
RewriteCond %{QUERY_STRING} hex [NC,OR]
RewriteCond %{QUERY_STRING} truncate [NC,OR]
RewriteCond %{QUERY_STRING} convert [NC,OR]
RewriteCond %{QUERY_STRING} exec [NC,OR]
RewriteCond %{QUERY_STRING} passthru [NC,OR]
RewriteCond %{QUERY_STRING} system [NC,OR]
RewriteCond %{QUERY_STRING} popen [NC,OR]
RewriteCond %{QUERY_STRING} proc [NC,OR]
RewriteCond %{QUERY_STRING} load [NC,OR]
RewriteCond %{QUERY_STRING} between [NC,OR]
RewriteCond %{QUERY_STRING} null [NC,OR]
RewriteCond %{QUERY_STRING} delay [NC,OR]
RewriteCond %{QUERY_STRING} char [NC,OR]
RewriteCond %{QUERY_STRING} sleep [NC,OR]
RewriteCond %{ QUERY_STRING } schema [NC,OR]
RewriteCond %{QUERY_STRING} unhex [NC]
RewriteRule ^(.*)$ /honeypot.php/ [NC,L]
Redirect If QUERY_STRING Has SQL Injection To Honeypot – END
Perlu Di Ingat: Walaupun kamu berhasil menutup bug sql injection pada website kamu dan apabila kamu tidak melakukan scanning secara berkala nantinya akan ada bug lainnya dan untuk itulah saya sarankan untuk scanner bug secara berkala.