Android Root方法原理解析及Hook(一) adbd漏洞
16lz
2021-01-23
来自于:http://blog.csdn.net/jackaduma/article/details/7286334
漏洞在于Android源码中的 adb.c文件中
- intmain(){
- ...
- ...
- setgid(AIL_SHELL);//失败不退出
- setuid(AIL_SHELL);//同上
- ...
- ...
- }
int main(){......setgid(AIL_SHELL); // 失败不退出setuid(AIL_SHELL);//同上......}
adbd进程启动,开始时会以root权限执行一些初始化操作,之后会降权至当前shell用户权限;但若降权失败,adbd进程不会退出,仍然启动起来,此时就是root权限的adbd进程
攻击代码原理:
不断fork子进程(其实是孙进程),然后退出,产生僵尸进程,使得当前shell用户的pid数达到上限,然后kill掉adbd进程,然后再迅速fork一个,使之仍然达到上限,这样将无法再为当前用户创建进程
过段时间,init进程会检测到当前没有adbd进程,会运行adb.c,利用漏洞得到root权限的adbd进程
[cpp] view plain copy print ?- ...
- for(;;)
- {
- if((p=fork())==0){
- exit(0);
- }
- elseif(p<0){
- ...
- }
- else{
- ...
- }
- }
- ...
...for(;;){if ((p=fork())==0){exit(0);}else if(p<0){...}else{...}}...
Myhook code:
打log至logcat输出
[cpp] view plain copy print ?
- #include<cutils/log.h>
- #defineLOG_TAG"adbhooker"
- intmain(){
- ...
- ...
- if(setgid(AIL_SHELL)!=0){
- LOGE("failedtosetgidforshelluser");
- exit(0);
- }
- if(setuid(AIL_SHELL)!=0){
- LOGE("failedtosetuidforshelluser");
- exit(0);
- }
#include <cutils/log.h>#define LOG_TAG "adb hooker"int main(){......if(setgid(AIL_SHELL)!=0){LOGE("failed to setgid for shell user");exit(0);}if(setuid(AIL_SHELL)!=0){LOGE("failed to setuid for shell user");exit(0);}
更多相关文章
- adroid app权限实现方式
- Android中的进程生命周期
- Android动态权限管理:Android Runtime Permission.
- Android跨进程bindService与callback
- Android权限安全(5)组件的android:exported属性
- Android 中自定义权限