一、原理
漏洞利用代码zergRus产生漏洞的主要原因是:具有root权限的vold进程使用了libsysutils.so库,该库的一个函数存在栈溢出,因此可以在root权限执行输入的shellcode。
存在漏洞的函数为FrameworkListener::dispatchCommand,位于源码的\system\core\libsysutils\src\FrameworkListener.cpp中,其中的局部变量argv为固定大小的指针数组,当输入参数的数量超过其大小时,会越界写入栈中。
利用了这一漏洞,并进一步:
1、在/data/local/tmp/下增加一个置了S位的shell;
2、使Android中后续启动的adb进程以root权限运行。
其中第二步的方法是:adb进程最初以root运行,之后调用setuid()降低权限。降权之前,会判断系统属性ro.kernel.qemu,如果该属性位1,则不降权。
二、函数功能概要
die 打印出错信息,退出程序
copy 将一个文件拷贝为另一个文件
remount_data 重新mount一个分区
find_symbol 查找libc.so中导出函数的内存地址
check_addr 确定一个地址中是否包含被禁止的字节
do_fault 构造溢出数据和exploit,并通过socket发送给vold进程
find_rop_gadgets 从libc.so中寻找两个特殊指令序列的地址
checkcrash 调用do_fault,判断其溢出产生的调试信息中是否包含sp
find_stack_addr 调用do_fault,从其溢出产生的调试信息中定位栈地址
do_root 将shell文件的S位置上,并设置ro.kernel.qemu属性为1
main 主函数,完成漏洞利用的所有步骤
三、main函数
395-396: 如果当前程序是以root权限运行,并且程序名为boomsh,则调用do_root,执行附加的两步操作
402-405: 将自身拷贝至/data/local/tmp/boomsh,并设置其权限为0711,将/system/bin/sh拷贝至/data/local/tmp/sh。
407-408: 根据/system/bin/vold文件的大小获得其对应进程中堆的大概地址heap_addr。
410-421: 根据系统版本对heap_addr做微调。如果不是2.2或2.3系统,退出。
423-428: 查询libc.so中system调用的地址,保存至system_ptr。
430-443: 通过checkcrash函数,判断buffsz为16或24时能否成功利用。这里buffsz实际指libsysutils中造成栈溢出的指针数组argv的容量。
445-484: 调用find_stack_addr函数,确定栈地址。反复尝试五次,每次对堆地址heap_addr做微调,直至成功。判断得到的栈地址是否有效。
486-487: kill掉当前的logcat进程,删除/data/local/tmp/crashlog文件。
489-491: 调用find_rop_gadgets函数,在libc.so中寻找指令序列add sp, #108; pop {r4-r7, pc},将地址保存在stack_pivot;寻找指令pop {r0, pc},将地址保存在pop_r0。
493-514: 尝试三次,每次调用do_fault,之后判断/data/local/tmp/sh的S位是否置上,一旦置上,则利用成功;否则,微调栈地址heap_addr(加减16)。
516-533: 一旦利用成功,并且系统的ro.kernel.qemu属性已经被置为1,则利用完成,重启的adb进程即可获得root权限。
四、总结
主要是利用了android中几个特殊之处:
1. vold的溢出会在adb logcat中输出调试信息,这些信息说明了其内存结构,而其他程序可以读取到这些信息;
2. 在ARM架构下,跳板指令有了更多的选择,ret2libc的攻击也可能更容易实现
3. adb的降低权限过程又一次被利用。
另外建议android APP开发完成后做一个全面的漏洞检测:
http://www.ineice.com/,确保安全。
分享到:
相关推荐
主要分析了手机Root权限获取的过程,并介绍了常见的几个Root提权漏洞,最后通过分析su与SuperUser.apk的协作方式解了Root真正的原理。涉及的内容:Root的由来、Root漏洞的历史、CVE-2009-2692、CVE-2010-EASY、...
NULL 博文链接:https://f059074251.iteye.com/blog/1563846
包括Android root常用的工具 zergrush psneuter zerg su superuser.apk root roottool exynos-abuse ...
安卓权限破解工具 DooMLoRD_v3_ROOT-zergRush-busybox-su
手机开USB调试模式接到电脑 直接运行包中的runme.bat 即可完成安卓手机ROOT提权 有兴趣的朋友也可以打开CMD 按照runme.bat中的命令一条一条手动刷ROOT 该工具包本人模拟器、实机亲测均通过
原理是利用了android的两个提权漏洞: CVE-2010-EASY 和 ZergRush。 我把大概原理简单说说: 1, CVE-2010-EASY : linux的内核的模块化程度很高,很多功能模块是需要到时候再加载,在 android中由init进程来管理...
ZergRushTempRoot_V3.0汉化版
虫族抢 邪恶的虫族正在攻击你的基地! 不惜一切代价捍卫它!
就是说C:\DooMLoRD_v1_ROOT-zergRush-busybox-su下有runme.bat文件和files文件夹。 点windows的 开始-》运行,输入 cmd 点确定, cd C:\DooMLoRD_v1_ROOT-zergRush-busybox-su 按回车 runme.bat 按回车 (7) 按...
:robot: xdb(adb-Android调试桥) 这提供了与正在运行的固件的交互。 目前,您可以: 使用zergRush(仅可利用的固件-基于)对设备进行启动。 仅针对R800i测试。 :lady_beetle: xfast(快速启动) 实验性质是,与其...
adb shell chmod 755 /data/local/tmp/zergRush adb shell /data/local/tmp/zergRush cls echo ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ echo ┃ ┃ echo ┃ ┃ echo ┃ ┃...