Saya sedang menguji ketahanan terhadap serangan injeksi pada database SQL Server.
Semua nama tabel dalam db adalah huruf kecil, dan susunannya adalah case-sensitive, Latin1_General_CS_AS .
String yang dapat saya kirim dipaksa untuk huruf besar, dan panjangnya bisa maksimum 26 karakter. Jadi saya tidak dapat mengirim DROP TABLE karena nama tabel akan menjadi huruf besar dan dengan demikian pernyataan akan gagal karena pemeriksaan.
Jadi - apa kerusakan maksimum yang bisa saya lakukan dalam 26 karakter?
EDIT
Saya tahu semua tentang kueri parameterised dan sebagainya - mari kita bayangkan bahwa orang yang mengembangkan front end yang membangun kueri untuk dikirim tidak menggunakan params dalam kasus ini.
Saya juga tidak mencoba melakukan sesuatu yang jahat, ini adalah sistem yang dibangun oleh orang lain di organisasi yang sama.
sumber
Jawaban:
Mudah:
Atau, saya kira dalam hal ini akan
Pilih variasi Anda untuk ini.
Kemungkinan Anda dapat menguji ini sekarang terhadap sistem Anda saat ini, tetapi sejumlah perubahan kecil dalam database dari waktu ke waktu dapat membatalkan pengujian Anda. String karakter dapat berubah, seseorang dapat membuat prosedur tersimpan dengan huruf kecil yang memiliki potensi destruktif - apa pun. Anda tidak dapat mengatakan dengan keyakinan 100% bahwa tidak ada serangan 26 karakter destruktif yang bisa dibangun seseorang.
Saya sarankan Anda menemukan cara untuk membuat pengembang mengikuti praktik keamanan terbaik standar industri dasar , jika hanya untuk kepentingan Anda sendiri sebagai seseorang yang saya anggap setidaknya sebagian bertanggung jawab jika pelanggaran keamanan terjadi.
Edit:
Dan untuk kejahatan / kesenangan, Anda dapat mencoba mengaktifkan setiap bendera jejak. Ini akan menarik untuk diamati. Rasanya seperti posting blog Brent Ozar akan membuat ...
sumber
SET LOCK_TIMEOUT 0;
,SET LANGUAGE Malaysian;
,SET ANSI_NULLS OFF:
...SET
hanya memengaruhi pengaturan sesi, bagaimana pengaturan satabase dan server diubah (ALTER DATABASE ...;
?)DROP DATABASE ..;
Akan menimbulkan lebih banyak kerusakan jika, jika berhasil;)The
SHUTDOWN
perintah atauKILL
Command (memilih nomor acak lebih dari 50) keduanya mengambil secara signifikan kurang dari 26 karakter, meskipun account mengeksekusi query aplikasi mudah-mudahan tidak memiliki izin yang memadai untuk menjalankan ini.sumber
Anda bisa membuat tabel yang kemudian Anda isi sampai akhir waktu atau ruang disk habis mana yang lebih dulu.
sumber
while 1=1 insert t values('')
is 30 ...create table x(i int)
=>while 1=1 insert t select 0
is 27x:insert t select 0 GOTO x
persis 26 meskipun.Bergantung pada definisi kerusakan Anda, Anda dapat menjalankan ini: WAITFOR DELAY '23: 59 'Agar benar-benar jahat, Anda dapat menggunakan alat pengujian beban untuk menjalankannya dari 32.768 klien.
sumber
Variasi berdasarkan jawaban @ MikaelEriksson dan @ MartinSmith membalas komentar awal saya:
Awalnya saya sudah mencoba membuat pernyataan WHILE, tetapi yang terbaik yang bisa saya lakukan adalah 27 karakter:
Tetapi Martin menunjukkan GOTO:
GOTO ... akar semua kejahatan dan pembuat pernyataan penyisipan infinite-loop dalam 26 karakter.
Dengan mengatakan itu ... mungkin menguntungkan untuk tetap menggunakan CHAR (99) daripada int karena itu akan menggunakan lebih banyak ruang. Pilihan lain menggunakan nama yang lebih panjang dan akan menghancurkan batas 26 karakter ... atau menggunakan lebih sedikit ruang penyimpanan per baris.
Kode Uji Lengkap:
sumber
set @S = 'x:insert t;select 0;GOTO x';
untuk kompatibilitas serangan injeksi Anda di masa depan;);
s ... yang kedua baik-baik saja - menggantikan spasi dan berfungsi jika tidak diperlukan. Yang pertama memecah kueri - memisahkan pernyataan INSERT dari pernyataan SELECT.Bergantung pada seberapa merusaknya Anda anggap sebagai power-down. :-)
Ini membutuhkan xp_cmdshell untuk diaktifkan di server, sesuatu yang tidak berlaku untuk beberapa versi terakhir dari SQL Server. Ini juga mensyaratkan bahwa akun layanan memiliki hak mematikan, yang mungkin atau mungkin tidak dimiliki.
Mengaktifkan xp_cmdshell mungkin melampaui batas 26 karakter Anda. Apakah Anda mengizinkan beberapa suntikan?
sumber