Keselamatan

Serangan Pemotongan SQL

Serangan Pemotongan SQL
Kerentanan SQL Truncation berlaku apabila pangkalan data memotong input pengguna kerana sekatan panjangnya. Penyerang dapat mengumpulkan maklumat mengenai panjang bidang kritikal (seperti nama pengguna) dan memanfaatkan maklumat ini untuk mendapatkan akses yang tidak dibenarkan. Penyerang boleh log masuk sebagai beberapa pengguna lain, seperti pentadbir, dengan kata laluan berdaftar mereka sendiri.

Kerentanan pemotongan SQL biasanya terdapat dalam pangkalan data MySQL. Kerentanan ini pertama kali dijelaskan dalam CVE-2008-4106, yang berkaitan dengan CMS WordPress.

Bagaimana Serangan Pemotongan SQL Berfungsi

Serangan ini berfungsi kerana pemotongan input pengguna dalam pangkalan data menggunakan fungsi 'pemilihan' dan 'penyisipan'.

Katakan bahawa pembangun membuat jadual "pengguna" melalui pertanyaan berikut:

buat pengguna jadual (
user_id INT BUKAN NULL AUTO_INCREMENT,
user_name VARCHAR (20) BUKAN NULL,
kata laluan VARCHAR (40) BUKAN NULL,
KUNCI UTAMA (user_id)
);

Menggunakan skema ini, jika pembangun membuat akaun pentadbir dengan yang berikut:

user_name = 'pentadbir'
kata laluan = "rahsia_p4ssw0ord"

Jelas, bukti kelayakan ini tidak diketahui umum. Hanya ada satu akaun pentadbir dalam pangkalan data, dan jika penyerang cuba mendaftarkan akaun lain dengan nama pengguna 'admin', penyerang akan gagal kerana pemeriksaan berlebihan pangkalan data. Penyerang masih boleh memotong pemeriksaan redundansi tersebut untuk menambahkan akaun pentadbir lain dengan memanfaatkan kerentanan SQL Truncation. Katakan bahawa penyerang mendaftarkan akaun lain dengan input berikut:

Nama_pengguna = 'adminxxxxxxxxxxxxxxxrandom'
(x adalah ruang)
&
Kata Laluan = "RandomUser"

Pangkalan data akan mengambil 'user_name' (26 aksara) dan memeriksa apakah ini sudah ada. Kemudian, input user_name akan dipotong, dan 'admin' ('admin' dengan ruang) akan dimasukkan ke dalam pangkalan data, sehingga menghasilkan dua pengguna admin duplikat.

Penyerang kemudian dapat membuat pengguna 'admin' dengan kata laluannya sendiri. Kini, pangkalan data mempunyai dua entri 'user_name' admin, tetapi dengan kata laluan yang berbeza. Penyerang boleh log masuk dengan bukti kelayakan yang baru dibuat untuk mendapatkan panel pentadbir kerana kedua nama pengguna "admin" dan "admin" sama untuk tahap pangkalan data. Sekarang, kita akan melihat contoh serangan praktikal.

Serangan Contoh

Dalam contoh ini, kita akan mengambil senario dari laman web overthewire.org. Komuniti overthewire menyediakan CTF wargame di mana kita dapat mempraktikkan konsep keselamatan kita. Senario pemotongan SQL berlaku dalam permainan natas Tahap 26-> 27. Kita boleh mencapai tahap menggunakan perkara berikut:

URL: http: // natas27.natas.makmal.berlebihan.org
Nama pengguna: natas27
Kata Laluan: 55TBjpPZUUJgVP5b3BnbG6ON9uDPVzCJ

Tahap ini boleh didapati di: https: // overthewire.org / wargames / natas / natas27.html. Anda akan ditunjukkan halaman masuk yang rentan terhadap serangan SQL Truncation.

Setelah memeriksa kod sumber, anda akan melihat bahawa panjang nama pengguna adalah 64, seperti yang ditunjukkan di bawah.

Pengguna bernama 'natas28' sudah ada. Tujuan kami adalah untuk membuat pengguna lain yang bernama 'natas28' menggunakan serangan SQL_truncation. Oleh itu, kami akan memasukkan natas28, diikuti oleh 57 ruang dan abjad rawak (dalam kes kami, a), nama pengguna, dan kata laluan apa pun. Huruf 'a' tidak dapat dilihat dalam tangkapan skrin kerana nama pengguna yang panjangnya 65 aksara. Selepas penciptaan akaun pengguna, anda akan dapat melihat 'a.'

Sekiranya pangkalan data mengandungi kerentanan sql_truncation, maka pangkalan data kini harus mempunyai dua nama pengguna 'natas28'. Satu nama pengguna akan mengandungi kata laluan kami. Mari kita cuba memasukkan bukti kelayakan di halaman log masuk.

Sekarang, kami log masuk sebagai pengguna 'natas28'.

Mitigasi

Untuk mengurangkan serangan ini, kita perlu mempertimbangkan pelbagai faktor.

Sebagai contoh, mari kita periksa mod ketat menggunakan pertanyaan berikut:

mysql> pilih @@ sql_mode

Kami akan membuat pangkalan data dan pengguna jadual.'

mysql> BUAT ujian DATABASE
Pertanyaan OK, 1 baris terjejas (0.02 saat)
mysql> Uji penggunaan
Pangkalan data berubah
mysql> BUAT pengguna TABLE (nama pengguna VARCHAR (10), kata laluan VARCHAR (10));
Pertanyaan OK, 0 baris terjejas (0.05 saat)

Seterusnya, kami akan membuat pengguna pentadbir dengan kelayakan menggunakan pertanyaan INSERT.

mysql> INSERT INTO pengguna NILAI ('admin', 'password1');
Pertanyaan OK, 1 baris terjejas (0.01 saat)

Kita dapat melihat maklumat jadual 'pengguna' menggunakan pilihan 'pilih * dari pengguna'.

Panjang nama pengguna adalah 10 aksara. Sekarang, kita akan mencuba serangan pemotongan SQL.

Apabila kami cuba memasukkan perkara berikut:

Nama Pengguna = 'adminxxxxxa'
(x adalah ruang)
&
Kata Laluan = 'pass2'

Kami akan mendapat ralat, yang bermaksud bahawa mod ketat benar-benar berkesan.

mysql> INSERT INTO nilai pengguna ('admin a', 'pass2')
KESALAHAN 1406 (22001): Data terlalu panjang untuk lajur 'nama pengguna' pada baris 1

Tanpa mod ketat diaktifkan, pangkalan data akan mengeluarkan amaran, tetapi masih akan memasukkan data ke dalam jadual.

Kesimpulannya

Penyerang dapat memperoleh akses ke akaun dengan hak istimewa tinggi jika kerentanan sql_trunction wujud dalam aplikasi anda. Penyerang dapat dengan mudah mendapatkan maklumat tentang nama pengguna dan panjang pangkalan data menggunakan medan kritikal, kemudian membuat nama pengguna yang sama, diikuti dengan spasi dan abjad rawak setelah panjang minimum, sehingga menghasilkan banyak akaun dengan hak istimewa tinggi. Kerentanan ini sangat kritikal, tetapi dapat dielakkan jika anda mengambil langkah berjaga-jaga keselamatan, seperti mengaktifkan mod ketat untuk input pengguna dan menjadikan bidang sensitif sebagai Kunci Utama dalam pangkalan data.

Tutorial OpenTTD
OpenTTD adalah salah satu permainan simulasi perniagaan yang paling popular di luar sana. Dalam permainan ini, anda perlu membuat perniagaan pengangku...
SuperTuxKart untuk Linux
SuperTuxKart adalah tajuk hebat yang direka untuk membawa anda pengalaman Mario Kart secara percuma pada sistem Linux anda. Ia cukup mencabar dan meny...
Tutorial Battle for Wesnoth
The Battle for Wesnoth adalah salah satu permainan strategi sumber terbuka paling popular yang boleh anda mainkan pada masa ini. Bukan hanya permainan...