首页
社区
课程
招聘
[原创]KCTF2026 PWN
发表于: 2026-8-7 17:48 13

[原创]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编辑 ,原因:
上传的附件:
  • pwn (26.14kb,4次下载)
收藏
点赞 ・0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回