In quali condizioni non viene eseguito un tag di script [duplicato]

0

Sto cercando di capire come funziona XSS, e ho urtato i giochi XSS di Google ( link ).

Il livello 1 è facilmente risolvibile con l'XSS più comune ( <script>alert(0)</script> ). Tuttavia, se lo provi al livello 2 non funziona. È risolvibile caricare un img con il codice di avviso all'interno di un attributo onerror: . Tuttavia, sto cercando di capire come filtra i tag dello script e, dopo averli inseriti, li vedo nei server con la risposta ESATTAMENTE al modo in cui li ho immessi (ma senza messaggi di avviso). A quanto ho capito, se il browser vede un <script>alert(0)</script> , lo esegue sempre. Tutte le soluzioni per XSS che conosco implicano il filtraggio del contenuto prima di visualizzarlo.

Quindi le mie domande sono: in che modo Google impedisce il funzionamento dell'XSS e in quali condizioni un browser potrebbe visualizzare il codice HTML con <script>alert(0)</script> e non eseguirlo?

Modifica: la prima domanda era un duplicato e la risposta è inserendo il contenuto in un innerHTML. Tuttavia, rimane la seconda domanda, c'è un altro modo per implementarlo?

    
posta user134167 21.06.2016 - 16:43
fonte

2 risposte

5

Puoi trovare la risposta se raggiungi il picco al codice sorgente .

Il tag <script> non funziona perché l'HTML non è generato da uno script Python semplicemente facendo eco all'input dell'utente, come nel Livello 1. Invece, l'input dell'utente è contenuto in un file JSON e viene visualizzato sulla pagina con l'aiuto di alcuni JavaScript:

html += '<b>You</b>';
html += '<span class="date">' + new Date(posts[i].date) + '</span>';
html += "<blockquote>" + posts[i].message + "</blockquote";
html += "</td></tr></table>"
containerEl.innerHTML += html;

La parte chiave qui è l'attributo innerHTML . Non ammette tag <script> - vengono ignorati dal browser - ma consente attributi di eventi come onerror . Prendi nota che non è prevista alcuna escaping esplicito nel codice: sono solo i meccanismi di sicurezza integrati nel browser al lavoro qui.

In altre parole, questo è un esempio di XSS basato su DOM. La documentazione di Mozilla fornisce una buona spiegazione in "Considerazioni sulla sicurezza".

    
risposta data 21.06.2016 - 17:22
fonte
0

Riguardo alla seconda domanda, l'idea principale è capire cosa fa parte del codice e cosa fa parte dei dati dell'applicazione, quindi dovresti pensare a come i dati dell'applicazione sono convalidati o codificati, ad esempio, se hai una ricerca funzione, potresti avere qualcosa di simile a questo:

<input id="search" name="search" value="something" />

Se sostituisci something per la stringa successiva: " /><script>alert("XSS");</script><input type="hidden" value="" id="other ; avrai il risultato successivo:

<input id="search" name="search" value="" /><script>alert("XSS");</script><input type="hidden" value="" id="other" />

Il browser interpreterà tutto come codice, perché lo sviluppatore non indica mai che cos'è il codice e quali sono i dati dell'applicazione.

Se lo sviluppatore decide di eliminare le stringhe <script> e </script> quando si introducono dati di input nel campo di ricerca, si può provare con " onmouseover="alert(XSS);" /><input type="hidden" value="" id="other , il risultato sarà il seguente:

<input id="search" name="search" value="" onmouseover="alert(XSS);" /><input type="hidden" value="" id="other" />

Il browser interpreterà tutto come codice, ma quando l'utente posiziona il mouse sul campo di ricerca, l'XSS verrà eseguito a causa dell'evento onmouseover .

Quindi, tutto dipende da come l'applicazione convalida i dati di input o codifica i dati sul browser, devi provare diversi modi per sfruttarli. Vi condividi un sito web interessante su questo.

link

Spero che questa informazione ti aiuti.

    
risposta data 22.06.2016 - 18:35
fonte

Leggi altre domande sui tag