elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking Ético
| | |-+  Bugs y Exploits
| | | |-+  Programa anti overflows?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa anti overflows?  (Leído 1,967 veces)
Fastolfe

Desconectado Desconectado

Mensajes: 69


Ver Perfil
Programa anti overflows?
« en: 7 Marzo 2012, 00:23 am »

Buenas! hace poco me he bajado el DVL y me he hecho un par de exploimes, lo que me ha hecho pensar: ¿cómo puedo evitar los buffer overflows usando funciones de la libreria standard de C?

Y probando un poco he llegado a este programita:

Código
  1. #include <stdio.h>
  2.  
  3. char var[10];
  4.  
  5. void leer(){
  6. int i = 0;
  7. for (i = 0; i < 10; i++){
  8. scanf("%c", &var[i]);
  9. }
  10. }
  11.  
  12. int clong(char a[]){
  13. int i = 0;
  14. while(a[i] != '\0'){
  15. i++;
  16. }
  17. return i;
  18. }
  19.  
  20. int compare(char a[], char b[]){
  21. int i = 0;
  22. int ret = 1;
  23. int max;
  24. if (clong(a) >= clong(b)){
  25. max = clong(b);
  26. }else{
  27. max = clong(a);
  28. }
  29. for (i = 0; i < max; i++){
  30. ret = ret&&(a[i] == b[i]);
  31. }
  32. return ret;
  33. }
  34.  
  35. int main(){
  36. printf("\n Introduce la clave y pulsa intro repetidas veces: ");
  37. char a[10];
  38. char cadena[] = "hola";
  39. leer();
  40. if (compare(var, cadena)){
  41. printf("\n Enhorabuena!\n");
  42. }else{
  43. printf("\n Pringao\n");
  44. return 0;
  45. }
  46. return 0;
  47. }

He probado a meterle casi un millon de 'A's y no he conseguido nada, ni siquiera un segment fault ni el tipico mensaje de linux de "detected stack smash" (o algo parecido), alguien puede decirme como hacer un buffer overflow con este programa?

Muchas gracias!!
En línea

Sagrini

Desconectado Desconectado

Mensajes: 107


Ver Perfil WWW
Re: Programa anti overflows?
« Respuesta #1 en: 9 Marzo 2012, 00:09 am »

1. Buffer overfllow en variable "var". No se puede sobreescribir nada excesivamente importante, pero está ahí y si le das unas cuantas vueltas puedes conseguir algo ;)
2. La función de comparación no funciona como debería. Ahí se podría tal vez explotar el punto 1, pero habría que pensarlo.
3. La variable "a [10]" sobra.

Dándole vueltas creo que se puede saltar la comparación y que te devuelva OK, tendré que pensarlo.
Corrijo un poco el código:
Código
  1. #include <stdio.h>
  2.  
  3. int lenght (char *s)
  4. { int i;
  5. for (i=0; s [i] != '\0'; i++);
  6. return i;
  7. }
  8.  
  9. int compare(char a[], char b[])
  10. { int i;
  11. if (lenght (a) != lenght (b)) return 1;
  12. for (i=0; i<lenght (a); i++) if (a[i] != b[i]) return 1;
  13. return 0;
  14. }
  15.  
  16. int main()
  17. { printf("Introduce la clave: ");
  18. char var [32]; char ok [] = "hola"; int i;
  19. fgets (var, 32, stdin); for (i=0; var [i]!='\n' && i<32; i++); var [i]='\0';
  20. if (compare(var, ok) == 0) printf("Enhorabuena!\n");
  21. else printf("Pringao\n");
  22. return 0;
  23. }
  24.  
Y si lo prefieres sin siquiera usar stdio.h:
Código
  1. int lenght (char *s)
  2. { int i;
  3. for (i=0; s [i] != '\0'; i++);
  4. return i;
  5. }
  6.  
  7. int compare(char a[], char b[])
  8. { int i;
  9. if (lenght (a) != lenght (b)) return 1;
  10. for (i=0; i<lenght (a); i++) if (a[i] != b[i]) return 1;
  11. return 0;
  12. }
  13.  
  14. int main()
  15. { write (1, "Password: ", 10);
  16. char var [32]; char ok [] = "hola"; int i;
  17. read (1, var, 32); for (i=0; var [i]!='\n' && i<32; i++); var [i]='\0';
  18. if (compare(var, ok) == 0) write (1, "OK!\n\n", 5);
  19. else write (1, "BAD\n\n", 5);
  20. return 0;
  21. }
  22.  
« Última modificación: 9 Marzo 2012, 00:13 am por Sagrini » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿No conocen un programa para crear Cds con seguridad <anti-grabacion>?
Grabadoras
victor_007 5 1,972 Último mensaje 24 Septiembre 2005, 13:52 pm
por apatxe
Programa Anti-Porno. « 1 2 »
Software
wifisn 18 11,984 Último mensaje 18 Marzo 2011, 16:58 pm
por andreselmejor
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines