☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
# Metodología general de carga de archivos
1. Intenta cargar un archivo con una **doble extensión** \(ejemplo: _file.png.php_ o _file.png.php5_\).
* Extensiones de PHP: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, ._phps_, ._pht_, _.phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc_
* Extensiones de ASP: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .asp, .cer, .shtml_
2. Intenta **poner en mayúscula alguna\(s\) letra\(s\) de la extensión**. Por ejemplo: _.pHp, .pHP5, .PhAr ..._
3. Intenta cargar alguna **doble \(o más\) extensión** \(útil para evadir comprobaciones mal configuradas que prueban si una extensión específica está presente\):
1. _file.png.php_
2. _file.png.txt.php_
4. Intenta cargar alguna **doble extensión invertida** \(útil para explotar configuraciones incorrectas de Apache donde cualquier cosa con la extensión _.php_, pero **no necesariamente terminando en .php**, ejecutará código\):
* _ejemplo: file.php.png_
5. Doble extensión con **carácter nulo**:
1. _ejemplo: file.php%00.png_
6. **Agrega algunos caracteres especiales al final** de la extensión_: %00, %20, \(varios puntos\)...._
1. _file.php%00_
2. _file.php%20_
3. _file.php...... --> En Windows, cuando se crea un archivo con puntos al final, estos se eliminarán \(por lo que se pueden evadir los filtros que verifican la extensión .php\)
4. _file.php/_
5. _file.php.\_
7. Evita las comprobaciones de tipo de contenido estableciendo el **valor** del **encabezado Content-Type** en: _image/png_, _text/plain_, application/octet-stream_
8. Evita la comprobación del número mágico agregando al principio del archivo los **bytes de una imagen real** \(confunde el comando _file_\). O introduce la shell dentro de los **metadatos**: `exiftool -Comment="*?”` en su nombre. \(Windows\)
6. Carga un archivo en **Windows** utilizando **nombres reservados** \(**prohibidos**\) como CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 y LPT9.
También intenta cargar un ejecutable \(.exe\) o un **.html** \(menos sospechoso\) que **ejecutará código** cuando sea abierto accidentalmente por la víctima.
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files" %}
Si estás intentando cargar archivos en un servidor **PHP**, [echa un vistazo al truco de **.htaccess** para ejecutar código](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).
Si estás intentando cargar archivos en un servidor **ASP**, [echa un vistazo al truco de **.config** para ejecutar código](../pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
Los archivos `.phar` son como los archivos `.jar` para Java, pero para PHP, y se pueden **usar como un archivo PHP** (ejecutándolo con PHP o incluyéndolo dentro de un script...).
La extensión `.inc` se utiliza a veces para archivos PHP que solo se utilizan para **importar archivos**, por lo que en algún momento alguien podría haber permitido **ejecutar esta extensión**.
**Verifique muchas posibles vulnerabilidades de carga de archivos con el complemento BurpSuit** [**https://github.com/modzero/mod0BurpUploadScanner**](https://github.com/modzero/mod0BurpUploadScanner) **o use una aplicación de consola que encuentre qué archivos se pueden cargar y pruebe diferentes trucos para ejecutar código:** [**https://github.com/almandin/fuxploider**](https://github.com/almandin/fuxploider)
## **Truco de carga de archivos/SSRF con wget**
En algunas ocasiones, puede suceder que un servidor esté utilizando **`wget`** para **descargar archivos** y se pueda **indicar** la **URL**. En estos casos, es posible que el código esté verificando que la extensión de los archivos descargados esté en una lista blanca para asegurarse de que solo se descarguen archivos permitidos. Sin embargo, **esta verificación se puede eludir**.
La **longitud máxima** de un **nombre de archivo** en **Linux** es de **255**, sin embargo, **wget** trunca los nombres de archivo a **236** caracteres. Puede **descargar un archivo llamado "A"\*232+".php"+".gif"**, este nombre de archivo **burlará** la **verificación** (como en este ejemplo **".gif"** es una extensión **válida**) pero `wget` **renombrará** el archivo a **"A"\*232+".php"**.
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
python3 -m http.server 9080
```
```bash
#Download the file
wget 127.0.0.1:9080/$(python -c 'print("A"*(236-4)+".php"+".gif")')
The name is too long, 240 chars total.
Trying to shorten...
New name is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.
--2020-06-13 03:14:06-- http://127.0.0.1:9080/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.gif
Connecting to 127.0.0.1:9080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10 [image/gif]
Saving to: ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[===============================================>] 10 --.-KB/s in 0s
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
```
Ten en cuenta que **otra opción** que puedes estar considerando para evadir esta verificación es hacer que el **servidor HTTP redirija a un archivo diferente**, de modo que la URL inicial evite la verificación y luego wget descargará el archivo redirigido con el nuevo nombre. Esto **no funcionará** **a menos que** wget se esté utilizando con el **parámetro** `--trust-server-names`, ya que **wget descargará la página redirigida con el nombre del archivo indicado en la URL original**.
# De la carga de archivos a otras vulnerabilidades
* Establece el **nombre de archivo** como `../../../tmp/lol.png` e intenta lograr una **travesía de directorios**
* Establece el **nombre de archivo** como `sleep(10)-- -.jpg` y podrías lograr una **inyección SQL**
* Establece el **nombre de archivo** como `