Iframes in XSS, CSP and SOP
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Bir iframed sayfanın içeriğini belirtmenin 3 yolu vardır:
Bir URL belirten src
aracılığıyla (URL, çapraz köken veya aynı köken olabilir)
data:
protokolünü kullanarak içeriği belirten src
aracılığıyla
İçeriği belirten srcdoc
aracılığıyla
Ebeveyn ve Çocuk değişkenlerine erişim
Eğer önceki html'ye bir http sunucusu (örneğin python3 -m http.server
) aracılığıyla erişirseniz, tüm scriptlerin çalıştırılacağını göreceksiniz (çünkü bunu engelleyen bir CSP yok). Ana sayfa, herhangi bir iframe içindeki secret
değişkenine erişemeyecek ve sadece if2 ve if3 iframe'leri (aynı site olarak kabul edilen) orijinal penceredeki secret'a erişebilir.
if4'ün null
kökenine sahip olduğu dikkate alın.
Lütfen, aşağıdaki bypass'lerde iframe'li sayfaya yanıtın JS çalıştırılmasını engelleyen herhangi bir CSP başlığı içermediğine dikkat edin.
script-src
'nin self
değeri, data:
protokolü veya srcdoc
niteliğini kullanarak JS kodunun çalıştırılmasına izin vermeyecektir.
Ancak, CSP'nin none
değeri bile, src
niteliğinde bir URL (tam veya sadece yol) koyan iframe'lerin çalıştırılmasına izin verecektir.
Bu nedenle, bir sayfanın CSP'sini aşmak mümkündür:
Not edin ki önceki CSP yalnızca inline script'in çalışmasına izin veriyor.
Ancak, yalnızca if1
ve if2
script'leri çalıştırılacak, fakat yalnızca if1
ana gizli veriye erişebilecek.
Bu nedenle, eğer bir JS dosyasını sunucuya yükleyip iframe aracılığıyla yükleyebiliyorsanız, CSP'yi atlatmak mümkündür, hatta script-src 'none'
ile bile. Bu, potansiyel olarak aynı site JSONP uç noktasını kötüye kullanarak da yapılabilir.
Bunu, script-src 'none'
ile bile bir çerezin çalındığı aşağıdaki senaryo ile test edebilirsiniz. Uygulamayı çalıştırın ve tarayıcınızla erişin:
Iframe içindeki içerik, sandbox
niteliği kullanılarak ek kısıtlamalara tabi tutulabilir. Varsayılan olarak, bu nitelik uygulanmaz, yani hiçbir kısıtlama yoktur.
Kullanıldığında, sandbox
niteliği birkaç sınırlama getirir:
İçerik, benzersiz bir kaynaktan geliyormuş gibi muamele görür.
Formları göndermeye yönelik herhangi bir girişim engellenir.
Scriptlerin çalıştırılması yasaktır.
Belirli API'lere erişim devre dışı bırakılır.
Bağlantıların diğer tarayıcı bağlamlarıyla etkileşimde bulunması engellenir.
<embed>
, <object>
, <applet>
veya benzeri etiketler aracılığıyla eklentilerin kullanımı yasaktır.
İçeriğin kendisi tarafından üst düzey tarayıcı bağlamına navigasyon engellenir.
Video oynatma veya form kontrollerinin otomatik odaklanması gibi otomatik olarak tetiklenen özellikler engellenir.
Nitelik değeri, yukarıda belirtilen tüm kısıtlamaları uygulamak için boş bırakılabilir (sandbox=""
). Alternatif olarak, iframe'i belirli kısıtlamalardan muaf tutan, boşlukla ayrılmış belirli değerlerin bir listesi olarak ayarlanabilir.
Aşağıdaki sayfaları kontrol edin:
Bypassing SOP with Iframes - 1Bypassing SOP with Iframes - 2Blocking main page to steal postmessageSteal postmessage modifying iframe locationAWS 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)