Keamanan

Serangan Pemotongan SQL

Serangan Pemotongan SQL
Kerentanan SQL Truncation terjadi ketika database memotong input pengguna karena batasan panjangnya. Penyerang dapat mengumpulkan informasi tentang panjang bidang kritis (seperti nama pengguna) dan mengeksploitasi informasi ini untuk mendapatkan akses yang tidak sah. Penyerang dapat masuk sebagai pengguna lain, seperti admin, dengan kata sandi terdaftar mereka sendiri.

Kerentanan pemotongan SQL biasanya ada di database MySQL. Kerentanan ini pertama kali dijelaskan di CVE-2008-4106, yang terkait dengan CMS WordPress.

Bagaimana Serangan Pemotongan SQL Bekerja

Serangan ini bekerja karena pemotongan input pengguna dalam database menggunakan fungsi 'seleksi' dan 'penyisipan'.

Misalkan pengembang membuat tabel "pengguna" melalui kueri berikut:

buat pengguna tabel(
user_id INT BUKAN NULL AUTO_INCREMENT,
nama_pengguna VARCHAR(20) BUKAN NULL,
kata sandi VARCHAR(40) BUKAN NULL,
KUNCI UTAMA ( user_id )
);

Menggunakan skema ini, jika pengembang membuat akun admin dengan yang berikut:

nama_pengguna = 'admin'
kata sandi = “secret_p4ssw0ord”

Jelas, kredensial ini tidak bersifat publik. Hanya ada satu akun admin di database, dan jika penyerang mencoba mendaftarkan akun lain dengan nama pengguna 'admin', penyerang akan gagal karena pemeriksaan redundansi database. Penyerang masih dapat melewati pemeriksaan redundansi itu untuk menambahkan akun admin lain dengan mengeksploitasi kerentanan SQL Truncation. Misalkan penyerang mendaftarkan akun lain dengan input berikut:

Nama_pengguna = 'adminxxxxxxxxxxxxxxxrandom'
(x adalah spasi)
&
Kata Sandi = ”Pengguna Acak”

Basis data akan mengambil 'nama_pengguna' (26 karakter) dan memeriksa apakah ini sudah ada. Kemudian, input nama_pengguna akan terpotong, dan 'admin' ('admin' dengan spasi) akan dimasukkan ke dalam database, menghasilkan dua pengguna admin duplikat.

Penyerang kemudian dapat membuat pengguna 'admin' dengan kata sandinya sendiri. Sekarang, database memiliki dua entri 'nama_pengguna' admin, tetapi dengan kata sandi yang berbeda. Penyerang dapat masuk dengan kredensial yang baru dibuat untuk mendapatkan panel admin karena nama_pengguna "admin" dan "admin" sama untuk tingkat basis data. Sekarang, kita akan melihat contoh serangan praktis.

Contoh Serangan

Dalam contoh ini, kami akan mengambil skenario dari situs web overthewire.organisasi. Komunitas overthewire menyediakan CTFs wargame tempat kami dapat mempraktikkan konsep keamanan kami. Skenario pemotongan SQL terjadi pada game natas Level 26->27. Kami dapat mengakses level menggunakan yang berikut:

URL: http://natas27.natas.laboratorium.overthewire.organisasi
Nama pengguna: natas27
Sandi: 55TBjpPZUUJgVP5b3BnbG6ON9uDPVzCJ

Level ini tersedia di: https://overthewire.org/wargames/natas/natas27.html. Anda akan diperlihatkan halaman login yang rentan terhadap serangan SQL Truncation.

Setelah memeriksa kode sumber, Anda akan melihat bahwa panjang nama pengguna adalah 64, seperti yang ditunjukkan di bawah ini.

Pengguna bernama 'natas28' sudah ada. Tujuan kami adalah membuat pengguna lain bernama 'natas28' menggunakan serangan SQL_truncation. Jadi, kami akan memasukkan natas28, diikuti oleh 57 spasi dan alfabet acak (dalam kasus kami, a), nama pengguna, dan kata sandi apa pun. Huruf 'a' tidak terlihat di tangkapan layar karena nama pengguna yang panjangnya 65 karakter. Setelah membuat akun pengguna, Anda akan dapat melihat 'Sebuah.'

Jika database berisi kerentanan sql_truncation, maka database sekarang harus memiliki dua nama pengguna 'natas28'. Satu nama pengguna akan berisi kata sandi kami. Mari kita coba memasukkan kredensial di halaman login.

Sekarang, kita login sebagai pengguna 'natas28'.

Mitigasi

Untuk mengurangi serangan ini, kita perlu mempertimbangkan banyak faktor.

Misalnya, mari kita periksa mode ketat menggunakan kueri berikut:

mysql> pilih @@sql_mode

Kami akan membuat database dan tabel 'pengguna.'

mysql> BUAT tes DATABASE
Kueri OK, 1 baris terpengaruh (0.02 detik)
mysql> Gunakan tes
Basis data berubah
mysql> CREATE TABLE pengguna (nama pengguna VARCHAR(10), kata sandi VARCHAR(10));
Kueri OK, 0 baris terpengaruh (0.05 detik)

Selanjutnya, kami akan membuat pengguna admin dengan kredensial menggunakan kueri INSERT.

mysql> INSERT INTO users VALUES ('admin', 'password1');
Kueri OK, 1 baris terpengaruh (0.01 detik)

Kita dapat melihat informasi tabel 'pengguna' menggunakan opsi 'pilih * dari pengguna'.

Panjang nama pengguna adalah 10 karakter. Sekarang, kita akan mencoba serangan pemotongan SQL.

Saat kami mencoba memasukkan yang berikut:

Nama pengguna = 'adminxxxxxa'
(x adalah spasi)
&
Sandi = 'pass2'

Kami akan mendapatkan kesalahan, artinya mode ketat benar-benar efektif.

mysql> INSERT INTO users values('admin a', 'pass2')
GALAT 1406 (22001): Data terlalu panjang untuk kolom 'nama pengguna' di baris 1

Tanpa mode ketat diaktifkan, database akan menampilkan peringatan, tetapi masih akan memasukkan data ke dalam tabel.

Kesimpulan

Penyerang dapat memperoleh akses ke akun dengan hak istimewa tinggi jika kerentanan sql_trunction ada di aplikasi Anda. Penyerang dapat dengan mudah mendapatkan informasi tentang nama pengguna dan panjang basis datanya menggunakan bidang kritis, kemudian membuat nama pengguna yang sama, diikuti dengan spasi dan alfabet acak setelah panjang minimum, menghasilkan pembuatan beberapa akun dengan hak istimewa tinggi. Kerentanan ini sangat penting, tetapi dapat dihindari jika Anda mengambil beberapa tindakan pencegahan keamanan, seperti mengaktifkan mode ketat untuk input pengguna dan menjadikan bidang sensitif sebagai Kunci Utama dalam database.

Cara mengunduh dan Memainkan Civilization VI Sid Meier di Linux
Pengenalan permainan Civilization 6 adalah konsep modern dari konsep klasik yang diperkenalkan dalam seri game Age of Empires. Idenya cukup sederhana;...
Cara Menginstal dan Memainkan Doom di Linux
Pengantar Doom Seri Doom berasal dari tahun 90-an setelah rilis Doom. Itu adalah hit instan dan sejak saat itu seri game telah menerima banyak penghar...
Vulkan untuk Pengguna Linux
Dengan setiap generasi baru kartu grafis, kami melihat pengembang game mendorong batas kesetiaan grafis dan selangkah lebih dekat ke fotorealisme. Tet...