跳转至

Nginx文件名逻辑漏洞

影响版本

Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7

漏洞详情

该漏洞利用了Nginx错误的解析了URL地址,导致可以绕过服务端限制,从而解析PHP文件,造成命令执行的危害。

根据nginx.conf文件中location中的定义,以.php结尾的文件都解析为php。若我们访问的文件名为shell.gif[0x20][0x00].php,该文件名以.php结尾可以被FastCGI接收,FastCGI在读取文件名时被00截断,导致读取的文件名为1.gif[0x20],配合limit_extensions为空即可利用成功配合limit_extensions为空即可利用成功。该漏洞利用条件有两个:

1.Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7

2.php-fpm.conf中的security.limit_extensions为空,也就是说任意后缀名都可以解析为PHP

复现过程

1、 使用docker搭建漏洞环境

2、 执行如下命令,运行环境

docker-compose up -d

3、 浏览器访问http://192.168.247.129:8080/ 4.上传个图片马 发现上传成功并返回路径

5.5.接下来需要构造我们 test.gif[0x20][0x00].php 来造成Nginx解析漏洞,使我们的test.gif被解析成php

url:http://192.168.247.129:8080/uploadfiles/test.gif%20%20.php

手工更改成下图 选中%00进行解码 转发数据包 解析成功!