漏洞分析
向system_server
传入不可序列化的android.os.BinderProxy
对象实例,其成员变量在反序列化时发生类型混淆,由于BinderProxy
的finalize()
包含native代码,于是在native代码执行时将成员变量强制转换为指针,注意到成员变量是攻击者可控的,攻击者可以控制该指针指向可控的地址空间,最终获得在system_server(uid=1000)
中执行代码的权限。
breenmachine在foxglovesecurity analysis中列出了以下会使用Java反序列化的场景。
Java loves sending serialized objects all over the place. For example:
这是一道2010年关于Linux Kernel Exploit的题目,目标是提权。
题目代码如下:
内核栈溢出和用户态栈溢出原理一样,拷贝、拼接字符串的时候未作边界检查,导致溢出数据覆盖栈上保存的返回地址,从而劫持程序控制流。在内核空间可以用来提权。
漏洞比较久远,仅是作为Linux Kernel Exploit入门。
为了防止通过调试将内存中的DEX文件dump出来,APP一般都会采用各种反调试来进行保护,这篇文章主要对常见的一些反调试技术进行介绍。