docker 获取宿主机ip_Docker逃逸在实战中的利用

Docker是被广泛应用的容器之一,在实际的渗透测试中,可能遇到web目录搭载在docker容器中,这样即使我们获取了web权限,也无法直接对宿主机进行有效控制,这里就需要利用docker逃逸技术来获取宿主机的控制权限,docker逃逸方式很多,此篇主要介绍实战中常用的两种方式。

CVE-2019-5736

漏洞成因:

runC是一个低级容器,像Docker这种高级容器在运行时可以使用runC来处理与其他运行容器之间的任务等。Docker 18.09.2之前的版本中使用的runC版本小于1.0-rc6,攻击者可以通过特定的容器镜像或者exec操作可以获取到宿主机的runC执行时的文件句柄并重写其二进制文件,从而获取到宿主机的root权限。

漏洞利用:

首先我们需要确定docker版本,因为漏洞执行成功的条件是Docker版本小于18.09.2并且runC版本小于1.0-rc6。Docker版本查询命令:docker –version。

8b4ae1febd6e68cc85bf5542eb82e589.png

Github上有现成的漏洞环境,如果大家需要测试可以去下载和安装,直接执行命令即可下载运行:Curl https://gist.githubusercontent.com/thinkycx/e2c9090f035d7b09156077903d6afa51/raw-o install.sh && bash install.sh。环境安装好之后我们需要下载漏洞poc:https://github.com/Frichetten/CVE-2019-5736-PoC,下载之后我们需要对main.go 文件内容进行修改。

3f649709759e72f7a0c7edaf5fdd0c59.png

将脚本中该处内容修改为反弹shell的命令,IP为攻击IP,端口为监听端口。然后需要用Go编译生成payload,运行命令:CGO_ENABLED=0GOOS=linux GOARCH=amd64 go build main.go。

471c3ae368b87f7d6b4a00a42a0c2748.png

main文件就是我们生成的payload,我们需要将payload拷贝到docker容器目录下,此时相当于我们已经拿到了docker权限,上传payload后需要赋给其权限:chmod 777 main。然后运行main。

809cbc94012412d8c070359673e6e1fc.png

并且在攻击机启动监听。

1bc7f56bd62b45d1dbe49c4cea7e328a.png

然后就是等待目标启动docker就会执行payload中的命令,等待物理机shell回连。 利用--privileged特权模式逃逸 如果目标机器docker版本不在上面版本影响范围,我们可以利用privileged特权模式逃逸,特权模式在版本0.6时被引入docker,允许容器内的root同时拥有宿主机的root权限。这里我们顺便提一下使用特权模式有什么好处呢,在使用特权模式启动容器时,可以获得很多设备的访问权限,在运行docker run –privileged命令之后,docker容器可以访问宿主机所有设备,并可以执行mount进行挂载。因此,当我们拥有docker容器权限且容器使用特权模式启动,我们可以通过mount命令将外部宿主机磁盘挂载入容器,这样我们就可以访问宿主机的磁盘。 我们可以使用ls /dev命令查询宿主机的设备。

1eea6f5404306c66d144af778e9de88b.png

sda是磁盘设备,我们将其中一个挂载到我们指定的目录,执行命令mount /dev/sda /test,test是我们专门用来挂载设备的目录。再执行命令ls /test,如果挂载成功,则会显示宿主机的磁盘内信息,这样我们访问容器内的/test目录相当于访问宿主机的磁盘。只能访问磁盘的话利用起来并不方便,这里我们结合ssh密钥来获取宿主机的root权限。 我们现在攻击机生成ssh密钥,执行命令ssh-keygen -f test

5598d4d8bbd53540b9c3e9a74041e230.png

给密钥文件赋权限:chmod 600 test 现在我们就要将生成的密钥文件写入目标机器,此时容器内的test目录相当于宿主机的磁盘,我们ls /test/home即可查看目标机器的用户都有哪些,选择一个用户查看,里面会存在.ssh目录,我们需要将密钥写入.ssh目录并将文件命名为authorized_keys(目标机.ssh目录权限必须为700)。依次执行以下两条命令写入密钥文件。 cp -avx /test/home/ubuntu/.ssh/id_rsa.pub/test/home/ubuntu/.ssh/authorized_keysecho '生成的.pub文件的内容' >/hack/home/ubuntu/.ssh/authorized_keys写入完成后,我们就可以用攻击机链接目标机器了,此时我们利用的是自己的私钥所以再用ssh连接就不需要密码可以直接登录目标宿主机。连接命令:ssh -I test ubuntu@192.168.111.130,这样我们就拿到了宿主机的root权限。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值