是否可以通过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 ...”是什么意思,如何在这里获取密码?我必须编码吗?如果是,我该如何解决? 获得其他操作属性是没有问题的。
最诚挚的问候!
答案 0 :(得分:0)
一旦进入配置了HASH(PASSWORD + SALT)密码存储的LDAP(userPassword属性的默认类型),就无法以明文形式检索原始密码。
答案 1 :(得分:0)
我发现了以前的问题LINK
这种方法是正确的还是可能的?因为它不起作用,因为似乎userPassword是&#34; null&#34;
Attribute userPassword = entry.getAttributes().get("userPassword");
&#34;使用ldap,我们将获取字节数组中的数据。如果需要获取原始密码文本,请使用
以下代码:&#34;
Attribute userPassword = attributes.get("userPassword");
String pwd = new String((byte[]) userPassword.get());
答案 2 :(得分:0)
我知道这感觉像是在做死刑,但最近我对TDS进行了一些研究,发现了一些对其他人可能有用的线索。 我不是Java开发人员,因为我不是开发人员,所以我无法为您提供帮助,但是我可以回答您有关ldapsearch如何返回明文userPassword属性的问题。
这是默认的TDS行为,默认情况下,它对加密的属性(例如userPassword)使用双向加密算法(默认为AES256),对这些属性的每次访问都会解密属性值并返回纯文本密码。 / p>
也许在您的Java应用程序中,您正在使用其他用户来查询TDS? 您可以使用cn = root临时检查。