Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: 4rkn63l en 21 Diciembre 2010, 02:29 am



Título: Sockets,printf y datos provenientes de la red...por que esta vulnerabilidad?
Publicado por: 4rkn63l en 21 Diciembre 2010, 02:29 am
Muy buenas, que tal todos!

Estaba leyendo el libro "TCP/IP sockets in c practical guide for programmers" y me llamo la atencion un dato,se menciona que mostrar como primer argumento de la funcion printf una cadena (buffer recibido) obtenida por medio de la comunicacion con el socket, hace el codigo vulnerable, ¿a que se debe esto, que tipo de vulnerabilidad presenta?

pdta: en el libro se recomienda para evitar la vulnerabilidad utilizar fputs en vez de printf.




Título: Re: Sockets,printf y datos provenientes de la red...por que esta vulnerabilidad?
Publicado por: sch3m4 en 21 Diciembre 2010, 02:37 am
El peligro no está en la función, sino en cómo se le pasan los parámetros:

http://en.wikipedia.org/wiki/Format_string_attack
http://crypto.stanford.edu/cs155/papers/formatstring-1.2.pdf


Título: Re: Sockets,printf y datos provenientes de la red...por que esta vulnerabilidad?
Publicado por: 4rkn63l en 21 Diciembre 2010, 02:53 am
vaya, interesante  :silbar: hace unos dias estaba viendo un codigo de un synflood utilizando los sockets en C, ahora esto y me imagino que deben haber alguna otra cosa por ahi...cada vez me gusta mas este tema de los sockets.  ;-)

gracias por los links sch3m4.


Título: Re: Sockets,printf y datos provenientes de la red...por que esta vulnerabilidad?
Publicado por: Garfield07 en 21 Diciembre 2010, 19:03 pm
Para el que no lo entienda, es que a printf se le pasa una cadena sin más:
Código
  1. printf ("Hola mundo!");
Pues que pasa si le pasas...
Código
  1. printf ("Hola mundo %d%d%d!");
Pues que leera los tres ultimos datos de la pila... es cosa de ensamblador. La cosa es que al llamar a una funcion se escriben diversos datos en la pila, y en la funcion printf recupera de la pila los datos recibidos antes de la funcion cuando sale una caracter de control... A resumir, podrias leer cualquier dato de la pila.
Pero... se podria escribir? Resulta que un caracter especial escribe el numero de bytes leidos... Asi que controlando los datos... ya se sabe.

Mas en el libro "Hacking. Técnicas fundamentales". Fantastico libro sobre C, ensamblador y hacking!