使用GetHashes软件获取Windows系统Hash密码值

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

使用GetHashes软件获取Windows系统Hash密码值

陈小兵

摘要 对入侵者来说,获取Windows的口令是整个攻击过程至关重要的一环,拥有系统原来用户的口令,将使得内网渗透和守控更加容易。Windows系统中的Hash密码值主要有LM-HASH以及NTLM-HASH值两部分构成,一旦入侵者获取了系统的Hash值,通过LC5以及彩虹表等破解工具可以很快的获取系统的密码。为此安天365团队([url]www.antian365.com[/url])特别针对系统口令攻击与防范展开专题进行研究,本文主要作为其中的一个子课题,探讨如何使用Gethashes工具来获取系统的Hash值,并对Hash值的生成原理等知识进行了介绍,最后还介绍了一些有关Hash破解方面的技巧。

一、Hash基本知识

1Hash定义

Hash,一般翻译为“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

2Hash的应用

HASH主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值。也可以说,Hash就是找到一种数据内容和数据存放地址之间的映射关系。

3hash算法在密码上的应用

MD5 SHA1 可以说是目前应用最广泛的Hash算法,而它们都是以 MD4 为基础设计的。那么他们都是什么意思呢?这里简单说一下:

1MD4

MD4(RFC 1320) MIT Ronald L. Rivest 1990 年设计的,MD Message Digest 的缩写。它适用在32位字长的处理器上用高速软件实现,它是基于 32 位操作数的位操作来实现的。

2 MD5

MD5(RFC 1321) Rivest1991年对MD4的改进版本。它仍以512位分组来输入,其输出是432位字的级联,与MD4 相同。MD5MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好

3SHA1 及其他

SHA1是由NIST NSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1 设计时基于和MD4相同原理,并且模仿了该算法。

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

1 文件校验

我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。 MD5 Hash算法的“数字指纹”特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。

2)数字签名

Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对Hash值,又称“数字摘要”进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。

3)鉴权协议

鉴权协议又被称作挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

二、WindowsHash密码值

1. Windows系统下的hash密码格式

Windows系统下的hash密码格式为:用户名称:RID:LM-HASH:NT-HASH值,例如:

Administrator:500:C8825DB        10F    2590EAAAD3B435B51404EE:        683020925C    5D        8569C    23AA724774CE6CC:::表示

用户名称为:Administrator

RID为:500

LM-HASH值为:C8825DB        10F    2590EAAAD3B435B51404EE

NT-HASH值为:     683020925C  5D        8569C    23AA724774CE6CC

2.WindowsLM Hash值生成原理

假设明文口令是“Welcome”,首先全部转换成大写“WELCOME”,再做将口令字符串大写转后后的字符串变换成二进制串:

WELCOME ->         57454C           434F    4D4500000000000000

技巧:可以将明文口令复制到UltraEdit编辑器中使用二进制方式查看即可获取口令的二进制串。

说明:如果明文口令经过大写变换后的二进制字符串不足14字节,则需要在其后添加0x00补足14字节。然后切割成两组7字节的数据,分别经str_to_key()函数处理得到两组8字节数据:

57454C       434F  4D45 -str_to_key()->         56A           25288347A           348A    

00000000000000 -str_to_key()-> 0000000000000000

这两组8字节数据将做为DESKEY对魔术字符串“KGS!@#$%”进行标准DES加密

"KGS!@#$%" -> 4B47532140232425

56A       25288347A       348A   -4B47532140232425进行标准DES加密-> C        23413A           8A    1E        7665F    

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

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

LM Hash: C      23413A        8A   1E7665FAAD3B435B51404EE

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

3. WindowsNTLM 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密码获取软件,该公司还有“SAMInside”、“PasswordsPro”以及“Extreme GPU Bruteforcer”三款密码破解软件。

1GetHashes命令使用格式

      GetHashes  [System key file] Or GetHashes $Local

一般使用       GetHashes $Local”来获取系统的Hash密码值,该命令仅在system权限下才能执行成功。一般根据个人爱好,可以将“GetHashes.exe”工具软件命名为其它名称,例如在后面案例中,就将其命名为“getpw”。

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

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

                                                               

1 获取系统Hash

注意:

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

2)如果系统中安装有杀毒软件或者防火墙,有可能由于杀毒软件和防火墙的保护而导致密码获取失败。通过研究发现,由于Gethashes软件威力巨大,主要用在入侵过程中获取系统的Hash密码值,因此绝大多少杀毒软件已经将GetHashes软件加入到病毒库中,如图2所示,是Castlecops网站提供的关于各大杀毒软件针对GetHashes所做的病毒库版本以及更新结果。

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

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

3 Hash生成器

4Hash密码值在线查询

    在网站[url]http://hash.insidepro.com/[/url]中还可以在线查询Hash密码值的原始明文口令,如图4所示,将获取的MD5加密后的Hash值输入后,单击“Search”按钮,如果数据库中存在则会在下面给出查询结果。

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团队[url]http://www.antian365.com[/url])欢迎社会各界朋友提供安全事件线索,将免费为提供线索的朋友进行安全检测。

附录1 str_to_key()函数

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

#include

#include

#include

/*

* 读取形如"AABBCCDDEEFF"这样的16进制数字串,主调者自己进行形参的边界检查

*/

static void readhexstring ( const unsigned char *src, unsigned char *dst, unsigned int len )

{

   unsigned int  i;

   unsigned char str[3];

 

   str[2] = '\0';

   for ( i = 0; i < len; i++ )

   {

      str[0] = src[ i * 2     ];

       str[1] = src[ i * 2 + 1 ];

       dst[i] = ( unsigned char )strtoul( str, NULL, 16 );

   }

   return;

}  /* end of readhexstring */

 

/*

* from The Samba Team's source/libsmb/smbdes.c

*/

static void str_to_key ( const unsigned char *str, unsigned char *key )

{

   unsigned int i;

 

   key[0] = str[0] >> 1;

   key[1] = ( ( str[0] & 0x01 ) << 6 ) | ( str[1] >> 2 );

   key[2] = ( ( str[1] & 0x03 ) << 5 ) | ( str[2] >> 3 );

   key[3] = ( ( str[2] & 0x07 ) << 4 ) | ( str[3] >> 4 );

   key[4] = ( ( str[3] & 0x      0F    ) << 3 ) | ( str[4] >> 5 );

   key[5] = ( ( str[4] & 0x      1F    ) << 2 ) | ( str[5] >> 6 );

   key[6] = ( ( str[5] & 0x      3F    ) << 1 ) | ( str[6] >> 7 );

   key[7] = str[6] & 0x      7F   ;

   for ( i = 0; i < 8; i++ )

   {

       key[i] = ( key[i] << 1 );

   }

   return;

}  /* end of str_to_key */

 

int main ( int argc, char * argv[] )

{

   unsigned int  i;

   unsigned char buf_0[21];

   unsigned char buf_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 );

   for ( i = 0; i < sizeof( buf_0 ); i++ )

   {

       fprintf( stderr, "%02X", buf_0[i] );

   }

   fprintf( stderr, "\n" );

   str_to_key( buf_0, buf_1 );

   str_to_key( buf_0 + 7, buf_1 + 8 );

   str_to_key( buf_0 + 14, buf_1 + 16 );

   for ( i = 0; i < sizeof( buf_1 ); i++ )

   {

       fprintf( stderr, "%02X", buf_1[i] );

   }

   fprintf( stderr, "\n" );

   return( EXIT_SUCCESS );

}  /* end of main */

附录2 相关免费资源

1)在线Hash密码值破解:[url]http://hash.insidepro.com/[/url]
2)在线生成Hash密码值:[url]http://www.insidepro.com/hashes.php?lang=eng[/url]
3)免费字典下载:[url]http://www.insidepro.com/eng/download.shtml[/url]
4SAMInside  [url]http://www.insidepro.com/download/saminside.zip[/url]
5PasswordsPro  [url]http://www.insidepro.com/download/passwordspro.zip[/url]
6Extreme GPU Bruteforcer  [url]http://www.insidepro.com/download/egb.zip[/url]
7Gethashes工具

[url]http://www.antian365.com/bbs/attachment.php?aid=464&k=[/url]      2f   319ed67b141d944d8b      0c   9514df17b7&t=1228015436

参考文献

1[url]http://baike.baidu.com/view/604021.htm[/url]





本文转自 simeon2005 51CTO博客,原文链接:http://blog.51cto.com/simeon/116471

相关文章
|
4天前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
2月前
|
安全 Windows
【Azure Cloud Service】在Windows系统中抓取网络包 ( 不需要另外安全抓包工具)
通常,在生产环境中,为了保证系统环境的安全和纯粹,是不建议安装其它软件或排查工具(如果可以安装,也是需要走审批流程)。 本文将介绍一种,不用安装Wireshark / tcpdump 等工具,使用Windows系统自带的 netsh trace 命令来获取网络包的步骤
84 32
|
2月前
|
存储 负载均衡 Java
如何配置Windows主机MPIO多路径访问存储系统
Windows主机多路径(MPIO)是一种技术,用于在客户端计算机上配置多个路径到存储设备,以提高数据访问的可靠性和性能。本文以Windows2012 R2版本为例介绍如何在客户端主机和存储系统配置多路径访问。
136 13
如何配置Windows主机MPIO多路径访问存储系统
|
3月前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
3月前
|
Windows
.NET 隐藏/自定义windows系统光标
【10月更文挑战第20天】在.NET中,可以使用`Cursor`类来控制光标。要隐藏光标,可将光标设置为`Cursors.None`。此外,还可以通过从文件或资源加载自定义光标来更改光标的样式。例如,在表单加载时设置`this.Cursor = Cursors.None`隐藏光标,或使用`Cursor.FromFile`方法加载自定义光标文件,也可以将光标文件添加到项目资源中并通过资源管理器加载。这些方法适用于整个表单或特定控件。
|
3月前
|
Apache 数据中心 Windows
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
|
3月前
|
域名解析 缓存 网络协议
Windows系统云服务器自定义域名解析导致网站无法访问怎么解决?
Windows系统云服务器自定义域名解析导致网站无法访问怎么解决?
|
3月前
|
运维 网络安全 虚拟化
Windows系统镜像检测修复建议
Windows系统镜像检测修复建议
|
安全 Linux Windows
FLARE VM:Windows恶意软件分析
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396538 ...
2053 0
|
安全 API Windows
Windows恶意软件API调用特征分析
本文讲的是Windows恶意软件API调用特征分析,通常对病毒使用API的认识都是基于病毒工程师的经验,但是我们并不知道每个API对于是否是病毒的贡献有多大。通过对大量病毒样本的统计分析,我们可以得出相关的数据。
1783 0