简介

说实话MSCASH是在大部分情况下是一个比较鸡肋的东西,可能一辈子都不会利用上,但是还是可以了解一下

当你加入域后,你要登录域账户,与域控建立连接。
但是实际情况是,当你的PC与域控断开连接后(域控掉线,关机),以前使用过的域账户依旧能成功登录上域。
当然如果是从未登录过的域账户在域控掉线的时候想登录,那必然是失败了。
image.png
这一切都是因为有个东西叫做域登录缓存MSCASH
MACASH最多支持10个域用户的缓存,当大于10个时,就替换掉最早的那一个

MSCACHE的原理

当机器可以连上域控的时候,你用域账号去登陆这台机器,在登陆成功后(域控验证了你的身份后),系统会将你的凭据以及授权信息保存在注册表里面。默认是保存 10 个凭据(可以对这个值进行更改)。当被保存的凭据已经超过 10 个的话,新的凭据会覆盖掉老的凭据。

凭据被缓存在注册表里的这些用户,在机器连不上域控的时候也可以登陆这台机器(只能交互式登陆,比如控制台或远程桌面。
image.png(域内使用提权工具打开)
上图的 NL$1 至 NL$10 就是 10 个可以保存凭据的注册表值。这些值都是二进制类型的,并且其中部分是加密的。

使用域账户并使用system打开注册表
MS0C0ACHE 的保存位置默认只有 SYSTEM 权限可读
HKEY_LOCAL_MACHINE\SECURITY\Cache
image.png
使用本地账户打开是没有这个注册表的
image.png

使用:

1、mimikatz离线破解

lsadump::cache
image.png
使用hashcat来进行离线破解,这里需要我们来对凭据进行自行的拼接,不然格式不对

  1. '$DCC2$10240#111#3e9533effa6b6f8fd20e9c11bc39a2f0'
  2. hashcat -m2100 '$DCC2$10240#111#3e9533effa6b6f8fd20e9c11bc39a2f0' top10000.txt --force --potfile-disable

image.png
值得一提的是mscash有时候会记录域控的缓存登录凭据
image.png
而此时mimikatz的sekurlsa::logonpasswords读取出来的密码是没有administrator的
image.png
也就是说,mscash有时候会记录域控的ntlmhash,但是需要我们去离线破解跑,而不是明文。
因此在域内的渗透时候,我们读取密码不要忘记了mscash

2、mscash.py在脱域的情况下可以直接提权至域管

提权至system下

  • reg save hklm\security security
  • reg save hklm\system system

这一步的效果就和lsadump::cache一样

  1. python2 mscache.py --system system --security security

image.png
python2 mscache.py —system system —security security —patch 111
记得修改脚本里的域名和密码
image.png
image.png
之后使用fakeuser进行登录,当然如果域控还活着这当然就用不了了
image.png
此时你使用新的账户登录就会直接升级到管理员,不用再提权了
1627290897.png

别人的想法和总结

正所谓macash是一个域缓存凭据,在PC连接域控失败的时候会自动使用缓存凭据来进行登录,这相当于是除了SAM、域控,以外的第三个数据库。那么我们能不能通过加入或篡改域缓存凭据来制作一个后门登录呢,答案是可以的。

我们需要修改已加入的凭据里(经过测试user不存在的无法修改)
lsadump::cache /user:111 /ntlm:32ed87bdb5fdc5e9cba88547376818d4
image.png
之后登录111域用户的密码就变为111/123456
只不过需要一个条件:需要域控下线(类似笔记本加入域然后拿回家?或者使用中间人让主机以为域控下线)

防御:

事实的大部分下,我们都会使用mimikatz来获取凭据,不论是本地账户还是域用户我们都可以给它读取出来。
但是mimikatz在某些情况是用不了的,因为Mimikatz默认需要一个debug调试权限,而该权限默认赋给本地管理员,因此我们只需要将调试权限给他删除掉,本地管理员就debug不了了(要重启电脑)
image.png
image.png

安装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#/
image.png
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