What is SQL Injection: How it Works, Examples, and Types

what is sql injection how it works examples and types.

What is SQL Injection: How it Works, Examples, and Types


What is SQL Injection


Data is one of the most important components of an information system. Database supported web applications are used by organizations to get data from customers. SQL stands for Structured Query Language. It is used to retrieve and manipulate data in databases. However, because of this, hackers have discovered a new type of attack and one of the attacks is SQL Injection.


You may not know what SQL Injection (SQLI) is or how it works, but you do know about its victims. Target, Yahoo, Zappos, Equifax, Epic Games, TalkTalk, LinkedIn, and Sony Pictures. All these companies were hacked by cybercriminals using SQL Injection.


As OWASP says, SQL Injection has become a common problem with database-driven websites. This flaw is easy to detect, and easy to exploit.


Also Read: What Is XSS (Cross-Site Scripting) Attack?

TABLE OF CONTENTS

1. What is SQL Injection

2. How Does SQL Injection Work?

3. Example of SQL Injection

4. Types of SQL Injection Types

5. 1. In-band SQLI (Classic SQLI)

6. 2. Inferential SQLI (Blind SQLI):

7. 3. Out-of-band SQLI

8. How to Prevent SQL Injection Attacks?

9. Conclusion


What is SQL Injection


SQL Injection (SQLI) is a type of attack that cybercriminals use to exploit software vulnerabilities in web applications. This allows attackers to see data they would normally not be able to retrieve. This includes data belonging to other users, or other data that the application itself has access to. In many cases, an attacker can modify or delete this data, causing persistent changes to the content or behavior of the application.


In some situations, an attacker can escalate a SQL Injection attack to disrupt the underlying server or other back-end infrastructure, or carry out a denial-of-service attack.

Also Read: What is DDOS Attack and How to Avoid It


How Does SQL Injection Work?


SQL Injection is a major concern when developing Web applications. It occurs when an application accepts malicious user input and then uses it as part of a SQL statement to query the backend database.


An attacker can enter SQL control characters and command keywords (for example, single quotes (‘), double quotes (“), equals (=), comments (- -), etc.) . Using these control characters with common SQL commands (for example, SELECT, FROM, DELETE, etc.) allows access to or retrieval of data elements from the backend database server.


Successful attacks require Web applications to include malicious code from the attacker in SQL statements. Malicious code usually comes from untrusted sources. In some cases, internal system databases can also be a source of malicious data. When malicious SQL statements are executed against the database backend, an attacker can modify or access the database. This depends on how the attacker creates malicious data.


SQL Injection Example


Attackers who wish to execute SQL Injection manipulate standard SQL queries to exploit vulnerabilities for unvalidated input in the database. There are many ways that this attack can be executed.


For example, the above-mentioned entry, which pulls information for a specific product, could be changed to http://www.eniaga.com/items/items.asp?itemid=999 or 1 = 1 .


As a result, the related SQL query looks like this:

SELECT ItemName, ItemDescription

FROM Items

WHERE ItemNumber = 999 OR 1=1


And because the 1=1 statement is always true, the query returns all product names and descriptions in the database, even those that you may not qualify for access.


Attackers can also exploit improperly filtered characters to modify SQL commands, including using a semicolon to separate two fields.


For example, this entry http://www.eniaga.com/items/iteams.asp?itemid=999;DROP TABLE USERS will create the following SQL query:

SELECT ItemName, ItemDescription

FROM Items

WHERE ItemNumber = 999; DROP TABLE USERS


Akibatnya, seluruh database pengguna bisa terhapus.


Cara lain query SQL dapat dimanipulasi adalah dengan pernyataan UNION SELECT. Ini menggabungkan dua kueri SELECT yang tidak terkait untuk mengambil data dari tabel database yang berbeda.


Misalnya, input  http://www.eniaga.com/items/items.asp?itemid=999 UNION SELECT user-name, password FROM USERS, menghasilkan kueri SQL berikut:

SELECT ItemName, ItemDescription

FROM Items

WHERE ItemID = '999' UNION SELECT Username, Password FROM Users;


Menggunakan pernyataan UNION SELECT, kueri ini menggabungkan permintaan untuk nama item 999 dan deskripsi dengan yang lain yang menarik nama dan kata sandi untuk setiap pengguna dalam database.


Jenis Jenis SQL Injection


SQL Injection dapat diklasifikasikan menjadi tiga kategori utama

  * In-band SQL Injection

  * Inferential SQL Injection

  * Out-of-band SQL Injection


1. In-band SQLI (Classic SQLI)


In-band SQL Injection adalah serangan SQL Injection yang paling umum dan mudah dieksploitasi. In-band SQL Injection terjadi ketika penyerang dapat menggunakan saluran komunikasi yang sama untuk meluncurkan serangan dan mengumpulkan hasil. Sebagai contoh penyerang dapat menggunakan komunikasi HTTP menyebarkan serangan ke backend dan mendapatkan hasil di saluran yang sama.


Ada dua tipe utama In-band SQL Injection

 1. Error-based SQLI: Error-based SQLI adalah teknik In-band SQL Injection yang mengandalkan pesan kesalahan yang dilemparkan oleh database server untuk mendapatkan informasi tentang struktur database. Dalam beberapa kasus, error-based SQL injection saja sudah cukup bagi penyerang untuk menghitung seluruh database.

 2. Union-based SQLI: Union-based SQLI adalah teknik In-band SQL Injection yang memanfaatkan operator SQL UNION untuk menggabungkan hasil dari dua atau lebih pernyataan SELECT menjadi satu hasil yang kemudian dikembalikan sebagai bagian dari respons HTTP.


2. Inferential SQLI (Blind SQLI):Â


Inferential SQL Injection, tidak seperti in-band SQLI, mungkin memerlukan waktu lebih lama bagi penyerang untuk mengeksploitasi, namun, ini sama berbahayanya dengan bentuk SQL Injection lainnya. Dalam serangan inferential SQLI, tidak ada data yang benar-benar ditransfer melalui aplikasi web dan penyerang tidak akan dapat melihat hasil serangan in-band (itulah sebabnya serangan semacam itu biasanya disebut sebagai “seranganblind SQL Injectionâ€�).Â


Sebaliknya, penyerang dapat merekonstruksi struktur database dengan mengirimkan payload, mengamati respons aplikasi web dan perilaku yang dihasilkan dari database server. Ada dua jenis SQL Injection inferensial yaitu SQLI berbasis Blind-boolean dan SQLI berbasis Blind-time.

 1. Boolean-based (content-based) Blind SQLI: Boolean-based SQL Injection adalah teknik inferential SQL Injection yang mengandalkan pengiriman kueri SQL ke database yang memaksa aplikasi untuk mengembalikan hasil yang berbeda bergantung pada apakah kueri mengembalikan hasil TRUE atau FALSE. Bergantung pada hasilnya, konten dalam respons HTTP akan berubah, atau tetap sama. Hal ini memungkinkan penyerang untuk menyimpulkan apakah payload yang digunakan mengembalikan true atau false, meskipun tidak ada data dari database yang dikembalikan.

 2. Time-based Blind SQLI: Time-based SQL Injection adalah teknik inferential SQL Injection yang mengandalkan pengiriman kueri SQL ke database yang memaksa database untuk menunggu selama jumlah waktu tertentu (dalam detik) sebelum merespons. Waktu respons akan menunjukkan kepada penyerang apakah hasil kueri TRUE atau FALSE. tergantung pada hasilnya, respons HTTP akan dikembalikan dengan penundaan, atau segera dikembalikan. Hal ini memungkinkan penyerang untuk menyimpulkan apakah payload yang digunakan menampilkan true atau false, meskipun tidak ada data dari database yang dikembalikan.


3. Out-of-band SQLI


Out-of-band SQL Injection tidak terlalu umum, sebagian besar karena bergantung pada fitur yang diaktifkan pada server database yang digunakan oleh aplikasi web. Out-of-band SQL Injection terjadi ketika penyerang tidak dapat menggunakan saluran yang sama untuk meluncurkan serangan dan mengumpulkan hasil. Teknik out-of-band, menawarkan penyerang alternatif dari teknik inferential time-based, terutama jika respons server tidak terlalu stabil (membuat serangan inferential time-based tidak dapat diandalkan).


Bagaimana Mencegah Serangan SQL Injection?


Gunakan beberapa tips berikut dibawah ini, untuk membantu mencegah serangan SQL Injection pada aplikasi web kalian.

  * Batasi Hak Istimewa Aplikasi: Batasi kredensial pengguna sehingga hanya hak-hak yang dibutuhkan aplikasi untuk berfungsi yang digunakan. Setiap serangan SQL Injection yang berhasil akan berjalan dalam konteks kredensial pengguna. Meskipun membatasi hak istimewa tidak akan mencegah serangan SQL Injection secara langsung, itu akan membuatnya jauh lebih sulit untuk diterapkan.

  * Kebijakan Kata Sandi SA yang Kuat: Seringkali, penyerang memerlukan fungsionalitas akun administrator untuk menggunakan perintah SQL tertentu. Jauh lebih mudah untuk “memaksaâ€� sandi SA (System Administrator) jika lemah, dan akan meningkatkan kemungkinan serangan SQL Injection yang berhasil. Pilihan lainnya adalah tidak menggunakan akun SA sama sekali, dan sebaliknya membuat akun khusus untuk tujuan tertentu.

  * Skema Pesan Kesalahan yang Konsisten: Pastikan kalian memberikan informasi sesedikit mungkin kepada pengguna ketika terjadi kesalahan database. Jangan ungkapkan seluruh pesan kesalahan. Pesan kesalahan perlu ditangani di web dan server aplikasi. Saat server web mengalami kesalahan pemrosesan, server web seharusnya merespons dengan laman web umum, atau mengarahkan pengguna ke lokasi standar. Informasi debug, atau detail lain yang dapat berguna bagi calon penyerang, tidak boleh diungkapkan. Server aplikasi, seperti WebSphere, sering kali diinstal dengan pesan kesalahan atau setelan debug diaktifkan secara default. Lihat dokumentasi server aplikasi kalian untuk informasi tentang menyembunyikan pesan kesalahan tersebut.


Kesimpulan


Jadi apa itu SQL Injection? Sederhananya SQL Injection adalah serangan terhadap aplikasi web, bukan server web atau sistem operasi itu sendiri. Sesuai namanya, SQL Injection adalah tindakan menambahkan perintah SQL yang tidak diharapkan ke kueri, sehingga memanipulasi database dengan cara yang tidak diinginkan oleh administrator atau pengembang database. Jika berhasil, data dapat diekstrak, dimodifikasi, disisipkan atau dihapus dari server database yang digunakan oleh aplikasi web yang rentan. Dalam keadaan tertentu, SQL Injection dapat digunakan untuk mengambil kendali penuh atas suatu sistem.


Hopefully, this article about What is SQL Injection: How it Works, Examples, and Types, gives you a little insight. Also, read an article about What Is Streaming And How Does It Work? that you may need to know. Thank you.

Previous Post Next Post