在内部入侵测试期间,横向移动是白帽子黑客技术人员寻求信息以提高他或他对信息系统的特权的重要组成部分。在这种情况下,被称为“传递哈希”的技术就非常有用,可以成为一组计算机上的管理员。我们将在这里详细介绍这种技术的工作原理。
NTLM协议
NTLM协议是Microsoft环境中使用的身份验证协议。特别是,它允许用户证明自己对服务器的身份,以便使用该服务器提供的服务。
注意:在本文中,术语“服务器”在客户端/服务器的意义上使用。“服务器”很可能是工作站。
有两种可能的方案:
(1)用户使用服务器本地帐户的凭据,在这种情况下,服务器在其本地数据库中具有用户的机密,并且能够对用户进行身份验证;
(2)或在Active Directory环境中,用户在身份验证过程中使用域帐户,在这种情况下,服务器将不得不要求域控制器验证用户提供的信息。
在这两种情况下,身份验证都从客户端和服务器之间的质询/响应阶段开始。
挑战-回应
使用质询/响应原则,以便服务器验证用户是否知道他要进行身份验证的帐户的机密,而无需通过网络传递密码。这就是所谓的零知识证明。交换过程分为三个步骤:
- 协商:客户端告诉服务器它想对其进行身份验证(NEGOTIATE_MESSAGE)。
- 质询:服务器向客户端发送质询。这不过是随每个身份验证请求(CHALLENGE_MESSAGE)而变化的64位随机值。
- 响应:客户端使用其密码的哈希版本作为密钥来加密先前收到的质询,并将此加密版本以及其用户名以及可能的域(AUTHENTICATE_MESSAGE)返回给服务器。
如下图:
你可以看到用户管理员试图连接到计算机LKAPP01.lion.king。
NTLM交换的顶部用红色框起来,底部是服务器响应中包含的信息CHALLENGE_MESSAGECHALLENGE_MESSAGE。在这里您将找到挑战。
在进行这些交换之后,服务器拥有两件事:
1.发送给客户的挑战;
2.用他的秘密加密的客户响应;
要完成身份验证,服务器只需检查客户端发送的响应的有效性。但是在此之前,让我们先检查一下客户的秘密。
认证机密
客户端使用密码的哈希版本作为密钥的原因如下:为了避免在服务器上以明文形式存储用户密码。它是存储的密码的哈希值。现在,此哈希是NT哈希,它不过是MD4函数的结果,不含盐值。
NThash = Md4(password)
综上所述,当客户端进行身份验证时,它使用其密码的MD4指纹来加密挑战。然后,让我们看一下收到此响应后在服务器端发生的情况。
认证方式
如前所述,有两种不同的方案。首先是用于身份验证的帐户是本地帐户,因此服务器知道此帐户,并且具有该帐户的机密副本。第二个是使用域帐户,在这种情况下,服务器不知道该帐户或其秘密。它必须