zoukankan      html  css  js  c++  java
  • Android root 原理

    linux和类Unix系统的最初设计都是针对多用户的操作系统,对于用户权限的管理很非常严格的,而root用户(超级用户)就是整个系统的唯一管理员,拥有等同于操作系统的所有权限。所以一旦获取到root权限,就可以对整个系统进行访问和修改。而在Android下获取root权限之后就可以自己定制系统,卸载一些预装软件,完全掌控自己的设备。

    0x01 setUID

    在讨论root的原理之前,有一个非常重要的概念,就是文件的setUID权限。linux下普通的文件权限大家都很清楚,可读,可写,可执行,下图很清楚的一个普通的可执行文件root的权限,r(可读),w(可写),x(可执行)。
    Android root 原理Android root 原理

    但是,要考虑一种情况,比如说,一个用户是有权修改自己的密码的,但是记录密码的文件/etc/shadow只有root用户才是可写的,那普通用户如何才能修改自己的密码呢?这一切都要归功于setUID的设置,修改密码时使用的命令passwd对应的二进制程序是/usr/bin/passwd
    Android root 原理Android root 原理

    可以看到passwd的二进制文件的权限位中不仅仅是rwx了,多了一个s权限,而这个s权限就是我们的主角,setUID权限。

    由于passwd有setUID权限,所以linux系统可以临时把这个文件的所有者(root)身份角色赋给普通用户,以达到让普通用户可以修改自己密码的目的。

    那如何设置setUID权限呢?

    平常使用的普通文件权限位是由3、3、3共9位的二进制数字组成 ---|---|---,分别对应文件所有者,文件所有者同一用户组权限和其他用户权限。最开始的名为root的可执行文件的权限为rwxrwxr-x,所对应的二进制位就是111 111 101 ,然后每三位对应421换算成16进制,就是775。而新增的setUID权限是在前面新增了三位,分别表示setGID、setUID、stick bit权限,而我们现在只关心setUID权限。因此加上setUID权限之后,文件的权限应该由4位数字组成,例如之前的root文件加上setUID权限就是4755。而修改密码的passwd文件对应的权限位就是4755。

    可以通过一个小例子来直观的感受一下,平常使用的cat命令对应的二进制文件是没有setUID权限的:

    Android root 原理Android root 原理

    可以在普通用户下尝试使用cat去读取/etc/shadow文件的内容:

    Android root 原理Android root 原理

    提示权限不够,再给cat加上setUID权限之后再去读取/etc/shadow的内容:

    Android root 原理Android root 原理

    是可以读出来的,但是/etc/shadow中的内容都经过加密处理。

    0x02 Linux 下的root

    平常使用的linux发行版,需要切换到root用户时,直接使用su命令,然后输入su用户的密码就可以切换到root用户了。
    Android root 原理Android root 原理

    Android root 原理Android root 原理

    0x03 Android 的root

    但是在未root的Android设备上是没有su的二进制文件,直接执行su命令会提示"su not found"。
    Android root 原理Android root 原理

    再进入已经root过的设备上查看,平常在adb shell中用的命令对应的二进制文件都是在/system/bin目录下,是存在su文件的:
    Android root 原理Android root 原理

    可以看到这里的su只是一个指向/system/xbin/的一个链接。
    Android root 原理Android root 原理

    可以看到这里的su是有setUID权限位的。

    而要在系统分区 /system/xbin 中添加文件本身就是需要root权限,而且设置su文件的所有者为root用户也是需要root权限的,设置setUID权限同样也需要root权限。

    这就进入到了一个死循环当中,要利用su,首先要有root权限。因此这时就需要利用到Android存在的漏洞,Android系统本身存在着很多以root权限运行的原生进程,而这些root进程中如果存在可以利用的漏洞,就可以利用进程的root身份:

    1. 拷贝su文件到/system/xbin系统分区;
    2. 设置su文件所有者为root用户;
    3. 设置su文件的setUID权限,便于自己的进程执行su命令获取root权限。
  • 相关阅读:
    Sample XPS Documents Download
    触发器中的inserted表和deleted表
    Using freewheel.labs.autodesk.com to auto generate preview images of DWF files on your web site
    解除SQL对组件"Ad Hoc Distributed Queries"的"STATEMENT'OpenRowset OpenDatasource"的访问
    读写xps
    XPS文件,在Windows XP下的打开查看阅读和打印方法。
    Learning to Reference Inserted and Deleted Tables
    Get value from updated, inserted and deleted
    Reinstall Microsoft Helper Viewer
    如何查找文件的IFilter
  • 原文地址:https://www.cnblogs.com/linux130/p/5624655.html
Copyright © 2011-2022 走看看