Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Dirty-Pipe-Exploits — CVE-2022-0847(Dirty Pipe)漏洞利用。 | Kitploit
工具/GitHubGitHub/gustavo-nogueira/dirty-pipe-exploits
权限提升漏洞分析漏洞利用学习与教育二进制利用实验室与实践
GitHubgustavo-nogueira/dirty-pipe-exploits

Dirty-Pipe-Exploits

CVE-2022-0847(Dirty Pipe)漏洞利用。

查看仓库
213年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2022-0847 漏洞利用

Dirty Pipe

它是什么?

由 Max Kellerman[2] 于 2022 年 3 月 7 日披露的 CVE-2022-0847 是 Linux 内核(5.8 至 5.16.11 版本之间)中的一个漏洞,它允许攻击者覆盖只读或不可变文件,并在受害者系统上提升其权限。CVE-2022-0847 被命名为 Dirty Pipe,其 CVSS 评分为 7.8(被认为是高危险)。

漏洞利用是如何运作的?

Dirty Pipe 漏洞被描述为 Linux 内核中 copy_page_to_iter_pipe 和 push_pipe 函数对 struct pipe_buffer[7] 的 flags 属性缺乏正确初始化,因此可能包含过时值。struct pipe_buffer 的 flags 属性中可设置的标志之一名为 PIPE_BUF_FLAG_CAN_MERGE。它表示是否允许将更多数据合并到 pipe_buffer 中。这样,当数据被复制到 pipe_buffer 时,如果被复制的页面小于 4096 字节,则可以向 pipe_buffer 添加更多数据。

通过将 PIPE_BUF_FLAG_CAN_MERGE 注入页缓存引用,就可以仅通过向特殊准备的 pipe 写入新数据来覆盖页缓存中的数据(该过程将在以下段落中描述)。这样一来,没有特权的本地用户可以利用此漏洞覆盖/写入由只读文件支持的页缓存中的页面,从而提升其在系统上的权限。

话虽如此,要利用此漏洞,必须遵循以下步骤:

  1. 创建一个 pipe。
  2. 用任意数据填充 pipe(以在环形数组的所有条目中设置 PIPE_BUF_FLAG_CAN_MERGE 标志)。
  3. 排空 pipe(使环形数组中所有 struct pipe_buffer 实例的 PIPE_BUF_FLAG_CAN_MERGE 标志保持设置)。通常,该标志应被重置。然而,Dirty Pipe 漏洞导致该标志保持为 1。
  4. 使用 splice 系统调用将只读文件传输到 pipe。
  5. 修改只读文件。由于 splice 系统调用使用按引用传递(pass-by-reference)的方法,攻击者可以借助 PIPE_BUF_FLAG_CAN_MERGE 标志覆盖该文件。

漏洞利用

使用以下命令编译所有内容:

root@kitploit:~
make

Exploit 1 - 覆盖只读文件

运行

root@kitploit:~
./exploit-1

描述

仓库中 exploit-1.c 文件中的漏洞利用 1 包括覆盖 /etc/passwd 文件中 root 用户的密码(该文件包含用户账户信息,例如加密后的密码),并最终提供一个具有 root 访问权限的终端。为此,需要:

  1. 对 /etc/passwd 文件进行备份。
  2. 准备带有 PIPE_BUF_FLAG_CAN_MERGE 标志的 pipe(如上文步骤 1、2 和 3 所示)。
  3. 将 /etc/passwd 文件传输到 pipe,并用一个新的已知 root 密码覆盖该文件的内容(如上文步骤 4 和 5 所示)。
  4. 使用新设置的密码创建 root 会话。
  5. 然后,根据备份将密码重置为原始值,从而不留下任何痕迹。
  6. 最后,在 root 会话仍然建立的情况下,释放一个具有 root 访问权限的 shell 终端。

Exploit 2 - SUID 二进制文件劫持(Hijacking)

查找 SUID 二进制文件

root@kitploit:~
find / -perm -4000 2>/dev/null

运行

root@kitploit:~
./exploit-2 <path-of-suid-binary>

描述

仓库中 exploit-2.c 文件中的漏洞利用 2 包括覆盖/劫持一个 SUID 二进制文件(此类攻击已在 3.5.2 节中介绍),并最终提供一个具有 root 访问权限的终端。为此,需要:

  1. 准备一个 ELF(Executable and Linking Format)可执行代码,用于覆盖作为参数接收到的 SUID 二进制文件。在漏洞利用中,所使用的 ELF 可执行文件会创建一个新的可执行文件(/tmp/sh),该文件反过来会创建一个具有 root 访问权限的 shell 终端。
  2. 接收一个 SUID 二进制文件的路径作为参数。
  3. 对接收到的二进制文件进行备份。
  4. 准备带有 PIPE_BUF_FLAG_CAN_MERGE 标志的 pipe(如上文步骤 1、2 和 3 所示)。
  5. 将接收到的二进制文件传输到 pipe,并用步骤 1 中提到的 ELF 可执行文件覆盖该文件的内容(如上文步骤 4 和 5 所示)。
  6. 然后,根据备份将接收到的二进制文件恢复为其原始内容,从而不留下任何痕迹。
  7. 最后,执行步骤 1 中提到的 /tmp/sh 可执行文件,从而打开一个具有 root 访问权限的新 shell。

Exploit 3 - 添加远程访问密钥

运行

root@kitploit:~
./exploit-3

描述

仓库中 exploit-3.c 文件中的漏洞利用 3 使用与漏洞利用 1 相同的步骤来获得 root shell 访问权限。区别在于,漏洞利用 3 在获得 root shell 访问权限后,会将攻击者的 SSH(Secure Shell)公钥加载到 /root/.ssh/authorized_keys 文件中,并使用 Ngrok 平台创建用于远程 SSH 访问的 TCP(Transmission Control Protocol)隧道。

参考资料

[1] AHMED, Alexis. Privilege Escalation Techniques: Learn the art of exploiting Windows and Linux systems. Birmingham: Packt Publishing, 2021年10月.

[2] KELLERMANN, Max. The Dirty Pipe Vulnerability. 可访问于:https://dirtypipe.cm4all.com/。访问日期:2022年7月23日。

[3] Exploit Database. 可访问于:https://www.exploit-db.com/。访问日期:2022年8月3日。

[4] Traitor: Automatically exploit low-hanging fruit to pop a root shell. 可访问于:https://github.com/liamg/traitor。访问日期:2022年8月3日。

[5] PayloadsAllTheThings. Linux - Privilege Escalation. 可访问于:https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Linux%20-%20Privilege%20Escalation.md#cve-2022-0847-dirtypipe。访问日期:2022年8月3日。

[6] Linux 内核存储库 - Struct pipe_inode_info. 可访问于:https://github.com/torvalds/linux/blob/v5.8/include/linux/pipe_fs_i.h#L76。访问日期:2022年8月3日。

[7] Linux 内核存储库 - Struct pipe_buffer. 可访问于:https://github.com/torvalds/linux/blob/v5.8/include/linux/pipe_fs_i.h#L26-L32。访问日期:2022年8月3日。

[8] ARNTZ, Pieter. Linux "Dirty Pipe" vulnerability gives unprivileged users root access. Malwarebytes Lab. 可访问于:https://www.malwarebytes.com/blog/news/2022/03/linux-dirty-pipe-vulnerability-gives-unprivileged-users-root-access。访问日期:2022年8月3日。

[9] Picus Security. Linux “Dirty Pipe” CVE-2022-0847 Vulnerability Exploitation Explained. 可访问于:https://www.picussecurity.com/resource/linux-dirty-pipe-cve-2022-0847-vulnerability-exploitation-explained。访问日期:2022年8月3日。

[10] Exploit Database - Local Privilege Escalation (Dirty Pipe). 可访问于:https://www.exploit-db.com/exploits/50808。访问日期:2022年8月3日。

下载工具