我继承了一些带有 Centos 的 EC2 实例,这些实例通过 LDAP 根据 AWS Directory Service 对用户进行身份验证。现在我需要ldapsearch
使用同一个帐户运行一些手动查询来调试一些身份验证问题。但是密码在配置中是加密的,如下所示:
[sssd]
domains = LDAP
services = nss, pam
[domain/LDAP]
id_provider = ldap
cache_credentials = True
ldap_schema = AD
ldap_uri = ldaps://...
ldap_search_base = ...
ldap_default_bind_dn = ...
ldap_default_authtok = AAAQAB3QDeZ7+...cBSpT0ZABu4AAQID
ldap_default_authtok_type = obfuscated_password
有什么方法可以解密/反混淆吗ldap_default_authtok
?我不想在 AD 中更改它,因为它在许多服务器上使用。
答案1
大约一年前,我碰巧编写了一个解密这些密码的小脚本。
有趣的是南海开发人员在混淆算法上花费了很大功夫,使用AES-256例如,但最终它仍然很容易被破译,因为它们捆绑了随机生成的加密密钥在编码的字符串中。很奇怪。
我把它放到了 GitHub 上供你参考:https://github.com/mludvig/sss_deobfuscate
使用方法很简单:
$ ./sss_deobfuscate AAAQABagVAjf9KgUyIxTw3A+HUfbig7N1+L0qtY4xAULt2GYHFc1B3CBWGAE9ArooklBkpxQtROiyCGDQH+VzLHYmiIAAQID
Decoded password: Passw0rd
希望有帮助:)
答案2
@MLu 的回答可以完成这项工作,但我会添加一些评论。
遗憾的是,开发人员调用了这些方法encrypt()
,但decrypt()
他们并没有做这样的事情。
如果你查看 python 模块的源代码(src/python/pysss.c
),你会发现有一个pysss.password.decrypt()
方法,但它被包围了。如果删除#if 0..#endif
那些(以及 c-python 链接周围的对应内容)并重新编译源代码,则可以调用。例如:#if 0..#endif
decrypt()
import pysss
password = 'swordfish'
print(password)
obfobj = pysss.password()
obfpwd = obfobj.encrypt(password, obfobj.AES_256)
print(obfpwd)
decrypted_password = obfobj.decrypt(obfpwd)
print(decrypted_password)
答案3
https://github.com/jteppinette/python-sssd-ldap-auth
我根据@MLu 的工作创建了一个 python 包。
安装
$ pip install sssdldapauth
用法
命令行界面
$ sssdldapauth deobfuscate <obfuscated_password>
<password>
图书馆
from sssdldapauth import deobfuscate
password = deobfuscate("<obfuscated_password>")