解题步骤

好了,那么先来说说什么是延迟绑定技术

呐,这个呢就得从动态链接说起,因为呢为了提高这一过程的效率,将符号链接这一过程呢放在了运行时,也就是当你调用的某个函数的时候呢,再去链接,为什么这样做呢?因为大部分库函数可能你并不会用到,如果提前链接这么多函数,效率肯定很低,那么第一次运行时再去绑定函数地址,然后后面再次调用这个函数时则不需要重复链接了,可以直接调用,这样做能够相对提高不少效率

可以知道动态绑定就是理解为,我要用了,我才去调用的一种技术,类似于Swift里的lazy var

我们看到题目中

image-20200321002847241 image-20200321003347352

有一个全局变量的指针,可以试着让指针去覆盖返回地址

看汇编的最后进行了call,那么只要第一个打入exit的地址第二个打入win的地址即可,但是这里不能是0x08048780,因为有动态绑定嘛,我们打入的函数地址应该是got层的,所以向里面进

image-20200321003137120 image-20200321004047135 image-20200321004123918

最终得到0x0804A01C

1
2
3
4
5
p.recvuntil("Input address\n\n")
p.sendline(str(0x0804A01C))
p.recvuntil("Input value?\n\n")
p.sendline(str(0x0804863B))
p.interactive()