realloc调整栈帧

news2024/10/2 22:21:26

同样的,也仅仅是记录自己学习的记录、思考。

优秀的学习文章

使用realloc函数来调整栈帧让one_gadget生效 | ZIKH26

调试分析

one_gadget失效

这种都需要自己动手调试来看
以经典的libc-2.23的fastbin attack为例
one_gadget libc-2.23.so
image

edit(2,8,p64(malloc_hook-0x23)) # fake_chunk

add(0x68)

add(0x68)

info_addr("one_gadget",og)
pl = b'a'*19 + p64(og)
#pl = b'a'*11 + p64(og) + p64(realloc+16)
edit(4,len(pl),pl)
debug()
add(0xFF)

这是申请到malloc_hook-0x13处的用户段,然后将__malloc_hook改为one_gadget
可以看到此时已经成功修改了
image

然后在 calloc处下断点,单步进去。
跟到这里,发现 call rax就是要执行我们的__malloc_hook,这里是已经被替换为one_gadget了
image

然后继续单步进去。
image

看此时是否满足one_gadget的触发条件。
image

对于第一个,条件是 rax == NULL
此时的rax,不满足
image

对于第二个,条件是 [rsp+0x30] == NULL
此时的栈
image

后面两个同理。
所以,四个one_gadget全部失效。因为,我们需要用realloc函数来调整栈帧。

为什么用realloc来调整栈帧?

原因一

realloc跟malloc类似,也有一个__realloc_hook,而且__realloc_hook和__malloc_hook是相邻的。
image

这意味着我们改写__malloc_hook的时候可以顺带改写__realloc_hook,
比如:把__realloc_hook写入one_gadget,然后把__malloc_hook改为__realloc_hook,这样最后还是会执行one_gadget。

原因二

查看 libc-2.23.so

image

可以发现realloc里面有大量的push指令。
这就可以用来调整栈帧。我们既有push也有sub rsp,38h可以抬高rsp。
所以可以尝试来调整栈帧后,使得[rsp+0x30]的值为NULL

具体调整方法

前面提到,我们有的指令都是使得栈抬高的,所以要在原本的[rsp+0x30]下面(低地址)来找NULL。
然后这里算一下能抬高的最少最高范围。
6个push,一个sub
最大:6 * 0x8 + 0x38 = 0x68
但其实我们还多执行了一个call指令,原本是call one_gadget,但我们改为了call realloc;call one_gadget,
image

所以多了一次压栈。
所以最大: 0x70
最少就是仅仅多一个call加上sub的0x38: 0x40

例如,对于 [rsp+0x30],我们就应该在[rsp+0x30-0x40][rsp+0x30-0x70]
也就是 [rsp-0x40]~[rsp-0x10] 找NULL
image

很容易在第二个QWORD就找到0了
所以我们想要少执行一次push,就能够对应上NULL了。
所以从realloc+2开始即可(跳过一次push)。
本地exp调整后就能够打通了
image

再用远程测试。
image

一些思考

正如ZIKH师傅文章提到的,不需要完全的 +2,其实+1,+3这种不完全的偏移都能够成功。

one_gadget的条件是获取shell的充分条件

具体的这里就不探究了,可以看ZIKH师傅的分析。

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

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

相关文章

怎样在 PostgreSQL 中优化对大数值类型数据的计算?

文章目录 一、选择合适的数据类型二、索引优化三、查询语句优化四、数据库配置调整五、使用扩展功能六、示例七、总结 在 PostgreSQL 中处理大数值类型数据(例如 BIGINT、NUMERIC 等)的计算时,可能会遇到性能瓶颈。为了优化这些计算&#xff…

coze搭建工作流和Agent

coze搭建工作流和Agent Agent LLM 记忆感知规划使用工具 LLM是大语言模型,prompt提示词影响LLM的输出质量 描述需求——>背景——>解决思路,提示词文档。 当有明确的需求和实现需求的路径时,可以通过搭建工作流来完成标准化任务为…

从零开始学习嵌入式----Linux系统命令集合与shell脚本

Shell是一门编程语言,作为学习shell的开始,需要事先搞明白:编程的目的是什么?什么是编程语言?什么是编程? shell本身就是一门解释型、弱类型、动态语言,与python相对应,Python属于解…

办公室卫生间厕位引导牌款式多样,都有哪些功能

在现代办公环境中,卫生间不仅是员工日常使用的必需设施,也是体现企业文化和管理水平的一面镜子。然而,传统办公室卫生间往往存在着信息不透明、高峰期拥挤、清洁维护滞后等问题,影响了员工的使用体验。近年来,随着智慧…

0基础学会在亚马逊云科技AWS上搭建生成式AI云原生Serverless问答QA机器人(含代码和步骤)

小李哥今天带大家继续学习在国际主流云计算平台亚马逊云科技AWS上开发生成式AI软件应用方案。上一篇文章我们为大家介绍了,如何在亚马逊云科技上利用Amazon SageMaker搭建、部署和测试开源模型Llama 7B。下面我将会带大家探索如何搭建高扩展性、高可用的完全托管云原…

个人标准流程管理系统

个人标准流程管理系统(Personal Standard Operating Procedure System, PSOPS)是一种帮助个人组织和优化日常任务、项目管理、学习计划和其他重复性活动的工具。它旨在提升个人效率,确保各项事务按照预设的标准流程执行。以下是设计这样一个系…

PPI(每英寸像素数)、DPI(每英寸点数)和Pixel(像素)的区别和联系?

一、定义 PPI、DPI和Pixel是图像处理、打印和显示领域中常用的三个概念,它们之间既有区别又有联系。以下是对这三个概念进行分别讲解: 1. PPI(Pixels Per Inch)-即每英寸像素数,是图像分辨率的一种表示方…

Apache部署与配置

概述 介绍 Apache HTTP Server(简称Apache)是Apache的一个开源的网页服务器,它源自NCSAhttpd服务器,并经过多次修改和发展,如今已经成为全球范围内广泛使用的Web服务器软件之一 特点 跨平台:可以运行在几乎所有广泛使用的计算机平…

接口基础知识1:认识接口

课程大纲 一、定义 接口:外部与系统之间、内部各子系统之间的交互点。 比如日常使用的电脑,有电源接口、usb接口、耳机接口、显示器接口等,分别可以实现:与外部的充电、文件数据传输、声音输入输出、图像输入输出等功能。 接口的本…

tableau气泡图与词云图绘制 - 8

气泡图及词云图绘制 1. 气泡图绘制1.1 选择相关属性字段1.2 选择气泡图1.3 设置颜色1.4 设置标签1.5 设置单位 2. 气泡图绘制 - 22.1 类别筛选2.2 页面年份获取2.3 行列获取2.4 历史轨迹显示 3. 词云图绘制3.1 筛选器3.2 选择相关属性3.3 选择气泡图3.4 设置类型颜色3.5 设置形…

科研训练课程2--论文格式修改+endnote使用

科研训练课程2–论文格式修改endnote使用 文章目录 前言修改论文格式图表endnote 使用&#xff08;补充&#xff09; 总结 前言 第二天 2024/7/9 所属目录&#xff1a;科研训练课程创建时间&#xff1a;2024/7/9作者&#xff1a;星云<XingYun>更新时间&#xff1a;xxxUR…

Python标准库常用模块的典型用法介绍与案例

目录 1. os模块 典型用法 案例 2. sys模块 典型用法 案例 3. datetime模块 典型用法 案例 4. re模块 典型用法 案例 5. json模块 典型用法 案例 6. random模块 典型用法 案例 7. collections模块 典型用法 案例 总结 Python作为一门功能强大的编…

Redis基础教程(十八):Redis管道技术

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

仕考网:公务员考试面试时间一般多长?

公务员考试主要分为笔试与面试两个阶段&#xff0c;其中面试是笔试通过的下一关&#xff0c;面试的具体安排通常由相关考试机构或招录单位负责发布并通知考生。 公务员面试的持续时间一般在30分钟至1小时之间&#xff0c;具体时长可能因地区和招录单位的不同而有所变化。常见的…

交通气象站:保障道路安全的智慧之眼

随着社会的快速发展&#xff0c;交通运输日益繁忙&#xff0c;道路安全成为公众关注的焦点。在这个背景下&#xff0c;交通气象站作为保障道路安全的重要设施&#xff0c;正发挥着越来越重要的作用。它们不仅为交通管理部门提供及时、准确的气象信息&#xff0c;也为广大驾驶员…

中职网络安全B模块Cenots6.8数据库

任务环境说明&#xff1a; ✓ 服务器场景&#xff1a;CentOS6.8&#xff08;开放链接&#xff09; ✓ 用户名&#xff1a;root&#xff1b;密码&#xff1a;123456 进入虚拟机操作系统&#xff1a;CentOS 6.8&#xff0c;登陆数据库&#xff08;用户名&#xff1a;root&#x…

Gymnasium 借游戏来学习人工智能

既然有了免费的linux系统GPU&#xff0c;干脆演示一下使用drivecolab套件来训练模型。 !apt-get install -y build-essential swig !pip install box2d-py !pip install gymnasium[all] !pip install gymnasium[atari] gymnasium[accept-rom-license] !pip install stable_bas…

限流组件都有哪些

限流组件有很多&#xff0c;下面是一些常见的限流组件&#xff1a; 1.Sentinel&#xff1a;轻量级的流量控制、熔断降级组件&#xff0c;适用于分布式系统间的流量控制、负载保护和系统防护。 1.Guava RateLimiter&#xff1a;Google 的 Guava 库提供的限流器&#xff0c;基于令…

中职网络安全B模块渗透测试system0016

访问http://靶机IP/web1/,获取flag值&#xff0c;Flag格式为flag{xxx}&#xff1b; 可能会跳转8000端口删除进入80端口 进入后点击侦查一下&#xff0c;这里乱码了&#xff0c;我们点击查看是一个柯南&#xff0c;web但这是一个web题目肯定不是隐写术&#xff0c;所以说题目的…

GuLi商城-商品服务-API-品牌管理-OSS获取服务端签名

新建第三方服务: 引入common 把common中oss的依赖都拿到第三方服务中来 配置文件: 加上nacos注解:<