首页
社区
课程
招聘
[原创] 京东-看雪-2018-春季赛-第九题- pwn- 羞耻player
发表于: 2018-7-2 22:17 3372

[原创] 京东-看雪-2018-春季赛-第九题- pwn- 羞耻player

aqs 活跃值
5
2018-7-2 22:17
3372

怎么说,感觉这题目出崩了,攻击方法很简单,leak 一个地址然后直接fastbin attack 就完事了,和题目写的一堆函数不成比例的感觉

题目给了 二进制 以及 libc, 版本 2.23,保护全开

先玩一下程序
一开始输入一个name,然后就进入主菜单,一共四个功能

经典的选单程序

add clip 操作,有四种选择,每一种选择传入的东西不同

后面的 edit,play, remove 会根据创建的类型调用对应的函数
先抛开代码怎么实现不说,手动fuzz一下,进行下面的操作直接就崩了

这样自己也是比较好定位漏洞,这里报错是double free, 那么可能是 delete 之前 的 add 或者 edit 操作有对内存 free 没有删除指针什么的

看看代码吧
main 函数如下, 后面的 内容就是 读取 option 然后进行 add edit 什么的函数调用,主要看 init_1438(); 这个函数

init_1438() 函数打印开始信息,并调用了一个 rand_heap_12B0 函数,功能上将大概就是申请随机大小的 chunk , 然后 free 掉,这样就会在 heap 上面形成大小不定的 free chunk

看一下 add 函数的实现,根据 option malloc 不同的大小对应不同的类型,之前的漏洞点在 video处理上,这里先看看video

video add 操作,

申请 0x50 大小的chunk,掉哟个 add_video_pointer 这个函数,然后 chunk[0] 的位置保存的是一个指针之类的? 直接调用函数
看一下 add_video_pointer, 自己名字起的比较怪,其实这里就是一个c++ 类,存在继承关系,类似 父类实现虚函数,子类继承多态实现这样,fvideo_203C70 就是 video 自己的函数列表,点进去就可以看到各种类的实现

各种类参考

总之 add 函数就是 分配一块内存,实例化一个video 类,指针放chunk[0] 位置,并调用里面的 add 函数

一系列的输入,主要关注 a1->frams 的部分,可以根据自己的输入创建<1024 大小的chunk
到这里还没有发现什么问题,那么问题就可能出现在 edit 里面了,看一下

edit video

edit video 实现和 add 差不多,主要关注下面这个部分

根据输入的 frams 重新分配内存,写指针,然后 直接delete 掉???
一般应该是 先delete 然后再 赋值吧,可能写反了,,

到了这里思路就清晰了,edit 的时候把分配的内存直接delete 掉了,这样调用 delete_video 就会double free 了

漏洞利用很简单,也就是文章开头说的,leak 一个内存直接fastbin attack 就完事了,但是因为初始化的时候加上了很多 大小不定的 free chunk, 所以需要处理一下
具体操作如下

完整 exp 如下


[招生]系统0day安全-IOT设备漏洞挖掘(第6期)!

上传的附件:
收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回