来自于:http://blog.csdn.net/jackaduma/article/details/7286334

漏洞在于Android源码中的 adb.c文件


  1. intmain(){
  2. ...
  3. ...
  4. setgid(AIL_SHELL);//失败不退出
  5. setuid(AIL_SHELL);//同上
  6. ...
  7. ...
  8. }

adbd进程启动,开始时会以root权限执行一些初始化操作,之后会降权至当前shell用户权限;但若降权失败,adbd进程不会退出,仍然启动起来,此时就是root权限的adbd进程

攻击代码原理:

不断fork子进程(其实是孙进程),然后退出,产生僵尸进程,使得当前shell用户的pid数达到上限,然后killadbd进程,然后再迅速fork一个,使之仍然达到上限,这样将无法再为当前用户创建进程

过段时间,init进程会检测到当前没有adbd进程,会运行adb.c,利用漏洞得到root权限的adbd进程

[cpp] view plain copy print ?
  1. ...
  2. for(;;)
  3. {
  4. if((p=fork())==0){
  5. exit(0);
  6. }
  7. elseif(p<0){
  8. ...
  9. }
  10. else{
  11. ...
  12. }
  13. }
  14. ...

Myhook code:

loglogcat输出


[cpp] view plain copy print ?
  1. #include<cutils/log.h>
  2. #defineLOG_TAG"adbhooker"
  3. intmain(){
  4. ...
  5. ...
  6. if(setgid(AIL_SHELL)!=0){
  7. LOGE("failedtosetgidforshelluser");
  8. exit(0);
  9. }
  10. if(setuid(AIL_SHELL)!=0){
  11. LOGE("failedtosetuidforshelluser");
  12. exit(0);
  13. }

更多相关文章

  1. adroid app权限实现方式
  2. Android中的进程生命周期
  3. Android动态权限管理:Android Runtime Permission.
  4. Android跨进程bindService与callback
  5. Android权限安全(5)组件的android:exported属性
  6. Android 中自定义权限

随机推荐

  1. 从零开始学android:Android事件处理—监
  2. Android(安卓)怎么样调用HAL的
  3. android 自定义下拉刷新上拉加载控件(Swip
  4. Android代码替代枚举的正确之道
  5. Android(安卓)API Guides---Contacts Pro
  6. android studio远程仓库依赖
  7. android Fragment 与 Fragment 之间传参(
  8. 消息处理机制之消息循环
  9. Android强制下线功能
  10. Android(安卓)TestView获取每一行文字的