Post

vulnerable-docker-1:hard Walkthrough

wordpress打点,容器网络横向root提权,docker逃逸宿主机提权

Recon

机器仅开放了ssh和http服务

web

web从前端和源代码中能看出来是wordpress,那么直接上wpscan枚举用户

枚举得到bob用户,然后爆破密码得到Welcome1

shell as www-data by wordpress

通过后台getshell方式反弹shell给pwncat-cs

shell as another-container-root by pivoting

简单的信息收集能发现这是一个容器,为了docker逃逸,需要先提取到容器root权限

这个root权限可以是当前容器root权限,也可以是可达网段的容器root权限

通过对当前容器的检查,发现没有可利用的点,那么着手寻找可达网段的容器

发现172.18.0.4:8022资产比较有意思,可能是一个webshell

在建立socks5隧道之前,需要使用autoroute模块来自动化的从session中读取网段并添加到路由表

然后使用socks_proxy模块来建立socks5隧道

通过浏览器插件配置代理,访问发现为root权限的shell

反弹shell给kali

shell as root by docker escape

这台机器有docker.sock,说明可以通过mount逃逸

https://download.docker.com/linux/static/stable/x86_64/下载docker-ce,并上传docker二进制文件到目标机器

通过docker -H unix:///var/run/docker.sock images来与宿主机的docker api通信,查看镜像

得知了当前应用大概率就是wordpress镜像的容器,那么api通信将宿主机根目录挂载到容器/host目录,然后通过chroot命令切换根目录

写入公钥后,完成宿主机getshell

Some thinking

在shell as www-data by wordpress时,我通过wordpress_admin_upload模块得到了meterpreter会话,但此时将它作为autoroute模块的session发现无法得到路由信息

在这种攻击向量的利用中,存在三个层面的限制

  • Web服务器的限制

    Apache或Nginx对每个连接的持续时间、超时、并发数都有严格的限制。它们被设计用来处理大量短暂的HTTP请求,而不是维持一个单一的、长期的、双向的TCP隧道

  • PHP解释器的限制

    PHP脚本的执行时间也受到max_execution_time等配置的限制

  • 协议封装

    整个通信被包裹在Web服务器和PHP的处理逻辑中,就像这中间被隔了好几层逻辑的对话,会导致信道很重

怎么解决?

核心在于如何从这样的脏信道升级成为干净的tcp信道

思路很简单,通过msfvenom生成elf进行二次反弹shell即可

同时msfconsole使用exploit/multi/handler接收shell,这时候background放到session,autoroute就可以正确识别了,因为此时的meterpreter是一个干净的tcp信道

This post is licensed under CC BY 4.0 by the author.