XUT_ / COURSES / PENETRATION TESTER

Context and Evasion

Context

El payload inyectado tomará lugar (muy probablemente) en una de las siguientes:

  • Entre etiquetas HTML.
  • En etiquetas HTML.
  • Dentro del JavaScript.

Cuando el XSS ocurre entre etiquetas HTML un atacante puede ejecutar <script>alert(document.cookie)</script>

Cuando la inyección se produce en las etiquetas, necesitamos terminar el tag para darle al script su ejecución. Por lo que podemos adaptar nuestro payload a ><script>alert(document.cookie)</script> o "><script>alert(document.cookie)</script> o algo similar dependiendo del contexto.

Si ocurre en el JS, puede que necesitemos terminar el script para correr el nuestro, por lo que podemos empezar con </script> y luego seguir con nuestro payload. Si está dentro de una string de JS, podemos empezar con ' para cerrar la string, luego ; para "terminar" la linea, luego nuestro payload y por último // para comentar. Algo como ';alert(document.cookie)//.


Evasion

Varios repositorios pueden ser consultados para construir tu propio payload XSS. Esto te da muchas posibilidades de experimentación. Una de estas listas es XSS Payload List.

Sin embargo, a veces hay filtros bloqueando los payloads XSS. Si la limitación está basada en la longitud, entonces prueba Tiny XSS Payloads.

Si están bloqueados basado en bloques de código específicos, hay varios trucos para evadirlos. Por ejemplo una tabulación, una nueva linea o un enter pueden romper los métodos de detección de los motores.

  • Horizontal tab (TAB) es 9 en hexadecimal.
  • Nueva linea (LF) es A en hexadecimal.
  • Enter (CR) es D en hexadecimal.
javascript
<IMG SRC="jav&#x09;ascript:alert('XSS');">
<IMG SRC="jav&#x0A;ascript:alert('XSS');">
<IMG SRC="jav&#x0D;ascript:alert('XSS');">