por
pobrecito hablador
el Jueves, 04 Diciembre de 2003, 19:01h
(#241347)
Tan por encima que es erróneo.
Un programa, como tal, no tiene acceso a la información que dice si es de root o no. Eso solo existe en espacio de memoria de kernel.
Otra cosa es que alteres el funcionamiento del programa a través de un error de este tipo u otro, y dicho programa tenga privilegios especiales (normalmente root).
Un ejemplo clásico. El comando "su" tiene privilegios de root a través del setuid del archivo.
Si dicho programa no verifica el tamaño de la cadena del password y la copia en un array limitado podrías sobreescribir las direcciones siguientes (tal y como decías)
Pero lo que normalmente hay ahí no es el identificador que dice si eres root o no (entre otras cosas porque eso va en kernel). Pero si, por ejemplo, puede ir el punto de retorno del programa , si el array estaba en la pila porque era una variable local en una llamada a una función.
Entonces puedes hacer que el programa salte a un punto de ejecución determinado. Este puede ser la ejecución de una shell, y puesto que el proceso "su" es privilegiado, la shell hereda dichos privilegios.
Re:Demasiadas coincidencias
(Puntos:0)Un programa, como tal, no tiene acceso a la información que dice si es de root o no. Eso solo existe en espacio de memoria de kernel.
Otra cosa es que alteres el funcionamiento del programa a través de un error de este tipo u otro, y dicho programa tenga privilegios especiales (normalmente root).
Un ejemplo clásico. El comando "su" tiene privilegios de root a través del setuid del archivo.
Si dicho programa no verifica el tamaño de la cadena del password y la copia en un array limitado podrías sobreescribir las direcciones siguientes (tal y como decías)
Pero lo que normalmente hay ahí no es el identificador que dice si eres root o no (entre otras cosas porque eso va en kernel). Pero si, por ejemplo, puede ir el punto de retorno del programa , si el array estaba en la pila porque era una variable local en una llamada a una función.
Entonces puedes hacer que el programa salte a un punto de ejecución determinado. Este puede ser la ejecución de una shell, y puesto que el proceso "su" es privilegiado, la shell hereda dichos privilegios.