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信道
.png)












