首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >os.startfile()使用RDC

os.startfile()使用RDC
EN

Stack Overflow用户
提问于 2014-07-23 23:32:39
回答 1查看 896关注 0票数 0

我的窗口盒上运行着一台cherrypy服务器。它处理在默认编辑器中打开文件的请求。(请求只包含filepath)

当两个用户登录到同一个Windows服务器(使用RDC)时,对于第二个用户发出的打开文件请求,cherrypy将在第一个用户桌面中打开该文件(因为cherrypy服务器是由第一个用户启动的)

有办法解决这个问题吗?我是否可以随os.startfile()调用用户信息,以便该文件在第二个用户桌面中打开?

EN

回答 1

Stack Overflow用户

发布于 2014-07-24 00:44:54

简单的回答是:不容易。

正如os.startfile的文档所暗示的那样,它只是调用ShellExecute,它没有这样的功能。

你能做的很容易就是让每个用户在他自己的帐户下,在他想要的任何会话上激活他自己的web服务器副本。当然,这意味着您必须使用不同的端口号(或者在登录时获得随机端口号,然后必须以某种方式显示),但这并不可怕。

首先,您需要直接与Win32 API对话(最好是通过pywin32,但如果您真的想使用ctypes,则可以使用ctypes)。

接下来,用户可能连接到您的web服务器,但没有连接到RDC服务器-或者,更糟糕的是,可能有三个不同的RDC会话。那么,“第二个用户的桌面”到底是什么意思呢?如果任意选择一个是可以接受的,如果没有一个是可以接受的,那就是一个合理的答案。这个部分非常简单:您可以使用Windows终端服务器API (现在是远程桌面服务的一部分,但大多数函数仍然以WTS开始)来枚举会话,并找到WTS_SESSION_INFO_1与用户匹配的第一个会话。

现在,您只需要在该会话中为该用户获取一个访问令牌或模拟令牌,以便您可以调用CreateProcessAsUserCreateProcessWithToken。(您不能使用CreateProcessWithLogon,因为它不会出现在他们的RDS会话中,而是会在用户的新会话中,但是连接到您的RDS会话,这是双重无用的。)

那么,你是怎么得到这些东西的呢?在这里,你可以选择一个巨大的安全漏洞,如果你不太小心,也不知道你在做什么,或者如果你不太小心,也不知道你在做什么,你可以选择一个不同的安全漏洞。

如果您不关心终端服务器框被黑客攻击,您可以以LocalSystem的形式运行您的服务器(或者,希望是服务器所使用的最小帮助工具),并调用WTSQueryUserToken。这一句其实很简单,只要读了这句话,你的电脑就成了某个人垃圾邮件僵尸网络的一部分。

如果您不关心您的用户帐户被黑客攻击,您可以通过您的web服务器传递他们的凭据,这样您就可以登录和ImpersonateLoggedOnUser来获得用户令牌。有一些方法可以做到这一点,而不通过网络传递密码的明文,但这并不重要。因为下一步是创建一个连接到用户现有会话的新会话,并从外部进行连接,因此即使您已经以他的身份登录,也需要他的用户名和密码。不管怎么说,这样做了,你只要在新的会话中运行这个应用程序,他就会在他现有的会话中看到它,每个人都过着幸福的生活,尤其是那个刚刚检查了你的朋友对PayPal使用的密码与他为您的服务器使用的密码相同的人,并收取了价值17000美元的费用。

如果这没有吓到你,那么在局域网上创建一些没有连接到互联网的虚拟机,然后开始玩这些东西--这很有趣,而且你会学到很多东西,理想情况下,你可以写一些你想做的事情,并最终充分说服自己,你不会在任何地方泄露令牌,你已经准备好部署它了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24922759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档