0x01 漏洞描述
漏洞介绍:nginx是一款高性能的web服务器,使用非常广泛,其不仅经常被用作反向代理,也可以非常好的支持PHP的运行。Nginx<8.03
默认情况下可能导致服务器错误的将任何类型的文件以PHP的方式进行解析,这将导致严重的安全问题,使得恶意的攻击者可能攻陷支持php的nginx服务器。
0x02 概念介绍
0x21 CGI
CGI是规定web server传递过来的数据是何种标准格式,简单说就是一个协议。web server(例如nginx)只是内容的分发者。比如:
|
|
所以,CGI本质上就是规定要传哪些数据、以什么样的格式传递给后方处理这个请求的协议。
0x22 FastCGI
FastCGI顾名思义也是CGI的一个协议,FastCGI只是优化了CGI程序的性能
0x23 PHP-CGI/PHP-FastCGI
PHP的解释器是PHP-CGI,PHP-CGI只是个CGI程序,他自己本身只能解析请求,返回结果,不会进程管理
0x24 PHP-FPM
PHP-FPM是PHP-CGI进程的管理器,用来管理PHP-CGI进程的,PHP-FPM的管理对象是PHP-CGI
0x03 漏洞分析
nginx默认以cgi的方式支持php的运行,在配置文件中如下配置:
|
|
配置参数说明如下
|
|
所以,漏洞的本质实际上就是由于fcgi和web server对script路径级参数的理解不同出现的问题,这是典型的因为跨系统语境不同导致对同一个请求的不同解释导致的漏洞,它的攻击面是带有这种漏洞的nginx
0x04: 修复方案
- 修改
php.ini
配置
|
|
- nginx配置文件中添加1234567891011if ( $fastcgi_script_name ~ ..*/.*php ){return 403;}/*考虑到MVC框架、用户自定义站点中有可能出现xxx/xx.php的情况,这个规则应该更加细粒度一点,例如*.jpg/.*php、*.txt/.*php*/另外,nginx可以在不需要重启的情况,hotreload配置文件service nginx reload//or/etc/init.d/nginx reload
参考文章:
http://www.80sec.com/nginx-securit.html
http://php.net/manual/zh/ini.core.php
http://www.cnblogs.com/LittleHann/p/4561462.html
http://php.net/manual/zh/install.fpm.configuration.php
http://php.net/manual/zh/install.fpm.php
http://segmentfault.com/q/1010000000256516