Acceso al código fuente html en bruto después del procesamiento del lado del cliente angular

1

Necesito ayuda para verificar si los parámetros son sensibles a las inyecciones de XSS en una página web generada por angularjs .

Hoy en día, muchos sitios web utilizan angularjs para deportar la construcción de la página del cliente en el lado del cliente (por lo que este trabajo ya no tiene que realizarse en el lado del servidor).

Entonces, cuando realizo una solicitud HTTP, el servidor responde con un código fuente que es una plantilla de angular para construir la página. Por lo tanto, esta respuesta del servidor no corresponde a la página web final que puedo ver después del procesamiento angular.

al usar CTRL + U (mostrar código fuente), este es el mismo problema, solo veré la respuesta del servidor (antes del procesamiento angular).

Al usar Firebug o la consola de desarrollo web, solo puedo ver un tipo de "render" del código fuente en bruto.
Por ejemplo, si un intento de inyectar <script> en un parámetro, después del procesamiento angularjs, tal vez <script> se desinfectará en &lt;script&gt; .
Pero, en la consola de desarrolladores web (o en firebug). Veré <script> , incluso si < y > están desinfectados (porque &lt; y &gt; se interpretan y se me imprimen humanamente).

Por lo tanto, esto es muy difícil de verificar si mi patrón de inyección se escapa o no (está bien, no veo una ventana emergente, así que supongo que se escapa algo). Estoy buscando una manera de obtener fácilmente el código fuente en bruto de la página después de que angularjs construyó la página final.

He escuchado sobre phantomjs pero no estoy seguro de si esto cubre exactamente mis necesidades y quizás haya una forma más fácil o rápida

EDITAR:
Sé que angular tiene sus propias reglas de escape. Pero he logrado inyectar código javascript dentro de un parámetro y ejecutarlo en otro lugar (donde se muestra en otra página web). Así que sé que algunas partes del sitio web no están protegidas.

En una página web específica, se muestra el parámetro pero no se ejecuta el javascript, así que supongo que se escapan algunos caracteres especiales. Y quiero saber cuáles.

Firefox y Chrome inspector me dan la misma vista:

<span ...>aaaaaa<script>alert(1);</script>aaaaaa</span>

Finalmente, he encontrado que si hago un clic derecho y "copia html" (chrome) o "edito" firefox. Puedo ver el código fuente en bruto que me muestra lo que realmente se escapó:

<span ...>aaaaaa&lt;script&gt;alert(1);&lt;/script&gt;aaaaaa</span>

Para la pequeña historia, encontré esto al querer copiar el extracto del código en un comentario en security.stackexchange.com ^^

    
pregunta Sibwara 05.07.2016 - 16:18
fuente

2 respuestas

1

Puedes usar el Inspector de Chrome para ver el árbol DOM como HTML. Allí se ve el resultado renderizado del procesamiento de AngularJS.

Pero siempre que use AngularJS correctamente, se encarga de todos los escapes y no permite ninguna vulnerabilidad de XSS (de lo contrario, son vulnerabilidades en AngularJS). Debe usar $sce y ng-bind-html para hacer que AngularJS inserte HTML aleatorio sin inscribir en el documento.

    
respondido por el Lorenz 05.07.2016 - 16:58
fuente
0

Como dijiste, los caracteres como < y > interpretaron una impresión humanitaria, puedes saber esto si haces doble clic en innerHTML de cualquier elemento en las herramientas de desarrollo del navegador, a veces están entre comillas dobles , lo que significa que se interpreta como texto.

Si intenta inyectar un alert(1); y no se ejecuta, puede significar que la cadena está correctamente analizada, o el navegador bloqueó el XSS (los navegadores modernos no ejecutarán el código JS que también se encuentra en la URL) .

Otra cosa que puede hacer si no puede ver la página web donde se imprimen los datos, es solicitar una imagen (solo para dar un ejemplo) desde un servidor web al que tenga acceso, donde la URL de la imagen sería el servidor. Por un lado y en algún punto de la generación de la imagen, almacena en algún lugar una confirmación de que el código se ejecutó, puede parecer poco claro, por lo que le doy un ejemplo:

https://example.com/hackyImage.jpg?someParam=hacked

Que pondrías en el src de una imagen inyectada en alguna entrada

<img src="https://yourserver.com/hackyImage.jpg?someParam=hacked"><inputname="user" value="[INSERT PICTURE CODE HERE]">
    
respondido por el Baruch Spinoza 04.08.2016 - 19:11
fuente

Lea otras preguntas en las etiquetas