189 字
1 分钟
ctfshow 前置基础 pwn31
题目先泄露了 main 的地址,可以据此反推出其他函数地址。

起初尝试 ret2libc 失败,泄露值不是有效 libc 地址(不像 0xf7xxxxxx / 0xf6xxxxxx)。

关键点是 ebx 参与了 GOT 泄露流程。由于溢出覆盖导致 ebx 异常,需要手动恢复。
根据题目泄露的程序基址和偏移关系,可构造正确的 ebx:
ebx = base + 0x1FC0

在第一次 payload 中伪造 ebx 后,泄露流程恢复正常。

最终答案:
ctfshow{c8748e3b-0cf1-4689-9640-6b7d18019f79}
另一个可行思路是利用 write 而不是 read 完成泄露与利用:

ctfshow 前置基础 pwn31
https://alf-ovo.cn/posts/ctfshow-prerequisite-pwn31/