<summary><strong>Aprende hacking en AWS de cero a héroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere dominio del polaco escrito y hablado_).
3. Intenta agregar **caracteres especiales al final**. Puedes usar Burp para **bruteforce** de todos los caracteres **ascii** y **Unicode**. (_Ten en cuenta que también puedes intentar usar las **extensiones previamente** mencionadas_)
4. Intenta saltar las protecciones **engañando al analizador de extensiones** del lado del servidor con técnicas como **duplicar** la **extensión** o **agregar datos basura** (bytes **nulos**) entre extensiones. _También puedes usar las **extensiones anteriores** para preparar un payload mejor._
6. Intenta colocar la **extensión de ejecución antes de la extensión válida** y reza para que el servidor esté mal configurado. (útil para explotar configuraciones incorrectas de Apache donde cualquier cosa con la extensión\*\* _**.php**_**, pero** no necesariamente terminando en .php\*\* ejecutará código):
7. Usando **flujos de datos alternativos NTFS (ADS)** en **Windows**. En este caso, se insertará un carácter de dos puntos ":" después de una extensión prohibida y antes de una permitida. Como resultado, se creará un **archivo vacío con la extensión prohibida** en el servidor (por ejemplo, "file.asax:.jpg"). Este archivo podría editarse más tarde utilizando otras técnicas como usar su nombre corto. El patrón “**::$data**” también se puede usar para crear archivos no vacíos. Por lo tanto, agregar un carácter de punto después de este patrón también podría ser útil para saltar más restricciones (por ejemplo, “file.asp::$data.”)
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # menos 4 aquí y agregando .png
* Saltar las comprobaciones de **Tipo de Contenido** configurando el **valor** del **encabezado****Content-Type** a: _image/png_, _text/plain, application/octet-stream_
1. Lista de palabras para **Content-Type**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
* Saltar la comprobación de **número mágico** añadiendo al principio del archivo los **bytes de una imagen real** (confundir el comando _file_). O introducir el shell dentro de los **metadatos**:\
* Si se está añadiendo **compresión a tu imagen**, por ejemplo usando algunas librerías PHP estándar como [PHP-GD](https://www.php.net/manual/fr/book.image.php), las técnicas anteriores no serán útiles. Sin embargo, podrías usar el **chunk PLTE** [**técnica definida aquí**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para insertar texto que **sobrevivirá a la compresión**.
* La página web también podría estar **redimensionando** la **imagen**, utilizando por ejemplo las funciones PHP-GD `imagecopyresized` o `imagecopyresampled`. Sin embargo, podrías usar el **chunk IDAT** [**técnica definida aquí**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para insertar texto que **sobrevivirá a la compresión**.
* Otra técnica para crear un payload que **sobreviva a un redimensionamiento de imagen**, es utilizando la función PHP-GD `thumbnailImage`. Sin embargo, podrías usar el **chunk tEXt** [**técnica definida aquí**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para insertar texto que **sobrevivirá a la compresión**.
1. Subir **varias veces** (y al **mismo tiempo**) el **mismo archivo** con el **mismo nombre**
2. Subir un archivo con el **nombre** de un **archivo** o **carpeta** que **ya existe**
3. Subir un archivo con **“.”, “..”, o “…” como nombre**. Por ejemplo, en Apache en **Windows**, si la aplicación guarda los archivos subidos en el directorio “/www/uploads/”, el nombre “.” creará un archivo llamado “uploads” en el directorio “/www/”.
4. Subir un archivo que no se pueda eliminar fácilmente como **“…:.jpg”** en **NTFS**. (Windows)
5. Subir un archivo en **Windows** con caracteres inválidos como `|<>*?”` en su nombre. (Windows)
6. Subir un archivo en **Windows** usando **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.
* Intenta también **subir un ejecutable** (.exe) o un **.html** (menos sospechoso) que **ejecutará código** al ser abierto accidentalmente por la víctima.
Si estás intentando subir archivos a 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 subir archivos a un servidor **ASP**, [echa un vistazo al truco de **.config** para ejecutar código](../../network-services-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 pueden ser **usados como un archivo PHP** (ejecutándolo con PHP, o incluyéndolo dentro de un script...)
La extensión `.inc` a veces se usa 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**.
Si puedes subir un archivo XML a un servidor Jetty, puedes obtener [RCE porque los nuevos archivos \*.xml y \*.war se procesan automáticamente](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Entonces, como se menciona en la siguiente imagen, ¡sube el archivo XML a `$JETTY_BASE/webapps/` y espera la shell!
Para una exploración detallada de esta vulnerabilidad, consulta la investigación original: [Explotación de RCE en uWSGI](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Las vulnerabilidades de Ejecución Remota de Comandos (RCE) pueden ser explotadas en servidores uWSGI si se tiene la capacidad de modificar el archivo de configuración `.ini`. Los archivos de configuración de uWSGI aprovechan una sintaxis específica para incorporar variables "mágicas", marcadores y operadores. Notablemente, el operador '@', utilizado como `@(nombre de archivo)`, está diseñado para incluir el contenido de un archivo. Entre los diversos esquemas admitidos en uWSGI, el esquema "exec" es particularmente potente, permitiendo la lectura de datos desde la salida estándar de un proceso. Esta característica puede ser manipulada con fines maliciosos como la Ejecución Remota de Comandos o la Escritura/Lectura Arbitraria de Archivos cuando se procesa un archivo de configuración `.ini`.
La ejecución de la carga útil ocurre durante el análisis del archivo de configuración. Para que la configuración se active y se analice, el proceso uWSGI debe reiniciarse (potencialmente después de un fallo o debido a un ataque de denegación de servicio) o el archivo debe configurarse para recargar automáticamente. La función de recarga automática, si está habilitada, recarga el archivo en intervalos especificados al detectar cambios.
Es crucial entender la naturaleza laxa del análisis de archivos de configuración de uWSGI. Específicamente, la carga útil discutida puede ser insertada en un archivo binario (como una imagen o PDF), ampliando aún más el alcance de la posible explotación.
En algunas ocasiones, puedes descubrir que un servidor está utilizando **`wget`** para **descargar archivos** y puedes **indicar** la **URL**. En estos casos, es posible que el código esté verificando que la extensión de los archivos descargados esté dentro de una lista blanca para asegurar que solo se descarguen archivos permitidos. Sin embargo, **esta verificación puede ser eludida**.\
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. Puedes **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"**.
New name is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.
Saving to: ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’
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` porque **wget descargará la página redirigida con el nombre del archivo indicado en la URL original**.
* [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass) es una herramienta poderosa diseñada para ayudar a Pentesters y Cazadores de Bugs en probar los mecanismos de carga de archivos. Aprovecha varias técnicas de recompensa por errores para simplificar el proceso de identificación y explotación de vulnerabilidades, asegurando evaluaciones exhaustivas de aplicaciones web.
* 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 `<svg onload=alert(document.domain)>` para lograr un XSS
* Establece el **nombre de archivo** como `; sleep 10;` para probar alguna inyección de comandos (más [trucos de inyección de comandos aquí](../command-injection.md))
* [Famosa vulnerabilidad de **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
* Si puedes **indicar al servidor web que capture una imagen desde una URL** podrías intentar abusar de un [SSRF](../ssrf-server-side-request-forgery/). Si esta **imagen** va a ser **guardada** en algún sitio **público**, también podrías indicar una URL desde [https://iplogger.org/invisible/](https://iplogger.org/invisible/) y **robar información de cada visitante**.
* PDFs especialmente elaborados para XSS: La [siguiente página presenta cómo **inyectar datos PDF para obtener ejecución de JS**](../xss-cross-site-scripting/pdf-injection.md). Si puedes cargar PDFs, podrías preparar algún PDF que ejecute JS arbitrario siguiendo las indicaciones dadas.
* Carga el \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) contenido para verificar si el servidor tiene algún **antivirus**
* Verifica si hay algún **límite de tamaño** al cargar archivos
Aquí tienes una lista de las 10 principales cosas que puedes lograr al cargar (de [aquí](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
Consulta [https://en.wikipedia.org/wiki/List\_of\_file\_signatures](https://en.wikipedia.org/wiki/List\_of\_file\_signatures) para otros tipos de archivos.
La creación inesperada de archivos en directorios durante la descompresión es un problema significativo. A pesar de las suposiciones iniciales de que esta configuración podría proteger contra la ejecución de comandos a nivel de sistema operativo a través de cargas de archivos maliciosos, el soporte de compresión jerárquica y las capacidades de travesía de directorios del formato de archivo ZIP pueden ser explotados. Esto permite a los atacantes evadir restricciones y escapar de directorios de carga segura manipulando la funcionalidad de descompresión de la aplicación objetivo.
Un exploit automatizado para crear dichos archivos está disponible en [**evilarc en GitHub**](https://github.com/ptoomey3/evilarc). La utilidad se puede utilizar de la siguiente manera:
Además, el **truco del enlace simbólico con evilarc** es una opción. Si el objetivo es apuntar a un archivo como `/flag.txt`, se debe crear un enlace simbólico a ese archivo en su sistema. Esto garantiza que evilarc no encuentre errores durante su operación.
Para más detalles **consulte la publicación original en**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
3.**Modificación con un Editor Hexadecimal o vi**: Se alteran los nombres de los archivos dentro del zip usando vi o un editor hexadecimal, cambiando "xxA" por "../" para atravesar directorios.
Incrustar un shell PHP en el chunk IDAT de un archivo PNG puede evadir efectivamente ciertas operaciones de procesamiento de imágenes. Las funciones `imagecopyresized` e `imagecopyresampled` de PHP-GD son particularmente relevantes en este contexto, ya que comúnmente se utilizan para redimensionar y remuestrear imágenes, respectivamente. La capacidad del shell PHP incrustado de permanecer sin cambios ante estas operaciones es una ventaja significativa para ciertos casos de uso.
Una exploración detallada de esta técnica, incluyendo su metodología y posibles aplicaciones, se proporciona en el siguiente artículo: ["Codificación de Web Shells en chunks IDAT de PNG"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Este recurso ofrece una comprensión integral del proceso y sus implicaciones.
Más información en: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
Los archivos políglotos sirven como una herramienta única en ciberseguridad, actuando como camaleones que pueden existir válidamente en múltiples formatos de archivo simultáneamente. Un ejemplo intrigante es un [GIFAR](https://en.wikipedia.org/wiki/Gifar), un híbrido que funciona tanto como un GIF como un archivo RAR. Estos archivos no se limitan a esta combinación; combinaciones como GIF y JS o PPT y JS también son factibles.
La utilidad principal de los archivos políglotos radica en su capacidad para eludir medidas de seguridad que examinan archivos según su tipo. La práctica común en varias aplicaciones implica permitir solo ciertos tipos de archivos para cargar, como JPEG, GIF o DOC, para mitigar el riesgo planteado por formatos potencialmente dañinos (por ejemplo, archivos JS, PHP o Phar). Sin embargo, un polígloto, al cumplir con los criterios estructurales de múltiples tipos de archivo, puede eludir sigilosamente estas restricciones.
A pesar de su adaptabilidad, los políglotos encuentran limitaciones. Por ejemplo, aunque un polígloto pueda encarnar simultáneamente un archivo PHAR (PHp ARchive) y un JPEG, el éxito de su carga puede depender de las políticas de extensión de archivos de la plataforma. Si el sistema es estricto en cuanto a las extensiones permitidas, la mera dualidad estructural de un polígloto puede no ser suficiente para garantizar su carga.
Más información en: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡estamos contratando!** (_se requiere dominio del polaco escrito y hablado_).
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).