> For the complete documentation index, see [llms.txt](https://b4zh.gitbook.io/b4zh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://b4zh.gitbook.io/b4zh/pentesting/pentesting-web/file-uploads.md).

# FILE UPLOADS

Técnia que permite subir ficheros maliciosos al sitio web, a traves de su funcionalidad de subida de ficheros. Pudiendo asi por ejemplo subir un revshell para que el sitio lo ejecute y lo interprete obteniendo así una shell reversa.

## TIPOS

### UNRESTRICTED FILE UPLOAD

Permite subir ficheros sin validación adecuada.

### ARBITRARY FILE UPLOAD

Permit subir ficheros sin ningún tipo de restricción.

### PARTIAL FILE VALIDATION

Contiene una validación parcial que no es suficiente y se puede eludir.

### INSECURE FILE STORAGE

Los ficheros subidos se almacenan en ubicaciones que son accesibles publicamente. O ejectubles sin ningún tipo de restricción a nivel de acceso.

### IMPROPER HANDLING OF UPLOADED FILES

Se basa en los fallos de la gestión de los ficheros subidos, por ejemplo, renombrar ficheros sin sanitizar adecuadamente sus nombre o guardarlos en ubicaciones accesibles publicamente sin las restricciones adecuadas.

***

## METODOS DE EXPLOTACIÓN

### MIME TYPE SPOOFING

Multipurpose Internet Mail Extensions.

Se usa en internet para identificar el tipo de dato que un fichero contiene.

Se busca modificar el tipo de MIME que contiene el fichero a subir, para que sea identificado como inofensivo.

#### TIPOS DE MIME

* (medio)/(sub-tipo)
  * text/html
  * image/jpeg
  * application/json
* Categorías.

<figure><img src="https://2448382844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FywHg0FIANmg3uxJJ9jhH%2Fuploads%2FH1hK3ApgetM5jEOq6rCl%2Fimagen.png?alt=media&amp;token=d078e954-b14c-427f-9a88-110ece17a7b0" alt=""><figcaption></figcaption></figure>

Se puede modificar el mime de un fichero desde una petición capturada con BurpSuite, el mime se envía en la cabecera HTTP Content-Type.

O usando `curl` o `exiftool`.

DEBEMOS CAMBIAR TANTO EL MIME COMO LA EXTENSIÓN DEL FICHERO.

```
revshell.php -> image.jpeg
Content-Type:
text/plain
text/x-php
application/x-php
application/x-httpd-php
application/x-httpd-php-source
--->
image/jpeg
```

{% embed url="<https://es.stackoverflow.com/questions/98983/cual-es-el-mime-content-type-para-los-archivos-php#98986>" %}

***

### EXTENSION SPOOFING

Manipulación de la extensión del fichero, cambiar o agregar extensiones en el fichero a subir. Para engañar al servidor si es que este solo valida la extensión como parte de su filtro.

```
revshell.php -> revshell.php.jpg
```

***

### FILE CONTENT MASQUERADING

Ocultar el código dentro de un fichero que comienze con un encabezado legítimo correspondiente a un tipo de fichero inofensivo. Para engañar al servidor en caso de que este haga una inspección muy superficial.

TÉCNICAS:

* Modificar los magic numbers: secuencia especifica de bytes que indican el tipo de fichero y facilitan la identificación del formato del fichero. Son caracteres a nivel del encabezado que determinan como se debe manejar e interpretar un fichero independientemente de su extensión.

<figure><img src="https://2448382844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FywHg0FIANmg3uxJJ9jhH%2Fuploads%2FRV9ubO4aLU2IxwuAD3XQ%2Fimagen.png?alt=media&amp;token=c6b3883a-9b05-4c2e-8ca9-03a558f618fe" alt=""><figcaption></figcaption></figure>

Para editar el fichero usamos un editor hexadecimal.

***

## LABORATORIO

{% embed url="<https://tryhackme.com/room/rrootme>" %}

* SUBIMOS UNA REVSHELL.PHP
* NO NOS DEJA SUBIRLA.
* CAPTURAMOS LA PETICIÓN CON BURPSUITE.
* APLICAMOS LA TÉCNICA EXTENSION BYPASS, CAMBIAMOS LA EXTENSION .php A .phtml.

```
revshell.php --> revshell.phtml
```

* ENVIAMOS LA PETICIÓN MODIFICADA.
* EL SERVIDOR NOS DEJA SUBIR EL ARCHIVO.
* NOS PONEMOS A LA ESCUCHA CON ncat.

```bash
ncat -lnvp 4444
```

* ABRIMOS LE FICHERO DESDE /uploads.
* EL SERVIDOR INTERPRETA Y EJECUTA EL PAYLOAD.
* OBTENEMOS LA SHELL REVERSA.
* DAMOS UN TRATAMIENTO A LA TTY.

[TRATAMIENTO DE LA TTY](/b4zh/pentesting/antes-del-pentesting/tratamiento-de-la-tty.md)
