文章前言
本篇文章我们主要介绍在渗透测试过程中在获取到容器权限的情况下对容器进行有效的信息收集
信息收集
环境确定
确定当前环境是否真的为Docker容器环境,常见的方式有以下几种:
方式一:检查/.dockerenv文件是否存在
代码语言:javascript复制ls -al /
方式二:检查是否存在container环境变量(感觉不是很靠谱)
代码语言:javascript复制env
代码语言:javascript复制export
方式三:检查/proc/1/cgroup内是否包含"docker"等字符串
代码语言:javascript复制cat /proc/1/cgroup
权限信息
其次我们还需要确定我们当前具备的权限,一般dockers启动都是以root权限运行的:
代码语言:javascript复制whoami
特权模式
检测当前环境是否以特权模式启动,如果输出结果为0000003fffffffff,则说明是以特权模式启动的
代码语言:javascript复制cat /proc/self/status | grep CapEff
CAP信息
代码语言:javascript复制#查看容器
docker ps -a
#容器进程
docker top 5713dea
#容器CAP
getpcaps 51776
位置信息
其次我们还需要确定当前所处的位置
系统信息
查看当前系统版本信息确定是否可以通过内核漏洞进行权限提升或者实现容器逃逸,例如:DirtyCow
代码语言:javascript复制lsb_releasen -a
可用命令
查看当前系统可用的命令
代码语言:javascript复制ls /usr/bin
是否出网
检测当前主机是否出网,这对后期反弹shell等具有很重要的作用
代码语言:javascript复制curl www.baidu.com
网络信息
Docker中默认是不提供ifconfig命令的:
代码语言:javascript复制ifconfig
ip addr
在出网且提供系统软件安装命令的情况下可以通过安装命令进行安装操作
代码语言:javascript复制#Ubuntu
apt-get install net-tools
#CentOS
yum install net-tools
进程服务
有时候我们进入容器的方式是通过容器提供的Web服务,有时候也可能是容器自身的安全漏洞,在我们获取到容器的权限后我们可以对当前容器所运行的其他Web服务进行一个简单探测,探测方式可以是本地端口服务也可以是进程信息:
代码语言:javascript复制ps -aux
netstat -ntlp
计划任务
查看容器中的计划任务,如果有计划任务列表可以通过增加计划任务的方式来实现反弹shell的目的
代码语言:javascript复制ls /var/spool/
ls /var/spool/cron/crontabs
cat /var/spool/cron/crontabs/root
SSH私钥
代码语言:javascript复制ls -al ~/
ls -al ~/.ssh
cat ~/.ssh/id_rsa
历史命令
查看历史命令记录来检索是否有敏感的历史连接记录以及连接账户密码信息等:
代码语言:javascript复制cat ~/.bash_history