-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

次の以前の質問LINKを見つけました

そのアプローチは正しいですか、それとも可能ですか? うまくいかないので、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

これがネクロポストのように感じられることはわかっていますが、最近 TDS について調査を行ったところ、他の誰かに役立つかもしれない手がかりが見つかりました。私は開発者ではないので、Java についてはお手伝いできませんが、ldapsearch が cleartext の userPassword 属性を返す可能性がある理由についての質問にはお答えできます。

これはデフォルトの TDS 動作です。デフォルトでは、暗号化された属性 (userPassword など) に双方向暗号化アルゴリズム (デフォルトでは AES256) を使用し、これらの属性にアクセスするたびに属性値を復号化し、平文のパスワードを返します。

Java アプリケーションで、TDS を照会するために別のユーザーを使用している可能性がありますか? cn=root を使用して一時的に確認できます。

于 2020-07-21T17:43:19.430 に答える