Ana sayfayı engelleyerek postmessage çalmak
Reading time: 2 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.
Iframe'lerle RC'leri Kazanmak
Bu Terjanq yazısı'na göre, null kökenlerden oluşturulan blob belgeleri güvenlik faydaları için izole edilmiştir, bu da demektir ki eğer ana sayfayı meşgul tutarsanız, iframe sayfası çalıştırılacaktır.
Temelde bu zorlukta bir izole iframe çalıştırılmaktadır ve yüklenir yüklenmez ebeveyn sayfa bayrakla bir post mesajı gönderecektir.
Ancak, bu postmessage iletişimi XSS'ye karşı savunmasızdır (iframe JS kodu çalıştırabilir).
Bu nedenle, saldırganın amacı ebeveynin iframe'i oluşturmasına izin vermek, ancak önce ebeveyn sayfanın hassas verileri (bayrak) göndermesini meşgul tutmak ve payload'ı iframe'e göndermektir. Ebeveyn meşgulken, iframe payload'ı çalıştırır ve bu, ebeveyn postmessage mesajını dinleyen ve bayrağı sızdıran bir JS olacaktır.
Sonunda, iframe payload'ı çalıştırır ve ebeveyn sayfa meşgul olmayı bırakır, böylece bayrağı gönderir ve payload onu sızdırır.
Ama ebeveyni iframe'i oluşturduktan hemen sonra ve sadece iframe'in hassas verileri göndermeye hazır olmasını beklerken nasıl meşgul tutabilirsiniz? Temelde, ebeveynin çalıştırabileceği bir async hareket bulmanız gerekiyor. Örneğin, bu zorlukta ebeveyn postmessages dinliyordu:
window.addEventListener("message", (e) => {
if (e.data == "blob loaded") {
$("#previewModal").modal()
}
})
bu nedenle, o karşılaştırmada string'e dönüştürülecek bir postmessage'da büyük bir tam sayı göndermek mümkün oldu, bu da biraz zaman alacaktır:
const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]);
Ve kesin olmak için, o postmessage'ı iframe oluşturulduktan hemen sonra ama ana sayfadan veri almaya hazır olmadan göndermek için, bir setTimeout
'ın milisaniyeleriyle oynamanız gerekecek.
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.