# Iframes katika XSS, CSP na SOP
{{#include ../../banners/hacktricks-training.md}}
## Iframes katika XSS
Kuna njia 3 za kuonyesha maudhui ya ukurasa wa iframed:
- Kupitia `src` kuashiria URL (URL inaweza kuwa ya asili tofauti au ya asili sawa)
- Kupitia `src` kuashiria maudhui kwa kutumia itifaki ya `data:`
- Kupitia `srcdoc` kuashiria maudhui
**Kufikia Parent & Child vars**
```html
```
```html
```
Ikiwa utafungua html ya awali kupitia seva ya http (kama `python3 -m http.server`) utaona kwamba skripti zote zitatekelezwa (kama hakuna CSP inayozuia). **mzazi hataweza kufikia `secret` var ndani ya iframe yoyote** na **ni iframes if2 & if3 tu (ambazo zinachukuliwa kuwa za tovuti moja) zinaweza kufikia siri** katika dirisha la asili.\
Tazama jinsi if4 inachukuliwa kuwa na asili `null`.
### Iframes na CSP
> [!TIP]
> Tafadhali, angalia jinsi katika bypasses zifuatazo jibu la ukurasa wa iframed halina kichwa chochote cha CSP kinachozuia utekelezaji wa JS.
Thamani ya `self` ya `script-src` haitaruhusu utekelezaji wa msimbo wa JS ukitumia protokali ya `data:` au sifa ya `srcdoc`.\
Hata hivyo, hata thamani ya `none` ya CSP itaruhusu utekelezaji wa iframes ambazo zinaweka URL (kamili au njia tu) katika sifa ya `src`.\
Kwa hivyo inawezekana kupita CSP ya ukurasa kwa:
```html
```
Note jinsi **CSP ya awali inaruhusu tu utekelezaji wa script ya ndani**.\
Hata hivyo, **ni `if1` na `if2` tu ambazo zitatekelezwa lakini ni `if1` pekee itakayoweza kufikia siri ya mzazi**.
.png>)
Kwa hivyo, inawezekana **kuzidi CSP ikiwa unaweza kupakia faili ya JS kwenye seva na kuipakia kupitia iframe hata na `script-src 'none'`**. Hii inaweza **pia kufanywa kwa kutumia mwisho wa JSONP wa same-site**.
Unaweza kujaribu hii na hali ifuatayo ambapo cookie inanyang'anywa hata na `script-src 'none'`. Endesha tu programu na uifungue na kivinjari chako:
```python
import flask
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
resp = flask.Response('')
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 ""
if __name__ == "__main__":
app.run()
```
### Payloads Nyingine Zilizopatikana Katika Mwitu
```html
```
### Iframe sandbox
Maudhui ndani ya iframe yanaweza kuwekwa chini ya vizuizi vya ziada kupitia matumizi ya sifa ya `sandbox`. Kwa kawaida, sifa hii haitumiki, ikimaanisha hakuna vizuizi vilivyowekwa.
Wakati inapotumika, sifa ya `sandbox` inaweka vizuizi kadhaa:
- Maudhui yanachukuliwa kana kwamba yanatoka kwenye chanzo pekee.
- Jaribio lolote la kuwasilisha fomu linazuiwa.
- Utekelezaji wa scripts unakatazwa.
- Upatikanaji wa APIs fulani unazuiliwa.
- Inazuia viungo kuingiliana na muktadha mwingine wa kuvinjari.
- Matumizi ya plugins kupitia `