2016-11-08 5 views
0

Win32API関数LookupAccountSID()は、SIDに対応する名前を解決できます。ドキュメントによると: LookupAccountSid functionローカル情報のみを使用してSIDからユーザー名を解決します。

のLookupAccountSid関数は最初の既知のSIDのリストをチェックすることにより、指定されたSIDの名前を見つけようとします。指定されたSIDがよく知られているSIDに対応していない場合、この関数は組み込みおよび管理上定義されたローカルアカウントをチェックします。次に、関数はプライマリドメインをチェックします。プライマリドメインで認識されないセキュリティ識別子は、SID接頭辞に対応する信頼されたドメインと照合されます。

ローカルでのみ名前を探す方法はありますか?つまり、関数が呼び出されたPCに名前が見つからない場合、関数はプライマリドメインをチェックする代わりに失敗します。

編集:これはあなたの何であれば明確にするために、私は」

+1

問題を逆転させることができます。SIDがドメインSIDであるかどうかを判断し、そうであれば、それを調べないでください。ドメインSIDは、S-1-5-21で始まり、ドメイン値として[machine SID](http://stackoverflow.com/questions/14113558/)を使用しない*ものです。残っているのは、ビルトインアカウントとローカルアカウントです。免責事項:テストされていません。 –

+0

問題は、ローカルに格納されているドメインユーザーに関する情報を検索することです。ある時点でローカル以外のユーザーがログインしている場合、LookupAccountSidは、コンピュータがオフラインの場合でも正しい名前を返します。 – ggarcia24

+0

これはLSAキャッシュによって管理されます。それには公式なインターフェースはありません。 (mimikatzのように)それをダンプすることができるツールがありますが、それらはハッキング目的のために傾向があり、ほとんどのネットワーク管理者がオープンアームを歓迎していません。ネットワークトラフィックが発生するという事実、ルックアップに時間がかかりそうだという事実、ドメインに関する情報を調べることに対するあなたの懸念はまったく何ですか?ローカルルックアップが決して超えないように、少し時間を置いてルックアップをキャンセルするだけでタイムアウトを処理できます。 –

答えて

0

わからない(情報がローカルに保存されている場合のみチェック)プライマリドメインにアクセスすることなく、非ローカルユーザーの名前を解決したいです後に再しかし、試してみる価値:

byte[] sid = // your SID byte array 
// Convert SID byte array to readable SID string 
var sidString = (new SecurityIdentifier(sid, 0)).Value; 
var securityIdentifier = new SecurityIdentifier(sidString); 
var identity = securityIdentifier.Translate(typeof(NTAccount)).Value; 
// ... identity should be domain\user (string) 
+0

いいえ、ローカルPCに存在しないドメインユーザーのSIDを使用する場合、上記のコードはプライマリドメインの情報を検索します。理想的には、ローカルに知られていないSIDを使用する場合、コードは外部リソースに接続すべきではありません。 – ggarcia24

+0

申し訳ありませんが、私は考えています:( – peteski

0

あなたは問題のSIDとローカルアカウントのWin32_UserAccount WMI classを照会することができ - 何も返されない場合、アカウントは、ローカルマシン上に存在しません:

$SID = 'S-1-5-21-510807130-1270608819-2073245338-500' 
if($user = Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount='True' AND SID = '$SID'") 
{ 
    $user.Name 
} 
+0

ローカル以外のアカウントの情報が必要です。ある時点でログインしているドメインユーザーのSIDを使用してLookUpAccountSid()を呼び出すと、コンピュータがこれはキャッシュに格納されていることを示しています。 – ggarcia24

関連する問題