前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单

利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单

作者头像
phith0n
发布2020-10-15 11:43:09
8760
发布2020-10-15 11:43:09
举报
文章被收录于专栏:离别歌 - 信息安全与代码审计

我在代码审计知识星球里提到了Apache最新的一个解析漏洞(CVE-2017-15715):

15223095369910.jpg
15223095369910.jpg

除了帖子中说到的利用方法,我们还可以利用这个漏洞来绕过上传黑名单限制。

目标环境

比如,目标存在一个上传的逻辑:

代码语言:javascript
复制
<?php
if(isset($_FILES['file'])) {
    $name = basename($_POST['name']);
    $ext = pathinfo($name,PATHINFO_EXTENSION);
    if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {
        exit('bad file');
    }
    move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);
}

可见,这里用到了黑名单,如果发现后缀在黑名单中,则进行拦截。

然后,我们用docker启动一个默认的Apache PHP(Apache版本在2.4.0到2.4.29即可):

代码语言:javascript
复制
docker run -d -p 8080:80 --name apache php:5.5-apache

将上述代码放置在容器内的/var/www/html目录下,设置好写权限,即可进行测试。

绕过黑名单getshell

正常上传php文件,被拦截:

15223121419794.jpg
15223121419794.jpg

可以上传1.php.xxx,但是不解析,说明老的Apache解析漏洞不存在:

15223104201760.jpg
15223104201760.jpg

我们利用CVE-2017-15715,上传一个包含换行符的文件。注意,只能是\x0A,不能是\x0D\x0A,所以我们用hex功能在1.php后面添加一个\x0A

15223122857686.jpg
15223122857686.jpg

然后访问/1.php%0A,即可发现已经成功getshell:

15223123764464.jpg
15223123764464.jpg

总结

研究这个漏洞的过程中遇到几个问题:

  1. 获取文件名时不能用$_FILES['file']['name'],因为他会自动把换行去掉,这一点有点鸡肋
  2. 默认的Apache配置即可利用,因为默认Apache配置就使用了<FileMatch>
代码语言:javascript
复制
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

所以理论上,只要用正则来匹配后缀进行php解析的Apache就有这个问题。而这个做法刚好是为了解决Apache老的解析漏洞而做的,可谓非此即彼,必然存在一种解析漏洞。

延伸一下,其他环境是不是可能出现同样的问题?比如nginx + php,我进行了测试,发现结果却有些区别:

15223141775405.jpg
15223141775405.jpg

如上图,成功上传后,访问却出现Access denied错误。

这也是我预想的结果,因为我在《Fastcgi协议分析 && PHP-FPM未授权访问漏洞 && Exp编写》已经提到过,fpm存在一个security.limit_extensions配置,默认只解析php后缀的文件,多一个换行也不行。

漏洞本身其实没啥意思,但是$这个原理,以后应该还会有更多用处。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目标环境
  • 绕过黑名单getshell
  • 总结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档