Windows XP 用户密码破解
0x00 前言
SAM (Security Accounts Manager 安全账户管理器)是Windows NT
内核操作系统,包括Windows2000/XP/Server 2003/Vista/7的用户账户数据库,所有用户的登录名及口令等相关信息都保存在这个文件中。
系统在保存sam信息之前对sam信息进行了压缩处理,因此,sam文件中的信息不可读取。
0x01 创建用户和密码
0x02 PwDump的使用
dos进入到目录
运行查看帮助
-s 参数,是指从SAM数据库文件中提取hash
-d 是把一个文件复制到另一个位置(可以把进程正在占用的文件复制成功)
如提示libeay32.dll找不到或缺少的问题,拷贝libeay32.dll到windows/system32下即可
★单个的SAM文件不足以解密必须附带System文件★
这里直接运行pwdump就行不带参数
可以看到列出了我们所有用户名 权限 以及密码(hash加密后)
0x03 Windows NT 系统密码存储的基本原理
SAM (Security Accounts Manager 安全账户管理器)是Windows NT 内核操作系统,包括Windows2000/XP/Server 2003/Vista/7的用户账户数据库,所有用户的登录名及口令等相关信息都保存在这个文件中。系统在保存sam信息之前对sam信息进行了压缩处理,因此,sam文件中的信息不可读取。此外,在系统运行期间,sam文件被system账号锁定,即使是administartor账号也无法打开。
★所以如果说我们只拿出来一个SAM文件是不能够解密的必须带上同目录的System文件
sam数据库位于注册表HKLM\SAM\SAM下,受到ACL保护,可以使用regedt32.exe打开注册表编辑器并设置适当权限查看SAM中的内容。SAM数据库在磁盘上就保存在 %SystemRoot%\system32\config\ 目录下的SAM文件中,在这个目录下还包括一个security文件,是安全数据库的内容,两者有较少的关系。SAM数据库中包括所有组,账户的信息,包括密码HASH、账户的SID等。
Windows系统在SAM中采用了两种密码的加密机制,所以,在sam文件中保存着两个口令字,一个是LanMan版本的散列值(LM),另一个是NT版本的散列值(NTLM)。
LanMan 散列算法(LM)
LanMan散列算法处理用户口令的过程是:将用户口令分成两半,每一半都是7个字符(不足7个字符的以0x00补齐),然后分别对这另个口令进行加密,最后将加密后得到的散列值串连在一起,得到最终的LM散列值。
NT散列算法(NTLM)
密码散列有两部分组成:一部分是通过变现DES算法,使用密码的大写OEM格式作为密钥(分成2个KEY,每个KEY7字节,用0补足14个字节),通过DESECB方式获得一个128位的密钥,加密特殊字符串"KGS!@#$%"获得一个16字节长度的值。另一部分则是使用MD4对密码的UNICODE形式进行加密获得的一个散列。
从上述LM算法流程来看,可以发现LM安全性上的几点不足:
0x00 LM算法将14个字节的密码分为两组分别进行加密,使得两组密文可以分别破解,并且明文空间从95^ 14减少到了95^7。
0x01 LM算法不区分密码的大小写字符,使得明文空间从95^ 7减小到69^7。
0x02 LM算法不像其他散列算法一样包含随机的初始向量IV,使得用空间换取时间的字典攻击(如彩虹表)等成为可能,2^43的明文空间使用彩虹表最多只需几个小时便能破解。
虽然LM非常不安全,但Windows为了保持前后兼容性,是许多以前支持LM认证的经典应用不至于突然不能使用,所以LM仍存在于相当Windows各种版本的操作系统中,不过Vista/7已经默认不使用LM存储账户密码散列。
NTLM散列的安全性较LM有所提升,因为其明文空间扩展到了95^128,采用暴力破解的时间复杂度大大增加。但是NTLM散列和LM散列一样,都没有在算法中包含随机数据(salt),所以仍然会受到字典攻击。但由于NTLM的明文空间较大,其字段占用的空间也会呈几何级数增长(NTLM的彩虹表大小为200G左右,而LM的彩虹表只需几百兆即可),破解时间自然也较LM要长很多。
0x04 hash值破解
这里我们用到了Ophcrack 附上官网(https://ophcrack.sourceforge.io/)
运行Ophcrack
导入彩虹表 官方彩虹表链接(https://ophcrack.sourceforge.io/tables.php)
这里我们选择了一个最小的下载
这是官方给出的表,这个表15位以内 数字+大小写字母 都能破解
包括了(0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ)
导入要解密的数值
这里可以修改线程数,磁盘队列等等......(关系到计算速度)
选中我们要解密的然后开始
用时2s
明文已出现
这里解释下彩虹表:
彩虹表(Rainbow Table)是一种破解哈希算法的技术,是一款跨平台密码破解器,主要可以破解MD5、HASH等多种密码。它的性能非常让人震惊,在一台普通PC上辅以NVidia CUDA技术,对于NTLM算法可以达到最高每秒103,820,000,000次明文尝试(超过一千亿次),对于广泛使用的MD5也接近一千亿次。更神奇的是,彩虹表技术并非针对某种哈希算法的漏洞进行攻击,而是类似暴力破解,对于任何哈希算法都有效。
Tebles:
在很多年前,国外的黑客们就发现单纯地通过导入字典,采用和目标同等算法破解,其速度其实是非常缓慢的,就效率而言根本不能满足实战需要。之后通过大量的尝试和总结,黑客们发现如果能够实现直接建立出一个数据文件,里面事先记录了采用和目标采用同样算法计算后生成的Hash散列数值,在需要破解的时候直接调用这样的文件进行比对,破解效率就可以大幅度地,甚至成百近千近万倍地提高,这样事先构造的Hash散列数据文件在安全界被称之为Table表(文件)。
Rainbow Tables:
最出名的Tables是Rainbow Tables,即安全界中常提及的彩虹表,它是以Windows的用户账户LM/NTLM散列为破解对象的。简单说明一下,在 Windows2000/XP/2003系统下,账户密码并不是明文保存的,而是通过微软所定义的算法,保存为一种无法直接识别的文件,即通常所说的SAM文件,这个文件在系统工作时因为被调用所以不能够被直接破解。但我们可以将其以Hash即散列的方式提取,以方便导入到专业工具破解,提取出来的密码散列类似于下面:
若是以传统破解方式而言,无论是本地,还是内网在线破解,效率都不是很高。据实际测试,单机环境下,破解一个14位长包含大小写字母以及数字的无规律密码,一般是需要3~~9小时的,这个时间值会随着密码的复杂度及计算机性能差异提升到几天甚至数月不等。虽然说大部分人都不会使用这样复杂的密码,但对于目前很多密码足够复杂并且长度超过10位的密码比如“A1b5dF62E62fg3”,还是会令黑客们头痛不已。
2003年7月瑞士洛桑联邦技术学院Philippe Oechslin公布了一些实验结果,他及其所属的安全及密码学实验室(LASEC)采用了时间内存替换的方法,使得密码破解的效率大大提高。作为一个例子,他们将一个常用操作系统的密码破解速度由1分31秒,提升到12.6秒。这一方法使用了大型查找表对加密的密码和由人输入的文本进行匹配,从而加速了解密所需要的计算。这种被称作“内存-时间平衡”的方法意味着使用大量内存的黑客能够减少破解密码所需要的时间。
于是,一些受到启发的黑客们事先制作出包含几乎所有可能密码的字典,然后再将其全部转换成NTLM Hash文件,这样,在实际破解的时候,就不需要再进行密码与Hash之间的转换,直接就可以通过文件中的Hash散列比对来破解Windows帐户密码,节省了大量的系统资源,使得效率能够大幅度提升。当然,这只是简单的表述,采用的这个方法在国际上就被称为Time-Memory Trade-Off ,即刚才所说的“内存-时间平衡”法,有的地方也会翻译成“时间—内存交替运算法”。其原理可以理解为以内存换取时间。
具体算法方面的内容本文就不再涉及,对于想进行更高深层次探究的读者,可以仔细参考2003年的这篇详细文档《Making a Faster Crytanalytical Time-Memory Trade-Off》以及2005年的文档《Time-Memory Trade-Offs: False Alarm Detection Using Checkpoints》。