8

是否有任何替代 LogonUser 和模拟给定帐户以访问网络资源的方法?我正在寻找一种模拟方法,它可以让我连接到外国域中的机器(或同样的工作组机器)。

对于初始数据,我有:机器名、用户名(或域\用户名)、明文密码。

我知道有一种方法可以使用 WNetAddConnection 与 \\machinename\ipc$ 建立连接,然后大多数网络功能将在该帐户的上下文中运行,但是 win2008 添加了另一个转折点,并且某些功能仍然使用该帐户,该线程正在运行.

我也知道,有一些方法可以使用 SSPI 获取模拟令牌。有没有人尝试过这些令牌,它们是否适合访问共享、SCM、远程注册表和其他东西?是什么 WNetAddConnection 正在使用?

编辑:澄清一下,我不能使用 LogonUser 的原因是因为我需要在不受信任的域或工作组中模拟用户

EDIT2:另一个澄清:我试图实现的项目类似于 psexec,例如:

  • 程序不应修改主机或活动目录配置(例如:创建临时本地用户等)。此外,不能假设它是否在 DC 上运行
  • 不能假设远程主机上预装了哪些软件,唯一的条件是目标上启用了 Windows 文件共享
  • 已知帐户/密码在目标上工作,但目标机器可能在本地域、外部域中,根本不在域中。

EDIT3:我真的很想听到更多关于 SSPI InitializeSecurityContext / AcquireCredentialsHandle 选项的信息。有没有人一直在广泛使用这个 API?是否可以使用模拟返回的令牌,以便线程可以访问网络共享和复制文件等?有人可以发布一个工作代码片段吗?

EDIT4:感谢 Marsh Ray,问题得到了解决。如果有人想查看概念验证代码,就在这里

4

4 回答 4

9

如果您想要在您的森林之外“访问网络资源”,请使用您提到的 WNetAddConnection2/3 执行此操作,或者使用带有 RPC_ C__ AUTHN__ GSS__ NEGOTIATE 和显式凭据结构的标准 RPC API。

通常,“模拟”是在服务器端发生的事情。服务器端将能够将连接模拟为您正在连接的帐户。

但关键是:模拟仅对模拟服务器可以在其本地 SAM/domain/forest 目录中访问的帐户有意义。如果客户端和服务器在不同的森林中,他们显然不能就模拟令牌的帐户的 SID 达成一致(除了像管理员这样的知名 SID 主要用于混淆这类事情的情况),并且这似乎有必要检查 DACL 等。

也许您想要的是使用 LOGON32__ LOGON__ NEW__ CREDENTIALS 标志调用 LogonUserEx。这应该会成功(即使在不同的森林中 - 它实际上并不验证您提供的凭据)为您提供一个带有您指定的用户名/密码的令牌。您可能必须使用 DuplicateToken 将其转换为模拟令牌。然后您可以使用 SetThreadToken 替换线程上的令牌。

恕我直言,这并不是真正的“模拟”,您只是直接使用凭据,但它允许您以您提供的任意用户名/密码透明地访问网络资源。

编辑:哦,是的,请注意,在这种类型的连接上没有针对中间人的保护。客户端尤其不能对服务器进行强身份验证(缺少像 IPSEC 这样的英雄事迹),所以理论上你不能相信服务器告诉你的任何事情。

于 2009-07-28T22:57:35.450 回答
4

理论认为,您将凭据作为SEC_WINNT_AUTH_IDENTITY结构传递给AcquireCredentialsHandle函数,该函数创建InitializeSecurityContext中使用的句柄。不过我从来没有在外国域名上尝试过,我不知道它是否有效。

于 2009-07-20T20:07:51.103 回答
0

您可以打开命令行,使用明文用户名和密码映射驱动器。然后断开驱动器:

net use m: \\machinename\share password /user:username
... do stuff ...
net use m: /delete

http://technet.microsoft.com/en-us/library/cc756153(WS.10).aspx

于 2009-07-25T18:36:55.433 回答
0

通过 Windows API 直接可靠地执行此操作似乎几乎是不可能的,而且 Windows 在幕后做了很多工作以使网络访问“正常工作”。此外,模拟方面仅适用于调用 API 的单线程。

但是......您可以在不同的用户下运行整个程序......例如当您运行服务时。

因此,您可以在主程序中编辑注册表以在不同的安全令牌下运行各种服务,并使用 IPC/Sockets 与主应用程序中的这些进程进行通信。IE。一大堆(或重新启动和重新配置相同的进程)在您的主应用程序滥用的不同用户下运行的辅助进程。

我意识到这是一个 hack,但它似乎是可行的;)

于 2009-07-23T15:27:16.897 回答