why?
写这个是因为考虑到在渗透过程中,对目标机器上的第三方软件的信息收集很大程度决定后续能不能横向移动,内 密码搜集的越多,横向渗透也就越方便,这里将列举常见的软件,远程控制,浏览器,常见数据库相关软件和系统的凭证获取方式。
而有时候因为环境特别严苛,在线解密的工具用不了的时候离线就显得特别重要,做个记录,也当了解一下各个软件之间不同的认证方法,可能有些许理解错误,看官们轻锤。
密码保存在哪里?
在 系统下保存密码,无非就只存在于两个位置:文件或者注册表里。所以下文主要也是从注册表项、文件中获取第三方软件的密码字段。
运维类软件
1.Xshell
xshell在属于是运维最爱使用以及出现率最高的一种远程连接软件,其中的session文件夹会保存连接过机器的账 密码,分析一下xshell是如何保存密码的。
均在xshell6的版本下进行演示
想要找到xshell的默认session保存在哪里很简单,首先新建一个会话,然后会弹出以上会话框,点击该图如文件夹所在,然后系统会打开session的本地保存目录,结构如下:
其中,xsh的文件即便是保存了账 密码的重要文件,也是解密的凭证。
如果是安装版,一般保存文件的默认路径是不会改动的,路径如下:
C:UsersadminDocumentsNetSarang Computer6XshellSessions
解密过程
在线解密:
Xshell的加密过程此处不讨论,解密我这里是使用的一款工具
SharpDecryptPwd
SharpDecryptPwd支持对:
的解密
项目地址:
https://github.com/uknowsec/SharpDecryptPwd
这种方法仅仅支持在线解密,即你要去对方的机器上运行程序才可解密,如果把session脱下来离线在本机去解密是解密不了的,因为xshell6.0以后都增加了一个userSid(key)来鉴权,所以离线解密得复杂一点。
离线解密:
如果离线解密,不指定userSid头会像这样,解出来是乱码。
获取SID头也很简单,使用whoami /user即可得到SID信息
https://github.com/HyperSine/how-does-Xmanager-encrypt-password
离线解密推荐使用此项目,python环境,可指定SID头进行解密
使用如下:
XFTP和xshell同理,因此不再叙述。
2.FileZilla
FileZilla在机器上遇见的次数也比较多,是一款FTP操作类的软件
解密过程
FileZilla比较简单,解密过程如下:
先导出FileZilla的站点管理器记录;
2、记录文件是以.xml结尾的文件,即FileZilla.xml;
3、FileZilla.xml中保存的密码是经过base64加密的,复制加密后的密码;
其中的密码以base64保存,解密后即是原文密码。
这个文件夹的默认保存路径为:
此文件夹下的sitemanager文件即为站点保存记录,和上面的XML打开是一样的内容。
使用SharpDecyptPwd也可以
SharpDecryptPwd.exe -FileZilla
3.Winscp
WinSCP 是一个 Windows 环境下使用的 SSH 的开源图形化 SFTP 客户端。同时支持 SCP 协议。
解密过程
Winscp的密码信息是保存在注册表的,路径如下:
使用此条命令会看到有连接名,存在几个就是有几个连接。
获得密码有一个条件,即:保存的时候勾选了保存密码,要不然注册表的值为空。
上图为不保存密码的一个例子,此处的注册表是没有Password值的。
这就是以注册表的形式来获得密码,获得这几个值之后,使用winscppwd.exe可以离线破解
有的时候如果在RDP上操作,可以直接把所有站点列表导出,具体操作如下
导出了之后是一个ini的文件,ini文件里面会保存所有的连接记录,因此也可以利用ini来达到一个快速的获得全信息的操作,不用一个个的去读注册表值。
利用SharpDecryptPwd也可以做到,非常方便。
4.SecureCRT
在实战中,SecureCRT和xshell一样,很多运维人员会将SSH的账 密码保存在上面,当我们拿下这台主机后如果发现有此类软件就可以同时获取到多台机器的权限,同时收集机器密码。
SecureCRT解密过程
解密过程
我这里已经是9版本了
session保存路径如下:
C:UsersadminAppDataRoamingVanDykeConfig
其中 Password V2 里面存放着密码,02:后面就是加密后的密码。
解密脚本:
其中的ini文件即是配置文件,使用这个项目即可解密:
https://github.com/gitPoc32/Forensic/blob/master/VanDykeSecureCRT/SecureCRT-decryptpass.py
使用方法:
也可以使用直接打包文件的方式可以把AppDataRoamingVanDykeConfig 整个目录拷贝到本机SecureCRT的Config目录下,然后直接连接。前提是需要和对方的版本一致。
数据库类
1.Navicat
数据库类常用较多的则是Navicat,Navicat很多时候都是数据库一把梭的神。
https://github.com/HyperSine/how-does-navicat-encrypt-password/blob/master/doc/how-does-navicat-encrypt-password.md
上面是Navicat加密算法解释,Navicat11.x与12.x算法有些不同,不过都能解。
解密过程
Navicat的信息是存在注册表里面
reg query HKEY_CURRENT_USERSoftwarePremiumSoftNavicatServers
这只是MySQL的保存信息
Navicat不同数据库保存的注册表路径
读取注册表值:
按照这样,也可以读取其他数据库的信息。
拿到这些信息后,就可以进行离线解密,推荐项目地址:
https://github.com/HyperSine/how-does-navicat-encrypt-password/blob/master/python3/NavicatCipher.py
可以看到已经成功解密出数据库的密码了,离线解密完成。
至于在线解密,SharpDecryptPwd也可以完成。
即可
2.Heidisql
HeidiSQL是一款用于简单化迷你的 MySQL 服务器和数据库管理的图形化界面,因为实践中遇到了几次,所以这里也记录一下解密方法。
Heidisql敏感信息
经过对文件的检测,发现是存在注册表里面的
其中的密码文件会保存在
HKEY_CURRENT_USERSoftwareHeidiSQLServers 这个节点下来
如果配置特别多的情况下,条件允许可以上3389去导的,那么就直接导出配置文件即可。
配置文件就是如上所示。
解密
解密也很简单,加密方式非常简单,简单的来说就是使用了进制转换和ASCII码进行偏移来做保护,详情参考:文章
贴一个python3解密代码:
解密效果如下:
3.PLSQL
PLSQLDeveloper是一款在原版本基础功能性能上进行改进和优化的面向Oracle数据库,遇到过几次,这里也写一个利用的过程。
要打开此处的储存历史和密码储存才会保存信息在记录里,实践中运维开启这个的几率蛮高的,毕竟也懒得一个个去手动输密码。
开启后直接点击右侧就可以直接连接进数据库了。
解密过程
通过对注册表和文件的检测,发现会操作这么两个动作。
C:UsersadminAppDataRoamingPLSQL Developer 14Preferencesadmin
C:Program FilesPLSQL Developer 14Preferencesadmin
其中的amdin是自己用户名所生成的目录,其中的user.prefs就是储存连接信息的文件。
连接信息在LogonHistory和CurrentConnections里面,一条是一行。
贴一个解密代码 C#实现的
代码运行效果
远程控制类
实践中,往往目标运维或者技术协助会使用像向日葵、Teamview此类软件进行远程协助支持,此类软件不仅仅扩大了攻击面,有时候对杀软有直接的Bypass效果,因为此类商用软件都有数字证书,在杀毒软件来看都是合法的,所以对这类远程桌面类的软件进行利用还是相当有必要的,因此下面会讲解几种常见的远程桌面类的解密。
1.向日葵
解密向日葵的配置文件有两处,分别为:encry_pwd、fastcode。
encry_pwd 为本机验证码,为密文
fastcode 为本机识别码,为明文
fastcodehistory 为本机识别码历史,为密文,用 base64 解密即可,如果你的向日葵从来没有连接过别的主机,fastcodehistory 就为空
这三处值在向日葵默认配置文件路径里:
安装版:C:Program FilesOraySunLoginSunloginClientconfig.ini
便携版(绿色版):C:ProgramDataOraySunloginClientconfig.ini
目前向日葵目前最高版本是:V12.0.1.40571,此版本向日葵已经不把pwd值保存在配置文件里面了。
值的保存无非是配置文件和注册表,监测一下注册表行为即可找到。
而是保存在了注册表里面。
拿到这两个值后,推荐使用项目:https://github.com/wafinfo/Sunflower_get_Password
账 密码正确~
免安装版,免安装版则是还是写入了配置文件。
2.TeamViewer
TeamViewer比较老牌,出现率也是较高的,TV的利用方式比较简单,大多数工具都是去获取进程的句柄找到ID和PASS,也有一部分是从内存中得到的。
使用SharpDecryptPwd的TeamViewer即可读出密码,这里是一种利用方式。
另外一种就是往对方机器上丢TV,然后再用密码读取工具去取出来密码。
这里推荐个项目:https://github.com/ianxtianxt/teamview
3.Todesk
Todesk国产的一款远程桌面级软件,具有全功能版和精简版
全功能版的配置文件如下路径:
其中的
则是密码,利用的方式也很简单。只需拿tempAuthPassEx在我们本地ToDesk配置文件中进行替换,然后重新运行ToDesk软件后即可得到他的明文密码。
这个方法不会动目标的客户端,非常好用。
还有一种方法是去操作他的客户端,官方提供了一个命令行的操作文档。
https://docs.todesk.com/zh-CN/command
同时也可以发现Todesk的默认密码认证方式是:
按照此文档,尝试命令行去追加一个安全密码。
ToDesk.exe -setpasswd password 此方法需要UAC。
使用此命令追加一个安全密码即可,追加后config.ini中的配置文件,authPassEx值会产生变化。
也可以生成一个在本机生成一个安全值,然后粘贴到目标config.ini的安全值上进行连接。
浏览器类
1.firefox
火狐敏感信息文件
火狐浏览器的保存信息是储放在
这个目录下
其中的.xxxxxxdefault是储存的信息,
解密过程:
如图所示有以上两种配置文件,那么.default 和 .default-release的区别在哪里呢,经过验证,如果正常的使用火狐浏览器,那么.default-release是你的保存信息的配置文件才对。
原因是火狐在更新至67版本后,为发行版和测试版都新增了一项配置文件,其中是.default是测试版专用的配置文件。
详情参考:https://support.mozilla.org/gl/questions/1264072
关于火狐加密方式的参考:https://github.com/lclevy/firepwd
根据该文档的定义,基于不同的版本,火狐浏览器保存的信息和加密方式也稍有不同。
其中如果火狐版本是大于>==75.0,那么需要找到key4.db和logins.json文件
logins文件:
以Firefox 版本 >=94.0.2为例,将用户所有登录信息(包括 址URL,用户名,密码和其他数据)存储为JSON。其中的password是经过了的哈希算法和加密,然后经过火狐自主创建的ASN.1编码后再转换成base64编码最后写入文件中。用一个测试登录信息如上所示,其中encryptedUsername和encryptedPassword就是被加密的用户名和密码。
过程稍微有些复杂,个人能力有限,这里不去详细的研究火狐的一个手动解密方式,不过已经知道了要解密的需要些什么:
不管是基于什么版本,只需要打包下载整个配置文件目录即可:
C:UsersadminAppDataRoamingMozillaFirefoxProfiles
最后推荐使用项目:https://github.com/unode/firefox_decrypt
如果对方没有设置主密码,在key4.db和logins.json都存在的情况下,脚本是可以解密的。
在线解密的话也有很多工具,诸如https://github.com/moonD4rk/HackBrowserData,这里不做演示了。
2.Chrome
我这里安装的chrome版本已经是V9了
在使用谷歌浏览器时,如果我们输入某个 站的账 密码,会自动弹出是否保存的密码框,以便下次登录的时候自动填写账 和密码,其中保存的密码可以在设置-密码里面直接看到。
Chrome相对来说复杂一些,谷歌引入了一个MasterKey,用DPAPI进行保护。因为的版本不同,新版加密算法为aesGCM加密+DPAPI,而老版本直接使用了DPAPI进行保护,key保存于配置文件文件中。
概念解释:
chrome v80 版本前
是直接可以通过DPAPI中的解密函数 CryptUnprotectData来进行解密的。
chrome v80 版本后
Chrome相对来说复杂一些,谷歌引入了一个MasterKey,用DPAPI进行保护。因为的版本不同,新版加密算法为aesGCM加密+DPAPI,key保存于配置文件文件中,谷歌引入了一个MasterKey,用DPAPI进行保护,而老版本直接使用了DPAPI进行保护,key保存于配置文件文件中。
DPAPI概念
Data Protection Application Programming Interface(数据保护API)
对于几乎所有密码系统来说,最困难的挑战之一是“密钥管理”——其中部分即是,如何安全地存储解密密钥。如果密钥以纯文本存储,则可以访问密钥的任何用户都可以访问加密的数据。如果密钥被加密,则又需要另一个密钥,周而复始。DPAPI允许开发者使用从用户的登录私钥导出的对称密钥来加密密钥,或者在系统加密的情况下使用系统的域验证私钥来加密密钥。
Google的敏感配置文件
cookie文件:
密码文件:
历史记录及下载记录:
书签文件:
缓存及自动表单
其中密码文件是加密的,不过其实他是一个sql3的数据库,使用SQLlite打开即可.
关于离线解密的一个过程,团队小伙伴有过相关的研究,这里直接贴一个他的文章。
解密过程
1.离线读取
(1)下载LSASS进程镜像
(2)mimikatz加载dmp文件并获取各个Master Key file对应的MasterKey(使用这个命令定位对应的MasterKey)
(3)注册表文件读取MasterKey
(4)从注册表文件中获得DPAPI_SYSTEM
DPAPI_SYSTEM中的user hash为,能够用来解密位于下的系统Master Key file
(5)下载Master Key file
(6)解密系统的Master Key file,获得MasterKey
(7)对配置文件进行解密,并获取加密key
使用MasterKey解密配置文件
复制解密后数据并转换为文本
复制解密后数据并转换为文本
读取其中的值
(8)使用key对浏览器加密数据进行解密(golang函数)
最后
迫于个人能力有限,只能写出这些常用的工具的利用过程,其文参考了许多前辈的智慧,现也有很多优秀的在线工具使用,贴一些文档参考:
《[从mimikatz看Windows DPAPI数据解密》
https://www.secrss.com/articles/35800
《hack-browser-data 是一个开源工具,可以帮助您从浏览器解密数据》
https://github.com/moonD4rk/HackBrowserData
《使用mimikatz导出chrome密码》
http://redteam.today/2019/12/09/%E4%BD%BF%E7%94%A8mimikatz%E5%AF%BC%E5%87%BAchrome%E5%AF%86%E7%A0%81/
《chrome浏览器cookie及密码解密chrome中的敏感文件位置》
http://knlght.top/2020/08/03/chrome%E6%B5%8F%E8%A7%88%E5%99%A8cookie%E5%8F%8A%E5%AF%86%E7%A0%81%E8%A7%A3%E5%AF%86/#chrome%E4%B8%AD%E7%9A%84%E6%95%8F%E6%84%9F%E6%96%87%E4%BB%B6%E4%BD%8D%E7%BD%AE
《获取运行中的TeamViewer的账 和密码》
https://blog.csdn.net/nzjdsds/article/details/83109974?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-4.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-4.no_search_link
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!