当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2011-01413

漏洞标题:微软ASP拒绝服务漏洞

相关厂商:微软

漏洞作者: 爱梅小礼

提交时间:2011-02-24 12:12

修复时间:2011-03-26 15:00

公开时间:2011-03-26 15:00

漏洞类型:设计错误/逻辑缺陷

危害等级:中

自评Rank:10

漏洞状态:未联系到厂商或者厂商积极忽略

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2011-02-24: 积极联系厂商并且等待厂商认领中,细节不对外公开
2011-03-26: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

加入容错语句的程序一旦发生非致命性错误,可能导致某些变量被异常赋值。当某种条件满足时,程序会产生死循环,占用大量系统资源直至脚本超时,此间会产生拒绝服务的现象。

详细说明:

一段演示代码:

<%
on error resume next
connstr="DBQ="+server.mappath("data/nxnews.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
Set conn=Server.CreateObject("ADODB.CONNECTION")
conn.open connstr
id=request("id")
Set rs= Server.CreateObject("ADODB.Recordset")
sql="select * from NEWS where id="&id
rs.open sql,conn,1,1
if not rs1.EOF then
Response.Write ("当前指针没在结尾<br />")
end if
if rs1.EOF then
Response.Write ("当前指针在结尾<br />")
end if
if not rs1.BOF then
Response.Write ("当前指针没在开头<br />")
end if
if rs1.BOF then
Response.Write ("当前指针在开头<br />")
end if
'do while not rs.eof
'Response.write("这段代码将循环输出")
'rs.movenext
'loop
rs.close
set rs=nothing
%>


正常情况下提交参数id=1,返回正常:


当前指针指向一个存在的记录,所以它既没在数据集的开头也没在结尾,所以此时的返回结果是正常的。但是如果提交错误的参数强制数据查询报错,那么将会是另外一种情形。
在看结果前我们先了解一下如何使数据库查询出错,以上诉代码为例:
提交单引号,不过防注入措施可能将其过滤
提交空数据,不对id赋值,直接访问search.asp
如果是MSSQL,可以提交注释符“--”试试。
本例为数字型查询,因此通过提交字符串可使其运行出错:


在代码中加入On errot resume next这条容错语句。再次访问,发现四个数据集变量被异常赋值:


这样的异常赋值可能导致程序陷入死循环。去掉代码中的注释,可以看出死循环的的效果:


它大量的占用了系统资源


经过测试,本程序与所用数据库无关。

漏洞证明:

demo:下载这个图片,用rar打开


如有问题,可联系本人邮箱

修复方案:

严格校验输入参数

版权声明:转载请注明来源 爱梅小礼@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝

漏洞Rank:5 (WooYun评价)