当前位置:   article > 正文

【移动安全】对webview漏洞的一些分析_webview不安全

webview不安全

这次分析的app如下:

打开发现该app发现需要登录界面:

拖进jadx看一下,先来看一下AndroidManifest.xml文件

发现有两个类是导出,再来分析这两个类

这个RegistrationWebView类利用webview.loadUrl进行加载网页

java

public class RegistrationWebView extends AppCompatActivity {
    /* JADX INFO: Access modifiers changed from: protected */
    @Override // androidx.appcompat.app.AppCompatActivity, androidx.fragment.app.FragmentActivity, androidx.activity.ComponentActivity, androidx.core.app.ComponentActivity, android.app.Activity
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(C0816R.layout.activity_registration_web_view);
        setTitle("Registration page");
        loadWebView();
    }

    private void loadWebView() {
        WebView webView = (WebView) findViewById(C0816R.C0819id.webview);
        webView.setWebChromeClient(new WebChromeClient() { // from class: com.tmh.vulnwebview.RegistrationWebView.1
            @Override // android.webkit.WebChromeClient
            public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
                Log.d("MyApplication", consoleMessage.message() + " -- From line " + consoleMessage.lineNumber() + " of " + consoleMessage.sourceId());
                return true;
            }
        });
        webView.setWebViewClient(new WebViewClient());
        webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
        webView.getSettings().setJavaScriptEnabled(true);
        if (getIntent().getExtras().getBoolean("is_reg", false)) {      //根据传入的Intent中的参数,加载不同的URL。如果"is_reg"参数为true,则加载本地资源"registration.html",否则加载从Intent中传入的URL。
            webView.loadUrl("file:///android_asset/registration.html");
        } else {
            webView.loadUrl(getIntent().getStringExtra("reg_url"));    //可以恶意构造url
        }
    }
}

因为这个类是导出的,所以可以根据intent,恶意构造reg_url,进行网页的加载,这里可以使用adb命令进行intent的传递

adb shell am start -n com.tmh.vulnwebview/.RegistrationWebView --es reg_url https://www.baidu.com

adb shell am start -n命令用于通过ADB(Android Debug Bridge)启动一个应用程序组件,如Activity、Service、BroadcastReceiver或ContentProvider。该命令需要提供要启动的组件的完整名称。

再看看app,可以发现页面已经被加载:

我们也可以发现,因为有了webView.getSettings().setJavaScriptEnabled(true),所以我们动态的加载js文件,我们准备一段html文件

html 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hello Page</title>
</head>
<body>

<script>
    alert("hello");
</script>

</body>
</html>

然后通过 adb shell am start -n com.tmh.vulnwebview/.RegistrationWebView --es reg_url "file:///storage/emulated/0/MT2/hello.html" 进行加载js代码,这里可以改成恶意的js代码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/412877?site
推荐阅读
相关标签