距离上次发帖已经一个多月了。每当我准备撸起袖子好好学堆的时候,就会有其他乱七八糟的事插进来。。。

话不多说,今天练习的内容是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相关推荐

  1. UAF学习之Adobe reader CVE-2013-3346

    学习了UAF,分析了几个漏洞,同时,也熟悉了windbg的用法,收获挺大. 基本的UAF分析流程如下: i:找有漏洞的函数 ii:找到被释放对象的类型,以及被释放对象在内存中的位置 iii:理解对象的 ...

  2. CVE-2015-3636(pingpong root) android内核 UAF漏洞分析

    前言 去年差不多这个时候就计划把这个漏洞给分析了,由于android没有经常搞,所以踩了很多坑,中间一度因为各种原因停滞放弃,最近遇到一个事情让我下定决心把它了结,也算是解决一个心病.过程会写详细一点 ...

  3. 各浏览器抗uaf机制

    今年中旬,微软针对旗下ie浏览器中大量出现的uaf漏洞,对ie浏览器的安全机制进行了一个大幅度的升级,其中主要体现为隔离堆及延迟释放两个机制,顿时又将uaf漏洞的利用向上提升了一个大坎, 但是类似的对 ...

  4. 见微知著(一):解析ctf中的pwn--Fast bin里的UAF

    在网上关于ctf pwn的入门资料和writeup还是不少的,但是一些过渡的相关知识就比较少了,大部分赛棍都是在不断刷题中总结和进阶的.所以我觉得可以把学习过程中的遇到的一些问题和技巧总结成文,供大家 ...

  5. Android内核层驱动程序UAF漏洞提权实例

    文章目录 前言 UAF漏洞 babydriver 环境搭建 漏洞分析 提权exp cred结构 fork()函数 总结 前言 自 2021 年 11 月从国企离职并入职互联网私企后,发现博客很少更新了 ...

  6. UAF 身份认证框架

    UAF(Universal Authentication Framework)意为通用身份认证框架,目的是通过生物识别(如指纹识别)和加密技术方式,为用户提供无密码的身份认证体验. UAF 由 eBa ...

  7. Linux x86 漏洞利用-Use-After-Free(UAF)-释放后可重用

    Use-After-Free 先决条件 Off-By-One漏洞(基于堆) 理解glibc malloc VM设置:Fedora 20(x86) 什么是释放后可重用(UaF)? 继续使用已经释放的堆内 ...

  8. realloc函数UAF利用|攻防世界pwn进阶区supermarket

    文章目录 思路 0x00.tar解压 0x01.查看保护 0x02.查看程序并调试 0x03.漏洞分析 realloc函数详解 0x04.利用思路 利用过程 exp-1 解法二 函数须知 0x00.查 ...

  9. FIDO UAF Extension

    原文链接:  Extension结构 FIDO扩展在很多地方出现,包括UAF协议消息,认证器命令或由认证器签名的断言等.每个扩展都有一个标识符,扩展标识符的命名空间是FIDO UAF全局的(例如命名空 ...

最新文章

  1. matlab subs
  2. M2: XAML Controls(2)
  3. 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(2):处理异步调用中的异常...
  4. COM_ASET check in CRM Middleware inbound scenario
  5. 如何开发出优秀的APICloud应用
  6. C++自动类型推导 : auto 与 decltype 用法
  7. PyPDF2 | 利用 Python 实现 PDF 分割
  8. python怎么创建函数_Python创建与调用函数
  9. input里面check 状态检测
  10. Lua 如何快速的读取一个文件
  11. C语言实现键盘记录器
  12. AODV路由协议详解
  13. 阿里巴巴字体图标库使用及更新方法
  14. c语言看门狗指令pic,PIC单片机之看门狗_看门狗定时器工作原理
  15. linux usb挂载日志,linux系统usb挂载
  16. 1.2.3 数据模型的组成要素
  17. 梯度下降算法的细节补充(凸函数, 导数, 偏导数,梯度, 方向导数以及负梯度下降最快背后的泰勒身影)
  18. 我的电脑里顽固图标删除解决
  19. 支付宝小程序使用MQTT over WebSocket连接阿里云IoT物联网平台
  20. 钉钉、企业微信、飞书的掘金逻辑

热门文章

  1. 软件专业学习之成长志(四)
  2. 深圳靠谱的python培训机构排名
  3. STM32串口通信代码、ASCII码、XU4串口通信,printf只会转换为无符号类型,linux下的串口通信程序
  4. 朋友圈评论发html,微信评论怎么发图片(微信朋友圈评论可以发表情包啦)
  5. 华硕笔记本电脑重装系统后不能读取usb,不能上网
  6. 关键字深度剖析,集齐所有关键字可召唤神龙?【二】
  7. 计算机电源供电方式,电脑主板开关电源供电方式图文介绍
  8. Java Holder 使用
  9. Tensorflow2.6.0-MKL for C++
  10. 微信小程序获取当前页面url