为了访问网络资源,是否有任何替代LsaLogonUser用于模拟指定帐户?我正在寻找模仿的方法,这可以让我通过UNC在同一个域中调用远程机器。
对于初始数据,我有:domain \ username。
我没有密码,因为我使用的是LsaRegisterLogonProcess和LsaLogonUser以及Kerberos包。本地一切正常,我可以使用不同的用户名模拟和调用应用程序,但是,当尝试使用.. \\ remotemachine \ shared \ somefile.bat访问远程计算机时,我有访问被拒绝。
基本上我将cmd.exe称为命令..然后打开一个控制台,模拟新用户,但如果尝试调用UNC路径,则拒绝访问。
如果我用自己的用户打开一个基本控制台,我会成功执行这个UNC路径。不是文件夹权限,因为它是公共共享。
这是我工作代码的一部分:
...
NTSTATUS Status = STATUS_SUCCESS;
LSA_OPERATIONAL_MODE unused;
LSA_STRING lsaString;
lsaString.Buffer = "User Impersonated LogonProcess";
lsaString.Length = strlen(lsaString.Buffer);
lsaString.MaximumLength = lsaString.Length + 1;
Status = LsaRegisterLogonProcess(&lsaString, &lsa, &unused);
if (Status != STATUS_SUCCESS) {
printf("LsaRegisterLogonProcess failed: %x\n", Status);
}
...
NTSTATUS status = LsaLogonUser(
lsa,
&origin,
Network,
packageId,
authInfo,
authInfoSize,
0,
&source,
&profileBuffer,
&profileBufLen,
&luid,
&token,
&qlimits,
&subStatus
);
if (status != ERROR_SUCCESS)
{
ULONG err = LsaNtStatusToWinError(status);
printf("LsaLogonUser failed: %x\n", status);
return 1;
}
...
DuplicateTokenEx(token, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, TokenPrimary, &tokenDuplicate);
if (CreateProcessWithTokenW(
tokenDuplicate,
LOGON_WITH_PROFILE,
command,
command_arguments,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi))
{
pi.hThread = NULL;
pi.hProcess = NULL;
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}