52 KiB
Android应用程序渗透测试
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥
- 你在一家网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组或电报群组,或在Twitter上关注我🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享你的黑客技巧。
HackenProof是所有加密漏洞赏金的家园。
即时获得奖励
HackenProof的赏金只有在客户存入奖励预算后才会启动。在漏洞经过验证后,您将获得奖励。
在web3渗透测试中积累经验
区块链协议和智能合约是新的互联网!在其崛起的日子里掌握web3安全。
成为web3黑客传奇
每次验证的漏洞都会获得声望积分,并占据每周排行榜的榜首。
在HackenProof上注册开始从您的黑客行动中获利!
{% embed url="https://hackenproof.com/register" %}
Android应用程序基础知识
强烈建议阅读此页面,了解与Android安全相关的最重要的部分和Android应用程序中最危险的组件:
{% content-ref url="android-applications-basics.md" %} android-applications-basics.md {% endcontent-ref %}
ADB(Android调试桥)
这是您连接到Android设备(模拟或物理)所需的主要工具。
它允许您通过USB或网络从计算机上控制设备,复制文件来回,安装和卸载应用程序,运行shell命令,执行备份,读取日志等等。
请查看以下ADB命令列表,了解如何使用adb。
Smali
有时候,修改应用程序代码以访问隐藏信息(可能是混淆良好的密码或标志)是很有趣的。然后,将apk反编译,修改代码并重新编译可能是有趣的。
在本教程中,您可以学习如何反编译APK,修改Smali代码并重新编译APK以添加新功能。这在动态分析期间作为替代方案可能非常有用。因此,始终记住这种可能性。
其他有趣的技巧
- 在Play商店中伪造您的位置
- 下载APK:https://apps.evozi.com/apk-downloader/,https://apkpure.com/es/,https://www.apkmirror.com/,https://apkcombo.com/es-es/apk-downloader/
- 从设备中提取APK:
adb shell pm list packages
com.android.insecurebankv2
adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
adb pull /data/app/com.android.insecurebankv2- Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
HackenProof 是所有加密漏洞赏金的家园。
即时获得奖励
HackenProof 的赏金只有在客户存入奖励预算后才会启动。在漏洞验证后,您将获得奖励。
在 web3 渗透测试中积累经验
区块链协议和智能合约是新的互联网!在其兴起的时代掌握 web3 安全。
成为 web3 黑客传奇
每次验证的漏洞都会获得声誉积分,并占领每周排行榜的榜首。
在 HackenProof 上注册 开始从您的黑客攻击中获利!
{% embed url="https://hackenproof.com/register" %}
静态分析
首先,要分析 APK,您应该使用反编译器查看 Java 代码。
请在此处阅读有关不同可用反编译器的信息。
寻找有趣的信息
只需查看 APK 的字符串,您就可以搜索密码、URL(https://github.com/ndelphit/apkurlgrep)、API 密钥、加密、蓝牙 UUID、令牌和任何有趣的内容... 甚至查找代码执行后门或身份验证后门(应用程序中的硬编码管理员凭据)。
Firebase
特别注意Firebase URL,并检查其是否配置不当。在此处了解有关 Firebase 是什么以及如何利用它的更多信息。
对应用程序的基本理解 - Manifest.xml、strings.xml
使用此处提到的任何反编译器,您都可以阅读 Manifest.xml。您还可以将 apk 文件扩展名更改为 .zip 并解压它。
通过阅读清单,您可以找到漏洞:
- 首先,检查应用程序是否可调试。生产 APK 不应该是可调试的(否则其他人将能够连接到它)。您可以在清单中查找属性
debuggable="true"
来检查应用程序是否可调试。示例:<application theme="@2131296387" debuggable="true"
- 在此处了解如何在手机上查找可调试的应用程序并利用它们
- 备份:
android:allowBackup
属性定义了用户启用 USB 调试后是否可以备份和恢复应用程序数据。如果备份标志设置为 true,则允许攻击者通过 adb 备份应用程序数据,即使设备未 root。因此,处理和存储敏感信息(如卡片详细信息、密码等)的应用程序应将此设置明确设置为 false,因为默认情况下它设置为 true,以防止此类风险。 <application android:allowBackup="false"
- **NetworkSecurity:**应用程序的网络安全性可以使用
android:networkSecurityConfig="@xml/network_security_config"
覆盖默认值。可以将名为该名称的文件放在 res/xml. 中。此文件将配置重要的安全设置,如证书 pin 或是否允许 HTTP 流量。您可以在此处阅读有关可以配置的所有内容的更多信息,但请查看以下关于如何为某些域配置 HTTP 流量的示例: <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">formation-software.co.uk </domain></domain-config>
- 导出的活动:检查清单中的导出的活动,因为这可能是危险的。稍后在动态分析中,将解释如何滥用此行为。
- 内容提供程序:如果正在公开一个已导出的提供程序,则可以访问/修改有趣的信息。在动态分析中,您将学习如何滥用它们。
- 检查属性
android:name="android.support.FILE_PROVIDER_PATHS"
中的 FileProviders 配置。在此处阅读有关 FileProviders 的更多信息。 - 公开的服务:根据服务在内部执行的操作,可能会利用漏洞。在动态分析中,您将学习如何滥用它们。
- 广播接收器:您将学习如何可能滥用它们。
- URL 方案:阅读管理方案的活动代码,并查找处理用户输入的漏洞。有关URL 方案的更多信息,请单击此处。
- minSdkVersion、targetSDKVersion、maxSdkVersion:它们指示应用程序将在哪些 Android 版本上运行。从安全角度来看,支持旧版本将允许已知的易受攻击的 Android 版本运行它,因此将它们牢记在心是很重要的。
阅读 resources.arsc/strings.xml,您可以找到一些有趣的信息:
- API 密钥
- 自定义模式
- 开发人员在此文件中保存的其他有趣信息
Tapjacking
Tapjacking 是一种攻击,其中启动了一个恶意应用程序,并将其定位在受害者应用程序的顶部。一旦它遮挡了受害者应用程序,它的用户界面被设计成以一种欺骗用户与之交互的方式,同时将交互传递给受害者应用程序。
实际上,它使用户无法知道他们实际上正在对受害者应用程序执行操作。
为了检测易受此攻击的应用程序,您应该在 Android 清单中搜索导出的活动(请注意,具有意图过滤器的活动默认情况下会自动导出)。找到导出的活动后,检查它们是否需要任何权限。这是因为恶意应用程序也需要该权限。
最后,重要的是检查代码是否存在可能的 setFilterTouchesWhenObscured
配置。如果设置为 true
,则按钮在被遮挡时可以自动禁用:
<Button android:text="Button"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:filterTouchesWhenObscured="true">
</Button>
您可以使用qark和--exploit-apk
参数创建一个恶意应用程序,以测试可能的Tapjacking漏洞。
一个实现这种功能的示例项目可以在FloatingWindowApp中找到。
缓解措施相对简单,开发人员可以选择在一个视图被另一个视图覆盖时不接收触摸事件。使用Android开发者参考:
有时,应用程序需要能够验证用户完全知情并同意执行的操作,例如授予权限请求、进行购买或点击广告。不幸的是,恶意应用程序可能会试图欺骗用户执行这些操作,而用户并不知情,通过隐藏视图的预期目的。作为补救措施,框架提供了一个触摸过滤机制,可用于提高提供对敏感功能的访问的视图的安全性。
要启用触摸过滤,请调用
setFilterTouchesWhenObscured(boolean)
或将android:filterTouchesWhenObscured布局属性设置为true。启用后,框架将在视图的窗口被另一个可见窗口遮挡时丢弃接收到的触摸。因此,当toast、对话框或其他窗口出现在视图的窗口上方时,视图将不会接收到触摸。
任务劫持
{% content-ref url="android-task-hijacking.md" %} android-task-hijacking.md {% endcontent-ref %}
不安全的数据存储
内部存储
在内部存储上创建的文件只能由应用程序访问。这种保护是由Android实现的,对于大多数应用程序来说已经足够。但是开发人员经常使用MODE_WORLD_READBALE
和MODE_WORLD_WRITABLE
将这些文件的访问权限授予其他应用程序,但这并不限制其他应用程序(恶意应用程序)访问它们。
在静态分析中检查使用这些模式,在动态分析中检查创建的文件的权限(也许其中一些是全局可读/可写的)。
关于此漏洞及其修复方法的更多信息,请点击此处
外部存储
在外部存储(如SD卡)上创建的文件是全局可读和可写的。由于外部存储可以被用户移除并且可以被任何应用程序修改,您不应该使用外部存储来存储敏感信息。
与来自任何不受信任来源的数据一样,处理来自外部存储的数据时,应该进行输入验证。我们强烈建议您在动态加载之前不要将可执行文件或类文件存储在外部存储中。如果您的应用程序确实从外部存储中检索可执行文件,那么在动态加载之前应对文件进行签名和加密验证。
信息取自此处。
可以在/storage/emulated/0
、/sdcard
、/mnt/sdcard
中访问外部存储。
{% hint style="info" %} 从Android 4.4(API 17)开始,SD卡具有目录结构,限制应用程序对特定应用程序的目录的访问。这样可以防止恶意应用程序读取或写入另一个应用程序的文件。 {% endhint %}
明文存储的敏感数据
- 共享首选项:Android允许每个应用程序在路径
/data/data/<packagename>/shared_prefs/
中轻松保存xml文件,并且有时可以在该文件夹中找到明文存储的敏感信息。 - 数据库:Android允许每个应用程序在路径
/data/data/<packagename>/databases/
中轻松保存sqlite数据库,并且有时可以在该文件夹中找到明文存储的敏感信息。
破损的TLS
接受所有证书
由于某种原因,有时开发人员会接受所有证书,即使例如主机名与以下代码行不匹配:
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
一种测试的好方法是尝试使用像Burp这样的代理来捕获流量,而不需要在设备内授权Burp CA。此外,您可以使用Burp生成一个针对不同主机名的证书并使用它。
加密破解
密钥管理流程不佳
一些开发人员将敏感数据保存在本地存储中,并使用在代码中硬编码/可预测的密钥进行加密。这样做是不应该的,因为一些逆向工程可能会使攻击者提取机密信息。
使用不安全和/或已弃用的算法
开发人员不应使用已弃用的算法来执行授权检查、存储或发送数据。其中一些算法包括:RC4、MD4、MD5、SHA1...如果例如使用哈希来存储密码,则应使用具有盐的哈希抗暴力破解。
其他检查
- 建议对APK进行混淆,以增加逆向工程的难度。
- 如果应用程序是敏感的(如银行应用程序),应该执行自己的检查以查看手机是否已经root,并采取相应措施。
- 如果应用程序是敏感的(如银行应用程序),应检查是否正在使用模拟器。
- 如果应用程序是敏感的(如银行应用程序),应在执行之前检查自身的完整性,以检查是否已被修改。
- 使用APKiD检查用于构建APK的编译器/打包器/混淆器
React Native应用程序
阅读以下页面,了解如何轻松访问React应用程序的JavaScript代码:
{% content-ref url="react-native-application.md" %} react-native-application.md {% endcontent-ref %}
Xamarin应用程序
阅读以下页面,了解如何轻松访问Xamarin应用程序的C#代码:
{% content-ref url="../xamarin-apps.md" %} xamarin-apps.md {% endcontent-ref %}
超级打包应用程序
根据这篇博客文章,超级打包是一种将应用程序的内容压缩到单个文件中的元算法。该博客讨论了创建一个解压这些应用程序的应用程序的可能性...以及一种更快的方法,即执行应用程序并从文件系统中收集解压缩的文件。
自动静态代码分析
工具mariana-trench能够通过扫描应用程序的代码来查找漏洞。该工具包含一系列已知源(指示工具用户控制的输入位置)、漏洞点(指示工具危险的位置,恶意用户输入可能会造成损害)和规则。这些规则指示了源-漏洞点的组合,表明存在漏洞。
有了这些知识,mariana-trench将审查代码并找出可能的漏洞。
泄露的机密信息
应用程序中可能包含一些机密信息(API密钥、密码、隐藏的URL、子域名...),您可能能够发现这些信息。您可以使用诸如https://github.com/dwisiswant0/apkleaks之类的工具。
绕过生物识别身份验证
{% content-ref url="bypass-biometric-authentication-android.md" %} bypass-biometric-authentication-android.md {% endcontent-ref %}
其他有趣的功能
- 代码执行:
Runtime.exec(), ProcessBuilder(), native code:system()
- 发送短信:
sendTextMessage, sendMultipartTestMessage
- 声明为
native
的本地函数:public native, System.loadLibrary, System.load
- 阅读此内容以了解如何反向本地函数
其他技巧
{% content-ref url="content-protocol.md" %} content-protocol.md {% endcontent-ref %}
HackenProof是所有加密漏洞赏金的家园。
即时获得奖励
HackenProof的赏金只有在客户存入奖励预算后才会启动。在漏洞经过验证后,您将获得奖励。
在web3渗透测试中积累经验
区块链协议和智能合约是新的互联网!在其崛起之际掌握web3安全。
成为web3黑客传奇
每次验证的漏洞都会获得声誉积分,并占据每周排行榜的榜首。
在HackenProof上注册开始从您的黑客行动中获利!
{% embed url="https://hackenproof.com/register" %}
动态分析
首先,您需要一个可以安装应用程序和所有环境(主要是Burp CA证书、Drozer和Frida)的环境。因此,强烈建议使用已root的设备(模拟或非模拟)。
在线动态分析
您可以在https://appetize.io/创建一个免费账户。该平台允许您上传和执行APK文件,因此可以用于查看APK的行为方式。
您甚至可以在Web上查看应用程序的日志并通过adb进行连接。
通过ADB连接,您可以在模拟器中使用Drozer和Frida。
本地动态分析
您可以使用一些模拟器,例如:
- Android Studio(您可以创建x86和arm设备,并根据此处的最新x86版本支持ARM库,无需使用缓慢的arm模拟器)。
- 如果您想尝试安装一个映像,然后想要删除它,您可以在Windows上执行以下操作:
C:\Users\<User>\AppData\Local\Android\sdk\system-images\
或Mac上执行以下操作:/Users/myeongsic/Library/Android/sdk/system-image
。 - 这是我推荐使用的主要模拟器,您可以在此页面上学习如何设置它。
- Genymotion (免费版本:个人版,您需要创建一个帐户。建议下载带有VirtualBox的版本,以避免潜在错误。)
- Nox(免费,但不支持Frida或Drozer)。
{% hint style="info" %} 在任何平台上创建新模拟器时,请记住屏幕越大,模拟器运行得越慢。因此,如果可能,请选择小屏幕。 {% endhint %}
由于大多数人将使用Genymotion,请注意此技巧。要安装Google服务(如AppStore),您需要单击以下图像中标记为红色的按钮:
此外,请注意在Genymotion中的Android VM配置中,您可以选择桥接网络模式(如果您将从具有工具的不同VM连接到Android VM,则这将非常有用)。
或者,您可以使用物理 5. 返回并找到开发者选项**。
安装应用程序后,首先要做的是尝试并调查它的功能、工作原理,并熟悉它。
我建议使用MobSF动态分析+pidcat进行初始动态分析,这样您就可以在MobSF捕获大量有趣数据的同时,了解应用程序的工作方式。
非预期的数据泄漏
日志记录
开发人员经常会公开留下调试信息。因此,任何具有READ_LOGS
权限的应用程序都可以通过访问这些日志来获取敏感信息。
在浏览应用程序时,使用pidcat(推荐,使用和阅读更容易)或adb logcat来读取创建的日志,并查找敏感信息。
{% hint style="warning" %}
请注意,从Android 4.0的较新版本开始,应用程序只能访问自己的日志。因此,应用程序无法访问其他应用程序的日志。
无论如何,仍建议不要记录敏感信息。
{% endhint %}
复制/粘贴缓存
Android提供了基于剪贴板的框架,用于在Android应用程序中提供复制粘贴功能。但是,当某些其他应用程序可以访问包含敏感数据的剪贴板时,这会导致严重问题。应该禁用应用程序中敏感部分的复制/粘贴功能。例如,禁用复制信用卡详细信息。
崩溃日志
如果应用程序在运行时崩溃并将日志保存在某个位置,则这些日志对攻击者尤其有帮助,特别是在无法对Android应用程序进行逆向工程的情况下。然后,避免在应用程序崩溃时创建日志,并且如果日志通过网络发送,则确保它们通过SSL通道发送。
作为渗透测试人员,尝试查看这些日志。
发送给第三方的分析数据
大多数应用程序在其应用程序中使用其他服务,如Google Adsense,但有时它们会泄漏一些敏感数据或不需要发送给该服务的数据。这可能是因为开发人员没有正确实现功能。您可以通过拦截应用程序的流量来查看是否向第三方发送了任何敏感数据。
SQLite数据库
大多数应用程序将使用内部SQLite数据库保存信息。在渗透测试期间,查看创建的数据库、表和列的名称以及保存的所有数据,因为您可能会发现敏感信息(这将是一个漏洞)。
数据库应位于/data/data/the.package.name/databases
,例如/data/data/com.mwr.example.sieve/databases
如果数据库保存了机密信息并且是加密的,但您可以在应用程序内找到密码,这仍然是一个漏洞。
使用.tables
枚举表,并使用.schema <table_name>
枚举表的列。
Drozer(利用活动、内容提供程序和服务)
Drozer允许您扮演Android应用程序的角色,并与其他应用程序进行交互。它可以执行安装的应用程序可以执行的任何操作,例如利用Android的进程间通信(IPC)机制并与底层操作系统进行交互。详见Drozer指南。
Drozer是一个有用的工具,可用于利用导出的活动、导出的服务和内容提供程序,您将在以下部分中了解到。
利用导出的活动
如果您想回顾一下什么是Android活动,请阅读此内容。
还要记住,活动的代码从onCreate
方法开始。
绕过授权
当一个活动被导出时,您可以从外部应用程序调用其屏幕。因此,如果一个包含敏感信息的活动被导出,您可以绕过身份验证机制访问它。
了解如何使用Drozer利用导出的活动。
您还可以使用adb启动导出的活动:
- PackageName是com.example.demo
- 导出的ActivityName是com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity
注意:MobSF会将在活动中使用android:launchMode
作为singleTask/singleInstance
的方法检测为恶意行为,但由于这个,显然这只在旧版本(API版本<21)上是危险的。
{% hint style="info" %} 请注意,授权绕过并不总是漏洞,这取决于绕过的方式以及暴露的信息。 {% endhint %}
敏感信息泄露
活动也可以返回结果。如果你找到了一个导出且未受保护的活动,调用了**setResult
方法并返回敏感信息**,那就存在敏感信息泄露。
利用内容提供者 - 访问和操作敏感信息
如果你想回顾一下什么是内容提供者,请阅读这篇文章。
内容提供者基本上用于共享数据。如果一个应用程序有可用的内容提供者,你可能能够从中提取敏感数据。还有测试可能的SQL注入和路径遍历,因为它们可能存在漏洞。
学习如何使用Drozer利用内容提供者。
利用服务
如果你想回顾一下什么是服务,请阅读这篇文章。
记住,服务的操作从onStartCommand
方法开始。
服务基本上是可以接收数据,处理它并返回(或不返回)响应的东西。因此,如果一个应用程序导出了一些服务,你应该检查代码以了解它在做什么,并动态测试以提取机密信息,绕过身份验证措施...
学习如何使用Drozer利用服务。
利用广播接收器
如果你想回顾一下什么是广播接收器,请阅读这篇文章。
记住,广播接收器的操作从onReceive
方法开始。
广播接收器将等待某种类型的消息。根据接收器处理消息的方式,它可能存在漏洞。
学习如何使用Drozer利用广播接收器。
利用Schemes / Deep links
你可以手动查找深层链接,使用像MobSF这样的工具或像这个这样的脚本。
你可以使用adb或浏览器打开一个声明的scheme:
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
请注意,您可以省略包名,手机将自动调用应该打开该链接的应用程序。
<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>
执行的代码
为了找到在应用程序中执行的代码,请转到由深度链接调用的活动,并搜索函数onNewIntent
。
敏感信息
每次找到一个深度链接时,请确保它不会通过URL参数接收敏感数据(如密码),因为任何其他应用程序都可以冒充深度链接并窃取这些数据!
路径中的参数
您还必须检查任何深度链接是否在URL的路径中使用参数,例如:https://api.example.com/v1/users/{username}
,在这种情况下,您可以通过访问类似于example://app/users?username=../../unwanted-endpoint%3fparam=value
的内容来强制进行路径遍历。
请注意,如果您在应用程序中找到了正确的端点,您可能能够引发开放重定向(如果路径的一部分用作域名)、账户劫持(如果您可以在不使用CSRF令牌的情况下修改用户详细信息,并且漏洞端点使用了正确的方法)和其他任何漏洞。更多关于此的信息在这里。
更多示例
一个关于链接的有趣的赏金漏洞报告(/.well-known/assetlinks.json)。
不足的传输层保护
- 缺乏证书检查: Android应用程序未能验证呈现给它的证书的身份。大多数应用程序会忽略警告并接受任何自签名证书。而有些应用程序则通过HTTP连接传递流量。
- 弱握手协商: 应用程序和服务器进行了SSL/TLS握手,但使用了容易受到中间人攻击的不安全密码套件。因此,任何攻击者都可以轻松解密该连接。
- 隐私信息泄露: 大多数情况下,应用程序通过安全通道进行身份验证,但其余所有连接都通过非安全通道进行。这并不增加应用程序的安全性,因为其余的敏感数据(如会话cookie或用户数据)可以被恶意用户拦截。
从所提供的3种情况中,我们将讨论如何验证证书的身份。另外两种情况取决于服务器的TLS配置以及应用程序是否发送未加密的数据。渗透测试人员应该自行检查服务器的TLS配置(在这里)并检测是否通过未加密/易受攻击的通道发送了任何机密信息。
有关如何发现和修复此类漏洞的更多信息,请参阅此处。
SSL Pinning
默认情况下,在进行SSL连接时,客户端(Android应用程序)会检查服务器的证书是否具有可验证的信任链,并与请求的主机名匹配。这导致了中间人攻击(MITM)的问题。
在证书固定中,Android应用程序本身包含服务器的证书,并且只有在呈现相同证书时才传输数据。
建议在将要发送敏感信息的站点上应用SSL Pinning。
检查HTTP流量
首先,您应该(必须)安装代理工具(例如Burp)的证书。如果您不安装代理工具的CA证书,您可能无法在代理中看到加密的流量。
请阅读此指南以了解如何安装自定义CA证书。
对于针对API级别24+的应用程序,仅安装Burp CA证书到设备中是不够的。要绕过此新保护,您需要修改网络安全配置文件。因此,您可以修改此文件以授权您的CA证书,或者您可以阅读此页面以了解如何强制应用程序再次接受设备中安装的所有证书。
SSL Pinning
我们已经在2段前讨论了什么是SSL Pinning。当它在应用程序中实施时,您需要绕过它以检查HTTPS流量,否则您将无法看到它。
这里我将介绍一些我用来绕过此保护的选项:
- 使用apk-mitm自动修改apk以绕过SSL Pinning。这种选项的最大优点是,您无需root即可绕过SSL Pinning,但您需要删除应用程序并重新安装新应用程序,而且这种方法并不总是有效的。
- 您可以使用Frida(下面讨论)来绕过此保护。这里有一个使用Burp+Frida+Genymotion的指南:https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/
- 您还可以尝试使用objection自动绕过SSL Pinning:
objection --gadget com.package.app explore --startup-command "android sslpinning disable"
- 您还可以尝试使用MobSF动态分析自动绕过SSL Pinning(下面解释)
- 如果您仍然认为有一些流量未被捕获,您可以尝试使用iptables将流量转发到burp。阅读此博客:https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62
常见的Web漏洞
请注意,在此步骤中,您应该寻找常见的Web漏洞。关于Web漏洞的大量信息可以在本书中找到,因此我在这里不再提及它们。
Frida
用于开发人员、逆向工程师和安全研究人员的动态插装工具包。了解更多信息,请访问www.frida.re。
它非常强大,您可以访问正在运行的应用程序并在运行时挂钩方法以更改行为、更改值、提取值、运行不同的代码...
如果您想进行Android应用程序渗透测试,您需要知道如何使用Frida。
学习如何使用Frida:Frida教程
一些用于与Frida执行操作的“GUI”:https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security
基于Frida的其他一些抽象:https://github.com/sensepost/objection , https://github.com/dpnishant/appmon
您可以在这里找到一些很棒的Frida脚本:https://codeshare.frida.re/
Android应用程序分析器
这个工具可以帮助您在动态分析过程中管理不同的工具:https://github.com/NotSoSecure/android_application_analyzer
Intent注入
这个漏洞类似于Web安全中的开放重定向。由于Intent
类是Parcelable
的,属于这个类的对象可以作为额外的数据传递给另一个Intent
对象。
许多开发人员利用这个特性,并创建代理组件(活动、广播接收器和服务),将其嵌入的Intent
传递给startActivity(...)
、sendBroadcast(...)
等危险方法。
这是危险的,因为攻击者可以强制应用程序启动一个无法直接从另一个应用程序启动的非导出组件,或者授予攻击者对其内容提供程序的访问权限。**WebView
有时也会将URL从字符串转换为Intent
**对象,使用Intent.parseUri(...)
方法,并将其传递给startActivity(...)
。
Android客户端注入和其他漏洞
可能您已经从Web中了解过这种类型的漏洞。在Android应用程序中,您必须特别小心处理这些漏洞:
- **SQL注入:**在处理动态查询或内容提供程序时,请确保使用参数化查询。
- **JavaScript注入(XSS):**验证任何WebView是否已禁用JavaScript和插件支持(默认情况下已禁用)。更多信息请点击此处。
- **本地文件包含:**验证任何WebView是否已禁用文件系统访问(默认情况下已启用)
(webview.getSettings().setAllowFileAccess(false);)
。更多信息请点击此处。 - **永久cookie:**在某些情况下,当Android应用程序结束会话时,cookie不会被撤销,甚至可能保存到磁盘上。
- cookie中的Secure标志
HackenProof是所有加密漏洞赏金的家园。
即时获得奖励
HackenProof的赏金只有在客户存入奖励预算后才会启动。在漏洞经过验证后,您将获得奖励。
在web3渗透测试中积累经验
区块链协议和智能合约是新的互联网!在其兴起的日子里掌握web3安全。
成为web3黑客传奇
每次验证的漏洞都会获得声誉积分,并占据每周排行榜的榜首。
在HackenProof上注册开始从您的黑客攻击中获利!
{% embed url="https://hackenproof.com/register" %}
自动分析
MobSF
静态分析
使用一个漂亮的基于Web的前端对应用程序进行漏洞评估。您还可以执行动态分析(但需要准备环境)。
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
请注意,MobSF可以分析Android(apk)、IOS(ipa)和Windows(apx)应用程序(Windows应用程序必须从安装在Windows主机上的MobSF进行分析)。此外,如果您创建了一个包含Android或IOS应用程序源代码的ZIP文件(转到应用程序的根文件夹,选择所有内容并创建ZIP文件),MobSF也可以分析它。
MobSF还允许您进行差异/比较分析,并集成VirusTotal(您需要在_MobSF/settings.py_中设置API密钥并启用它:VT_ENABLED = TRUE
VT_API_KEY = <Your API key>
VT_UPLOAD = TRUE
)。您还可以将VT_UPLOAD
设置为False
,然后将上传哈希而不是文件。
使用MobSF进行辅助动态分析
对于Android的动态分析,MobSF也非常有帮助,但在这种情况下,您需要在主机上安装MobSF和genymotion(虚拟机或Docker不起作用)。注意:您需要先启动genymotion中的虚拟机,然后再启动MobSF。
MobSF的动态分析器可以:
- 转储应用程序数据(URL、日志、剪贴板、您创建的截图、由“导出的Activity测试器”创建的截图、电子邮件、SQLite数据库、XML文件和其他创建的文件)。除了截图外,所有这些都是自动完成的,您需要在需要截图时按下按钮,或者按下“导出的Activity测试器”以获取所有导出活动的截图。
- 捕获HTTPS流量
- 使用Frida获取运行时信息
从Android版本> 5开始,它将自动启动Frida并设置全局代理设置以捕获流量。它只会捕获来自被测试应用程序的流量。
Frida
默认情况下,它还使用一些Frida脚本来绕过SSL证书固定、检测Root和检测调试器,以及监视有趣的API。
MobSF还可以调用导出的活动,抓取它们的截图并将它们保存到报告中。
要开始动态测试,请点击绿色按钮:“开始仪器化”。点击“Frida实时日志”以查看Frida脚本生成的日志,点击“实时API监视器”以查看所有钩住方法的调用、传递的参数和返回值(在点击“开始仪器化”后会出现)。
MobSF还允许您加载自己的Frida脚本(要将Friday脚本的结果发送到MobSF,请使用函数send()
)。它还有几个预写的脚本可以加载(您可以在MobSF/DynamicAnalyzer/tools/frida_scripts/others/
中添加更多),只需选择它们,点击“加载”,然后点击“开始仪器化”(您将能够在“Frida实时日志”中看到该脚本的日志)。
此外,您还有一些辅助的Frida功能:
- 枚举已加载的类:它将打印所有已加载的类
- 捕获字符串:在使用应用程序时,它将打印所有捕获的字符串(非常嘈杂)
- 捕获字符串比较:可能非常有用。它将显示正在比较的两个字符串以及结果是True还是False。
- 枚举类方法:输入类名(如“java.io.File”),它将打印类的所有方法。
- 搜索类模式:按模式搜索类
- 跟踪类方法:跟踪整个类(查看类的所有方法的输入和输出)。请记住,默认情况下,MobSF跟踪几个有趣的Android Api方法。
选择要使用的辅助模块后,需要点击“开始仪器化”,然后您将在“Frida实时日志”中看到所有输出。
Shell
Mobsf还提供了一个带有一些adb命令、MobSF命令和常见shell命令的shell,位于动态分析页面的底部。一些有趣的命令:
help
shell ls
activities
exported_activities
services
receivers
HTTP工具
当捕获到HTTP流量时,你可以在“HTTP(S) Traffic”底部看到捕获到的流量的不美观视图,或者在“Start HTTPTools”绿色按钮中看到更好的视图。从第二个选项开始,你可以将捕获到的请求发送到Burp或Owasp ZAP等代理服务器。
要这样做,启动Burp --> 关闭拦截 --> 在MobSB HTTPTools中选择请求 --> 按下“Send to Fuzzer” --> 选择代理地址 (http://127.0.0.1:8080\)。
在使用MobSF进行动态分析后,你可以点击“Start Web API Fuzzer”来对HTTP请求进行模糊测试并寻找漏洞。
{% hint style="info" %} 在使用MobSF进行动态分析后,代理设置可能会配置错误,你将无法通过GUI修复它们。你可以通过以下方式修复代理设置:
adb shell settings put global http_proxy :0
{% endhint %}
使用Inspeckage进行辅助动态分析
您可以从Inspeckage获取该工具。
该工具使用一些Hooks来让您了解在您进行动态分析时应用程序中发生了什么。
{% content-ref url="inspeckage-tutorial.md" %} inspeckage-tutorial.md {% endcontent-ref %}
Yaazhini
这是一个用于执行带有GUI的静态分析的优秀工具
Qark
该工具旨在查找几种与安全相关的Android应用程序漏洞,无论是在源代码还是打包的APK中。该工具还能够创建一个“Proof-of-Concept”可部署的APK和ADB命令,以利用找到的一些漏洞(暴露的活动、意图、tapjacking...)。与Drozer一样,无需对测试设备进行root操作。
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java
ReverseAPK
- 显示所有提取的文件以便参考
- 自动将APK文件反编译为Java和Smali格式
- 分析AndroidManifest.xml以查找常见的漏洞和行为
- 静态源代码分析以查找常见的漏洞和行为
- 设备信息
- 意图
- 命令执行
- SQLite引用
- 日志引用
- 内容提供者
- 广播接收器
- 服务引用
- 文件引用
- 加密引用
- 硬编码的秘密
- URL
- 网络连接
- SSL引用
- WebView引用
reverse-apk relative/path/to/APP.apk
SUPER Android Analyzer
SUPER是一个命令行应用程序,可在Windows、MacOS X和Linux上使用,用于分析_.apk_文件以寻找漏洞。它通过解压APK并应用一系列规则来检测这些漏洞。
所有规则都集中在一个rules.json
文件中,每个公司或测试人员都可以创建自己的规则来分析他们所需的内容。
从下载页面下载最新的二进制文件。
super-analyzer {apk_file}
StaCoAn
StaCoAn是一个跨平台工具,可帮助开发人员、漏洞赏金猎人和道德黑客对移动应用程序进行静态代码分析。
其概念是您将移动应用程序文件(.apk或.ipa文件)拖放到StaCoAn应用程序上,它将为您生成一个可视化和便携的报告。您可以调整设置和词汇表以获得定制化的体验。
下载最新版本:
./stacoan
AndroBugs
AndroBugs Framework是一个Android漏洞分析系统,帮助开发者或黑客发现Android应用中潜在的安全漏洞。
Windows版本
python androbugs.py -f [APK file]
androbugs.exe -f [APK file]
Androwarn
Androwarn 是一个工具,其主要目的是检测并警告用户有关 Android 应用程序可能存在的恶意行为。
该工具通过对应用程序的 Dalvik 字节码进行静态分析来进行检测,该字节码以 Smali 形式表示,并使用 androguard
库。
该工具寻找“坏”应用程序的常见行为,例如:泄露电话标识符、拦截音视频流、修改 PIM 数据、任意代码执行等。
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
MARA Framework
MARA 是一个移动应用程序逆向工程和分析框架。它是一个将常用的移动应用程序逆向工程和分析工具集合在一起的工具,以帮助测试移动应用程序抵御OWASP移动安全威胁。其目标是使移动应用程序开发人员和安全专业人员更容易和友好地完成这项任务。
它能够:
- 使用不同的工具提取Java和Smali代码
- 使用以下工具分析APK:smalisca, ClassyShark, androbugs, androwarn, APKiD
- 使用正则表达式从APK中提取私人信息。
- 分析清单。
- 使用以下工具分析找到的域名:pyssltest, testssl 和 whatweb
- 通过 apk-deguard.com 对APK进行反混淆。
Koodous
用于检测恶意软件:https://koodous.com/
HackenProof 是所有加密漏洞赏金的家园。
无需延迟获得奖励
HackenProof 的赏金只有在客户存入奖励预算后才会启动。在漏洞经过验证后,您将获得奖励。
在 web3 渗透测试中积累经验
区块链协议和智能合约是新的互联网!掌握 web3 安全的崛起时刻。
成为 web3 黑客传奇
每次验证的漏洞都会获得声誉积分,并占据每周排行榜的榜首。
在 HackenProof 上注册 开始从您的黑客攻击中获利!
{% embed url="https://hackenproof.com/register" %}
代码混淆/反混淆
请注意,根据您用于混淆代码的服务和配置,秘密可能会被混淆或未被混淆。
ProGuard
ProGuard 是一个开源的命令行工具,用于缩小、优化和混淆Java代码。它能够优化字节码,并检测和删除未使用的指令。ProGuard 是免费软件,根据GNU通用公共许可证第2版分发。
ProGuard 作为Android SDK的一部分分发,并在发布模式下构建应用程序时运行。
来源:https://en.wikipedia.org/wiki/ProGuard_(software)
DexGuard
在https://blog.lexfo.fr/dexguard.html中找到了一个逐步指南,用于对APK进行反混淆。
(来自该指南)我们上次检查时,Dexguard 的操作模式是:
- 将资源作为 InputStream 加载;
- 将结果提供给继承自 FilterInputStream 的类以进行解密;
- 进行一些无用的混淆,以浪费逆向工程师的几分钟时间;
- 将解密后的结果提供给 ZipInputStream 以获取 DEX 文件;
- 最后使用
loadDex
方法将生成的 DEX 作为资源加载。
DeGuard
DeGuard 反转了 Android 混淆工具执行的混淆过程。这使得可以进行多种安全分析,包括代码检查和预测库。
您可以将混淆的 APK 上传到他们的平台上。
Simplify
它是一个通用的 Android 反混淆器。Simplify 虚拟执行一个应用程序以了解其行为,然后尝试优化代码,使其行为相同但更容易理解。每种优化类型都是简单且通用的,因此不管使用的具体混淆类型是什么都没有关系。
APKiD
APKiD 可以提供关于APK的制作方式的信息。它可以识别许多编译器、打包工具、混淆工具和其他奇怪的东西。它是 Android 的 PEiD。
手动
实验室
Androl4b
AndroL4b 是一个基于 ubuntu-mate 的 Android 安全虚拟机,包括来自不同安全极客和研究人员的最新框架、教程和实验室,用于逆向工程和恶意软件分析。
OWASP
{% embed url="https://github.com/OWASP/owasp-mstg%0Ahttps://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06g-testing-network-communication" %}
Git 仓库
https://github.com/riddhi-shree/nullCommunity/tree/master/Android
https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec
参考资料
了解更多信息,请访问:
- https://appsecwiki.com/#/ 这是一个很棒的资源列表
- https://maddiestone.github.io/AndroidAppRE/ Android 快速课程
- https://manifestsecurity.com/android-application-security/
- https://github.com/Ralireza/Android-Security-Teryaagh
测试
HackenProof 是所有加密漏洞赏金的家园。
即时获得奖励
HackenProof 的赏金只有在客户存入奖励预算后才会启动。在漏洞验证后,您将获得奖励。
在 web3 渗透测试中积累经验
区块链协议和智能合约是新的互联网!在其兴起之时掌握 web3 安全。
成为 web3 黑客传奇
每次验证的漏洞都会获得声望积分,并登上每周排行榜的榜首。
在 HackenProof 上注册 开始从您的黑客攻击中获利!
{% embed url="https://hackenproof.com/register" %}
☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 您在网络安全公司工作吗?您想在 HackTricks 中看到您的公司广告吗?或者您想获得最新版本的 PEASS 或下载 PDF 格式的 HackTricks 吗?请查看订阅计划!
- 发现我们的独家 NFT 收藏品The PEASS Family
- 获得官方 PEASS & HackTricks 商品
- 加入 💬 Discord 群组 或 Telegram 群组 或在 Twitter 上 关注我 🐦@carlospolopm。
- 通过向 hacktricks 仓库 和 hacktricks-cloud 仓库 提交 PR 来分享您的黑客技巧。