2011-07-06 88 views
1

我想知道用戶的密碼連接數據庫,而無需用戶輸入他們的密碼數據庫。 我知道連接數據庫postgresql的密碼保存在pg_auth中。但我不知道如何解密它沒有密鑰。解密密鑰pg_auth Postgresql

回答

1

據文檔,45.8. pg_authid

密碼(可能被加密);如果 無null。如果密碼已加密,則此列將包含字符串 md5,後跟32個字符的 十六進制MD5哈希。 MD5散列 將用戶密碼 連接到他們的用戶名(例如, 例如,如果用戶joe有密碼 xyzzy,PostgreSQL將存儲xyzzyjoe的md5 散列)。

換句話說,這個密碼很可能是md5加密的(這是PostgreSQL的默認值),並且你不能得到純文本,因爲它沒有存儲在任何地方。例如,讓我們說,我有postgres作用與12345密碼:

SELECT rolpassword FROM pg_authid WHERE rolname LIKE 'postgres'; 
      rolpassword    
------------------------------------- 
md5738d021d4bc194576641fa9936656836 
(1 row) 

MD5是單向散列函數,所以它不是小事,以恢復它的參數(但是你可以用John the Ripper嘗試或使用彩虹表):

echo -n "12345postgres" | md5sum 
738d021d4bc194576641fa9936656836 - 

另一個(更簡單的)方法是將pg_hba.conf驗證方法更改爲非密碼(例如ident)。

編輯:

隨着HashCat工具(使用前閱讀EULA)與PostgreSQL的md5($pass.$salt)模式,你可以寫(當然,這只是簡化CPU蠻力爲例):

echo 738d021d4bc194576641fa9936656836:postgres > hash.txt 
time ./hashcat-cli64.bin --hash-mode 1 --attack-mode 3 --bf-cs-buf\ 
--bf-pw-min 1 --bf-pw-max 5 hash.txt 
... 
738d021d4bc194576641fa9936656836:postgres:12345 
All hashes have been recovered 

real 0m0.010s 
user 0m0.012s 
sys  0m0.004s