Ciscn2023-华中赛区分区赛-pwn-wp
今年国赛的华中分区赛一共放了两道 PWN
,一个一解,一个零解。零解的是 LLVM PASS PWN
,这个没有研究过,暂且先复现另一个题目(考察的是 house of muney
)还有一个 AWD
环节的 PWN
(考察的格式化字符串漏洞)
关于 kernel-RW Any Memory 的学习总结
通过 2019STARCTF hackeme
这道题目的学习,了解到了在内核中内存具有任意地址读写的能力后,可以利用的手法。
关于 kernel-ROP & ret2user & bypass-SMEP 的学习总结
内核态的 ROP
和用户态的思路和做法是一样的,都是利用 gadget
来不断控制执行流,进行任意的函数调用。不过获取基地址还有搜索 gadget
等一些小细节发生了变化,但思想不变,所以理解起来应该还是很快的
关于 kernel-Double Fetch 的学习总结
Double Fetch
从漏洞原理上属于条件竞争漏洞,是一种内核态与用户态之间的数据访问竞争。在 Linux 等现代操作系统中,虚拟内存地址通常被划分为内核空间和用户空间。内核空间负责运行内核代码、驱动模块代码等,权限较高。而用户空间运行用户代码,并通过系统调用进入内核完成相关功能。通常情况下,用户空间向内核传递数据时,内核先通过通过
copy_from_user
等拷贝函数将用户数据拷贝至内核空间进行校验及相关处理,但在输入数据较为复杂时,内核可能只引用其指针,而将数据暂时保存在用户空间进行后续处理。此时,该数据存在被其他恶意线程篡改风险,造成内核验证通过数据与实际使用数据不一致,导致内核代码执行异常。一个典型的
Double Fetch
漏洞原理如下图所示,一个用户态线程准备数据并通过系统调用进入内核,该数据在内核中有两次被取用,内核第一次取用数据进行安全检查(如缓冲区大小、指针可用性等),当检查通过后内核第二次取用数据进行实际处理。而在两次取用数据之间,另一个用户态线程可创造条件竞争,对已通过检查的用户态数据进行篡改,在真实使用时造成访问越界或缓冲区溢出,最终导致内核崩溃或权限提升。
关于 kernel-UAF 的学习总结
终于来到了关于内核的学习,目前打算浅尝一下内核的基础知识和漏洞。之后每个学习的新漏洞都单独写一篇文章,每篇学到的新的前置知识都放到对应的文章中吧,暂时先不做汇总。
关于qemu逃逸的学习总结
前一段 VNCTF 2023
正好有一道非常入门 qemu
逃逸的题目,正好以此为契机进行 qemu
逃逸的入门学习,在这部分的学习中,要感谢 winmt 和 roderick 师傅解答我的一些困惑。
前置知识
QEMU与逃逸
QEMU
是纯软件实现的虚拟化模拟器,可以模拟多种不同的计算机系统和硬件设备。虽然 QEMU
可以模拟出硬件或虚拟环境,但它本质上只是一个程序,所谓 qemu
逃逸是指攻击者利用 QEMU
实现的有漏洞的 PCI
设备来获取主机的权限。从虚拟机中 “逃出来”,其利用方式和平常用户程序执行 system
函数是一样的,只不过平常 PWN
题的触发方式是通过用户的输入进行触发,而 QEMU
虚拟机的设备漏洞通过运行在虚拟机上的用户程序对设备的 IO
交互来间接触发。