Translated ['mobile-pentesting/android-app-pentesting/README.md', 'mobil

This commit is contained in:
Translator 2023-08-25 11:48:55 +00:00
parent 99490e7295
commit 5f502cd665
3 changed files with 139 additions and 80 deletions

View file

@ -303,6 +303,7 @@
* [Reversing Native Libraries](mobile-pentesting/android-app-pentesting/reversing-native-libraries.md)
* [Smali - Decompiling/\[Modifying\]/Compiling](mobile-pentesting/android-app-pentesting/smali-changes.md)
* [Spoofing your location in Play Store](mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md)
* [Tapjacking](mobile-pentesting/android-app-pentesting/tapjacking.md)
* [Webview Attacks](mobile-pentesting/android-app-pentesting/webview-attacks.md)
* [iOS Pentesting Checklist](mobile-pentesting/ios-pentesting-checklist.md)
* [iOS Pentesting](mobile-pentesting/ios-pentesting/README.md)

View file

@ -7,7 +7,7 @@
* 你在一家**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
</details>
@ -20,7 +20,7 @@
HackenProof的赏金只有在客户存入奖励预算后才会启动。在漏洞经过验证后您将获得奖励。
**在web3渗透测试中积累经验**\
区块链协议和智能合约是新的互联网!在其起的日子里掌握web3安全。
区块链协议和智能合约是新的互联网!在其起的日子里掌握web3安全。
**成为web3黑客传奇**\
每次验证的漏洞都会获得声望积分,并登上每周排行榜的榜首。
@ -31,7 +31,7 @@ HackenProof的赏金只有在客户存入奖励预算后才会启动。在漏洞
## Android应用程序基础知识
强烈建议阅读此页面了解与Android安全相关的**最重要的部分和Android应用程序中最危险的组件**
强烈建议您从阅读本页面开始了解与Android安全相关的**最重要的部分**以及Android应用程序中最危险的组件
{% content-ref url="android-applications-basics.md" %}
[android-applications-basics.md](android-applications-basics.md)
@ -69,31 +69,31 @@ adb pull /data/app/com.android.insecurebankv2- Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
### 寻找有趣的信息
只需查看APK的字符串你就可以搜索密码、URL[https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)、API密钥、加密、蓝牙UUID、令牌和其他有趣的内容...甚至查找代码执行的后门或身份验证后门(硬编码的管理员凭据)。
只需查看APK的字符串你就可以搜索密码、URL[https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)、API密钥、加密、蓝牙UUID、令牌和其他有趣的内容...甚至可以查找代码执行的后门或身份验证后门(硬编码的管理员凭据)。
**Firebase**
特别注意Firebase的URL并检查是否配置错误。[在这里了解有关Firebase是什么以及如何利用它的更多信息。](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
特别注意Firebase的URL并检查是否配置错误。[在这里了解有关Firebase是什么以及如何利用它的更多信息。](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
### 对应用程序的基本理解 - Manifest.xml, strings.xml
### 对应用程序的基本理解 - Manifest.xmlstrings.xml
使用任何在[这里](apk-decompilers.md)提到的反编译工具你都可以阅读_Manifest.xml_。你还可以将apk文件扩展名重命名为.zip并解压缩它。通过阅读清单你可以发现以下漏洞
使用任何在[这里](apk-decompilers.md)提到的反编译工具之一你将能够阅读Manifest.xml。你还可以将apk文件扩展名重命名为.zip并解压缩它。通过阅读清单你可以发现以下漏洞
* 首先检查应用程序是否可调试。生产APK不应该是可调试的否则其他人将能够连接到它。你可以在清单中查找属性`debuggable="true"`来检查应用程序是否可调试。示例:`<application theme="@2131296387" debuggable="true"`
* [在这里学习如何在手机上查找可调试的应用程序并利用它们](drozer-tutorial/#is-debuggeable)
* **备份**`android:allowBackup`属性定义了应用程序数据是否可以由启用了USB调试的用户进行备份和恢复。如果备份标志设置为true则允许攻击者通过adb备份应用程序数据即使设备没有root权限。因此,处理和存储敏感信息(如卡片详细信息、密码等)的应用程序应该将此设置显式设置为**false**,因为默认情况下它设置为**true**以防止此类风险。
* **备份**`android:allowBackup`属性定义了用户启用USB调试后是否可以备份和恢复应用程序数据。如果备份标志设置为true则允许攻击者通过adb备份应用程序数据即使设备未经root。因此处理和存储敏感信息如卡片详细信息、密码等的应用程序应该将此设置显式设置为false因为默认情况下它设置为true以防止此类风险。
* `<application android:allowBackup="false"`
* **NetworkSecurity**:应用程序的网络安全性可以通过`android:networkSecurityConfig="@xml/network_security_config"`覆盖默认值。可以在_res/xml_目录下放置一个名为network_security_config的文件来配置重要的安全设置如证书固定或是否允许HTTP流量。你可以在这里阅读有关可以配置的所有内容的更多信息但请查看以下示例了解如何为某些域配置HTTP流量
* **NetworkSecurity**:应用程序的网络安全性可以通过`android:networkSecurityConfig="@xml/network_security_config"`覆盖默认值。可以在**res/xml**中放置一个名为network_security_config的文件。该文件将配置重要的安全设置如证书固定或是否允许HTTP流量。你可以在这里阅读有关可以配置的所有内容的更多信息但请查看以下关于如何为某些域配置HTTP流量的示例
* `<domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">formation-software.co.uk </domain></domain-config>`
* **导出的活动**:检查清单中导出的活动,因为这可能是危险的。在动态分析中,将解释如何[利用此行为](./#exploiting-exported-activities-authorisation-bypass)。
* **内容提供程序**:如果公开了一个提供程序,你可能能够访问/修改有趣的信息。在动态分析中,[你将学习如何滥用它们](./#exploiting-content-providers-accessing-and-manipulating-sensitive-information)。
* **导出的活动**:检查清单中导出的活动,因为这可能是危险的。稍后在动态分析中,将解释如何[利用此行为](./#exploiting-exported-activities-authorisation-bypass)。
* **内容提供程序**:如果公开了一个导出的提供程序,你可能能够访问/修改有趣的信息。在动态分析中,你将学习如何[滥用它们](./#exploiting-content-providers-accessing-and-manipulating-sensitive-information)。
* 检查`android:name="android.support.FILE_PROVIDER_PATHS"`属性中的**FileProviders**配置。[在这里阅读有关FileProviders的更多信息](./#fileprovider)。
* **公开的服务**:根据服务在内部执行的操作,可能会存在漏洞。在动态分析中,[你将学习如何滥用它们](./#exploiting-services)。
* **广播接收器**[你将学习如何可能利用它们](./#exploiting-broadcast-receivers)。
* **URL方案**:阅读管理方案的活动代码,并查找处理用户输入的漏洞。关[URL方案的更多信息请点击这里](./#url-schemes)。
* **minSdkVersion**、**targetSDKVersion**、**maxSdkVersion**它们指示应用程序将在哪些Android版本上运行。从安全角度来看支持旧版本将允许已知的Android漏洞版本运行。
* **公开的服务**:根据服务在内部执行的操作,可能会存在漏洞。在动态分析中,你将学习如何[滥用它们](./#exploiting-services)。
* **广播接收器**[你将学习如何可能利用它们](./#exploiting-broadcast-receivers)在动态分析中
* **URL方案**:阅读管理方案的活动代码,并查找处理用户输入的漏洞。关[URL方案的更多信息请点击这里](./#url-schemes)。
* **minSdkVersion****targetSDKVersion****maxSdkVersion**它们指示应用程序将在哪些Android版本上运行。从安全角度来看支持旧版本将允许已知的Android漏洞版本运行。
通过阅读**resources.arsc/strings.xml**,你可以找到一些有趣的信息:
阅读**resources.arsc/strings.xml**,你可以找到一些有趣的信息:
* API密钥
* 自定义模式
@ -101,32 +101,13 @@ adb pull /data/app/com.android.insecurebankv2- Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
### Tapjacking
**Tapjacking**是一种攻击,其中一个恶意应用程序被启动并位于受害者应用程序的顶部。一旦它遮挡了受害者应用程序,它的用户界面被设计成以一种方式欺骗用户与之交互,同时将交互传递给受害者应用程序。实际上,它使用户无法知道他们实际上是在对受害者应用程序执行操作。
为了检测易受此攻击的应用程序你应该在Android清单中搜索导出的活动注意具有意图过滤器的活动默认情况下会自动导出。一旦找到导出的活动**检查它们是否需要任何权限**。这是因为**恶意应用程序也需要该权限**。
最后,重要的是检查代码是否存在可能的**`setFilterTouchesWhenObscured`**配置。如果设置为**`true`**,当按钮被遮挡时,它将自动禁用:
```markup
<Button android:text="Button"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:filterTouchesWhenObscured="true">
</Button>
```
您可以使用[**qark**](https://github.com/linkedin/qark)命令和`--exploit-apk`参数以及`--sdk-path`参数`/Users/username/Library/Android/sdk`来创建一个恶意应用程序,以测试可能的**Tapjacking**漏洞。\
一个实现这种功能的示例项目可以在[**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp)中找到。
缓解措施相对简单,开发人员可以选择在一个视图被另一个视图覆盖时不接收触摸事件。使用[Android开发者参考](https://developer.android.com/reference/android/view/View#security)
> 有时,应用程序需要能够验证用户完全知情并同意执行的操作,例如授予权限请求、进行购买或点击广告。不幸的是,恶意应用程序可能会试图欺骗用户执行这些操作,而用户却不知情,通过隐藏视图的预期目的。作为补救措施,框架提供了一个触摸过滤机制,可用于提高提供对敏感功能的访问的视图的安全性。
>
> 要启用触摸过滤,请调用[`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29)或将android:filterTouchesWhenObscured布局属性设置为true。启用后框架将在视图的窗口被另一个可见窗口遮挡时丢弃接收到的触摸。因此当toast、对话框或其他窗口出现在视图的窗口上方时视图将不会接收到触摸。
### 任务劫持
将**`launchMode`**设置为**`singleTask`**且未定义任何**`taskAffinity`**的**activity**容易受到任务劫持的攻击。这意味着,如果在真正的应用程序之前安装并启动了一个应用程序,它可以**劫持真正应用程序的任务**(因此用户将与**恶意应用程序交互,以为自己在使用真正的应用程序**)。
将**`launchMode`**设置为**`singleTask`**且未定义任何**`taskAffinity`**的**活动**容易受到任务劫持的攻击。这意味着,可以安装一个**应用程序**,如果在真正的应用程序之前启动它,它可以**劫持真正应用程序的任务**(因此用户将与**恶意应用程序交互,以为自己在使用真正的应用程序**)。
更多信息请参见
更多信息:
{% content-ref url="android-task-hijacking.md" %}
[android-task-hijacking.md](android-task-hijacking.md)
@ -137,31 +118,30 @@ android:filterTouchesWhenObscured="true">
**内部存储**
在**内部存储**上创建的文件只能由应用程序访问。这种保护是由Android实现的对于大多数应用程序来说已经足够。但是开发人员经常使用`MODE_WORLD_READBALE`和`MODE_WORLD_WRITABLE`将这些文件的访问权限授予其他应用程序,但这并不限制其他应用程序(恶意应用程序)访问它们。\
在**静态**分析中检查使用这些**模式**,在**动态**分析中检查创建的文件的**权限**(也许其中一些是全局可读/可写的)。\
[此处了解有关此漏洞及其修复方法的更多信息。](https://manifestsecurity.com/android-application-security-part-8/)
在**静态**分析中,检查是否使用了这些模式,在**动态**分析中,检查创建的文件的权限(也许其中一些是全球可读/可写的)。\
[这里了解有关此漏洞及如何修复它的更多信息。](https://manifestsecurity.com/android-application-security-part-8/)
**外部存储**
在**外部存储**如SD卡上创建的文件是**全局可读和可写**的。由于外部存储可以被用户移除并且可以被任何应用程序修改,因此不应该使用外部存储来存储敏感信息。\
与来自任何不受信任来源的数据一样,处理来自外部存储的数据时应进行**输入验证**。我们强烈建议在动态加载之前不要将可执行文件或类文件存储在外部存储中。如果您的应用程序确实从外部存储中检索可执行文件,则应在动态加载之前对文件进行签名和加密验证。\
信息取自[此处](https://manifestsecurity.com/android-application-security-part-8/)。
在**外部存储**如SD卡上创建的文件是**全局可读和可写**的。由于外部存储可以被用户移除并且可以被任何应用程序修改,因此不应该使用外部存储来存储敏感信息。\
与来自任何不受信任来源的数据一样,处理来自外部存储的数据时应进行**输入验证**。我们强烈建议在动态加载之前不要将可执行文件或类文件存储在外部存储上。如果你的应用程序确实从外部存储检索可执行文件,那么在动态加载之前应对这些文件进行签名和加密验证。\
信息来源:[这里](https://manifestsecurity.com/android-application-security-part-8/)。
可以在`/storage/emulated/0`、`/sdcard`、`/mnt/sdcard`中访问外部存储。
{% hint style="info" %}
从Android 4.4**API 17**开始SD卡具有目录结构**限制应用程序对特定应用程序目录的访问**。这样可以防止恶意应用程序读取或写入另一个应用程序的文件。
从Android 4.4API 17开始SD卡具有目录结构**限制应用程序对特定应用程序目录的访问**。这样可以防止恶意应用程序读取或写入另一个应用程序的文件。
{% endhint %}
**明文存储的敏感数据**
* **共享首选项**Android允许每个应用程序在路径`/data/data/<packagename>/shared_prefs/`中轻松保存xml文件并且有时可以在该文件夹中找到明文存储的敏感信息。
* **数据库**Android允许每个应用程序在路径`/data/data/<packagename>/databases/`中轻松保存sqlite数据库并且有时可以在该文件夹中找到明文存储的敏感信息。
* **共享首选项**Android允许每个应用程序轻松保存xml文件在路径`/data/data/<packagename>/shared_prefs/`中,有时可以在该文件夹中找到明文存储的敏感信息。
* **数据库**Android允许每个应用程序轻松保存sqlite数据库在路径`/data/data/<packagename>/databases/`中,有时可以在该文件夹中找到明文存储的敏感信息。
### 破损的TLS
**接受所有证书**
由于某种原因,有时开发人员会接受所有证书,即使主机名与以下代码行不匹配:
由于某种原因,有时开发人员会接受所有证书,即使主机名与以下代码行不匹配,例如
```java
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
@ -304,13 +284,13 @@ HackenProof的赏金只有在客户存入奖励预算后才会启动。在漏洞
5. 返回,您将找到**开发者选项**。
> 安装应用程序后,您首先应该尝试并调查它的功能,了解它的工作原理,并熟悉它。\
> 我建议您使用MobSF动态分析+pidcat来**执行此初始动态分析**这样您就可以在MobSF**捕获**许多**有趣的数据**后进行学习,并稍后进行审查
> 我建议您使用MobSF动态分析+pidcat进行**初始动态分析**这样您就可以在MobSF捕获大量有趣的数据的同时**了解应用程序的工作方式**
### 非预期的数据泄漏
**日志记录**
开发人员经常公开留下调试信息。因此,任何具有`READ_LOGS`权限的应用程序都可以通过它们访问这些日志,并可以通过这些日志获得敏感信息。\
开发人员经常公开场合留下调试信息。因此,任何具有`READ_LOGS`权限的应用程序都可以通过它们访问这些日志,并可以通过这些日志获得敏感信息。\
在浏览应用程序时,使用[**pidcat**](https://github.com/JakeWharton/pidcat)(推荐,更易于使用和阅读)或[adb logcat](adb-commands.md#logcat)来读取创建的日志,并**寻找敏感信息**。
{% hint style="warning" %}
@ -320,7 +300,7 @@ HackenProof的赏金只有在客户存入奖励预算后才会启动。在漏洞
**复制/粘贴缓存**
Android提供了基于**剪贴板**的框架用于在Android应用程序中提供复制粘贴功能。但是一些**其他应用程序**可以访问包含某些敏感数据的**剪贴板**时,这会引发严重问题。应该**禁用**应用程序的**敏感部分**的**复制/粘贴**功能。例如,禁用复制信用卡详细信息。
Android提供了基于剪贴板的框架用于在Android应用程序中提供复制粘贴功能。但是当**其他应用程序**可以**访问**包含某些敏感数据的**剪贴板**时,这会引发严重问题。应该**禁用**应用程序的**敏感部分**的**复制/粘贴**功能。例如,禁用复制信用卡详细信息。
**崩溃日志**
@ -336,7 +316,7 @@ Android提供了基于**剪贴板**的框架用于在Android应用程序中
大多数应用程序将使用**内部SQLite数据库**保存信息。在渗透测试期间,查看创建的**数据库**、**表**和**列**的名称以及保存的**所有数据**,因为您可能会发现**敏感信息**(这将是一个漏洞)。\
数据库应位于`/data/data/the.package.name/databases`,例如`/data/data/com.mwr.example.sieve/databases`
如果数据库保存了机密信息并且**加密**,但您可以在应用程序内找到**密码**,这仍然是一个**漏洞**。
如果数据库保存了机密信息并且**加密**,但您可以在应用程序中**找到**密码,这仍然是一个**漏洞**。
使用`.tables`枚举表,使用`.schema <table_name>`枚举表的列
@ -350,7 +330,7 @@ Drozer是一个有用的工具可以在接下来的章节中学习如何**利
[**如果您想回顾一下什么是Android活动请阅读此内容。**](android-applications-basics.md#launcher-activity-and-other-activities)\
还要记住,活动的代码从`onCreate`方法开始。
**绕过授权**
**授权绕过**
当一个活动被导出时,您可以从外部应用程序调用其屏幕。因此,如果一个包含**敏感信息**的活动被**导出**,您可以**绕过**身份验证机制**访问它**。\
[**了解如何使用Drozer利用导出的活动。**](drozer-tutorial/#activities)
@ -370,33 +350,33 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
**敏感信息泄露**
**活动也可以返回结果**。如果你找到了一个导出且未受保护的活动调用了**`setResult`**方法并**返回敏感信息**,那就存在敏感信息泄露。
**活动也可以返回结果**。如果你找到了一个导出且未受保护的活动调用了**`setResult`**方法并**返回敏感信息**,那就存在敏感信息泄露的风险
#### 点击劫持
如果没有防止点击劫持,你可以滥用导出的活动来让**用户执行意外操作**。了解更多关于[**点击劫持是什么的信息,请点击此链接**](./#tapjacking)。
### 利用内容提供者 - 访问和操敏感信息
### 利用内容提供者 - 访问和操敏感信息
[**如果你想回顾一下什么是内容提供者,请阅读这篇文章。**](android-applications-basics.md#content-provider)\
内容提供者基本上用于**共享数据**。如果一个应用程序有可用的内容提供者,你可能能够从中**提取敏感**数据。还可以测试可能的**SQL注入**和**路径遍历**,因为它们可能存在漏洞。\
[**学习如何使用Drozer利用内容提供者。**](drozer-tutorial/#content-providers)
内容提供者基本上用于**共享数据**。如果一个应用程序有可用的内容提供者,你可能能够从中**提取敏感**数据。同时,测试可能的**SQL注入**和**路径遍历**也是很有意义的,因为它们可能存在漏洞。\
[**学习如何使用Drozer利用内容提供者。**](drozer-tutorial/#content-providers)
### **利用服务**
[**如果你想回顾一下什么是服务,请阅读这篇文章。**](android-applications-basics.md#services)\
记住,服务的操作从`onStartCommand`方法开始。
记住,服务的操作从`onStartCommand`方法开始
服务基本上是可以**接收数据****处理**它并**返回**(或不返回)响应的东西。因此,如果一个应用程序导出了一些服务,你应该**检查**代码以了解它在做什么,并**动态测试**以提取机密信息、绕过身份验证措施等\
[**学习如何使用Drozer利用服务。**](drozer-tutorial/#services)
服务基本上是可以**接收数据****处理**它并**返回**(或不返回)响应的东西。因此,如果一个应用程序导出了一些服务,你应该**检查**代码以了解它在做什么,并**动态测试**以提取机密信息、绕过身份验证措施等...\
[**学习如何使用Drozer利用服务。**](drozer-tutorial/#services)
### **利用广播接收器**
[**如果你想回顾一下什么是广播接收器,请阅读这篇文章。**](android-applications-basics.md#broadcast-receivers)\
记住,广播接收器的操作从`onReceive`方法开始。
记住,广播接收器的操作从`onReceive`方法开始
广播接收器将等待某种类型的消息。根据接收器处理消息的方式,它可能存在漏洞。\
[**学习如何使用Drozer利用广播接收器。**](./#exploiting-broadcast-receivers)
[**学习如何使用Drozer利用广播接收器。**](./#exploiting-broadcast-receivers)
### **利用Scheme / Deep links**
@ -457,14 +437,14 @@ _请注意您可以**省略包名**,手机将自动调用应该打开该链
首先,您应该(必须)**安装您将使用的代理工具可能是Burp的证书**。如果您不安装代理工具的CA证书您可能无法在代理中看到加密的流量。\
**请**[**阅读此指南以了解如何安装自定义CA证书**](android-burp-suite-settings.md)**。**
对于针对**API级别24+的应用程序仅安装Burp CA**证书在设备上是不够的。为了绕过这种新的保护机制您需要修改网络安全配置文件。因此您可以修改此文件以授权您的CA证书或者您可以[**阅读此页面以了解如何强制应用程序再次接受设备中安装的所有证书**](make-apk-accept-ca-certificate.md)。
对于针对**API级别24+的应用程序仅安装Burp CA**证书在设备上是不够的。要绕过此新保护您需要修改网络安全配置文件。因此您可以修改此文件以授权您的CA证书或者您可以[**阅读此页面以了解如何强制应用程序再次接受设备中安装的所有证书**](make-apk-accept-ca-certificate.md)。
**SSL Pinning**
我们已经在前面的两个段落中讨论了什么是SSL Pinning。当它在应用程序中实施时您需要绕过它以检查HTTPS流量否则您将无法看到它。\
我们已经在2段之前讨论了什么是SSL Pinning。当它在应用程序中实施时您需要绕过它以检查HTTPS流量否则您将无法看到它。\
这里我将介绍一些我用来绕过此保护的选项:
* 使用[**apk-mitm**](https://github.com/shroudedcode/apk-mitm)自动**修改apk**以绕过SSL Pinning。这种选项的最大优点是您无需root即可绕过SSL Pinning但您需要删除应用程序并重新安装新应用程序,而且这种方法并不总是有效的。
* 使用[**apk-mitm**](https://github.com/shroudedcode/apk-mitm)自动**修改apk**以绕过SSLPinning。这种选项的最大优点是您无需root即可绕过SSL Pinning但您需要删除应用程序并重新安装新应用程序而且这种方法并不总是有效的。
* 您可以使用Frida下面讨论来绕过此保护。这里有一个使用Burp+Frida+Genymotion的指南[https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
* 您还可以尝试使用[**objection**](frida-tutorial/objection-tutorial.md)自动绕过SSL Pinning`objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
* 您还可以尝试使用**MobSF动态分析**自动绕过SSL Pinning下面解释
@ -478,7 +458,7 @@ _请注意您可以**省略包名**,手机将自动调用应该打开该链
用于开发人员、逆向工程师和安全研究人员的动态插装工具包。了解更多信息,请访问[www.frida.re](https://www.frida.re)。\
**它非常强大,您可以访问正在运行的应用程序并在运行时挂钩方法以更改行为、更改值、提取值、运行不同的代码...**\
**如果您想进行Android应用程序渗透测试您需要知道如何使用Frida。**
**如果您想进行Android应用程序渗透测试您需要知道如何使用Frida。**
**学习如何使用Frida**[**Frida教程**](frida-tutorial/)\
**一些用于与Frida执行操作的“GUI”**[**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)\
@ -521,18 +501,18 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
### Intent注入
种漏洞类似于Web安全中的**开放重定向**。由于`Intent`类是`Parcelable`的,**属于该类的对象**可以作为**额外数据**传递给另一个`Intent`对象。\
许多开发人员利用这个特性,并创建**代理组件**(活动、广播接收器和服务),将其嵌入的`Intent`传递给`startActivity(...)`、`sendBroadcast(...)`等危险方法。\
这是危险的,因为**攻击者可以强制应用启动一个无法直接从另一个应用程序启动的非导出组件**,或者授予攻击者访问其内容提供程序的权限。**`WebView`**有时也会将**URL从字符串转换为`Intent`**对象,使用`Intent.parseUri(...)`方法,并将其传递给`startActivity(...)`。
个漏洞类似于Web安全中的**开放重定向**。由于`Intent`类是`Parcelable`的,**属于这个类的对象**可以作为**额外的数据**传递给另一个`Intent`对象。\
许多开发人员利用这个**特性**创建**代理组件**(活动、广播接收器和服务),将其嵌入的`Intent`传递给`startActivity(...)`、`sendBroadcast(...)`等危险方法。\
这是危险的,因为**攻击者可以强制应用启动一个无法直接从另一个应用程序启动的非导出组件**,或者授予攻击者对其内容提供程序的访问权限。**`WebView`**有时也会将**URL从字符串转换为`Intent`**对象,使用`Intent.parseUri(...)`方法,并将其传递给`startActivity(...)`。
### Android客户端注入和其他漏洞
可能您已经从Web中了解过这种类型的漏洞。在Android应用程序中您必须特别注意以下漏洞
可能您已经从Web中了解过这种漏洞。在Android应用程序中您必须特别注意以下漏洞
* **SQL注入**在处理动态查询或内容提供程序时,请确保使用参数化查询。
* **JavaScript注入XSS**验证任何WebView是否已禁用JavaScript和插件支持默认情况下已禁用。[更多信息请参见此处](webview-attacks.md#javascript-enabled)。
* **本地文件包含:**验证任何WebView是否已禁用文件系统访问默认情况下已启用`(webview.getSettings().setAllowFileAccess(false);)`。[更多信息请参见此处](webview-attacks.md#javascript-enabled)。
* **永久cookie**在某些情况下当Android应用程序结束会话时cookie不会被撤销,甚至可能保存到磁盘上。
* **JavaScript注入XSS**验证任何WebView是否已禁用JavaScript和插件支持默认情况下已禁用。[更多信息请点击此处](webview-attacks.md#javascript-enabled)。
* **本地文件包含:**验证任何WebView是否已禁用文件系统访问默认情况下已启用`(webview.getSettings().setAllowFileAccess(false);)`。[更多信息请点击此处](webview-attacks.md#javascript-enabled)。
* **永久cookie**在某些情况下当Android应用程序结束会话时cookie没有被撤销,或者甚至可能保存到磁盘上。
* [**cookie中的Secure标志**](../../pentesting-web/hacking-with-cookies/#cookies-flags)
***
@ -616,7 +596,7 @@ receivers
```
**HTTP工具**
当捕获到HTTP流量时你可以在“**HTTP(S) Traffic**”底部看到捕获到的流量的不美观视图,或者在“**Start HTTPTools**”绿色按钮中看到更好的视图。从第二个选项开始,你可以将捕获到的请求发送到Burp或Owasp ZAP等代理服务器。\
当捕获到HTTP流量时你可以在“**HTTP(S) Traffic**”底部看到捕获到的流量的丑陋视图,或者在“**Start HTTPTools**”绿色按钮中看到更好的视图。从第二个选项开始,你可以将捕获到的请求发送到像Burp或Owasp ZAP这样的代理服务器。\
要这样做_启动Burp -->_ _关闭拦截 --> 在MobSB HTTPTools中选择请求_ --> 按下“**Send to Fuzzer**” --> _选择代理地址_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080))。
在使用MobSF进行动态分析后你可以点击“**Start Web API Fuzzer**”来对HTTP请求进行模糊测试并寻找漏洞。
@ -631,7 +611,7 @@ adb shell settings put global http_proxy :0
### 使用Inspeckage进行辅助动态分析
您可以从[**Inspeckage**](https://github.com/ac-pm/Inspeckage)获取该工具。\
该工具使用一些**Hooks**,让您了解在您行**动态分析**时应用程序中发生了什么。
该工具使用一些**Hooks**,让您了解在您行**动态分析**时应用程序中发生了什么。
{% content-ref url="inspeckage-tutorial.md" %}
[inspeckage-tutorial.md](inspeckage-tutorial.md)
@ -639,13 +619,13 @@ adb shell settings put global http_proxy :0
### [Yaazhini](https://www.vegabird.com/yaazhini/)
这是一个**用于带有GUI的静态分析的优秀工具**
这是一个**用于执行带有GUI的静态分析的优秀工具**
![](<../../.gitbook/assets/image (527).png>)
### [Qark](https://github.com/linkedin/qark)
该工具旨在查找几种与安全相关的Android应用程序漏洞无论是在**源代码**还是**打包的APK**中。该工具还能够创建一个“Proof-of-Concept”可部署的APK和ADB命令以利用找到的一些漏洞暴露的活动、意图、tapjacking。与Drozer一样无需对测试设备进行root操作。
该工具旨在查找几种**与安全相关的Android应用程序漏洞**,无论是在**源代码**还是**打包的APK**中。该工具还**能够创建一个“Proof-of-Concept”可部署的APK****ADB命令**以利用找到的一些漏洞暴露的活动、意图、tapjacking...。与Drozer一样无需对测试设备进行root操作。
```bash
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
@ -737,7 +717,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
## 代码混淆/反混淆
请注意,根据您用于混淆代码的服务和配置,秘密可能会被混淆或未被混淆。
请注意,根据您用于混淆代码的服务和配置,秘密信息可能会被混淆或未被混淆。
### [ProGuard](https://en.wikipedia.org/wiki/ProGuard\_\(software\))
@ -814,7 +794,7 @@ AndroL4b是一个基于ubuntu-mate的Android安全虚拟机包括来自不同
HackenProof的赏金只有在客户存入奖励预算后才会启动。在漏洞经过验证后您将获得奖励。
**在web3渗透测试中积累经验**\
区块链协议和智能合约是新的互联网!掌握正在崛起的web3安全。
区块链协议和智能合约是新的互联网!在其崛起之初掌握web3安全。
**成为web3黑客传奇**\
每次验证的漏洞都会获得声誉积分,并占据每周排行榜的榜首。
@ -831,6 +811,6 @@ HackenProof的赏金只有在客户存入奖励预算后才会启动。在漏洞
* 发现[**The PEASS Family**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **关注**我在**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **通过向** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
</details>

View file

@ -0,0 +1,78 @@
# Tapjacking
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 你在一个**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
</details>
## **基本信息**
**Tapjacking**是一种攻击,其中一个**恶意应用程序**被启动并**位于受害者应用程序的顶部**。一旦它明显遮挡了受害者应用程序,它的用户界面被设计成以一种欺骗用户与之交互的方式,同时将交互传递给受害者应用程序。\
实际上,它**使用户无法知道他们实际上是在对受害者应用程序执行操作**。
### 检测
为了检测受此攻击影响的应用程序您应该在Android清单中搜索**导出的活动**(请注意,具有意图过滤器的活动默认情况下会自动导出)。一旦找到导出的活动,**检查它们是否需要任何权限**。这是因为**恶意应用程序也需要该权限**。
### 保护
#### Android 12 (API 31,32)及更高版本
[**根据此来源**](https://www.geeksforgeeks.org/tapjacking-in-android/)****从Android 12API 31和30及更高版本开始Android会自动防止tapjacking攻击。因此即使应用程序存在漏洞您**也无法利用它**。
#### **`setFilterTouchesWhenObscured`**
如果Android版本较低将属性**`setFilterTouchesWhenObscured`**设置为true也可以防止利用此漏洞。\
例如,如果设置为**`true`**,则当按钮被遮挡时,可以自动**禁用按钮**
```markup
<Button android:text="Button"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:filterTouchesWhenObscured="true">
</Button>
```
## Exploitation
### Tapjacking-ExportedActivity
最近的一个执行Tapjacking攻击的Android应用程序在攻击应用程序的导出活动之前调用可以在[https://github.com/carlospolop/Tapjacking-ExportedActivity](https://github.com/carlospolop/Tapjacking-ExportedActivity)找到。
按照README中的说明使用它。
### FloatingWindowApp
一个实现FloatingWindowApp的示例项目可以用来放在其他活动的上方执行点击劫持攻击可以在[FloatingWindowApp](https://github.com/aminography/FloatingWindowApp)中找到有点旧了祝你构建apk好运
### Qark
{% hint style="danger" %}
看起来这个项目现在已经不再维护,这个功能也不再正常工作
{% endhint %}
您可以使用[qark](https://github.com/linkedin/qark)和`--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk`参数创建一个恶意应用程序以测试可能的Tapjacking漏洞。
缓解措施相对简单,开发人员可以选择在一个视图被另一个视图覆盖时不接收触摸事件。使用[Android开发者参考](https://developer.android.com/reference/android/view/View#security)
> 有时,应用程序必须能够验证用户完全知情并同意执行的操作,例如授予权限请求、进行购买或点击广告。不幸的是,恶意应用程序可能会试图欺骗用户执行这些操作,而用户却不知情,通过隐藏视图的预期目的。作为补救措施,框架提供了一个触摸过滤机制,可用于提高提供对敏感功能的访问的视图的安全性。
>
> 要启用触摸过滤,请调用[`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29)或将android:filterTouchesWhenObscured布局属性设置为true。启用后框架将在视图的窗口被另一个可见窗口遮挡时丢弃接收到的触摸。因此当一个toast、对话框或其他窗口出现在视图的窗口上方时视图将不会接收到触摸。
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 您在一家网络安全公司工作吗您想在HackTricks中看到您的公司广告吗或者您想获得PEASS的最新版本或下载PDF格式的HackTricks吗请查看[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
</details>