wasmtime的预编译程序,用IDA进行分析,找到字符串

在gdb中对字符串进行硬件读断点rwatch *addr,然后在一个函数断下,根据断下的函数一直向上找上层函数,最终发现这个地方很可能是主菜单逻辑

while+switch的结构,对switch(v9)的地方进行断点,发现每次菜单输入不一样的选项这里也会有不一样的值,因此这里就是主函数了wasm_0_::function_17_,同时可以推测出wasm_0_::function_51_为printf,调试到此处时有一个可疑的条件判断,是对length进行特殊值判断,通过实验发现进入到这个if里可以多溢出0x20个字节

并且溢出后此时调用show功能程序会崩溃,溢出实际上覆盖的就是wasm的slot_index,我们可以溢出将slot_index指向flag的位置然后show就能泄漏出flag。
由于本地和远程地址有一点偏差,先爆破出远程的slot_index
1 | from pwn import * |
爆破出slot_index后,我们就可以进行伪造将其指向flag,然后泄漏得到flag。
1 | #coding:utf8 |