Explotando un Integer Overflow

Iniciado por integeroverflow, 24 Febrero 2017, 02:18 AM

0 Miembros y 1 Visitante están viendo este tema.

integeroverflow

que tal. la cosa es asi.

descubri una vulnerabilidad (quizas?) en un programa que funciona como cliente.
este consiste en una lista de servidores que uno puede agregar o quitar especificando la direccion ip y el puerto de escucha.

programe un servidor que responde a las consultas de este cliente, como si fuese un servidor legitimo del programa, pero al responder la consulta envio un entero demasiado largo (long long) que produce que el cliente muestre el mensaje de "integer overflow" y se cierre (crash).

mi idea seria, reemplazar el instruction pointer ingresando la direccion de memoria de donde empieza el paquete, enviando al inicio del paquete una shellcode que realize X accion.

seria esto posible?
que requisitos se deben presentar para poder reemplazar el IP de manera exitosa con un integer overflow?

se me ocurria algo como esto:

char X[] = "adsjkhdsakljhdsajklhdsakljhdsajklhdsakjlsdahjklsdahjklsdahjklsdhjkldshkjdlashdasjlkhakjhlkjsadhaslkjhs\x56\x54\x53\x53";
long long overflow = *(long long*) &X;

es decir, castear el payload a long long para que al desbordarse el entero en el instruction pointer quede la direccion de memoria del inicio del paquete, funcionaria de la manera que yo creo?

gracias.
disculpen si hay algo que ignoro, todavia soy nuevo en esto de explotar vulnerabilidades.

engel lex

no entiendo para que quieres atacar el cliente si tienes completo acceso a el :s si quieres atacar el servidor, lo que debes hacer es analizar la estructura de paquete enviado por el cliente y crear tu propio cliente... si quien hizo el programa sabe de programación, el servidor estará configurado bien y el cliente no te dará ningún permiso especial
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

integeroverflow

Cita de: engel lex en 24 Febrero 2017, 02:28 AM
no entiendo para que quieres atacar el cliente si tienes completo acceso a el :s si quieres atacar el servidor, lo que debes hacer es analizar la estructura de paquete enviado por el cliente y crear tu propio cliente... si quien hizo el programa sabe de programación, el servidor estará configurado bien y el cliente no te dará ningún permiso especial

mi idea es meter un shellcode que descargue e instale mi programa para hacerlos parte de una botnet.

entonces solo tendria que publicar la ip en lugares donde haya gente que utilize este cliente (es un juego), invitarlos a jugar, pero con solo agregar la ip del servidor descargarian y ejecutarian mi programa, se entiende?
cabe destacar que la gran mayoria de usuarios ejecuta el programa como administrador ya que hay ciertos problemas de compatibilidad con las versiones nuevas de windows.

sobre la vulnerabilidad, lo que intento hacer seria posible?

engel lex

no, tu estás explotando el programa no el servidor... son cosas mu diferentes... es como tratar de explotar la seguridad de fb vulnerando tu navegador...

ve que tipo de peticiones hace el programa al servidor, si el servidor le da permisos especiales al programa, haces tu propio programa para mandar peticiones al servidor y listo...

Citarpero con solo agregar la ip del servidor descargarian y ejecutarian mi programa

eso dependería muchisimo del tipo de servidor... y creeme si es una empresa algo respetable, que tenga por lo menos un encargado de seguridad, notaran algo raro en cosa de horas (o minutos)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

integeroverflow

Cita de: engel lex en 24 Febrero 2017, 02:50 AM
no, tu estás explotando el programa no el servidor... son cosas mu diferentes... es como tratar de explotar la seguridad de fb vulnerando tu navegador...

ve que tipo de peticiones hace el programa al servidor, si el servidor le da permisos especiales al programa, haces tu propio programa para mandar peticiones al servidor y listo...

eso dependería muchisimo del tipo de servidor... y creeme si es una empresa algo respetable, que tenga por lo menos un encargado de seguridad, notaran algo raro en cosa de horas (o minutos)

creo que no me estas entendiendo...
yo lo que quiero explotar es el cliente, utilizando un servidor programado por mi que responde las consultas de cualquier cliente que quiera comunicarse con mi servidor. ahi es donde envio el paquete que produce el integer overflow, desde el servidor que YO programe.

lo que quiero lograr es ejecutar codigo en cualquier cliente que se comunique con mi servidor, enviandole un paquete que produzca el desborde del entero y ejecute el shellcode, con el objetivo de instalar malware en todas las pc que agreguen mi "servidor" a su lista de servidores en su cliente. se entiende?

no me interesa vulenrar ningun servidor real de este programa. el CLIENTE es mi objetivo.

Funcionamiento normal:
SERVIDOR LEGITIMO
-Cliente 1 : envia y recibe datos normalmente
-Cliente 2 : envia y recibe datos normalmente
-Cliente 3 : envia y recibe datos normalmente

SERVIDOR FALSO (el que programe)
-Cliente 1: envia informacion y recibe el paquete mal formado -> Integer overflow -> Se ejecuta el shellcode y se infecta con mi malware
-Cliente 2: envia informacion y recibe el paquete mal formado -> Integer overflow -> Se ejecuta el shellcode y se infecta con mi malware
-Cliente 3: envia informacion y recibe el paquete mal formado -> Integer overflow -> Se ejecuta el shellcode y se infecta con mi malware

engel lex

ya! ahora si se entiende jejeje

ahora, cual es tu propuesta como tal?

si es posible? dependerá de la estructura del programa... aunque probablemente si te indica un overflow explicitamente lo más seguro es que si tiene protección y se cierra para asegurarse... normalmente ante el overflow o crashearía directamente (o con un mensaje inexacto), tendría un comportamiento inesperado o no reaccionaría en lo obsoluto
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

integeroverflow

Cita de: engel lex en 24 Febrero 2017, 03:10 AM
ya! ahora si se entiende jejeje

ahora, cual es tu propuesta como tal?

si es posible? dependerá de la estructura del programa... aunque probablemente si te indica un overflow explicitamente lo más seguro es que si tiene protección y se cierra para asegurarse... normalmente ante el overflow o crashearía directamente (o con un mensaje inexacto), tendría un comportamiento inesperado o no reaccionaría en lo obsoluto

a decir verdad, el programa no crashea. yo lo hago crashear respondiendo con 15-20 paquetes. use este servidor para joder a unos amigos ya que al agregar mi servidor falso se les cerraba el cliente y al volver a arrancar el cliente teniendo mi servidor agregado volvia a enviar la consulta y se volvia a cerrar. haciendo que tengan que reinstalarlo jajajaja.

la cosa es asi, si respondo la consulta con el entero demasiado grande, sale el mensaje que dice "Integer overflow", pero el programa no se cierra. lo que hago para crashear el cliente es responder la consulta enviando ese paquete mal formado unas cuantas veces (20 veces), lo que produce que salgan muchas ventanas de "integer overflow" y crashee el programa.

ahora me pregunto, si ese MessageBox que sale diciendo "integer overflow" significara que esta protegido.

como deberia proceder para intentar reemplazar el ip?