Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    86375452

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

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.png常見的數據加密位置有以下三個:

(1)Web登錄用戶的口令salt查詢Web登錄用戶名的命令:select * from aaauser;

查詢Web登錄用戶口令的命令:select * from aaapassword;

結果如下圖

2.png

password的加密格式為bcrypt(sha512($pass))/bcryptsha512 *,對應Hashcat的Hash-Mode為28400

其中,salt項被加密

(2)數據庫高權限用戶的口令查詢命令:select * from DBCredentialsAudit;

輸出如下:

3.png

password項被加密

(3)保存的憑據查詢命令:select * from ptrx_passbasedauthen;

結果如下圖

4.png

password項被加密

導出憑據相關完整信息的查詢命令:

5.png注:

該命令引用自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()

如下圖

6.png

首先需要獲得enterpriseKey,通過查詢數據庫獲得,查詢命令:select NOTESDESCRIPTION from Ptrx_NotesInfo;

輸出為:

7.png

這裡可以得到enterpriseKey為D8z8c/cz3Pyu1xuZVuGaqI0bfGCRweEQsptj2Knjb/U=

解密enterpriseKey的實現代碼:

8.png跟進一步,如下圖

9.png

解密的密鑰通過getPmp32BitKey()獲得,對應的代碼實現位置:C:\Program Files\ManageEngine\PMP\lib\AdventNetPassTrix.jar-com.adventnet.passtrix.ed.PMPAPI.class-get32BitPMPConfKey()

代碼實現細節如下圖

10.png

這裡需要先讀取文件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的文件內容:

11.png

通過動態調試發現,這裡存在轉義字符的問題,需要去除字符\,文件內容為60XVZJQDEPzrTluVIGDY2y9q4x6uxWZanf2LUF2KBCM\=,對應的PMPConfKey為60XVZJQDEPzrTluVIGDY2y9q4x6uxWZanf2LUF2KBCM=

至此,我們得到以下內容:

PMPConfKey為60XVZJQDEPzrTluVIGDY2y9q4x6uxWZanf2LUF2KBCM=

enterpriseKey為D8z8c/cz3Pyu1xuZVuGaqI0bfGCRweEQsptj2Knjb/U=

通過解密程序,最終可計算得出MasterKey為u001JO4dpWI(%!^#

(2)使用MasterKey解密數據庫中的數據數據庫中的加密數據均是以\x開頭的格式

解密可通過查詢語句完成

解密數據庫高權限用戶口令的命令示例:select decryptschar(password,'u001JO4dpWI(%!^#') from DBCredentialsAudit;

輸出如下圖

12.png

這裡直接獲得了明文口令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'

連接成功,證實口令解密成功,如下圖

13.png

解密保存憑據的命令示例: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;

輸出如下圖

14.png

提取出數據為PcQIojSp6/fuzwXOMI1sYJsbCslfuppwO+k=

(3)使用PMPConfKey解密得到最終的明文通過解密程序,最終可計算得出明文為iP-6pI24)-

登錄Web管理後台,確認解密的明文是否正確,如圖

15.png

解密成功

0x03 開源代碼以上測試的完整實現代碼如下:

16.png 17.png 18.png 19.png 20.png 21.png 22.png 23.png

代碼修正了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,更具通用性。