VBScript/ADSI 远程本地帐户密码更改的权限

VBScript/ADSI 远程本地帐户密码更改的权限

我在 IIS8/Windows 2012 上使用 IISADMPWD 页面,发现不需要远程服务器上的管理权限即可更改密码。我希望有人能解释一下原因。正如预期的那样,如果我尝试,net user username newpassword我会以普通用户(不是本地管理员)的身份被拒绝访问。这是我的设置:

  • 所有服务器均在工作组配置中运行 Windows 2012 Minimal GUI。
  • 将每个服务器上的本地用户名与相同的密码匹配。
  • 用户名是源服务器和目标服务器上的常规用户(用户组的成员);只有源服务器上的附加组成员身份才是 IIS_IUSRS,才能运行托管 IISADMPWD 的应用程序池。
  • 在 IISADMPWD 页面上,我指定了remote.server\username旧密码和新密码。
  • 在 achg.asp 页面中,此代码执行着更改密码的繁重工作:
    • set pUser = GetObject("WinNT://" & domain & "/" & username & ",user")
    • pUser.ChangePassword Request.Form("old"), Request.Form("new")

我的问题是,当我用来运行应用程序池(并因此执行 VBScript)的帐户只是目标服务器上的用户组成员时,密码会更改。我的印象是只有本地管理员才能更改本地帐户的密码,但这个“测试”似乎违反了规则。

我使用 Wireshark 跟踪了交易,可以看到流量通过 445/tcp,包括使用运行应用程序池的用户名进行的 SMB2 身份验证步骤,但其余大部分流量都是 DCERPC,并且不是真正人类可读的,至少对我来说是这样。

在查看安全事件日志时,当使用 IISADMPWD 更改密码时,我看到记录了远程身份验证流量和来自用户帐户管理的事件 ID 4723,但没有其他内容。当我运行net user更改密码时,我看到事件 ID 4738 和 4724,表明密码更改成功。

任何对 Windows 内部结构足够熟悉的人,对于为什么通常的管理员要求似乎被绕过,有什么想法或理由吗?我浏览了 gpresult /h,并没有对默认安全或(任何) GPO 设置进行任何更改。

****编辑****

我做了一些进一步的测试,看起来只允许更改密码。设置密码仍然会给出预期的“访问被拒绝”错误消息。仅供参考,使用[ADSI]Powershell 中的对象进行测试既简单又方便。

这并不是很重要,但我在测试期间确实运行了 ProcMon,基本上所有网络流量和注册表更改(对 SAM 的密码更改)都是由以 SYSTEM 身份运行的服务完成的。似乎确实在 SMB 级别进行身份验证(根据我之前的 Wireshark 捕获),但我没有看到任何权限验证的证据。

是否有任何文档说明或提及如果知道当前密码就可以更改其他用户的密码?

相关内容