论坛首页 CTF竞赛交流区 阅读主题

[原创] KCTF 2025 第八题 wp

317 浏览 0 回复
#1 楼主 2026-06-01 21:08:55
题目是个简单的 vm pwn ,逻辑比较简单。运算时64位的最高位用来判断是否是指针,两个寄存器做运算时不判断结果的数值是否设置指针位,于是可以通过寄存器运算构造任意指针值,直接就有任意读写。但是题目中没有一个直接可用的地址。check_ptr函数中:会判断传入的指针值是否在 memory 范围或者 stack 范围,如果不在就会重置为 memory 。 memory 是 mmap 出来的固定的地址,没用, stack 是 malloc 分配出来的,堆地址,那么可以通过此函数爆破堆地址,即检查 check_ptr 前后的指针值是否一致,一致就说明找到堆地址了。之后就从堆上读 vm.codes 拿到 ld 地址,再读 _dl_argv 得到栈地址,读栈得到 libc 地址,写 rop getshell 。unsigned __int64 __fastcall check_ptr(__int64 ptr)

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-288309.htm

暂无回复,快来抢沙发吧!

请登录后参与讨论

立即登录 注册账号