TDS - получить пароль пользователя

возможно ли получить пароль пользователя от TDS в ClearText через java? С ldapsearch -v -D cn=root -w xxxxxx -s sub uid=testuser userPassword я получаю следующий результат:

введите здесь описание изображения

Пароль в таком случае: Joko2014!

В Java я пробовал это с помощью:

String[] attrIDs = {".....",....,"userPassword"}
SearchControls ctls = new SearchControls();
ctls.setReturningAttributes(attrIDs);
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);

NamingEnumeration<SearchResult> results = ctx.search(name,
                        filter, ctls);

while (results.hasMore()) {
    SearchResult entry = results.next();
    System.out.println(entry);
}

Но вывод в консоли просто:

uid=testuser: null:null:{givenname=givenName: xxxx, sn=sn: xxx, pwdchangedtime=pwdChangedTime: 20160926173016.000000Z, mail=mail: [email protected], uid=uid: testuser, userpassword;binary=userPassword;binary: [B@1a626f, pwdreset=pwdReset: true, cn=cn: xxxx, description=description: xxxxxx;xxxxxx;I;xxxxxx}

Что означает «binary=userPassword;binary:[B@1a626f...» и как я могу получить здесь пароль? Должен ли я кодировать это? Если да, то как я могу это решить? Получить другие рабочие атрибуты не проблема.

С уважением!


person InfoEngi    schedule 27.09.2016    source источник
comment
Нет, если сервер LDAP настроен правильно. Это должно быть хеширование паролей, что является односторонним процессом. Если вы не настроили свой сервер. см. здесь почему вы должны.   -  person user207421    schedule 27.09.2016
comment
Вы имеете в виду, если сервер настроен правильно, пароли не могут быть получены или если он правильно настроен, я могу? Возможна ли конфигурация с помощью веб-инструмента администрирования IBM Security Directory Server? Потому что мне действительно нужно извлечь пароли и снова импортировать их в другое место.   -  person InfoEngi    schedule 27.09.2016
comment
Вы не можете получить пароли открытым текстом, если сервер OpenLDAP настроен правильно. Я не знаю, почему вы говорите об инструменте веб-администрирования IBM Security Directory Server, когда ваш вопрос касается OpenLDAP.   -  person user207421    schedule 27.09.2016
comment
Ну, это не OpenLdap-сервер, это TDS-сервер. И я использую инструмент веб-администрирования IBM Security Directory Server в качестве графического интерфейса. Но для поиска или изменения я использую ldapsearch или ldapmodify из openldap.   -  person InfoEngi    schedule 27.09.2016
comment
Итак, почему ваш вопрос озаглавлен и помечен как OpenLDAP? и почему вы не упомянули реальный сервер в своем вопросе? и теги?   -  person user207421    schedule 27.09.2016
comment
Извини чувак! Я только что написал пароль пользователя из TDS и использовал openldap. Я думал, что этого достаточно...   -  person InfoEngi    schedule 27.09.2016


Ответы (3)


Попав в LDAP, который настроен с хранилищем паролей HASH (PASSWORD + SALT) (тип по умолчанию для свойства userPassword), невозможно получить исходный пароль в открытом виде.

person Ironluca    schedule 27.09.2016
comment
Знаете ли вы, где я могу увидеть, настроен ли он с помощью хэша (пароль + соль)? Может быть, я могу изменить его, чтобы получать пароли в открытом виде. - person InfoEngi; 27.09.2016
comment
Обычно это параметр конфигурации, я не очень хорошо разбираюсь в конфигурации OpenLDAP, однако я думаю, что вы можете найти параметры конфигурации на справочных страницах/документации OpenLDAP. - person Ironluca; 27.09.2016
comment
хорошо, я нашел опцию в TDS ... и в разделе «Управление свойствами безопасности / шифрование пароля» настроено AES256 — шифрование. Но я не понимаю, я могу увидеть пароль в открытом виде только с помощью ldapsearch -v -D cn=root -w xxxxxx -s sub uid=testuser userPassword - person InfoEngi; 27.09.2016
comment
Если пароль зашифрован, а не хеширован, то пароль в исходном виде доступен (после хеширования - нет). Я предполагаю, что, поскольку вы получаете доступ как root, вы можете увидеть расшифрованный пароль, я думаю, это было бы поведением TDS. - person Ironluca; 27.09.2016

Я нашел следующий предыдущий вопрос ССЫЛКА

Является ли такой подход правильным или возможным? Потому что это не работает, потому что кажется, что userPassword "нулевой" Attribute userPassword = entry.getAttributes().get("userPassword");

"с помощью ldap мы получим данные в массиве байтов. Если вам нужно получить исходный текст пароля, используйте следующий код:" Attribute userPassword = attributes.get("userPassword"); String pwd = new String((byte[]) userPassword.get());

person InfoEngi    schedule 27.09.2016
comment
Нет, не будет, как только ХЭШ (ПАРОЛЬ + СОЛЬ) вы получите это значение в строке pwd, а не исходный пароль пользователя - person Ironluca; 27.09.2016

Я знаю, что это похоже на некропостинг, но недавно я провел небольшое исследование TDS и нашел подсказку, которая может быть полезна кому-то еще. Я не могу помочь вам с java, потому что я не разработчик, но я могу ответить на ваш вопрос о том, как возможно, что ldapsearch возвращает атрибут userPassword в открытом виде.

Это поведение TDS по умолчанию, по умолчанию он использует алгоритм двустороннего шифрования (AES256 по умолчанию) для зашифрованных атрибутов (таких как userPassword), каждый доступ к этим атрибутам расшифровывает значение атрибута и возвращает пароль в виде открытого текста.

Может быть, в вашем Java-приложении вы используете другого пользователя для запроса TDS? Вы можете временно проверить, используя cn=root.

person Tasslehoff Burrfoot    schedule 21.07.2020