Dirty Pipe 部署
对于这个挑战,你需要使用 CVE-2022-0847 漏洞利用覆盖只读文件 "cat.txt"
使用该漏洞利用有很多种方法可以实现
依赖项
- Linux 内核版本 5.8 或更高版本(易受攻击)
- gcc(GNU 编译器套件)用于编译漏洞利用代码
首次设置
- 搭建易受攻击的环境:
- 对于 Linux 用户:
- 使用内核版本为 5.8 或更高、但低于已修复版本的 Linux 发行版:
- 已修复版本包括 5.16.11、5.15.25 和 5.10.102。
- 通过运行以下命令验证系统上的内核版本:
uname -r
- 如果你的内核已被修复,则可能需要降级或使用其他 Linux 安装以满足易受攻击的条件。
- 对于 Windows 用户:
- 安装虚拟机:
- 下载并安装虚拟机软件,例如 Oracle VM VirtualBox 或 VMware。
- 下载易受攻击的 Linux 发行版:
- 访问 Kali Linux 存档以下载较旧版本的 Kali Linux。
- 建议的版本包括任何带有 5.8 - 5.15 内核的发行版(例如 Kali 2021.1)。
- 或者,其他具有匹配内核版本的 Linux 发行版也可以使用(例如较旧版本的 Ubuntu 或 Debian)。
- 搭建虚拟机:
- 在 VirtualBox 中创建新的虚拟机:
- 分配至少 2 GB 内存和 10 GB 磁盘空间。
- 使用下载的 ISO 文件安装 Linux 发行版。
- 安装完成后,通过运行以下命令确认内核版本:
uname -r
- 安装所需工具:
- 搭建环境后,请确保已安装以下工具:
- gcc:编译漏洞利用代码所需。
- make:用于在需要时构建项目。
- 更新包管理器并安装工具:
sudo apt update
sudo apt install gcc make -y
启动挑战
- 开始:
确保检查内核版本!
使用这个 GitHub 链接(https://github.com/basharkey/CVE-2022-0847-dirty-pipe-checker.git)
检查 cat.txt 文件是否为只读文件
限制条件如下:
攻击者必须具有读权限(因为它需要将一页 splice() 到管道中)
偏移量不能位于页边界上(因为该页至少有一个字节必须已经被拼接(splice)到管道中)
写入不能跨越页边界(因为其余部分会创建一个新的匿名缓冲区)
文件不能被调整大小(因为管道有自己的页面填充管理,并且不会告知页缓存已追加了多少数据)
- 部署漏洞利用:
-
创建一个管道。
-
用任意数据填充管道(以在所有环形缓冲区条目中设置 PIPE_BUF_FLAG_CAN_MERGE 标志)。
-
排空管道(使 struct pipe_inode_info 环形缓冲区中的所有 struct pipe_buffer 实例都保留该标志)。
-
将目标文件(以 O_RDONLY 打开)中目标偏移量之前的数据拼接(splice)到管道中。
-
向管道中写入任意数据;由于设置了 PIPE_BUF_FLAG_CAN_MERGE,这些数据将覆盖缓存的文件页,而不是创建新的匿名 struct pipe_buffer。
-
覆盖 cat.txt,将
I'm a cat
1444
改为
I'm a dog
2025
-
使用 check_cat.sh 检查它是否有效
chmod +x check_cat.sh
./check_cat.sh
挑战重新生成
使用以下命令
chmod +x cat_generate.sh
./cat_generate.sh
发布挑战
提示位于 hints.txt 中