CTF|ropemporium ret2csu题型

CTF|ropemporium ret2csu题型题目来源:https://ropemporium.com/challenge/ret2csu.html这个题只能下载64位文件IDA查看后发现gets存在栈溢出,题目条件是ret2win的第三个函数必须是“0xdeadcafebabebeef”ret2win函数里面有systemx86 与 x64 的区别:x86 都是保存在栈上面的, 而 x64 中的前六个参数依次保存在 RDI, RSI, RDX, RCX, R8 和 R9 中,如果还
摘要由CSDN通过智能技术生成

CTF|ropemporium ret2csu题型

题目来源:https://ropemporium.com/challenge/ret2csu.html

这个题只能下载64位文件
在这里插入图片描述

IDA查看后发现gets存在栈溢出,题目条件是ret2win的第三个函数必须是“0xdeadcafebabebeef”
ret2win函数里面有system
在这里插入图片描述
在这里插入图片描述

x86 与 x64 的区别:
x86 都是保存在栈上面的, 而 x64 中的前六个参数依次保存在 RDI, RSI, RDX, RCX, R8 和 R9 中,如果还有更多的参数的话才会保存在栈上

所以按照正常思路我们要找类似“pop|edx”“mov|edx”这样的gadget来个edx寄存器赋值
在这里插入图片描述
然后ROPgadget查找后发现没有

对于这种情况 CTFwiki上

题型特点

  1. 当在x64程序中找不到rdx、rsi、edi时,再使用此方法
  2. 确定gadget1、gadget2的地址及顺序

## ret2__libc_csu_init原理

在 64 位程序中,函数的前 6 个参数是通过寄存器传递的,但是大多数时候,我们很难找到每一个寄存器对应的gadgets。 这时候,我们可以利用 x64 下的 __libc_csu_init 中的 gadgets。这个函数是用来对 libc 进行初始化操作的,而一般的程序都会调用 libc 函数,所以这个函数一定会存在。我们先来看一下这个函数(当然,不同版本的这个函数有一定的区别)

我们来看看这个函数
在这里插入图片描述
在这个函数里面有两个和参数有关的gadget
通过r15 r14 r13 这三个寄存器来控制rdx rsi rdi 的值

在这些寄存器中,我们主要关注的是r12,r

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值