Я унаследовал несколько экземпляров EC2 с Centos, которые аутентифицируют пользователей в AWS Directory Service через LDAP. Теперь мне нужно выполнить несколько запросов вручную с помощью 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, потому что он используется на многих серверах.
Примерно год назад мне довелось написать небольшой скрипт, который расшифровывает эти пароли.
Интересно то, что SSS разработчики пошли на многое с алгоритмом обфускации, используя AES-256 например, но в конечном итоге его все еще легко расшифровать, потому что они объединяют случайно сгенерированные ключ шифрования в закодированной строке. Странно.
Я выложил это для вас на GitHub: https://github.com/mludvig/sss_deobfuscate
Использование простое:
$ ./sss_deobfuscate AAAQABagVAjf9KgUyIxTw3A+HUfbig7N1+L0qtY4xAULt2GYHFc1B3CBWGAE9ArooklBkpxQtROiyCGDQH+VzLHYmiIAAQID
Decoded password: Passw0rd
Надеюсь, это поможет :)
Ответ @ MLu выполнит свою работу, но я добавлю комментарий.
Жаль, что разработчики назвали методы encrypt()
и decrypt()
поскольку они этого не делают.
Если вы посмотрите на исходный код модуля python (src/python/pysss.c
) Eсть pysss.password.decrypt()
метод, но он окружен #if 0..#endif
. Если те (и соответствующие #if 0..#endif
вокруг связи c-python) удаляются, а исходный код перекомпилируется 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)