哈希值 HASHWord格式.docx

上传人:b****3 文档编号:18184275 上传时间:2022-12-14 格式:DOCX 页数:8 大小:121.17KB
下载 相关 举报
哈希值 HASHWord格式.docx_第1页
第1页 / 共8页
哈希值 HASHWord格式.docx_第2页
第2页 / 共8页
哈希值 HASHWord格式.docx_第3页
第3页 / 共8页
哈希值 HASHWord格式.docx_第4页
第4页 / 共8页
哈希值 HASHWord格式.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

哈希值 HASHWord格式.docx

《哈希值 HASHWord格式.docx》由会员分享,可在线阅读,更多相关《哈希值 HASHWord格式.docx(8页珍藏版)》请在冰豆网上搜索。

哈希值 HASHWord格式.docx

  

(2)MD5

  MD5(RFC1321)是Rivest于1991年对MD4的改进版本。

它仍以512位分组来输入,其输出是4个32位字的级联,与MD4相同。

MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好

  (3)SHA1及其他

  SHA1是由NISTNSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。

SHA-1设计时基于和MD4相同原理,并且模仿了该算法。

  Hash算法在信息安全方面的应用主要体现在以下的3个方面:

  

(1)文件校验

  我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。

MD5Hash算法的“数字指纹”特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5checksum的命令。

  

(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下LMHash值生成原理

  假设明文口令是“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

  将加密后的这两组数据简单拼接,就得到了最后的LMHash

  LMHash:

C23413A8A1E7665FAAD3B435B51404EE

  关于str_to_key()函数见最后附录1

  3.Windows下NTLMHash生成原理

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

假设明文口令是“123456”,首先转换成Unicode字符串,与LMHash算法不同,这次不需要添加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

  就得到了最后的NTLMHash

  NTLMHash:

  与LMHash算法相比,明文口令大小写敏感,无法根据NTLMHash判断原始明文口令是否小于8字节,摆脱了魔术字符串"

MD4是真正的单向哈希函数,穷举作为数据源出现的明文,难度较大。

  三、使用GetHashes获取Windows系统的Hash密码值

  GetHashes目前最高版本是v1.4,它是InsidePro公司早期的一款Hash密码获取软件,其公司地址为:

http:

//www.InsideP,该公司还有“SAMInside”、“PasswordsPro”以及“ExtremeGPUBruteforcer”三款密码破解软件。

  1.GetHashes命令使用格式

  GetHashes[Systemkeyfile]Or 

GetHashes$Local

  一般使用“GetHashes$Local”来获取系统的Hash密码值,该命令仅在system权限下才能执行成功。

一般根据个人爱好,可以将“GetHashes.exe”工具软件命名为其它名称,例如在后面案例中,就将其命名为“getpw”。

  2.使用GetHashes获取系统Hash值实例

  将GetHashes重命名为getpw,然后将其复制到欲获取hash密码值的系统盘中,然后执行“getpw$local”,如图1所示,顺利获取其密码Hash值,在本案例中使用的是Radmin的Telnet,单击“文本”-“保存为”将结果保存为一个新文件,然后使用UltraEdit编辑器进行编辑,仅仅保存Hash密码值部分,后面可使用LC5导入Hash密码值即可破解系统的密码值。

 

   

 

图1获取系统Hash值

  注意:

  

(1)使用“GetHashes”来获取系统的Hash密码值,必须要在System权限下,也就是在反弹shell或者telnet下。

  

(2)如果系统中安装有杀毒软件或者防火墙,有可能由于杀毒软件和防火墙的保护而导致密码获取失败。

通过研究发现,由于Gethashes软件威力巨大,主要用在入侵过程中获取系统的Hash密码值,因此绝大多少杀毒软件已经将GetHashes软件加入到病毒库中,如图2所示,是Castlecops网站提供的关于各大杀毒软件针对GetHashes所做的病毒库版本以及更新结果。

图2杀毒软件已经将Gethashes作为病毒处理

(3)InsidePro公司在其网站上还提供了一个Hash产生器,通过输入一些参数值能够生成经过某种加密算法处理的口令密码值,如图3所示,有兴趣的朋友可以去尝试,该功能在研究系统的Hash密码值生成中可以进行相互验证。

图3Hash生成器

(4)Hash密码值在线查询

在网站

图4在线破解Hash密码值

  2.使用GetHashes获取系统Hash值技巧

  使用GetHashes来获取系统的Hash值一般是在获得了系统的部分或者全部控制权限,通常是在新漏洞利用工具出来后,例如Ms08067漏洞利用工具,当存在Ms0867漏洞时,通过使用Ms08067漏洞利用工具获得存在漏洞计算机的一个反弹Shell,然后再将“GetHashes”软件上传到系统中来执行“GetHashes$Local”命令。

对GetHashes工具的使用,笔者将一些经验技巧进行总结。

  

(一)在获得反弹Shell的情况下,首先查看系统是否存在杀毒软件;

如果存在,则尝试是否可以关闭,如果不能关闭,则放弃使用GetHashes来获取Hash密码值,转向第二步。

  

(二)查看系统是什么系统,是否开启3389远程终端,如果未开启3389终端,可否直接开启3389终端。

如果可以利用3389终端,则直接添加一个具有管理员权限的用户,然后使用用户登录到系统。

  (三)关闭杀毒软件,再次通过shell或者其他控制软件的telnet来执行“GetHashes$Local”命令来获取Hash密码值,然后删除新添加到用户。

  安天365团队()欢迎社会各界朋友提供安全事件线索,将免费为提供线索的朋友进行安全检测。

  附录1str_to_key()函数

str_to_key()函数,的C语言描述程序:

#include

/*

*读取形如"

AABBCCDDEEFF"

这样的16进制数字串,主调者自己进行形参的边界检查

*/

staticvoidreadhexstring(constunsignedchar*src,unsignedchar*dst,unsignedintlen)

{

unsignedint 

i;

unsignedcharstr[3];

str[2]='

\0'

;

for(i=0;

i

*fromTheSambaTeam'

ssource/libsmb/smbdes.c

staticvoidstr_to_key(constunsignedchar*str,unsignedchar*key)

unsignedinti;

key[0]=str[0]>

>

1;

key[1]=((str[0]&

0x01)>

2);

key[2]=((str[1]&

0x03)>

3);

key[3]=((str[2]&

0x07)>

4);

key[4]=((str[3]&

0x0F)>

5);

key[5]=((str[4]&

0x1F)>

6);

key[6]=((str[5]&

0x3F)>

7);

key[7]=str[6]&

0x7F;

intmain(intargc,char*argv[])

unsignedcharbuf_0[21];

unsignedcharbuf_1[24];

if(argc!

=2)

fprintf(stderr,"

Usage:

%s\n"

argv[0]);

return(EXIT_FAILURE);

}

memset(buf_0,0,sizeof(buf_0));

memset(buf_1,0,sizeof(buf_1));

i=strlen(argv[1])/2;

readhexstring(argv[1],buf_0,i);

附录2相关免费资源

(1)在线Hash密码值破解:

(2)在线生成Hash密码值:

(3)免费字典下载:

(4)SAMInside 

(5)PasswordsPro 

(6)ExtremeGPUBruteforcer 

(7)Gethashes工具

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1