A vulnerabilidade comumente conhecida como Unrestricted file upload proporciona à aplicação que a possui um risco imenso, uma vez que pode possibilitar que um agente mal intencionado invada a aplicação e tenha controle sobre ela.
A exploração dessa falha se decorre em um cenário onde a aplicação não bloqueia um arquivo malicioso enviado, podendo essa processar o conteúdo desse arquivo (comandos), sobrescrever algum arquivo crítico (impossibilitaria o fluxo comum de funcionamento), entre outras possibilidades. Também vale ressaltar que um upload de arquivo irrestrito também pode ser aproveitado para realizar ataques via Client-side, como por exemplo a execução de um comando de JavaScript que estava no nome do arquivo enviado (XSS).
O método de exploração dessa vulnerabilidade varia de caso para caso, além dos comentados anteriormente, como execução de comandos no servidor que hospeda a aplicação, sobrescrição de arquivos críticos e execução de comandos no lado do usuário, também é possível realizar o envio de arquivos muito grandes para lotar a memória e prejudicar o upload de outros usuários, execução de arquivos executáveis do lado do servidor (.exe), até mesmo enviar um arquivo contaminado por um vírus.
Possíveis Bypass’s:
#Modificando a extensão do arquivo:
Algumas aplicações bloqueiam determinados tipos de arquivos que recebem, mas muitas acabam esquecendo de outros tipos, o que acaba não sendo uma proteção efetiva. Alguns exemplos de tipos de arquivos não bloqueados são os com terminação “.php5”, “.pht”, “.phtml”, “.shtml”, “.swf”, “.xap”, entre outros. Também é possível burlar algumas aplicações apenas modificando o tamanho da caixa das letras, como por exemplo modificar o nome do arquivo de “.php” para “.PHp”.
#Modificando o Content-Type da requisição de upload utilizando um proxy
#Inserindo espaços, barras, virgulas e pontos finais no final do nome do arquivo
#Enviar um arquivo com duas extensões, exemplo: storme.php.jpg
#Inserir um null byte, exemplo: storme.php%00.jpg
entre outras possibilidades…
Exploração prática
Um caso comum e de simples exploração é onde a aplicação aceita e processa um arquivo que contém um comando php em seu servidor, a exploração decorre conforme a sequência abaixo:
Vale ressaltar que os conhecimentos fornecidos por esse material são para fins educacionais, não tente aplicá-los em um cenário que você não tem permissão, isso é crime 😊
A exploração exemplificada abaixo foi decorrida em um ambiente controlado: Máquina rootme do tryhackme
- Criação de arquivo php com comando para web shell
<?php system($_GET[‘cmd’]);?>
- Fazendo upload do arquivo malicioso
- A aplicação pode bloquear o tipo de arquivo enviado assim como ocorreu no caso exemplificado:
- Podemos tentar burlar isso modificando a extensão do arquivo, tentaremos mudar de “.php” para “.php5”
- Tentando enviar o arquivo novamente
- Abrindo arquivo
- Interagindo com a Web Shell utilizando o parâmetro definido na Web Shell (após o nome do arquivo é preciso declarar uma interrogação, o nome do parâmetro e o comando a ser executado: shellzinha.php?cmd=ls -la/)
Seria possível prosseguir com a exploração sem muitas dificuldades, mas como só queria explicar melhor a exploração dessa falha vou parar por aqui :)
Conclusão
Os desenvolvedores precisam se atentar para qualquer entrada provida pelos usuários de suas aplicações. Uma aplicação que apresenta um upload de arquivo irrestrito está em risco alto e prorciona a um atacante um bom caminho de entrada.
Espero ter ajudado, bons estudos!
“No mundo do hacking, ao parar você não fica estagnado na mesma posição, você começa a regredir, nunca pare!”. Storme
Caso queira entrar em contato comigo:
https://www.instagram.com/ohomemnaoparanunca/
Referências: