Nginx 文件名逻辑漏洞(CVE-2013-4547)复现
漏洞原理
- 影响范围: Nginx 0.8.41 ~ 1.4.3
- 影响范围: Nginx 1.5.0 ~ 1.5.7
Nginx在解析php文件的时候通常在配置文件中如下配置
location ~ \.php$ {
root html;
include fastcgi_params;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT /var/www/html;
}
通过$正则表达式匹配文件是否已.php后缀名结束然后将该文件交给fastcgi执行,该漏洞绕过的原因是正则匹配和Nginx匹配结合起来的漏洞
首先例如我们给一个文件名test.png\x00.php,在上诉配置文件使用正则匹配成功确定是一个php文件,但是Nginx在遇到\x00就会结束,实际交给fastcgi的文件名就是test.png
所以这里我们只需要上传一个test.png\x00.php,\x00代表十六进制数据,可以绕过Nginx解析,但是在实际利用过程中是不行的,通过实验环境上面的思路漏洞利用失败
这里参考了https://blog.csdn.net/Blood_Pupil/article/details/88565176博客,需要再\x00前面加入\x20空格,就可以让Nginx运行不报错正常执行,这是一个逻辑漏洞
漏洞利用
上传一个含有php代码的图片,在文件后缀名后方加入\x20空格,这是就会在Linux机器中就会拥有一个test.png空格的文件

上传后,因为这个文件后缀名含有空格,在url中需要加入%20访问该文件,测试该文件是否上传成功

可以看到这里文件成功上传,接着我们进行漏洞利用,访问test.png在文件后方加入\x20\x00.php

利用成功


浙公网安备 33010602011771号