2016-11-08 1 views
0

Win32API 함수 LookupAccountSID()를 사용하면 SID에 해당하는 이름을 확인할 수 있습니다. 문서에 따르면 LookupAccountSid function로컬 정보 만 사용하여 SID에서 사용자 이름 확인

LookupAccountSid로 함수를 먼저 잘 알려진 SID의 목록을 확인하여 지정된 SID의 이름을 찾으려고 시도합니다. 제공된 SID가 잘 알려진 SID와 일치하지 않으면이 함수는 기본 제공 및 관리 방식으로 정의 된 로컬 계정을 확인합니다. 그런 다음이 함수는 기본 도메인을 확인합니다. 기본 도메인에서 인식하지 못하는 보안 식별자는 SID 접두사에 해당하는 트러스트 된 도메인과 비교하여 검사됩니다.

로컬로만 이름을 찾는 방법이 있습니까? 즉, 함수가 호출 된 PC에서 이름을 찾을 수 없으면 기본 도메인을 확인하는 대신 함수가 실패합니다.

편집 :이 당신이 무엇을 경우 명확하게하기 위해, 나는 '

+1

문제가 반전 될 수 있습니다. SID가 도메인 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