首页
社区
课程
招聘
[求助]在LocalSystem身份启动的进程中创建远程COM对象的问题
发表于: 2021-9-14 15:47 4255

[求助]在LocalSystem身份启动的进程中创建远程COM对象的问题

2021-9-14 15:47
4255

求助各位大佬。
我有一个最简单的DCOM的客户端程序,它使用指定的用户名和密码在远程的DCOM服务器中创建一个DCOM对象。代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  ……
 
  HRESULT hr;
 
  COAUTHIDENTITY idendtity = {0};
  idendtity.User = (USHORT *)L"User";
  idendtity.UserLength = 4;
idendtity.Password = (USHORT *)L"Password";
  idendtity.PasswordLength = 8;
  idendtity.Password = NULL;
  idendtity.PasswordLength = 0;
  idendtity.Flags    = SEC_WINNT_AUTH_IDENTITY_UNICODE;
 
  COAUTHINFO auth = {
      RPC_C_AUTHN_WINNT,
      RPC_C_AUTHZ_NONE,
      NULL,
      RPC_C_AUTHN_LEVEL_CALL,
      RPC_C_IMP_LEVEL_IMPERSONATE,
      &idendtity,
      EOAC_NONE
  };
 
COSERVERINFO serverInfo = {0};
serverInfo.pwszName = L"192.168.0.2";
serverInfo.pAuthInfo = &auth;
 
  MULTI_QI qi = { &IID_ITestObject, NULL, S_OK };
  hr = CoCreateInstanceEx(CLSID_TestObject, NULL,  CLSCTX_ALL,  &serverInfo, 1, &qi);

现在的问题是,当我使用本地用户身份运行时,它运行良好,CoCreateInstanceEx会返回正确的结果,当但它以LocalSystem身份启动时则返回错误,错误码时0x80070005,意味着访问拒绝。通过抓包看,它并未在NTLMSSP协商完成后发起登录包(AUTH3)。
我尝试过使用CoInitializeSecurtiy的各种参数,或直接使用注册表来设置各种参数,都没有成功。
请教各位大佬,有什么建议?


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2021-9-14 15:48 被cxiaobao编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 4402
活跃值: (1366)
能力值: ( LV7,RANK:113 )
在线值:
发帖
回帖
粉丝
2
该用户没有DCOM激活权限吧,系统策略里面可以添加。或者选择模拟一个有DCOM激活权限的用户token,再去激活!
2021-9-14 21:53
0
雪    币: 14
活跃值: (488)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢Adventure的建议。
我试过在系统策略里给SYSTEM账户添加DCOM的各种权限,但都没有起作用。这个问题给我一种奇怪的感觉,好像SYSTEM账户没有使用用户名和密码凭据登录远程机器的权限,我曾在系统中各处寻找,也没有找到相关的选项。我的客户端和服务器都是windows10。
再次谢谢Adventure!
2021-9-15 09:40
0
雪    币: 2310
活跃值: (1621)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
4
token模拟
2021-9-15 20:52
0
游客
登录 | 注册 方可回帖
返回
//