elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
22 Marzo 2010, 16:56  


Temas destacados: Inauguración del Blog Oficial elhacker.net


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderadores: Anon, berz3k)
| | |-+  BoF en inet_network(), afecta a Servidor DNS: BIND
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: BoF en inet_network(), afecta a Servidor DNS: BIND  (Leído 4037 veces)
Anon
Estudiante y
Moderador
*****
Desconectado Desconectado

Mensajes: 1.897


Anonymous & Paranoid


Ver Perfil WWW
BoF en inet_network(), afecta a Servidor DNS: BIND
« en: 22 Enero 2008, 19:08 »

Bien, recientemente he empesado a ver en la lista de SECURITY ADVISORIES de FreeBSD, la cual normalmente no veia, sin embargo quiero ser un buen administrador del sistema que utilizo. ;) y estar al dia con las actualizaciones ;D. he visto que hay algunos bugs, ya descubiertos con todo y parche. Obviamente anuncian esto cuando ya se tiene el parche :P, pero bueno el Motivo de este mensaje es el siguente:

Ver si somos o mas bien soy capaz de construir un exploit para dicha Vulnerabilidad, he hecho exploits para programas sencillos, y BoF bien ubicados, pero de ahi en mas no lo he hecho con aplicaciones complejas.

Por si alguien me quiere ayudar... se lo agradeceré de antemano.



Bien los link de bug que me intereso son los siguentes:


Ahora para los que no sepen y quieran enterarse, BIND, es un Servidor DNS muy extendido hoy en dia, con la ayuda de este, ustedes pueden entrar a google, o al foro.

Mas informacion en BIND by Wikipedia

La funcion donde se encuentra la falla, es una funcion estandar en libc, esto quiere decir y por si no vieron los primeros Links, FreeBSD no es el unico Afectado por esto, tambien hay muchas Versiones de Linux, UNIX, etc. Y ademas todas las versiones del Servidor BIND, hasta ultima version de 22/01/2008.

La pagina de BIND, considera esto como un Riesgo de Seguridad Bajo, y tienen Razon, el parche ya existe, pero cuantos son los Administradores de Sistemas (me Incluyo) que pocas veces (si no es que ninguna) han aplicado parches de seguridad.

La falla Esta en la funcion inet_network(), la cual es usada por BIND.

he hecho un archivo para testearla, pero no consigo burlarla, pero bueno ya que, aqui esta mi codigo de test, creo yo que asi se puede testear. que alguien con mas experiencia me corrija si es que me equivoco.

test_network.c
Código
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
 
int main(int argc,char *argv[]) {
char *host = (argc > 1) ? argv[1] : "192.168.0.1";
in_addr_t net = inet_network(host);
printf("0x%x\n",net);
return 0;
}
 

Ahora, todos los links que mostre muestran que si tratas de explotar dicho bug, y fallas ocacionarias un DoS a los usuarios legitimos del servidor. Pero si das en el punto exacto podras ejecutar codigo arbitrario en la maquina remota. lo cual te puede permitir el acceso al servidor.

Successfully exploiting this issue may allow attackers to execute arbitrary machine code in the context of applications that use the affected library. Failed exploit attempts may crash applications, denying service to legitimate users.

He instaldo el servidor BIND en una maquina de prueba para ir probando los avances en la aplicacion mas Afectada por este BoF.



Bien ahora estoy analizando la funcion Vulnerable, cabe mencionar que es casi la misma en mi sistema FreeBSD que la que trae incluida el Servidor BIND.

Código
u_long
inet_network(cp)
register const char *cp;
{
register u_long val, base, n, i;
register char c;
u_long parts[4], *pp = parts;
int digit;
 
again:
val = 0; base = 10; digit = 0;
if (*cp == '0')
digit = 1, base = 8, cp++;
if (*cp == 'x' || *cp == 'X')
base = 16, cp++;
while ((c = *cp) != 0) {
if (isdigit((unsigned char)c)) {
if (base == 8U && (c == '8' || c == '9'))
return (INADDR_NONE);
val = (val * base) + (c - '0');
cp++;
digit = 1;
continue;
}
if (base == 16U && isxdigit((unsigned char)c)) {
val = (val << 4) +
(c + 10 - (islower((unsigned char)c) ? 'a' : 'A'));
cp++;
digit = 1;
continue;
}
break;
}
if (!digit)
return (INADDR_NONE);
if (*cp == '.') {
if (pp >= parts + 4 || val > 0xffU)
return (INADDR_NONE);
*pp++ = val, cp++;
goto again;
}
if (*cp && !isspace(*cp&0xff))
return (INADDR_NONE);
*pp++ = val;
n = pp - parts;
if (n > 4U)
return (INADDR_NONE);
for (val = 0, i = 0; i < n; i++) {
val <<= 8;
val |= parts[i] & 0xff;
}
return (val);
}
 

Lo que he hecho es lo siguiente.
  • Instalar BIND en la Computadora de prueba con la opcion -g
Esto es para mayor depuracion del mismo.
  • Active la creacion de archivos core en el sistema de prueba
Esto es por si la aplicacione se llega a caer en alguna de las pruebas, poder analizar esto mejor.
  • Agregar a mi ejemplo test_network.c, la funcion Vulnerable.
La agrege con otro nombre esto para poderlo compilar con la opcion -g -static para poder depurarlo sin tener que terner el server abierto.

Asi mi codigo para testear la funcion vulnerable queda asi.

Código
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
 
in_addr_t inet_networkbuf(const char *cp);
 
int main(int argc,char *argv[]) {
char *host = (argc > 1) ? argv[1] : "192.168.0.1";
in_addr_t net = inet_networkbuf(host);
printf("0x%x\n",net);
return 0;
}
 
in_addr_t
inet_networkbuf(cp)
const char *cp;
{
in_addr_t val, base, n;
char c;
in_addr_t parts[4], *pp = parts;
int i, digit;
 
again:
val = 0; base = 10; digit = 0;
if (*cp == '0')
digit = 1, base = 8, cp++;
if (*cp == 'x' || *cp == 'X')
base = 16, cp++;
while ((c = *cp) != 0) {
if (isdigit((unsigned char)c)) {
if (base == 8U && (c == '8' || c == '9'))
return (INADDR_NONE);
val = (val * base) + (c - '0');
cp++;
digit = 1;
continue;
}
if (base == 16U && isxdigit((unsigned char)c)) {
val = (val << 4) +
(c + 10 - (islower((unsigned char)c) ? 'a' : 'A'));
cp++;
digit = 1;
continue;
}
break;
}
if (!digit)
return (INADDR_NONE);
if (*cp == '.') {
if (pp >= parts + 4 || val > 0xffU)
return (INADDR_NONE);
*pp++ = val, cp++;
goto again;
}
if (*cp && !isspace(*cp&0xff))
return (INADDR_NONE);
*pp++ = val;
n = pp - parts;
if (n > 4U)
return (INADDR_NONE);
for (val = 0, i = 0; i < n; i++) {
val <<= 8;
val |= parts[i] & 0xff;
}
return (val);
}
 

Como vemos la unica diferencia entre la funcion existemente en FreeBSD y la del Servidor BIND, es que BIND declara las variables mas utilizadas como register, esto es para que sea mas efeciente. Lo cual me da a entender que va a ser un poco diferente la Explotacion de la funcion inet_network(), dentro de aplicaciones comunes de FreeBSD, que la del Servidor BIND.
« Última modificación: 14 Enero 2010, 05:29 por 4n0n » En línea

En la escuela "Temporada Baja"

Blog stack and heap
Mi Windows Live Space
Mi Twitter
Mi Canal Youtube

no free software, no free bugs
Anon
Estudiante y
Moderador
*****
Desconectado Desconectado

Mensajes: 1.897


Anonymous & Paranoid


Ver Perfil WWW
Re: BoF en inet_network(), afecta a Servidor DNS: BIND
« Respuesta #1 en: 25 Enero 2008, 03:06 »

En la pagina de BIND: BIND Vulnerabilities


Impact:

Applications linked against libbind which call inet_network() with untrusted inputs could lead to a denial-of-service or potentially code execution.

Note that none of the applications shipped with BIND 8 or BIND 9 call inet_network().


Veamos La pagina nos dice nuevamente lo mismo Podemos hacer un DoS al servidor BIND, o podemos ejecutar codigo arbitrareo en el equipo que aloja el servidor.


Ahora

Código:
Index: inet_network.c
diff -u inet_network.c:1.5 inet_network.c:1.6
--- inet_network.c:1.5 Wed Apr 27 04:56:21 2005
+++ inet_network.c Tue Jan 15 04:02:01 2008
@@ -84,9 +84,9 @@
  }
  if (!digit)
  return (INADDR_NONE);
+ if (pp >= parts + 4 || val > 0xffU)
+ return (INADDR_NONE);
  if (*cp == '.') {
- if (pp >= parts + 4 || val > 0xffU)
- return (INADDR_NONE);
  *pp++ = val, cp++;
  goto again;
  }

Viendo las diferencias vemos que  la version, 1.5 del archivo vulnerable es casi exactamente lo mismo solo movieron de lugar la siguiente Intruccion:

Código
	if (pp >= parts + 4 || val > 0xffU)
return (INADDR_NONE);

En la version Vulnerable esta dentro del if (*cp == '.') y la version NO vulnerable esta afuera antes de if (*cp == '.'), lo cual me indica que la clave de esto debe estar en saber manejar el formato de entrada con los Puntos '.'. Ya me he impreso el codigo fuente vulnerable y lo estoy analizando paso por paso, ya que no he podido encontrar un input que vulnere el codigo.
« Última modificación: 06 Febrero 2008, 00:00 por Anon » En línea

En la escuela "Temporada Baja"

Blog stack and heap
Mi Windows Live Space
Mi Twitter
Mi Canal Youtube

no free software, no free bugs
Anon
Estudiante y
Moderador
*****
Desconectado Desconectado

Mensajes: 1.897


Anonymous & Paranoid


Ver Perfil WWW
Re: BoF en inet_network(), afecta a Servidor DNS: BIND
« Respuesta #2 en: 30 Enero 2008, 03:01 »

Se que es spam pero como nadie me responde, yo le sigo con el tema, ya que no quiero que mi post se vaya al olvido  :-(



Bien, primero pense que era la variable "val", que sumada al corrimiento de bits que se le hace, podia sobre escribir en la memoria asi que me puse un ejemplo para ver si servia:

Código
int main()	{
unsigned long prueba;
long i;
prueba = 0xf;
i = 0;
while(i < 20) {
printf("Prueba: %i\n",prueba);
i++;
prueba = (prueba << 4) + 0xf;
}
return 0;
}
 

sin embargo no fue asi, me acorde que el corrimiento de Bits se hace en el microprocesador, y el resultado va a la RAM, (Claro que si la variable es register no es asi).  :-( estoy medio perdido.

Por ahi he oido que los BoF del tipo Off-By-One no son explotables, sin embargo tambien he visto ejemplos en casos donde tienes algo de control del entorno  (local) y las condiciones del BoF son casi Optimas, digamos pila Bien alineada capacidad de meter el shell y etc.. el xploit si puede ser posible.

Esto solo me interesa por el reto de poder hacer que una aplicacion Ejecute tu codigo por gusto memeramente educativo.  ;D

Bueno entre las pruebas que estuve haciendo he visto que la aplicacion que tengo de prueba puede recivir cadenas como las que siguen sin colgarse:

Código:
%./test_network 0xfffff00000011.0xfabcd000000003.0xa.0x90
0x11030a90

pero no nos ganamos nada ya que no ponemos nada en la memoria, las ffff se pierden en el corrimiento de bits hacia la izquierda dentro del microprocesador.  :(

Un saludo!!
« Última modificación: 02 Febrero 2008, 02:53 por Anon » En línea

En la escuela "Temporada Baja"

Blog stack and heap
Mi Windows Live Space
Mi Twitter
Mi Canal Youtube

no free software, no free bugs
ChElAnO

Desconectado Desconectado

Mensajes: 113


Ver Perfil
Re: BoF en inet_network(), afecta a Servidor DNS: BIND
« Respuesta #3 en: 30 Enero 2008, 16:19 »

hola, aunke son pocos los que entienden del tema (ya el hech de escribir un exploit te es de nivel) estoy seguro que al igual que yo, muchos estan siguiendo este thread,
aunke no haya respuestas no significa q no haya lectores,

espero q lo puedas lograr y no dejes de postear!!
saludos
En línea
Leber

Desconectado Desconectado

Mensajes: 306


"Las estrellas se apagan..."


Ver Perfil
Re: BoF en inet_network(), afecta a Servidor DNS: BIND
« Respuesta #4 en: 30 Enero 2008, 19:40 »

Anon, como dice chelano, que no haya respuestas no significa que no leamos :D, yo de hecho desde el primer dia que empezaste con este thread que lo voy siguiendo. Lastima es que aun no he alcanzado el nivel suficiente como para poder hablar de este tema, el de los exploits, pero bueno, no descarto que mas adelante pueda.

Sigue escribiendo, que esta interesante.

Saludos
En línea

"Solo los tontos carecen de preucupaciones." Johann Wolfgang Goethe
Anon
Estudiante y
Moderador
*****
Desconectado Desconectado

Mensajes: 1.897


Anonymous & Paranoid


Ver Perfil WWW
Re: BoF en inet_network(), afecta a Servidor DNS: BIND
« Respuesta #5 en: 07 Febrero 2008, 01:41 »

Gracias Leber y ChElAnO por sus comentarios me son de gran animo para seguir adelante  ;D.



Bueno volviendo al tema del Estudio de un bug, y posteriormente el la Creacion de un exploit para el mismo. Lamento informarles que no he dado con nada en este bug pero bueno.

Si nos consentramos en lo que sabemos, lo unico que cambio en la version vulnerable del codigo es que el siguiente fracmento de Cofigo cambio de lugar:
Código
	if (pp >= parts + 4 || val > 0xffU)
return (INADDR_NONE);

De adentro del if, a afuera del mismo:

Version  Vulnerable
Código
	if (!digit)
return (INADDR_NONE);
if (*cp == '.') {
if (pp >= parts + 4 || val > 0xffU)
return (INADDR_NONE);
*pp++ = val, cp++;
goto again;


Version NO Vulnerable
Código
	if (!digit)
return (INADDR_NONE);
if (pp >= parts + 4 || val > 0xffU)
return (INADDR_NONE);
if (*cp == '.') {
*pp++ = val, cp++;
goto again;
 

Ok, aqui lo importante es preguntarnos como cambia el funcionamiento del programa Antes y despues  :huh:.

Bien segun lo he analizado mientras voy en en el camion, mientras como, y hasta mientras sueño  :xD el resultado operativo del codigo sigue siendo el mismo, si no es asi que alguien me lo haga saber y me diga lo ciego que estoy.

Lo unico que noto es que el Procesador se ahorra unas cuantas Instrucciones en caso de que la la Condicion del if sea verdadera, en caso contrareo Todo trabaja Igual.  :rolleyes: o no  :huh:

Bueno hasta el momento hago un recuento de lo que he Conseguido hasta el momento.

Es posible Insertarle un valor Invalido para Obtener un Resultado Valido:

Bueno entre las pruebas que estuve haciendo he visto que la aplicacion que tengo de prueba puede recivir cadenas como las que siguen sin colgarse:

Código:
%./test_network 0xfffff00000011.0xfabcd000000003.0xa.0x90
0x11030a90

pero no nos ganamos nada ya que no ponemos nada en la memoria, las ffff se pierden en el corrimiento de bits hacia la izquierda dentro del microprocesador.    :(

Lo cual puede representar un consumo de recursos en el servidor BIND, o el programa que use la funcion inet_network() vulnerale esto solo en caso de que se le envie constantememente cadenas Invalidas como las que mostre obviamente de mayor longitud ya que el Procesador tendria que estar dentro del mismo ciclo mientras le manden estas cadenas.



Un saludo!!
En línea

En la escuela "Temporada Baja"

Blog stack and heap
Mi Windows Live Space
Mi Twitter
Mi Canal Youtube

no free software, no free bugs
NewLog

Desconectado Desconectado

Mensajes: 324



Ver Perfil WWW
Re: BoF en inet_network(), afecta a Servidor DNS: BIND
« Respuesta #6 en: 10 Febrero 2008, 02:15 »

Lo dicho, nosotros estamos leyendo cada post ^^
En línea
hack-intel

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: BoF en inet_network(), afecta a Servidor DNS: BIND
« Respuesta #7 en: 10 Febrero 2008, 02:40 »

Hola Anon, recien me animo a registrarme en el foro, ya he estado leyendo tus post y la verdad que son Interesantes!!

Deberias de hacer un tuto de como seguir una Vulnerabilidad paso por paso asi como este, pero que sea Mas Generico, desde los link de Busqueda hasta los tipos de Vulnerabilidades que existen etc.

Espero que logres tu exploit, ahora:


Lo cual puede representar un consumo de recursos en el servidor BIND, o el programa que use la funcion inet_network() vulnerale esto solo en caso de que se le envie constantememente cadenas Invalidas como las que mostre obviamente de mayor longitud ya que el Procesador tendria que estar dentro del mismo ciclo mientras le manden estas cadenas.


Quiere decir que aparte de la Vulnerabilidad Off-by-One que se presenta en la funcion inet_network() ahora tambien es vulnerable recibir cadenas Malformadas ?? como las que presentaste  :huh: queire decir que se le puede hacer algun DoS o DDoS al BIND ???

Suerte!!
En línea
Trancek

Desconectado Desconectado

Mensajes: 29


Ver Perfil WWW
Re: BoF en inet_network(), afecta a Servidor DNS: BIND
« Respuesta #8 en: 10 Febrero 2008, 16:24 »

segun escuche no es muy facil hacer exploits funcionales que sean remotos para freebsd, pero de todos modos busca a ver en años cuantos tiene que sean remotos con exploit y ahi veras, no estoy seguro del todo pero creo que pocos.
En línea

Anon
Estudiante y
Moderador
*****
Desconectado Desconectado

Mensajes: 1.897


Anonymous & Paranoid


Ver Perfil WWW
Re: BoF en inet_network(), afecta a Servidor DNS: BIND
« Respuesta #9 en: 11 Febrero 2008, 02:39 »

Lo dicho, nosotros estamos leyendo cada post ^^

Gracias NewLog!!

Deberias de hacer un tuto de como seguir una Vulnerabilidad paso por paso asi como este, pero que sea Mas Generico, desde los link de Busqueda hasta los tipos de Vulnerabilidades que existen etc.

Tal vez luego, me imagino que ya ha de existir uno no ???

Quiere decir que aparte de la Vulnerabilidad Off-by-One que se presenta en la funcion inet_network() ahora tambien es vulnerable recibir cadenas Malformadas ?? como las que presentaste  :huh: queire decir que se le puede hacer algun DoS o DDoS al BIND ???

Probablemente, sin embargo yo no pienso hacer un exploit/aplicacion que haga eso.

segun escuche no es muy facil hacer exploits funcionales que sean remotos para freebsd, pero de todos modos busca a ver en años cuantos tiene que sean remotos con exploit y ahi veras, no estoy seguro del todo pero creo que pocos.

Efectivamente Trancek, no hay muchos exploits par FreeBSD en comparacion de los que hay para Linux o no se diga Windows  ;D, pero si lees todo con mas calma te daras cuenta de que no solo afecta a FreeBSD, afecta a muchas Distro de Linux y tambien a la mayoria de los Servidores BIND que usen la funcion Vulnerable. Aparte que cualqueir aplicacion que use la funcion en cuestion inet_network() es afectada.
En línea

En la escuela "Temporada Baja"

Blog stack and heap
Mi Windows Live Space
Mi Twitter
Mi Canal Youtube

no free software, no free bugs
Anon
Estudiante y
Moderador
*****
Desconectado Desconectado

Mensajes: 1.897


Anonymous & Paranoid


Ver Perfil WWW
Re: BoF en inet_network(), afecta a Servidor DNS: BIND
« Respuesta #10 en: 11 Febrero 2008, 03:21 »

Bien este sera mi ultimo mensaje en este Topic, referente al estudio de este bug, después solo contestare dudas y comentarios.

¿Por que?

Por que debido a que la función en C, es muy Rápida/Eficiente debido a su corto código y gran manejo avanzado de C, genera un código en ensamblador muy Óptimo. Debido a esto y lo poco descubierto hasta ahora, el rendimiento de cualquier aplicacion que use inet_network() como BIND en este caso, no se va a ver tan afectado en gran medida, al menos que se use a manera DDoS o teniendo un gran ancho de Banda puede ser posible.

Sin embargo escribir un exploit/aplicacion que realize el esto se me hace muy Lamer.

Lo ideal seria crear un exploit para obtener acceso al servidor mediante un remote shell o algo parecido, sin embargo como no fue posible encontrar una manera de corromper la pila, tampoco es posible crear el exploit.

Ahora que si alguien quiere realizar dicho exploit/aplicacion solo por practica/conocimiento/interés contra un servidor del cual sea dueño. aquí y en los link presentados esta toda la información necesaria para realizarlo, bueno aparte de sus conocimientos de programacion.

Doy por concluida mi participacion en este tema ya que le he dedicado mucho tiempo en analizar el código, ya me lo se de memoria :P y se me a hecho infructuoso cumplir mi cometido de realizar un exploit para la función inet_network() vulnerable, sin embargo me queda la satisfacción de haber encontrado una debilidad al código de la función el cual puede representar un pequeño consumo del procesador en cualquier aplicacion que utilice la función mencionada.

Cualquier duda y/o comentario favor de ponerlo en este topic.

Un especial agradecimiento a todos aquellos que me apoyaron en el Topic y por PM Gracias!!

Un saludo a todos.
En línea

En la escuela "Temporada Baja"

Blog stack and heap
Mi Windows Live Space
Mi Twitter
Mi Canal Youtube

no free software, no free bugs
Anon
Estudiante y
Moderador
*****
Desconectado Desconectado

Mensajes: 1.897


Anonymous & Paranoid


Ver Perfil WWW
Re: BoF en inet_network(), afecta a Servidor DNS: BIND
« Respuesta #11 en: 31 Octubre 2008, 18:00 »

Bueno, el tema ya es viejo y se dio por cerrado sin embargo quiero agregar que la funcion inet_network() es extremadamente eficiente, y el consumo de recursos que se llego a mencionar es realmente bajo.

Código
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
 
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
 
 
#define GB 1024*1024*1024
#define MB 1024*1024
#define KB 1024
 
#define SIZE 512*MB
#define C SIZE/4
 
char * zeroX = "0x";
char * dotZeroX = ".0x";
 
int main(voidman) {
char *buf = (char*) calloc(SIZE,sizeof(char));
in_addr_t  net;
if(buf == NULL) {
fprintf(stderr,"No se puede asignar memoria prueba con memos memoria\n");
}
else {
 
memset(buf,70,SIZE-1);
memcpy(buf,zeroX,2);
memcpy(buf + C-1,dotZeroX,3);
memcpy(buf + 2*C-2,dotZeroX,3);
memcpy(buf + 3*C-2,dotZeroX,3);
net = inet_network(buf);
//printf("Buffer: en 0x%x\n\n%s\n",buf,buf);
printf("\nDireccion de Red: 0x%x\n",net);
}
return 0;
}
 

Llege a probarlo, mandandole un 1GB y 2 GB de un String, y gasto yo mas tiempo generando el String, que la funcion inet_network() procesandolo. ademas que seria imposible hacer una consulta a un DNS con una Direccion de 2GB.

Saludos
En línea

En la escuela "Temporada Baja"

Blog stack and heap
Mi Windows Live Space
Mi Twitter
Mi Canal Youtube

no free software, no free bugs
Ivanchuk

Desconectado Desconectado

Mensajes: 306


Petit herisson, tu me regardes?


Ver Perfil
Re: BoF en inet_network(), afecta a Servidor DNS: BIND
« Respuesta #12 en: 26 Enero 2009, 20:01 »

Holas gente,
Se que paso mucho tiempo que nadie postea en este thread, lo mire y me intereso bastante. Estan muy buenos este tipo de reportes y estudios de bugs. Me puse a verlo y es interesante, no hay por que esperar un core dump ahi, es simplemente un off-by-one, que a veces se puede volver interesante, o sea agarrar ebp y controlar el frame del caller, pero en este caso no sirve de mucho (arg = "12.12.12.12.12"). La piojosa variable que se puede controlar es val, y que encima coincide con el valor a calcular :¬¬. Ahi copie el code que hiciste Anon y lo debugee, lo lleve hasta la linea 58.
Gdb dice:
Código:
(gdb) s
58              *pp++ = val;
(gdb) p pp
$1 = (in_addr_t *) 0xbf9b586c
(gdb) p &val
$2 = (in_addr_t *) 0xbf9b586c
O sea que se esta por escribir a la misma dir donde se encuentra val.
Viene de un mal chequeo en
Código:
if (pp >= parts + 4 || val > 0xffU)
return (INADDR_NONE);
*pp++ = val, cp++;
Escribiendo 5 numeros de dir ip pasa el chequeo del if e incrementa pp, para despues bugearse aca,
Código:
*pp++ = val;
n = pp - parts;
if (n > 4U)
return (INADDR_NONE);
Pero como n>4U retorna error, igualemente alcanzo a producirse el off-by-one. De ahi que subieron el chequeo fuera del if, para evitar esa ultima escritura.
Saludos.
« Última modificación: 26 Enero 2009, 20:03 por Ivanchuk » En línea

Sólo quien practica lo absurdo puede lograr lo imposible.
Páginas: [1] Ir Arriba Imprimir 
Ir a:  





Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

Yashira.org    Videojuegos    indetectables.net    Seguridad Informatica Colombia    Indejuegos    Internet móvil

Noticias Informatica    Seguridad Informática    ADSL    eNYe Sec    Seguridad Wireless    Underground México    Biblioteca de Seguridad

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC