* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Heureusement, PHP est actuellement souvent déployé via PHP-FPM et Nginx. Nginx offre une fonctionnalité de [mise en tampon du corps du client](https://nginx.org/en/docs/http/ngx\_http\_core\_module.html#client\_body\_buffer\_size) facilement négligée, qui écrira des fichiers temporaires si le corps du client (pas limité à POST) est plus grand qu'un certain seuil.
Cette fonctionnalité permet aux LFIs d'être exploités sans aucune autre façon de créer des fichiers, si Nginx s'exécute en tant que même utilisateur que PHP (très souvent fait en tant que www-data).
Il est visible que **le fichier temporaire est supprimé immédiatement** après avoir été ouvert par Nginx. Heureusement, **procfs peut être utilisé pour obtenir une référence** au fichier supprimé via une course :
Note: On ne peut pas inclure directement `/proc/34/fd/15` dans cet exemple car la fonction `include` de PHP résoudrait le chemin en `/var/lib/nginx/body/0000001368 (supprimé)` qui n'existe pas dans le système de fichiers. Cette petite restriction peut heureusement être contournée par une certaine indirection comme: `/proc/self/fd/34/../../../34/fd/15` qui exécutera finalement le contenu du fichier `/var/lib/nginx/body/0000001368` supprimé.
This technique allows an attacker to achieve Remote Code Execution (RCE) by exploiting a Local File Inclusion (LFI) vulnerability in a web application that uses Nginx as a web server.
When Nginx serves a request for a file, it creates a temporary file with the same name as the requested file in the `/var/tmp/nginx` directory. This file is used to store the response body of the request. If the requested file is not found, Nginx will return an error page that includes the path of the temporary file.
An attacker can use this behavior to achieve RCE by exploiting a LFI vulnerability in the web application. By requesting a file that does not exist, the attacker can force Nginx to create a temporary file with a predictable name. The attacker can then include this file using the LFI vulnerability and inject PHP code into it. When the temporary file is served by Nginx, the injected PHP code will be executed with the privileges of the web server.
## Exploitation
To exploit this vulnerability, the attacker needs to find a LFI vulnerability in the web application. Once a LFI vulnerability is found, the attacker can use the following steps to achieve RCE:
1. Request a non-existent file to force Nginx to create a temporary file with a predictable name.
2. Include the temporary file using the LFI vulnerability and inject PHP code into it.
3. Wait for the temporary file to be served by Nginx and execute the injected PHP code.
The following example shows how to exploit this vulnerability using a LFI vulnerability in a PHP script:
In this example, the attacker is requesting the temporary file `0000000001` that was created by Nginx. The attacker can then include this file using the LFI vulnerability and inject PHP code into it.
## Mitigation
To mitigate this vulnerability, it is recommended to:
- Use a Content Security Policy (CSP) to restrict the sources of content that can be loaded by the web application.
- Use a Web Application Firewall (WAF) to detect and block requests that exploit LFI vulnerabilities.
- Configure Nginx to use a different directory for temporary files, and restrict access to this directory to prevent unauthorized access.
Ceci est tiré de [https://lewin.co.il/winning-the-impossible-race-an-unintended-solution-for-includers-revenge-counter-hxp-2021/](https://lewin.co.il/winning-the-impossible-race-an-unintended-solution-for-includers-revenge-counter-hxp-2021/)
# Use all CPUs to send the payload as request body for Nginx
for _ in range(multiprocessing.cpu_count()):
p = multiprocessing.Process(target=send_payload_worker, args=(requests_session,))
p.start()
def generate_random_path_prefix(nginx_pids):
# This method creates a path from random amount of ProcFS path components. A generated path will look like /proc/<nginxpid1>/cwd/proc/<nginxpid2>/root/proc/<nginxpid3>/root
* Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).