$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
위의 두 번째 그룹에서 작성한 다른 명령도 작동합니까?
감사해요.
find -exec sh -c "something '{}'" \;
그룹 의 두 번째 명령을 공격하려면 다음을 수행하십시오 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 "{}"' \;