-1

是否可以通过 java 从 ClearText 中的 TDS 获取用户密码?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: xxxxxx@xx.xxx.com, 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..." 是什么意思,我如何在这里获取密码?我必须对其进行编码吗?如果是,我该如何解决?获取其他操作属性没有问题。

此致!

4

3 回答 3

0

我发现了以下较早的问题链接

这种方法是正确的还是可能的?因为它不起作用,因为似乎 userPassword 是“null” Attribute userPassword = entry.getAttributes().get("userPassword");

“使用 ldap,我们将获取字节数组中的数据。如果您需要获取原始密码文本,请使用以下代码:” Attribute userPassword = attributes.get("userPassword"); String pwd = new String((byte[]) userPassword.get());

于 2016-09-27T11:37:06.330 回答
0

一旦进入配置了 HASH(PASSWORD+SALT) 密码存储(userPassword 属性的默认类型)的 LDAP,就无法以明文形式检索原始密码。

于 2016-09-27T09:57:12.470 回答
0

我知道这感觉像是在发布 necroposting,但我最近对 ​​TDS 进行了一些研究,发现了一些可能对其他人有用的线索。我无法帮助您使用 java,因为我不是开发人员,但我可以回答您关于 ldapsearch 如何返回明文 userPassword 属性的问题。

这是默认的 TDS 行为,默认情况下它对加密的属性(例如 userPassword)使用双向加密算法(默认为 AES256),每次访问这些属性都会解密属性值并返回一个明文密码。

也许在您的 Java 应用程序中,您使用不同的用户来查询 TDS?您可以使用 cn=root 临时检查。

于 2020-07-21T17:43:19.430 回答