SQLi: Serangan Injeksi

Nov 30 2022
Apa itu Injeksi SQL? SQLi merupakan salah satu jenis serangan pada aplikasi berbasis web dimana penyerang dapat menjalankan query berbahaya pada database sebuah website. SQL adalah teknik injeksi kode yang digunakan untuk mengeksekusi pernyataan SQL berbahaya.

Apa itu Injeksi SQL?

SQLi merupakan salah satu jenis serangan pada aplikasi berbasis web dimana penyerang dapat menjalankan query berbahaya pada database sebuah website. SQL adalah teknik injeksi kode yang digunakan untuk mengeksekusi pernyataan SQL berbahaya.

Sebagai contoh jika anda ingin login ke suatu website dan anda lupa username dan passwordnya, maka dengan menggunakan SQLi injection kita dapat login atau mengakses halaman web tanpa mengetahui passwordnya.

Bagaimana injeksi SQL bekerja?

Injeksi SQL berisi memasukkan atau menyuntikkan kueri SQL melalui input data dari klien dalam aplikasi. Ini disuntikkan ke bidang data yang memengaruhi perintah SQL yang telah ditentukan sebelumnya.

Serangan injeksi SQL menargetkan kerentanan dalam pernyataan SQL dinamis. Pikirkan pernyataan SQL dinamis seperti fungsi matematika multivariat yang parameternya tetap sedangkan hasilnya ditentukan oleh nilai yang ditempatkan dalam variabel independen.

Demikian pula, pernyataan SQL dinamis juga terdiri dari kumpulan parameter yang telah ditentukan sebelumnya (seperti formulir web) dan pernyataan lengkap dihasilkan hanya saat pengguna memberikan input.

Lihat contoh berikut dari pernyataan SQL dari formulir login:

SELECT * FROM users WHERE username = '$username' AND password = bcrypt ('$password')

Jika ada kerentanan dalam pernyataan SQL dinamis, penyerang dapat memasukkan skrip kompleks dalam bentuk untuk merusak parameter yang ada dan mengubah arti dari seluruh pernyataan.

Jenis injeksi SQL:

In-band SQLi: In-band SQL injection adalah jenis injeksi SQL di mana penyerang menerima hasilnya sebagai respons langsung melalui saluran komunikasi yang sama. Misalnya, jika penyerang meluncurkan serangan secara manual melalui browser webnya, hasil serangan akan ditampilkan di browser web yang sama. Injeksi SQL in-band juga dikenal sebagai injeksi SQL tradisional.

Injeksi SQL berbasis kesalahan — Di sini penyerang melakukan tindakan tertentu yang menyebabkan database menghasilkan pesan kesalahan. Anda dapat menggunakan pesan kesalahan untuk menentukan basis data apa yang digunakan, versi server apa yang digunakan penangan, dll.

Injeksi SQL Berbasis Union — Pernyataan yang dihasilkan oleh database untuk mendapatkan respons HTTP tunggal. Anda dapat membuat kueri di URL atau menggabungkan beberapa pernyataan di kolom input untuk mencoba menghasilkan jawabannya

Blind SQLi : Blind SQL injection adalah jenis injeksi SQL di mana penyerang tidak mendapatkan respons eksplisit dari database yang diserang, melainkan mengamati perilaku server database dan aplikasi untuk merekonstruksi struktur database secara bertahap. Injeksi SQL buta juga dikenal sebagai injeksi SQL inferensial.

Berbasis Boolean — Di sini, penyerang mengirimkan kueri SQL ke database dan meminta aplikasi untuk mengembalikan hasil yang berbeda bergantung pada apakah kueri mengembalikan Benar atau Salah.

Berbasis Waktu — Dalam serangan ini, penyerang mengajukan kueri SQL ke database dan menyebabkan database menunggu waktu tertentu sebelum membagikan hasilnya. Waktu respons membantu penyerang menentukan apakah kueri benar atau salah.

Out-of-Band SQLi: Out-of-Band SQL Injection (OOB SQLi) adalah jenis injeksi SQL di mana penyerang tidak menerima respons dari aplikasi yang diserang melalui saluran komunikasi yang sama, tetapi dapat diakali untuk mengirim data ke titik akhir jarak jauh yang dikendalikan oleh penyerang. Injeksi SQL out-of-band hanya dimungkinkan jika server yang Anda gunakan memiliki perintah yang memicu permintaan DNS atau HTTP. Namun, ini berlaku untuk semua server SQL populer.

Contoh di SQLi

Contoh pertama sangat sederhana. Ini menunjukkan, bagaimana penyerang dapat menggunakan kerentanan SQL Injection untuk mengatasi keamanan aplikasi dan mengautentikasi sebagai administrator.

Skrip berikut adalah pseudocode yang dijalankan di server web. Ini adalah contoh sederhana mengautentikasi dengan nama pengguna dan kata sandi. Database contoh memiliki tabel bernama usersdengan kolom berikut: usernamedan password.

# Define POST variables
uname = request.POST['username']
passwd = request.POST['password']
# SQL query vulnerable to SQLi
sql = “SELECT id FROM users WHERE username=’” + uname + “’ AND password=’” + passwd + “’”
# Execute the SQL statement
database.execute(sql)

password' OR 1=1

SELECT id FROM users WHERE username='username' AND password='password' OR 1=1'

-- MySQL, MSSQL, Oracle, PostgreSQL, SQLite
' OR '1'='1' --
' OR '1'='1' /*
-- MySQL
' OR '1'='1' #
-- Access (using null characters)
' OR '1'='1' %00
' OR '1'='1' %16

Organisasi dapat menerapkan kebijakan berikut untuk melindungi dari serangan injeksi SQL.

  1. Jangan pernah mempercayai input pengguna. Mereka harus selalu dibersihkan sebelum menggunakannya dalam pernyataan SQL dinamis.
    Stored Procedures — Memungkinkan Anda untuk mengenkapsulasi pernyataan SQL dan memperlakukan semua input sebagai parameter.
  2. Pernyataan yang Disiapkan — Pernyataan yang disiapkan yang berfungsi dengan terlebih dahulu membuat pernyataan SQL dan kemudian memproses data pengguna yang dikirimkan sebagai parameter. Ini tidak memengaruhi sintaks pernyataan SQL.
    Ekspresi Reguler — dapat digunakan untuk mendeteksi kode yang berpotensi berbahaya dan menghapusnya sebelum pernyataan SQL dijalankan.
  3. Izin Pengguna Sambungan Basis Data — Akun yang digunakan untuk menyambung ke database harus diberikan hanya izin yang diperlukan. Ini membantu mengurangi kinerja pernyataan SQL di server.
  4. Pesan kesalahan — Ini tidak mengungkapkan informasi sensitif atau lokasi kesalahan yang sebenarnya. “Maaf, telah terjadi kesalahan teknis. Saya telah menghubungi tim teknis. Coba lagi nanti” alih-alih menampilkan pernyataan SQL yang menyebabkan kesalahan.

Inilah yang dilakukan firewall aplikasi web (WAF). Analisis semua input pengguna ke aplikasi web Anda untuk kecocokan dengan kode yang mencurigakan.

Kami harap Anda memahami perbandingannya dan jelas dengan konsepnya.

Tinggalkan komentar dan bagikan pemikiran Anda !!

Penulis:

Akash Shekhavat,Madhuri Shelke,Chetan Shinde,Swarali Sole

Referensi:

https://learn.microsoft.com/en-us/sql/relational-databases/security/sql-injection?view=sql-server-ver16

https://systemweakness.com/sql-injection-attacks-53e942aae1f8

https://qawerk.com/blog/what-is-sql-injection/

https://brightsec.com/blog/sql-injection-attack/