首页
社区
课程
招聘
[原创]看雪.京东 2018CTF 第九题 PWN-羞耻player Writeup
发表于: 2018-7-4 03:22 3275

[原创]看雪.京东 2018CTF 第九题 PWN-羞耻player Writeup

2018-7-4 03:22
3275

后面有时间再修改更新下,里面可能有错误。

这是一个堆漏洞的利用题,c++编写。漏洞点有三处:一个逻辑错误导致的UAF:新申请的堆先赋值给了指针,再释放指针指向的旧堆,实际是释放了新申请的堆,释放与赋值的顺序颠倒出现了悬挂指针,UAF得以实现,但是由于PIE,不能单独直接利用;二是没有检查输入的表示大小的数为负数,导致heap overfolw;三是打印函数多打印一个字节,可以按字节泄露信息。

##程序分析
先checksec:

程序运行情况如下:

程序模拟了音视频播放器,包括添加、修改、播放、删除包括视频、音频及其相关信息的功能,而且都是通过类完成编写,实际功能类都继承于同一个父类,父类定义大致如下:

然后定义了4个子类Metadata,SubClip,AudioClipVideoClipvtable在偏移203BD0处。

漏洞点在VideoClipclip_edit函数中:

信息泄露可以利用播放功能。VideoClipAudioClipclip_play函数能打印经异或编码后的出信息:

play这里,也有问题,多打印了一个字节。

程序用到的数据结构如下:

其中的p_method指向各自的vtable

另外程序开始还申请了256随机大小的堆并进行了随机释放。

先跑空bins,然后利用fastbin进行堆地址的泄露,再利用small bin进行libc基址的泄露。
然后进行堆喷射将one_gadget地址有效覆盖堆。

再结合SubClipclip_add功能改写vtable指针。SubClipclip_add功能中,除了能读取负数的大小外,其还有复制已经存在的subtitle内容的功能。代码如下:


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-7-4 12:00 被poyoten编辑 ,原因: 前后多次写得有出入
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//