当前位置: 首页 > news >正文

【APP渗透测试】 Android APP渗透测试技术实施以及工具使用(客户端服务端)

文章目录

  • 前言
  • 一、安全威胁分析
  • 二、主要风险项
  • 三、Android测试思维导图
  • 四、反编译工具
  • 五、Android客户端
    • 漏洞一、Jnaus漏洞
    • 漏洞二、数据备份配置风险漏洞
    • 漏洞三、Activity组件泄露漏洞
    • 漏洞四、BroadcastReceiver组件泄露漏洞
    • 漏洞五、允许模拟器Root环境登录漏洞
    • 漏洞六、未识别代理环境漏洞
    • 漏洞七、未使用随机布局键盘漏洞
    • 漏洞八、键盘密码截屏漏洞
    • 漏洞九、数字签名检测
    • 漏洞十、反编译保护


前言

本篇文章针对Android APP渗透测试相关技术实施以及工具的使用,文中难免会出现其他问题,麻烦各位的大佬及时指出,共同学习,再此感谢!!!


一、安全威胁分析

安全威胁从三个不同环节进行划分,主要分为客户端威胁 数据传输端威胁服务端的威胁。
在这里插入图片描述

二、主要风险项

在这里插入图片描述

三、Android测试思维导图

在这里插入图片描述

四、反编译工具

有两种反编译方式:dex2jar apktool,两个工具反编译的效果是不一样的,dex2jar反编译出java源代码,apktool反编译出来的是java汇编代码。dex2jar主要是用来把之前zip解压出来的classed.dex转成jar包的jd-gui主要是用来打开Jar包的。

五、Android客户端

漏洞一、Jnaus漏洞

测试目标:APP应用包

格式:*.apk

测试工具下载https://github.com/bihe0832/Android-GetAPKInfo

测试步骤

使用工具包内GetAPKInfo.jar 命令:java -jar GetAPKInfo.jar *.apk
在这里插入图片描述
漏洞危害

攻击者可利用Janus漏洞将一个恶意的DEX文件与原始APK文件进行拼接,从而不影响APK文件的签名。替代原有正常的App做下载、更新,用户端安装了恶意仿冒的App后,不仅会泄露个人账号、密码、照片、文件等隐私信息,手机更可能被植入木马病毒,进而或导致手机被ROOT甚至被远程操控。

安全建议

1、将APP的APK升级到最新的Signature scheme V2签名机制;
2、开发者及时校验App APK文件的开始字节,以确保App未被篡改。

漏洞二、数据备份配置风险漏洞

测试目标:APP应用包

格式:*.apk

测试工具下载https://github.com/MobSF/Mobile-Security-Framework-MobSF

测试步骤

本地安装该工具(安装步骤忽略),KALI中启动该工具并访问http://X.X.X.X:8000
打开网址,上传APK安装包,查看Android配置文件(AndroidMainifest.xml)
在这里插入图片描述
在这里插入图片描述
或直接将APK安装包后缀改为.zip,然后使用工具AMLPrinter2.jar输出.txt。

命令java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt

使用NotePad++ 打开即可看到配置文件信息

在这里插入图片描述

漏洞危害

第三方应用开发者需要在APP的AndroidManifest.xml文件中配置 allowBackup 标志(默认为 true )来设置应用数据是否能能够被备份或恢复。当这个标志被设置为 true 时应用程序数据可以在手机未获取 ROOT 的情况下通过adb调试工具来备份和恢复。在接触用户手机的情况下攻击者可以在启动手机USB调试功能来窃取那些能够受到AllowBackup漏洞影响的APP数据,造成用户敏感信息泄露甚至财产损失。

安全建议

AndroidManifest.xml文件中Application节点的android:allowBackup属性设置为 false 或是 删除该属性。

漏洞三、Activity组件泄露漏洞

测试目标:APP应用包

格式:*.apk

测试工具下载https://github.com/MobSF/Mobile-Security-Framework-MobSF AMLPrinter2.jar

测试步骤

通过AndroidManifest.xml文件查找关键字符串

com.******.******.icbcPay.PayResultHandler
com.******.******.wxapi.WXPayEntryActivity
com.******.******.alipay.AliPayEntryActivity
com.******.******.PushMessagesActivity
com.******.******.wxapi.WXEntryActivity
com.******.payment.thirdpay.channel.wx.WXEntryActivity
com.******.******.wxapi.WXPayEntryActivity
com.******.payment.thirdpay.channel.qq.QQPayEntryActivity

在这里插入图片描述
漏洞危害

导出的Activity组件能被第三方APP任意调用,攻击者可构造恶意payload进行攻击,导致敏感信息泄露,并可能受到绕过认证、恶意代码注入等攻击风险。

安全建议

1、如果Activity组件不需要与其它系统共享数据或交互,应在AndroidManifest.xml 配置文件中将该Activity组件的android:exported 属性值设置为false。如果Activity组件需要与其它APP共享数据或交互,应对Activity组件进行权限控制和参数校验。
2、在界面切换时,检测下一界面的Activity类,如不是被测系统内的界面,则提示并退出。

漏洞四、BroadcastReceiver组件泄露漏洞

测试目标:APP应用包

格式:*.apk

测试工具下载https://github.com/MobSF/Mobile-Security-Framework-MobSF AMLPrinter2.jar

测试步骤

漏洞成因:com.gotop.yjdtzt.MyBroadCastReceiver没有被保护
在这里插入图片描述
漏洞危害

导出的Broadcast Receiver组件能被第三方APP任意调用,攻击者可构造恶意payload进行攻击,攻击者可构造恶意payload进行攻击,造成用户敏感信息泄露、拒绝服务攻击等风险。

安全建议

如果组件不需要与其它系统共享数据或交互,应在AndroidManifest.xml配置文件中将该receiver的android:exported属性值设置为false。如果该receiver需要与其它APP共享数据或交互,应对receiver进行权限控制和参数校验。

漏洞五、允许模拟器Root环境登录漏洞

tips:该测试环境需要使用模拟器,可支持Root模式模块的

测试目标:APP应用包

格式:*.apk

测试工具:逍遥模拟器

测试步骤:

打开工具配置,将模式改为Root模式运行,点击启动应用
在这里插入图片描述
可以看出启动应用并未提示有关警告类消息,存在问题。

漏洞危害:允许root设备/模拟器登录会存在不安全的风险。

安全建议:检测到root或模拟器设备,提醒当前环境存在风险。

漏洞六、未识别代理环境漏洞

测试目标:APP应用包

格式:*.apk

测试工具:逍遥模拟器

漏洞成因:当设置网络代理后,APP未检测到代理,攻击者会通过客户端所操作产生的数据流量进行劫持,获取敏感信息。

测试步骤:测试机中设置代理,并启动APP应用
在这里插入图片描述
启动应用过程中,并未显示警示类消息,该行为存在问题。

漏洞危害:APP未检测网络代理时,不安全的网络代理会劫持通讯数据,存在中间人劫持的风险。

安全建议:检测当前网络环境,当设置代理时提醒用户。

漏洞七、未使用随机布局键盘漏洞

测试目标:APP应用包

格式:*.apk

测试工具:逍遥模拟器

测试步骤:打开应用,点击输入账号密码,可从底部弹出输入法
在这里插入图片描述
漏洞危害:测试客户端程序在登录密码等输入框未设置随机软键盘,容易被木马根据点位获取登录密码。

安全建议:自定义随机布局键盘。

漏洞八、键盘密码截屏漏洞

测试目标:APP应用包

格式:*.apk

测试工具:逍遥模拟器

测试步骤:打开应用,在输入账号密码时进行屏幕截图。
在这里插入图片描述
输入密码时,可通过按键回应截屏得到密码等信息。

漏洞危害:通过连续截图,可以捕捉到用户密码输入框的密码。

安全建议:建议以震动方式代替回显效果给用户反馈输入信息。

漏洞九、数字签名检测

测试目标:APP应用包

格式:*.apk

测试工具jarsigner.exe

测试命令:jarsigner.exe -verify -verbose -certs *.apk

当输出的结果为jar已验证时,表示签名正常
在这里插入图片描述
检测签名的 CN 及其他字段是否正确标识客户端程序的来源和发布者身份
在这里插入图片描述
只有在使用直接客户的证书签名时,才认为安全。 Debug 证书、第三方(如开发方)证书等等均认为风险。

漏洞十、反编译保护

问题描述:APP源代码对于一个公司是非常重要的信息资源,对APP的保护也尤为重要,APP的反编译会造成源代码被恶意者读取,以及APP的逻辑设计。

反编译方法:我们一般想要反编译一个APK,无非就是要想获得三样东西:图片资源XML资源代码资源

图片资源获取:首先准备一个APK(.apk文件),我们将其后缀改为.zip,打开zip文件在res目录下,我们就可以获取到我们需要的图片了。

XML资源获取: 想要获取.xml文件,在我们打开zip压缩包里面可以看到存在一个.xml的文件,但是呢!直接打开的话会显示乱码或者空白,那我们该如何获取这个XML资源呢,这时就需要借助一个工具AXMLPrinter2.jar,将这个工具放在与XML同一目录下使用cmd命令执行java -jar AXMLPrinter2.jar xxxxx.xml>xxxxx.txt,这个时候你就能获取到xml里的东西啦。

代码资源获取:这个就比较重要了,但这里存在一个点,这里能够正确反编译出来的只有未加密或者没有混淆的代码,如果想要反编译一些加密或者混淆后代码,我们就需要其他途径解决了。首先需要准备两样东西:dex2jar.rarjd-gui.zip这两个工具。dex2jar主要是用来把之前zip解压出来的classed.dex转成jar包的,jd-gui主要是用来打开jar包的。

Apktool用法:使用命令 java -jar apktool.jar d -f *.apk -o 文件夹名
在这里插入图片描述
dex2jar用法:把dex2jar解压后,然后将之前的zip的classes.dex放到dex2jar目录下,这里必须要与dex2jar.bat是同级目录。然后又要用到cmd。Cd到dex2jar目录下,打命令行 dex2jar.bat classes.dex,然后你的目录里会多一个jar包,多了一个classes-dex2jar.jar文件,再用jd-gui把jar打开,最终apk的代码就被剥离出来了。

检测方法:通过反编译工具看是否能够对APP进行反编译。

工具下载:
https://bitbucket.org/iBotPeaches/apktool/downloads/ -> apktool (资源文件获取)
https://github.com/pxb1988/dex2jar/releases -> dex2jar (源码文件获取)
http://java-decompiler.github.io/ -> jd-gui (源码查看)

工具介绍:
Apktool 作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看。
dex2jar 作用:将apk反编译成java源码(classes.dex 转化成jar文件)。
Jd-gui 作用:查看APK中classes.dex转化为jar文件,即源码文件。

在这里插入图片描述
使用jd-dui将jar包打开
在这里插入图片描述
可以看到上图中被混淆过的class反编译后的效果图,(类文件名称以及里面的方法名称都会以a,b,c….之类的样式命名,较为安全,不会被轻易获取源码数据)。

在这里插入图片描述
修复方法:采用加密和混淆技术达到反编译保护。混淆技术作用是增加了用户反编译后阅读代码的难度。

未完,待续!!!

相关文章:

【APP渗透测试】 Android APP渗透测试技术实施以及工具使用(客户端服务端)

文章目录前言一、安全威胁分析二、主要风险项三、Android测试思维导图四、反编译工具五、Android客户端漏洞一、Jnaus漏洞漏洞二、数据备份配置风险漏洞漏洞三、Activity组件泄露漏洞漏洞四、BroadcastReceiver组件泄露漏洞漏洞五、允许模拟器Root环境登录漏洞漏洞六、未识别代…...

字符串匹配 - Overview

字符串匹配(String Matchiing)也称字符串搜索(String Searching)是字符串算法中重要的一种,是指从一个大字符串或文本中找到模式串出现的位置。字符串匹配概念字符串匹配问题的形式定义:文本(Text)是一个长度为 n 的数组 T[1..n]&…...

【IP课堂】Ip地址如何进行精准定位?

通过Ip地址定位,是目前网络上最常见的定位方式。当然,也是最简单的定位方式。其实方法大多都是雷同的,通过Ip定位,就目前网上公开的技术。如通过搜索关键词“定位,定位查询,Ip定位”等,只能查询…...

MySQL 临时表相关参数说明区别

MySQL 临时表参数innodb_temp_tablespaces_dir、innodb_temp_data_file_path、innodb_tmpdir、tmpdir 区分 解决方案 innodb_tmpdir: alter table生成中间表文件,innodb_tmpdir有指定效路径,优选选择innodb_tmpdir,没有则选择tm…...

第二章 变量和基本类型

1.string类型数据的另一种初始化方式 语法: string 变量名 (" 初始化内容 "); 2.C中的列表初始化 语法: 数据类型 变量名 { 变量初始化的值 } ; 数据类型 变量名 { 变量初始化的值 } ; 例: 3.引用常量 常量引…...

【Python】循环语句(while,for)、运算符、字符串格式化

一、while循环Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为:while 判断条件(condition):执行语句(statements)执行语句可以是单个语句或语句…...

利用设计模式、反射写代码

软件工程师和码农最大的区别就是平时写代码时习惯问题,码农很喜欢写重复代码而软件工程师会利用各种技巧去干掉重复的冗余代码。 业务同学抱怨业务开发没有技术含量,用不到设计模式、Java 高级特性、OOP,平时写代码都在堆 CRUD,个…...

Spring Cloud Alibaba--seata微服务详解之分布式事务(三)

上篇讲述gateway的部署和使用,gateway统一管理和转发了HTTP请求,在互联网中大型项目一定存在复杂的业务关系,尤其在商城类软件中如淘宝、PDD等商城,尤其在秒杀场景中,并发量可以到达千万级别,此时数据库就会…...

[USACO2023-JAN-Bronze] T3 Moo Operations 题解

一、题目描述因为Bessie觉得玩平时经常玩的只包含C O和W的字符串无聊了,Farmer John 给了她Q个新的字符串(1≤Q≤100),这Q个字符串只包含M和O。很明显,只包含M和O的单词里Bessie最喜欢的是”MOO”,所以她希望按照下面两个规则&…...

OKCC呼叫中心支持哪些接入方式?

使用OKCC系统开展呼叫中心业务,要将电话打通,需要什么样的设备接入到OKCC系统呢? 目前实际广泛使用的接入方式,既有硬件网关接入方式,也有软件接入方式,在生产实践中,我们须根据实际的需求及使…...

如何让手机共享电脑代理网络的WIFI热点

参考: 手机共享电脑的proxy网络 把电脑的网络代理给安卓设备如何将电脑的代理网络以WIFI热点的方式共享 电脑端设置代理: 打开电脑上的 proxy软件并设置其端口号(例如:7890),且允许局域网(例如…...

渲染有问题?怎么办?6种方法让你渲染无忧

简单点,解决问题的方式简单点。 日常工作中我们总会遇到各种各样的问题,比如渲不出图,速度太慢或效率太低,各种噪点和黑图等等,烦不胜烦,今天我就针对6个常见的问题给大家说下方法,一家之言仅供…...

中国人寿业务稳定性保障:“1+1+N” 落地生产全链路压测

引言 保险业务的数字化转型正如火如荼地进行,产品线上化、投保线上化、承保线上化、核保线上化等业务转型,导致系统的应用范围不断扩大,用户的高频访问也正在成为常态。同时,系统复杂性也呈指数上升,这些因素都增加了…...

2/17考试总结

时间安排 7:40–7:50 读题,T1 貌似是签到,T2,T4 DP,T3看起来很不可做。 7:50–8:00 T1,差分一下然后模拟就行了。 8:00–10:20 T2,注意到值域很小,可以考虑状压,想到一个状压状态数较少的 dp ,然后挂得彻底。发现有一…...

零信任-360连接云介绍(9)

​360零信任介绍 360零信任又称360连接云安全访问平台(下文简称为:360连接云),360连接云,是360基于零信任安全理念,以身份为基础、动态访问控制为核心打造的安全访问平台。 通过收缩业务暴露面、自适应增强身份认证、终端持续检…...

使用dlib进行人脸检测和对齐

最近在配置人脸属性识别的服务,用过faceboxes_detector(faster rcnn的包),也用过face_recognition的,但是她们都没有做人脸对齐,而且检测人脸的范围也不太一样。没有做人脸对齐的时候,使用属性识…...

将python代码封装成c版本的dll动态链接库

前言 将python程序打包成DLL文件,然后用C调用生成的DLL文件,这是一种用C调用python的方法,这一块比较容易遇到坑。网上关于这一块的教程不是很多,而且大部分都不能完全解决问题。我在傻傻挣扎了几天之后,终于试出了一个…...

AI技术网关如何用于安全生产监测?有什么优势?

现代工业生产和运营的规模越来越庞大、系统和结构越来越复杂,现场的风险点多面广,给作业一线的安全监管带来极大的挑战。 针对工地、煤矿、危化品、加油站、烟花爆竹、电力等行业的安全生产监管场景,可以借助AI智能与物联网技术,…...

2|数据挖掘|关联规则|Association Rules|Apriori算法|Frequent-pattern tree和FP-growth算法|11.11

...

刷题记录:牛客NC53370 Forsaken的三维数点

传送门:牛客 题目描述: Forsaken现在在一个三维空间中,空间中每个点都可以用(x,y,z)表示。突然,三维空间的主人出现 了,如果Forsaken想要继续在三维空间中呆下去,他就必须回答三维空间主人的问题.主人会在空间 中坐标为(x,y,z)处…...

lombok的原理 和 使用

原理Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。其实并没有改变字节码文件的任何内容,只是简化的程序员编写代码的方式。不使用lombok:使用lombok:lombok常用注解Setter :注解在类或字段&#x…...

UDP网络编程

UDP和TCP 前几节我们提到了计算机网络编程中的TCP编程,TCP和UDP都是计算机机网络通信的传输层中的传输协议,今天我们来学习计算机网络编程中的基于UDP传输协议的网络编程 首先我们要了解TCP和UDP的区别 它们是同属于计算机网络传输层的传输协议 TCP&…...

“合并区间”问题解析及其思考

合并区间题目以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。解析本题思路相对比较容易想先对各个区间按左…...

2023年理想新能源汽车核心部件解密

理想主要硬件清单(L9车型) 汽车结构 设置名称 规格 备注 价格 供应商 感知层...

C++ 将一个vector内容赋值给另一个vector,及swap与assign的区别

在本文中&#xff0c;我们将主要介绍5种将一个vector内容赋值给另一个vector的方式&#xff0c;顺便讨论下swap与assign的区别。 赋值 方式一、申明时赋值 vector<int> v2; v2.push_back(0); v2.push_back(1);vector<int> v1(v2); //声明方式二、使用assign赋值…...

PMP的价值有哪些?

我个人认为&#xff0c;考证只有两个出发点是正确的。一是为了提升自己或者满足自己的兴趣&#xff0c;另一个是和自己的职业规划相关。 比如&#xff0c;有同学想提升自己英语能力&#xff0c;可以考四六级&#xff0c;或者更厉害一点的考雅思、托福。比如&#xff0c;有的同…...

OnGUI label 控件||Unity 3D GUI教程||OnGUI Background Color 控件

Unity 3D Label 控件用于在设备的屏幕上创建文本标签和纹理标签&#xff0c;和Box 控件类似&#xff0c;可以显示文本内容或图片。Label 控件一般用于显示提示性的信息&#xff0c;如当前窗口的名称、游戏中游戏对象的名字、游戏对玩家的任务提示和功能介绍等。具体使用方法如下…...

从 JavaScript 中的数组中删除空对象

从数组中删除空对象&#xff1a; 使用 Array.filter() 方法遍历数组。将每个对象传递给 Object.keys() 方法并检查键的长度是否不等于 0。filter 方法将返回一个不包含空对象的新数组。 const arr [{}, {id: 1}, {}, {id: 2}, {}];const results arr.filter(element > {…...

【C++】AVL树和红黑树(插入和测试详解)

文章目录1、AVL树1.1 AVL树的插入1.2 总结与测试AVL树2、红黑树2.1 红黑树的插入2.2 红黑树的测试了解AVL树是为了了解红黑树&#xff0c;了解红黑树是为了更好的理解set和map。 1、AVL树 AVL树是在二叉搜索树的基础上进行了严格的平衡&#xff0c;能做到平衡的关键是通过平衡…...

Centos7 安装 Mysql 8.0.32,详细完整教程(好文章!!)

mysql5.7的安装方式参考之前的文章&#xff1a; centos7 安装 Mysql 5.7.27&#xff0c;详细完整教程&#xff08;好文章&#xff01;&#xff01;&#xff09;_HD243608836的博客-CSDN博客 一、检查mysql版本冲突 先检查是否已经存在mysql&#xff0c;若存在卸载&#xff0…...

wordpress建站网页无法运/seo优化网站技术排名百度推广

本文主要向大家介绍了Oracle数据库之Oracle分组函数以及数据分组&#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习Oracle数据库有所帮助。一、分组函数1、sum()求和函数、max()求最大值函数、min()求最小值函数、avg()求平均值函数、count()求总行数函数Expres…...

网站如何收录/网红推广团队去哪里找

MATLAB同其他高级语言一致&#xff0c;有三种基本程序结构&#xff1a; 顺序结构&#xff1b;选择结构&#xff1b;循环结构 MATLAB流程控制语句主要有&#xff1a; ForWhileif-else-endswitch-case 常用命令&#xff1a; BreakContinue以及matlab特有的try命令&#xff0…...

个人网站免费模板/怎么搭建属于自己的网站

2019独角兽企业重金招聘Python工程师标准>>> 一、在编码过程发现报错&#xff1a;Override is not allowed when implementing interface method 。 1、在project/module上&#xff0c;右键选择菜单“Open Module Settings” ; 2、选择Modules&#xff0c;修改“Lan…...

关于政府补贴企业做网站的事/软文营销常用的方式

大三上&#xff1a;数据库系统概论所有实验报告和课后作业 文章目录一、实验目的及要求二、实验内容&#xff08;或实验原理、实验拓扑&#xff09;三、实验设备与环境四、实验设计方案&#xff08;包括实验步骤、设计思想、算法描述或开发流程等&#xff09;五、实验结果&…...

怎么利用360域名做网站/深圳google推广

刚开始接触vue 的webpage脚手架的时候是不是对那一堆文件夹特别懵。下面我们就来看看脚手架里面的目录都代表什么吧&#xff01;首先安装好脚手架的时候目录是这样的1.node_modues --这个文件夹里面是存放下载好的依赖(模块&#xff0c;组件)--依赖的工具包目录2.public …...

沈阳市三好街网站建设公司/seo效果最好的是

曲率半径&#xff1a;曲率的倒数就是曲率半径。曲线的曲率。平面曲线的曲率就是针对曲线上某个点的切线方向角对弧长的转动率&#xff0c;通过微分来定义&#xff0c;表明曲线偏离直线的程度。Klim|Δα/Δs|&#xff0c;Δs趋向于0的时候&#xff0c;定义k就是曲率。曲率半径主…...