diff --git a/SUMMARY.md b/SUMMARY.md
index 3f96660a8..0a5870998 100644
--- a/SUMMARY.md
+++ b/SUMMARY.md
@@ -186,7 +186,7 @@
* [macOS Serial Number](macos-hardening/macos-red-teaming/macos-mdm/macos-serial-number.md)
* [macOS Keychain](macos-hardening/macos-red-teaming/macos-keychain.md)
* [macOS Useful Commands](macos-hardening/macos-useful-commands.md)
-* [macOS Auto Start Locations](macos-hardening/macos-auto-start-locations.md)
+* [macOS Auto Start](macos-hardening/macos-auto-start-locations.md)
## 🪟 Windows Hardening
diff --git a/macos-hardening/macos-auto-start-locations.md b/macos-hardening/macos-auto-start-locations.md
index 3faa99266..4e2143597 100644
--- a/macos-hardening/macos-auto-start-locations.md
+++ b/macos-hardening/macos-auto-start-locations.md
@@ -1,21 +1,29 @@
-# macOS自动启动位置
+# macOS自动启动
-☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥
+☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-* 你在一家**网络安全公司**工作吗?想要在HackTricks中看到你的**公司广告**吗?或者你想要获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* 你在一家**网络安全公司**工作吗?你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
-* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
+* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**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来分享你的黑客技巧。**
-本节内容主要基于博客系列[**Beyond the good ol' LaunchAgents**](https://theevilbit.github.io/beyond/),目标是添加更多的**自动启动位置**(如果可能的话),指出最新版本的macOS(13.4)中仍然有效的技术,并指定所需的**权限**。
+本节内容主要基于博客系列[**Beyond the good ol' LaunchAgents**](https://theevilbit.github.io/beyond/),目标是添加更多的**自动启动位置**(如果可能的话),指出哪些技术在最新版本的macOS(13.4)上仍然有效,并指定所需的**权限**。
+
+## 沙盒绕过
+
+{% hint style="success" %}
+在这里,您可以找到用于**绕过沙盒**的启动位置,通过**将其写入文件**并**等待**一个非常**常见的操作**、一段**时间**或通常可以在沙盒内执行的**操作**,而无需需要root权限。
+{% endhint %}
### Launchd
+* 用于绕过沙盒:[✅](https://emojipedia.org/check-mark-button)
+
#### 位置
* **`/Library/LaunchAgents`**
@@ -35,9 +43,9 @@
* **`~/Library/LaunchDemons`**
* **触发器**:重新登录
-#### 描述和有效载荷
+#### 描述和利用
-**`launchd`**是在启动时由OS X内核执行的**第一个进程**,也是在关机时最后一个完成的进程。它应该始终具有**PID 1**。此进程将**读取和执行**在以下位置的**ASEP** **plists**中指定的配置:
+**`launchd`**是在启动时由OS X内核执行的**第一个进程**,也是在关机时最后一个完成的进程。它应该始终具有**PID 1**。此进程将**读取和执行**在以下**ASEP** **plists**中指定的配置:
* `/Library/LaunchAgents`:由管理员安装的每个用户代理
* `/Library/LaunchDaemons`:由管理员安装的系统级守护程序
@@ -87,6 +95,8 @@ launchctl list
写作:[https://theevilbit.github.io/beyond/beyond\_0001/](https://theevilbit.github.io/beyond/beyond\_0001/)\
写作(xterm):[https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
+* 用于绕过沙盒的有用方法:[✅](https://emojipedia.org/check-mark-button)
+
#### 位置
* **`~/.zshrc`,`~/.zlogin`,`~/.zshenv`,`~/.zprofile`**
@@ -102,12 +112,12 @@ launchctl list
* 可能还有其他位置:**`man zsh`**
* **`~/.bashrc`**
* **触发条件**:使用bash打开终端
-* `/etc/profile`(未生效)
-* `~/.profile`(未生效)
+* `/etc/profile`(未成功)
+* `~/.profile`(未成功)
* `~/.xinitrc`,`~/.xserverrc`,`/opt/X11/etc/X11/xinit/xinitrc.d/`
-* **触发条件**:预期与xterm一起触发,但**未安装**,即使安装后也会出现以下错误:xterm:`DISPLAY未设置`
+* **触发条件**:预计与xterm一起触发,但**未安装**,即使安装后也会出现此错误:xterm:`DISPLAY is not set`
-#### 描述
+#### 描述和利用
当我们的shell环境(如`zsh`或`bash`)**启动**时,会执行shell启动文件。现在,macOS默认使用`/bin/zsh`,每当我们打开`Terminal`或通过SSH连接到设备时,我们都会进入这个shell环境。`bash`和`sh`仍然可用,但必须明确启动。
@@ -116,10 +126,217 @@ launchctl list
# Example executino via ~/.zshrc
echo "touch /tmp/hacktricks" >> ~/.zshrc
```
+### 重新打开的应用程序
+
+{% hint style="danger" %}
+配置指定的利用方式并注销并重新登录,甚至重新启动都无法使应用程序执行。(应用程序未被执行,可能需要在执行这些操作时运行)
+{% endhint %}
+
+**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0021/](https://theevilbit.github.io/beyond/beyond\_0021/)
+
+* 有用于绕过沙盒的方法:[✅](https://emojipedia.org/check-mark-button)
+
+#### 位置
+
+* **`~/Library/Preferences/ByHost/com.apple.loginwindow..plist`**
+* **触发器**:重新启动时重新打开应用程序
+
+#### 描述和利用
+
+所有要重新打开的应用程序都在 plist 文件 `~/Library/Preferences/ByHost/com.apple.loginwindow..plist` 中。
+
+因此,要使重新打开的应用程序启动您自己的应用程序,您只需要**将您的应用程序添加到列表中**。
+
+可以通过列出该目录或使用 `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'` 命令来查找 UUID。
+
+要检查将要重新打开的应用程序,可以执行以下操作:
+```bash
+defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin
+#or
+plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow..plist
+```
+要将应用程序添加到此列表中,您可以使用以下方法:
+```bash
+# Adding iTerm2
+/usr/libexec/PlistBuddy -c "Add :TALAppsToRelaunchAtLogin: dict" \
+-c "Set :TALAppsToRelaunchAtLogin:$:BackgroundState 2" \
+-c "Set :TALAppsToRelaunchAtLogin:$:BundleID com.googlecode.iterm2" \
+-c "Set :TALAppsToRelaunchAtLogin:$:Hide 0" \
+-c "Set :TALAppsToRelaunchAtLogin:$:Path /Applications/iTerm.app" \
+~/Library/Preferences/ByHost/com.apple.loginwindow..plist
+```
+### 终端
+
+在 **`~/Library/Preferences`** 目录下存储了用户在应用程序中的偏好设置。其中一些偏好设置可以包含执行其他应用程序/脚本的配置。
+
+例如,终端可以在启动时执行一个命令:
+
+
+
+这个配置会在文件 **`~/Library/Preferences/com.apple.Terminal.plist`** 中反映出来,如下所示:
+```bash
+[...]
+"Window Settings" => {
+"Basic" => {
+"CommandString" => "touch /tmp/terminal_pwn"
+"Font" => {length = 267, bytes = 0x62706c69 73743030 d4010203 04050607 ... 00000000 000000cf }
+"FontAntialias" => 1
+"FontWidthSpacing" => 1.004032258064516
+"name" => "Basic"
+"ProfileCurrentVersion" => 2.07
+"RunCommandAsShell" => 0
+"type" => "Window Settings"
+}
+[...]
+```
+所以,如果系统中终端的偏好设置的plist文件可以被覆盖,那么可以使用`open`功能来打开终端并执行该命令。
+
+您可以通过命令行添加此功能:
+
+{% code overflow="wrap" %}
+```bash
+# Add
+/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" 'touch /tmp/terminal-start-command'" $HOME/Library/Preferences/com.apple.Terminal.plist
+/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"RunCommandAsShell\" 0" $HOME/Library/Preferences/com.apple.Terminal.plist
+
+# Remove
+/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" ''" $HOME/Library/Preferences/com.apple.Terminal.plist
+```
+{% endcode %}
+
+### 音频插件
+
+Writeup: [https://theevilbit.github.io/beyond/beyond\_0013/](https://theevilbit.github.io/beyond/beyond\_0013/)\
+Writeup: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://posts.specterops.io/audio-unit-plug-ins-896d3434a882)
+
+#### 位置
+
+* **`/Library/Audio/Plug-Ins/HAL`**
+* 需要 root 权限
+* **触发条件**:重新启动 coreaudiod 或计算机
+* **`/Library/Audio/Plug-ins/Components`**
+* 需要 root 权限
+* **触发条件**:重新启动 coreaudiod 或计算机
+* **`~/Library/Audio/Plug-ins/Components`**
+* **触发条件**:重新启动 coreaudiod 或计算机
+* **`/System/Library/Components`**
+* 需要 root 权限
+* **触发条件**:重新启动 coreaudiod 或计算机
+
+#### 描述
+
+根据之前的写作,可以**编译一些音频插件**并加载它们。
+
+### QuickLook 插件
+
+Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)
+
+* 用于绕过沙盒的有用工具:[✅](https://emojipedia.org/check-mark-button)
+
+#### 位置
+
+* `/System/Library/QuickLook`
+* `/Library/QuickLook`
+* `~/Library/QuickLook`
+* `/Applications/AppNameHere/Contents/Library/QuickLook/`
+* `~/Applications/AppNameHere/Contents/Library/QuickLook/`
+
+#### 描述和利用
+
+当你**触发文件的预览**(在 Finder 中选择文件后按下空格键)并且安装了支持该文件类型的**插件**时,QuickLook 插件会被执行。
+
+你可以编译自己的 QuickLook 插件,将其放置在上述位置之一以加载它,然后转到支持的文件并按下空格键来触发它。
+
+### ~~登录/注销钩子~~
+
+{% hint style="danger" %}
+对我来说这个方法不起作用,无论是用户登录钩子还是 root 注销钩子
+{% endhint %}
+
+**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0022/](https://theevilbit.github.io/beyond/beyond\_0022/)
+
+用于绕过沙盒的有用工具:[✅](https://emojipedia.org/check-mark-button)
+
+#### 位置
+
+* 你需要能够执行类似 `defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh` 的命令
+* 位于 `~/Library/Preferences/com.apple.loginwindow.plist`
+
+它们已被弃用,但可用于在用户登录时执行命令。
+```bash
+cat > $HOME/hook.sh << EOF
+#!/bin/bash
+echo 'My is: \`id\`' > /tmp/login_id.txt
+EOF
+chmod +x $HOME/hook.sh
+defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
+defaults write com.apple.loginwindow LogoutHook /Users/$USER/hook.sh
+```
+这个设置存储在 `/Users/$USER/Library/Preferences/com.apple.loginwindow.plist` 文件中。
+```bash
+defaults read /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
+{
+LoginHook = "/Users/username/hook.sh";
+LogoutHook = "/Users/username/hook.sh";
+MiniBuddyLaunch = 0;
+TALLogoutReason = "Shut Down";
+TALLogoutSavesState = 0;
+oneTimeSSMigrationComplete = 1;
+}
+```
+要删除它:
+```bash
+defaults delete com.apple.loginwindow LoginHook
+defaults delete com.apple.loginwindow LogoutHook
+```
+root用户的启动位置存储在**`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`**
+
+## 条件沙盒绕过
+
+{% hint style="success" %}
+在这里,您可以找到用于**绕过沙盒**的启动位置,它允许您通过**将其写入文件**并**期望不常见的条件**,如特定的**已安装程序、"不常见"的用户**操作或环境来执行某些操作。
+{% endhint %}
+
+### Cron
+
+**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0004/](https://theevilbit.github.io/beyond/beyond\_0004/)
+
+* 用于绕过沙盒的有用性: [✅](https://emojipedia.org/check-mark-button)
+* 但是,您需要能够执行`crontab`二进制文件
+* 或者是root用户
+
+#### 位置
+
+* **`/usr/lib/cron/tabs/`, `/private/var/at/tabs`, `/private/var/at/jobs`, `/etc/periodic/`**
+* 直接写入访问需要root权限。如果您可以执行`crontab `,则不需要root权限
+* **触发器**: 取决于cron作业
+
+#### 描述和利用
+
+使用以下命令列出**当前用户**的cron作业:
+```bash
+crontab -l
+```
+您还可以在**`/usr/lib/cron/tabs/`**和**`/var/at/tabs/`**(需要root权限)中查看用户的所有cron作业。
+
+在MacOS中,可以找到以**特定频率**执行脚本的几个文件夹:
+```bash
+# The one with the cron jobs is /usr/lib/cron/tabs/
+ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/
+```
+在这里,您可以找到常规的cron作业、at作业(不常用)和周期性作业(主要用于清理临时文件)。例如,可以使用`periodic daily`来执行每日周期性作业。
+
+要以编程方式添加用户cron作业,可以使用:
+```bash
+echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron
+crontab /tmp/cron
+```
### iTerm2
Writeup: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.github.io/beyond/beyond\_0002/)
+* 用于绕过沙盒的有用工具:[✅](https://emojipedia.org/check-mark-button)
+
#### 位置
* **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`**
@@ -129,7 +346,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.
* **`~/Library/Preferences/com.googlecode.iterm2.plist`**
* **触发条件**: 打开 iTerm
-#### 描述
+#### 描述与利用
存储在 **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** 中的脚本将被执行。例如:
```bash
@@ -167,6 +384,9 @@ plutil -p com.googlecode.iterm2.plist
# Add
/usr/libexec/PlistBuddy -c "Set :\"New Bookmarks\":0:\"Initial Text\" 'touch /tmp/iterm-start-command'" $HOME/Library/Preferences/com.googlecode.iterm2.plist
+# Call iTerm
+open /Applications/iTerm.app/Contents/MacOS/iTerm2
+
# Remove
/usr/libexec/PlistBuddy -c "Set :\"New Bookmarks\":0:\"Initial Text\" ''" $HOME/Library/Preferences/com.googlecode.iterm2.plist
```
@@ -176,172 +396,63 @@ plutil -p com.googlecode.iterm2.plist
很有可能有其他方法可以滥用iTerm2的偏好设置来执行任意命令。
{% endhint %}
-### 重新打开的应用程序
-
-**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0021/](https://theevilbit.github.io/beyond/beyond\_0021/)
-
-#### 位置
-
-* **`~/Library/Preferences/ByHost/com.apple.loginwindow..plist`**
-* **触发器**: 重新启动时重新打开应用程序
-
-#### 描述和利用
-
-所有要重新打开的应用程序都在plist文件`~/Library/Preferences/ByHost/com.apple.loginwindow..plist`中。
-
-因此,要使重新打开的应用程序启动您自己的应用程序,您只需要**将您的应用程序添加到列表中**。
-
-可以通过列出该目录或使用`ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'`来找到UUID。
-
-要检查将要重新打开的应用程序,可以执行以下操作:
-```bash
-defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin
-#or
-plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow..plist
-```
-要将应用程序添加到此列表中,您可以使用以下方法:
-```bash
-# Adding iTerm2
-/usr/libexec/PlistBuddy -c "Add :TALAppsToRelaunchAtLogin: dict" \
--c "Set :TALAppsToRelaunchAtLogin:$:BackgroundState 2" \
--c "Set :TALAppsToRelaunchAtLogin:$:BundleID com.googlecode.iterm2" \
--c "Set :TALAppsToRelaunchAtLogin:$:Hide 0" \
--c "Set :TALAppsToRelaunchAtLogin:$:Path /Applications/iTerm.app" \
-~/Library/Preferences/ByHost/com.apple.loginwindow..plist
-```
-{% hint style="danger" %}
-添加上一节的内容并注销并重新登录,甚至重新启动都无法让我执行该应用程序。(该应用程序没有被执行,可能需要在执行这些操作时保持运行状态)
-{% endhint %}
-
-### Cron
-
-**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0004/](https://theevilbit.github.io/beyond/beyond\_0004/)
-
-#### 位置
-
-* **`/usr/lib/cron/tabs/`, `/private/var/at/tabs`, `/private/var/at/jobs`, `/etc/periodic/`**
-* 需要root权限才能直接写入。如果可以执行`crontab `则不需要root权限。
-* **触发条件**:取决于cron作业
-
-#### 描述和利用
-
-使用以下命令列出**当前用户**的cron作业:
-```bash
-crontab -l
-```
-您还可以在**`/usr/lib/cron/tabs/`**和**`/var/at/tabs/`**(需要root权限)中查看用户的所有cron作业。
-
-在MacOS中,可以找到以**特定频率**执行脚本的几个文件夹:
-```bash
-ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/
-```
-在这里,您可以找到常规的cron作业、at作业(不常用)和周期性作业(主要用于清理临时文件)。例如,可以使用`periodic daily`来执行每日周期性作业。
-
-要以编程方式添加用户cron作业,可以使用:
-```bash
-echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron
-crontab /tmp/cron
-```
-### 周期性
-
-Writeup: [https://theevilbit.github.io/beyond/beyond\_0019/](https://theevilbit.github.io/beyond/beyond\_0019/)
-
-#### 位置
-
-* `/etc/periodic/daily`, `/etc/periodic/weekly`, `/etc/periodic/monthly`, `/usr/local/etc/periodic`
-* 需要 root 权限
-* **触发条件**:时间到达时
-* `/etc/daily.local`, `/etc/weekly.local` 或 `/etc/monthly.local`
-* 需要 root 权限
-* **触发条件**:时间到达时
-
-#### 描述和利用
-
-周期性脚本(**`/etc/periodic`**)是由在 `/System/Library/LaunchDaemons/com.apple.periodic*` 中配置的**启动守护程序**执行的。请注意,存储在 `/etc/periodic/` 中的脚本将以**文件的所有者身份**执行,因此这对于潜在的特权升级无效。
-
-{% code overflow="wrap" %}
-```bash
-# Launch daemons that will execute the periodic scripts
-ls -l /System/Library/LaunchDaemons/com.apple.periodic*
--rw-r--r-- 1 root wheel 887 May 13 00:29 /System/Library/LaunchDaemons/com.apple.periodic-daily.plist
--rw-r--r-- 1 root wheel 895 May 13 00:29 /System/Library/LaunchDaemons/com.apple.periodic-monthly.plist
--rw-r--r-- 1 root wheel 891 May 13 00:29 /System/Library/LaunchDaemons/com.apple.periodic-weekly.plist
-
-# The scripts located in their locations
-ls -lR /etc/periodic
-total 0
-drwxr-xr-x 11 root wheel 352 May 13 00:29 daily
-drwxr-xr-x 5 root wheel 160 May 13 00:29 monthly
-drwxr-xr-x 3 root wheel 96 May 13 00:29 weekly
-
-/etc/periodic/daily:
-total 72
--rwxr-xr-x 1 root wheel 1642 May 13 00:29 110.clean-tmps
--rwxr-xr-x 1 root wheel 695 May 13 00:29 130.clean-msgs
-[...]
-
-/etc/periodic/monthly:
-total 24
--rwxr-xr-x 1 root wheel 888 May 13 00:29 199.rotate-fax
--rwxr-xr-x 1 root wheel 1010 May 13 00:29 200.accounting
--rwxr-xr-x 1 root wheel 606 May 13 00:29 999.local
-
-/etc/periodic/weekly:
-total 8
--rwxr-xr-x 1 root wheel 620 May 13 00:29 999.local
-```
-{% endcode %}
-
-还有其他定期脚本将在 **`/etc/defaults/periodic.conf`** 中执行:
-```bash
-grep "Local scripts" /etc/defaults/periodic.conf
-daily_local="/etc/daily.local" # Local scripts
-weekly_local="/etc/weekly.local" # Local scripts
-monthly_local="/etc/monthly.local" # Local scripts
-```
-如果你成功写入文件`/etc/daily.local`、`/etc/weekly.local`或`/etc/monthly.local`,它们将会**在早晚某个时候被执行**。
-
-### PAM
-
-Writeup: [Linux Hacktricks PAM](../linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md)\
-Writeup: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.github.io/beyond/beyond\_0005/)
-
-#### 位置
-
-* 必须具备 root 权限
-
-#### 描述
-
-由于 PAM 更加关注在 macOS 中的**持久性**和恶意软件,本文不会详细解释,**请阅读 writeup 以更好地理解这个技术**。
-
-### SSHRC
-
-Writeup: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.github.io/beyond/beyond\_0006/)
-
-#### 位置
-
-* **`~/.ssh/rc`**
-* **触发条件**:通过 SSH 登录
-* **`/etc/ssh/sshrc`**
-* 需要 root 权限
-* **触发条件**:通过 SSH 登录
-
-#### 描述
-
-默认情况下,除非在`/etc/ssh/sshd_config`中设置了`PermitUserRC no`,当用户通过 SSH 登录时,脚本`/etc/ssh/sshrc`和`~/.ssh/rc`将被执行。
-
### xbar
Writeup: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit.github.io/beyond/beyond\_0007/)
+* 有用于绕过沙盒的功能:[✅](https://emojipedia.org/check-mark-button)
+* 但需要安装xbar
+
#### 位置
* **`~/Library/Application\ Support/xbar/plugins/`**
-* **触发条件**:xbar 启动时
+* **触发器**:一旦执行xbar
+
+### Hammerspoon
+
+**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0008/](https://theevilbit.github.io/beyond/beyond\_0008/)
+
+有用于绕过沙盒的功能:[✅](https://emojipedia.org/check-mark-button)
+
+* 但需要安装Hammerspoon
+
+#### 位置
+
+* **`~/.hammerspoon/init.lua`**
+* **触发器**:一旦执行hammerspoon
#### 描述
-如果安装了流行的程序 [**xbar**](https://github.com/matryer/xbar),可以在**`~/Library/Application\ Support/xbar/plugins/`**中编写一个 shell 脚本,在 xbar 启动时执行该脚本:
+[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) 是一款自动化工具,允许通过LUA脚本语言进行macOS脚本编写。我们甚至可以嵌入完整的AppleScript代码以及运行shell脚本。
+
+该应用程序寻找一个名为`~/.hammerspoon/init.lua`的单个文件,并在启动时执行该脚本。
+```bash
+cat > "$HOME/.hammerspoon/init.lua" << EOF
+hs.execute("id > /tmp/hs.txt")
+EOF
+```
+### SSHRC
+
+写作:[https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.github.io/beyond/beyond\_0006/)
+
+* 用于绕过沙盒的有用工具:[✅](https://emojipedia.org/check-mark-button)
+* 但需要启用和使用ssh
+
+#### 位置
+
+* **`~/.ssh/rc`**
+* **触发条件**:通过ssh登录
+* **`/etc/ssh/sshrc`**
+* 需要root权限
+* **触发条件**:通过ssh登录
+
+#### 描述和利用
+
+默认情况下,除非在`/etc/ssh/sshd_config`中设置了`PermitUserRC no`,当用户通过SSH登录时,脚本`/etc/ssh/sshrc`和`~/.ssh/rc`将被执行。
+
+#### 描述
+
+如果安装了流行的程序[**xbar**](https://github.com/matryer/xbar),可以在**`~/Library/Application\ Support/xbar/plugins/`**中编写一个shell脚本,当xbar启动时将被执行:
```bash
cat > "$HOME/Library/Application Support/xbar/plugins/a.sh" << EOF
#!/bin/bash
@@ -349,102 +460,159 @@ touch /tmp/xbar
EOF
chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"
```
-### Hammerspoon
+### **登录项**
-**写作**: [https://theevilbit.github.io/beyond/beyond\_0008/](https://theevilbit.github.io/beyond/beyond\_0008/)
+写作:[https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.github.io/beyond/beyond\_0003/)
+
+* 用于绕过沙盒的有用工具:[✅](https://emojipedia.org/check-mark-button)
+* 但需要使用参数执行 `osascript`
#### 位置
-* **`~/.hammerspoon/init.lua`**
-* **触发器**: 一旦执行 Hammerspoon
+* **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**
+* **触发器:**登录
+* 利用负载存储调用 **`osascript`**
+* **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
+* **触发器:**登录
+* 需要 root 权限
#### 描述
-[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) 是一个自动化工具,允许通过 LUA 脚本语言进行 macOS 脚本编写。我们甚至可以嵌入完整的 AppleScript 代码以及运行 shell 脚本。
-
-该应用程序寻找一个名为 `~/.hammerspoon/init.lua` 的单个文件,并在启动时执行该脚本。
+在系统偏好设置 -> 用户与群组 -> **登录项** 中,您可以找到用户登录时要执行的**项目**。\
+可以通过命令行列出、添加和删除它们:
```bash
-cat > "$HOME/.hammerspoon/init.lua" << EOF
-hs.execute("id > /tmp/hs.txt")
-EOF
+#List all items:
+osascript -e 'tell application "System Events" to get the name of every login item'
+
+#Add an item:
+osascript -e 'tell application "System Events" to make login item at end with properties {path:"/path/to/itemname", hidden:false}'
+
+#Remove an item:
+osascript -e 'tell application "System Events" to delete login item "itemname"'
```
-### 首选项面板
+这些项目存储在文件**`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**中。
-写作:[https://theevilbit.github.io/beyond/beyond\_0009/](https://theevilbit.github.io/beyond/beyond\_0009/)
+**登录项**也可以使用API [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc)来指示,该API将配置存储在**`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**中。
+
+### 将ZIP文件作为登录项
+
+(请参阅有关登录项的上一节,这是一个扩展)
+
+如果将**ZIP**文件存储为**登录项**,则**`Archive Utility`**将打开它,如果ZIP文件例如存储在**`~/Library`**中,并且包含具有后门的文件夹**`LaunchAgents/file.plist`**,那么该文件夹将被创建(默认情况下不会创建),并且plist将被添加,因此下次用户再次登录时,将执行plist中指定的**后门**。
+
+另一个选项是在用户主目录下创建文件**`.bash_profile`**和**`.zshenv`**,因此如果LaunchAgents文件夹已经存在,此技术仍将起作用。
+
+### At
+
+写作:[https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit.github.io/beyond/beyond\_0014/)
#### 位置
-* **`/System/Library/PreferencePanes`**
-* **`/Library/PreferencePanes`**
-* **`~/Library/PreferencePanes`**
+* 需要**执行** **`at`** 并且必须**启用**
-#### 描述
+#### **描述**
-看起来这个方法已经不再起作用了。
+“At tasks”用于**在特定时间安排任务**。\
+这些任务与cron不同,它们是**一次性任务**,在执行后会被删除。但是,它们将**在系统重启后保留**,因此不能将其排除为潜在威胁。
-### Spotlight 导入器
+默认情况下,它们是**禁用的**,但**root**用户可以使用以下命令**启用**它们:
+```bash
+sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist
+```
+这将在1小时内创建一个文件:
+```bash
+echo "echo 11 > /tmp/at.txt" | at now+1
+```
+使用 `atq` 命令来检查作业队列:
+```shell-session
+sh-3.2# atq
+26 Tue Apr 27 00:46:00 2021
+22 Wed Apr 28 00:29:00 2021
+```
+上面我们可以看到两个已计划的任务。我们可以使用 `at -c JOBNUMBER` 命令打印任务的详细信息。
+```shell-session
+sh-3.2# at -c 26
+#!/bin/sh
+# atrun uid=0 gid=0
+# mail csaby 0
+umask 22
+SHELL=/bin/sh; export SHELL
+TERM=xterm-256color; export TERM
+USER=root; export USER
+SUDO_USER=csaby; export SUDO_USER
+SUDO_UID=501; export SUDO_UID
+SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.co51iLHIjf/Listeners; export SSH_AUTH_SOCK
+__CF_USER_TEXT_ENCODING=0x0:0:0; export __CF_USER_TEXT_ENCODING
+MAIL=/var/mail/root; export MAIL
+PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin; export PATH
+PWD=/Users/csaby; export PWD
+SHLVL=1; export SHLVL
+SUDO_COMMAND=/usr/bin/su; export SUDO_COMMAND
+HOME=/var/root; export HOME
+LOGNAME=root; export LOGNAME
+LC_CTYPE=UTF-8; export LC_CTYPE
+SUDO_GID=20; export SUDO_GID
+_=/usr/bin/at; export _
+cd /Users/csaby || {
+echo 'Execution directory inaccessible' >&2
+exit 1
+}
+unset OLDPWD
+echo 11 > /tmp/at.txt
+```
+{% hint style="warning" %}
+如果未启用 AT 任务,则创建的任务将不会被执行。
+{% endhint %}
-写作:[https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.github.io/beyond/beyond\_0011/)
+**作业文件**可以在 `/private/var/at/jobs/` 找到。
+```
+sh-3.2# ls -l /private/var/at/jobs/
+total 32
+-rw-r--r-- 1 root wheel 6 Apr 27 00:46 .SEQ
+-rw------- 1 root wheel 0 Apr 26 23:17 .lockfile
+-r-------- 1 root wheel 803 Apr 27 00:46 a00019019bdcd2
+-rwx------ 1 root wheel 803 Apr 27 00:46 a0001a019bdcd2
+```
+文件名包含队列、作业编号和计划运行时间。例如,让我们看看`a0001a019bdcd2`。
-#### 位置
+* `a` - 这是队列
+* `0001a` - 十六进制的作业编号,`0x1a = 26`
+* `019bdcd2` - 十六进制的时间。它表示自纪元以来经过的分钟数。`0x019bdcd2`在十进制中是`26991826`。如果我们将其乘以60,我们得到`1619509560`,即`GMT: 2021年4月27日,星期二7:46:00`。
-* **`/Library/Spotlight`**
-* **`~/Library/Spotlight`**
-
-#### 描述
-
-你将进入一个**严格的沙盒**,所以你可能不想使用这个技术。
-
-### 音频插件
-
-写作:[https://theevilbit.github.io/beyond/beyond\_0013/](https://theevilbit.github.io/beyond/beyond\_0013/)\
-写作:[https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://posts.specterops.io/audio-unit-plug-ins-896d3434a882)
-
-#### 位置
-
-* **`/Library/Audio/Plug-Ins/HAL`**
-* 需要 root 权限
-* **触发器**:重新启动 coreaudiod 或计算机
-* **`/Library/Audio/Plug-ins/Components`**
-* 需要 root 权限
-* **触发器**:重新启动 coreaudiod 或计算机
-* **`~/Library/Audio/Plug-ins/Components`**
-* **触发器**:重新启动 coreaudiod 或计算机
-* **`/System/Library/Components`**
-* 需要 root 权限
-* **触发器**:重新启动 coreaudiod 或计算机
-
-#### 描述
-
-根据之前的写作,可以**编译一些音频插件**并加载它们。
+如果我们打印作业文件,我们会发现它包含了我们使用`at -c`得到的相同信息。
### 文件夹操作
-写作:[https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\
-写作:[https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d)
+Writeup: [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\
+Writeup: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d)
+
+* 用于绕过沙箱:[✅](https://emojipedia.org/check-mark-button)
+* 但您需要能够使用参数调用osascript并能够配置文件夹操作
#### 位置
-* `/Library/Scripts/Folder Action Scripts`
-* 需要 root 权限
-* `~/Library/Scripts/Folder Action Scripts`
+* **`/Library/Scripts/Folder Action Scripts`**
+* 需要root权限
+* **触发器**:访问指定的文件夹
+* **`~/Library/Scripts/Folder Action Scripts`**
+* **触发器**:访问指定的文件夹
#### 描述和利用
-当附加了文件夹操作脚本的文件夹中添加或删除项目,或者打开、关闭、移动或调整其窗口时,将执行文件夹操作脚本:
+当附加了文件夹操作的文件夹添加或删除项目,或者打开、关闭、移动或调整其窗口时,将执行文件夹操作脚本:
-* 通过 Finder UI 打开文件夹
-* 向文件夹中添加文件(可以通过拖放或甚至在终端的 shell 提示符中完成)
-* 从文件夹中删除文件(可以通过拖放或甚至在终端的 shell 提示符中完成)
-* 通过 UI 导航离开文件夹
+* 通过Finder UI打开文件夹
+* 向文件夹添加文件(可以通过拖放或甚至在终端的shell提示符中完成)
+* 从文件夹中删除文件(可以通过拖放或甚至在终端的shell提示符中完成)
+* 通过UI导航离开文件夹
-有几种实现方法:
+有几种实现方式:
-1. 使用 [Automator](https://support.apple.com/guide/automator/welcome/mac) 程序创建一个文件夹操作工作流文件(.workflow)并将其安装为服务。
+1. 使用[Automator](https://support.apple.com/guide/automator/welcome/mac)程序创建一个文件夹操作工作流文件(.workflow)并将其安装为服务。
2. 右键单击文件夹,选择“文件夹操作设置...”,“运行服务”,并手动附加脚本。
-3. 使用 OSAScript 向 `System Events.app` 发送 Apple Event 消息,以编程方式查询和注册新的“文件夹操作”。
+3. 使用OSAScript向`System Events.app`发送Apple Event消息,以编程方式查询和注册新的“文件夹操作”。
-* 这是使用 OSAScript 实现持久性的方法,通过向 `System Events.app` 发送 Apple Event 消息。
+* 这是使用OSAScript发送Apple Event消息到`System Events.app`实现持久性的方法
将执行以下脚本:
@@ -496,13 +664,13 @@ app.doShellScript("cp -R ~/Desktop /tmp/asd123");
mkdir -p "$HOME/Library/Scripts/Folder Action Scripts"
mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
```
-然后,打开`Folder Actions Setup`应用程序,选择您想要监视的**文件夹**,并在您的情况下选择**`folder.scpt`**(在我的情况下,我称其为output2.scp):
+然后,打开`Folder Actions Setup`应用程序,选择**要监视的文件夹**,并在您的情况下选择**`folder.scpt`**(在我的情况下,我称其为output2.scp):
现在,如果您使用**Finder**打开该文件夹,您的脚本将被执行。
-此配置以base64格式存储在位于**`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`**的**plist**中。
+此配置存储在以base64格式存储的**plist**中,位于**`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`**。
现在,让我们尝试在没有GUI访问权限的情况下准备此持久性:
@@ -518,23 +686,42 @@ mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
4. 打开Folder Actions Setup.app以使用此配置:`open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"`
{% hint style="danger" %}
-对我来说,这没有起作用,但这是写作的说明:(
+对我来说,这没有起作用,但这是写作的说明:(
{% endhint %}
+### Spotlight Importers
+
+写作:[https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.github.io/beyond/beyond\_0011/)
+
+* 用于绕过沙箱:[🟠](https://emojipedia.org/large-orange-circle)
+* 但您将进入一个新的沙箱
+
+#### 位置
+
+* **`/Library/Spotlight`**
+* **`~/Library/Spotlight`**
+
+#### 描述
+
+您最终将进入一个**严格的沙箱**,因此您可能不想使用此技术。
+
### Dock快捷方式
写作:[https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.github.io/beyond/beyond\_0027/)
+* 用于绕过沙箱:[✅](https://emojipedia.org/check-mark-button)
+* 但您需要在系统中安装一个恶意应用程序
+
#### 位置
* `~/Library/Preferences/com.apple.dock.plist`
-* **触发器**:当用户在Dock中点击应用程序时
+* **触发器**:当用户单击Dock中的应用程序时
#### 描述和利用
-Dock中显示的所有应用程序都在plist文件中指定:**`~/Library/Preferences/com.apple.dock.plist`**
+出现在Dock中的所有应用程序都在plist文件中指定:**`~/Library/Preferences/com.apple.dock.plist`**
-可以使用以下命令**添加一个应用程序**:
+只需使用以下命令即可**添加一个应用程序**:
{% code overflow="wrap" %}
```bash
@@ -546,62 +733,27 @@ killall Dock
```
{% endcode %}
-### emond
-
-Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
-
-我在我的 macOS 中找不到这个组件,所以要获取更多信息,请查看 writeup。
-
-### QuickLook 插件
-
-Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)
-
-#### 位置
-
-* `/System/Library/QuickLook`
-* `/Library/QuickLook`
-* `~/Library/QuickLook`
-* `/Applications/AppNameHere/Contents/Library/QuickLook/`
-* `~/Applications/AppNameHere/Contents/Library/QuickLook/`
-
-#### 描述和利用
-
-当你**触发文件的预览**(在 Finder 中选择文件后按下空格键)并且安装了**支持该文件类型的插件**时,QuickLook 插件会被执行。
-
-你可以编译自己的 QuickLook 插件,将其放置在上述位置之一以加载它,然后转到支持的文件并按下空格键来触发它。
-
-### 授权插件
-
-Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)\
-Writeup: [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65)
-
-#### 位置
-
-* `/Library/Security/SecurityAgentPlugins/`
-* 需要 root 权限
-* 还需要
-
-#### 描述和利用
-
-待定
-
-### 调色器
+### 颜色选择器
Writeup: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.github.io/beyond/beyond\_0017/)
+* 用于绕过沙盒的有用工具:[🟠](https://emojipedia.org/large-orange-circle)
+* 需要发生一个非常具体的动作
+* 你将进入另一个沙盒
+
#### 位置
* `/Library/ColorPickers`
* 需要 root 权限
-* 触发方式:使用调色器
+* 触发条件:使用颜色选择器
* `~/Library/ColorPickers`
-* 触发方式:使用调色器
+* 触发条件:使用颜色选择器
#### 描述和利用
-使用你的代码编译一个调色器 bundle(你可以使用[**这个作为例子**](https://github.com/viktorstrate/color-picker-plus)),并添加一个构造函数(就像[屏幕保护程序部分](macos-auto-start-locations.md#screen-saver)中的那样),然后将 bundle 复制到 `~/Library/ColorPickers`。
+**编译一个**带有你的代码的颜色选择器**捆绑包**(你可以使用[**这个作为例子**](https://github.com/viktorstrate/color-picker-plus)),并添加一个构造函数(就像[屏幕保护程序部分](macos-auto-start-locations.md#screen-saver)中的那样),然后将捆绑包复制到`~/Library/ColorPickers`。
-然后,当触发调色器时,你的代码也应该被触发。
+然后,当触发颜色选择器时,你的代码也应该被执行。
请注意,加载你的库的二进制文件有一个**非常严格的沙盒**:`/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64`
@@ -616,83 +768,44 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.g
```
{% endcode %}
-### XQuartz
+### Finder Sync插件
-Writeup: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
+**解读**: [https://theevilbit.github.io/beyond/beyond\_0026/](https://theevilbit.github.io/beyond/beyond\_0026/)\
+**解读**: [https://objective-see.org/blog/blog\_0x11.html](https://objective-see.org/blog/blog\_0x11.html)
+
+* 用于绕过沙盒的实用性: **否,因为你需要执行自己的应用程序**
#### 位置
-* **`/opt/X11/etc/X11/xinit/privileged_startx.d`**
-* 需要root权限
-* **触发条件**:使用XQuartz
+* 特定的应用程序
#### 描述和利用
-XQuartz在macOS中**不再安装**,如果您想获取更多信息,请查看writeup。
+一个包含Finder Sync扩展的应用程序示例[**可以在这里找到**](https://github.com/D00MFist/InSync)。
-### kext
-
-要将KEXT安装为启动项,它需要**安装在以下位置之一**:
-
-* `/System/Library/Extensions`
-* 内置于OS X操作系统中的KEXT文件。
-* `/Library/Extensions`
-* 第三方软件安装的KEXT文件
-
-您可以使用以下命令列出当前加载的kext文件:
+应用程序可以拥有`Finder Sync扩展`。这个扩展将放在将要执行的应用程序中。此外,为了使扩展能够执行其代码,它**必须使用一些有效的苹果开发者证书进行签名**,它必须**被沙盒化**(尽管可以添加放宽的例外),并且必须注册到类似以下的内容中:
```bash
-kextstat #List loaded kext
-kextload /path/to/kext.kext #Load a new one based on path
-kextload -b com.apple.driver.ExampleBundle #Load a new one based on path
-kextunload /path/to/kext.kext
-kextunload -b com.apple.driver.ExampleBundle
+pluginkit -a /Applications/FindIt.app/Contents/PlugIns/FindItSync.appex
+pluginkit -e use -i com.example.InSync.InSync
```
-有关[**内核扩展的更多信息,请查看此部分**](macos-security-and-privilege-escalation/mac-os-architecture#i-o-kit-drivers)。
-
-### amstoold
-
-Writeup: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.github.io/beyond/beyond\_0029/)
-
-#### 位置
-
-* **`/usr/local/bin/amstoold`**
-* 需要 root 权限
-
-#### 描述和利用
-
-显然,`/System/Library/LaunchAgents/com.apple.amstoold.plist` 中的 `plist` 使用了这个二进制文件,同时暴露了一个 XPC 服务...问题是该二进制文件不存在,因此你可以将某个东西放在那里,当调用 XPC 服务时,你的二进制文件将被调用。
-
-我在我的 macOS 中找不到这个文件了。
-
-### xsanctl
-
-Writeup: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.github.io/beyond/beyond\_0015/)
-
-#### 位置
-
-* **`/Library/Preferences/Xsan/.xsanrc`**
-* 需要 root 权限
-* **触发条件**:运行服务(很少发生)
-
-#### 描述和利用
-
-显然,运行此脚本并不常见,我甚至在我的 macOS 中找不到它,所以如果你想获取更多信息,请查看 writeup。
-
### 屏幕保护程序
Writeup: [https://theevilbit.github.io/beyond/beyond\_0016/](https://theevilbit.github.io/beyond/beyond\_0016/)\
Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://posts.specterops.io/saving-your-access-d562bf5bf90b)
+* 用于绕过沙箱的有用工具:[🟠](https://emojipedia.org/large-orange-circle)
+* 但你将会进入一个常见的应用程序沙箱
+
#### 位置
* `/System/Library/Screen Savers`
* 需要 root 权限
-* **触发条件**:选择屏幕保护程序
+* **触发器**:选择屏幕保护程序
* `/Library/Screen Savers`
* 需要 root 权限
-* **触发条件**:选择屏幕保护程序
+* **触发器**:选择屏幕保护程序
* `~/Library/Screen Savers`
-* **触发条件**:选择屏幕保护程序
+* **触发器**:选择屏幕保护程序
@@ -700,7 +813,7 @@ Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://p
在 Xcode 中创建一个新项目,并选择模板生成一个新的**屏幕保护程序**。然后,将代码添加到其中,例如以下代码以生成日志。
-**构建**它,并将 `.saver` 捆绑包复制到 **`~/Library/Screen Savers`**。然后,打开屏幕保护程序 GUI,如果你只是点击它,它应该生成大量的日志:
+**构建**它,并将 `.saver` 捆绑包复制到**`~/Library/Screen Savers`**。然后,打开屏幕保护程序 GUI,只需点击它,它就会生成大量的日志:
{% code overflow="wrap" %}
```bash
@@ -783,177 +896,174 @@ NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__);
@end
```
-### **登录项**
+### ~~Preference Pane~~
-写作:[https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.github.io/beyond/beyond\_0003/)
+{% hint style="danger" %}
+看起来这个方法不再起作用了。
+{% endhint %}
+
+写作:[https://theevilbit.github.io/beyond/beyond\_0009/](https://theevilbit.github.io/beyond/beyond\_0009/)
+
+* 用于绕过沙盒的有用方法:[🟠](https://emojipedia.org/large-orange-circle)
+* 需要特定的用户操作
#### 位置
-* **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**
-* **触发器:**登录
-* 利用负载存储调用**`osascript`**
-* TODO:找到一种直接在磁盘中执行的方法(如果有的话)
-* **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
-* **触发器:**登录
-* 需要 root 权限
+* **`/System/Library/PreferencePanes`**
+* **`/Library/PreferencePanes`**
+* **`~/Library/PreferencePanes`**
#### 描述
-在系统偏好设置 -> 用户与群组 -> **登录项** 中,您可以找到用户登录时要执行的**项目**。\
-可以通过命令行列出、添加和删除它们:
-```bash
-#List all items:
-osascript -e 'tell application "System Events" to get the name of every login item'
+看起来这个方法不再起作用了。
-#Add an item:
-osascript -e 'tell application "System Events" to make login item at end with properties {path:"/path/to/itemname", hidden:false}'
+## Root沙盒绕过
-#Remove an item:
-osascript -e 'tell application "System Events" to delete login item "itemname"'
-```
-这些项目存储在文件**`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**中。
+{% hint style="success" %}
+在这里,您可以找到用于**绕过沙盒**的启动位置,通过将其写入文件并以**root**身份执行,或者需要其他**奇怪的条件**。
+{% endhint %}
-**登录项**也可以使用API [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc)来指示,在这种情况下,配置将存储在**`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**中。
+### 定期执行
-### 将ZIP文件作为登录项
+写作:[https://theevilbit.github.io/beyond/beyond\_0019/](https://theevilbit.github.io/beyond/beyond\_0019/)
-如果将**ZIP**文件存储为**登录项**,则**`Archive Utility`**将打开它,如果ZIP文件例如存储在**`~/Library`**中,并且包含具有后门的文件夹**`LaunchAgents/file.plist`**,那么该文件夹将被创建(默认情况下不会创建),并且plist将被添加,因此下次用户再次登录时,将执行plist中指定的**后门**。
-
-另一个选项是在用户主目录中创建文件**`.bash_profile`**和**`.zshenv`**,因此如果文件夹LaunchAgents已经存在,此技术仍将起作用。
-
-### At
-
-Writeup: [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit.github.io/beyond/beyond\_0014/)
+* 用于绕过沙盒的有用方法:[🟠](https://emojipedia.org/large-orange-circle)
+* 但需要root权限
#### 位置
-* 需要**执行** **`at`** 并且必须**启用**
+* `/etc/periodic/daily`,`/etc/periodic/weekly`,`/etc/periodic/monthly`,`/usr/local/etc/periodic`
+* 需要root权限
+* **触发器**:当时间到达时
+* `/etc/daily.local`,`/etc/weekly.local`或`/etc/monthly.local`
+* 需要root权限
+* **触发器**:当时间到达时
-#### **描述**
+#### 描述和利用
-“At tasks”用于**在特定时间安排任务**。\
-这些任务与cron不同,它们是**一次性任务**,在执行后会被删除。但是,它们将**在系统重启后保留**,因此不能将其排除为潜在威胁。
+定期执行脚本(**`/etc/periodic`**)是由在`/System/Library/LaunchDaemons/com.apple.periodic*`中配置的**启动守护程序**执行的。请注意,存储在`/etc/periodic/`中的脚本将以**文件的所有者身份执行**,因此对于潜在的特权升级,这种方法不起作用。
-默认情况下,它们是**禁用的**,但**root**用户可以使用以下命令**启用**它们:
+{% code overflow="wrap" %}
```bash
-sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist
+# Launch daemons that will execute the periodic scripts
+ls -l /System/Library/LaunchDaemons/com.apple.periodic*
+-rw-r--r-- 1 root wheel 887 May 13 00:29 /System/Library/LaunchDaemons/com.apple.periodic-daily.plist
+-rw-r--r-- 1 root wheel 895 May 13 00:29 /System/Library/LaunchDaemons/com.apple.periodic-monthly.plist
+-rw-r--r-- 1 root wheel 891 May 13 00:29 /System/Library/LaunchDaemons/com.apple.periodic-weekly.plist
+
+# The scripts located in their locations
+ls -lR /etc/periodic
+total 0
+drwxr-xr-x 11 root wheel 352 May 13 00:29 daily
+drwxr-xr-x 5 root wheel 160 May 13 00:29 monthly
+drwxr-xr-x 3 root wheel 96 May 13 00:29 weekly
+
+/etc/periodic/daily:
+total 72
+-rwxr-xr-x 1 root wheel 1642 May 13 00:29 110.clean-tmps
+-rwxr-xr-x 1 root wheel 695 May 13 00:29 130.clean-msgs
+[...]
+
+/etc/periodic/monthly:
+total 24
+-rwxr-xr-x 1 root wheel 888 May 13 00:29 199.rotate-fax
+-rwxr-xr-x 1 root wheel 1010 May 13 00:29 200.accounting
+-rwxr-xr-x 1 root wheel 606 May 13 00:29 999.local
+
+/etc/periodic/weekly:
+total 8
+-rwxr-xr-x 1 root wheel 620 May 13 00:29 999.local
```
-这将在1小时内创建一个文件:
+{% endcode %}
+
+还有其他定期脚本将在 **`/etc/defaults/periodic.conf`** 中执行:
```bash
-echo "echo 11 > /tmp/at.txt" | at now+1
+grep "Local scripts" /etc/defaults/periodic.conf
+daily_local="/etc/daily.local" # Local scripts
+weekly_local="/etc/weekly.local" # Local scripts
+monthly_local="/etc/monthly.local" # Local scripts
```
-使用 `atq` 命令来检查作业队列:
-```shell-session
-sh-3.2# atq
-26 Tue Apr 27 00:46:00 2021
-22 Wed Apr 28 00:29:00 2021
-```
-上面我们可以看到两个已计划的任务。我们可以使用 `at -c JOBNUMBER` 命令打印任务的详细信息。
-```shell-session
-sh-3.2# at -c 26
-#!/bin/sh
-# atrun uid=0 gid=0
-# mail csaby 0
-umask 22
-SHELL=/bin/sh; export SHELL
-TERM=xterm-256color; export TERM
-USER=root; export USER
-SUDO_USER=csaby; export SUDO_USER
-SUDO_UID=501; export SUDO_UID
-SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.co51iLHIjf/Listeners; export SSH_AUTH_SOCK
-__CF_USER_TEXT_ENCODING=0x0:0:0; export __CF_USER_TEXT_ENCODING
-MAIL=/var/mail/root; export MAIL
-PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin; export PATH
-PWD=/Users/csaby; export PWD
-SHLVL=1; export SHLVL
-SUDO_COMMAND=/usr/bin/su; export SUDO_COMMAND
-HOME=/var/root; export HOME
-LOGNAME=root; export LOGNAME
-LC_CTYPE=UTF-8; export LC_CTYPE
-SUDO_GID=20; export SUDO_GID
-_=/usr/bin/at; export _
-cd /Users/csaby || {
-echo 'Execution directory inaccessible' >&2
-exit 1
-}
-unset OLDPWD
-echo 11 > /tmp/at.txt
-```
-{% hint style="warning" %}
-如果未启用 AT 任务,则创建的任务将不会被执行。
-{% endhint %}
+如果你成功写入文件`/etc/daily.local`、`/etc/weekly.local`或`/etc/monthly.local`,它们将会**在早晚某个时候被执行**。
-**作业文件**可以在 `/private/var/at/jobs/` 找到。
-```
-sh-3.2# ls -l /private/var/at/jobs/
-total 32
--rw-r--r-- 1 root wheel 6 Apr 27 00:46 .SEQ
--rw------- 1 root wheel 0 Apr 26 23:17 .lockfile
--r-------- 1 root wheel 803 Apr 27 00:46 a00019019bdcd2
--rwx------ 1 root wheel 803 Apr 27 00:46 a0001a019bdcd2
-```
-文件名包含队列、作业编号和计划运行时间的信息。例如,让我们看看`a0001a019bdcd2`。
+### PAM
-* `a` - 这是队列
-* `0001a` - 十六进制的作业编号,`0x1a = 26`
-* `019bdcd2` - 十六进制的时间。它表示自纪元以来经过的分钟数。`0x019bdcd2`在十进制中是`26991826`。如果我们将其乘以60,我们得到`1619509560`,即`GMT: 2021年4月27日,星期二7:46:00`。
+Writeup: [Linux Hacktricks PAM](../linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md)\
+Writeup: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.github.io/beyond/beyond\_0005/)
-如果我们打印作业文件,我们会发现它包含了我们使用`at -c`得到的相同信息。
-
-### 登录/注销钩子
-
-**文档**: [https://theevilbit.github.io/beyond/beyond\_0022/](https://theevilbit.github.io/beyond/beyond\_0022/)
+* 用于绕过沙盒的有用技术: [🟠](https://emojipedia.org/large-orange-circle)
+* 但你需要是root用户
#### 位置
-* 您需要能够执行类似于`defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh`的命令
+* 总是需要root权限
-它们已被弃用,但仍可用于在用户登录时执行命令。
-```bash
-cat > $HOME/hook.sh << EOF
-#!/bin/bash
-echo 'My is: \`id\`' > /tmp/login_id.txt
-EOF
-chmod +x $HOME/hook.sh
-defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
-defaults write com.apple.loginwindow LogoutHook /Users/$USER/hook.sh
-```
-这个设置存储在 `/Users/$USER/Library/Preferences/com.apple.loginwindow.plist` 文件中。
-```bash
-defaults read /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
-{
-LoginHook = "/Users/username/hook.sh";
-LogoutHook = "/Users/username/hook.sh";
-MiniBuddyLaunch = 0;
-TALLogoutReason = "Shut Down";
-TALLogoutSavesState = 0;
-oneTimeSSMigrationComplete = 1;
-}
-```
-要删除它:
-```bash
-defaults delete com.apple.loginwindow LoginHook
-defaults delete com.apple.loginwindow LogoutHook
-```
-**根用户**的自动启动位置存储在**`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`**中。
+#### 描述和利用
-{% hint style="danger" %}
-对我来说,这个方法不起作用,无论是使用用户LoginHook还是根用户LoginHook。
-{% endhint %}
+由于PAM更加关注在macOS中的持久性和恶意软件,本博客不会详细解释,**请阅读相关的文章以更好地理解这个技术**。
+### 授权插件
+
+Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)\
+Writeup: [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65)
+
+* 用于绕过沙盒的有用技术: [🟠](https://emojipedia.org/large-orange-circle)
+* 但你需要是root用户并进行额外的配置
+
+#### 位置
+
+* `/Library/Security/SecurityAgentPlugins/`
+* 需要root权限
+* 还需要配置授权数据库以使用插件
+
+#### 描述和利用
+
+你可以创建一个授权插件,当用户登录时执行该插件以保持持久性。有关如何创建这些插件的更多信息,请查阅之前的文章(请注意,编写不良的插件可能会将你锁在外面,你将需要从恢复模式清理你的Mac)。
+
+### Man.conf
+
+Writeup: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.github.io/beyond/beyond\_0030/)
+
+* 用于绕过沙盒的有用技术: [🟠](https://emojipedia.org/large-orange-circle)
+* 但你需要是root用户并且用户必须使用man命令
+
+#### 位置
+
+* **`/private/etc/man.conf`**
+* 需要root权限
+* **`/private/etc/man.conf`**: 每次使用man命令时
+
+#### 描述和利用
+
+配置文件**`/private/etc/man.conf`**指示打开man文档文件时要使用的二进制文件/脚本。因此,可以修改可执行文件的路径,以便用户每次使用man命令阅读文档时都会执行一个后门。
+
+例如,在**`/private/etc/man.conf`**中设置:
+```
+MANPAGER /tmp/view
+```
+然后创建 `/tmp/view` 文件:
+```bash
+#!/bin/zsh
+
+touch /tmp/manconf
+
+/usr/bin/less -s
+```
### Apache2
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
+* 有用于绕过沙盒的功能:[🟠](https://emojipedia.org/large-orange-circle)
+* 但你需要是 root 用户并且 Apache 需要在运行中
+
#### 位置
* **`/etc/apache2/httpd.conf`**
-* 需要根权限
-* 触发条件:当启动Apache2时
+* 需要 root 权限
+* 触发条件:当 Apache2 启动时
-#### 描述和利用方法
+#### 描述和利用
-您可以在`/etc/apache2/httpd.conf`中指示加载模块,添加一行代码,例如:
+你可以在 /etc/apache2/httpd.conf 中添加一行来指示加载一个模块,例如:
```bash
LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority"
```
@@ -977,32 +1087,17 @@ printf("[+] dylib constructor called from %s\n", argv[0]);
syslog(LOG_ERR, "[+] dylib constructor called from %s\n", argv[0]);
}
```
-### Finder Sync插件
-
-**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0026/](https://theevilbit.github.io/beyond/beyond\_0026/)\
-**Writeup**: [https://objective-see.org/blog/blog\_0x11.html](https://objective-see.org/blog/blog\_0x11.html)
-
-#### 位置
-
-* 特定的应用程序
-
-#### 描述和利用
-
-一个应用程序示例,其中包含一个Finder Sync扩展[**可以在这里找到**](https://github.com/D00MFist/InSync)。
-
-应用程序可以拥有`Finder Sync扩展`。这个扩展将放在将要执行的应用程序中。此外,为了使扩展能够执行其代码,它**必须使用一些有效的苹果开发者证书进行签名**,它必须**被沙盒化**(尽管可以添加放宽的例外),并且必须注册到类似以下的东西中:
-```bash
-pluginkit -a /Applications/FindIt.app/Contents/PlugIns/FindItSync.appex
-pluginkit -e use -i com.example.InSync.InSync
-```
### BSM审计框架
写作:[https://theevilbit.github.io/beyond/beyond\_0031/](https://theevilbit.github.io/beyond/beyond\_0031/)
+* 用于绕过沙盒的有用工具:[🟠](https://emojipedia.org/large-orange-circle)
+* 但需要以root身份运行auditd并引发警告
+
#### 位置
* **`/etc/security/audit_warn`**
-* 需要Root权限
+* 需要root权限
* **触发条件**:当auditd检测到警告时
#### 描述和利用
@@ -1011,94 +1106,17 @@ pluginkit -e use -i com.example.InSync.InSync
```bash
echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
```
-您可以使用`sudo audit -n`来强制发出警告。
-
-### Man.conf
-
-Writeup: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.github.io/beyond/beyond\_0030/)
-
-#### 位置
-
-* **`/private/etc/man.conf`**
-* 需要root权限
-* **`/private/etc/man.conf`**: 每当使用man命令时
-
-#### 描述和利用
-
-配置文件**`/private/etc/man.conf`**指示打开man文档文件时要使用的二进制文件/脚本。因此,可以修改可执行文件的路径,以便每当用户使用man命令阅读文档时,将执行一个后门。
-
-例如,在**`/private/etc/man.conf`**中设置:
-```
-MANPAGER /tmp/view
-```
-然后创建 `/tmp/view` 文件:
-```bash
-#!/bin/zsh
-
-touch /tmp/manconf
-
-/usr/bin/less -s
-```
-### 终端
-
-在 **`~/Library/Preferences`** 目录下存储了用户在应用程序中的偏好设置。其中一些偏好设置可以包含执行其他应用程序/脚本的配置。
-
-例如,终端可以在启动时执行一个命令:
-
-
-
-这个配置会在文件 **`~/Library/Preferences/com.apple.Terminal.plist`** 中反映出来,如下所示:
-```bash
-[...]
-"Window Settings" => {
-"Basic" => {
-"CommandString" => "touch /tmp/terminal_pwn"
-"Font" => {length = 267, bytes = 0x62706c69 73743030 d4010203 04050607 ... 00000000 000000cf }
-"FontAntialias" => 1
-"FontWidthSpacing" => 1.004032258064516
-"name" => "Basic"
-"ProfileCurrentVersion" => 2.07
-"RunCommandAsShell" => 0
-"type" => "Window Settings"
-}
-[...]
-```
-所以,如果系统中终端的偏好设置的plist文件可以被覆盖,那么可以使用`open`功能来打开终端并执行该命令。
-
-您可以通过命令行添加此功能:
-
-{% code overflow="wrap" %}
-```bash
-# Add
-/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" 'touch /tmp/terminal-start-command'" $HOME/Library/Preferences/com.apple.Terminal.plist
-/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"RunCommandAsShell\" 0" $HOME/Library/Preferences/com.apple.Terminal.plist
-
-# Remove
-/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" ''" $HOME/Library/Preferences/com.apple.Terminal.plist
-```
-{% endcode %}
-
-### Emond
-
-苹果引入了一种名为**emond**的日志记录机制。看起来它从未完全开发,并且苹果可能已经**放弃**了它以使用其他机制,但它仍然**可用**。
-
-这个鲜为人知的服务对于Mac管理员来说**可能没有太多用处**,但对于威胁行为者来说,一个非常好的理由是将其用作**持久性机制,大多数macOS管理员可能不知道**去寻找。检测到emond的恶意使用不应该很困难,因为该服务的系统LaunchDaemon只会在一个地方寻找要运行的脚本:
-```bash
-ls -l /private/var/db/emondClients
-```
-{% hint style="danger" %}
-**由于这个不常用,所以该文件夹中的任何内容都应该是可疑的**
-{% endhint %}
+您可以使用`sudo audit -n`强制发出警告。
### 启动项
{% hint style="danger" %}
-**这已经被弃用了,所以在以下目录中不应该找到任何内容。**
+**此方法已被弃用,因此在以下目录中不应找到任何内容。**
{% endhint %}
-**StartupItem** 是一个被放置在以下两个文件夹之一的 **目录**:`/Library/StartupItems/` 或 `/System/Library/StartupItems/`
+**启动项**是一个**目录**,它被放置在以下两个文件夹之一:`/Library/StartupItems/` 或 `/System/Library/StartupItems/`
-在这两个位置之一放置一个新的目录后,还需要在该目录中放置另外两个项目。这两个项目是一个 **rc 脚本** 和一个包含一些设置的 **plist**。这个 plist 必须被命名为 "**StartupParameters.plist**"。
+在将新目录放置在这两个位置之一后,还需要在该目录中放置**另外两个项目**。这两个项目是一个**rc脚本**和一个包含一些设置的**plist**。此plist必须被命名为“**StartupParameters.plist**”。
{% tabs %}
{% tab title="StartupParameters.plist" %}
@@ -1140,13 +1158,95 @@ RunService "$1"
{% endtab %}
{% endtabs %}
-### /etc/rc.common
+### emond
{% hint style="danger" %}
-**这在现代 MacOS 版本中不起作用**
+我在我的 macOS 中找不到这个组件,所以要获取更多信息,请查看 writeup
{% endhint %}
-还可以在这里放置**在启动时执行的命令**。以下是一个常规的 rc.common 脚本示例:
+Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
+
+Apple 引入了一个名为 **emond** 的日志记录机制。看起来它从未完全开发,并且可能被 Apple 放弃以开发其他机制,但它仍然可用。
+
+这个鲜为人知的服务对于 Mac 管理员来说可能没有太多用处,但对于威胁行为者来说,一个非常好的理由是将其用作一种持久性机制,大多数 macOS 管理员可能不知道要寻找的地方。检测 emond 的恶意使用不应该很困难,因为该服务的系统 LaunchDaemon 只会在一个地方寻找要运行的脚本:
+```bash
+ls -l /private/var/db/emondClients
+```
+### ~~XQuartz~~
+
+Writeup: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
+
+#### 位置
+
+* **`/opt/X11/etc/X11/xinit/privileged_startx.d`**
+* 需要root权限
+* **触发条件**:使用XQuartz
+
+#### 描述和利用
+
+XQuartz在macOS中**不再安装**,如果您想获取更多信息,请查看writeup。
+
+### ~~kext~~
+
+{% hint style="danger" %}
+即使作为root用户,安装kext也非常复杂,我不会考虑使用它来逃离沙盒或实现持久性(除非您有一个漏洞)
+{% endhint %}
+
+#### 位置
+
+要将KEXT安装为启动项,它需要安装在以下位置之一:
+
+* `/System/Library/Extensions`
+* 内置于OS X操作系统中的KEXT文件。
+* `/Library/Extensions`
+* 第三方软件安装的KEXT文件
+
+您可以使用以下命令列出当前加载的kext文件:
+```bash
+kextstat #List loaded kext
+kextload /path/to/kext.kext #Load a new one based on path
+kextload -b com.apple.driver.ExampleBundle #Load a new one based on path
+kextunload /path/to/kext.kext
+kextunload -b com.apple.driver.ExampleBundle
+```
+有关[**内核扩展的更多信息,请查看此部分**](macos-security-and-privilege-escalation/mac-os-architecture#i-o-kit-drivers)。
+
+### ~~amstoold~~
+
+Writeup: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.github.io/beyond/beyond\_0029/)
+
+#### 位置
+
+* **`/usr/local/bin/amstoold`**
+* 需要 root 权限
+
+#### 描述和利用
+
+显然,`/System/Library/LaunchAgents/com.apple.amstoold.plist` 中的 `plist` 在使用此二进制文件时暴露了一个 XPC 服务...问题是该二进制文件不存在,因此您可以将某些内容放在那里,当调用 XPC 服务时,您的二进制文件将被调用。
+
+我在我的 macOS 中找不到这个了。
+
+### ~~xsanctl~~
+
+Writeup: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.github.io/beyond/beyond\_0015/)
+
+#### 位置
+
+* **`/Library/Preferences/Xsan/.xsanrc`**
+* 需要 root 权限
+* **触发条件**:当服务运行时(很少发生)
+
+#### 描述和利用
+
+显然,运行此脚本并不常见,我甚至在我的 macOS 中找不到它,所以如果您想获取更多信息,请查看 writeup。
+
+### ~~/etc/rc.common~~
+
+{% hint style="danger" %}
+**在现代 MacOS 版本中不起作用**
+{% endhint %}
+
+还可以在此处放置**在启动时执行的命令**。例如常规的 rc.common 脚本示例:
```bash
#
# Common setup for startup scripts.
@@ -1239,15 +1339,7 @@ restart) RestartService ;;
esac
}
```
-### 配置文件
-
-配置文件可以强制用户使用特定的浏览器设置、DNS代理设置或VPN设置。还有许多其他的有效载荷可以被滥用。
-
-您可以运行以下命令来枚举它们:
-```bash
-ls -Rl /Library/Managed\ Preferences/
-```
-### 其他持久化技术和工具
+## 持久化技术和工具
* [https://github.com/cedowens/Persistent-Swift](https://github.com/cedowens/Persistent-Swift)
* [https://github.com/D00MFist/PersistentJXA](https://github.com/D00MFist/PersistentJXA)
@@ -1256,10 +1348,10 @@ ls -Rl /Library/Managed\ Preferences/
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-* 你在一家**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者你想要**获取PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* 你在一个**网络安全公司**工作吗?想要在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)**。**
+* 获取[**官方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来分享你的黑客技巧。**