0x00 前言在上篇文章《Password Manager Pro漏洞调试环境搭建》 介紹了漏洞調試環境的搭建細節,經測試發現數據庫的部分數據做了加密,本文將要介紹數據解密的方法。
0x01 簡介本文將要介紹以下內容:
數據加密的位置
解密方法
開源代碼
實例演示
0x02 數據加密的位置測試環境同《Password Manager Pro漏洞调试环境搭建》 保持一致
數據庫連接的完整命令:'C:\Program Files\ManageEngine\PMP\pgsql\bin\psql' 'host=127.0.0.1 port=2345 dbname=PassTrix user=pmpuser password=Eq5XZiQpHv'
數據庫連接成功,如下圖
常見的數據加密位置有以下三個:
(1)Web登錄用戶的口令salt查詢Web登錄用戶名的命令:select * from aaauser;
查詢Web登錄用戶口令的命令:select * from aaapassword;
結果如下圖
password的加密格式為bcrypt(sha512($pass))/bcryptsha512 *,對應Hashcat的Hash-Mode為28400
其中,salt項被加密
(2)數據庫高權限用戶的口令查詢命令:select * from DBCredentialsAudit;
輸出如下:
password項被加密
(3)保存的憑據查詢命令:select * from ptrx_passbasedauthen;
結果如下圖
password項被加密
導出憑據相關完整信息的查詢命令:
注:
該命令引用自https://www.shielder.com/blog/2022/09/how-to-decrypt-manage-engine-pmp-passwords-for-fun-and-domain-admin-a-red-teaming-tale/
0x03 解密方法加解密算法細節位於C:\Program Files\ManageEngine\PMP\lib\AdventNetPassTrix.jar中的com.adventnet.passtrix.ed.PMPEncryptDecryptImpl.class和com.adventnet.passtrix.ed.PMPAPI.class
解密流程如下:
(1)計算MasterKey代碼實現位置:C:\Program Files\ManageEngine\PMP\lib\AdventNetPassTrix.jar-com.adventnet.passtrix.ed.PMPAPI.class-GetEnterpriseKey()
如下圖
首先需要獲得enterpriseKey,通過查詢數據庫獲得,查詢命令:select NOTESDESCRIPTION from Ptrx_NotesInfo;
輸出為:
這裡可以得到enterpriseKey為D8z8c/cz3Pyu1xuZVuGaqI0bfGCRweEQsptj2Knjb/U=
解密enterpriseKey的實現代碼:
跟進一步,如下圖
解密的密鑰通過getPmp32BitKey()獲得,對應的代碼實現位置:C:\Program Files\ManageEngine\PMP\lib\AdventNetPassTrix.jar-com.adventnet.passtrix.ed.PMPAPI.class-get32BitPMPConfKey()
代碼實現細節如下圖
這裡需要先讀取文件C:\Program Files\ManageEngine\PMP\conf\manage_key.conf獲得PMPConfKey的保存位置,默認配置下輸出為:C:\Program Files\ManageEngine\PMP\conf\pmp_key.key
查看C:\Program Files\ManageEngine\PMP\conf\pmp_key.key的文件內容:
通過動態調試發現,這裡存在轉義字符的問題,需要去除字符\,文件內容為60XVZJQDEPzrTluVIGDY2y9q4x6uxWZanf2LUF2KBCM\=,對應的PMPConfKey為60XVZJQDEPzrTluVIGDY2y9q4x6uxWZanf2LUF2KBCM=
至此,我們得到以下內容:
PMPConfKey為60XVZJQDEPzrTluVIGDY2y9q4x6uxWZanf2LUF2KBCM=
enterpriseKey為D8z8c/cz3Pyu1xuZVuGaqI0bfGCRweEQsptj2Knjb/U=
通過解密程序,最終可計算得出MasterKey為u001JO4dpWI(%!^#
(2)使用MasterKey解密數據庫中的數據數據庫中的加密數據均是以\x開頭的格式
解密可通過查詢語句完成
解密數據庫高權限用戶口令的命令示例:select decryptschar(password,'u001JO4dpWI(%!^#') from DBCredentialsAudit;
輸出如下圖
這裡直接獲得了明文口令N5tGp!R@oj,測試該口令是否有效的命令:'C:\Program Files\ManageEngine\PMP\pgsql\bin\psql' 'host=127.0.0.1 port=2345 dbname=PassTrix user=postgres password=N5tGp!R@oj'
連接成功,證實口令解密成功,如下圖
解密保存憑據的命令示例:select ptrx_account.RESOURCEID, ptrx_resource.RESOURCENAME, ptrx_resource.DOMAINNAME, ptrx_resource.IPADDRESS, ptrx_resource.RESOURCEURL, ptrx_password.DESCRIPTION, ptrx_account.LOGINNAME, decryptschar(ptrx_passbasedauthen.PASSWORD,'u001JO4dpWI(%!^#') from ptrx_passbasedauthen LEFT JOIN ptrx_password ON ptrx_passbasedauthen.PASSWDID=ptrx_password.PASSWDID LEFT JOIN ptrx_account ON ptrx_passbasedauthen.PASSWDID=ptrx_account.PASSWDID LEFT JOIN ptrx_resource ON ptrx_account.RESOURCEID=ptrx_resource.RESOURCEID;
輸出如下圖
提取出數據為PcQIojSp6/fuzwXOMI1sYJsbCslfuppwO+k=
(3)使用PMPConfKey解密得到最終的明文通過解密程序,最終可計算得出明文為iP-6pI24)-
登錄Web管理後台,確認解密的明文是否正確,如圖
解密成功
0x03 開源代碼以上測試的完整實現代碼如下:
代碼修正了https://www.shielder.com/blog/2022/09/how-to-decrypt-manage-engine-pmp-passwords-for-fun-and-domain-admin-a-red-teaming-tale/中在解密MasterKey時的Bug,更具通用性
0x04 小結本文介紹了Password Manager Pro數據解密的完整方法,修正了https://www.shielder.com/blog/2022/09/how-to-decrypt-manage-engine-pmp-passwords-for-fun-and-domain-admin-a-red-teaming-tale/中在解密MasterKey時的Bug,更具通用性。
Recommended Comments