Android的内核就是Linux,所以Android获取root其实和Linux获取root权限是一回事儿。

你 想在Linux下获取root权限的时候就是执行sudo或者su,接下来系统会提示你输入root用户的密码,密码正确就获得root权限了。 Android本身就不想让你获得Root权限,大部分手机出厂的时候根本就没有su这个程序。所以你想获得Android的root权限,第一步就是要 把编译好的su文件拷贝到Android手机的/system/bin或者/system/xbin/目录下。我们先假设你可以把su放在bin下,接下 来你可以在Android手机的adb shell或者串口下输入su了。上面说了,执行su,系统会提示你输入root用户密码,但你怎么可能知道密码呢?暴力破解吗?破解root的黑客当然 不会这么做,这就涉及到第二个问题。

一般我们在Linux的console下输入 ls -l 会列出所有文件的权限。

比如:-rwxr-xr-x,用过Linux的人都知道r代表该文件可读,w代表可写,x代表可执行,-就代表没有该权限。第一个rwx代表文件所有者的权限,第二个rwx代表和所有者同组人的权限,第三个rwx代表其他用户对该文件的权限。但下面这个文件就比较特殊。

rws,它的执行权限标志位是一个s,s代表当任何一个用户执行该文件的时候都拥有文件所有者的权限,这文件的所有者是root,简单点说就是不管谁执行这个文件,他执行的时候都是以root身份执行的。那root用户执行任何文件都是不需要密码的。

这个时候如果你把su文件的权限置成-rwsr-xr-x会发生什么?su这个程序本来就是赋予执行者root权限的,但执行的时候又不需要密码,所以执行一下这个文件就自动成root身份了。

问题都清楚了,就是你需要把su拷贝到Android手机上,并且把su权限标志位置成-rwsr-xr-x。能把这个事情搞定你就成功root了一个手机。

大概意思就是两行代码

cp /data/tmp/su /system/bin/ #copy su 到/system/分区

chmod 1775 /system/bin/su #把su置成-rwsr-xr-x

那怎么搞定这个事情呢?Android的system分区本身不可写,只有是root的权限才能改动它,执行不了啊。

一 个办法就是找一个本身已经有root权限的进程来启动我上面的两行代码,那我这两行代码一启动就是root权限,就可以顺利执行了。但是已经有root权 限的进程都是出厂时候就装到手机上的,代码写死了,你没法控制它执行你自己的代码啊。这个时候就需要你找漏洞了,比如用来破解Android2.3 root权限的zergRush漏洞就是利用一个拥有root权限的进程栈溢出漏洞,栈溢出说白了就是这个进程读到了自有内存之外的地址空间,这段内存空 间没分配给它,谁都能写这段内存,那我就可以把自己的两行代码预先写到这里,运行zergRush代码,然后等那个倒霉的进程执行我就行了。

如果各位有一定基础,能看懂我上面讲的,就基本知道原理其实并不难,难点在于找到漏洞。

zergRush的代码在这儿:

revolutionary/zergRush · GitHub

有兴趣的可以看看,网上也有很多分析文章。

另 外iphone的越狱其实和Android的root是一回事儿,都是越权操作。所以越狱的方式也都差不多,也是找IOS自带程序的漏洞,只不过IOS安 全性强一点,所以也比较难找。如果你发现你的iphone的某个自带程序经过一些特定操作会出现系统崩溃重启的现象,并且是可以复现的,那就很有可能可以 用来越狱了。

好像是IOS6出来的时候,由于比较难搞,某个越狱团队就号召大家来找茬,发现的漏洞可以报告给他们用来越狱。说明IOS越狱越来越难。直接体现就是现在越狱需要的时间越来越长。

不过如果你发现漏洞也可以报告给苹果,苹果会根据漏洞严重程度给予一定奖励。我记得看新闻说南非一个家伙靠给苹果找漏洞赚25万美元。发家致富的好路子啊,哈哈。

================================================

谢谢各位支持

关于为什么su一定要放到/system/bin/或者/system/xbin/

首 先,你当然可以把su这个程序copy到/data/分区,但你adb push进去的时候,su有这个程序的所有者肯定不是root,一般是shell什么的(记不清了,应该是和adbd这个进程的所有者一样),这个时候即 使你把它权限置为-rwsr-xr-x,哪你运行它的时候也是shell身份运行的,su会提示你输入密码的。

第二我们root手机的目的是为了运行需要root权限的APP,比如goagent或者什么的。这些APP里代码需要获得root的时候是这么写的:

Process p = Runtime.getRuntime().exec("su");

也就是它们在代码里调用了一下su这个程序,哪可以写成下面这个样子吗?

Process p = Runtime.getRuntime().exec("./data/tmp/su");

我没写过APP,不太清楚,估计是不行的。换句话说你必须把su放到环境变量PATH所有的目录里,APP 才能调用到它。如果你不想放到bin或者xbin下,你就必须给PATH增加一个目录。PATH是root权限才能修改的,你如果能修改PATH,说明你 已经有root权限了,修改PATH就没必要了,还不如直接放到bin下面。

关于sudo

android 的工程里没有sudo这个东西。sudo是为了给普通用户临时分配root权限的,Android里建立了很多用户,比如wifi,shell等等,这些 用户可以访问那个文件,不可以访问那个文件,代码里已经写死了,权限也分配的很分明。它们在运行的过程中不需要临时获得root权限。所以Android 不需要sudo这个程序。

android提权的更多相关文章

  1. android提权漏洞CVE-2010-EASY修复【转】

    本文转载自: http://blog.csdn.net/lhj0711010212/article/details/9351131 android提权漏洞CVE-2010-EASY修复   linux ...

  2. Android提权漏洞CVE-2014-7920&CVE-2014-7921分析

    没羽@阿里移动安全,更多安全类技术干货,请访问阿里聚安全博客 这是Android mediaserver的提权漏洞,利用CVE-2014-7920和CVE-2014-7921实现提权,从0权限提到me ...

  3. Android提权原理

    Android的内核就是Linux,所以Android获取root其实和Linux获取root权限是一回事儿. 你想在Linux下获取root权限的时候就是执行sudo或者su,接下来系统会提示你输入 ...

  4. Android提权漏洞CVE-2014-7920、CVE-2014-7921

  5. Android内核sys_setresuid() Patch提权(CVE-2012-6422)

    让我们的Android ROOT,多一点套路. 一.简单套路 CVE-2012-6422的漏洞利用代码,展示了另一种提权方法.(见附录) 这也是一个mmap驱动接口校验导致映射任意内核地址的洞.将内核 ...

  6. 后渗透提权辅助工具BeRoot详解

    0x00 工具介绍 前言 BeRoot是一个后期开发工具,用于检查常见的Windows的配置错误,以方便找到提高我们提权的方法.其二进制编译地址为: https://github.com/Alessa ...

  7. 9.CVE-2016-5195(脏牛)内核提权漏洞分析

    漏洞描述: 漏洞编号:CVE-2016-5195 漏洞名称:脏牛(Dirty COW) 漏洞危害:低权限用户利用该漏洞技术可以在全版本Linux系统上实现本地提权 影响范围:Linux内核>=2 ...

  8. Day 10 用户的提权,用户组的创建删除

    1.如何为用户设定密码,又如何修改密码? 2.用户的创建流程? [扩展了解] 3.用户组如何管理? 4.普通用户无权限怎么办? 切换身份 or 提权? su 切换用户 sudo 提权   5.为用户添 ...

  9. Linux本地内核提权漏洞复现(CVE-2019-13272)

    Linux本地内核提权漏洞复现(CVE-2019-13272) 一.漏洞描述 当调用PTRACE_TRACEME时,ptrace_link函数将获得对父进程凭据的RCU引用,然后将该指针指向get_c ...

随机推荐

  1. VSCode搭建node + typescript开发环境

    我们一起来喜欢TypeScript 现在写js不用TypeScript,伦家可能会觉得你是外星人. 是的,TypeScript很大程度增强了代码的可读性,可跟踪性,可维护性和减少了bug. 那么没有理 ...

  2. centos下安装必要组件(相当于apt-get install install build-essential)

    在centos下执行 : sudo yum groupinstall 'Development Tools'

  3. 转-spring boot web相关配置

    spring boot web相关配置 80436 spring boot集成了servlet容器,当我们在pom文件中增加spring-boot-starter-web的maven依赖时,不做任何w ...

  4. 关于jdbc的面试题

    什么是JDBC,在什么时候会用到它? JDBC的全称是Java DataBase Connection,也就是Java数据库连接,我们可以用它来操作关系型数据库.JDBC接口及相关类在java.sql ...

  5. 使用blessed 开发丰富的cli 应用

    blessed 是一个不错的npm 包,可以帮助我们开发出带有丰富ui界面的cli 应用,类似的有subzero 测试环境准备 项目结构 ├── README.md ├── app.js ├── my ...

  6. VdcEye manager

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011652271/article/details/24878335 VdcEye manager ...

  7. 详解SID之终结篇

    今天测试某款监控软件时遇到一个比较棘手的问题,这款软件需要在被监控端安装客户端程序.成功在第一个节点安装好客户端后问题出现了,在其他节点安装时报错无法安装.软件报的错误信息无从下手且系统日志也看不出什 ...

  8. 为什么有时候 php 没有写闭合标签结束符?

    找了一些资料,大家对PHP闭合标签的总结如下: 好处:如果这个是一个被别人包含的程序,没有这个结束符,可以减少很多很多问题,比如说:header, setcookie, session_start这些 ...

  9. debian之apt源

    美国的 deb http://ftp.us.debian.org/debian stable main contrib non-freedeb-src http://ftp.us.debian.org ...

  10. C/C++基础----顺序容器

    通常没有特别的原因,用vector. list和forward_list有额外的内存开销,如果有很多小元素,不要使用. 如果只在读取输入时需要在容器中间位置插入元素,随后需要随机访问. 1确定是否真正 ...