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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Comunicaciones
| |-+  Dispositivos Móviles (PDA's, Smartphones, Tablets)
| | |-+  Hacking Mobile
| | | |-+  .: TALLER DE PROGRAMACIÓN BLUETOOTH :. Con buffer overflow XD
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: .: TALLER DE PROGRAMACIÓN BLUETOOTH :. Con buffer overflow XD  (Leído 12,460 veces)
dxr
Colaborador
***
Desconectado Desconectado

Mensajes: 3.036



Ver Perfil
.: TALLER DE PROGRAMACIÓN BLUETOOTH :. Con buffer overflow XD
« en: 6 Diciembre 2005, 14:49 pm »

Gospel... bonito taller vas acer lo seguire... peor antes una cosa XDD

ANELKAOS Y YO hemos estado echando un vistazo a tu source y no nos gusta para nada XDDD

1º.... veamos pongo el sopurce y lo analizamos:

Código:

#include <stdio.h>
#include <stdlib.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>

int main (int argc, char **argv)
{
      bdaddr_t bdaddr;//Estructura bdaddr_t para almacenar la direccion MAC
      char MAC_dev[248];//Direccion MAC del dispositivo
      char nombre_dev[248];//Nombre del dispositivo
      int id_dev;//Identificador del dispositivo
      int socket;//Socket HCI

      if(argc < 2)
      {
            printf("Sintaxis: %s <direccion MAC>\n",argv[0]);
            exit(1);
      }

      printf("+ BlueResolver por Gospel [elblogdegospel.blogspot.com]\n\n");

      strcpy(MAC_dev,argv[1]);

      printf("Detectando nombre del dispositivo <%s>...\n",MAC_dev);

      baswap(&bdaddr, strtoba(MAC_dev));
                     
      id_dev = hci_get_route(&bdaddr);
      if (id_dev < 0)
      {
            printf("[!] Error. Dispositivo no encontrado.\n");
            exit(1);
      }
                     
      socket = hci_open_dev(id_dev);
      if (socket < 0)
      {
            printf("[!] Error. Fallo al intentar abrir HCI.\n");
            exit(1);
      }
                     
      int timeout = 10000;
      if (hci_read_remote_name(socket,&bdaddr,sizeof(nombre_dev), nombre_dev, timeout) == 0)
      {
            printf("Dispositivo encontrado:\n\tMAC: %s\n\tNombre: %s\n",MAC_dev,nombre_dev);
      }
      else
      {
            printf("[!] Error. No se ha podido obtener el nombre del dispositivo Bluetooth.\n");
      }
             
      close(socket);

      return(0);
}


Citar
      char MAC_dev[248];//Direccion MAC del dispositivo

Yo esto lo ubiera declarado como puntero, asi prebeemos un stack overflow y si tienes el fallo pues kedaria en un heap overflow

y luego esto ya si q si XD:

Citar
strcpy(MAC_dev,argv[1]);

asi a capon? reservas 248 bytes peor si meten 83476593847659324 ale pa dentro pa la pila no? y na menos en un programa que rekiere privilegios de root XD.

yo lo que aria primero seria declarar ese array como punteo y luego antes de hacer el:

strcpy hacer una comprobacion de los bytes que ocupa argv[1] y si supera los q tu kieres saltar un error y esas cosas...

Sigue con el taller que me interesa ;D


« Última modificación: 6 Diciembre 2005, 14:51 pm por DEREK_X » En línea

Hacer preguntas concretas, claras y aportando toda la documentación necesaria.
De lo contrario, no tendreis una respuesta clara.
Gospel
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.587


Ver Perfil WWW
Re: .: TALLER DE PROGRAMACIÓN BLUETOOTH :. Con buffer overflow XD
« Respuesta #1 en: 6 Diciembre 2005, 15:44 pm »

Aisss.... estos blackhat siempre buscandole esa vuelta de tuerca q le falta... el mamón del Anelkaos q me manda un sms para felicitarme el cumpleaños y de regalo me dice q mi programa tiene un buffer overflow! Jajaaajaja...

Gracias por el advisory chavales! Yo no estoy muy puesto en eso de los buffer overflows y el código tiene esa pinta tan infantil por dos motivos:
- Me basé en el redfang para sacar la parte del código q implementa esta función de 'name resolver'. El redfang utilizaba vectores estáticos para almacenar cadenas de caracteres, me dio pereza cambiarlo...
- El objetivo del programa es q sea un código simple y ligero, fácil de leer. No es una gran herramienta, es un ejemplo sencillo. Era más fácil entender q primero recogemos la entrada de la MAC por teclado en una variable y luego la pasamos a forma bdaddr_t q hacerlo directamente con argv[1]. En fin, tampoco creo q pueda ser utilizado maliciosamente para lanzar un bof en un sistema linux...

Aún así, en cuanto llegue a casa esta tarde modifico el código y lo hacemos más seguro, ok?

Hala, gracias por el advisory!! En sucesivas entregas, quedáis contratados como consultores de seguridad del Taller!

Salu2


En línea

Gospel
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.587


Ver Perfil WWW
Re: .: TALLER DE PROGRAMACIÓN BLUETOOTH :. Con buffer overflow XD
« Respuesta #2 en: 6 Diciembre 2005, 21:19 pm »

Ok, ya está modificado. Ya de paso he comentado un poco más el código para mejor comprensión.  :)

No hace falta q le deis más vueltas a la tuerca pq si me meto en comprobaciones de tamaños de cadenas y demás, el código se complica innecesariamente. El objetivo no es construir una super herramienta comercial q no puede tener un sólo agujero de seguridad, sino simplemente un código sencillo q permita comprender cómo funciona la programación en Bluez... o acaso vosotros vigilais q las prácticas q entregais en la Uni no sean vulnerables a un BoF??

Hala... lo dicho... Si en adelante publico un código con un grave problema de seguridad pues me lo comentaís y lo securizo. Si es un fallo leve, pues no hace falta... lo primero es la claridad en el código!

Ciao y gracias de nuevo ;)
En línea

dxr
Colaborador
***
Desconectado Desconectado

Mensajes: 3.036



Ver Perfil
Re: .: TALLER DE PROGRAMACIÓN BLUETOOTH :. Con buffer overflow XD
« Respuesta #3 en: 7 Diciembre 2005, 12:16 pm »

Si yo te entiendo gospel pero debemos de dar buen ejemplo programando aplicaciones funcionales y seguras :P de todos modos era una chorrada de b0f pero weno. Que sepas q apartir de ahora voy analizar todos tus sources :P mas q na xq asi aprendemos cosas los 2 XDDD
;D
En línea

Hacer preguntas concretas, claras y aportando toda la documentación necesaria.
De lo contrario, no tendreis una respuesta clara.
dxr
Colaborador
***
Desconectado Desconectado

Mensajes: 3.036



Ver Perfil
Re: .: TALLER DE PROGRAMACIÓN BLUETOOTH :. Con buffer overflow XD
« Respuesta #4 en: 7 Diciembre 2005, 12:21 pm »

mmmm

 char *MAC_dev = argv[1];//Direccion MAC del dispositivo

yo creo q no e sla forma mas correcta... ya q estas dejando q el usuario meta lo q kiera pero en la memoria dinamica, has solucionao un stack overflow pero as creado un heap overflow XDDD


siento decirtelo pero creo q como lo tenias al pricipio valia pero antes de copiar el contenido del 1º argumento comprobay los bytes que ocupa :P y declarando  char *MAC_dev asi como puntero. Si en la memoria dinamica ubiera mas variables se podria sobreescribir su contenido y cuando el programa fuera a llamarla ejecutar tu codigo ;P
En línea

Hacer preguntas concretas, claras y aportando toda la documentación necesaria.
De lo contrario, no tendreis una respuesta clara.
/* strcpy() */


Desconectado Desconectado

Mensajes: 367


FLEMA - The Ramones - Sex Pistols


Ver Perfil WWW
Re: .: TALLER DE PROGRAMACIÓN BLUETOOTH :. Con buffer overflow XD
« Respuesta #5 en: 7 Diciembre 2005, 12:33 pm »

Creo que la mejor idea seria dejar
Código:
 char MAC_dev[248];//Direccion MAC del dispositivo
y para el strcpy podemos usar un strncpy por ejemplo.
Ahi dejo un link a un texto que apesta xD: http://foro.elhacker.net/index.php/topic,95901.0.html
En línea

Sigo asi
Soy feliz
yo elegí
Sexo, Drogas y PunkRock
/* strcpy() */


Desconectado Desconectado

Mensajes: 367


FLEMA - The Ramones - Sex Pistols


Ver Perfil WWW
Re: .: TALLER DE PROGRAMACIÓN BLUETOOTH :. Con buffer overflow XD
« Respuesta #6 en: 7 Diciembre 2005, 12:46 pm »

No seria interesante hacer un exploit para este programa ¿?
xDDDDDDD
Si me hago un tiempo libre ;)
xDDD
En línea

Sigo asi
Soy feliz
yo elegí
Sexo, Drogas y PunkRock
ANELKAOS
Colaborador
***
Desconectado Desconectado

Mensajes: 3.105


#include<nda.h>


Ver Perfil WWW
Re: .: TALLER DE PROGRAMACIÓN BLUETOOTH :. Con buffer overflow XD
« Respuesta #7 en: 7 Diciembre 2005, 13:19 pm »

Eh que a mi si me gustó, solo que leí las declaraciones y dije...no puede ser.... jajaja xD Me hizo gracia y se lo comenté a DEREK_X xD Pero vamos...tampoco es pra darle mayor importancia... :P
1Saludo
En línea

dxr
Colaborador
***
Desconectado Desconectado

Mensajes: 3.036



Ver Perfil
Re: .: TALLER DE PROGRAMACIÓN BLUETOOTH :. Con buffer overflow XD
« Respuesta #8 en: 7 Diciembre 2005, 16:00 pm »

Ya pense en hacer el explot pero es absurdo es un programa q tienes q ejecutarlo como root... q vas hacer un shellcode q se ejecute como root? : XD no merece la pena ;D
En línea

Hacer preguntas concretas, claras y aportando toda la documentación necesaria.
De lo contrario, no tendreis una respuesta clara.
/* strcpy() */


Desconectado Desconectado

Mensajes: 367


FLEMA - The Ramones - Sex Pistols


Ver Perfil WWW
Re: .: TALLER DE PROGRAMACIÓN BLUETOOTH :. Con buffer overflow XD
« Respuesta #9 en: 7 Diciembre 2005, 16:56 pm »

 La idea era por hacer algo anecdotico, es decir, habriamos explotado a Gospel ;)
En línea

Sigo asi
Soy feliz
yo elegí
Sexo, Drogas y PunkRock
Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines