Windows下cmd/powershell命令混淆繞過

青瀾Cyan發表於2022-02-05

前言

在Windows下繞過防毒軟體的主動防禦機制的常見思路。

Bypass

1.特殊符號、大小寫

常用符號: " ^ , ; 可以繞過一些常規的waf

image

2.環境變數

拿到一臺機器時,可以先set檢視環境變數

image

這裡我們拿Comspec=C:\WINDOWS\system32\cmd.exe來舉例,%comspec:~3,1%的意思就是comspec路徑中的第三位(從0開始)開始取1個字元,如果1不寫的話就從第三位輸出到最後一位

image

環境變數也可以配合我們的特殊符號大小寫混寫來組合,也是可以達到同樣的效果的。

cmd /c “ set a1=ser&& set a2=ne&& set a3=t u&&call echo %a2%%a3%%a1%” 等同於 net user
^c^M^D, , , , /^c", ,(, , , , , (s^et ^ w^3=i^pco) , )&& (S^Et ^ eH^P=n^fig)& , , C^aLl, sE^t GyHE=%w^3%%eH^P%& , , %LoCaLAPpdata:~ -3,+1%%pRoGramw6432:~9,1%d, ,/^R, , %Gy^HE%" 等同於ipconfig

3.for迴圈

for /f "tokens=4 delims=\" %f in ("c:\windows\system32\whoami\") do %fdelims是以\分割,tokens是第幾次分割,第四次分割就是whoami設為變數f,然後列印。

image

4.powershell base64

powershell.exe -Encodedcommand base64string 完全形式
powershell.exe -eNco base64string 大寫截斷形式

兩種形式都呼叫了Encodedcommand引數,將base64字串解碼並執行。這裡的base64字串與常規的不太一樣,只能通過powershell自帶的base64加密方式獲取。

$command = "whoami"
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
echo encodedCommand
powershell.exe -EncodedCommand $encodedCommand

image

常用的powershell混淆方法:

image

相關文章