- introdução
- o que é a injeção de comando?
- Why are command injection vulnerabilities dangerous?
- vulnerabilidades que podem levar à execução de comandos
- injeção de comando arbitrária
- uploads de ficheiros arbitrários
- serialização insegura
- Server-side template injection
- XML external entity injection
- Conclusion
introdução
as vulnerabilidades de injeção de comandos são uma das vulnerabilidades web mais perigosas. Muitos testadores de segurança e caçadores de recompensas visam encontrar vulnerabilidades de injeção de comando devido ao impacto que eles podem criar na aplicação alvo.
este artigo irá fornecer uma visão geral das vulnerabilidades de injeção de comandos, juntamente com uma introdução a várias vulnerabilidades que podem eventualmente levar à injeção de comandos.
o que é a injeção de comando?
injeção de comandos é um tipo de vulnerabilidade web que permite aos atacantes executar comandos arbitrários do sistema operacional no servidor, onde a aplicação está em execução. Vulnerabilidades de injeção de comandos ocorrem quando as aplicações fazem uso de comandos shell ou scripts que executam comandos shell em segundo plano.
vamos considerar o seguinte URL de uma aplicação, que executa a codificação base64 da entrada do utilizador.
http://target-site.com/encode.php?text=helloworld
Esta entrada do Usuário é passada como um parâmetro get para o codificador.ficheiro php.
o seguinte é o código fonte do codificador.php:
<?php
$input=$_GET;
system (“echo-n”. $entrada.”/base64″);
?>
como podemos notar no excerto de código anterior, a entrada do Usuário é passada para a função php system (), que é usada para executar comandos do sistema operacional em PHP.
se um usuário adicionar um comando de sistema à entrada, ele será executado como um comando de sistema operacional, que se parece com este:
http://target-site.com/encode.php?text=test;id
segue-se a resposta devolvida ao utilizador::
testdWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK
As we can see, the word test is not encoded but there is a long encoded text returned in response. Decoding this text looks like this:
$ echo -n “dWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK” | base64 -d
uid=33(www-data) gid=33(www-data) groups=33(www-data)
As you can see, the encoded text is the output of the id command passed to the application.
Why are command injection vulnerabilities dangerous?
a classe de vulnerabilidades de injeção de comando é considerada uma das vulnerabilidades web mais perigosas porque elas dão controle sobre o sistema operacional subjacente a um atacante. Este controle pode ser usado de várias maneiras diferentes, incluindo o movimento lateral através da rede interna usando a confiança que o servidor alvo tem com outros sistemas na rede.
vulnerabilidades que podem levar à execução de comandos
enquanto vulnerabilidades de execução de comandos ocorrem quando a aplicação vulnerável permite ao usuário final estender a funcionalidade padrão da aplicação e executar comandos de sistema, também é possível executar comandos através do Código da aplicação. Isto é comumente conhecido como execução de código. Mesmo quando existe uma vulnerabilidade de execução de código, o objetivo final é executar comandos arbitrários do sistema através dele. Considerando isso, vamos discutir algumas das vulnerabilidades que podem levar à execução de comando através de injeção de comando ou execução de código.
a seguir estão algumas das vulnerabilidades que podem eventualmente levar a ataques de injeção de comando.
injeção de comando arbitrária
como discutimos no nosso exemplo anterior, é possível que as aplicações tenham aplicações que recebem comandos de Sistema arbitrários do utilizador directamente e executem-nos na máquina subjacente. Este é um exemplo de classe de vulnerabilidade de injeção de comando.
uploads de ficheiros arbitrários
quando as aplicações permitem aos utilizadores carregar ficheiros com extensões de ficheiros arbitrárias, pode levar a uma injecção de comandos quando estes ficheiros enviados são colocados no webroot. Esta é mais uma forma comum de aplicações web pode tornar-se vulnerável a injeção de comando.
serialização insegura
além das vulnerabilidades de injeção de comandos padrão, a execução arbitrária de comandos também pode ser possível usando outras vulnerabilidades, como a deserialização insegura. Isto aproveita o fato de que o código do lado servidor deserializa o conteúdo serializado passado pelo usuário, sem validá-lo corretamente. Mesmo que esta seja comumente conhecida como classe de vulnerabilidades de serialização insegura, ela eventualmente leva a injeção de comando se a aplicação alvo atender a certos requisitos, tais como gadgets apropriados que estão disponíveis no caminho da classe.
Server-side template injection
When web applications use server-side templating technologies such as Jinja2 or Twig to generate dynamic HTML responses, it is possible to have server-side template injection. Vulnerabilidades SSTI ocorrem quando a entrada do Usuário é incorporada em um modelo de forma insegura e resulta em execução de código remoto no servidor.
XML external entity injection
XML external entity vulnerability is another type of vulnerability, which occurs against applications that parse user-controlled XML input using a wakly configured XML parser. As vulnerabilidades XXE geralmente levam à leitura de arquivos arbitrários do servidor e causando ataques de negação de Serviço.
no entanto, eles também podem levar à execução de comandos no servidor quando certas condições são cumpridas. Por exemplo, se PHP expect:// wrapper está habilitado no servidor vulnerável alvo, é possível executar comandos arbitrários no servidor.
por favor, note que esta não é uma lista exaustiva de vulnerabilidades que podem levar a injeção de comando e existem várias outras vulnerabilidades que podem levar a injeção de comando quando elas cumprem certas condições.
Conclusion
It is apparent that there are several different vulnerabilities that can lead to command execution on the server. Os desenvolvedores devem estar cientes dessas vulnerabilidades de injeção de comando devido ao fato de que essas vulnerabilidades são de alto impacto, pois podem dar controle total sobre a infra-estrutura subjacente.
nos próximos artigos desta série, iremos cobrir alguns conceitos relacionados com injeções de comando, tais como a identificação e exploração da injeção de comando cego.