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

利用成功

posted @ 2024-04-07 20:23  Junglezt  阅读(100)  评论(0编辑  收藏  举报