Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

ASP 調用 WScript.Shell 執行命令「拒絕訪問」徹底解決方案

編輯:關於伺服器

在 Windows Server 2003 + IIS 6 環境下,ASP 頁面通過 Server.CreateObject("WScript.Shell") 調用 cmd.exe 執行命令行程序,常報「拒絕訪問」或「權限不足」錯誤。根因在於 IUSR_機器名 用戶缺乏執行 cmd.exe 和 wscript.exe 的權限,以及工作目錄寫入權限缺失。

問題復現代碼(簡化版)

<%@ Language=VBScript CodePage="936"%>
<%
Dim oScript, oFileSys, szCMD, szTempFile
Set oScript = Server.CreateObject("WScript.Shell")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
szCMD = Request.Form(".CMD")
If szCMD <> "" Then
    szTempFile = Server.MapPath(oFileSys.GetTempName())
    ' 關鍵行:以 IUSR 身份運行 cmd.exe,寫入臨時文件
    oScript.Run "cmd.exe /c " & szCMD & " > " & szTempFile, 0, True
    ' ... 讀取輸出並刪除臨時文件
End If
%>

根因分析

  1. cmd.exe 權限:默認 C:\Windows\System32\cmd.exe 僅允許 Administrators、SYSTEM、Users 執行,IUSR_機器名 不在列表中。
  2. wscript.exe 權限:同理,WScript.Shell 依賴 wscript.exe/cscript.exe,IUSR 同樣無執行權限。
  3. 臨時文件寫入權限:腳本在網站目錄下生成臨時文件存放命令輸出,IUSR 需對該目錄有 寫入/修改/刪除 權限。

解決步驟(圖文級詳解)

1. 給 cmd.exe 授權

  1. 打開 C:\Windows\System32\,找到 cmd.exe
  2. 右鍵 → 屬性 → 安全 標籤
  3. 點擊 編輯 → 添加 → 輸入 IUSR_你的機器名(或直接輸入 IUSR 後點「檢查名稱」)
  4. 勾選 讀取和執行、讀取 → 確定保存

2. 給 wscript.exe / cscript.exe 授權

同樣操作,分別對 C:\Windows\System32\wscript.exe 和 cscript.exe 添加 IUSR_機器名,賦予 讀取和執行 權限。

3. 賦予網站目錄寫入權限

  1. 右鍵網站根目錄(或腳本指定的臨時文件目錄) → 屬性 → 安全
  2. 添加 IUSR_機器名,勾選 寫入、修改(含刪除)
  3. 若使用 IWAM_機器名(應用程序池身份),同樣授權

4. 重啟 IIS 生效

iisreset /restart

或在「服務」中重啟 World Wide Web Publishing Service。

安全加固建議(生產環境必讀)

  • 嚴禁直接暴露命令執行界面:示例代碼無任何過濾,極易導致命令注入、服務器淪陷。實際項目務必:
    • 驗證、白名單過濾 szCMD 參數
    • 僅允許特定命令(如 ping, tracert)
    • 禁用 &&, |, ;, `, $() 等 Shell 元字符
  • 最小權限原則:創建專用低權限用戶(非 IUSR/IWAM),配置應用程序池以該用戶身份運行,僅授權該用戶執行特定程序。
  • 審計日誌:記錄每次調用的命令、參數、執行結果、調用者 IP,便於事後追蹤。
  • 替代方案:能用 COM 組件、.NET 組件、API 調用解決的,堅決不用 WScript.Shell 跑命令行。

常見誤區

誤區真相
給 Everyone 全控制權限極度危險,任何匿名用戶均可執行任意命令,等於把服務器大門敞開。
只授權 cmd.exe 不授權 wscript.exeWScript.Shell.Run 依賴 Windows Script Host,缺 wscript.exe 權限同樣失敗。
以為重啟網站應用程序池即可文件系統權限修改即時生效,但 IIS 需重啟才能重新加載進程 Token 權限。

總結

ASP 調用 WScript.Shell 執行命令的「拒絕訪問」本質是 IUSR 用戶缺乏 cmd.exe/wscript.exe 執行權限及工作目錄寫入權限。按上述三步授權 + iisreset 即可解決。但**切記:此技術極高風險,非極端必要(如舊系統改造)嚴禁在生產環境使用**,現代架構應改用任務隊列、後台服務、API 等安全模式實現同等功能。

Copyright © Windows教程網 All Rights Reserved