why?
寫這個是因為考慮到在滲透過程中,對目標機器上的第三方軟體的資訊收集很大程度決定後續能不能橫向移動,內網密碼蒐集的越多,橫向滲透也就越方便,這裡將列舉常見的軟體,遠端控制,瀏覽器,常見資料庫相關軟體和系統的憑證獲取方式。
而有時候因為環境特別嚴苛,線上解密的工具用不了的時候離線就顯得特別重要,做個記錄,也當了解一下各個軟體之間不同的認證方法,可能有些許理解錯誤,看官們輕錘。
密碼儲存在哪裡?
在 系統下儲存密碼,無非就只存在於兩個位置:檔案或者登錄檔裡。所以下文主要也是從登錄檔項、檔案中獲取第三方軟體的密碼欄位。
運維類軟體
1。Xshell
xshell在屬於是運維最愛使用以及出現率最高的一種遠端連線軟體,其中的session資料夾會儲存連線過機器的賬號密碼,分析一下xshell是如何儲存密碼的。
均在xshell6的版本下進行演示
想要找到xshell的預設session儲存在哪裡很簡單,首先新建一個會話,然後會彈出以上會話框,點選該圖如資料夾所在,然後系統會開啟session的本地儲存目錄,結構如下:
其中,xsh的檔案即便是儲存了賬號密碼的重要檔案,也是解密的憑證。
如果是安裝版,一般儲存檔案的預設路徑是不會改動的,路徑如下:
C:\Users\admin\Documents\NetSarang Computer\6\Xshell\Sessions
解密過程
線上解密:
Xshell的加密過程此處不討論,解密我這裡是使用的一款工具
SharpDecryptPwd
SharpDecryptPwd支援對:
的解密
專案地址:
https://github。com/uknowsec/SharpDecryptPwd
這種方法僅僅支援線上解密,即你要去對方的機器上執行程式才可解密,如果把session脫下來離線在本機去解密是解密不了的,因為xshell6。0以後都增加了一個userSid(key)來鑑權,所以離線解密得複雜一點。
離線解密:
如果離線解密,不指定userSid頭會像這樣,解出來是亂碼。
獲取SID頭也很簡單,使用whoami /user即可得到SID資訊
https://github。com/HyperSine/how-does-Xmanager-encrypt-password
離線解密推薦使用此專案,python環境,可指定SID頭進行解密
使用如下:
XFTP和xshell同理,因此不再敘述。
2。FileZilla
FileZilla在機器上遇見的次數也比較多,是一款FTP操作類的軟體
解密過程
FileZilla比較簡單,解密過程如下:
先匯出FileZilla的站點管理器記錄;
2、記錄檔案是以。xml結尾的檔案,即FileZilla。xml;
3、FileZilla。xml中儲存的密碼是經過base64加密的,複製加密後的密碼;
其中的密碼以base64儲存,解密後即是原文密碼。
這個資料夾的預設儲存路徑為:
此資料夾下的sitemanager檔案即為站點儲存記錄,和上面的XML開啟是一樣的內容。
使用SharpDecyptPwd也可以
SharpDecryptPwd。exe -FileZilla
3。Winscp
WinSCP 是一個 Windows 環境下使用的 SSH 的開源圖形化 SFTP 客戶端。同時支援 SCP 協議。
解密過程
Winscp的密碼資訊是儲存在登錄檔的,路徑如下:
使用此條命令會看到有連線名,存在幾個就是有幾個連線。
獲得密碼有一個條件,即:儲存的時候勾選了儲存密碼,要不然登錄檔的值為空。
上圖為不儲存密碼的一個例子,此處的登錄檔是沒有Password值的。
這就是以登錄檔的形式來獲得密碼,獲得這幾個值之後,使用winscppwd。exe可以離線破解
有的時候如果在RDP上操作,可以直接把所有站點列表匯出,具體操作如下
匯出了之後是一個ini的檔案,ini檔案裡面會儲存所有的連線記錄,因此也可以利用ini來達到一個快速的獲得全資訊的操作,不用一個個的去讀登錄檔值。
利用SharpDecryptPwd也可以做到,非常方便。
4。SecureCRT
在實戰中,SecureCRT和xshell一樣,很多運維人員會將SSH的賬號密碼儲存在上面,當我們拿下這臺主機後如果發現有此類軟體就可以同時獲取到多臺機器的許可權,同時收集機器密碼。
SecureCRT解密過程
解密過程
我這裡已經是9版本了
session儲存路徑如下:
C:\Users\admin\AppData\Roaming\VanDyke\Config
其中 Password V2 裡面存放著密碼,02:後面就是加密後的密碼。
解密指令碼:
其中的ini檔案即是配置檔案,使用這個專案即可解密:
https://github。com/gitPoc32/Forensic/blob/master/VanDykeSecureCRT/SecureCRT-decryptpass。py
使用方法:
也可以使用直接打包檔案的方式可以把AppData\Roaming\VanDyke\Config 整個目錄複製到本機SecureCRT的Config目錄下,然後直接連線。前提是需要和對方的版本一致。
資料庫類
1。Navicat
資料庫類常用較多的則是Navicat,Navicat很多時候都是資料庫一把梭的神。
https://github。com/HyperSine/how-does-navicat-encrypt-password/blob/master/doc/how-does-navicat-encrypt-password。md
上面是Navicat加密演算法解釋,Navicat11。x與12。x演算法有些不同,不過都能解。
解密過程
Navicat的資訊是存在登錄檔裡面
reg query HKEY_CURRENT_USER\Software\PremiumSoft\Navicat\Servers\
這只是MySQL的儲存資訊
Navicat不同資料庫儲存的登錄檔路徑
讀取登錄檔值:
按照這樣,也可以讀取其他資料庫的資訊。
拿到這些資訊後,就可以進行離線解密,推薦專案地址:
https://github。com/HyperSine/how-does-navicat-encrypt-password/blob/master/python3/NavicatCipher。py
可以看到已經成功解密出資料庫的密碼了,離線解密完成。
至於線上解密,SharpDecryptPwd也可以完成。
即可
2。Heidisql
HeidiSQL是一款用於簡單化迷你的 MySQL 伺服器和資料庫管理的圖形化介面,因為實踐中遇到了幾次,所以這裡也記錄一下解密方法。
Heidisql敏感資訊
經過對檔案的檢測,發現是存在登錄檔裡面的
其中的密碼檔案會儲存在
HKEY_CURRENT_USER\Software\HeidiSQL\Servers 這個節點下來
如果配置特別多的情況下,條件允許可以上3389去導的,那麼就直接匯出配置檔案即可。
配置檔案就是如上所示。
解密
解密也很簡單,加密方式非常簡單,簡單的來說就是使用了進位制轉換和ASCII碼進行偏移來做保護,詳情參考:文章
貼一個python3解密程式碼:
解密效果如下:
3。PLSQL
PLSQLDeveloper是一款在原版本基礎功能效能上進行改進和最佳化的面向Oracle資料庫,遇到過幾次,這裡也寫一個利用的過程。
要開啟此處的儲存歷史和密碼儲存才會儲存資訊在記錄裡,實踐中運維開啟這個的機率蠻高的,畢竟也懶得一個個去手動輸密碼。
開啟後直接點選右側就可以直接連線進資料庫了。
解密過程
透過對登錄檔和檔案的檢測,發現會操作這麼兩個動作。
C:\Users\admin\AppData\Roaming\PLSQL Developer 14\Preferences\admin
C:\Program Files\PLSQL Developer 14\Preferences\admin
其中的amdin是自己使用者名稱所生成的目錄,其中的user。prefs就是儲存連線資訊的檔案。
連線資訊在LogonHistory和CurrentConnections裡面,一條是一行。
貼一個解密程式碼 C#實現的
程式碼執行效果
遠端控制類
實踐中,往往目標運維或者技術協助會使用像向日葵、Teamview此類軟體進行遠端協助支援,此類軟體不僅僅擴大了攻擊面,有時候對殺軟有直接的Bypass效果,因為此類商用軟體都有數字證書,在防毒軟體來看都是合法的,所以對這類遠端桌面類的軟體進行利用還是相當有必要的,因此下面會講解幾種常見的遠端桌面類的解密。
1。向日葵
解密向日葵的配置檔案有兩處,分別為:encry_pwd、fastcode。
encry_pwd 為本機驗證碼,為密文
fastcode 為本機識別碼,為明文
fastcodehistory 為本機識別碼歷史,為密文,用 base64 解密即可,如果你的向日葵從來沒有連線過別的主機,fastcodehistory 就為空
這三處值在向日葵預設配置檔案路徑裡:
安裝版:C:\Program Files\Oray\SunLogin\SunloginClient\config。ini
便攜版(綠色版):C:\ProgramData\Oray\SunloginClient\config。ini
目前向日葵目前最高版本是:V12。0。1。40571,此版本向日葵已經不把pwd值儲存在配置檔案裡面了。
值的儲存無非是配置檔案和登錄檔,監測一下注冊錶行為即可找到。
而是儲存在了登錄檔裡面。
拿到這兩個值後,推薦使用專案:https://github。com/wafinfo/Sunflower_get_Password
其中還需要觀察的是base_sunlogincode,根據作者的意思,這行值是在使用者登入的情況下產生的一個值,也是鑑權之一,如果有這行值,需要新增進來,解密如下:
賬號密碼正確~
免安裝版,免安裝版則是還是寫入了配置檔案。
2。TeamViewer
TeamViewer比較老牌,出現率也是較高的,TV的利用方式比較簡單,大多數工具都是去獲取程序的控制代碼找到ID和PASS,也有一部分是從記憶體中得到的。
使用SharpDecryptPwd的TeamViewer即可讀出密碼,這裡是一種利用方式。
另外一種就是往對方機器上丟TV,然後再用密碼讀取工具去取出來密碼。
這裡推薦個專案:https://github。com/ianxtianxt/teamview
3。Todesk
Todesk國產的一款遠端桌面級軟體,具有全功能版和精簡版
全功能版的配置檔案如下路徑:
其中的
則是密碼,利用的方式也很簡單。只需拿tempAuthPassEx在我們本地ToDesk配置檔案中進行替換,然後重新執行ToDesk軟體後即可得到他的明文密碼。
這個方法不會動目標的客戶端,非常好用。
還有一種方法是去操作他的客戶端,官方提供了一個命令列的操作文件。
https://docs。todesk。com/zh-CN/command
同時也可以發現Todesk的預設密碼認證方式是:
按照此文件,嘗試命令列去追加一個安全密碼。
ToDesk。exe -setpasswd password 此方法需要UAC。
使用此命令追加一個安全密碼即可,追加後config。ini中的配置檔案,authPassEx值會產生變化。
也可以生成一個在本機生成一個安全值,然後貼上到目標config。ini的安全值上進行連線。
瀏覽器類
1。firefox
火狐有一個主密碼的概念,即訪問這些檔案都需要此密碼,如果此密碼夠強,按理來說應該是解不開的,所以本文測試也只寫了不存在主密碼的情況下。
火狐敏感資訊檔案
火狐瀏覽器的儲存資訊是儲放在
這個目錄下
其中的。xxxxxxdefault是儲存的資訊,
解密過程:
如圖所示有以上兩種配置檔案,那麼。default 和 。default-release的區別在哪裡呢,經過驗證,如果正常的使用火狐瀏覽器,那麼。default-release是你的儲存資訊的配置檔案才對。
原因是火狐在更新至67版本後,為發行版和測試版都新增了一項配置檔案,其中是。default是測試版專用的配置檔案。
詳情參考:https://support。mozilla。org/gl/questions/1264072
關於火狐加密方式的參考:https://github。com/lclevy/firepwd
根據該文件的定義,基於不同的版本,火狐瀏覽器儲存的資訊和加密方式也稍有不同。
其中如果火狐版本是大於>==75。0,那麼需要找到key4。db和logins。json檔案
logins檔案:
以Firefox 版本 >=94。0。2為例,將使用者所有登入資訊(包括網址URL,使用者名稱,密碼和其他資料)儲存為JSON。其中的password是經過了的雜湊演算法和加密,然後經過火狐自主建立的ASN。1編碼後再轉換成base64編碼最後寫入檔案中。用一個測試登入資訊如上所示,其中encryptedUsername和encryptedPassword就是被加密的使用者名稱和密碼。
過程稍微有些複雜,個人能力有限,這裡不去詳細的研究火狐的一個手動解密方式,不過已經知道了要解密的需要些什麼:
不管是基於什麼版本,只需要打包下載整個配置檔案目錄即可:
C:\Users\admin\AppData\Roaming\Mozilla\Firefox\Profiles
最後推薦使用專案:https://github。com/unode/firefox_decrypt
如果對方沒有設定主密碼,在key4。db和logins。json都存在的情況下,指令碼是可以解密的。
線上解密的話也有很多工具,諸如https://github。com/moonD4rk/HackBrowserData,這裡不做演示了。
2。Chrome
我這裡安裝的chrome版本已經是V9了
在使用谷歌瀏覽器時,如果我們輸入某個網站的賬號密碼,會自動彈出是否儲存的密碼框,以便下次登入的時候自動填寫賬號和密碼,其中儲存的密碼可以在設定-密碼裡面直接看到。
Chrome相對來說複雜一些,谷歌引入了一個MasterKey,用DPAPI進行保護。因為的版本不同,新版加密演算法為aesGCM加密+DPAPI,而老版本直接使用了DPAPI進行保護,key保存於配置檔案檔案中。
概念解釋:
chrome v80 版本前
是直接可以透過DPAPI中的解密函式 CryptUnprotectData來進行解密的。
chrome v80 版本後
Chrome相對來說複雜一些,谷歌引入了一個MasterKey,用DPAPI進行保護。因為的版本不同,新版加密演算法為aesGCM加密+DPAPI,key保存於配置檔案檔案中,谷歌引入了一個MasterKey,用DPAPI進行保護,而老版本直接使用了DPAPI進行保護,key保存於配置檔案檔案中。
DPAPI概念
Data Protection Application Programming Interface(資料保護API)
資料保護API
(全稱:
Data Protection Application Programming Interface
,縮寫
DPAPI
)是一個簡單的密碼學應用程式介面 ,作為一個元件內建在Windows 2000及之後版本的Microsoft Windows作業系統中。理論上,資料保護API可以實現任何型別的資料對稱加密;在實踐中,其在Windows作業系統中的主要用途是執行非對稱私鑰的對稱加密,使用使用者或系統的秘密資訊作為熵的重要來源。
對於幾乎所有密碼系統來說,最困難的挑戰之一是“金鑰管理”——其中部分即是,如何安全地儲存解密金鑰。如果金鑰以純文字儲存,則可以訪問金鑰的任何使用者都可以訪問加密的資料。如果金鑰被加密,則又需要另一個金鑰,週而復始。DPAPI允許開發者使用從使用者的登入私鑰匯出的對稱金鑰來加密金鑰,或者在系統加密的情況下使用系統的域驗證私鑰來加密金鑰。
Google的敏感配置檔案
cookie檔案:
密碼檔案:
歷史記錄及下載記錄:
書籤檔案:
快取及自動錶單
其中密碼檔案是加密的,不過其實他是一個sql3的資料庫,使用SQLlite開啟即可。
關於離線解密的一個過程,團隊小夥伴有過相關的研究,這裡直接貼一個他的文章。
解密過程
1。離線讀取
(1)下載LSASS程序映象
(2)mimikatz載入dmp檔案並獲取各個Master Key file對應的MasterKey(使用這個命令定位對應的MasterKey)
(3)登錄檔檔案讀取MasterKey
(4)從登錄檔檔案中獲得DPAPI_SYSTEM
DPAPI_SYSTEM中的user hash為,能夠用來解密位於下的系統Master Key file
(5)下載Master Key file
(6)解密系統的Master Key file,獲得MasterKey
(7)對配置檔案進行解密,並獲取加密key
使用MasterKey解密配置檔案
複製解密後資料並轉換為文字
複製解密後資料並轉換為文字
讀取其中的值
(8)使用key對瀏覽器加密資料進行解密(golang函式)
最後
迫於個人能力有限,只能寫出這些常用的工具的利用過程,其文參考了許多前輩的智慧,現也有很多優秀的線上工具使用,貼一些文件參考:
《[從mimikatz看Windows DPAPI資料解密》
https://www。secrss。com/articles/35800
《hack-browser-data 是一個開源工具,可以幫助您從瀏覽器解密資料》
https://github。com/moonD4rk/HackBrowserData
《使用mimikatz匯出chrome密碼》
http://redteam。today/2019/12/09/%E4%BD%BF%E7%94%A8mimikatz%E5%AF%BC%E5%87%BAchrome%E5%AF%86%E7%A0%81/
《chrome瀏覽器cookie及密碼解密chrome中的敏感檔案位置》
http://knlght。top/2020/08/03/chrome%E6%B5%8F%E8%A7%88%E5%99%A8cookie%E5%8F%8A%E5%AF%86%E7%A0%81%E8%A7%A3%E5%AF%86/#chrome%E4%B8%AD%E7%9A%84%E6%95%8F%E6%84%9F%E6%96%87%E4%BB%B6%E4%BD%8D%E7%BD%AE
《獲取執行中的TeamViewer的賬號和密碼》
https://blog。csdn。net/nzjdsds/article/details/83109974?spm=1001。2101。3001。6650。4&utm_medium=distribute。pc_relevant。none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-4。no_search_link&depth_1-utm_source=distribute。pc_relevant。none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-4。no_search_link