【问题标题】:Creating a hard link mklink to a dll in system32 results in access denied在 system32 中创建指向 dll 的硬链接 mklink 会导致访问被拒绝
【发布时间】:2017-03-25 13:00:25
【问题描述】:

场景

我目前正在查看我的应用程序安装程序的安全问题。尽管完整的上下文可能与我的问题无关,但我正在尝试做的是:https://skanthak.homepage.t-online.de/!execute.html

问题

我确实有一个具有提升权限的 CMD,并且我使用 Sysinternals 套件中的 PsExec 模拟为 SYSTEM(请参阅 this)。

当前文件夹是我的用户文件夹中的一个新的空文件夹。

当我执行时

mklink /h version.dll C:\Windows\System32\version.dll

我得到“拒绝访问”

我已向我的用户、系统和管理员授予“创建符号链接”权限,如答案 here 中所述。

我已经使用提升的资源管理器尽可能从 windows 文件夹及其所有子文件夹中删除了写保护(特别是 version.dll 没有写保护)

我在 HyperV 中托管的虚拟机中完成所有这些工作。虚拟操作系统是 Windows 7 Professional SP1。

问题

为什么命令失败并显示 ACCESS DENIED?

【问题讨论】:

  • 链接的位置(不是目标)?你在那里有足够的访问权限吗?
  • 当前文件夹是我的用户文件夹中的一个新的空文件夹。因此,如果我没记错的话,只是说明“version.dll”应该解析为 \version.dll,对吗?如果是这样:我仔细检查了 SYSTEM、我的用户和管理员是否拥有完全访问权限
  • 是的,没错!
  • 注意:我已经尝试过使用其他文件(即 netvscres.dll)并且有效,因此链接的访问权限应该不是问题...
  • 请注意,这里的“创建符号链接”权限无关紧要,因为您正在尝试创建硬链接。也许 version.dll 正在使用中?我在这里看不到您的问题与您提供的链接之间有任何联系。顺便说一句,MSI 文件可以运行任意代码,因此使用基于 MSI 的安装程序与运行可执行文件一样危险。

标签: windows cmd mklink


【解决方案1】:

您遇到的问题是 dll 本身的安全问题。

默认情况下,某些受保护的操作系统文件仅允许受信任的安装程序对其进行完全控制,并将受信任的安装程序设置为文件的默认所有者。

为了创建硬链接,您必须从受信任的安装程序取得文件的所有权(否则,您无法更改文件的权限)。

一旦您设置了文件所有者,您就可以更改文件的权限以赋予您的用户完全控制权。 -- 之后,您始终可以将自己设置回减少的权限集,因为您赢了除非您想删除硬链接,否则不再需要它们

我刚刚自己测试了这个方法,以验证它仍然有效,虽然过去我已经想出如何减少对完全控制的需求,但这只是手动获取可能的特殊权限的问题,所以你如果您愿意,可以这样做(我相信最小是全套“文件属性”和“特殊文件属性”添加/更改/删除)

无论如何,很高兴解决您的问题。 :)

最初我遇到了同样的问题:

C:\Admin>mklink /h C:\Admin\testlink\version.dll C:\Windows\System32\version.dll
Access is denied.

获得文件所有权并授予我的用户完全权限后,链接就可以成功建立:

C:\Admin>mklink /h C:\Admin\testlink\version.dll C:\Windows\System32\version.dll
Hardlink created for C:\Admin\testlink\version.dll <<===>> C:\Windows\System32\version.dll

【讨论】:

    猜你喜欢
    • 2012-07-15
    • 2011-04-20
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 2011-08-09
    • 2012-07-10
    • 2012-08-31
    • 1970-01-01
    相关资源
    最近更新 更多