2011-07-06 82 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