-
-
[原创]KCTF2026 PWN
-
发表于: 2026-8-7 17:48 13
-
pwn 设计思路 (WP)
概述
程序是一个简单的解释器,所有值都是 64 位,高 16 位用来做类型标识:结构体头是 0xbeef,低 48 位存 size;指针用 0x1337 标识。
漏洞在两个地方:二元运算时不过滤最高 16 位,存内存时也不做任何过滤。所以可以把值的最高 16 位拼成 0xbeef,伪造一个结构体头,size 随便定。这是典型的类型混淆。
伪造出来的 size 可以开到 48 位全满,于是访问就变成了越界读写。
泄漏
分配的内存不大,都在堆上。越界往后读能依次读到:
- 虚表地址 → 推 PIE 基址
- 堆地址
- libc 地址:用
std::vector构造 unsorted bin,释放的大块 fd/bk 指向main_arena,越界读出来减偏移得 libc base
劫持
越界写覆盖虚表指针,delete parsed_cmd 走虚表析构时劫持控制流。堆上直接用 Number 伪造一块虚表,virtual 表项填 one_gadget,返回主循环 delete 即触发 execve("/bin/sh")。
加密
堆上数据用进程随机 key 异或加密。先用一个全 0 的 block 做一次读取,读到 0^K 就能泄出 key;拿到 key 后把 key 槽清成 0,后续所有堆操作都不用再解异或。
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
最后于 2026-8-23 10:45
被ADuie编辑
,原因:
赞赏
谁下载
赞赏
雪币:
留言: