elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 15:45  


Tema destacado:


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  [propuesta]practicas de overflows & Otros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [propuesta]practicas de overflows & Otros  (Leído 2,064 veces)
Ilorev


Desconectado Desconectado

Mensajes: 473


???


Ver Perfil
[propuesta]practicas de overflows & Otros
« en: 8 Diciembre 2006, 03:37 »

hola ha todos ,
k tal si publicamos en un post ejecicios para explotar ciertas vulnerabilidades, simplemente para `practicar??
a quien le interesa?
en caso de que les interes voy a empezar yo

este es un login
objetivo : que digas login existoso sin escribir el user ni el pass correcto

Código:
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <windows.h>
#include <string.h>
#include <stdarg.h>
int ok();
int bad();
main()
{
int ok()
{
printf("login existos");
}
int bad()
{
printf("login incorrecto");
}
   
      char user[8],pass[8];
 
printf("user:");
scanf("%s",&user);
printf("\npass:");
scanf("%s",&pass);
if(!strcmp(user,"admin") && !strcmp(pass,"1234")){
               
          ok();
               
           }
else{
                               
bad();
                               
}
}


----------

modificado el 8 de diciembre del 2006 a las 6:05

otro ejercicios

Código:
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <windows.h>
#include <string.h>
#include <stdarg.h>
main()
{
      int num[10];
      char nombre[20];
printf("formulario para sacar promedios del colegios .......");

printf("Nombre del estudiante:");
scanf("%s",&nombre);
printf("literatura:");
scanf("%d",&num[1]);
printf("biologia:");
scanf("%d",&num[2]);
printf("fisica:");
scanf("%d",&num[3]);
printf("deporte:");
scanf("%d",&num[4]);
printf("informatica:");
scanf("%d",&num[5]);
printf("ingles:");
scanf("%d",&num[6]);
printf(" frances:");
scanf("%d",&num[7]);
num[10]=num[1]+num[2]+num[3]+num[4]+num[5]+num[6]+num[7];
num[10] = num[10] / 7;
printf(nombre);
printf(", su promedio es :%d",num[10]);

fflush(stdin);
 getchar();
}
« Última modificación: 8 Diciembre 2006, 23:06 por mr.deep » En línea

EOF
transit

Desconectado Desconectado

Mensajes: 74


Ver Perfil
Re: [propuesta]practicas de overflows
« Respuesta #1 en: 8 Diciembre 2006, 16:37 »

me parece una gran idea mr.deep, la practica es muy importante, por que por muxa teoria q se sepa si no se sabe ponerla en practica....

la solucion creo q es q ay como se declara primero la variable user y despues la varia pass, abra q pasar al programa primero la pass 1234 en texto plano o en hex, llenar con nulls asta llenar los 8 bytes y despues meter admin como texto plano o en hex, por lo menos yo creo q esa es una posibilidad ya q al desbordarse pass con 1234 y nulls sobreescribe user con admin.

saludos y animo con esta propuesta q nos puede ayudar muxo a todos.
En línea
Ivanchuk


Desconectado Desconectado

Mensajes: 466


LLVM


Ver Perfil WWW
Re: [propuesta]practicas de overflows
« Respuesta #2 en: 8 Diciembre 2006, 16:57 »

jeje ta bueno el problema :D. mmm transit si le pasas caracteres nulos el scanf te va a cortar la cadena. Copia hasta el primer caracter nulo :S. Me parece que si se desborda user y como ret se lo pone la dir de la funcion ok() deberia andar. Aunque se va a llamar primero a bad(), pero aun asi va a decir login exitoso XD.
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
transit

Desconectado Desconectado

Mensajes: 74


Ver Perfil
Re: [propuesta]practicas de overflows
« Respuesta #3 en: 8 Diciembre 2006, 17:08 »

ups ya te digo menuda xorrada dije, cierto la solucion es sobreescribir pass y user y como despues de user esta la direccion de retorno solo abria q sobreescribirla con la direccion de la funcion ok, lo unico seria buscar donde se carga esa funcion con el odbg.
« Última modificación: 8 Diciembre 2006, 17:10 por transit » En línea
Ilorev


Desconectado Desconectado

Mensajes: 473


???


Ver Perfil
Re: [propuesta]practicas de overflows & Otros
« Respuesta #4 en: 9 Diciembre 2006, 21:14 »

aqui le traigo otro...
Código:
#include <stdio.h>
#include <winsock.h>
     int send2()
      {
   printf("bug explotado con exito");
         
         }

main()
{
      WSADATA ws;
      if(WSAStartup(MAKEWORD(1,1),&ws)!=0){
      fprintf(stderr,"Error en WSAStarup");
      exit(1);
      }
     
      struct sockaddr_in my_addr;
      struct sockaddr_in their_addr;
      int sin_size,byte;
      char buffer[8];
      int sn,s= socket(AF_INET,SOCK_STREAM,0);
      my_addr.sin_family = AF_INET;
      my_addr.sin_port =htons(6000);
      my_addr.sin_addr.s_addr=INADDR_ANY;
      memset(&( my_addr.sin_zero),'\0',8);
      if(bind(s,(struct sockaddr *)&my_addr,sizeof(struct sockaddr_in))==-1)
      {
      perror("Bind");
      }
      if(listen(s,10)==-1)
           {
      perror("listen");
      }
            char msg[]="hash:";
   
      sin_size = sizeof(struct sockaddr_in);
      if((sn=accept(s, (struct sockaddr *)&their_addr,&sin_size))==-1) {
      perror("accept");
                       
      }   
      if (send(sn,msg, strlen(msg), 0) == -1){
      perror("err:send");
      }       
 

     
      if((byte=recv(sn,buffer,256,0))==-1){
                         
     fprintf(stderr,"Error:recv\n");       
      exit(0);
      }
buffer[byte]='\0';
printf("%s",buffer);


 getchar();
close(s);

}


vamos animense a postear !!! codigo!!
cualkier error me lo hacen saber!
« Última modificación: 9 Diciembre 2006, 21:48 por mr.deep » En línea

EOF
duhastengel

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: [propuesta]practicas de overflows & Otros
« Respuesta #5 en: 11 Diciembre 2006, 05:57 »


saludos....
   
     Buenisima la iniciativa..... :)
en estos dias me hajo un exploit para esto y lo posteo.... ;)
En línea
Ilorev


Desconectado Desconectado

Mensajes: 473


???


Ver Perfil
Re: [propuesta]practicas de overflows & Otros
« Respuesta #6 en: 11 Diciembre 2006, 19:33 »

aqui hay otro , jeje es muyy facil incluso analizen los codigos , pero no se lleven tanto por las funciones k vean

OBjetivo: visualizar & poner la licencia correcta

Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
main(int argc,char *argv[])
{
         if(argc < 2)
         {
                 
             fprintf(stderr,"register.exe <usuario> <clave>");   
                 exit(1);
                 
                 }
      int dif;
      char *nombre = (char *) malloc(16);
      char *licencia= (char *) malloc(16);
      dif = (int)licencia - (int) nombre;
      strcpy(nombre,argv[1]);
      sprintf(licencia,"%c-%X-%d",nombre[1],nombre[2],nombre[4]);
     if(strcmp(licencia,argv[2])!=NULL)
     {
     printf("licencia incorrecta\n");                         
     }
     else{
                                         
     printf("licencia correcta\n");
                                         
     }

   
      printf("%s\n",nombre);


....en serio esta muy facil

Saludos
« Última modificación: 12 Diciembre 2006, 00:41 por Sirdarckcat » En línea

EOF
AlbertoBSD
Estudiante y
Colaborador
***
Desconectado Desconectado

Mensajes: 1.955


Anonymous & Paranoid


Ver Perfil WWW
Re: [propuesta]practicas de overflows & Otros
« Respuesta #7 en: 11 Diciembre 2006, 22:00 »

Bueno, Esta muy bien la Iniciativa.  :)

Estuve viendo algunos codigos y probando.

el ultimo lo deje asi..

Código
#include<stdio.h>
 
int main(int argc,char *argv[]) {
       if(argc < 2)    {
               fprintf(stderr,"./register <usuario> <clave>\n");
               exit(1);
       }
       int dif;
       char *nombre = (char *) malloc(16);
       char *licencia= (char *) malloc(16);
       dif = (int)licencia - (int) nombre;
       strcpy(nombre,argv[1]);
       sprintf(licencia,"%c-%X-%d",nombre[1],nombre[2],nombre[4]);
       if(strcmp(licencia,argv[2])!=NULL)      {
               printf("licencia incorrecta\n");
       }
       else{
               printf("licencia correcta\n");
       }
       printf("%s\n",nombre);
       printf("Diferencia :%d\n",dif);
       return 0;
}
 

La Diferenia con migo es 16 no se con ustedes..

Código
Yes Master? : gcc -o register register.c  -lc
Yes Master? : ./register
./register <usuario> <clave>
Yes Master? : ./register Luis 1223
licencia incorrecta
Luis
Diferencia :16
 
En línea

Bien Super Divertido
@wifigdlmx
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines