XSS Lab 17
Skills
- Reflected XSS in canonical link tag
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio
refleja la entrada del usuario en una etiqueta link canónica
y escapa los corchetes angulares
. Para resolver
el laboratorio, debemos realizar un ataque de cross-site scripting
en la página principal que inyecte un atributo
que llame a la función alert
. Para ayudarte con la explotación
, podemos asumir que el usuario simulado
presionará las siguientes combinaciones de teclas ALT+SHIFT+X
, CTRL+ALT+X
y Alt+X
Resolución
Al acceder
a la web
nos sale esto
En el desarrollo web
y la optimización de motores de búsqueda (SEO)
, canónico significa la versión preferida o principal de una página web cuando hay varias URLs
que muestran el mismo contenido. Ayuda a los motores de búsqueda a identificar la mejor versión para mostrar en los resultados de búsqueda
Por ejemplo, si tienes una página web a la que se puede acceder a través de diferentes URLs
debido a parámetros o etiquetas de seguimiento (por ejemplo, https://example.com/page
y https://example.com/page?utm_source=google
), es posible que desees designar una URL
como versión canónica
para evitar diluir las clasificaciones de los motores de búsqueda y consolidar la autoridad de la página
Esta vez, la web
no incorpora una función de búsqueda
, pero si visualizamos el código fuente
de la página, haciendo clic derecho
en cualquier parte de la página y seleccionando Ver código fuente de la página
en el menú desplegable
, podremos ver el enlace canónico
de nuestra página de blog. Esto nos permitirá encontrar la URL principal
para la página y ver cómo está implementado el link canónico
Dado que nuestra página de blog
no tiene una barra
de búsqueda
, esto no significa que no podamos intentar agregar
una consulta
al final de la URL
de la web. Para ello, debemos agregar un signo de interrogación (?)
y una cadena alfanumérica
que sepamos que no aparecerá en ningún otro lugar de la página. En mi caso, voy a acceder a https://0a25000b048de3448023855d00c90069.web-security-academy.net/?testing
, si nos fijamos bien, el href
está entre comillas simples
al inspeccionar el código fuente
de la web
Sin embargo, si echamos un vistazo al inspector
de Chrome
en la parte de elements
, vemos que se encuentra entre comillas dobles
. Esto se debe a que el código entre comillas simples
está siendo cargado
así directamente
desde el servidor
, y es en el DOM
donde esta cadena se cambia a comillas dobles
Esto ocurre porque cuando el navegador procesa
el HTML
, crea
una representación
del documento
en forma de DOM
. En esta representación, el navegador sigue
las convenciones estándar
, una de las cuales es mostrar
los atributos
de HTML
con comillas dobles
, independientemente
de cómo se escribieron originalmente
en el código fuente
. Esto es un comportamiento normal
del navegador
al interpretar
y renderizar
el HTML
, y nos ayuda a entender cómo se presentan los datos en la página
Podemos intentar escapar
de las comillas simples
e inyectar atributos
en la etiqueta <link>
. Hay varios payloads
en https://portswigger.net/web-security/cross-site-scripting/cheat-sheet que podríamos usar si el <link>
estuviese en otra parte diferente que no fuese el <head>
Los elementos en el <head>
, como <link>
o <title>
, no están diseñados para ser interactivos
. No se pueden enfocar
ni interactuar
con ellos a través de métodos convencionales como la tecla Tab
o el clic
, ya que están fuera
del flujo visual
de la web
. Cualquier intento
de hacerlos interactivos
, como agregar onfocus
a un <link>
, no tendrá efecto en términos de interfaz de usuario
, aunque puede ser relevante para vulnerabilidades
como XSS
si esos elementos
son procesados
o manipulados incorrectamente
por el servidor
o el cliente
. Sin embargo, este no es el caso
en este laboratorio
En estos casos, lo único que podemos hacer es aprovecharnos de las access keys
para ejecutar el XSS
. Esto nos permitirá asociar un evento
de JavaScript
con una tecla
de acceso
y ejecutar
el payload
Si usamos este payload 'accesskey='X'onclick='alert(1)
y pulsamos Alt + Shift + X
, si estamos en Windows
podremos explotar
el XSS
de manera exitosa