Header Ads

Header Ads
Banner 5CardPoker

Bandar Lucky8

What is SQL injection?

Injeksi SQL adalah jenis serangan yang dapat memberikan kontrol penuh musuh atas database aplikasi web Anda dengan memasukkan kode SQL sewenang-wenang ke dalam kueri basis data.



Berita bagus? Injeksi SQL adalah yang terendah dari buah yang menggantung rendah untuk penyerang dan pembela. SQLi bukan kit NSA Shadow Brokers yang canggih, ini sangat sederhana anak berusia tiga tahun bisa melakukannya. Ini adalah skrip kiddie — dan memperbaiki aplikasi web Anda untuk mengurangi risiko SQLi sangat mudah sehingga kegagalan untuk melakukannya terlihat lebih dan lebih seperti kelalaian.

Jenis serangan injeksi SQL

Ada beberapa jenis injeksi SQL, tetapi semuanya melibatkan penyerang yang memasukkan SQL sewenang-wenang ke dalam kueri basis data aplikasi web. Bentuk paling sederhana dari injeksi SQL adalah melalui input pengguna. Aplikasi web biasanya menerima input pengguna melalui formulir, dan ujung depan meneruskan input pengguna ke database back-end untuk diproses. Jika aplikasi web gagal membersihkan input pengguna, penyerang dapat menyuntikkan SQL pilihan mereka ke dalam database back-end dan menghapus, menyalin, atau memodifikasi konten database.

Penyerang juga dapat memodifikasi cookie untuk meracuni permintaan basis data aplikasi web. Cookie menyimpan informasi keadaan klien secara lokal, dan aplikasi web biasanya memuat cookie dan memproses informasi itu. Pengguna jahat, atau malware, dapat memodifikasi cookie untuk menyuntikkan SQL ke dalam database back-end.

Variabel server seperti header HTTP juga dapat digunakan sebagai vektor serangan injeksi SQL. Header yang dipalsukan yang mengandung SQL sewenang-wenang dapat menyuntikkan kode itu ke dalam basis data jika aplikasi web gagal membersihkan input-input itu juga.

Serangan injeksi SQL orde dua adalah yang paling licik dari kumpulan itu, karena serangan itu tidak dirancang untuk berjalan segera, tetapi jauh di kemudian hari. Pengembang yang membersihkan semua input mereka dengan benar terhadap serangan langsung mungkin masih rentan terhadap SQLi orde kedua ketika data beracun digunakan dalam konteks yang berbeda.

Cara menguji kerentanan injeksi SQL

Injeksi SQL, sebagai teknik, lebih tua dari banyak penyerang manusia yang menggunakan SQLi saat ini. Serangan SQLi bersifat rudimenter dan telah lama diotomatisasi. Alat seperti SQLninja, SQLmap, dan Havij membuatnya mudah untuk menguji aplikasi web Anda sendiri, tetapi juga membuatnya mudah bagi penyerang.

Sepuluh tahun yang lalu, a SQLi worm mengamuk di internet. Dipotong hingga saat ini: Tidak banyak yang berubah. Meskipun kesadaran luas tentang injeksi SQL sebagai masalah, sebagian besar aplikasi web tetap rentan.

Alat pengujian otomatis dapat membuat Anda selangkah lebih maju dari penyerang mencari gajian yang mudah. Mem-Pentesting aplikasi web Anda dengan alat seperti SQLmap adalah cara cepat untuk melihat apakah mitigasi Anda memadai. SQLmap mendukung hampir semua database utama yang digunakan saat ini dan dapat mendeteksi dan mengeksploitasi kerentanan injeksi SQL yang paling dikenal.

Sanitasi input Anda, tetapi tes untuk memverifikasi mitigasi Anda berhasil. Pengingat yang berguna: Tim biru dan tim merah dua sisi dari koin yang sama.


Contoh injeksi SQL
Mari kita lihat serangan injeksi SQL dasar. Misalkan Anda telah membangun aplikasi web yang memungkinkan pelanggan memasukkan ID pelanggan mereka dan mengambil profil pelanggan mereka. Ujung depan aplikasi web melewati ID pelanggan yang dimasukkan pengguna ke database back-end. Basis data menjalankan kueri SQL dan mengembalikan hasilnya ke aplikasi web, yang menampilkan hasilnya ke pengguna akhir.


Permintaan database back-end mungkin terlihat seperti ini:
           SELECT *
           FROM customers
           WHERE customer_id = '1234567'
Misalkan pengguna memasukkan customer_id berikut dalam bidang formulir web:
           1234567; DELETE * customers WHERE '1' = '1
Basis data back-end kemudian akan dengan taat menjalankan SQL berikut:
           SELECT *
           FROM customers
           WHERE customer_id = '1234567';
           DELETE *
           FROM customers
           WHERE 'x' = 'x'
Ingat, basis data akan dengan senang hati mengeksekusi beberapa pernyataan SQL secara berturut-turut jika dipisahkan oleh tanda titik koma. Gagal membersihkan input pengguna untuk karakter tanda kutip "" tunggal memungkinkan penyerang menghapus seluruh tabel. Semoga Anda memiliki cadangan yang bagus.

Ini adalah contoh yang disengaja sederhana, dan ada banyak vektor serangan injeksi SQL yang berbeda, tetapi semua bekerja pada prinsip yang sama: Kegagalan aplikasi web untuk membersihkan input mengarah ke eksekusi kode SQL jarak jauh.
Cara mendeteksi serangan injeksi SQL

Mengurangi serangan injeksi SQL tidaklah sulit, tetapi bahkan pengembang yang paling cerdas dan beritikad baik tetap membuat kesalahan. Deteksi karena itu merupakan komponen penting untuk mengurangi risiko serangan injeksi SQL. Firewall aplikasi web (WAF) dapat mendeteksi dan memblokir serangan injeksi SQL dasar, tetapi Anda tidak boleh mengandalkan itu sebagai tindakan pencegahan tunggal.

Intrusion detection systems (IDS), baik berbasis jaringan dan berbasis host, dapat disesuaikan untuk mendeteksi serangan injeksi SQL. IDSes berbasis jaringan dapat memonitor semua koneksi ke server database Anda, dan menandai aktivitas yang mencurigakan. IDS berbasis host dapat memonitor log server web dan mengingatkan ketika sesuatu yang aneh terjadi.

Namun, pada akhirnya, serangan injeksi SQL dipahami dengan baik dan mudah dicegah, dan prioritas untuk mitigasi risiko harus mencegah serangan injeksi SQL.

Bagaimana mencegah serangan injeksi SQL


Dengarkan Little Bobby Tables dan bersihkan input basis data Anda. Setiap input ke database aplikasi web Anda harus dianggap tidak dapat dipercaya dan diperlakukan sesuai. Dan dengarkan orang-orang baik dari OWASP ketika mereka memberi tahu Anda "Agak memalukan bahwa ada begitu banyak serangan SQL Injection yang berhasil terjadi, karena itu SANGAT sederhana untuk menghindari kerentanan injeksi SQL dalam kode Anda." [penekanan mereka]

The OWASP SQL injection cheat sheet penyelaman lebih dalam daripada yang kita bisa di sini, tetapi mencegah serangan injeksi SQL, OWASP memberitahu kami, mengharuskan pengembang untuk validasi input daftar putih (bukan daftar hitam), untuk menggunakan pernyataan yang disiapkan dengan permintaan parameter, dan untuk menghindari semua input yang disediakan pengguna.

Batasi juga hak istimewa akun. Anggap sebuah pelanggaran. Bagaimana jika pengembang gagal membersihkan bidang input pengguna tunggal? Hei, itu terjadi. Pengembang hanya manusia. Sanitasi input tetapi anggap ada sesuatu yang akan melewati Anda. Batasi hak istimewa akun pengguna basis data. Apakah aplikasi web Anda hanya baca, misalnya? Apakah perlu memiliki hak DROP TABLES? Mungkin tidak. Prinsip privilege paling tidak berlaku di sini. Berikan aplikasi web hak minimum yang harus dijalankan.

Prosedur tersimpan juga dapat membuat SQLi jauh lebih sulit - meskipun bukan tidak mungkin. Jika aplikasi web Anda hanya perlu menjalankan beberapa query SQL, buat prosedur tersimpan untuk menjalankan query tersebut. Biasanya, hanya administrator basis data yang memiliki hak istimewa untuk membuat atau memodifikasi prosedur yang tersimpan. Perlu diketahui, bahwa banyak basis data dikirimkan dengan prosedur tersimpan standar di luar kotak, dan penyerang mengetahui hal ini. Pertimbangkan untuk menghapus prosedur tersimpan standar tersebut kecuali Anda benar-benar membutuhkannya.

Uji tuntas minimum

Injeksi SQL adalah yang terendah dari buah keamanan aplikasi web rendah menggantung. Vektor serangan yang terkenal ini mudah dieksploitasi oleh penyerang yang tidak canggih, tetapi mudah dimitigasi dengan sejumlah kecil uji tuntas. Pada tahun 2018 tidak ada lagi alasan untuk aplikasi web menjadi rentan terhadap injeksi SQL. Inilah yang seharusnya dilakukan uji tuntas minimum dalam keamanan aplikasi web, kawan.

Tidak ada komentar

Diberdayakan oleh Blogger.