vbscript / ASP 代码中的 WMI 模拟级别

Ska*_*inz 5 security iis web asp wmi

我有一个运行“经典”ASP 代码(不是 ASP.NET)的 IIS 7.5 网站,该网站在正常服务上下文下运行,并且只启用了“Windows 身份验证”。无论是否在 IIS 主机上具有隐式管理员权限(大多数没有),用户和浏览站点都没有任何问题。但是,当我尝试在 ASP 代码中执行常见的 Win32_PingStatus 请求时,它会失败,除非用户在 IIS 主机上具有管理员权限。这是我的代码...

On Error Resume Next
asset = "Computer123"

pingtest = False
query = "Select StatusCode, Address FROM Win32_PingStatus " & _
  "WHERE Address=" & Chr(34) & asset & Chr(34)
Set colPingStatus = GetObject("winmgmts:" &_ 
  "{impersonationLevel=impersonate}//./root/cimv2").ExecQuery(query)
If err.Number <> 0 Then
  Response.Write "Access Denied (error: " & err.Number & " / " & err.Description & ")"
  Response.End
End If

For Each objItem In colPingStatus
  If objItem.StatusCode = 0 Then
    pingtest = True
  End If
Next

If pingtest = False Then
  Response.Write asset & " is OFFLINE"
Else
  Response.Write asset & " is ONLINE"
End If
Run Code Online (Sandbox Code Playgroud)

我一直在尝试了解 SWBEM 和 WMI 模拟功能,但我仍然对是否可以(支持或不支持)这样做而不管用户/浏览器会话上下文如何感到困惑。每个用户都是一个域帐户,没有匿名用户能够访问该站点,因此似乎(我可能是错的)与他们在 IIS 主机上的组成员身份和权限有关。

小智 2

首先是 IIS 中网站的信任级别。进入 IIS 并确保其设置为完整,以便您的站点可以访问内部服务器资源。

接下来是仔细检查访问该网站的用户是否确实经过身份验证,而不是匿名运行代码。只是为了确保检查 iis 中是否禁用了匿名身份验证,并且您的网站强制用户进行身份验证(在浏览器中禁用 ntlm 自动登录或将用户标识写入您的应用程序以双重确保身份验证正在进行)。

接下来是检查访问您网站的用户类型的 wmi 权限。您可以使用 wmimgmt.msc 打开服务器的 wmi 安全设置。您可以通过使用普通用户登录服务器并尝试执行 wmi 命令来测试您的 wmi 权限(您可以使用 powershell 的 get-wmiobject、wbemtest.exe 或 vbscript)。