完结撒花。

今天还是以做题为主。

fmtstr+uaf

格式化字符串+USER AFTER FREE

首先补充一个背景知识,指针也是有数据类型的,不同数据类型的指针+xx,所加的字节数也不一样,其实是指针指的项目的下一项。如int a[20],a是指针,a+1就是往后4字节。

根据这个地址的思想,可以把func(args)等效为==(0xaaaa)(args)

------------------------------------------

首先checksec,看到了有可读可写可执行的地方,先留个心眼。

开始做题。做题可以自己摆弄摆弄程序,或者输入一些自己觉得可能会出漏洞的地方,说不准就会出现问题,这里就是发生了double free。虽然还不太理解,但感觉不太正常。

漏洞出现在这里,还没有确认退出就已经free了chunk o。如果我们输入n,程序会重新来一次,但是o对应的指针已经指向了free chunk,在UAF这个选项,有一个malloc,恰好满足UAF漏洞,这个o是写入函数地址的chunk,我们可以实现任意函数执行了,或者其他操作(因为这里没看到明显的后门函数)

这里要注意这个o指向的位置,其实还是那个chunk,不要弄混淆。

大概思路就清晰了。首先这个题没有栈溢出,我们考虑用堆。先通过UAF,搞一个shellcode到栈上。然后想办法执行它。

难题出现,UAF能写入的最多是24字节,但是pwntool生成的肯定不止。所以我们可以在之前的shellcode database里面搞一个shellcode出来。难题解决。

接下来是泄露栈的地址,如下,我们只需要知道了prev rbp的内容即可知道v7-v9地址。这样就可以把shellcode注入到指定位置。

小技巧:可以在特定位置搞一个标记字符,如下所示,在recv和send会更加方便。

 这个标记字符还有一种情况,就是格式化字符不足一个字长,他就可以起到补满一个字长。不然全乱了,因为它找参数是step为一个字长来找。

下面就是UAF示意图。

变为

最后不要忘记程序执行是在1,2,3选项分别执行不同对应的o里面的代码,还要发送一个让shellcode被执行才可以!

hacknote(经典UAF)

堆题经典模板:可以创建堆,可以释放,可以查看堆列表。

而且,好消息是,因为题目模板化,exp同样也是模板化,一会便知。

···········································································

先来看看add函数。首先映入眼帘的就是它设置了一个限制。最多只能存在5个note,然后搞了个指针数组,来存储note的地址。

看一下添加的逻辑:很简单其实。

就是add的时候,遍历这个象征着note的ptr数组,如果是空的,就malloc一个。但是这个malloc的是8,如下所示:会出来两个实际上。

所以最终的结构实际上如下所示,每个数组指向了第一个chunk,而后第二个chunk还有一个大小看自己的chunk。

上面的chunk可是同样有函数地址的,需要注意。

还是一样的漏洞,看free,没有free指针:

 

其实可以觉得是UAF了

然后开始做题。这里要用函数的思想,每一次进入子函数,都是那些代码,输入什么,输出什么,而我们要不断调用子函数,因此可以用函数在脚本里面封装下:

我们可以先new两次。上面的chunk类似于控制信息,下面的就是(垃圾)数据。

我们再free。这样的话上面的chunk进入一个bin(估计是fast bin),下面的进入一个bin。

这里就已经初具雏形了,UAF。弄完后是下面这样

我们再执行add。会重新malloc。看这个,我们malloc一个8size。fast bin是类似于栈,后进先出。首先2申请一个控制chunk,就是1原来所对应的。再申请一个8size的chunk,就是0所对应的控制chunk。

这里不要忘记UAF的关键,就是没有free原来的指针,导致那个指针和新malloc的指针指向同一个地方,可以篡改老指针指的地方,借用老指针做一些坏事。

在这里面,0认为的控制信息,就是2认为的数据区域

这里题目还给一个so文件,肯定是需要泄露地址。

所以先用2,给0的控制块第二个(相当于参数)写入puts的got表地址。这是泄露这一步要干的事情。

我们用程序显示chunk内容的那个子函数,来搞泄露。

泄露完之后,再填充为:

 

即可。

注意,这里参数是||sh,为啥有个杠杠?因为程序设计问题。程序设计的system参数实际上是*0,也就是这一段。实际的执行语句见下面:

第一个是system的真实地址,肯定会执行失败。||这个特殊的符号(意思是或),会在第一个执行失败,执行第二个sh。那为什么泄漏的时候,不用考虑这个。因为泄露的时候的puts,是出题人写的my_puts,不是plt表的puts。已经考虑这里的情况了。

这还只是初级堆利用,以一张完整的本题利用图作为收尾吧!愿顶峰相见!

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础设计模式——总结与进阶 - 3. 学习资源与下一步

第五部分:总结与进阶 - 3. 学习资源与下一步 到这里,你已经完成了设计模式主要内容的学习。但这仅仅是一个开始,设计模式的精髓在于实践和持续学习。本节将为你提供一些优质的学习资源和后续学习的建议,帮助你在这条道路上走得更…

多模态大语言模型arxiv论文略读(125)

Uni-Med: A Unified Medical Generalist Foundation Model For Multi-Task Learning Via Connector-MoE ➡️ 论文标题:Uni-Med: A Unified Medical Generalist Foundation Model For Multi-Task Learning Via Connector-MoE ➡️ 论文作者:Xun Zhu, Yi…

【学习笔记】NLP 基础概念

1.1 什么是 NLP 定义: 自然语言处理(NLP)**是一种让计算机理解、解释和生成人类语言的技术。它是人工智能领域中极为活跃且重要的研究方向,旨在模拟人类对语言的认知和使用过程 特点: 多学科交叉:结合计…

RNN为什么不适合大语言模型

在自然语言处理(NLP)领域中,循环神经网络(RNN)及衍生架构(如LSTM)采用序列依序计算的模式,这种模式之所以“限制了计算机并行计算能力”,核心原因在于其时序依赖的特性&a…

微信小程序一款不错的文字动画

效果图 .js Page({data: {list:[],animation:[text-left,text-right,text-top,text-bottom],text:[[春眠不觉晓,处处闻啼鸟。,夜来风雨声,花落知多少。 ],[床前明月光,疑是地上霜。,举头望明月,低头思故乡。],[千山鸟飞绝&#…

循环神经网络(RNN):序列数据处理的强大工具

在人工智能和机器学习的广阔领域中,处理和理解序列数据一直是一个重要且具有挑战性的任务。循环神经网络(Recurrent Neural Network,RNN)作为一类专门设计用于处理序列数据的神经网络,在诸多领域展现出了强大的能力。从…

手机SIM卡通话中随时插入录音语音片段(Windows方案)

手机SIM卡通话中随时插入录音语音片段(Windows方案) --本地AI电话机器人 上一篇:手机SIM卡通话中随时插入录音语音片段(Android方案)​​​​​​​ 下一篇:​​​​​​​编写中 一、前言 书接上文《手…

阿里云通义大模型:AI浪潮中的领航者

通义大模型初印象 在当今 AI 领域蓬勃发展的浪潮中,阿里云通义大模型宛如一颗璀璨的明星,迅速崛起并占据了重要的地位。随着人工智能技术的不断突破,大模型已成为推动各行业数字化转型和创新发展的核心驱动力。通义大模型凭借其强大的技术实…

【算法篇】逐步理解动态规划模型7(两个数组dp问题)

目录 两个数组dp问题 1.最长公共子序列 2.不同的子序列 3.通配符匹配 本文旨在通过对力扣上三道题进行讲解来让大家对使用动态规划解决两个数组的dp问题有一定思路,培养大家对状态定义,以及状态方程书写的思维。 顺序: 题目链接-》算法思…

什么是 HTTP Range 请求(范围请求)

HTTP Range 请求,即范围请求,是一种 HTTP 请求方法,允许客户端请求资源的部分数据。这种请求在处理大型文件(如视频、音频、或大文件下载)时特别有用,因为它可以有效地进行断点续传和按需加载数据&#xff…

java集合(十) ---- LinkedList 类

目录 十、LinkedList 类 10.1 位置 10.2 特点 10.3 与 ArrayList 的区别 10.4 构造方法 10.5 常用方法 十、LinkedList 类 10.1 位置 LinkedList 类位于 java.util 包下 10.2 特点 是 List 接口的实现类是 Deque 接口的实现类底层使用双向循环链表结构 10.3 与 Arra…

kafka消费的模式及消息积压处理方案

目录 1、kafka消费的流程 2、kafka的消费模式 2.1、点对点模式 2.2、发布-订阅模式 3、consumer消息积压 3.1、处理方案 3.2、积压量 4、消息过期失效 5、kafka注意事项 Kafka消费积压(Consumer Lag)是指消费者处理消息的速度跟不上生产者发送消息的速度,导致消息在…

RAG实践:Routing机制与Query Construction策略

Routing机制与Query Construction策略 前言RoutingLogical RoutingChatOpenAIStructuredRouting DatasourceConclusion Semantic RoutingEmbedding & LLMPromptRounting PromptConclusion Query ConstructionGrab Youtube video informationStructuredPrompt GithubReferen…

基于python的web系统界面登录

#让我们的电脑可以支持服务访问 #需要一个web框架 #pip install Flask from flask import Flask, render_template,request from random import randint app Flask(__name__) app.route(/index) def index():uname request.args.get("uname")return f"主页&am…

MATLAB Simulink 终极入门指南:从零设计智能控制系统

为什么工程师都爱Simulink? 想象一下:不写一行代码就能设计机器人控制器、飞行算法甚至核反应堆! MATLAB Simulink正是这样的可视化神器。全球70%的汽车ECU、航天器控制系统用它开发。本文将带你从零设计一个智能温控系统,融入创新性的模糊PID控制,并生成可部署的C代码!…

vue3 javascript 复杂数值计算操作技巧

在Vue 3中处理复杂数值计算,你可以采用多种策略来确保代码的可读性、可维护性和性能。以下是一些实用的技巧和最佳实践: 1. 使用计算属性(Computed Properties) Vue 3的computed属性非常适合处理复杂的数值计算。它们是基于响应…

26.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--角色权限管理

在现代企业级应用中,角色权限管理是保障系统安全和提升用户体验的核心基础功能。一个高效的角色权限系统不仅能够有效防止越权访问,还能简化系统的维护和扩展。本文将系统性介绍角色权限管理的核心实现思路,包括架构设计、性能优化、安全机制…

[VSCode] VSCode 设置 python 的编译器

VSCode 设置 python 的编译器 快捷键:CTRL SHIFT P 弹出 VSCode 的命令框输入 Python : select Interpretor选择自己需要的 python 环境;如 python 3.8 或者 python 3.10 版本

基于PEMFC质子交换膜燃料电池系统的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序 4.系统仿真参数 5.系统原理简介 6.参考文献 7.完整工程文件 1.课题概述 本课题是一个燃料电池(大概率是质子交换膜燃料电池,PEMFC )的数学模型仿真框图,用于模拟燃料电池的电特…

git-build-package 工具代码详细解读

git-build-package(gbp)是一个用于从 Git 仓库管理 Debian 软件包的工具,其代码架构和实现原理体现了对 Git 版本控制系统和 Debian 打包流程的深度整合。以下是对其代码的详细解读: 代码架构设计 gbp 的代码架构设计围绕其核心…