![일관성 없는 쉘 충격 활용](https://linux55.com/image/77652/%EC%9D%BC%EA%B4%80%EC%84%B1%20%EC%97%86%EB%8A%94%20%EC%89%98%20%EC%B6%A9%EA%B2%A9%20%ED%99%9C%EC%9A%A9.png)
게시된 명령을 기반으로 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
각주:
- 또는 함수, 별칭, 버전
hash
등입니다.