参考:https://www.cnblogs.com/labster/p/14717805.html
在这里插入图片描述

Nginx中间件

1.介绍

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like
协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中 表现较好。

1.文件解析漏洞

1.漏洞描述

该漏洞是由于Nginx中php配置不当而造成的,与Nginx版本无关,但在高版本的php中,由于security.limit_extensions的引入,使得该漏洞难以被成功利用。
在已经上传了恶意1.jpg文件后,访问/1.jpg/xxx.php,(路径修复cgi.fix_pathinfo=1后)使得Nginx将
其解析为php文件传给php-cgi程序(传给路径位于SERVER[“SCRIPT_FILENAME”],修复去除路径位于
SERVER[“PATH_INFO”]),但cgi程序将其解析为1.jpg并执行。

2.漏洞原理分析

Nginx的处理程序和FastCGI处理程序不同导致
Nginx拿到URI为/1.jpg/xxx.php后,识别处后缀是.php,认为是php文件,转交给PHP FastCGI处理程
序去处理。PHP FastCGI处理程序识别该URI: /1.jpg/xxx.php不存在,按照PHP FastCGI处理程序自己
的规则,删去最后的/xxx.php,又看/1.jpg存在,就将/1.jpg当成要执行的文件,就成功解析。
Nginx传送给PHP FastCGI处理程序的路径可以在phpinfo中查看【传送路径查看】
在这里插入图片描述cgi.fix_pathinfo为php中的一个选项,默认开启为1,作用为修理路径,也就是对路径URI的处理规则

当php遇到文件路劲为/1.jpg/xxx.php/ss.001时,该文件不存在,会删除最后的/ss.001,再判断/1.jpg/xxx.php是否存在,若存在则将/1.jpg/xxx.php当作/1.jpg/xxx.php/ss.001文件,若不存在,则继续删除最后一个路径。删除的多余路径会存在PATH_INFO中,在这里为ss.001
在这里插入图片描述

3.漏洞复现

使用phpstudy nginx php5.2.7
在这里插入图片描述
在这里插入图片描述

http://localhost/123.jpg/123.php

在这里插入图片描述

在这里插入图片描述

4.修复方案

1、 将php.ini文件中的cgi.fix_pathinfo的值设置为0,这样php再解析1.php/1.jpg这样的目录时,只要1.jpg
不存在就会显示404页面
2、 php-fpm.conf中的security.limit_extensions后面的值设置为.php

2.目录遍历漏洞

1.漏洞描述

Nginx的目录遍历与apache一样,属于配置方面的问题,错误的配置可导致目录遍历与源码泄露。

2.漏洞原理

修改nginx.conf,在如下图位置添加autoindex on

autoindex on;

autoindex on 开启目录浏览 autoindex off关闭目录浏览 默认是关闭状态
在这里插入图片描述

3.漏洞复现

1)在网站根目录下创建一个文件夹test

2)访问该文件夹
在这里插入图片描述

4.漏洞修复
1.设置 autoindex off 关闭目录浏览
2.删除 autoindex on

Mistake 2. 目录穿越漏洞

Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞。

错误的配置文件示例(原本的目的是为了让用户访问到/home/目录下的文件):

location /files {
    alias /home/;
}

Payload: http://your-ip:8081/files../ ,成功穿越到根目录:
在这里插入图片描述

Mistake 3. add_header被覆盖

Nginx配置文件子块(server、location、if)中的add_header,将会覆盖父块中的add_header添加的HTTP头,造成一些安全隐患。

如下列代码,整站(父块中)添加了CSP头:

add_header Content-Security-Policy "default-src 'self'";
add_header X-Frame-Options DENY;location = /test1 {
    rewrite ^(.*)$ /xss.html break;
}location = /test2 {
    add_header X-Content-Type-Options nosniff;
    rewrite ^(.*)$ /xss.html break;
}

但/test2的location中又添加了X-Content-Type-Options头,导致父块中的add_header全部失效:

XSS可被触发:

没复现成功
在这里插入图片描述

3.空字节代码执行漏洞

1.漏洞描述

在使用PHP-FastCGI执行php的时候,URL里面在遇到%00空字节时与FastCGI处理不一致,导致可在非php文件中嵌入php代码,通过访问url+%00.php来执行其中的php代码。如:
http://local/robots.txt.php会把robots.txt文件当作php来执行。
影响版本:

nginx 0.5.*
nginx 0.6.*
nginx 0.7 <= 0.7.65
nginx 0.8 <= 0.8.37

一般需要配合文件上传进行

2.漏洞复现

开启nginx

在网站目录下添加1.jpg文件

访问该文件

4)抓包,添加%00

这里由于该图非正常,在抓包时最后面添加…,可以让burpsuite抓到
在这里插入图片描述

将请求修改为:

/1.jpg..php

在这里插入图片描述
发包即可
在这里插入图片描述

3.漏洞修复

1.在nginx虚拟机配置或者fcgi.conf配置加如下代码:

if ($request_filename ~* (.*)\.php) { 
set $php_url $1; 
}
if (!-e $php_url.php) { 
return 403; 
}

2.升级 nginx

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部