# 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;

![](/files/-MZ8F9O5Hs1dPNOBO0xj)

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

![](/files/-MZ8FLa3PSlmLM89nMcb)

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.

![](/files/-MZ8GScB9K7sJEnS3iwt)

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

![](/files/-MZ8GmMBa9olkRD1DFHL)

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>" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://nicollaslopes.gitbook.io/estudos/master/pentest-web-1/bypass-upload.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
