CVE-2013-4547 Nginx文件名解析漏洞详解

今天继续给大家介绍渗透测试相关知识,本文主要内容是CVE-2013-4547 Nginx文件名解析漏洞详解。

免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!

一、漏洞简介

文件上传之中间件解析漏洞详解一文中,我曾经简单介绍过Nginx的文件解析漏洞,该漏洞编号为CVE-2013-4547。该漏洞广泛存在于0.8.41-1.4.3以及1.5.0-1.5.7版本的Nginx中,该漏洞存在于Nginx于PHP的配置上,如果配置不当,很容易使得Nginx实现对%00等特殊字符解析出现问题,造成Nginx将特殊构造的URL交给PHP来进行处理,而Nginx则因为特殊字符的问题,无法接收含有特殊字符的URL或者是造成了在%00位置处的截断,从而造成了客户上传的文件被当作PHP代码来解析。

二、Vulhub漏洞环境启动

我们还是使用Vulhub靶场来搭建CVE-2013-4547漏洞的环境,Vulhub靶场下载及搭建过程和步骤可以参考以下文章:Vulhub漏洞靶场搭建和使用
在安装完Vulhub后,我们找到对应的漏洞所在的目录,执行命令:

docker-compose build

就可以下载并构建该漏洞的环境,该命令执行结果如下所示:
在这里插入图片描述
之后,我们执行命令:

docker-compose up -d

即可开启Docker虚拟机,运行包含该漏洞的环境,该命令执行结果如下所示:
在这里插入图片描述
之后,我们执行命令:

docker-compose config

可以查看当前虚拟环境的配置,该命令执行结果如下所示:
在这里插入图片描述
从以上可以看出,当前系统开启了8080端口,以对应虚拟环境中Nginx的80端口。

三、漏洞实战

我们访问目标系统的8080端口,结果如下所示:
在这里插入图片描述
我们选择一张含有木马的文件,点击上传,同时开启Burpsuit抓包,截获文件上传的数据包后,在文件名称的后面添加一个空格,这样,文件上传后也会出现一个空格。我们的环境是Linux系统,而对于Linux系统而言,其允许一个文件的结尾是空格,因此该文件中的空格会保存下来。修改数据包并上传后的结果如下所示:
在这里插入图片描述
之后,我们尝试构造一个异常的URL,即
192.168.168.13/uploadfiles/exp.jpg%20%00%2e.php
上述%20%00%2e,都要用URL进行解码,最终的数据包及响应如下所示:
在这里插入图片描述
从上图可以看出,我们访问该URL后,由于系统漏洞,会将该JPG文件当作PHP来进行处理,从而使得该文件中的PHP代码被解析。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

猜你喜欢

转载自blog.csdn.net/weixin_40228200/article/details/127132011