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

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

2018-7-4 03:22
3397

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

这是一个堆漏洞的利用题,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内容的功能。代码如下:


[注意]看雪招聘,专注安全领域的专业人才平台!

最后于 2018-7-4 12:00 被poyoten编辑 ,原因: 前后多次写得有出入
收藏
免费 1
支持
分享
赞赏记录
参与人
雪币
留言
时间
PLEBFE
为你点赞~
2023-2-4 01:59
最新回复 (0)
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册