简介
说实话MSCASH是在大部分情况下是一个比较鸡肋的东西,可能一辈子都不会利用上,但是还是可以了解一下
当你加入域后,你要登录域账户,与域控建立连接。
但是实际情况是,当你的PC与域控断开连接后(域控掉线,关机),以前使用过的域账户依旧能成功登录上域。
当然如果是从未登录过的域账户在域控掉线的时候想登录,那必然是失败了。
这一切都是因为有个东西叫做域登录缓存MSCASH
MACASH最多支持10个域用户的缓存,当大于10个时,就替换掉最早的那一个
MSCACHE的原理
当机器可以连上域控的时候,你用域账号去登陆这台机器,在登陆成功后(域控验证了你的身份后),系统会将你的凭据以及授权信息保存在注册表里面。默认是保存 10 个凭据(可以对这个值进行更改)。当被保存的凭据已经超过 10 个的话,新的凭据会覆盖掉老的凭据。
凭据被缓存在注册表里的这些用户,在机器连不上域控的时候也可以登陆这台机器(只能交互式登陆,比如控制台或远程桌面。
(域内使用提权工具打开)
上图的 NL$1 至 NL$10 就是 10 个可以保存凭据的注册表值。这些值都是二进制类型的,并且其中部分是加密的。
使用域账户并使用system打开注册表
MS0C0ACHE 的保存位置默认只有 SYSTEM 权限可读
HKEY_LOCAL_MACHINE\SECURITY\Cache
使用本地账户打开是没有这个注册表的
使用:
1、mimikatz离线破解
lsadump::cache
使用hashcat来进行离线破解,这里需要我们来对凭据进行自行的拼接,不然格式不对
'$DCC2$10240#111#3e9533effa6b6f8fd20e9c11bc39a2f0'
hashcat -m2100 '$DCC2$10240#111#3e9533effa6b6f8fd20e9c11bc39a2f0' top10000.txt --force --potfile-disable
值得一提的是mscash有时候会记录域控的缓存登录凭据
而此时mimikatz的sekurlsa::logonpasswords读取出来的密码是没有administrator的
也就是说,mscash有时候会记录域控的ntlmhash,但是需要我们去离线破解跑,而不是明文。
因此在域内的渗透时候,我们读取密码不要忘记了mscash
2、mscash.py在脱域的情况下可以直接提权至域管
提权至system下
- reg save hklm\security security
- reg save hklm\system system
这一步的效果就和lsadump::cache一样
python2 mscache.py --system system --security security
python2 mscache.py —system system —security security —patch 111
记得修改脚本里的域名和密码
之后使用fakeuser进行登录,当然如果域控还活着这当然就用不了了
此时你使用新的账户登录就会直接升级到管理员,不用再提权了
别人的想法和总结
正所谓macash是一个域缓存凭据,在PC连接域控失败的时候会自动使用缓存凭据来进行登录,这相当于是除了SAM、域控,以外的第三个数据库。那么我们能不能通过加入或篡改域缓存凭据来制作一个后门登录呢,答案是可以的。
我们需要修改已加入的凭据里(经过测试user不存在的无法修改)
lsadump::cache /user:111 /ntlm:32ed87bdb5fdc5e9cba88547376818d4
之后登录111域用户的密码就变为111/123456
只不过需要一个条件:需要域控下线(类似笔记本加入域然后拿回家?或者使用中间人让主机以为域控下线)
防御:
事实的大部分下,我们都会使用mimikatz来获取凭据,不论是本地账户还是域用户我们都可以给它读取出来。
但是mimikatz在某些情况是用不了的,因为Mimikatz默认需要一个debug调试权限,而该权限默认赋给本地管理员,因此我们只需要将调试权限给他删除掉,本地管理员就debug不了了(要重启电脑)
安装py模块
mscash.py安装踩坑
1、安装impacket包
git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket-master
python setup.py install
2、之后还要再安装VCForPython27.msi,我这里的python版本是2.7.18,不然安装pycrypto会报错
https://pan.baidu.com/s/1eReSjPg#/
python2 -m pip install pycrypto
python2 -m pip install passlib
即可成功使用mscash.py
参考资料
https://mp.weixin.qq.com/s/mTpYcHebvlERj9ek2_Pu8Q
https://zhuanlan.zhihu.com/p/347982624
https://naykcin.top/2020/02/02/mimikatz0/
https://github.com/No-Github/1earn/blob/master/1earn/Security/RedTeam/OS%E5%AE%89%E5%85%A8/Windows%E5%AE%89%E5%85%A8.md#mscash