일관성 없는 쉘 충격 활용

일관성 없는 쉘 충격 활용

게시된 명령을 기반으로 Shellshock 취약점을 시연하려고 합니다.여기.

나는 두 가지 시스템을 고려했습니다. 첫 번째 시스템에는 취약한 bash가 있었고 $PATH다른 하나에는 에 패치된 버전의 bash가 있었고 소스에서 컴파일된 $PATH에는 "취약하다고 주장되는" 버전이 있었습니다 ./opt/vulnerable

우수한첫 번째 시스템, 오류를 성공적으로 악용할 수 있었습니다.

$ bash --version
GNU bash, version 4.1.2(1)-release (i386-redhat-linux-gnu)
[...]

$ cat << EOM | bash
> env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
> EOM
vulnerable
this is a test

우수한두 번째 시스템, 위에서 언급했듯이 in의 패치 버전이 있고 in의 소스 버전 $PATH에서 최근(예: 몇 시간 전) bash컴파일된 버전은 /opt/vulnerable취약할 것입니다.

$ bash --version
GNU bash, version 4.3.11(1)-release (i686-pc-linux-gnu)
[...]

$ /opt/vulnerable/bin/bash
GNU bash, version 4.1.0(1)-release (i686-pc-linux-gnu)
[...]

기본 버전을 통해 취약한 버전으로 다음 명령을 전달했지만 이를 악용할 수는 없었습니다.

$ cat << EOM | /opt/vulnerable/bin/bash
> env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
> EOM
this is a test

나도 사용해봤는데이것테스트에 사용된 스크립트이지만 취약점을 감지하지 못했습니다. (이 명령은 기본 패치 셸에서 실행됩니다):

$ /opt/vulnerable/bin/bash shellshock_test.sh
CVE-2014-6271 (original shellshock): not vulnerable
CVE-2014-6277 (segfault): not vulnerable
CVE-2014-6278 (Florian's patch): not vulnerable
CVE-2014-7169 (taviso bug): not vulnerable
CVE-2014-7186 (redir_stack bug): not vulnerable
CVE-2014-7187 (nested loops off by one): not vulnerable
CVE-2014-//// (exploit 3 on http://shellshocker.net/): not vulnerable

내가 여기서 뭔가 잘못하고 있는 걸까요? 아니면 ftp.gnu.org의 모든 bash 소스 아카이브가 이 취약점에 대해 패치되었습니까?

답변1

$ cat << EOM | /opt/vulnerable/bin/bash
> env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
> EOM

틀렸다.

두 번째 줄에서는 1bash 의 버전을 사용하여 호출합니다 .$PATH

bash사용하려는 버전 /opt/vulnerable/bin/bash은 다음과 같습니다.

$ cat << EOM | /opt/vulnerable/bin/bash
> env x='() { :;}; echo vulnerable' /opt/vulnerable/bin/bash -c "echo this is a test"
> EOM

하지만 굳이 bash를 두번 호출해서 이런 파이프를 사용할 필요는 없을 것 같습니다. 왜 안되나요:

$ env x='() { :;}; echo vulnerable' bash -c 'echo this is a test'

그리고

$ env x='() { :;}; echo vulnerable' /opt/vulnerable/bin/bash -c 'echo this is a test'

내 시스템에서 vs를 사용하여 bash확인했습니다 .~/src/bash/bash

$ env x='() { :;}; echo vulnerable' bash -c 'echo $BASH_VERSION'
4.3.11(1)-release

$ env x='() { :;}; echo vulnerable' ~/src/bash/bash -c 'echo $BASH_VERSION'
4.3.42(1)-release

각주:

  1. 또는 함수, 별칭, 버전 hash등입니다.

관련 정보