エンコーディングが16進数の場合にls -laを実行する方法は?

エンコーディングが16進数の場合にls -laを実行する方法は?

インターネットには\x0B\x2E...で始まるものをコピーできるという本当に悪い冗談がありました(ただはい)。このコマンドを実行すると、端末はこれをsudo rm -rf /

この難読化をどのように実行しますか? Cyber​​chefを実行してコマンドをls -la16進数に変換してみましたが、構文があってもコマンドは実行されません\x<hexcodetwocharactershere>\x<hexcodetwocharactershere>

  • 私は何が間違っていましたか?
  • 同様の難読化方法がありますか?

PS私はすでにbase64エンコーディングトリックを知っていますが、そのためにはシステムにbase64がインストールされている必要があります。

全体的に私は私の目標を達成するためにbash以外のものを使用したくありません(したがってbase64エンコーディングツールと同様のツール、xxd、パイプなし)。

ベストアンサー1

ほとんどのシェルでは、コードは他の引用演算子のようにこのコマンドを\x6c\x73\x20\x2d\x6c\x61実行しようとします。x6cx73x20x2dx6cx61\

esまたは、シェルはコマンドfishを実行しようとしますls -laが、その名前のコマンドがないため失敗する可能性があります。では参照演算子ではありませんが、Cに似たエスケープシーケンスを拡張するために使用できますes\

Fishでは、\参照演算子(例:sh/ csh)であり、エスケープシーケンスの導入演算子(例:)ですes

どちらの場合も、\x20トークン区切り文字はシェル構文で実際の空白文字として解釈されないため、lsコマンドは引数として実行されません。-la

$'\x6c\x73\x20\x2d\x6c\x61'ksh93スタイルの引用をサポートするシェルに入力する場合も同様です。

これらの拡張をシェルコードとして解釈する必要があります(たとえば、、、eval...に提供されています)。sh -csource

eval $'\x6c\x73\x20\x2d\x6c\x61'

または、少なくとも分割する必要があります。

code=$'\x6c\x73\x20\x2d\x6c\x61'
$code # using split+glob in POSIX shells
$=code # explicit IFS-splitting in zsh
${(s[ ])code} # explicit splitting on space in zsh

おすすめ記事