$somevariable
bash を必要とし、セキュリティ上のリスクを引き起こすスペースやその他の特殊文字を含めることができます。次のコマンドは同じですか?そうでなければランク付けできますか?
bash -c 'somecommand "$1"' bash "$somevariable"
bash -c "somecommand '$somevariable'"
bash -c "somecommand \"$somevariable\""
次のコマンドは同じですか?そうでなければランク付けできますか?
find -exec sh -c 'something "$@"' sh {} \;
find -exec sh -c "something '{}'" \;
find -exec sh -c "something \"{}\"" \;
find -exec sh -c 'something "{}"' \;
各グループのコマンド間に違いが見つかりません。
から"bash -c"で実行されるコマンドに引数を与える方法。ここでは、findutilsのマニュアルでメッセージが表示される理由を知りたいと思います。
find -exec sh -c 'something "$@"' sh {} \;
変える
find -exec sh -c "something {}" \;
だから
見積もりまたは
{}
実行するコマンドから移動sh -c
上記の2番目のグループで作成した他のコマンドも機能しますか?
ありがとうございます。
find -exec sh -c "something '{}'" \;
グループの2番目のコマンドを攻撃するには、次の手順を実行しますfind
。
$ touch "'; echo world '"
$ find . -exec sh -c "ls '{}'" \;
''\''; echo world '\'''
''\''; echo world '\'''
world
答え1
bash -c
少なくとも、次の例では、コマンドは同じではありません。
$ var='a
$(uname)'
$ bash -c 'echo "$1"' bash "$var"
a
$(uname)
$ bash -c "echo '$var'"
a
$(uname)
$ bash -c "echo \"$var\""
a
Darwin
コマンドfind
も異なります。
$ touch 'a
> $(uname)'
$ find . -exec sh -c 'echo "$@"' sh {} \;
.
./a
$(uname)
$ find . -exec sh -c "echo '{}'" \;
.
./a
$(uname)
$ find . -exec sh -c "echo \"{}\"" \;
.
./a
Darwin
$ find . -exec sh -c 'echo "{}"' \;
.
./a
Darwin
したがって、以下はランダムなコード実行を許可するようです。
bash -c "echo \"$var\""
find . -exec sh -c "echo \"{}\"" \;
find . -exec sh -c 'echo "{}"' \;