UAF—metasequoia_2020_summon
距离上次发帖已经一个多月了。每当我准备撸起袖子好好学堆的时候,就会有其他乱七八糟的事插进来。。。
话不多说,今天练习的内容是UAF系列的summon。
给了你六个选项:
1.show:展示你的生物及其等级
2.summon [name]:召唤一个名字为name的生物
3. level-up [level]:提升等级,最高只能四级
4. strike:和黑暗之王开打
5. release:释放你的生物
6. quit:退出
这道题需要你和怪物打架,需要修炼到5级才能打赢。但是在这个游戏中,你只能修到4级。
查看权限
都开了。
F5分析二进制文件
只要修炼到5级,就能get shell。
解题思路
为v7申请了0x10大小空间。
**v7是2维指针。*v7是**v7的取值,也是首元素。使用strdup函数令其指向nptr所指向的空间。
关于strdup的说明:
strdup是为*v7 malloc一块空间的。*v7指向了创建的生物名字。
*(v7+2)指向的是生物的等级。也就是说,一个summon会malloc 两个块。
我们先创建一个生物,观察内存布局:
从图中可以看见,一共有两个块,v7的地址是1020,1020处存放的是*v7,对应着*v7=strdup(npstr)=1040,nptr是名字的地址1040。
1028处存放的是等级。在1040存放的是我们刚才输入的名字“aaaa”的ASCII码。假如这个名字足够长,能溢出到1048的位置,这时1048的位置值可以看作是等级的值。
确认v7的结构体是:
struct v7{
char *name;
int level;
}
你可能会问:*v7是name,*v7+2是level。按照上图level的位置,应该是*v7+1吧?后来我也注意到这点,在源码中找到了答案:
还是太粗心了,人家早就把v7转为了4字节。而1020位置只有8字节,所以*v7+2的位置是1028。
我们实验一下上面假设:(因为地址随机化,地址和上面的有出入,但最后两位都是一样的,地址内的值是对的,不影响分析。)
可以看到,由于名字过长,f048的位置已经成功溢出。在源码中,只free了名字,没有free等级。
选择release试试:
可以看到,free *v7之后,名字aaaaaaaa被清理,但是对应的等级5依然存在。
看到这里,有点思路了吧?把这个块free掉,再使用summon调用malloc填充名字,就能get shell了!
这道题的flag我是在本机的根目录下建的。
from pwn import *#context.log_level='debug'p=process("./summoner")
def dbg():gdb.attach(p)pause()p.sendlineafter('>',str('summon aaaaaaaa\x05'))
p.sendlineafter('>',str('release'))
#dbg()
p.sendlineafter('>',str('summon aaaa'))
#dbg()
p.sendlineafter('>',str('strike'))
#dbg()
p.interactive()
大功告成
UAF—metasequoia_2020_summon相关推荐
- UAF学习之Adobe reader CVE-2013-3346
学习了UAF,分析了几个漏洞,同时,也熟悉了windbg的用法,收获挺大. 基本的UAF分析流程如下: i:找有漏洞的函数 ii:找到被释放对象的类型,以及被释放对象在内存中的位置 iii:理解对象的 ...
- CVE-2015-3636(pingpong root) android内核 UAF漏洞分析
前言 去年差不多这个时候就计划把这个漏洞给分析了,由于android没有经常搞,所以踩了很多坑,中间一度因为各种原因停滞放弃,最近遇到一个事情让我下定决心把它了结,也算是解决一个心病.过程会写详细一点 ...
- 各浏览器抗uaf机制
今年中旬,微软针对旗下ie浏览器中大量出现的uaf漏洞,对ie浏览器的安全机制进行了一个大幅度的升级,其中主要体现为隔离堆及延迟释放两个机制,顿时又将uaf漏洞的利用向上提升了一个大坎, 但是类似的对 ...
- 见微知著(一):解析ctf中的pwn--Fast bin里的UAF
在网上关于ctf pwn的入门资料和writeup还是不少的,但是一些过渡的相关知识就比较少了,大部分赛棍都是在不断刷题中总结和进阶的.所以我觉得可以把学习过程中的遇到的一些问题和技巧总结成文,供大家 ...
- Android内核层驱动程序UAF漏洞提权实例
文章目录 前言 UAF漏洞 babydriver 环境搭建 漏洞分析 提权exp cred结构 fork()函数 总结 前言 自 2021 年 11 月从国企离职并入职互联网私企后,发现博客很少更新了 ...
- UAF 身份认证框架
UAF(Universal Authentication Framework)意为通用身份认证框架,目的是通过生物识别(如指纹识别)和加密技术方式,为用户提供无密码的身份认证体验. UAF 由 eBa ...
- Linux x86 漏洞利用-Use-After-Free(UAF)-释放后可重用
Use-After-Free 先决条件 Off-By-One漏洞(基于堆) 理解glibc malloc VM设置:Fedora 20(x86) 什么是释放后可重用(UaF)? 继续使用已经释放的堆内 ...
- realloc函数UAF利用|攻防世界pwn进阶区supermarket
文章目录 思路 0x00.tar解压 0x01.查看保护 0x02.查看程序并调试 0x03.漏洞分析 realloc函数详解 0x04.利用思路 利用过程 exp-1 解法二 函数须知 0x00.查 ...
- FIDO UAF Extension
原文链接: Extension结构 FIDO扩展在很多地方出现,包括UAF协议消息,认证器命令或由认证器签名的断言等.每个扩展都有一个标识符,扩展标识符的命名空间是FIDO UAF全局的(例如命名空 ...
最新文章
- matlab subs
- M2: XAML Controls(2)
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(2):处理异步调用中的异常...
- COM_ASET check in CRM Middleware inbound scenario
- 如何开发出优秀的APICloud应用
- C++自动类型推导 : auto 与 decltype 用法
- PyPDF2 | 利用 Python 实现 PDF 分割
- python怎么创建函数_Python创建与调用函数
- input里面check 状态检测
- Lua 如何快速的读取一个文件
- C语言实现键盘记录器
- AODV路由协议详解
- 阿里巴巴字体图标库使用及更新方法
- c语言看门狗指令pic,PIC单片机之看门狗_看门狗定时器工作原理
- linux usb挂载日志,linux系统usb挂载
- 1.2.3 数据模型的组成要素
- 梯度下降算法的细节补充(凸函数, 导数, 偏导数,梯度, 方向导数以及负梯度下降最快背后的泰勒身影)
- 我的电脑里顽固图标删除解决
- 支付宝小程序使用MQTT over WebSocket连接阿里云IoT物联网平台
- 钉钉、企业微信、飞书的掘金逻辑
热门文章
- 软件专业学习之成长志(四)
- 深圳靠谱的python培训机构排名
- STM32串口通信代码、ASCII码、XU4串口通信,printf只会转换为无符号类型,linux下的串口通信程序
- 朋友圈评论发html,微信评论怎么发图片(微信朋友圈评论可以发表情包啦)
- 华硕笔记本电脑重装系统后不能读取usb,不能上网
- 关键字深度剖析,集齐所有关键字可召唤神龙?【二】
- 计算机电源供电方式,电脑主板开关电源供电方式图文介绍
- Java Holder 使用
- Tensorflow2.6.0-MKL for C++
- 微信小程序获取当前页面url