我们提供安全,免费的手游软件下载!

安卓手机游戏下载_安卓手机软件下载_安卓手机应用免费下载-先锋下载

当前位置: 主页 > 软件教程 > 软件教程

网络密码课实验:模拟计算NTResponse、AuthenticatorResponse

来源:网络 更新时间:2024-05-18 18:31:43

本文基于网络密码课上的实验。在实验中,我们将模拟计算NTResponse、AuthenticatorResponse,以及在未知用户口令情况下编程实现CHAP认证口令的破解。

首先,我们需要编写程序,模拟计算NTResponse、AuthenticatorResponse。代码编译成功的前提是要预先装好openssl库。

本随笔主要包含三个内容:

  1. 编写程序,模拟计算NTResponse、AuthenticatorResponse
  2. 根据前期PPTP实验中捕获的数据包中CHAP协议的挑战响应认证数据,在未知用户口令情况下编程实现CHAP认证口令的破解
  3. 在单向数据条件下(仅能截获用户数据)实现CHAP认证口令的破解

接下来,我们将详细介绍每个部分的实现过程。

首先放一个我自己抓的包,可以看到,这是chap协议挑战响应的三次握手,

接下来我们继续进行编程模拟,就要先搞清楚每个字段代表的什么。文档中第一个包的描述,给的是Authenticator challenge。

这是第二个包,16字节peer-challenge,8位的0,24位的NT-Response。

第三个包的内容是s=authticator-response

接下来我们开始编程实现,每一个字段都是由对应的函数计算得出。

一、编写程序,模拟计算NTResponse、AuthenticatorResponse

1.查阅RFC2759文档,找到描述的计算NTResponse的函数。NT-Response的值是由GenerateNTResponse()计算得出,该函数有四个输入,分别是AuthenticatorChallenge(16)、PeerChallenge(16)、UserName和Password,一个输出Response(24)。

此外,有三个函数对输入进行处理:ChallengeHash:对两个挑战值hash,结果放到challenge中。NtPasswordHash:对password做hash,结果放到password中。ChallengeResponse:对challenge和passwordhash做运算,结果得到NT-Response。

2.根据文档描述编写代码。GenerateNTResponse()函数,_ChallengeHash()函数,_NtPasswordHash函数()和ChallengeResponse()函数。

下面来看一下密钥扩展函数,该函数的具体流程如下:

  1. 创建了一个名为new_key的字节数组,用于存储扩展后的密钥。
  2. 接下来,使用一个循环来处理每个7位的数据包。循环从0到7迭代,共8次。
  3. 在每次迭代中,根据当前的索引值i,获取原始密钥中的两个相邻的八位字节。如果i大于0,则取索引为i-1的字节作为左字节;否则,取索引为0的字节作为左字节。右字节的获取方式类似,如果i小于7,则取索引为i的字节作为右字节;否则,取索引为6的字节作为右字节。
  4. 接着,通过位运算将左字节和右字节中的位进行清除,只保留当前7位的数据。左字节通过与操作符&和右移操作符>>实现,右字节通过与操作符&和左移操作符<<实现。
  5. 然后,将左字节和右字节进行位移操作,将它们移动到最终的位置。左字节通过左移操作符<<实现,右字节通过右移操作符>>实现。
  6. 最后,将左字节和右字节进行按位或操作,得到最终的八位字节,并将其存储在new_key数组中对应的位置。

3.运行程序,将结果和wireshark抓包内容进行比对。

NT-Response:DA2191E86678231E62B5D628CBA859031B1E6082533B32B5

AuthenticatorResponse: s=2AA71CBBDD95F43ABA628329A0271A8DD1114310

二、根据前期PPTP实验中捕获的数据包中CHAP协议的挑战响应认证数据,在未知用户口令情况下编程实现CHAP认证口令的破解

思路:编写一个challenge1()函数,创建一个自己的字典,使用字典进行爆破,每次读入字典中的一个密码文本,然后调用GenerateNTResponse()函数计算NT-Response,与正确的进行比对,如果成功,则输出密码。

1.编写challenge1()函数。

运行字典爆破

三、在单向数据条件下(仅能截获用户数据)实现CHAP认证口令的破解

思路:单向数据条件下,意味着只能获取用户数据NT-Response、PeerChallenge、UserName。那么根据NtResponse的计算原理,采用逆向破解的思路。因此,破解思路是,每次读入字典里的密钥做hash作为密钥,然后将NtResponse三个部分分别作为DES函数的输入,记录DES函数的输出,比较三个输出是否相同,如果相同,则破解成功。

1.编写代码。

源码如下,注意,已经折叠,点击展开。

2.运行代码

至此,实验结束。顺便附上python源码,欢迎批评指正!