Nginx 背锅的解析漏洞(CVE-2013-4547)

前面写过一篇nginx不背锅的解析漏洞 是由php fastcgi 配置不当导致的 那么今天这个cve就真是他自己的锅了
 
又名 Nginx 文件名逻辑漏洞(CVE-2013-4547)

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

参考链接:

- http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-4547
- https://blog.werner.wiki/file-resolution-vulnerability-nginx/
- http://www.91ri.org/9064.html

老子研究了一天才弄明白怎么玩 具体原理 额 mmp 

## 漏洞说明

这一漏洞的原理是非法字符空格和截止符(\0)会导致Nginx解析URI时的有限状态机混乱,危害是允许攻击者通过一个非编码空格绕过后缀名限制。举个例子,假设服务器上存在文件:“file.aaa ”,注意文件名的最后一个字符是空格。
则可以通过访问:
http://127.0.0.1/file.aaa空格\0.php
让Nginx认为文件“file.aaa ”的后缀为“.php”。
 
这个漏洞其实和代码执行没有太大关系,其主要原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。
 
举个例子,比如,Nginx匹配到.php结尾的请求,就发送给fastcgi进行解析,常见的写法如下:
```
location ~ \.php$ {
    include        fastcgi_params;

    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
    fastcgi_param  DOCUMENT_ROOT /var/www/html;
}
```
正常情况下(关闭pathinfo的情况下),只有.php后缀的文件才会被发送给fastcgi解析。
 
而存在CVE-2013-4547的情况下,我们请求`1.gif[0x20][0x00].php`,这个URI可以匹配上正则`\.php$`,可以进入这个Location块;但进入后,Nginx却错误地认为请求的文件是`1.gif[0x20]`,就设置其为`SCRIPT_FILENAME`的值发送给fastcgi。
 
fastcgi根据`SCRIPT_FILENAME`的值进行解析,最后造成了解析漏洞。
 
所以,我们只需要上传一个空格结尾的文件,即可使PHP解析之。
 

## 漏洞测试

1、需要两个字符 一个空格 16进制0x20 一个 \0 16进制0x00 这两个字符都不需要编码 
浏览器访问加这两个字符会自动编码 所以浏览器访问不合适
2、通过burpsuite修改16进制文件名后缀 只需要加两个字符0x20 0x00 完成上传
3、通过burpsuite修改16进制文件名后缀 加两个字符0x20 0x00.php 完成解析执行一句话

1、cmd 合成一句话

copy mv.jpg/b+file.php phpinfo.jpg

0.png

2、修改文件名

4.png

9.png

这样就完成 带空格 带结束符 的图片文件上传
 

3、访问图片文件

8.png

57.png

40.png

以上IP是我虚拟机IP 未进行打码 

当然真实环境并没有这么简单 如下遇到白名单就要想法绕过

clipboard.png

本博客所有文章如无特别注明均为原创。作者:odaycaogen复制或转载请以超链接形式注明转自 123``blog
原文地址《Nginx 背锅的解析漏洞(CVE-2013-4547)

郑重声明:本文只做技术交流学习使用,请尊重当地法规法律,勿对企业或个人网站及app进行破坏。如产生连带法律责任 123``blog 作者本人概不负责。

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)