Powershell: Executar os comandos Base64 retorna erro?

3

Preciso de ajuda com um caso de teste simples de execução de um comando da CLI por meio do PowerShell, que já foi codificado no Base64.

Suponha que Get-ChildItem tenha sido convertido antecipadamente em Base64 string R2V0LUNoaWxkSXRlbQ== .

Além disso, suponha que eu tenha uma instância do DOS CLI aberta, e eu quero testar a execução desta string no powershell:

C:>\ powershell.exe -enc R2V0LUNoaWxkSXRlbQ==

No entanto, recebo o seguinte erro:

The term '???????' is not recognized as the name of a cmdlet, function, script file, or operable program.  Check the spelling of the name, or if a path was included, verify that the path is correct and try again. 
At line:1 char:8
*??????? <<<<
    + CategoryInfo        :ObjectNotFound: (???????:String) [], CommandNotFoundException
    + FullyQualifiedErrorID: CommandNotFoundException

Eu entendo que há uma maneira que funciona que introduz o uso de variáveis e inclui até mesmo o próprio processo de codificação. Mas o que eu quero saber é, esse método é aproveitável? O que eu posso estar fazendo errado? Estou executando o PS versão 2.0 no Win7.

    
por PurpleDragon 21.05.2016 / 01:03

2 respostas

3

Se precisar ser codificado, use o seguinte para obter sua string Base64:

[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('Get-ChildItem'))

Tentar isso funcionou para mim:

powershell.exe -encodedCommand RwBlAHQALQBDAGgAaQBsAGQASQB0AGUAbQA=
    
por 21.05.2016 / 05:41
3

Para adicionar à resposta @ SomethingElse, a diferença entre sua string Base64 que não funciona e sua string Base64 que funciona, é a codificação de caracteres usada ao converter a string original em valores de byte.

Ele precisa ser codificado como UTF-16-LE, depois convertido em Base64 para que o PowerShell goste, e o seu foi codificado como UTF8 / plain ASCII.

# Your version, with 1-byte-per-character encoding:
PS> [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('Get-ChildItem'))
R2V0LUNoaWxkSXRlbQ==

# Working version, with 2-bytes-per-character encoding:
PS> [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('Get-ChildItem'))
RwBlAHQALQBDAGgAaQBsAGQASQB0AGUAbQA=
    
por 02.12.2016 / 21:55

Tags