Blocking main page to steal postmessage
Last updated
Last updated
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)
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 hemen yüklenir yüklenmez ebeveyn sayfa flag ile bir post mesajı gönderecektir. Ancak, bu postmessage iletişimi XSS'e 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 (flag) göndermeden önce onu 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 flag'i 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 flag'i 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:
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:
Ve tam olarak doğru olmak için, o postmessage'i iframe oluşturulduktan hemen sonra ama verileri ebeveynden almak için hazır olmadan göndermeniz gerekecek, bu yüzden bir setTimeout
'ın milisaniyeleri ile oynamanız gerekecek.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)