Skip to content

Pwn Lab 3:Kernel ROP

本节 Lab 要求完成课上讲解的 Kernel ROP,并完成 2026 CTF 101 平台中的 Kernel ROP 题目。

课程录播:ZJU CTF 101 pwn 专题 2

实验范围与诚信要求:本实验仅允许在课程提供的本地 QEMUCTF 授权环境中完成,不得用于真实设备或未授权目标。允许合理使用 AI Agent 辅助检索、解释与排错,但必须理解并核验其生成的命令和代码,在报告中体现个人调试过程;不得提交完全未经检查的模板化内容,不得伪造运行结果。

提交内容

  • 实验报告(PDF Markdown、完整利用代码及必要的编译、运行脚本;
  • 本地 QEMU 与远程环境中的成功截图或终端输出;
  • 对关键步骤、偏移、寄存器、栈布局和 ROP 链的个人分析。

只提交代码、不解释关键过程,无法获得完整分数。未完全完成也可以提交调试过程、失败原因和已有结论,按完成度给分。

远程环境注意事项

  • 远程利用需要将编译好的 exp 上传到题目环境中运行。上传和执行方式需要自行探索,并在报告中记录具体过程;
  • 如果上传或执行 exp 时出现超时,可以尝试更轻量级的编译器或编译配置,减小产物体积和传输、启动开销;
  • 远程环境设置了并发限制。请先在本地 QEMU 中完成调试,确认利用能够稳定提权后,再使用远程实例;
  • 不要反复占用远程实例或向平台发送大量流量。遇到平台或环境问题时及时联系助教。

必做部分(100 分)

1. 环境准备与内核调试(20 分)

根据课上内容完成 initramfs 的解包与重新打包,修改启动配置并成功启动 QEMU。实验时需要关闭 SMEP、SMAP、KPTI KASLR:在 QEMU CPU 配置中关闭 SMEP、SMAP,使用 nopti 关闭 KPTI,使用 nokaslr 关闭 KASLR

报告中需要给出实际使用的启动参数和保护状态验证结果,不能只声称保护已经关闭;同时需要使用 GDB 连接内核、加载必要符号,并设置能够命中的有效断点。

2. 漏洞分析(20 分)

分析 /dev/hackme 提供的接口及其调用关系,定位 hackme_readhackme_write 中的越界问题,说明漏洞如何形成内核栈读写能力。

报告中需要结合反汇编、源码或调试结果说明用户缓冲区、Stack Cookie、保存的寄存器和返回地址在内核栈中的相对位置,以及后续利用所依赖的关键偏移。

3. 提权利用(45 分)

按照课上讲解完成提权利用。需要说明如何泄露 Stack Cookie、构造覆盖返回地址的栈布局、调用内核提权函数,并使用 swapgsiretq 恢复用户态执行上下文。

最终利用可以采用 Kernel ROP ret2usr 路径,但必须解释实际控制流、使用的 gadget 或用户态代码、相关寄存器和每一段栈数据的作用。需要在本地 QEMU 中稳定获得 root 权限,并在远程题目环境中完成利用、获取 flag

4. 报告质量与可复现性(15 分)

报告需要清楚说明关键命令、偏移、寄存器、ROP 链和调试依据;提交的编译、打包与运行脚本应当能够复现实验过程。

至少记录一个实际遇到的调试问题,包括现象、定位过程、原因和解决方法。截图和终端输出应与报告中的分析相互对应。

Bonus(15 分)

Bonus 不再细分分值,综合以下内容按完成质量给分:

  • 给出有信息量的 GDB 调试截图,并分析断点位置、关键寄存器、内核栈和 ROP 链的变化;
  • 畅所欲言地讨论你对 Linux kernel pwn 的理解、感受,以及你了解的提权与防护技术;
  • 调研近期公开的 Linux 内核提权漏洞或利用技术,注明 CVE、影响版本或范围、核心漏洞原语、提权思路、缓解措施和资料来源。

Bonus 中的漏洞调研以公开资料分析为主,不要求也不得在真实设备或未授权目标上复现。