$ cat << EOM | /opt/vulnerable/bin/bash
> env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
> EOM
Está errado.
Na segunda linha, você está chamando bash
, que usará a versão em $PATH
1 .
Você deseja usar a versão de bash
em /opt/vulnerable/bin/bash
, assim:
$ cat << EOM | /opt/vulnerable/bin/bash
> env x='() { :;}; echo vulnerable' /opt/vulnerable/bin/bash -c "echo this is a test"
> EOM
Eu não vejo necessidade de você chamar bash duas vezes e usar um cachimbo assim. Por que não apenas:
$ env x='() { :;}; echo vulnerable' bash -c 'echo this is a test'
e
$ env x='() { :;}; echo vulnerable' /opt/vulnerable/bin/bash -c 'echo this is a test'
Eu verifiquei usando bash
versus ~/src/bash/bash
no meu sistema:
$ 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
Notas de rodapé:
- Ou uma função, um alias, a versão em
hash
, etc.