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

目标环境

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

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 即可):

docker run -d -p 8080:80 --name apache php:5.5-apache

绕过黑名单 getshell

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

468.html

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

468.html

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

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

468.html

nginx + php,我进行了测试,发现结果却有些区别:

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

这也是我预想的结果,fpm 存在一个 security.limit_extensions 配置,默认只解析 php 后缀的文件,多一个换行也不行。

~谢谢打赏~

c6d2925bbe17d2dbf6ec9e744fd33b57.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值