kernel-exploitation 内核利用攻防手册 是做什么的?
Linux 内核利用攻防手册。适用于在 CTF 竞赛或现实场景中,通过释放后使用 (UAF)、越界读写 (OOB)、竞争条件 (race condition)、类型混淆 (type confusion) 等内核漏洞,结合 commit_creds、modprobe_path 覆盖或内核 ROP 链实现权限提升。
核心漏洞类型
- UAF (Use-After-Free):内核对象释放后仍被引用,导致控制流劫持
- OOB (Out-of-Bounds):数组或缓冲区越界读写,可破坏相邻内存
- 竞争条件:多线程并发访问共享资源,导致状态不一致
- 类型混淆:对象类型误判,实现跨类型的内存操作
利用技术
1. commit_creds 提权
通过覆盖当前进程的 cred 结构体,直接提升到 root 权限。常用方式:
- 泄露内核基址 → 获取
commit_creds函数地址 - 构造 ROP 链:
commit_creds(&init_cred)→ 返回用户态 shell
2. modprobe_path 覆盖
利用内核的模块加载机制:
- 将
modprobe_path全局变量指向用户可控的脚本路径 - 触发未知二进制执行 → 内核调用该脚本 → 获取 root shell
3. 内核 ROP 链
在禁用 KPTI 或 SMAP/SMEP 的场景下:
- 寻找可用的 gadget(如
pop rax; ret) - 在用户态内存中布局 ROP payload
- 劫持内核执行流,调用
commit_creds+swapgs+iretq返回用户态
适用平台
- 标准 Linux 内核 (x86_64, ARM64)
- CTF 竞赛题目(如 picoCTF、hackthebox 等)
- 自定义内核调试环境(QEMU + gdb)
使用示例
# 编译内核模块漏洞利用程序
make
# 运行利用程序(需拥有内核内存读写能力)
./exploit
调试建议
- 启用 KASLR 后需先泄露内核基址
- 检查 SMEP/SMAP/KPTI 状态,选择对应利用方式
- 使用 QEMU + GDB 进行断点调试,观察 cred 结构体变化