Injeção de estilo SQL com entrada bash?

6

Dado um script que permite a qualquer pessoa fornecer informações. Existe alguma entrada que pode sair de uma variável. Por exemplo, dado o seguinte script:

echo $1

Haveria alguma maneira de tornar $1 algo como:

text && rm -rf /

Estou tentando fazer algo parecido com o acima e não funciona.

Alguém pode confirmar que o acima seria impossível?

    
por Philip Kirkbride 04.11.2017 / 21:43

3 respostas

5

Em 2014, houve uma exploração no mundo real para uma vulnerabilidade de Bash apelidada de Shellshock. Como a maioria das vulnerabilidades em softwares comuns, foi lançado o boletim Common Vulnerabilities and Exposures (CVE), CVE-2014-6278. O Shellshock é uma exploração remota do Bash que permite a execução de código arbitrário no host remoto por meio de vários vetores de ataque em pilhas comuns de software de servidor, incluindo os módulos cgi do Apache e o OpenSSH.

A vulnerabilidade afeta todas as versões do Bash de 1989 a 2014, quando foi corrigida depois que as explorações criadas facilmente foram amplamente demonstradas.

Para ler mais:

Apresentação do Shellshock da OWASP, PDF

NIST CVE-2014-6278

Pergunta Shellshock ServerFault, 2014

Acredito que a maioria das versões disponíveis no Distro Repos foram corrigidas.

Correção: Shellshock é uma família de vulnerabilidades ... CVE-2014-6271, CVE-2014-7186, CVE-2014-6278, CVE-2014-7169, CVE-2014-7186 , CVE-2014-7187

E é bom lembrar que isso pode afetar facilmente uma LAN se houver encaminhamento de porta para coisas como servidores da Web Apache ou SSH ... bem como dispositivos da Internet of Things não corrigidos (e provavelmente inatingíveis).

    
por 04.11.2017 / 22:12
4

Os separadores de comandos são processados antes das expansões, portanto não há como \n , ; , & , && ou || em uma variável ter um efeito a menos que os conteúdos das variáveis sejam eval ed.

    
por 04.11.2017 / 21:46
3

Parece que globbing é uma vulnerabilidade:

$ echo 'echo $1' > injection.sh
$ bash injection.sh '/*'
/bin /boot /dev /etc /home /lib /lib64 /media /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var

É por isso que você sempre cita vars:

$ echo 'echo "$1"' > injection.sh
$ bash injection.sh '/*'
/*
    
por 05.11.2017 / 03:57

Tags