Foro de elhacker.net

Seguridad Informática => Nivel Web => Mensaje iniciado por: nØFi# en 12 Noviembre 2009, 10:00 am



Título: evitar XSS en eval()
Publicado por: nØFi# en 12 Noviembre 2009, 10:00 am
Buenas!

Estoy haciendo un script con un eval que ejecuta una serie de cosas que se le pasan por variable. Me he puesto a trastear un poco y evidentemente sin filtros ni nada es vulnerable a XSS. Estoy pensando una forma buena para evitar cualquier XSS pero no termino de encontrar algo optimo. En php era facil, usaba un htmlentities y ya me codificaba todos los caracteres a html, pero en javascript nose como puedo hacer el filtro.

Alguna idea de como filtrar?


Título: Re: evitar XSS en eval()
Publicado por: braulio-- en 12 Noviembre 2009, 13:56 pm
Puedes poner el código?


Título: Re: evitar XSS en eval()
Publicado por: Azielito en 12 Noviembre 2009, 16:26 pm
No se pode con str_replace? y quitar los "<>" y demas? claro, tratando de evitar un bypass




Título: Re: evitar XSS en eval()
Publicado por: Darioxhcx en 12 Noviembre 2009, 17:14 pm
htmlentities ?


Título: Re: evitar XSS en eval()
Publicado por: Azielito en 12 Noviembre 2009, 17:19 pm
mira esta pagina :xD

http://phpjs.org/functions/htmlentities:425

y mira el index de la pagina, esta bn bueno :D



Título: Re: evitar XSS en eval()
Publicado por: WHK en 12 Noviembre 2009, 20:11 pm
Un htmlentities no eviatrá un xss ya que puedes insertar saltos de linea o carácteres nulos. Si por ejemplo tu código está encerrado en un try{} basta con hacer un salto de linea y escribir un }catch(x){alert(document.cookie) ya que el try evitará que se termine la ejecución del script por un error de sintaxis dejando la posibilidad de ejecutar código arbitrario.

Yo te recomendaría que utilizes una función similar a lo que hace escape real string de php pero para js, le haces stripslashses, luego addslashses, eliminas \n \r \01 \00, etc y al final lo pasas por trim o utiliza expresiones regulares con match.

Ahora, si vas a pasar variables que si contienen saltos de linea puedes pasarlos a urlencode y despues lo procesas en urldecode teniendo en cuenta de que si lo vas a imprimir en la página debes tener cuidado de no imprimir todo directamente o si no también tendrás problemas de xss.


Título: Re: evitar XSS en eval()
Publicado por: sirdarckcat en 16 Noviembre 2009, 09:32 am
Puedes poner el código?
sin codigo no se puede ayudar.. depende que hay dentro del eval.


Título: Re: evitar XSS en eval()
Publicado por: nØFi# en 17 Noviembre 2009, 21:14 pm
El eval() lo uso para ejecutar un objeto json.. algo asi:

Código
  1. <script>
  2.  
  3. var var2 = "'};alert('XSS');//";
  4.  
  5. var json = "variables = {'var1':'aaaa','var2':'"+var2+"'}";
  6.  
  7. eval(json);
  8.  
  9. </script>
  10.  

En este caso, una manera de evitar el XSS seria escapar comillas.. pero con el \00 o algun otro metodo se puede bypassear?

Pensando un poco, creo que seria mejor poner una expresion regular que solo aceptase caracteres [a-zA-Z] y seria mas seguro. Como lo veis?


PD: Muy buena la pagina de phpjs :D


EDIT:

algo asi tenia pensado:
Código
  1. <script>
  2.  
  3. var var2 = "'}alert('XSS')//";
  4.  
  5. var json = "variables = {'var1':'aaaa','var2':'"+var2+"'}";
  6.  
  7. if(var2.match(/^[a-zA-Z0-9]*$/)) eval(json);
  8. else console.log('eivaa');
  9.  
  10. </script>
  11.  

no creo que haya ningun bypass no?  :xD


Título: Re: evitar XSS en eval()
Publicado por: sirdarckcat en 18 Noviembre 2009, 03:50 am
 
Citar
if(var2.match(/^[a-zA-Z0-9]*$/)) eval(json)
si.. eso esta bien para lo que quieres hacer.

y no te recomiendo uses eval si vas a parsear JSON.. te recomendaria usar este:
http://www.json.org/json2.js

porque su sintaxis y todo se esta portando a los navegadores (firefox/internet explorer/chrome/etc..)


Título: Re: evitar XSS en eval()
Publicado por: nØFi# en 18 Noviembre 2009, 12:56 pm
Perfecto :D

Lo de parsear con el objeto JSON ya lo estuve pensando, pero con navegadores 'viejos' (IE6 por ejemplo) no va a funcionar no?

Es que la gente no se actualiza,usa mucho el ie6.. incluso ie5 XDD


Título: Re: evitar XSS en eval()
Publicado por: WHK en 18 Noviembre 2009, 18:32 pm
Yo utilizo el serializado :P para mi es mas comodo que utilizar json.
Creas el array con el contenido y luego lo serializas y lo pasas por xmlhttp y lo desserializas y obtienes el array nuevamente.
Me gusta porque tiene soporte nativo en php y lo usas desde jquery en javascript o si no php.js pero no se, no me llama la atención el json.


Título: Re: evitar XSS en eval()
Publicado por: sirdarckcat en 22 Noviembre 2009, 16:25 pm
@n0fi:
este script:
http://www.json.org/json2.js (http://www.json.org/json2.js)

funciona en todos lados.. o al menos deberia.

@whk, nahhhhhhhhh json es la onda xD

Saludos!