Bajo qué condiciones no se ejecutaría una etiqueta de script [duplicar]

0

Estoy tratando de entender cómo funciona XSS y me topé con los juegos XSS de Google ( enlace ).

El nivel 1 se puede solucionar fácilmente con el XSS más común ( <script>alert(0)</script> ). Sin embargo, si lo intentas en el nivel 2 no funciona. Es posible cargar un img con el código de alerta dentro de un atributo onerror: . Sin embargo, estoy tratando de entender cómo filtra las etiquetas de script, y después de colocarlas, las veo en la respuesta de los servidores EXACTAMENTE cómo las ingresé (pero sin mensaje de alerta). Como lo entiendo, si el navegador ve un <script>alert(0)</script> , siempre lo ejecuta. Todas las soluciones para XSS que conozco implican el filtrado del contenido antes de mostrarlo.

Mis preguntas son, ¿cómo impide Google que funcione el XSS y en qué condiciones un navegador ve el código HTML con <script>alert(0)</script> y no lo ejecuta?

Editar: la primera pregunta fue un duplicado, y la respuesta es colocar el contenido dentro de un HTML interno. Sin embargo, la segunda pregunta sigue siendo, ¿hay alguna otra manera de implementar esto?

    
pregunta user134167 21.06.2016 - 16:43
fuente

2 respuestas

5

Puede encontrar la respuesta si alcanza el máximo en el código fuente .

La etiqueta <script> no funciona porque el HTML no es generado por una secuencia de comandos de Python simplemente haciendo eco de la entrada del usuario, como en el Nivel 1. En su lugar, la entrada del usuario está contenida en un archivo JSON y se muestra en la página Con la ayuda de algunos 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 clave aquí es el atributo innerHTML . No permite las etiquetas <script> (el navegador las ignora), pero sí permite atributos de eventos como onerror . Tenga en cuenta que no se hace un escape explícito en el código, son solo los mecanismos de seguridad integrados en el navegador en el trabajo aquí.

En otras palabras, este es un ejemplo de XSS basado en DOM. La Documentación de Mozilla ofrece una buena explicación al respecto en "Consideraciones de seguridad".

    
respondido por el Anders 21.06.2016 - 17:22
fuente
0

Sobre su segunda pregunta, la idea principal es entender qué es parte del código y qué es parte de los datos de la aplicación, luego debe pensar cómo se validan o codifican los datos de la aplicación, por ejemplo, si tiene una búsqueda. función, podría tener algo como esto:

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

Si reemplaza something para la siguiente cadena: " /><script>alert("XSS");</script><input type="hidden" value="" id="other ; Tendrás el siguiente resultado:

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

El navegador interpretará todo como código, porque el desarrollador nunca indica qué es el código y qué son los datos de la aplicación.

Si el desarrollador decide eliminar las cadenas <script> y </script> cuando introduce datos de entrada en el campo de búsqueda, puede probar con " onmouseover="alert(XSS);" /><input type="hidden" value="" id="other , el resultado será el siguiente:

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

El navegador interpretará todo como código nuevamente, pero cuando el usuario coloca el mouse en el campo de búsqueda, XSS se ejecutará debido al evento onmouseover .

Entonces, todo depende de cómo la aplicación valide los datos de entrada o codifique los datos en el navegador, debe probar diferentes formas de explotarlos. Les comparto un sitio web interesante sobre eso.

enlace

Espero que esta información te ayude.

    
respondido por el hmrojas.p 22.06.2016 - 18:35
fuente

Lea otras preguntas en las etiquetas