gfelber/how2keap

GitHub: gfelber/how2keap

一个收集整理各种Linux内核堆漏洞利用与权限提升技术的速查表项目,提供完整示例代码和实验环境。

Stars: 107 | Forks: 2

# how2keap 一个仍在完善中的各种 Linux 内核堆利用技术(以及权限提升)的速查表。 ``` #################################################### # # # 厌倦了臃肿的 heap 实现?# # # # __ # # | | __ ____ _____ ______ # # | |/ // __ \\__ \ \____ \ # # | <\ ___/ / __ \| |_> > # # use |__|_ \\___ >____ / __/ # # \/ \/ \/|__| # #################################################### ``` flag 在 `/flag` 或 `/dev/sda` 中 漏洞利用程序位于虚拟机中的 /pwn(建议使用 `while ! /pwn; do true; done` 运行) ## 免责声明 本源代码仅供**教育和道德目的**使用。作者严格禁止将本代码用于任何非法、恶意或未经授权的活动。使用本代码即表示您同意遵守所有适用法律,并对任何滥用行为承担全部责任。 作者不对因不当或非法使用本代码而造成的损害或法律后果承担任何责任。请负责任地使用,并仅遵守道德准则和法律要求。 ## 技术 ### 权限提升 | 文件 | 技术 | Linux 版本 | 越狱 | 适用的 CTF 挑战 | | - | - | - | - | - | | [mad\_cow.c](/linux6.12.27/mad\_cow.c) | 损坏 file 结构并滥用 COW 将代码注入另一个进程 | 最新 | ~[^1] | [Baby VMA](https://github.com/ECSC2024/ECSC2024-CTF-Jeopardy/tree/main/pwn05) | | [dirty\_cred.c](/linux6.12.27/dirty_cred.c) | [DirtyCred](https://github.com/Markakd/DirtyCred) 滥用堆内存重用机制获取特权,使用 MadCOW 实现权限提升 | 最新 | ~[^2] | [Wall Rose](https://ctf2023.hitcon.org/dashboard/#15) | | [jit\_spray.c](/linux6.12.27/jit_spray.c) | cBPF JIT 喷射攻击者可控的 ring0 shellcode | 最新 | X| | | [dirty\_pagetable.c](/linux6.12.27/dirty_pagetable.c) | [Dirty Pagetable](https://yanglingxi1993.github.io/dirty_pagetable/dirty_pagetable.html) 滥用页表在内核空间获得不受保护的 AAR/AAW(内核 RCE) | 最新 | X| [keasy](https://ptr-yudai.hatenablog.com/entry/2023/12/08/093606#Dirty-Pagetable) | [^1]: 如果监狱中的二进制文件或库以只读方式可访问且被外部进程使用,则可能实现越狱 [^2]: 只能通过 MadCOW 风格的越狱实现越狱 ### 利用技巧 | 文件 | 技术 | Linux 版本 | 适用的 CTF 挑战 | | - | - | - | - | | [cross\_cache.c](/linux6.12.27/cross_cache.c | 展示跨缓存攻击,允许使用悬空指针 targeting 其他 slab 的堆 | 最新 | [Wall Rose](https://ctf2023.hitcon.org/dashboard/#15) | [per\_cpu\_slabs.c](/linux6.12.27/per_cpu_slabs.c) | 展示 slab 如何在每个 CPU 基础上进行管理和重新分配| 最新 | | [pbuf\_realloc.c](/linux6.12.27/pbuf_realloc.c) | 使用 io\_uring 提供的缓冲区重新分配到 `GFP_KERNEL` 或 `GFP_KERNEL_ACCOUNT` 空洞 | 最新 |[ARIES - Sheratan](https://www.gfelber.dev/writeups/ctrl_space_sheratan.md)| | [mmaped\_files.c](/linux6.12.27/mmaped_files.c) | 使用 mmaped 文件与 `copy_from_user` 或 `copy_to_user` 创建竞态窗口 | 最新 | | [entrybleed.c](/linux6.12.27/entrybleed.c) | EntryBleed 利用预取时序泄露 KASLR | 最新 | | | [slubstick.c](/linux6.12.27/slubstick.c) | [SLUBStick](https://github.com/IAIK/SLUBStick) 更可靠的方式触发跨缓存 | 最新 | | ## 运行示例 只需将 pwn.c 替换为您想运行的示例(例如 ./linux6.6.22/dirty_cred.c) 然后运行 `./scripts/start-qemu.sh -b` 构建并在虚拟机中执行 `/pwn` ## 辅助脚本: + scripts/start-qemu.sh [选项]\ -b 如果更改则构建并压缩 rootfs \ -d 使用 -DDEBUG 构建 \ -p 启动时运行 /pwn \ -g 使用 GDB 运行(kaslr 仍启用)\ -k 禁用 kaslr \ -c 强制压缩 rootfs \ -l 设置日志级别为 9 \ -r 以 root 身份运行 \ -n 使用 nsjail 运行 \ -v 使用 kvm 运行(主机 CPU) + scripts/gdbinit\ 此文件可用于指定启动时执行的 gdb 命令。 ## # 使用 buildroot 编译和修改内核 1. 下载 [buildroot](https://buildroot.org/download.html) 并解压 2. 使用 patch 应用 buildroot keap.patch 和 config.patch: ``` patch -p1 -i buildroot/keap.patch -d ./PATH/TO/BUIDLROOT make -C ./PATH/TO/BUIDLROOT qemu_x86_64_defconfig patch buildroot/.config ./PATH/TO/BUIDLROOT/config.patch ``` 3. 使用 `make menuconfig` 进行更改(例如更改内核版本) 4. 使用 `make` 编译 keap 和内核(可能需要一段时间) 5. 系统会提示您关于附加包的问题,默认值即可 6. 最终文件(rootfs.cpio.gz 和 bzImage)位于 buildroot 目录内的 `./output/images` 中 ## 有用的链接 + bootlin: https://elixir.bootlin.com/linux/v6.12.27/source + linux-stable: https://github.com/gregkh/linux/tree/v6.12.27 + bata24/gef: https://github.com/bata24/gef
标签:0day挖掘, Cutter, DirtyCred, Linux内核, MadCOW, PWN, Web报告查看器, 二进制利用, 内存漏洞, 内核安全, 内核提权, 堆利用, 子域名枚举, 安全渗透, 客户端加密, 漏洞开发, 特权提升, 系统安全, 网络安全, 自动化部署, 身份验证强制, 隐私保护