漏洞之-ADB

转自:http://hi.baidu.com/tomken_zhang/blog/item/bd170aa9cbd0a2e61f17a207.html


ADB 是 Android 手机中的一个调试服务

他是由 ROOT 程序派生的,

看 adb.c 中有一样一段代码


    property_get("ro.kernel.qemu", value, "");

    if (strcmp(value, "1") != 0) {

        property_get("ro.secure", value, "");

        if (strcmp(value, "1") == 0) {

            // don't run as root if ro.secure is set...

            secure = 1;

 

            // ... except we allow running as root in userdebug builds if the 

            // service.adb.root property has been set by the "adb root" command

            property_get("ro.debuggable", value, "");

            if (strcmp(value, "1") == 0) {

                property_get("service.adb.root", value, "");

                if (strcmp(value, "1") == 0) {

                    secure = 0;

                }

            }

        }

    }

 

 

只要让 secure 不等于1,就是以 root 运行,否则就是以 shell 运行

secure 默认值是为 0 的,看上面代码,

property_get 是 Android 中属性服务,用的是共享内存,因为在这里没有加上合适的判断,可以让这片内存设定不不可读,按上面的代码逻辑,ADB 也就成 ROOT 用户了。

 

如何设定,参见 psneuter.c 中,是这样做的,

查找环境变量 ANDROID_PROPERTY_WORKSPACE,这里记录的是共享内存的句柄,及内存大小

调用了一个 ioctl 命令 ioctl(fd, ASHMEM_SET_PROT_MASK, 0),会导致这个共享内存不可读,具体未研究!

 

看来用 ADB 来获取 ROOT 还是有不少办法的!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值