# Bypass upload

Quando a aplicação possui alguma funcionalidade de fazer um upload de arquivo, podemos testar esse vetor para conseguirmos uma shell enviando um arquivo malicioso.&#x20;

### Bypass através do php

A primeira coisa a se testar, é enviar um arquivo que execute comandos do sistema para a aplicação (como a função sistem() do php). Só que algumas vezes, pode ser que seja bloqueado a extensão **.php** para impedir que isso seja feito. Uma das formas para tentar bypassar essa proteção, é colocarmos a extensão com alguma das letras maiúsculas, como por exemplo **.phP, .Php ou .pHp**, assim pode ser que a aplicação aceita.

### Bypass através do .htaccess

Dependendo de como o servidor está configurado, podemos tentar enviar um arquivo .htaccess e se caso ele permitir o **AllowOverride** nós conseguimos enviar esse arquivo e ele irá ler o conteúdo do mesmo. Com isso,  podemos inserir no .htaccess a dizer para o servidor interpretar um outro arquivo com a extensão que queremos. Podemos inserir o seguinte conteúdo:

*AddType application/x-httpd-php .teste*

Assim o servidor irá interpretar os arquivos com a extensão ".teste" como se fosse um arquivo php e por fim, nesse arquivo colocamos um comando do php para executar comandos do sistema operacional, dessa forma conseguindo bypassar o filtro e ganharmos uma shell.

### Bypass tipo de conteúdo

Vamos supor que a aplicação só aceita apenas arquivos **.pdf** e queremos dar um bypass nessa proteção. Pode ser que além da verificação de extensão do arquivo, pode estar sendo verificado também o tipo de arquivo. Primeiro, precisamos entender que a verificação do tipo de um arquivo é feita através do seu cabeçalho, ele que indica qual é o seu tipo. Se visualizarmos a primeira linha de um arquivo pdf, por exemplo, irá conter isso.&#x20;

![](https://3511586545-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWGE4aWZZAkQEVt8cOV%2F-MZ84cahk-ACZe1gHNf6%2F-MZ8F9O5Hs1dPNOBO0xj%2Fimage.png?alt=media\&token=f182d3a2-1593-4ea4-878c-cca7c0c37e1d)

Se utilizarmos o comando **file** podemos também ver o tipo do arquivo.&#x20;

![](https://3511586545-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWGE4aWZZAkQEVt8cOV%2F-MZ84cahk-ACZe1gHNf6%2F-MZ8FLa3PSlmLM89nMcb%2Fimage.png?alt=media\&token=9cb83513-f4ee-486f-9cb1-c7041ecc95e9)

Sabendo disso, podemos criar um arquivo php e adicionarmos na primeira linha um **%PDF-1.5 (que são os bytes que identifica como pdf)** e assim ele será reconhecido como pdf.

![](https://3511586545-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWGE4aWZZAkQEVt8cOV%2F-MZ84cahk-ACZe1gHNf6%2F-MZ8GScB9K7sJEnS3iwt%2Fimage.png?alt=media\&token=b486a86c-44da-4c71-9a50-f5d679ffb654)

Agora se visualizarmos o tipo desse arquivo, irá ser pd&#x66;**,** mesmo com a extensão php.

![](https://3511586545-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWGE4aWZZAkQEVt8cOV%2F-MZ84cahk-ACZe1gHNf6%2F-MZ8GmMBa9olkRD1DFHL%2Fimage.png?alt=media\&token=22bfda6a-8776-4d82-91cb-79ceb83e7369)

Se a aplicação apenas aceitar arquivos com extensão .pdf, podemos também renomear este arquivo como .pdf que irá funcionar da mesma forma. Com isso, podemos fazer o upload deste arquivo para testarmos se a aplicação irá aceitar.

### Links úteis

{% embed url="<https://imagetragick.com/>" %}

{% embed url="<https://github.com/ImageTragick/PoCs>" %}
