CVE-2015-3864

cve-2015-3864是cve-2015-1538同系列中的另外一个漏洞,利用的是解析tx3g中整型上溢,google公布的exploit-38226中通过利用jemalloc的特性对内存进行巧妙的布局,溢出后基本能100%覆盖到MPEG4DataSource的虚表指针。
2016年3月18号NorthBit公布了一篇文章Metaphor A (real) real­life Stagefright exploit,在google的基础上通过信息泄漏绕过aslr。

其中内存布局原理(摘自Metaphor):

pssh:消耗内存碎片,留下大块内存。解析期间不会释放掉,大小可控。
titl/gnre:内存占位,解析到第二个先申请新的然后会释放之前的。
同时pssh堆喷中,分配大于0x40000长度会调用mmap函数,mmap()地址8位随机,需要预测堆喷地址。

总结下来:
通过pssh atoms堆喷使新的的heap runs可预测。
申请titl和gnre占位。
解析stbl box后创建MPEG4DataSource对象,复用titl。
解析tx3g box复用gnre。
溢出覆盖虚表指针。

调试过程(Nexus5 andorid 5.01):

1.MPEG4DataSource对象复用titl

2.tx3g复用gnre

3.memcpy溢出覆盖vTable

4.调用mDataSource->readAt控制流程

5.gadget1

6.gadget2

7.gadget3

8.mprotect

9.执行mprotect后通过gadget2和gadget3调整堆栈然后跳入shellcode

最后shell_reverse_tcp