[EXP学习]___CVE-2016-5342
编号: CVE-2016-5342
EXP: Github
EXP作者:freener
相关链接:AndroidBullitin,codeaurora
漏洞原理
这是一个存在于高通wifi驱动中的buffer overflow漏洞,通过PATCH分析漏洞的原理与后果。
通过PATCH可知,漏洞原因是边界检查不严,问题出在count + penv->user_cal_rcvd的值上,函数不大,代码如下
|
|
由此,问题很明显,分配的空间由size控制,拷贝的数据长度却由count控制。size即传入数据的前四个字节,count是用户传入的参数,所以如果count>size就可以越界写。
漏洞利用
通过漏洞原理学习freener的EXP代码就比较清晰了。
1.喷射
首先分配大量的binder_fd占用内存碎片,保证后面的分配的fd是连续的
然后分配几个fd用于部署ROP,由于之前大量分配的fd已经占用了分散的内存片,这些fd在内存中是连续的。
2.部署ROP
freenr的代码中ROP的地址的特定机型,已经找好了硬编码在代码中的
通过漏洞将ROP地址写入内核中。
最初fd的状态
释放fd[0]空间
触发漏洞将ROP写入fd[1]空间中,覆盖fd结构体中的函数
(PS:至于为什么会恰好写到释放的空间中,答案是linux内存的SLUB机制)
3.调用ROP
直接使用ioctl调用fd,就能调用ROP,将读写两个ROP分别写入两个fd,就可以拥有对内核的写与读能力。
后面就是关闭SELINUX,修改cred提权了,就不分析。