XSS funziona quando salvo HTML generato su file, ma non direttamente nel browser

1

I suggerimenti di il livello2 del gioco XSS dicono che

Entering a tag on this level will not work. Try an element with a JavaScript attribute instead.

Quando si inserisce

<script>alert(1)</script>

l'HTML risultante dopo l'invio è

<td valign="top" class="message-container"> 
  <div class="shim"></div>
   <b>You</b><span class="date">Wed May 18 2016 </span>
   <blockquote><script>alert(91)</script></blockquote>
</td>

e l'XSS non è attivato. Se lo sostituisco con

post-content=<img src='foobar' onerror='alert("xss")'>

spara!

Ho copiato l'intero HTML in un file separato sul mio computer, ho eseguito il primo caso e lo script è stato attivato!

Quindi cosa c'è di diverso dal caso 1 al caso 2? Dovrebbe funzionare anche il caso 1?

    
posta microwth 18.05.2016 - 20:37
fonte

1 risposta

5

Il codice rilevante per la generazione di codice HTML è il seguente:

for (var i=0; i<posts.length; i++) {
  var html = '<table class="message"> <tr> <td valign=top> '
    + '<img src="/static/level2_icon.png"> </td> <td valign=top '
    + ' class="message-container"> <div class="shim"></div>';

  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;

Come possiamo vedere, l'HTML viene impostato nel DOM tramite innerHTML , il che significa che il tag script non verrà eseguito, perché per-specifica, innerHTML non esegue script. Ulteriori informazioni sul perché è possibile trovare nella domanda Stack Overflow script tag creare con innerHTML di un div non funziona .

I've copied the whole html to a separate file on my computer, run the first case and the script fired!

Presumibilmente hai copiato l'HTML risultante, il che significa che non è stato creato da innerHTML , ma permanentemente nel codice sorgente HTML, quindi è stato eseguito.

    
risposta data 18.05.2016 - 20:59
fonte

Leggi altre domande sui tag