哈希值 HASH
对入侵者来说,获取Windows的口令是整个攻击过程至关重要的一环,拥有系统原来用户的口令,将使得内网渗透和守控更加容易。Windows系统中的Hash密码值主要有LM-HASH以及NTLM-HASH值两部分构成,一旦入侵者获取了系统的Hash值,通过LC5以及彩虹表等破解工具可以很快的获取系统的密码。为此安天365团队(www.antian365)特别针对系统口令攻击与防范展开专题进行研究,本文主要作为其中的一个子课题,探讨如何使用Gethashes工具来获取系统的Hash值,并对Hash值的生成原理等知识进行了介绍,最后还介绍了一些有关Hash破解方面的技巧。
一、Hash基本知识
1.Hash定义
Hash,一般翻译为“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
2.Hash的应用
一、Hash基本知识
1.Hash定义
Hash,一般翻译为“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
2.Hash的应用
HASH主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值。也可以说,Hash就是到一种数据内容和数据存放地址之间的映射关系。
3.hash算法在密码上的应用
MD5 和 SHA1 可以说是目前应用最广泛的Hash算法,而它们都是以 MD4 为基础设计的。那么他们都是什么意思呢?这里简单说一下:
(1)MD4
MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的,MD是 Message Digest 的缩写。它适用在32位字长的处理器上用高速软件实现,它是基于 32 位操作数的位操作来实现的。
(2) MD5
MD5(RFC 1321)是 Rivest于1991年对MD4的改进版本。它仍以512位分组来输入,其输出是4个32位字的级联,与 MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好
(3)SHA1 及其他
3.hash算法在密码上的应用
MD5 和 SHA1 可以说是目前应用最广泛的Hash算法,而它们都是以 MD4 为基础设计的。那么他们都是什么意思呢?这里简单说一下:
(1)MD4
MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的,MD是 Message Digest 的缩写。它适用在32位字长的处理器上用高速软件实现,它是基于 32 位操作数的位操作来实现的。
(2) MD5
MD5(RFC 1321)是 Rivest于1991年对MD4的改进版本。它仍以512位分组来输入,其输出是4个32位字的级联,与 MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好
(3)SHA1 及其他
SHA1是由NIST NSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1 设计时基于和MD4相同原理,并且模仿了该算法。
Hash算法在信息安全方面的应用主要体现在以下的3个方面:
(1) 文件校验
我们比较熟悉的校验算法有奇偶校验和CRCunicode在线工具校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。 MD5 Hash算法的“数字指纹”特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
(2)数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角。对Hash值,又称“数字摘要”进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
(3)鉴权协议
Hash算法在信息安全方面的应用主要体现在以下的3个方面:
(1) 文件校验
我们比较熟悉的校验算法有奇偶校验和CRCunicode在线工具校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。 MD5 Hash算法的“数字指纹”特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
(2)数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角。对Hash值,又称“数字摘要”进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
(3)鉴权协议
鉴权协议又被称作挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。
二、Windows下Hash密码值
1. Windows系统下的hash密码格式
Windows系统下的hash密码格式为:用户名称:RID:LM-HASH值:NT-HASH值,例如:
Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC:::表示
用户名称为:Administrator
RID为:500
LM-HASH值为:C8825DB10F2590EAAAD3B435B51404EE
NT-HASH值为:683020925C5D8569C23AA724774CE6CC
2.Windows下LM Hash值生成原理
假设明文口令是“Welcome”,首先全部转换成大写“WELCOME”,再做将口令字符串大写转后后的字符串变换成二进制串:
二、Windows下Hash密码值
1. Windows系统下的hash密码格式
Windows系统下的hash密码格式为:用户名称:RID:LM-HASH值:NT-HASH值,例如:
Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC:::表示
用户名称为:Administrator
RID为:500
LM-HASH值为:C8825DB10F2590EAAAD3B435B51404EE
NT-HASH值为:683020925C5D8569C23AA724774CE6CC
2.Windows下LM Hash值生成原理
假设明文口令是“Welcome”,首先全部转换成大写“WELCOME”,再做将口令字符串大写转后后的字符串变换成二进制串:
“WELCOME” -> 57454C434F4D4500000000000000
技巧:可以将明文口令复制到UltraEdit编辑器中使用二进制方式查看即可获取口令的二进制串。
说明:如果明文口令经过大写变换后的二进制字符串不足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
关于str_to_key()函数见最后附录1
技巧:可以将明文口令复制到UltraEdit编辑器中使用二进制方式查看即可获取口令的二进制串。
说明:如果明文口令经过大写变换后的二进制字符串不足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
关于str_to_key()函数见最后附录1
3. Windows下NTLM Hash生成原理
从IBM设计的LM Hash算法存在几个弱点,微软在保持向后兼容性的同时提出了自己的挑战响应机制,NTLM Hash应运而生。假设明文口令是“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。对所获取的Unicode串进行标准MD4单向哈希,无论数据源有多少字节,MD4固定产生128-bit的哈希值,
16字节310032003300340035003600 -进行标准MD4单向哈希-> 32ED87BDB5FDC5E9CBA88547376818D4
就得到了最后的NTLM Hash
NTLM Hash: 32ED87BDB5FDC5E9CBA88547376818D4
与LM Hash算法相比,明文口令大小写敏感,无法根据NTLM Hash判断原始明文口令是
从IBM设计的LM Hash算法存在几个弱点,微软在保持向后兼容性的同时提出了自己的挑战响应机制,NTLM Hash应运而生。假设明文口令是“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。对所获取的Unicode串进行标准MD4单向哈希,无论数据源有多少字节,MD4固定产生128-bit的哈希值,
16字节310032003300340035003600 -进行标准MD4单向哈希-> 32ED87BDB5FDC5E9CBA88547376818D4
就得到了最后的NTLM Hash
NTLM Hash: 32ED87BDB5FDC5E9CBA88547376818D4
与LM Hash算法相比,明文口令大小写敏感,无法根据NTLM Hash判断原始明文口令是
否小于8字节,摆脱了魔术字符串"KGS!@#$%"。MD4是真正的单向哈希函数,穷举作为数据源出现的明文,难度较大。
三、使用GetHashes获取Windows系统的Hash密码值
GetHashes目前最高版本是v1.4,它是InsidePro公司早期的一款Hash密码获取软件,其为:www.InsidePro,该公司还有“SAMInside”、“PasswordsPro”以及“Extreme GPU Bruteforcer”三款密码破解软件。
1.GetHashes命令使用格式
GetHashes [System key file] Or GetHashes $Local
一般使用“GetHashes $Local”来获取系统的Hash密码值,该命令仅在system权限下才能执行成功。一般根据个人爱好,可以将“”工具软件命名为其它名称,例如在后面案例中,就将其命名为“getpw”。
2.使用GetHashes获取系统Hash值实例
将GetHashes重命名为getpw,然后将其复制到欲获取hash密码值的系统盘中,然后执行“getpw $local”,如图1所示,顺利获取其密码Hash值,在本案例中使用的是Radmin的Telnet,单击“文本”-“保存为”将结果保存为一个新文件,然后使用UltraEdit编辑器进行编辑,
三、使用GetHashes获取Windows系统的Hash密码值
GetHashes目前最高版本是v1.4,它是InsidePro公司早期的一款Hash密码获取软件,其为:www.InsidePro,该公司还有“SAMInside”、“PasswordsPro”以及“Extreme GPU Bruteforcer”三款密码破解软件。
1.GetHashes命令使用格式
GetHashes [System key file] Or GetHashes $Local
一般使用“GetHashes $Local”来获取系统的Hash密码值,该命令仅在system权限下才能执行成功。一般根据个人爱好,可以将“”工具软件命名为其它名称,例如在后面案例中,就将其命名为“getpw”。
2.使用GetHashes获取系统Hash值实例
将GetHashes重命名为getpw,然后将其复制到欲获取hash密码值的系统盘中,然后执行“getpw $local”,如图1所示,顺利获取其密码Hash值,在本案例中使用的是Radmin的Telnet,单击“文本”-“保存为”将结果保存为一个新文件,然后使用UltraEdit编辑器进行编辑,
仅仅保存Hash密码值部分,后面可使用LC5导入Hash密码值即可破解系统的密码值。
图1 获取系统Hash值
图1 获取系统Hash值
注意:
(1)使用“GetHashes”来获取系统的Hash密码值,必须要在System权限下,也就是在反弹shell或者telnet下。
(2)如果系统中安装有杀毒软件或者防火墙,有可能由于杀毒软件和防火墙的保护而导致密码获取失败。通过研究发现,由于Gethashes软件威力巨大,主要用在入侵过程中获取系统的Hash密码值,因此绝大多少杀毒软件已经将GetHashes软件加入到病毒库中,如图2所示,是Castlecops网站提供的关于各大杀毒软件针对GetHashes所做的病毒库版本以及更新结果。
(1)使用“GetHashes”来获取系统的Hash密码值,必须要在System权限下,也就是在反弹shell或者telnet下。
(2)如果系统中安装有杀毒软件或者防火墙,有可能由于杀毒软件和防火墙的保护而导致密码获取失败。通过研究发现,由于Gethashes软件威力巨大,主要用在入侵过程中获取系统的Hash密码值,因此绝大多少杀毒软件已经将GetHashes软件加入到病毒库中,如图2所示,是Castlecops网站提供的关于各大杀毒软件针对GetHashes所做的病毒库版本以及更新结果。
图2 杀毒软件已经将Gethashes作为病毒处理
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论