Abusing Docker Socket for Privilege Escalation
Reading time: 5 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
有些情况下,你只拥有docker socket的访问权限,并且想利用它来提升权限。某些操作可能会非常可疑,你可能想要避免它们,因此在这里你可以找到不同的标志,这些标志可能对提升权限有用:
通过挂载
你可以在以root身份运行的容器中挂载文件系统的不同部分并访问它们。
你也可以利用挂载来提升容器内的权限。
-v /:/host
-> 在容器中挂载主机文件系统,以便你可以读取主机文件系统。- 如果你想要感觉像是在主机上但实际上在容器中,你可以使用以下标志禁用其他防御机制:
--privileged
--cap-add=ALL
--security-opt apparmor=unconfined
--security-opt seccomp=unconfined
-security-opt label:disable
--pid=host
--userns=host
--uts=host
--cgroupns=host
- **
--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined
** -> 这与前面的方法类似,但这里我们是挂载设备磁盘。然后,在容器内运行mount /dev/sda1 /mnt
,你可以在/mnt
中访问主机文件系统。 - 在主机上运行
fdisk -l
找到要挂载的</dev/sda1>
设备。 -v /tmp:/host
-> 如果由于某种原因你只能挂载主机的某个目录并且你可以在主机内访问它。挂载它并在挂载目录中创建一个带有suid的**/bin/bash
,这样你就可以从主机执行它并提升到root**。
note
请注意,也许你无法挂载文件夹 /tmp
,但你可以挂载一个不同的可写文件夹。你可以使用以下命令找到可写目录:find / -writable -type d 2>/dev/null
请注意,并非所有Linux机器上的目录都支持suid位! 要检查哪些目录支持suid位,请运行 mount | grep -v "nosuid"
。例如,通常 /dev/shm
、/run
、/proc
、/sys/fs/cgroup
和 /var/lib/lxcfs
不支持suid位。
还要注意,如果你可以挂载 /etc
或任何其他包含配置文件的文件夹,你可以在docker容器中以root身份更改它们,以便在主机中利用它们并提升权限(可能修改 /etc/shadow
)。
从容器中逃逸
--privileged
-> 使用此标志,你可以移除容器的所有隔离。检查技术以以root身份逃逸特权容器。--cap-add=<CAPABILITY/ALL> [--security-opt apparmor=unconfined] [--security-opt seccomp=unconfined] [-security-opt label:disable]
-> 为了通过能力提升,将该能力授予容器并禁用可能阻止漏洞工作的其他保护方法。
Curl
在本页中,我们讨论了使用docker标志提升权限的方法,你可以在页面中找到使用curl命令滥用这些方法的方式:
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。