[中间件漏洞]nginx漏洞复现

目录

文件解析漏洞

原理分析

复现过程

 防御方法

目录遍历漏洞 

原理分析

复现过程

防御方法

空字节代码执行漏洞

复现过程

防御方法 

整数溢出漏洞(CVE-2017-7529)

复现过程

防御方法

文件名逻辑漏洞(CVE-2013-4547) 

复现过程

 防御方法


文件解析漏洞

原理分析

该漏洞是由于Nginx中php配置不当而造成的,与Nginx版本无关,但在高版本的php中,由于 security.limit_extensions的引入,使得该漏洞难以被成功利用。

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当成要执行的文件,就成功解析。 

复现过程

利用vulhub靶场进行复现

进入靶场路径

[root@server nginx]# cd nginx_parsing_vulnerability/

启动靶场

docker-compose up -d

查看端口

docker-compose ps

 访问靶场环境

[中间件漏洞]nginx漏洞复现_第1张图片

 上传一个提前制作好的图片马,图片马内容为phpinfo,上传后返回图片的路径[中间件漏洞]nginx漏洞复现_第2张图片

访问该图片可以成功显示[中间件漏洞]nginx漏洞复现_第3张图片

在路径后增加/test.php 并访问,发现图片已经被解析成为php文件

[中间件漏洞]nginx漏洞复现_第4张图片

 防御方法

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

2、 php-fpm.conf中的security.limit_extensions后面的值设置为.php,表示仅支持.php后缀解析


目录遍历漏洞 

原理分析

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

修改nginx.conf,添加autoindex on

autoindex on 开启目录浏览

autoindex off关闭目录浏览 默认是关闭状态

复现过程

利用vulhub靶场复现

进入靶场路径

[root@server nginx]# cd insecure-configuration/

 启动环境并查看端口

docker-compose up -d   #启动靶场
docker-compose  ps     #查看端口

访问靶场环境(8081端口)

[中间件漏洞]nginx漏洞复现_第5张图片

访问 http://your-ip:8081/files…/ 

穿越到根目录

[中间件漏洞]nginx漏洞复现_第6张图片

防御方法

1.设置 autoindex off 关闭目录浏览

2.删除 autoindex on


空字节代码执行漏洞

在使用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

复现过程

创建一个1.jpg图片马,内容为phpinfo

上传文件后进行抓包,修改上传文件名为1.jpg%00.php

发包后发现图片被解析为php文件

[中间件漏洞]nginx漏洞复现_第7张图片

防御方法 

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

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

2.升级 nginx


整数溢出漏洞(CVE-2017-7529)

在 Nginx 的 range filter 中存在整数溢出漏洞,可以通过带有特殊构造的 range 的 HTTP 头的恶意请求 引发这个整数溢出漏洞,并导致信息泄露。 该漏洞影响所有 0.5.6 - 1.13.2版本内默认配置模块的Nginx只需要开启缓存攻击者即可发送恶意请求进 行远程攻击造成信息泄露。

当Nginx服务器使用代理缓存的情况下攻击者通过利用该漏洞可以拿到服务器的后端真实IP或其他敏感信息。

该漏洞利用难度低可以归属于low-hanging-fruit的漏洞在真实网络攻击中也有一定利用价值。

复现过程

[root@server nginx]# cd CVE-2017-7529/
[root@server CVE-2017-7529]# docker-compose up -d

[中间件漏洞]nginx漏洞复现_第8张图片

调用python3 poc.py http://your-ip:8080/,读取返回结果:

 [中间件漏洞]nginx漏洞复现_第9张图片

防御方法

升级版本


文件名逻辑漏洞(CVE-2013-4547) 

这一漏洞的原理是非法字符空格和截止符(\0)会导致Nginx解析URI时的有限状态机混乱,此漏洞可导 致目录跨越及代码执行,其影响版本为:nginx 0.8.41 – 1.5.6

复现过程

#启动环境
[root@server nginx]# cd CVE-2013-4547/
[root@server CVE-2013-4547]# docker-compose up -d

[中间件漏洞]nginx漏洞复现_第10张图片

创建 abc.jpg 文件,并上传 抓包,在该文件最后添加一个空

[中间件漏洞]nginx漏洞复现_第11张图片

 [中间件漏洞]nginx漏洞复现_第12张图片

 

 访问图片地址,抓包

http://ip/uploadfiles/abc.jpg

将请求体中abc.jpg后加入两个空格.php变成

[中间件漏洞]nginx漏洞复现_第13张图片

 再次修改HEX,找到20 20,把第二个20修改成00

 

 成功解析

[中间件漏洞]nginx漏洞复现_第14张图片

 

 防御方法

升级nginx

你可能感兴趣的:(安全,中间件,nginx,php)