Nginx + PHP CGI的fix_pathinfo安全漏洞

  1. 具体的重现过程,用php代码修改后缀名后上传,比如说http://www.xx.com/1.jpg,访问的时候用http://www.xx.com/1.jpg/xxx.php

复制代码

这段jpg代码将会被执行!!!

http://docs.php.net/manual/zh/ini.core.php
cgi.fix_pathinfo “1″ PHP_INI_ALL 从 PHP 4.3.0 起可用 请注意:默认为1

解决办法:
1.修改php.ini中的cgi.cgi.fix_pathinfo为0(即使你在php.ini中没有搜到,也要设置,没有搜到表示默认为1)
2.判断文件上传类型时使用严格的判断,至于怎么判断,参见:http://www.54chen.com/php-tech/php-upload-file-types-to-determine-the-complete-program-and-php-nginx-upload-size-and-complete-control-program.html
3.把nginx的判断正则修改为去除/
if ( $fastcgi_script_name ~ \..*\/.*php ) {
return 403;
}

时间: 2024-10-13 21:32:52

Nginx + PHP CGI的fix_pathinfo安全漏洞的相关文章

Nginx 工作原理和优化、漏洞

1.  Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作. Nginx的模块从结构上分为核心模块.基础模块和第三方模块: 核心模块:HTTP模块.EVENT模块和MAIL模块 基础模块:HTTP Access模块.HTTP F

Nginx工作原理和优化、漏洞(转)

查看安装了哪些模块命令: [[email protected] xcache]# nginx/sbin/nginx -Vnginx version: nginx/1.2.3built by gcc 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) TLS SNI support enabledconfigure arguments: --prefix=/opt/xcache/nginx --with-ipv6 --with-http_ssl_module --with

Nginx工作原理和优化、漏洞

1.  Nginx的模块与工作原理 第三方模块:HTTP Upstream Request Hash模块.Notice模块和HTTP Access Key模块. 图1-1展示了Nginx模块常规的HTTP请求和响应的过程. Nginx 本身做的工作实际很少,当它接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block,而此location中所配置的各个指令则会启动不同的模块去完成工作,因此模块可以看做Nginx真正的劳动工作者.通常一个 location中

结合Nginx以cgi方式安装php5.5.4

新建用户及用户组 groupadd webuser useradd -g webuser webuser 下载php-5.5 下载链接:http://pan.baidu.com/s/1i3CBshv 解包 tar zxvf php-5.5.4.tar.gz cd php-5.5.4 ./configure --prefix=/server/php5 \ --with-mysql=/server/mysql \ --with-mysqli \ --with-jpeg-dir=/usr/lib64

nginx设置cgi.fix_pathinfo漏洞和解决方法

最近在学习nginx的配置,有一个设置需要在php.ini中把 cgi.fix_pathinfo = 1 改成cgi.fix_pathinfo=0, 想了解下这个参数设置的具体功能,所以百度了下,发现这里有一个PHP PATH_INFO的漏洞(详见:https://bugs.php.net/bug.php?id=50852&edit=1)大致先了解下. [漏洞分析]location对请求进行选择的时候会使用URI环境变量进行选择,其中传递到后端Fastcgi的关键变量SCRIPT_FILENAM

IIS 6.0/7.0/7.5、Nginx、Apache 等服务器解析漏洞总结

IIS 6.0 目录解析:/xx.asp/xx.jpg xx.jpg可替换为任意文本文件(e.g. xx.txt),文本内容为后门代码 IIS6.0 会将 xx.jpg 解析为 asp 文件. 后缀解析:/xx.asp;.jpg /xx.asp:.jpg(此处需抓包修改文件名) IIS6.0 都会把此类后缀文件成功解析为 asp 文件. (站长评论:IIS6.0解析漏洞的成因,可以查阅罗哥写的一篇短文:IIS文件名解析漏洞扼要分析) {/xx.asp:.jpg 此类文件在Windows下不允许存

使用fcgiwrap为nginx提供cgi支持

nginx不支持cgi程序,通过fcgi包装程序,可以使nginx间接支持cgi程序. 现在fcgiwrap已经进入了官方源,因此以前的fcgi包装方法就不用了. 安装 #apt-get install fcgiwrap 配置 /etc/nginx/fcgiwrap.conf 1 2 3 4 5 6 7 location ~ \.(cgi|pl).*$ {     gzip off;     fastcgi_pass unix:/var/run/fcgiwrap.socket;     fast

nginx调用cgi脚本

一个小范例 Python使用CGIHTTPServer调用shell作为cgi脚本 mkdir -p /data/cgi-bin vim hello.sh #!/bin/bash echo "Content-Type:text/html" echo ""  echo "hello world!" 执行python -m CGIHTTPServer 然后在浏览器中输入http://<ip>:8000/cgi-bin/hello.sh 即

WEB服务器之——Nginx支持CGI

安装NGINX步骤省略. 以下操作均在su下完成 ====================================================================== 安装perl略.(yum -y install perl*) 开启perl-FCGI支持 perl -MCPAN -e 'install FCGI' perl -MCPAN -e 'install FCGI::ProcManager 配置perl-fcgi守护进程perl-fcgi.pl存放于nginx/s