各种数据库中的时间延迟技术

  • A+
所属分类:moonsec_com
摘要

本文从使用浏览器与Web应用进行交互这一视角来讨论发现SQL注入问题时所涉及的时间延迟技术 。

本文从使用浏览器与Web应用进行交互这一视角来讨论发现SQL注入问题时所涉及的时间延迟技术

测试应用程序是否存在SQL注入漏洞时,经常发现某一潜在的漏洞难以确认。这可能源于多种原因,但主要是因为Web应用未显示任何错误,因而无法检索任何数据。

对于这种情况,要想识别漏洞,可以向数据库注入时间延迟,并检查服务器的响应是否也已经产生了延迟。时间延迟是一种很强大的技术,Web服务器虽然可以隐藏错误或数据,但必须等待数据库返回结果,因此可用它来确认是否存在SQL注入。该技术尤其适合盲注。

Microsoft SQL Server服务器包含一条向查询引入延迟的内置命令:WAITFOR DELAY 'hours: minutes:seconds'。例如,向Victim公司的Web服务器发送下列请求,服务器的响应大概要花5秒:
 

http://www.victim.com/basket.aspx?uid=45;waitfor delay '0:0:5';-- 

服务器响应中的延迟使我们确信我们正在向后台数据库注入SQL代码。

MySQL数据库没有与WAITFOR DELAY等价的命令,但它可以使用执行时间很长的函数来引入延迟。BENCHMARK函数是很好的选择。MySQLBENCHMARK函数会将一个表达式执行许多次,它通常被用于评价MySQL执行表达式的速度。根据服务器工作负荷和计算资源的不同,数据库需要的时间也会有所不同。但如果延迟比较明显,也可使用该技术来识别漏洞。请看下面的例子:
 

各种数据库中的时间延迟技术
mysql> SELECT BENCHMARK(10000000,ENCODE('hello','mom'));   +----------------------------------------------+   |   BENCHMARK(10000000,ENCODE('hello','mom'))               |   +----------------------------------------------+   |   0                                                                                                                                                                                   |   +----------------------------------------------+   1   row in set (3.65 sec)  
各种数据库中的时间延迟技术

 

执行该查询花费了3.65秒。如果将这段代码注入SQL注入漏洞中,那么将延迟服务器的响应。如果想进一步延迟响应,只需增加迭代的次数即可,如下所示:
 

http://www.victim.com/display.php?id=32; SELECT   BENCHMARK(10000000,ENCODE('hello','mom'));--  

Oracle PL/SQL中,可使用下列指令集创建延迟:

BEGIN DBMS_LOCK.SLEEP(5);   END;  

DBMS_LOCK.SLEEP()函数可以让一个过程休眠很多秒,但使用该函数存在许多限制。首先,不能直接将该函数注入子查询中,因为Oracle不支持堆叠查询(stacked query)。其次,只有数据库管理员才能使用DBMS_LOCK包。

在Oracle PL/SQL中有一种更好的办法,可以使用下面的指令以内联方式注入延迟:

http://www.victim.com/display.php?id=32 or 1=dbms_pipe.receive_   message('RDS', 10)  

DBMS_PIPE.RECEIVE_MESSAGE函数将为从RDS管道返回的数据等待10秒。默认情况下,允许以public权限执行该包。DBMS_LOCK.SLEEP()与之相反,它是一个可以用在SQL语句中的函数。

在最新版本的PostgreSQL数据库(8.2及以上版本)中,可以使用pg_sleep函数来引起延迟:
 

http://www.victim.com/display.php?id=32; SELECT pg_sleep(10);-- 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: