看我如何破解OpenNMS哈希密碼?
背景
在最近的一次滲透測試中,我拿下了一台運行OpenNMS的伺服器,並獲取了該伺服器的root訪問許可權。在後利用階段我提取了幾個本地用戶的哈希密碼,我想嘗試破解這些哈希值因為這些密碼可能會被重複用在其他重要認證上。但對於OpenNMS的哈希密碼我幾乎一無所知,通過在Google上的一番搜索也並未發現任何有價值的資源。為此,我決定發布一款Python工具以幫助那些OpenNMS伺服器的滲透測試者。具初步了解這些哈希密碼是base64編碼的字元串,前16個位元組是鹽,剩餘的32個位元組是sha256(salt.password)的100,000次迭代。
百疏一漏
我們發現了一個伺服器當前正運行著一個老舊的OpenNMS版本,而該版本曾被曝出存在一個已知的Java反序列化漏洞。漏洞詳情可以參考FoxGlove Security發布的這篇文章。
Metasploit模塊的利用並不容易。我們將模塊指向了埠為1099的RMI介面,將payload設置為linux/x86/shell_reverse_tcp,並給予了以root許可權運行的shell:
OpenNMS被安裝在/opt/opennms中,我通過shell瀏覽了該目錄,並找到了一個定義OpenNMS的本地用戶帳戶的文件。通過對一些用戶名的觀察,我意識到其中一些賬戶很可能是該組織的超級管理員賬戶,這更激起了我的破解慾望。
哈希被存儲在/opt/opennms/etc/users.xml中,如下所示:
以上XML中被加鹽的這串字元引起了我的注意:
L5j2hiVX4B+LTHnY3Mwq5m5dBZzNdHhiBpvBjyCerBsBqqJcxRUsRAxaDQtjRkcn
我首先想到了john和hashcat並查看了它們的幫助頁面,看是否有OpenNMS哈希模式,但可惜的是並沒有發現任何有用的信息。然後我又使用Google進行了查詢,仍然沒有找到任何有關OpenNMS哈希是如何鹽化和/或計算的解釋。因此我決定自己來分析和破解它。
散列識別
大多數密碼破解程序都會使用十六進位來表示哈希,因此我將XML中的base64值轉換為十六進位:
接著,我使用了一個基於Python的HASH加密方式識別工具hashID來幫助我進行初步的hash判斷:
從以上結果可以看到這可能是SHA-384加密,但這種加密是非常罕見的,因此我對其準確性持懷疑態度。
明文識別
即便我知道了它正確的哈希演算法,但我仍然不知道它是如何加的鹽,更不用說它加的鹽是什麼。我首先想到的是,鹽可能被存儲在OpenNMS使用的PostgresQL資料庫中。由於我當前的許可權為root,因此我可以連接資料庫並查看錶數據。經過一番查找並沒有發現任何與密碼或鹽有關的數據。據此我斷定,它一定被存儲在應用程序的某個位置。
OpenNMS是一個開源的系統,因此我來到了它的Github頁面並搜索了關鍵字「salt」。我獲取到了一些用於測試的users.xml文件示例。
通過對源代碼的檢索,我發現了一處哈希密碼加鹽的斷言測試:
經過對上述測試代碼中的「rtc」用戶哈希加鹽計算後我們發現,其結果與我們之前發現的users.xml中的加鹽密碼哈希值相同。這意味著我們成功獲取到了一個本地用戶的明文密碼。
明文:
rtc
加鹽哈希:
L5j2hiVX4B+LTHnY3Mwq5m5dBZzNdHhiBpvBjyCerBsBqqJcxRUsRAxaDQtjRkcn
雖然我們仍然無法獲知它是如何加的鹽以及鹽是什麼,但是這為我們提供了一個很好的判斷依據。
哈希演算法識別
現在讓我們把視線從Github上轉回到我們的root shell。雖說Github上的源代碼為我們提供了一個很好的參考依據,但伺服器上代碼可能會有所不同。因此,如果在伺服器上找到源碼會獲得更準確的信息。
我進入到了opennms目錄,並通過搜索關鍵字「salt」來定位:
可以看到搜索出了大量包含」salt」關鍵字的JAR庫文件,這裡我們尤其關注./lib/jasypt-1.9.0.jar這個文件。
從他們的官方主頁上我們了解到,Jasypt是一個java庫,它允許開發人員不需要深入了解加密技術的工作原理,就可以輕鬆的為自己項目添加基本的加密功能。
通過對文檔的進一步挖掘,我發現了一個讓我看到有希望的東西:一個名為StrongPasswordEncryptor的類,它使用另一個被稱為StandardStringDigester的類。以下是文檔中關於StrongPasswordEncryptor類的簡單描述:
Jasypt同樣是開源的,因此我在Github上找到了這兩個類的源碼(StrongPasswordEncryptor和StandardStringDigester)。通過StandardStringDigester源碼中的注釋信息,我終於弄明白了digest是如何構建的。
至此,我已經獲取到了所有我需要的信息:
明文:
「rtc」
Digest:
L5j2hiVX4B+LTHnY3Mwq5m5dBZzNdHhiBpvBjyCerBsBqqJcxRUsRAxaDQtjRkcn
鹽長度:
16位元組
Digest格式:
(salt.password)
演算法:
sha256
迭代:
100,000
混合計算
現在讓我們來驗證一下演算法,我們需要將鹽的位元組與明文連接,然後計算一個sha256摘要100,000次。我寫了一個Python腳本來幫助我們驗證明文和密碼:
並用已知的明文進行測試,可以看到10萬次迭代後我們得到了正確的結果!
編寫一個破解器
為了方便大家對opennms哈希密碼的額破解,我在Github上發布了一款Python編寫的爆破腳本。你可以通過以下鏈接獲取到:
https://github.com/ropnop/opennms_hash_cracker
該腳本首先會提取users.xml文件中的哈希值,然後使用我們提供的字典對散列進行爆破。此外,該腳本也包含了一些邏輯來解析和測試OpenNMS的無鹽哈希(也就是MD5摘要)。以下是它的運行示例:
雖然這個腳本的速度和成功率可能都不太理想。但是如果你使用的爆破字典較小或爆破對象使用的是弱密碼,那麼它將非常的有用。如果你懂得編程開發,你還可以將這個腳本移植到hashcat。
*參考來源:ropnop,FB小編 secist 編譯,轉載請註明來自FreeBuf.COM


※更適合作為主系統使用的Parrot Security簡介
※黑產用「未來武器」破解驗證碼,打碼小工都哭了
※六日不見如隔三秋 | 今天FreeBuf公眾號回來了,大家有沒有想我!?
※維基解密更新:CIA新工具HighRise可輕鬆竊取安卓設備簡訊
TAG:FreeBuf |
※如何破解WiFi密碼?
※WiFiKey——破解+密碼查看
※FBI如何破解iPhone
※FBI:我們用死者的手指解鎖iPhone,但Face ID並未破解
※你打算破解Switch嗎?黑客聲稱完成Switch全版破解 任天堂:你看我慌么?
※看我如何使用Hashcat暴力破解Linux磁碟加密
※破解 iPhone 密碼這麼容易?這玩意 50 美元就能破解 iPhone
※神器!破解iPhone X!
※StarUML破解筆記
※Magic Lantern破解EOS R當中 RAW視頻已在路上
※iOS 12封殺破解iPhone密碼設備!
※你的蘋果iPhone還能安全嗎?iPhone目前遭遇頻繁破解
※iOS 被破解:iPhone XS Max底層許可權被黑客破解!
※新型 iPhone 破解器:iOS 涼了?
※新型 iPhone 破解器: iOS 涼了?
※果粉福音!蘋果在iOS 12中封殺破解iPhone密碼設備
※能夠破解iPhone 的神器,iOS要涼?
※Word Excel PDF密碼破解大全
※蘋果USB-C to Lightning快充線再遭破解:小心這些消費坑
※美政府曾要求FB破解嫌犯Messenger加密通話