首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 通過 COM 組件調用 Shell.Application 執行程序 - 原理與風險防範

     編輯:PHP 相關知識

技術原理分析

PHP 在 Windows 環境下可通過 COM 擴展實例化 Shell.Application 對象,調用其 Open() 或 ShellExecute() 方法啟動可執行程序。這繞過了 exec()、shell_exec() 等被禁用函數的限制,常被 Webshell 利用。

核心代碼示例(僅供防禦研究)

<?php
// 需要 php.ini 啟用:extension=com_dotnet
try {
    $shell = new COM('Shell.Application');
    // 彈出計算器(無回顯,僅演示進程創建)
    $shell->Open('C:\Windows\System32\calc.exe');
    
    // 等效 ShellExecute 方式
    // $shell->ShellExecute('notepad.exe', '', '', 'open', 1);
    
    echo "進程啟動請求已發送";
} catch (com_exception $e) {
    echo "COM 錯誤: " . $e->getMessage();
}
?>

關鍵調用鏈

  1. new COM('Shell.Application') → 實例化 Windows Shell 自動化對象
  2. Open() / ShellExecute() → 調用 Shell 執行程序
  3. 進程在系統上下文中創建,繼承 PHP 進程權限(通常是 IIS/IUSR 或 Apache 服務賬號)

安全風險評估

風險點影響
繞過 disable_functions常見禁用函數列表不包含 COM 方法
無輸出回顯難以通過日志審計發現,適合隱蔽持久化
可鏈接批處理調用 cmd.exe /c batch.bat 實現任意命令執行
權限繼承若 Web 服務以高權限運行,可導致提權

防範與加固措施

1. PHP 層面禁用 COM

; php.ini
disable_functions = ..., com_load_typelib, com_create_object
; 或直接註釋擴展
; extension=com_dotnet

2. Windows 系統級限制

  • Web 服務賬號最小權限原則(非 Administrator)
  • 應用程序池啟用「加載用戶配置檔」
  • 軟件限制策略 / AppLocker 禁止 wscript.exe、cscript.exe、cmd.exe 等

3. 文件系統權限控制

# 關鍵系統目錄移除 Web 用戶執行權限
icacls "C:\Windows\System32\cmd.exe" /deny "IIS_IUSRS:(X)"
icacls "C:\Windows\System32\wscript.exe" /deny "IIS_IUSRS:(X)"

4. 運行時防護(RASP/WAF)

  • 部署 OpenRASP、SafeLine 等 RASP 產品攔截 COM 實例化
  • WAF 規則匹配 new COM\(、Shell\.Application 等特徵

合法應用場景(極少數)

  • 內網管理後台:受控環境下調用合法業務程序(如報表生成器)
  • 自動化部署腳本:需嚴格權限隔離與審計日志

總結

COM 組件調用是 Windows 下 PHP 繼續執行命令的「隱形通道」。防禦核心在於:禁用不必要的擴展、最小權限運行、行為審計。定期掃描代碼庫中的 new COM( 調用,是應急響應必檢項目。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved