几种windows本地hash值获取和破解详解

2017-11-01 39,266

本文作者:Lemon

本文属于安全脉搏原创金币奖励计划

转载请参考:https://www.secpulse.com/archives/61458.html

Windows系统使用两种方法对用户的密码进行哈希处理,它们分别是LAN Manager(LM)哈希和NT LAN Manager(NTLM)哈希。所谓哈希(hash),就是使用一种加密函数进行计算后的结果。这个加密函数对一个任意长度的字符串数据进行一次数学加密函数运算,然后返回一个固定长度的字符串。现在已经有了更新的NTLMv2以及Kerberos验证体系。Windows加密过的密码口令,我们称之为hash,Windows的系统密码hash默认情况下一般由两部分组成:第一部分是LM-hash,第二部分是NTLM-hash。

LM型哈希

LAN Manager(LM)哈希是Windows系统所用的第一种密码哈希算法。它只有唯一一个版本且一直用到了NT LAN Manager(NTLM)哈希的出现,NTLM哈希用于Windows 2000、XP、Vista和Windows 7系统中。新版操作系统因兼容缘故仍然支持LM哈希算法。但是在Windows Vista和Windows 7系统中,这种哈希算法是默认关闭的。

对一个密码进行LM哈希处理分以下六步:

  1. 用户的密码字符串被全部转换成大写字母形式;

  2. 给密码字符串增加空字符,直到使其包含有14个字符为止;

  3. “新”得到的密码字符串被分成两半,每一半分别包含7个字符;

  4. 每一半字符串都各自添加一个校验位,分别用于创建两个64位的DES加密密钥;

  5. 所生成的每一个DES密钥都被用于加密一个固定的ASCII字符串KGS!@#$%,得到两个长度为8字节的密文;

  6. 两个8字节的密文合并起来,形成1个16字节的字符串。至此,LM哈希结束。

举例来说,根据上面的步骤,密码“PassWord123”的LM哈希处理过程如下:

  1. 全部转换为大写字母形式:PASSWORD123;

  2. 补充空字符使其包含有14个字符:PASSWORD123000;

  3. 从中间一分为二,分别得到PASSWOR和D123000;

  4. 分别添加校验位,得到PASSWOR1和D1230001,用于生成DES密钥;

  5. 用生成的DES密钥加密一个给定的字符串,得到E52CAC67419A9A22和155195140A852F61;

  6. 合并得到E52CAC67419A9A22155195140A852F61

NTLM型哈希

NT LAN Manager(NTLM)哈希算法是微软认可的另一种算法。NTLM哈希创建起来实际上更为简单。它以MD4哈希算法为基础、通过一系列数学运算来创建哈希值。在密码字符串转换成Unicode编码后,MD4算法开始生成NT哈希。假设明文口令是“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是真正的单向哈希函数,穷举作为数据源出现的明文,难度较大

相较于DES加密,MD4哈希算法被认为要强壮得多。因为它允许使用更长的密码,允许有大小写的不同,而且也无须把密码分割成更小、更易于被破解的块。Windows系统下hash密码格式用户名称:RID:LM-HASH值:NT-HASH值,

例如:Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC:::表示:

用户名称为:Administrator
RID为:500
LM-HASH值为:C8825DB10F2590EAAAD3B435B51404EE
NT-HASH值为:683020925C5D8569C23AA724774CE6CC
如果你知道这个用户的hash密码了,拿着C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC去hash在线查询网站:http://www.objectif-securite.ch/en/ophcrack.php

1.使用GetHashes、Ophcrack破解系统Hash密码


下载彩虹表

可以到Ophcrack提供的彩虹表下载地址(http://ophcrack.sourceforge.net/tables.php)去下载,在本案例中分别下载了三个免费的彩虹表。

设置彩虹表

在Ophcrack软件主界面中单击“Table”,接着就会出来如图所示的Table Selection界面,在缺省状态下,所有表都没有安装,通过该界面我们了解到一共有8个彩虹表,其中有三个是免费的。

Image.png

然后单击并选中其中的一个条目,例如在本例中选择“Xp free fast”,然后单击“Install”按钮,系统会自动到Ophcrack软件的安装目录,不过本例是将三个压缩文件解压到F盘,如图5所示,选择“Tables”即可,然后一次安装所获取的其它二个彩虹表。

Image [1].png

注意:

  1. 在Ophcrack软件中其彩虹表的上级目录名称必须为“tables”,否则彩虹表安装不会成功。

  2. 彩虹表安装成功后,其条目会变成绿色,且可以查看一共有多少个表,如图6所示。

Image [2].png

准备破解材料

这里的破解材料主要是指通过GetHashes、Pwdump等软件获取的系统Hash密码值。如果没有,就自己想办法获取一个吧。

GetHashes必须用system权限运行,我借助的替换粘滞键sethc.exe的快捷方式,连续按五次shift。

  1. 将sethc.exe替换成cmd.exe程序

    Image [3].png

  2. 注销登录后,连续按五次shift

    Image [4].png

  3. 弹出cmd窗口

    Image [5].png

  4. 我的GetHashes放在了C盘根目录,进入C盘根目录,运行GetHashes命令

    Image [6].png

  5. 因为无法复制粘贴出来,所以用管道符,输出到c盘

    Image [7].png

    Image [9].png

  6. 将33.txt放到Ophcrack文件目录下。可以不放,我只是为了方便寻找

开始破解

  1. 加载sam文件
    单击“Load”按钮,选择“PWDUMP file”,如图所示,一共有6个选项,第一个主要用于对单个Hash的破解,第二个是对获取的Pwdump文件进行破解,第三个是对加密的sam文件进行破解,第四个和第五个主要用来审计或者破解本地和远程Hash密码。

    Image [10].png

    将33.txt导入

  2. 查看HASH密码值
    在本例中选择一个已经Pwdump的文件,如果pwdump系统的hash密码没有错误,则会在Ophcrack软件主界面中正确显示,如图,在主界面中分别显示“User”、“LM Hash”、“NT Hash”、“LM Pwd1 ”、“LM Pwd2”以及“NT pwd”等信息。

    Image [11].png

  3. 清理无用Hash值
    仅仅留下并破解管理员账号

    Image [12].png

  4. 执行破解
    单击“Crack”案例开始破解,很快就破解出来了密码为“123456”,其“LM Pwd1”值跟“NT pwd”相同,破解密码的时间仅仅“13s”。

    Image [13].png

  5. 查看破解统计信息
    在主界面中单击“statistics”,可以查看关于破解hash密码值的普通和详细信息,如图。

    Image [14].png

  6. 破解参数设置
    单击“Preferences”打开破解参数设置窗口,如图,可以设置破解的线程,破解方式,是否隐藏用户名等。

    Image [15].png

彩虹表破解密码防范策略

通过彩虹表来破解密码使得入侵者可以很方便的获取系统的口令,从而“正常”登录系统,让管理员或者计算机的主人不太容易发现。通过研究,发现可以通过两种方式来加强系统口令的安全。

  1. 通过设置超过一定位数的密码来加固口令安全

    使用彩虹表破解14位以下的密码相对容易,对于普通入侵者来说仅仅有三个免费表,因此破解的强度相对要弱一些,因此可以通过增加密码设置的位数来加固系统口令安全。笔者建议设置超过32位的密码来加固系统的口令安全。关于口令的设置技巧有很多,在我们研究的专题中曾经提到过,在此为了照顾新朋友,可以再提一次密码设置的技巧:
    通过一句话来设置密码,例如“2008-8月我国举办了奥运会,我去北京鸟巢观看了比赛,感觉很爽!”。可以这样设置“2008-8ywgjblayh,wqbjlcgklbs,gjhs!”,关于时间全取,标点符号全取,其他汉字取第一个字母,该密码长度为33位,如果再想长一点,还可以增加。其本质就是选择一句话或者诗词中的某一段来设置,容易记住,且安全强度高。

  2. 使用NTLM方式加密

    LM这种脆弱的加密方式在Windows2003还在使用,可以通过更改加密方式为NTLM,从而提高系统口令的安全,笔者在很多案例中也曾经发现通过pwdump以及GetHashes软件获取了hash值,但LC5以及Ophcrack软件均不能破解。
    可以通过设定注册表参数禁用LM加密,代之以NTLM方式加密方法如下:
    (1)打开注册表编辑器;
    (2)定位到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa;
    (3)选择菜单“编辑”,“添加数值”;
    (4)数值名称中输入:LMCompatibilityLevel,数值类型为:DWORD,单击“确定”;
    (5)双击新建的数据,并根据具体情况设置以下值:
            0 - 发送 LM 和 NTLM响应;
           1 - 发送 LM 和 NTLM响应;
           2 - 仅发送 NTLM响应;
           3 - 仅发送 NTLMv2响应;(Windows 2000有效)
           4 - 仅发送 NTLMv2响应,拒绝 LM;(Windows 2000有效)
           5 - 仅发送 NTLMv2响应,拒绝 LM 和 NTLM;(Windows 2000有效)
    (6)关闭注册表编辑器;
    (7)重新启动机器

在Windows NT SP3引入了NTLM加密,在Windows 2000以后逐步引入的NTLM 2.0加密。但是LM加密方式默认还是开启的,除非通过上面的方法刻意关闭它。


2.获取Windows LM/NTLM HASH值的工具:


SAMInside:它能从SAM注册文件中提取用户名以及密码(SAM 是Windows系统中存放系统用户及密码的一种文件,用Syskey(系统密钥)加密保护。)

首先使用 administrator权限登录,然后使用 reg来保存注册表中 HKLM下的 SECURITY,SAM,SYSTEM,注意这里必须使用 reg的 save选项,export选项是不行的,

reg save hklm\sam sam.hive
reg save hklm\system ystem.hive
reg save hklm\security security.hive

Image [16].png

导出的注册表如下,

Image [17].png

然后启动工具SAMInside

Image [18].png

选择第四个即启动

Image [19].png

Image [20].png

获取到账号密码以及LM哈希/NT哈希
下面破解账号apache的LM哈希值
复制出来

Image [21].png

打开此URL:http://www.objectif-securite.ch/en/ophcrack.php
界面如下

Image [22].png

将刚才复制出来的LM哈希粘贴进网站,点击go,破解出密码

Image [23].png

Windows密码抓取神器mimikatz(猕猴桃)2.0发布--抓取计算机内存

mimikatz 最近发布了它的2.0版本,抓密码命令更加简单了,估计作者也看到了对它这个神器最多的研究就是直接抓密码,为神马不发布一个直接一键版,哈哈哈哈哈。新功能还包括能够通过获取的kerberos登录凭据,绕过支持RestrictedAdmin模式的win8或win2012svr的远程终端(RDP) 的登陆认证。建议默认禁止RestrictedAdmin模式登录。更多功能等着大家来发现。

这个是我电脑密码的截图,覆盖部分就是我电脑密码,我电脑win7 64位的。所以用x64神器


2.0版本的只需要两条命令就可以了,比以前版本的更简单了。

第一条:privilege::debug
                //提升权限
第二条:sekurlsa::logonpasswords
              //抓取密码

getpass抓取Windows密码

直接运行getpass.exe  抓取密码
管理员身份运行

Image [24].png

wce获取 hash值

WCE支持Windows XP,Windows 2003,Vista,Windows 7和Windows 2008(所有SP,32位和64位版本)

wce的pass传递

wce.exe -s <username>:<domain>:<lmhash>:<nthash>
wce.exe -s <username>:<domain>:<lmhash>:<nthash> -c cmd.exe

获取hash值

wce -o output.txt
type output.tx

抓取明文:

wce.exe  -w

Image [25].png

Image [26].png


本文作者:Lemon

本文属于安全脉搏原创金币奖励计划

转载请参考:https://www.secpulse.com/archives/61458.html


本文作者:Lemon

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/65256.html

Tags:
评论  (0)
快来写下你的想法吧!

Lemon

文章数:68 积分: 647

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号