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 (")