前言
在Windows下繞過防毒軟體的主動防禦機制的常見思路。
Bypass
1.特殊符號、大小寫
常用符號: " ^ , ;
可以繞過一些常規的waf
2.環境變數
拿到一臺機器時,可以先set
檢視環境變數
這裡我們拿Comspec=C:\WINDOWS\system32\cmd.exe
來舉例,%comspec:~3,1%
的意思就是comspec路徑中的第三位(從0開始)開始取1個字元,如果1不寫的話就從第三位輸出到最後一位
環境變數也可以配合我們的特殊符號大小寫混寫來組合,也是可以達到同樣的效果的。
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 %f
delims是以\分割,tokens是第幾次分割,第四次分割就是whoami設為變數f,然後列印。
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
常用的powershell混淆方法: