hacktricks/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md

70 lines
5.9 KiB
Markdown
Raw Normal View History

2023-06-05 18:33:24 +00:00
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/metodologia-pentesting"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- ¿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 la [**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)**.
</details>
## **Carga de archivos PHP**
El motor **PHP**, al **recibir un paquete POST** con **archivos codificados** según RFC 1867, **crea uno o más archivos temporales** que se utilizan para **almacenar los datos de los archivos cargados**. Se requiere un script PHP que maneje la carga de archivos para usar la función move\_uploaded\_file para mover el archivo temporal cargado a un lugar de su elección (si el script requiere que el archivo exista después de que termine). **Cuando el script termina, el motor PHP elimina todos los archivos temporales** para los archivos que se cargaron (si quedan después de que el script termine).
{% hint style="info" %}
**Como el atacante generalmente sabrá dónde se encuentran estos archivos temporales, en caso de encontrar una Inclusión de Archivo Local, podría cargar el archivo que se está cargando y obtener RCE.**
{% endhint %}
El principal problema para acceder al archivo es básicamente **adivinar su nombre (que será "aleatorio")**.
## Explotación en Windows
Para generar el nombre **aleatorio en Windows**, PHP utiliza la función **`GetTempFileName`**. Al buscar en la documentación, podemos encontrar la siguiente explicación: La función GetTempFileName crea un nombre de archivo temporal con la siguiente forma:
`<path>\<pre><uuuu>.TMP`
* La ruta es `upload_tmp_dir`, que normalmente es `C:\Windows\Temp`
* El prefijo es generalmente: "php"
* El \<uuuu> es un valor hexadecimal único. Sin embargo:
* Solo se utilizan los 16 bits inferiores del parámetro uUnique. Esto limita GetTempFileName a un máximo de 65.535 nombres de archivo únicos si los parámetros lpPathName y lpPrefixString permanecen iguales. **Es posible hacer fuerza bruta.**
Como vimos, es bastante **fácil** encontrar el **archivo temporal en sistemas Windows**. Y va a ser más fácil porque no se necesita fuerza bruta aquí, gracias a una cierta peculiaridad de FindFirstFile que permite **usar máscaras** (<< como \* y > como ?) en las rutas LFI en Windows. Gracias a esto, se puede formar una **ruta de inclusión como esta**:
```
http://site/vuln.php?inc=c:\windows\temp\php<<
```
En algunos casos puede ser necesario un patrón más específico como `php1<<` o `phpA<<`. Puedes realizar un ataque de fuerza bruta con patrones más específicos hasta encontrar el archivo temporal que subiste.
## Explotación en GNU/Linux
El valor aleatorio del nombre del archivo es lo suficientemente bueno como para no ser predecible ni susceptible a ataques de fuerza bruta. Para obtener más información, consulta las referencias.
## Referencias
* [https://gynvael.coldwind.pl/?id=376](https://gynvael.coldwind.pl/?id=376)
* [https://gynvael.coldwind.pl/download.php?f=PHP\_LFI\_rfc1867\_temporary\_files.pdf](https://gynvael.coldwind.pl/download.php?f=PHP\_LFI\_rfc1867\_temporary\_files.pdf)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- ¿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 [**swag oficial de PEASS y HackTricks**](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 PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>