Blocking main page to steal postmessage

Tip

AWS Hacking सीखें & अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking सीखें & अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking सीखें & अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE) assessment tracks (ARTA/GRTA/AzRTA) और Linux Hacking Expert (LHE) के लिए full HackTricks Training catalog ब्राउज़ करें।

HackTricks का समर्थन करें

Winning RCs with Iframes

इसके अनुसार Terjanq writeup null origins से बनाए गए blob दस्तावेज़ सुरक्षा लाभों के लिए अलग किए जाते हैं, जिसका अर्थ है कि यदि आप मुख्य पृष्ठ को व्यस्त रखते हैं, तो iframe पृष्ठ निष्पादित होगा।

बुनियादी रूप से, उस चुनौती में एक अलग iframe निष्पादित होता है और ठीक बाद में जब यह लोड होता है, तो माता-पिता पृष्ठ एक पोस्ट संदेश के साथ झंडा भेजने वाला है।
हालांकि, वह postmessage संचार XSS के लिए संवेदनशील है (iframe JS कोड निष्पादित कर सकता है)।

इसलिए, हमलावर का लक्ष्य है कि माता-पिता iframe बनाए, लेकिन पहले माता-पिता पृष्ठ संवेदनशील डेटा (झंडा) को भेजने से पहले इसे व्यस्त रखे और पेलोड को iframe में भेजे। जबकि माता-पिता व्यस्त हैं, iframe पेलोड को निष्पादित करता है जो कुछ JS होगा जो माता-पिता postmessage संदेश को सुनता है और झंडा लीक करता है
अंत में, iframe ने पेलोड को निष्पादित किया और माता-पिता पृष्ठ व्यस्त रहना बंद कर देता है, इसलिए यह झंडा भेजता है और पेलोड इसे लीक करता है।

लेकिन आप माता-पिता को व्यस्त कैसे रख सकते हैं जब उसने iframe उत्पन्न किया और बस जब वह संवेदनशील डेटा भेजने के लिए iframe के तैयार होने की प्रतीक्षा कर रहा है? बुनियादी रूप से, आपको async क्रिया खोजने की आवश्यकता है जिसे आप माता-पिता को निष्पादित करवा सकते हैं। उदाहरण के लिए, उस चुनौती में माता-पिता postmessages के लिए सुन रहा था:

window.addEventListener("message", (e) => {
if (e.data == "blob loaded") {
$("#previewModal").modal()
}
})

इसलिए एक बड़ा पूर्णांक एक पोस्टमैसेज में भेजना संभव था जिसे उस तुलना में स्ट्रिंग में परिवर्तित किया जाएगा, जिसमें कुछ समय लगेगा:

const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]);

और सटीकता के लिए और उस postmessage को iframe के बनने के बाद लेकिन इसके तैयार होने से पहले डेटा प्राप्त करने के लिए भेजने के लिए, आपको setTimeout के मिलीसेकंड के साथ खेलना होगा।

Tip

AWS Hacking सीखें & अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking सीखें & अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking सीखें & अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE) assessment tracks (ARTA/GRTA/AzRTA) और Linux Hacking Expert (LHE) के लिए full HackTricks Training catalog ब्राउज़ करें।

HackTricks का समर्थन करें