NTLM | LAN Manager Challenge/Response

作者 f0zz 日期 2022-03-02
NTLM | LAN Manager Challenge/Response

NTLM简介

NTLM是Windows NT早期版本的安全协议。(LM:LAN Manage)是client 通过 telnet 连接server远程登录的验证方式,本地登录验证也会是NTLM认证的形式。

  • 本地登录验证过程

    • 用户密码储存在%SystemRoot%\system32\config\sam文件中,此文件作为储存密码的“数据库”。登录时,先将用户输入的密码转换成NTLM hash然后与本地sam文件中的密码进行对比

      Windows系统下的hash密码格式为:用户名称:RID:LM-HASH值:NT-HASH值,例如:Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC:::表示
        用户名称为:Administrator
          RID为:500
          LM-HASH值为:C8825DB10F2590EAAAD3B435B51404EE
          NT-HASH值为:683020925C5D8569C23AA724774CE6CC
    • image.png

    • winlogon.exe 是用户登录程序,用来管理用户登录和退出

    • lsass.exe Local Security Authority Service、本地安全权限服务 用于本地安全和登录策略(也有可能是早期计算机上的病毒木马文件)

  • 远程登陆/登录到域

    • 如果域控制器是Windows NT 4.0,那么它使用的是NTLM协议进行验证,而Windows 2000 ,Windows 2003大多选择了更加安全可靠的Kerberos协议。Challenge/Response
    • 过程
      • 第一步进行协商,先确定是v1还是v2
        • NTLMv1的Challenge有8位,NTLMv2的Challenge有16位
        • Net-NTLM Hash:v1主要的加密算法是DES ,v2主要加密算法是MD5 (Net-NTLM Hash:Net-NTLM Hash 是基于用户密码的NTLM Hash计算出来的,用于在网络环境下 NTLM 认证的 hash。)
      • 然后进行质询,服务器询问客户端,客户端给出凭证。 | 服务器收到请求,生成随机数称为Challenge然后使用登录用户名对应的NTLM Hash对Challenge进行加密生成Challenge1 ,同时将Challenge发送给客户端 经过NTLM Hash加密后的Challenge为NET NTLM Hash
      • 客户端使用要登陆的账户对应的NTLM Hash对Challenge进行加密生成Response后发给服务端
        最后服务端验证Response是否和Challenge1相同image.png

        NTLM身份验证选项的三个值

        默认值为2
        0 无身份验证
        1 先尝试访问机器的账号与密码,然后使用账号和密码
        2 只使用访问机器的账号和密码

        尝试修改

        1、依次单击【开始】→【运行】,输入”Regedit”,单击【确定】,打开注册表编辑器;
        2、找到路径:HKEY_LOCAL_MACHINE–>System–>CurrentControlSet–>Control–>Lsa–>LmCompatibilityLevel

加密方式

LM Hash :

明文口令是“Welcome”,首先全部转换成大写“WELCOME”,再做将口令字符串大写转后后的字符串变换成二进制串: “WELCOME” -> 57454C434F4D4500000000000000 如果明文口令经过大写变换后的二进制字符串不足14字节,则需要在其后添加0x00补足14字节。然后切割成两组7字节的数据,分别经str_to_key()函数处理得到两组8字节数据:
57454C434F4D45 -str_to_key()-> 56A25288347A348A
00000000000000 -str_to_key()-> 0000000000000000
这两组8字节数据将做为DESKEY对魔术字符串“KGS!@#$%”进行标准DES加密
"KGS!@#$%" -> 4B47532140232425
56A25288347A348A -对4B47532140232425进行标准DES加密-> C23413A8A1E7665F
0000000000000000 -对4B47532140232425进行标准DES加密-> AAD3B435B51404EE
将加密后的这两组数据简单拼接,就得到了最后的LM Hash
LM Hash: C23413A8A1E7665FAAD3B435B51404EE

NTLM Hash :

首先转换成Unicode字符串,与LM Hash算法不同,这次不需要添加0x00补足14字节 然后进行md4加密得到NTLM Hash