Bypassing SOP with Iframes - 1
SOP-1'de Iframe'ler
NDevTK ve Terjanq tarafından oluşturulan bu zorlukta kodlanmış bir XSS'i sömürmeniz gerekmektedir.
Ana sorun, ana sayfa'nın data.body
'yi göndermek için DomPurify kullandığıdır, bu yüzden kendi html verilerinizi o koda göndermek için e.origin !== window.origin
'ı atlamalısınız.
Önerdikleri çözümü görelim.
SOP atlatma 1 (e.origin === null)
//example.org
bir sandboxed iframe içine yerleştirildiğinde, sayfanın kökeni null
olacaktır, yani window.origin === null
olur. Bu yüzden <iframe sandbox="allow-scripts" src="https://so-xss.terjanq.me/iframe.php">
ile iframe yerleştirerek null
kökenini zorlayabiliriz.
Eğer sayfa yerleştirilebilir olsaydı, bu korumayı bu şekilde atlayabilirdiniz (çerezlerin de SameSite=None
olarak ayarlanması gerekebilir).
SOP atlatma 2 (window.origin === null)
Daha az bilinen bir gerçek, sandbox değeri allow-popups
ayarlandığında, açılan popup'ın tüm sandbox özelliklerini miras alacağıdır, ancak allow-popups-to-escape-sandbox
ayarlanmamışsa.
Bu nedenle, null kökenli bir sayfadan popup açmak, popup içindeki window.origin
'in de null
olmasını sağlar.
Sorunun Çözümü
Bu nedenle, bu sorun için, bir iframe oluşturabilir, zayıf XSS kodu işleyicisi (/iframe.php
) olan bir sayfayı popup olarak açabilirsiniz, çünkü hem window.origin === e.origin
hem de ikisi de null
olduğu için XSS'yi istismar edecek bir payload gönderebilirsiniz.
Bu payload, tanımlayıcıyı alacak ve bir XSS'yi üst sayfaya (popup'ı açan sayfa) geri gönderecek, ki bu da zayıf /iframe.php
'ye konum değiştirecektir. Tanımlayıcı bilindiği için, window.origin === e.origin
koşulu sağlanmasa da (hatırlayın, köken, null
olan iframe'den gelen popup'tır) data.identifier === identifier
olacaktır. Ardından, XSS tekrar tetiklenecektir, bu sefer doğru kökende.
Last updated