diff --git a/pentesting-web/xss-cross-site-scripting/README.md b/pentesting-web/xss-cross-site-scripting/README.md index 5ff09daeb..8112b610e 100644 --- a/pentesting-web/xss-cross-site-scripting/README.md +++ b/pentesting-web/xss-cross-site-scripting/README.md @@ -23,17 +23,17 @@ Se sei interessato a una **carriera nel campo dell'hacking** e vuoi hackerare ci 2. Puoi creare nuovi eventi/attributi per eseguire codice JS? 3. L'attributo in cui sei intrappolato supporta l'esecuzione di JS? 4. Puoi eludere le protezioni? -3. All'interno del **codice JavaScript**: -1. Puoi eludere il tag ``** di una pagina HTML, all'interno di un file `.js` o all'interno di un attributo utilizzando il protocollo **`javascript:`**: * Se viene riflessato tra i tag **``**, anche se il tuo input è all'interno di qualsiasi tipo di virgolette, puoi provare a iniettare `` ed uscire da questo contesto. Questo funziona perché il **browser analizzerà prima i tag HTML** e poi il contenuto, quindi non si accorgerà che il tuo tag `` iniettato è all'interno del codice HTML. -* Se viene riflessato **all'interno di una stringa JS** e il trucco precedente non funziona, dovrai **uscire** dalla stringa, **eseguire** il tuo codice e **ricostruire** il codice JS (se c'è un errore, non verrà eseguito): +* Se viene riflessato **all'interno di una stringa JS** e il trucco precedente non funziona, dovrai **uscire** dalla stringa, **eseguire** il tuo codice e **ricostruire** il codice JS (se ci sono errori, non verranno eseguiti): * `'-alert(1)-'` * `';-alert(1)//` * `\';alert(1)//` * Se viene riflessato all'interno di template letterali, puoi **inserire espressioni JS** utilizzando la sintassi `${ ... }`: `` var greetings = `Ciao, ${alert(1)}` `` -* L'**encoding Unicode** funziona per scrivere **codice JavaScript valido**: +* **La codifica Unicode** funziona per scrivere **codice JavaScript valido**: ```javascript \u{61}lert(1) \u0061lert(1) @@ -122,7 +122,7 @@ Puoi anche provare a **attivare le funzioni Javascript** direttamente: `obj.sale Tuttavia, di solito gli endpoint che eseguono la funzione indicata sono endpoint senza un DOM molto interessante, **altre pagine nella stessa origine** avranno un **DOM più interessante** per eseguire più azioni. -Pertanto, per **sfruttare questa vulnerabilità in un diverso DOM** è stata sviluppata l'exploit **Same Origin Method Execution (SOME)**: +Pertanto, per **sfruttare questa vulnerabilità in un DOM diverso** è stata sviluppata l'exploit **Same Origin Method Execution (SOME)**: {% content-ref url="some-same-origin-method-execution.md" %} [some-same-origin-method-execution.md](some-same-origin-method-execution.md) @@ -130,7 +130,7 @@ Pertanto, per **sfruttare questa vulnerabilità in un diverso DOM** è stata svi ### DOM -C'è del **codice JS** che sta utilizzando in modo **non sicuro** alcuni **dati controllati da un attaccante** come `location.href`. Un attaccante potrebbe sfruttare questo per eseguire codice JS arbitrario. +C'è del **codice JS** che sta utilizzando in modo **non sicuro** alcuni **dati controllati da un attaccante** come `location.href`. Un attaccante potrebbe sfruttare questo per eseguire del codice JS arbitrario. {% content-ref url="dom-xss.md" %} [dom-xss.md](dom-xss.md) @@ -156,8 +156,8 @@ Alcuni **esempi**: ## Iniezione all'interno di HTML grezzo Quando il tuo input viene riflesso **all'interno della pagina HTML** o puoi eseguire l'escape e iniettare codice HTML in questo contesto, la **prima** cosa da fare è controllare se puoi abusare di `<` per creare nuovi tag: Prova semplicemente a **riflettere** quel **carattere** e controlla se viene **codificato in HTML** o **eliminato** oppure se viene **riflesso senza modifiche**. **Solo in quest'ultimo caso sarai in grado di sfruttare questo caso**.\ -Per questi casi tieni presente anche [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\ -_**Nota: Un commento HTML può essere chiuso usando**** ****`-->`**** ****o**** ****`--!>`**_ +Per questi casi, tieni presente anche [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\ +_**Nota: Un commento HTML può essere chiuso utilizzando**** ****`-->`**** ****o**** ****`--!>`**_ In questo caso e se non viene utilizzata alcuna lista nera/lista bianca, potresti utilizzare payload come: ```html @@ -165,22 +165,22 @@ In questo caso e se non viene utilizzata alcuna lista nera/lista bianca, potrest ``` -Ma, se viene utilizzato il filtraggio dei tag/attributi black/whitelist, sarà necessario **forzare quali tag** è possibile creare.\ -Una volta che hai **individuato quali tag sono consentiti**, dovrai **forzare gli attributi/eventi** all'interno dei tag validi trovati per capire come puoi attaccare il contesto. +Ma, se viene utilizzato il blacklisting/whitelisting dei tag/attributi, sarà necessario **forzare a tentativi quali tag** è possibile creare.\ +Una volta che hai **individuato quali tag sono consentiti**, dovrai **forzare a tentativi attributi/eventi** all'interno dei tag validi trovati per vedere come puoi attaccare il contesto. -### Forzatura dei tag/eventi +### Forzare a tentativi tag/eventi -Vai su [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) e clicca su _**Copia i tag negli appunti**_. Quindi, inviali tutti utilizzando Burp intruder e controlla se qualche tag non è stato rilevato come dannoso dal WAF. Una volta scoperti quali tag puoi utilizzare, puoi **forzare tutti gli eventi** utilizzando i tag validi (nella stessa pagina web clicca su _**Copia gli eventi negli appunti**_ e segui la stessa procedura come prima). +Vai su [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) e clicca su _**Copia tag negli appunti**_. Quindi, invia tutti loro utilizzando Burp intruder e controlla se qualche tag non è stato rilevato come dannoso dal WAF. Una volta scoperti quali tag puoi utilizzare, puoi **forzare a tentativi tutti gli eventi** utilizzando i tag validi (nella stessa pagina web clicca su _**Copia eventi negli appunti**_ e segui la stessa procedura come prima). ### Tag personalizzati -Se non hai trovato nessun tag HTML valido, potresti provare a **creare un tag personalizzato** ed eseguire codice JS con l'attributo `onfocus`. Nella richiesta XSS, è necessario terminare l'URL con `#` per fare sì che la pagina **si concentri su quell'oggetto** ed **esegua** il codice: +Se non hai trovato alcun tag HTML valido, potresti provare a **creare un tag personalizzato** ed eseguire codice JS con l'attributo `onfocus`. Nella richiesta XSS, devi terminare l'URL con `#` per fare sì che la pagina **si concentri su quell'oggetto** ed **esegua** il codice: ``` /?search=#x ``` ### Bypass delle liste nere -Se viene utilizzata qualche tipo di lista nera, potresti provare a evitarla con alcuni trucchi sciocchi: +Se viene utilizzata una sorta di lista nera, potresti provare a evitarla con alcuni trucchi sciocchi: ```javascript //Random capitalization ``` -Nota che in questo esempio **non abbiamo nemmeno chiuso l'apice singolo**. Questo perché il **parsing HTML viene eseguito prima dal browser**, il quale identifica gli elementi della pagina, inclusi i blocchi di script. Il parsing di JavaScript per comprendere ed eseguire gli script incorporati viene eseguito solo successivamente. +Nota che in questo esempio **non abbiamo nemmeno chiuso l'apice singolo**. Questo perché il **parsing HTML viene eseguito prima dal browser**, il quale si occupa di identificare gli elementi della pagina, inclusi i blocchi di script. Il parsing di JavaScript per comprendere ed eseguire gli script incorporati viene eseguito solo successivamente. ### All'interno del codice JS @@ -487,12 +483,12 @@ Se `<>` vengono sanificati, puoi comunque **eseguire l'escape della stringa** do ';alert(document.domain)// \';alert(document.domain)// ``` -### Stringhe di modello \`\` +### Template literals \`\` -Per costruire **stringhe** oltre alle virgolette singole e doppie, JS accetta anche **backticks** **` `` `**. Questo è noto come stringhe di modello poiché consentono di **inserire espressioni JS** utilizzando la sintassi `${ ... }`.\ -Pertanto, se scopri che il tuo input viene **riflesso** all'interno di una stringa JS che utilizza backticks, puoi abusare della sintassi `${ ... }` per eseguire **codice JS arbitrario**: +Per costruire **stringhe** oltre alle virgolette singole e doppie, JS accetta anche i **backticks** **` `` `**. Questo è noto come template literals poiché consentono di **inserire espressioni JS** utilizzando la sintassi `${ ... }`.\ +Pertanto, se scopri che il tuo input viene **riflesso** all'interno di una stringa JS che utilizza i backticks, puoi abusare della sintassi `${ ... }` per eseguire **codice JS arbitrario**: -Ciò può essere **abusato** utilizzando: +Questo può essere **abusato** utilizzando: ```javascript `${alert(1)}` `${`${`${`${alert(1)}`}`}`}` @@ -554,7 +550,7 @@ eval(8680439..toString(30))(983801..toString(36)) /**/ ``` -**Commenti JavaScript (dalla** [**trucco sui Commenti JavaScript**](./#javascript-comments)**)** +**Commenti JavaScript (dalla** [**trucco sui Commenti JavaScript**](./#javascript-comments) **)** ```javascript //This is a 1 line comment /* This is a multiline comment*/ @@ -562,7 +558,7 @@ eval(8680439..toString(30))(983801..toString(36)) #!This is a 1 line comment, but "#!" must to be at the beggining of the first line -->This is a 1 line comment, but "-->" must to be at the beggining of the first line ``` -**Nuove righe JavaScript (dalla** [**trucco delle nuove righe JavaScript**](./#javascript-new-lines)**)** +**Nuove righe JavaScript (dal** [**trucco delle nuove righe JavaScript**](./#javascript-new-lines) **)** ```javascript //Javascript interpret as new line these chars: String.fromCharCode(10); alert('//\nalert(1)') //0x0a @@ -732,25 +728,47 @@ top['al\x65rt'](1) top[8680439..toString(30)](1) ```` -## **Vulnerabilità del DOM** +## Vulnerabilità del DOM -C'è del **codice JS** che utilizza **dati non sicuri controllati da un attaccante** come `location.href`. Un attaccante potrebbe sfruttare ciò per eseguire del codice JS arbitrario.\ +C'è del **codice JS** che sta utilizzando **dati non sicuri controllati da un attaccante** come `location.href`. Un attaccante potrebbe sfruttare questo per eseguire del codice JS arbitrario.\ **A causa dell'estensione della spiegazione delle** [**vulnerabilità del DOM è stata spostata su questa pagina**](dom-xss.md)**:** {% content-ref url="dom-xss.md" %} [dom-xss.md](dom-xss.md) {% endcontent-ref %} -Lì troverai una **spiegazione dettagliata su cosa sono le vulnerabilità del DOM, come vengono provocate e come sfruttarle**.\ +Lì troverai una **spiegazione dettagliata di cosa sono le vulnerabilità del DOM, come vengono provocate e come sfruttarle**.\ Inoltre, non dimenticare che **alla fine del post menzionato** puoi trovare una spiegazione su [**attacchi di DOM Clobbering**](dom-xss.md#dom-clobbering). +### Aggiornamento di Self-XSS + +### XSS dei Cookie + +Se puoi innescare un XSS inviando il payload all'interno di un cookie, questo è di solito un self-XSS. Tuttavia, se trovi un **sottodominio vulnerabile all'XSS**, potresti sfruttare questo XSS per iniettare un cookie nell'intero dominio riuscendo a innescare l'XSS del cookie nel dominio principale o in altri sottodomini (quelli vulnerabili all'XSS dei cookie). Per questo puoi utilizzare l'attacco del cookie tossing: + +{% content-ref url="../hacking-with-cookies/cookie-tossing.md" %} +[cookie-tossing.md](../hacking-with-cookies/cookie-tossing.md) +{% endcontent-ref %} + +Puoi trovare un ottimo abuso di questa tecnica in [**questo post del blog**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html). + +### Inviare la tua sessione all'amministratore + +Forse un utente può condividere il suo profilo con l'amministratore e se il self XSS è presente nel profilo dell'utente e l'amministratore vi accede, attiverà la vulnerabilità. + +### Riflessione della Sessione + +Se trovi qualche self XSS e la pagina web ha una **riflessione della sessione per gli amministratori**, ad esempio permettendo ai clienti di chiedere aiuto e affinché l'amministratore ti aiuti, vedrà ciò che stai vedendo nella tua sessione ma dalla sua sessione. + +Potresti far **attivare il tuo self XSS all'amministratore** e rubare i suoi cookie/sessione. + ## Altri Bypass ### Unicode Normalizzato -Potresti verificare se i **valori riflessi** vengono **normalizzati in Unicode** sul server (o sul lato client) e sfruttare questa funzionalità per eludere le protezioni. [**Trova un esempio qui**](../unicode-injection/#xss-cross-site-scripting). +Potresti verificare se i **valori riflessi** vengono **normalizzati in unicode** sul server (o sul lato client) e sfruttare questa funzionalità per aggirare le protezioni. [**Trova un esempio qui**](../unicode-injection/#xss-cross-site-scripting). -### Bypass del flag PHP FILTER\_VALIDATE\_EMAIL +### Bypass della flag PHP FILTER\_VALIDATE\_EMAIL ```javascript ">"@x.y ``` @@ -799,7 +817,7 @@ document['default'+'View'][`\u0061lert`](3) ``` ### XSS con iniezione di header in una risposta 302 -Se trovi che puoi **iniettare header in una risposta di reindirizzamento 302**, potresti provare a **far eseguire al browser JavaScript arbitrario**. Questo non è **triviale** poiché i browser moderni non interpretano il corpo della risposta HTTP se il codice di stato della risposta HTTP è 302, quindi solo un payload di scripting tra siti è inutile. +Se trovi che puoi **iniettare header in una risposta di reindirizzamento 302** potresti provare a **far eseguire al browser JavaScript arbitrario**. Questo non è **triviale** poiché i browser moderni non interpretano il corpo della risposta HTTP se il codice di stato della risposta HTTP è 302, quindi solo un payload di cross-site scripting è inutile. In [**questo rapporto**](https://www.gremwell.com/firefox-xss-302) e [**questo**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) puoi leggere come puoi testare diversi protocolli all'interno dell'header Location e vedere se uno di essi consente al browser di ispezionare ed eseguire il payload XSS all'interno del corpo.\ Protocolli noti: `mailto://`, `//x:1/`, `ws://`, `wss://`, _header Location vuoto_, `resource://`. @@ -845,7 +863,7 @@ const char* const kSupportedJavascriptTypes[] = { La risposta è: * **modulo** (predefinito, niente da spiegare) -* [**webbundle**](https://web.dev/web-bundles/): Web Bundles è una funzionalità che ti permette di raggruppare una serie di dati (HTML, CSS, JS...) in un unico file **`.wbn`**. +* [**webbundle**](https://web.dev/web-bundles/): Web Bundles è una funzionalità che ti permette di raggruppare una serie di dati (HTML, CSS, JS...) in un file **`.wbn`**. ```html

Your sesion has timed out, please login again:

This login box is presented using XSS as a proof-of-concept

") ``` -### Cattura automatica delle password di auto-compilazione +### Cattura automatica delle password ```javascript Username:
@@ -1286,7 +1304,7 @@ Puoi anche utilizzare: [https://xsshunter.com/](https://xsshunter.com)
``` -### Regex - Accesso al Contenuto Nascosto +### Regex - Accesso a Contenuti Nascosti Da [**questo articolo**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) è possibile apprendere che anche se alcuni valori scompaiono da JS, è comunque possibile trovarli negli attributi JS in diversi oggetti. Ad esempio, un input di un REGEX è ancora possibile trovarlo dopo che il valore dell'input del regex è stato rimosso: ```javascript @@ -1329,7 +1347,7 @@ Maggiori informazioni su questa tecnica qui: [**XSLT**](../xslt-server-side-inje ### XSS in PDF creati dinamicamente Se una pagina web crea un PDF utilizzando input controllati dall'utente, puoi provare a **ingannare il bot** che sta creando il PDF per **eseguire codice JS arbitrario**.\ -Quindi, se il **bot creatore di PDF trova** dei **tag HTML**, li **interpreterà**, e puoi **abusare** di questo comportamento per causare un **Server XSS**. +Quindi, se il **bot creatore del PDF trova** dei **tag HTML**, li **interpreterà**, e puoi **abusare** di questo comportamento per causare un **Server XSS**. {% content-ref url="server-side-xss-dynamic-pdf.md" %} [server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md) @@ -1431,11 +1449,11 @@ Se sei interessato a una **carriera nel campo dell'hacking** e vuoi hackerare l'
-Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)! +Impara l'hacking su AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)! Altri modi per supportare HackTricks: -* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! +* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com) * Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family) * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**