greeting-150
阅读原文时间:2023年07月11日阅读:1

拿到程序例行检查,可以看出程序是32位的程序

将程序放入ida中进入主函数查看

但是我们将程序运行一次后发现程序还运行了nao的程序

说明程序在中间还引用了nao函数,通过代码审计我们可以很直接的看到printf(s)这个格式字符串漏洞

但是因为程序流只有一次,所以我们不能直接覆盖strlen_got为system,因为我们覆盖后程序返回不去,所以需要更换思路,让程序循环

通过网上查询,知道了程序会先后会调用fini  ,所以我们可以将fini_got改为main的地址让程序回到起点

我们可以看到第12个位置处有61但是没有对其,所以我们需要先输入俩个a让栈对齐

所以我们的思路就有了在第一次输入的时候同时修改fini_got和strlen_got

完整exp如下