V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hyln9
V2EX  ›  Android

搞了一个基于 dirtycow 的 Android 的 root 工具

  •  2
     
  •   hyln9 · 2017-01-21 05:18:34 +08:00 · 16130 次点击
    这是一个创建于 2624 天前的主题,其中的信息可能已经有所发展或是发生改变。
    打个广告,这个带 SELinux 的 bypass ,大家可以帮忙测试一下吗?非常感谢~
    地址: https://github.com/hyln9/VIKIROOT
    67 条回复    2022-04-12 10:43:02 +08:00
    sxd
        1
    sxd  
       2017-01-21 08:47:12 +08:00   ❤️ 2
    我没救了 第一眼就断句错误
    KNOX
        2
    KNOX  
       2017-01-21 08:48:49 +08:00   ❤️ 1
    @sxd 搞了个基是吧
    imn1
        3
    imn1  
       2017-01-21 09:03:27 +08:00   ❤️ 1
    @KNOX
    不对,是——
    干 dirtycow 的 Android 的 root 工具
    2333
    leafleave
        4
    leafleave  
       2017-01-21 09:08:40 +08:00 via Android   ❤️ 1
    支持支持
    Phant0m
        5
    Phant0m  
       2017-01-21 09:37:09 +08:00 via iPhone   ❤️ 1
    搞了一个基
    ragnaroks
        6
    ragnaroks  
       2017-01-21 09:48:12 +08:00   ❤️ 1
    搞了一个基+1,而且脑海中自然浮现 van...
    postlive
        7
    postlive  
       2017-01-21 09:53:12 +08:00 via Android   ❤️ 1
    楼主 有编译好的吗 我测试一下
    [email protected] 谢谢了
    hyln9
        8
    hyln9  
    OP
       2017-01-21 10:07:51 +08:00
    @postlive github 的 release 里面有编译好的版本。
    这个 build 需要在原生的 aarch64 的 debian 下面,确实麻烦了一点。
    hyln9
        9
    hyln9  
    OP
       2017-01-21 10:14:57 +08:00
    @sxd 555
    FindHao
        10
    FindHao  
       2017-01-21 10:19:15 +08:00   ❤️ 1
    https://github.com/timwr/CVE-2016-5195/issues/9
    追这个 issue 追了好久,不知道后续如何。看下你的思路。
    hyln9
        11
    hyln9  
    OP
       2017-01-21 10:39:19 +08:00
    @FindHao
    那个并不是完整的 root 方案,最后应该还是没有解决 SELinux 的问题。
    我采用了 vDSO 注入 init 进程一个后门(就是那个 payload.s )的手段,绕开了 SELinux 并直接获得 root shell ,没有动文件系统,也就是说原理是完全不同的。
    librae
        12
    librae  
       2017-01-21 11:14:14 +08:00
    没救的 +1
    @sxd
    tewilove
        13
    tewilove  
       2017-01-21 11:24:13 +08:00 via iPhone
    用户态 bypass 个毛线的 selinux 啊,运气好碰到能让你动的机器而已
    hyln9
        14
    hyln9  
    OP
       2017-01-21 11:38:31 +08:00
    @tewilove 我注入了 init 进程,可以 disable selinux ,不然 SuperSU 也就不复存在了。也许"bypass"这个词有歧义,但是在与此相关的项目中均使用这个含义,我也就随了。
    postlive
        15
    postlive  
       2017-01-21 12:00:53 +08:00 via Android
    @hyln9 感谢大神 晚上回家再测试
    langmoe
        16
    langmoe  
       2017-01-21 12:08:54 +08:00
    厉害了,码一个
    postlive
        17
    postlive  
       2017-01-21 16:10:50 +08:00
    小白请教 win10 下用的 adb nc
    是在 / data / local / tmp 下直接运行 ./dirtycows 手机 IP 1234

    是这样吗
    bdbai
        18
    bdbai  
       2017-01-21 17:29:40 +08:00 via iPhone
    感谢楼主,我在天猫魔盒的 云 OS 上跑起来了。只是 reverse shell 要怎么用?
    hyln9
        19
    hyln9  
    OP
       2017-01-21 17:49:56 +08:00
    @postlive 直接 ./exploit port 不用 nc ,我内置了终端,当然也可以./exploit ip port 指定 nc 的地址。不过你最好是 Android 6.0.1 因为别的版本我可能还需要补充一些数据。中间有一步“ wake up ”是指从休眠状态唤醒一下你的手机屏幕,一般这样会触发漏洞。
    postlive
        20
    postlive  
       2017-01-21 17:50:57 +08:00 via Android
    @hyln9 感谢 晚上回家测试
    hyln9
        21
    hyln9  
    OP
       2017-01-21 17:55:11 +08:00
    @bdbai 你已经得到 shell 了吗?就是提示“ enjoy ”。如果是的话,那就是 root shell ,还具有 init 的 context ,然后你想干嘛干嘛咯,比如 remount 分区成 rw 然后手动安装 SuperSU 。不过这些功能还没有去实现自动化。
    bdbai
        22
    bdbai  
       2017-01-21 18:07:28 +08:00 via iPhone
    @hyln9 在 "Waiting for reverse connect shell" 阶段然后要怎么做?
    我试着用 telnet 连 localhost:8080 (之前指定了 8080 )然后这里出现 "enjoy",但两边不管输入什么都只会同时回显。姿势不对?
    hyln9
        23
    hyln9  
    OP
       2017-01-21 18:55:43 +08:00
    @bdbai 有两种可能
    1 、 Waiting for reverse connect shell 的时候你需要让手机做休眠唤醒的操作。
    2 、你的系统已经打了 2016-11-06 的补丁。
    hyln9
        24
    hyln9  
    OP
       2017-01-21 18:57:56 +08:00
    @bdbai
    还有一种可能性,就是 /data/local/tmp/.x 没有删掉。
    另外不要用 telnet 去连接,要等漏洞触发的自动连接。
    Lentin
        25
    Lentin  
       2017-01-21 19:15:36 +08:00
    nexus 5 运行不能……没有编译 arm 的版本?
    1|shell@hammerhead:/ $ /data/local/tmp/exploit 1234
    /system/bin/sh: /data/local/tmp/exploit: not executable: 64-bit ELF file
    Lentin
        26
    Lentin  
       2017-01-21 19:21:14 +08:00
    Lentin
        27
    Lentin  
       2017-01-21 19:25:43 +08:00
    好吧没看到 for 64-bit
    kamen
        28
    kamen  
       2017-01-21 20:15:15 +08:00 via Android
    dirtycow-capable 的具体条件是啥?
    bdbai
        29
    bdbai  
       2017-01-21 20:17:51 +08:00
    @hyln9 休眠唤醒了几次,似乎没有用。我记得去年年底系统更新了一次,有可能修复了 dirtycow 。
    app13
        30
    app13  
       2017-01-21 20:22:32 +08:00
    不知道影不影响三棒的 knox...
    woyaojizhu8
        31
    woyaojizhu8  
       2017-01-21 21:11:05 +08:00
    请问可否与 phh 的 superuser 集成?
    tyeken8
        32
    tyeken8  
       2017-01-21 22:00:53 +08:00
    Xperia X Performance
    Android 6.0.1
    Security Patch Sept. 1 2016
    Kernel version 3.18.20-perf-g776b104-02162-g4156bdb #1 SMP PREEMPT Fri Oct 7 19:01:11 2016 aarch64

    shell@SOV33:/data/local/tmp $ ./exploit 12345

    >>> Reverse shell target: 127.0.0.1:12345

    >>> Exploit process starts.

    >>> Inject: patch 1/2

    >>> Inject: patch 2/2

    >>> Please wake up you phone now.

    >>> Waiting for reverse connect shell.

    然后就卡住了
    请问可能的原因是什么,有什么解决方法?
    (记得我之前用另外的 exploit 成功拿到了 root shell ,但是没有 bypass selinux
    woyaojizhu8
        33
    woyaojizhu8  
       2017-01-21 22:13:46 +08:00
    在三星 note5 上试了下,运行之后手机无反应,看来是已经修复这个漏洞了
    woyaojizhu8
        34
    woyaojizhu8  
       2017-01-21 22:14:52 +08:00
    @tyeken8 我也是卡在这里了,这使我以为这个漏洞已经失效了
    postlive
        35
    postlive  
       2017-01-21 22:57:07 +08:00
    Internal error: insufficient place for payload.

    提示这个 什么原因
    woyaojizhu8
        36
    woyaojizhu8  
       2017-01-21 23:05:10 +08:00
    @hyln9 我的华为手机也是卡在 Waiting for reverse connect shell ,它的安卓补丁版本是 9 月的,应该还没修复这个漏洞;多次熄屏再唤醒也无效,这会是什么原因 ?
    tyeken8
        37
    tyeken8  
       2017-01-21 23:20:27 +08:00
    @postlive 重启手机试试
    postlive
        38
    postlive  
       2017-01-21 23:57:32 +08:00
    在 ADB 下执行 ./dirtycows 1234 之后就卡在 >>> Waiting for reverse connect shell. 这不动 超过 5 分钟没反应 屏幕设置的是长亮 没有锁屏

    重新打开一个 Telnet 连接 手机 IP 1234 之后 就出现>>> Enjoy! 然后按什么都是没反应 没提示的状态

    hyln9
        39
    hyln9  
    OP
       2017-01-22 03:47:06 +08:00
    @postlive
    ” Internal error: insufficient place for payload. “是因为没有成功触发所以没有清除掉后门,目前我还没有处理这个情况,你只好重启来解决这个问题了。
    另外,特别需要的那一步不是使手机保持唤醒,而是要有唤醒的动作,也即从休眠状态到唤醒的一下。
    我正在研究 Android 的源码寻找别的触发机会。
    hyln9
        40
    hyln9  
    OP
       2017-01-22 03:55:12 +08:00
    @postlive 还有就是 /data/local/tmp/.x 必须删除(这是隐藏文件要 ls -A 看得到)
    hyln9
        41
    hyln9  
    OP
       2017-01-22 03:57:19 +08:00
    @tyeken8 请问你多次熄屏再唤醒了吗?
    hyln9
        42
    hyln9  
    OP
       2017-01-22 05:02:34 +08:00
    @tyeken8
    首先你可以尝试一下我发现的新的触发手段:打开系统自带的闹钟 /时钟 APP
    其次请检查 /data/local/tmp/.x 是否存在,有则删之(注意是个隐藏文件),保证在“ Waiting for reverse connect shell.”时那个文件是不存在的。
    最后由于我现在忽略的注入后的检查,因此有可能并没有注入成功,这个就比较悲剧了,我打算加上 log ,方便大家调试。
    我测试过的两台手机全是国产的,分别是乐 max2 和中兴 blade a2 。
    hyln9
        43
    hyln9  
    OP
       2017-01-22 05:04:38 +08:00
    @woyaojizhu8 这是由于漏洞没有触发或者根本没有注入成功,对于前者,我上面有一些补充,对于后者,我之后会加入日志方便调试。
    hyln9
        44
    hyln9  
    OP
       2017-01-22 06:14:03 +08:00   ❤️ 1
    @woyaojizhu8 @tyeken8 @postlive @bdbai
    十分抱歉,刚刚 v0.1.1 修复了一个 bug 有可能会导致你们的问题出现。
    SuperFashi
        45
    SuperFashi  
       2017-01-22 10:55:52 +08:00
    果然不行了,看了眼内核版本是 Dec 19 的。
    tyeken8
        46
    tyeken8  
       2017-01-22 15:11:13 +08:00
    @hyln9 Sry, still no luck.

    另外那个大括号笑死了((
    makendk
        47
    makendk  
       2017-01-22 15:58:06 +08:00
    不行啊,卡到 >>> Waiting for reverse connect shell. 这里没反应
    严格按照你说的步骤操作的,几种触发方式都试过了, V0.1.1 版本
    bdbai
        48
    bdbai  
       2017-01-22 16:02:21 +08:00 via Android   ❤️ 1
    @hyln9 又试了一下,休眠唤醒多次并没有成功,电视盒子上也没有自带闹钟应用 :(
    总之很感谢你,请收下铜币。
    hyln9
        49
    hyln9  
    OP
       2017-01-22 21:09:34 +08:00
    @kamen 2016-11-06 安全补丁之前
    hyln9
        50
    hyln9  
    OP
       2017-01-22 21:15:11 +08:00
    @bdbai
    @tyeken8
    @makendk

    我赶紧补足了一些 debug 功能,如果可以的话,请下载 dbg 版本,将运行之后生成的“ vdso_orig.so ”和“ vdso_patched.so ”发送至我的邮箱: hyln9$live.cn ($换成 @),谢谢!

    其中不包含任何个人信息,只包含 kernel 的一部分纯代码的 dump 。
    hyln9
        51
    hyln9  
    OP
       2017-01-22 21:17:04 +08:00
    @bdbai
    @tyeken8
    @makendk

    另外明早要坐火车,可能会无法及时回复。
    kamen
        52
    kamen  
       2017-01-22 21:56:51 +08:00 via Android
    @hyln9 谢谢
    makendk
        53
    makendk  
       2017-01-22 22:37:08 +08:00
    生成的 vdso_orig.sovdso_patched.so 在哪
    /data/local/tmp/目录下看不到 DBG 版本的
    hyln9
        54
    hyln9  
    OP
       2017-01-22 22:43:34 +08:00
    @makendk github 上我在 v0.1.1 里面加了一个 dbg 版本。
    makendk
        55
    makendk  
       2017-01-22 22:45:14 +08:00
    就是 dbg 版的 看不到.so 文件
    tyeken8
        56
    tyeken8  
       2017-01-22 23:17:54 +08:00
    @hyln9
    $ diff <(hexdump -C vdso_orig.so) <(hexdump -C vdso_patched.so)

    52c52
    < 00000330 1f 00 00 71 04 18 41 7a 81 02 00 54 e2 03 1e aa |...q..Az...T....|
    ---
    > 00000330 f0 03 1e aa ea 02 00 94 81 02 00 54 e2 03 1e aa |...........T....|
    171a172,190
    > 00000ed0 00 00 00 00 00 00 00 00 00 00 00 00 e0 07 bf a9 |................|
    > 00000ee0 c8 15 80 d2 01 00 00 d4 a0 06 00 35 88 15 80 d2 |...........5....|
    > 00000ef0 01 00 00 d4 1f 04 00 71 21 06 00 54 00 00 80 52 |.......q!..T...R|
    > 00000f00 a1 06 00 10 02 18 80 52 03 38 80 52 08 07 80 d2 |.......R.8.R....|
    > 00000f10 01 00 00 d4 1f 04 40 b1 28 05 00 54 20 02 80 d2 |......@.(..T ...|
    > 00000f20 01 00 80 d2 02 00 80 d2 03 00 80 d2 04 00 80 d2 |................|
    > 00000f30 88 1b 80 d2 01 00 00 d4 20 04 00 35 40 00 80 d2 |........ ..5@...|
    > 00000f40 21 00 80 d2 02 00 80 d2 c8 18 80 d2 01 00 00 d4 |!...............|
    > 00000f50 e3 03 00 aa a1 04 00 10 02 02 80 d2 68 19 80 d2 |............h...|
    > 00000f60 01 00 00 d4 60 02 00 35 e0 03 03 aa 02 00 80 d2 |....`..5........|
    > 00000f70 01 00 80 d2 08 03 80 d2 01 00 00 d4 21 00 80 d2 |............!...|
    > 00000f80 08 03 80 d2 01 00 00 d4 41 00 80 d2 08 03 80 d2 |........A.......|
    > 00000f90 01 00 00 d4 e0 02 00 10 02 00 80 d2 e0 03 00 f9 |................|
    > 00000fa0 e2 07 00 f9 e1 03 00 91 a8 1b 80 d2 01 00 00 d4 |................|
    > 00000fb0 00 00 80 d2 a8 0b 80 d2 01 00 00 d4 e0 07 c1 a8 |................|
    > 00000fc0 f1 03 1e aa fe 03 10 aa 1f 00 00 71 04 18 41 7a |...........q..Az|
    > 00000fd0 20 02 1f d6 2f 64 61 74 61 2f 6c 6f 63 61 6c 2f | .../data/local/|
    > 00000fe0 74 6d 70 2f 2e 78 00 00 02 00 04 d2 7f 00 00 01 |tmp/.x..........|
    > 00000ff0 2f 73 79 73 74 65 6d 2f 62 69 6e 2f 73 68 00 00 |/system/bin/sh..|

    (完整 dump 已发到邮箱)
    bdbai
        57
    bdbai  
       2017-01-23 13:30:03 +08:00
    @hyln9 抱歉回复晚了。邮件已发,请查收。
    makendk
        58
    makendk  
       2017-01-24 15:35:18 +08:00
    dump 发到邮箱了
    zke1e
        59
    zke1e  
       2017-01-24 15:54:33 +08:00
    很厉害啊,我也是做 android 安全的,一起交流下。
    Damn
        60
    Damn  
       2017-01-25 04:11:58 +08:00
    Huawei VNS-DL00
    Android 6.0
    Linux localhost 3.10.90-g6a1c5f3 #1 SMP PREEMPT Tue Sep 13 07:02:46 CST 2016 aarch64

    shell@HWVNS-H:/data/local/tmp/exploit 12345

    >>> Reverse shell target: 127.0.0.1:12345

    >>> Exploit process starts.

    >>> Inject: patch 1/2

    >>> Inject: patch 2/2

    >>> Please wake up you phone now.

    >>> Waiting for reverse connect shell.
    postlive
        61
    postlive  
       2017-01-26 10:47:32 +08:00 via Android
    楼主怎么不高新了???
    lq875502530
        62
    lq875502530  
       2017-04-14 17:34:36 +08:00
    怎么用啊我完全不懂
    mayl8822
        63
    mayl8822  
       2017-06-22 10:20:45 +08:00
    楼主在哪个平台上编译的啊, 我用 ndk 编译出现这个
    ./payload.s: Error: unaligned opcodes detected in executable segment
    PaTTeeL
        64
    PaTTeeL  
       2022-04-09 09:25:37 +08:00
    @hyln9 求助楼主,貌似项目已经只读了?下载了 release 中的 0.1.1 版文件,华为荣耀畅玩 5C ,EMUI4.1.1 ,Android6.0 ,安全补丁级别 2016 年 9 月 1 日,内核 3.10.94 ,尝试了不管是反复唤醒手机还是打开系统自带的闹钟或者时钟都无法成功触发,一直卡在 ====TERMINAL====== 上不动,最近翻出旧手机想折腾一下,华为锁了 bootloader ,貌似就你的项目可以 bypass SELinux ,所以想着能不能直接 root 之后拿来抢菜,最近隔离的快断粮了>_<!,如果能搞一下的话感激不尽!
    hyln9
        65
    hyln9  
    OP
       2022-04-09 14:38:53 +08:00
    @PaTTeeL 如果 init 进程 policy 比较严的话,会导致 shell 触发不了,需要附加别的 exploit ,比较麻烦。GitHub 上有几个 Huawei/Honor 的 unlock 项目,可以尝试下。
    PaTTeeL
        66
    PaTTeeL  
       2022-04-12 01:43:53 +08:00
    @hyln9 感谢大神的答复,unlocker 尝试过了,貌似欧洲机器的解锁码才是全数字,国内机器解锁码带字母,枚举的话几百年,这辈子应该是没戏了,还是去某宝找找商家吧。。。

    另外因为家里还多安卓机设备也需要类似的 root 方法,所以还想请教一下新手编译问题,我自己下载 NDK 编译的时候总是报错 Error 127 ,我尝试过了 23b 、14b 和 15c 这三个版本,貌似 dirtycow 相关的项目都是报的 127 错误,能请教一下是啥问题吗?我现在都是找的已编译的二进制文件才能操作。

    部分 make -d 的信息如下:

    GNU Make 4.2.1
    Built for x86_64-pc-linux-gnu
    Copyright (C) 1988-2016 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    Reading makefiles...
    Reading makefile 'Makefile'...
    Updating makefiles....
    Considering target file 'Makefile'.
    Looking for an implicit rule for 'Makefile'.
    Trying pattern rule with stem 'Makefile'.
    Trying implicit prerequisite 'Makefile.o'.
    Trying pattern rule with stem 'Makefile'.
    Trying implicit prerequisite 'Makefile.c'.
    ……
    Looking for a rule with intermediate file 'payload.S'.
    Avoiding implicit rule recursion.
    Trying pattern rule with stem 'payload.S'.
    Trying implicit prerequisite 'payload.S,v'.
    Trying pattern rule with stem 'payload.S'.
    Trying implicit prerequisite 'RCS/payload.S,v'.
    Trying pattern rule with stem 'payload.S'.
    Trying implicit prerequisite 'RCS/payload.S'.
    Trying pattern rule with stem 'payload.S'.
    Trying implicit prerequisite 's.payload.S'.
    Trying pattern rule with stem 'payload.S'.
    Trying implicit prerequisite 'SCCS/s.payload.S'.
    No implicit rule found for 'payload.s'.
    Finished prerequisites of target file 'payload.s'.
    No need to remake target 'payload.s'.
    Finished prerequisites of target file 'payload.o'.
    Must remake target 'payload.o'.
    aarch64-linux-android-as -o payload.o payload.s
    Putting child 0x7ffff3d36320 (payload.o) PID 49 on the chain.
    Live child 0x7ffff3d36320 (payload.o) PID 49
    Reaping losing child 0x7ffff3d36320 PID 49
    Removing child 0x7ffff3d36320 PID 49 from chain.
    hyln9
        67
    hyln9  
    OP
       2022-04-12 10:43:02 +08:00 via iPhone
    @PaTTeeL 额,这个也没看到报错啊?实在不行可以直接执行具体的编译命令,也没几条。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   952 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:49 · PVG 05:49 · LAX 14:49 · JFK 17:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.