【THM】offensive-Hacking with PowerShell
字数 1459 2025-08-29 22:41:38
PowerShell 攻击性黑客技术指南
1. PowerShell 简介
PowerShell 是微软开发的基于 .NET 框架的脚本语言和 shell 环境,具有以下特点:
- 使用 .NET 框架构建,可直接执行 .NET 函数
- 大多数 PowerShell 命令(称为 cmdlet)都是用 .NET 编写的
- 输出是对象而非文本,具有面向对象特性
- 支持将输出从一个 cmdlet 传递到另一个 cmdlet
- cmdlet 命名采用"动词-名词"格式(如 Get-Command)
常用动词
- Get:获取信息
- Start:启动
- Stop:停止
- Read:读取
- Write:写入
- New:新建
- Out:输出
完整动词列表参考:微软官方文档
2. 基本 PowerShell 命令
2.1 Get-Help
获取 cmdlet 的帮助信息:
Get-Help Command-Name
查看使用示例:
Get-Help Command-Name -Examples
2.2 Get-Command
获取当前计算机上安装的所有 cmdlet,支持模式匹配:
Get-Command Verb-*
Get-Command *-Noun
示例:查看所有以"New"开头的 cmdlet
Get-Command New-*
3. 对象操作
3.1 管道(|)
将对象从一个 cmdlet 传递到另一个 cmdlet:
Verb-Noun | Get-Member
查看对象成员:
Get-Command | Get-Member -MemberType Method
3.2 Select-Object
从 cmdlet 输出中提取属性创建新对象:
Get-ChildItem | Select-Object Mode, Name
常用标志:
-first:获取前x个对象-last:获取最后x个对象-unique:显示唯一对象-skip:跳过x个对象
3.3 Where-Object
基于属性值筛选对象:
Verb-Noun | Where-Object -Property PropertyName -operator Value
Verb-Noun | Where-Object {$_.PropertyName -operator Value}
常用运算符:
-Contains:属性值中任何项与指定值完全匹配-EQ:属性值与指定值相同-GT:属性值大于指定值
完整运算符列表参考:微软官方文档
示例:检查已停止的进程
Get-Process | Where-Object {$_.Status -eq "Stopped"}
3.4 Sort-Object
对 cmdlet 输出进行排序:
Verb-Noun | Sort-Object
示例:对目录列表排序
Get-ChildItem | Sort-Object
4. 文件系统操作
4.1 查找文件
查找特定文件(如"interesting-file.txt"):
Get-ChildItem -Path C:\ -Include interesting-file.* -File -Recurse -ErrorAction SilentlyContinue
参数说明:
-Recurse:递归搜索-ErrorAction SilentlyContinue:忽略错误-File:仅搜索文件-Path:搜索路径(C:\表示整个磁盘)-Include:文件名模式
替代方法:
Get-ChildItem "*interesting-file*" -Path C:\ -Recurse -ErrorAction SilentlyContinue
4.2 读取文件内容
读取文件内容:
Get-Content -Path 'C:\Program Files\interesting-file.txt.txt'
或结合查找:
Get-ChildItem "*interesting-file*" -Path C:\ -Recurse -ErrorAction SilentlyContinue | Get-Content
5. Windows 枚举技术
5.1 系统信息收集
获取系统信息:
Get-WmiObject Win32_OperatingSystem | Select-Object *
5.2 用户账户枚举
列出本地用户:
Get-LocalUser
5.3 网络信息
获取网络配置:
Get-NetIPConfiguration
6. PowerShell 脚本基础
6.1 脚本执行策略
查看当前执行策略:
Get-ExecutionPolicy
设置执行策略(需要管理员权限):
Set-ExecutionPolicy RemoteSigned
6.2 基本脚本结构
示例脚本:
# 注释以#开头
param(
[string]$param1 = "default value"
)
Write-Output "Hello, $param1"
# 函数定义
function Get-SystemInfo {
Get-WmiObject Win32_OperatingSystem | Select-Object Caption, Version
}
# 调用函数
Get-SystemInfo
7. 远程管理
7.1 远程桌面连接
使用 xfreerdp 连接远程桌面:
xfreerdp /v:IP /u:Administrator /p:123456 /dynamic-resolution
7.2 PowerShell 远程会话
建立远程会话:
Enter-PSSession -ComputerName RemotePC -Credential (Get-Credential)
8. 安全注意事项
- PowerShell 脚本可能被恶意利用,企业环境应监控 PowerShell 活动
- 避免在生产环境中使用不受信任的脚本
- 定期更新 PowerShell 版本以获取安全补丁
- 限制 PowerShell 远程访问权限
9. 进阶学习资源
- 微软 PowerShell 文档
- PowerShell 内置帮助系统:
Get-Help about_* - PowerShell 社区资源:GitHub、PowerShell Gallery
通过掌握这些 PowerShell 基础知识和技术,您将能够有效地进行系统管理、自动化任务和安全评估工作。