免责声明
此代码仅用于教育和研究目的。
请勿将其用于你不拥有或未经许可测试的系统。
作者不对因使用此代码而导致的任何滥用、损害或法律后果负责。
关于此漏洞利用的详细解析,请查看我的博客。这是我用 Rust 基于 Max Kellermann 的文章实现的 DirtyPipe(CVE-2022-0847)漏洞利用程序。 该程序允许你覆盖特定文件,或覆盖 SUID 二进制文件以提升权限。
passwd)以获取 root 权限/tmp首先创建一个输入文件。该文件中的数据将用于覆盖目标文件。然后,直接运行以下命令:
./dirtypipe_exploit -m overwrite -i input.txt -o target_file -b offset
其中 offset 是文件中开始写入的字节偏移量。由于该漏洞的性质,偏移量不能位于页边界上,且写入操作不能跨越页边界。
SUID 模式将使用给定的 ELF 载荷替换指定的 SUID 二进制文件。除非在选项中另有指定,否则 exploit 将使用本仓库 release 中提供的 suid ELF 文件。
此外,你也可以自行生成该载荷,或使用 gen_suid.py pwntools 脚本和 loader.asm 文件修改载荷。此选项将在下面讨论。
默认情况下,exploit 会将目标设置为 /usr/bin/passwd。
运行以下命令,用提供的载荷替换 /usr/bin/passwd(以 root 身份生成一个 shell):
./dirtypipe_exploit -m suid
然后运行 /usr/bin/passwd 即可获得 root shell。
要自行生成载荷,请按照以下步骤操作:
gen_suid.py 脚本,该脚本使用 pwntools 生成一个可用于生成 root shell 的载荷(shellcode.bin)。你可以根据需要对其进行修改。nasm -f bin -o [PAYLOAD_NAME] loader.asm 创建 ELF 二进制载荷。这会将 shellcode.bin 文件转换为可执行文件。./dirtypipe_exploit -m suid -i [PAYLOAD_NAME] -o [TARGET_FILE]。感谢 STALKR 的博客 作者提供的 64 位 Tiny ELF 头(此处)。