Costumava haver uma piada muito ruim da Internet onde você copiava algo começando com \x0B\x2E... (apenas um exemplo) e quando você executava este comando o terminal o interpretava como sudo rm -rf /
.
Como você faz esse tipo de ofuscação? Eu apenas tentei executar o Cyberchef e transformar meu comando, que é apenas ls -la
em hexadecimal e esse comando não é executado mesmo com \x<hexcodetwocharactershere>\x<hexcodetwocharactershere>
sintaxe.
- O que estou fazendo errado?
- Existem métodos de ofuscação semelhantes?
PS Eu já estou ciente do truque de codificação base64, mas isso requer ter o base64 instalado no sistema
Para resumir, eu gostaria de não usar nenhuma outra ferramenta além do bash para atingir meu objetivo (portanto, não há ferramentas de codificação base64 e similares, sem xxd, sem tubulação)
O
\x6c\x73\x20\x2d\x6c\x61
código, na maioria dos shells, tentaria executar ox6cx73x20x2dx6cx61
comando como\
se fosse apenas outro operador de citação.No shell
es
oufish
, ele tentaria executar ols -la
comando e provavelmente falharia, pois não há comando com esse nome. Ines
,\
não é um operador de citação, mas pode ser usado para expandir sequências de escape semelhantes a C.Em fish
\
é tanto um operador de citação (como emsh
/csh
) quanto um introdutor de sequência de escape como emes
.Em ambos,
\x20
não seria interpretado como o limitador de token que um caractere de espaço real está na sintaxe do shell, portanto não executaria ols
comando com-la
como parâmetro.O mesmo se você inseriu
$'\x6c\x73\x20\x2d\x6c\x61'
shells que suportam essa forma de citação no estilo ksh93.Você precisaria que a expansão deles fosse interpretada como código shell, por exemplo, alimentando-o em
eval
,sh -c
,source
...Ou pelo menos para que ele sofra divisão:
Não tenho certeza se isso corresponde ao espírito da pergunta, embora funcione apenas com o bash:
Você pode verificar o comando decodificado antes de executá-lo com