WINDOWS系统密码破解全攻略

题目:Windows系统密码破解全攻略
作者:hackest [H.S.T.]
来源:hackest’s blog

此文章已发表在《黑客X档案》2009年第6期杂志上
后经作者发布在博客上,如转载请务必保留此信息!

背景

要破解一个程序的密码,要先了解它的一些背景知识。先来简单说一下Windows系统密码的加密算法。早期SMB协议在网络上传输明文口令。后来出现"LAN Manager Challenge/Response"验证机制,简称LM,它是如此简单以至很容易被破解。微软提出了WindowsNT挑战/响应验证机制,称之为NTLM。现在已经有了更新的NTLMv2以及Kerberos验证体系。Windows加密过的密码口令,我们称之为hash(中文:哈希),Windows的系统密码hash默认情况下一般由两部分组成:第一部分是LM-hash,第二部分是NTLM-hash。以下内容摘选自安全焦点:

--------------------------------------引文开始----------------------------------------------

一、如何从明文口令生成LM-Hash?

1、假设明文口令是"Welcome",首先全部转换成大写WELCOME,再做如下变换:
“WELCOME” -> 57454C434F4D4500000000000000
先把WELCOME转换成十六进制形式,在明文口令不足14字节的情况下,后面添加0x00补足14字节。有些书上介绍添加空格(0x20)补足14字节,这是错误的,我不清楚是原作者写错了,还是译者的问题。

2、然后切割成两组7字节的数据,分别经str_to_key()函数(代码已附光盘)处理得到两组8字节数据:
57454C434F4D45 -str_to_key()-> 56A25288347A348A
00000000000000 -str_to_key()-> 0000000000000000

3、这两组8字节数据将做为DESKEY对魔术字符串"KGS!@#$%"进行标准DES加密(代码已附光盘):

“KGS!@#$%” -> 4B47532140232425

56A25288347A348A -对4B47532140232425进行标准DES加密-> C23413A8A1E7665F
0000000000000000 -对4B47532140232425进行标准DES加密-> AAD3B435B51404EE

4、将加密后的这两组数据简单拼接,就得到了最后的LM-Hash

Welcome的LM-Hash: C23413A8A1E7665FAAD3B435B51404EE。

显然,由于明文口令一开始就全部转换成大写,导致多个明文口令对应一个LM-Hash。反过来,在穷举破解LM-Hash时,得到的有可能不是原始口令,因为不可能确定大小写。仔细观察前述SMB身份验证过程,即使这里得到的不是原始口令(大小写有差别),同样可以通过SMB身份验证。这种转换成大写的行为减小了穷举破解难度。

另一个弱点,当明文口令小于8字节时,LM-Hash后8字节的计算过程总是这样的:

00000000000000 -str_to_key()-> 0000000000000000

对4B47532140232425进行标准DES加密-> AAD3B435B51404EE

这也将减小穷举破解难度。

IBM设计了这个LM-Hash算法,魔术字符串"KGS!@#$%"的意义无从考证。这个算法称之为"哈希"不怎么妥当,由于是标准DES加密,完全是可逆的。当然,由于要穷举的是DESKEY本身,与传统所说的可逆有区别。

二、如何从明文口令生成NTLM-Hash?

IBM设计的LM-Hash算法存在几个弱点,微软在保持向后兼容性的同时提出了自己的挑战响应机制,所以,NTLM-Hash应运而生。

1、假设明文口令是"123456",首先转换成Unicode字符串,与LM-Hash算法不同,这次不需要添加0x00补足14字节:

“123456” -> 310032003300340035003600

从ASCII串转换成Unicode串时,使用little-endian序,微软在设计整个SMB协议时就没考虑过big-endian序,ntoh*()、hton*()函数不宜用在SMB报文解码中。0x80之前的标准ASCII码转换成Unicode码,就是简单地从0x??变成0x00??。此类标准ASCII串按little-endian序转换成Unicode串,就是简单地在原有每个字节之后添加0x00。

2、对所获取的Unicode串进行标准MD4单向哈希(代码已附光盘),无论数据源有多少字节,MD4固定产生128-bit的哈希值,16字节:

310032003300340035003600 -进行标准MD4单向哈希-> 32ED87BDB5FDC5E9CBA88547376818D4

3、就得到了最后的NTLM-Hash

123456的NTLM-Hash: 32ED87BDB5FDC5E9CBA88547376818D4。

NTLM-Hash与LM-Hash算法相比,明文口令大小写敏感,但无法根据NTLM-Hash判断原始明文口令是否小于8字节,摆脱了魔术字符串"KGS!@#$%"。

MD4是真正的单向哈希函数,穷举做为数据源出现的明文,难度较大。问题在于,微软一味强调NTLM-Hash的强度高,却避而不谈一个事实,为了保持向后兼容性,NTLM-Hash缺省总是与LM-Hash一起使用的。这意味着NTLM-Hash强调再高也是无助于安全的,相反潜在损害着安全性。增加NTLM-Hash后,首先利用LM-Hash的弱点穷举出原始明文口令的大小写不敏感版本,再利用NTLM-Hash修正出原始明文口令的大小写敏感版本。

--------------------------------------引文结束----------------------------------------------

实战

理论准备得差不多了,进入实战阶段。当你已经得到Windows的系统权限后,如何才能获得管理员的密码hash呢?不同版本的Windows的hash获取方法不一样。用到的工具有pwdump7.exe、GetHashes.exe、SAMInside.exe、LC5、Cain、Proactive Password Auditor、Ophcrack。下面将会详细介绍如何抓取各Windows版本的系统密码hash。

都是工具的使用,想了解的看原文,略过。

vista、2008、win7下,pwdump7.exe,SAMInside.exe,Cain、PPA可以抓取Hash。

在线查询

如果你觉得上面提到的这么多东西都太麻烦,有没有在线查询hash的网站呢?答案是肯定的!国外有一个在线查询hash的网站:http://www.objectif-securite.ch/en/products.php,和Ophcrack的官方有点关系的哦,嘿嘿……不过在线查询只允许查tables XP free的表,有点可惜……同时特别要指出的是,在线查询的时候需要注意hash的格式。比如用户名和密码都是hackest的hash为:
hackest:1011:7831A0FFABEE5FB3AAD3B435B51404EE:D78DF6E868E606E442313C5DF93216F1:::
我们只需要把7831A0FFABEE5FB3AAD3B435B51404EE:D78DF6E868E606E442313C5DF93216F1复制填入hash后面的框,再点击submit hash即可进行查询,同时也支持输入密码返回hash值,如图33。

在这里插入图片描述

Vista以后系统如果开启BitLocker则以上方法均无效,根本无法抓取到hash,不过好在BitLocker默认是关闭的,不是特别需要的用户一般不会开启它。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值