Windows下cmd/powershell命令混淆绕过
前言
在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混淆方法:
Windows内网信息收集常用命令:
whoami /all #查当前用户在目标系统中的具体权限
quser #查当前机器中正在线的用户,注意管理员此时在不在
query user #qwinsta 查看当前在线用户
systeminfo #查看主机详细信息 安装了哪些补丁
net user & net localgroup & net localgroup "groupname" #用户名、组名、指定组成员
(Get-ItemProperty -Path "Registry::HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\192.168.149.135").UsernameHint #本机哪个用户登陆了此IP
cacls c:\ #查看c盘的权限配额
cacls c:\windows\*.exe #查看*.exe的权限配置
icacls C:\Windows #查看文件的ACL情况