viernes, 3 de agosto de 2018

Ataques Web - Demostración - XSS Reflected

Este tipo de vulnerabilidad compromete la seguridad del usuario y no la del servidor. Consiste en inyectar código HTML o Javascript en una web, con el fin de que el navegador de un usuario ejecute el código inyectado en el momento de ver la página alterada cuando accede a esta. La forma conocida como reflejada comúnmente se produce en sitios que reciben información vía GET (aunque también puede darse el caso vía POST), como por ejemplo:

buscador.php?d=cadena_a_buscar


Si sufriera este tipo de vulnerabilidad se podría inyectar código en el navegador del siguiente modo:

buscar.php?d=<script type="text/javascript">script();</script>


De esta forma el código insertado no se mostraría de forma persistente, pero aun así un usuario malintencionado podría crear una URL que ejecute el código malicioso para posteriormente enviárselo a una persona y que al ejecutarlo ésta pueda sustraer cookies o incluso su contraseña (Pishing).

Para ejemplificar este tipo de vulnerabilidad DVWA presenta una página en la que se solicita un nombre a través de un formulario. Una vez enviado, el script muestra la cadena de texto “Hello nombre_enviado”.

En el nivel de seguridad low el código fuente vulnerable es el que se muestra a continuación:

código fuente vulnerable

Esta porción de código sólo valida que el nombre introducido no sea una cadena vacía.

valida que el nombre introducido no sea una cadena vacía


Así pues, para probar la vulnerabilidad de esta página se inyectará el siguiente código HTML que incluye un script Javascript:

<script>alert("Pagina vulnerable en nivel low")</script>

que mostrará una ventana de alerta con el mensaje “Página vulnerable en nivel low”.

mensaje Página vulnerable en nivel low

A continuación se introduce código HTML mostrar una imagen en lugar de una cadena de texto como sería de esperar:

<img src="http://spf.fotolog.com/photo/31/9/87/de_viginin/1236543937498_f.jpg" alt="Pato" />

introduce código HTML mostrar una imagen en lugar de una cadena de texto

En el nivel de seguridad medium se realiza un pequeño filtrado de la cadena de texto recibida a través del formulario haciendo uso de la función str_replace() para, en caso de ser encontrada, reemplazar la cadena <script> por una cadena vacía.

nivel de seguridad medium


DVWA muestra en este nivel el mismo formulario que en el nivel low:

muestra en este nivel el mismo formulario


Se usará el mismo mensaje de alerta Javascript usado para el nivel low, con la diferencia que en esta ocasión el tag HTML se escribirá en mayúsculas (y de este modo evitar que la función str_replace() encuentre coincidencia y sustituya el tag por una cadena vacía):

<SCRIPT>alert("Pagina vulnerable en nivel medium")</SCRIPT>

Aunque también hubiera bastado con añadir el tipo de script al tag <script> para que no se produjera coincidencia:

<script type="text/javascript">alert("Pagina vulnerable en nivel medium")</script>

pagina vulnerable en nivel medium

Como la única etiqueta HTML filtrada es <script>, se podría insertar cualquier código HTML
 imaginable. Por ejemplo, un hipervínculo a la página www.as.com:

<a href="http://www.as.com/">As.com</a>

hipervínculo a la página www.as.com


Aunque este ejemplo pueda parecer inocuo, ejemplifica perfectamente las posibilidades que podría llegar a permitir esta vulnerabilidad, como por ejemplo añadir un enlace a un script que se encargará de robar cookies…

Prevención


Para evitar este tipo de vulnerabilidad se recomienda filtrar siempre la información procedente del usuario antes de hacer uso de ella. Generalmente con filtrar los caracteres “<” y “>” sería suficiente, aunque se recomienda también filtrar los nombres de las etiquetas que pueden resultar peligrosas en este tipo de ataque como <script>, <object>, <applet>, <embed> y <form>.

Asimismo se pueden realizar comprobaciones para comprobar que el tipo de dato introducido y la longitud de cada campo se correspondan con lo esperado.

Por su parte, DVWA en el nivel de seguridad high hace uso de la función htmlspecialchars() para convertir caracteres especiales en entidades HTML.




Para que comprender mejor su funcionalidad se muestran algunos ejemplos:
  • & (et) se convierte en &amp; 
  • “ (comillas dobles) se convierte en &quot; cuando ENT_NOQUOTES no está establecido. 
  • ‘ (comilla simple) se convierte en &#039; (o &apos;) sólo cuando ENT_QUOTES está establecido. 
  • < (menor que) se convierte en &lt; 
  • > (mayor que) se convierte en &gt; 

Otra contramedida enfocada a los propios usuarios de páginas web es la de tener el navegador lo más actualizado posible. Por ejemplo el navegador Internet Explorer a partir de su versión 8, introduce como novedad un filtro Anti XSS que detecta posibles manipulaciones de la página mediante la inyección de código en un parámetro de la URL.

No hay comentarios:

Publicar un comentario