Nginx文件名逻辑漏洞(CVE-2013-4547)

Nginx文件名逻辑漏洞(CVE-2013-4547)

漏洞说明

影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7

我们只需要上传一个空格结尾的文件,即可使PHP解析之。

我们可以请求如下URI:/test[0x20]/../admin/index.php,这个URI不会匹配上location后面的/admin/,也就绕过了其中的IP验证;但最后请求的是/test[0x20]/../admin/index.php文件,也就是/admin/index.php,成功访问到后台。(这个前提是需要有一个目录叫test:这是Linux系统的特点,如果有一个不存在的目录,则即使跳转到上一层,也会爆文件不存在的错误,Windows下没有这个限制)

漏洞测试

启动漏洞环境:
环境启动后,访问http://your-ip:8080/即可看到一个上传页面。

这个环境是黑名单验证,我们无法上传php后缀的文件,需要利用CVE-2013-4547。我们上传一个1.gif,注意后面的空格:

访问http://your-ip:8080/uploadfiles/1.gif[0x20][0x00].php,即可发现PHP已被解析:

上传一个图片test2.jpg空格 后面加一个空格
Nginx文件名逻辑漏洞(CVE-2013-4547)_第1张图片
上传的文件找不到,是因为浏览器自动将空格编码为%20,服务器中找不到名为“test2.jpg%20”的文件。
接下来,我们想要上传的jpg文件作为php解析,就需要利用未编码的空格和截止符(\0)进行构造
http://ip:8080/uploadfiles/test2.jpgAAAphp
发送请求并使用burpsuite抓包。使用burpsuite将AAA分别更改为20(空格)、00(截止符\0)和2e(分隔符号.)。
Nginx文件名逻辑漏洞(CVE-2013-4547)_第2张图片
这样我们发送的请求就变为:
http://you-ip:8080/uploadfiles/test2.jpg[0x20][0x00].php
Nginx文件名逻辑漏洞(CVE-2013-4547)_第3张图片

你可能感兴趣的:(渗透测试,漏洞复现)