Как деобфускировать пароль sssd.conf?

Я унаследовал несколько экземпляров 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, потому что он используется на многих серверах.

2
задан 7 March 2019 в 00:49
2 ответа

Около года назад мне довелось написать небольшой скрипт, который расшифровывает эти пароли.

Интересно, что разработчики SSS пошли на многое с алгоритмом обфускации, используя, например, AES-256 , но в конце концов его все еще легко расшифровать, потому что они объединяют случайно сгенерированные ключ шифрования в закодированной строке. Странно.

Я разместил это для вас на GitHub: https://github.com/mludvig/sss_deobfuscate

Использование простое:

$ ./sss_deobfuscate AAAQABagVAjf9KgUyIxTw3A+HUfbig7N1+L0qtY4xAULt2GYHFc1B3CBWGAE9ArooklBkpxQtROiyCGDQH+VzLHYmiIAAQID
Decoded password: Passw0rd

Надеюсь, что это поможет :)

7
ответ дан 3 December 2019 в 08:41

Ответ @ MLu выполнит свою работу, но я добавлю комментарий.

Жаль, что разработчики назвали методы encrypt () и decrypt () , так как они не делают ничего подобного.

Если вы посмотрите на исходный код модуля python ( src / python / pysss.c ), то обнаружите 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)
3
ответ дан 3 December 2019 в 08:41

Теги

Похожие вопросы