Windows下cmd/powershell命令混淆绕过

前言

在Windows下绕过杀毒软件的主动防御机制的常见思路。

Bypass

1.特殊符号、大小写

常用符号: " ^ , ; 可以绕过一些常规的waf

Windows下cmd/powershell命令混淆绕过

2.环境变量

拿到一台机器时,可以先set查看环境变量

Windows下cmd/powershell命令混淆绕过

这里我们拿Comspec=C:\WINDOWS\system32\cmd.exe来举例,%comspec:~3,1%的意思就是comspec路径中的第三位(从0开始)开始取1个字符,如果1不写的话就从第三位输出到最后一位

Windows下cmd/powershell命令混淆绕过

环境变量也可以配合我们的特殊符号大小写混写来组合,也是可以达到同样的效果的。

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,然后打印。

Windows下cmd/powershell命令混淆绕过

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

Windows下cmd/powershell命令混淆绕过

常用的powershell混淆方法:

Windows下cmd/powershell命令混淆绕过

上一篇:web安全——伪协议


下一篇:protobuf 无proto 解码 decode 语言 java python