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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking
| | |-+  Bugs y Exploits
| | | |-+  El compiler pareciera agregar algo entre variables de la stack desviando return
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: El compiler pareciera agregar algo entre variables de la stack desviando return  (Leído 10,403 veces)
harry_the_blogger

Desconectado Desconectado

Mensajes: 105


Visita mi blog es enriquemesa.blogspot.com


Ver Perfil WWW
El compiler pareciera agregar algo entre variables de la stack desviando return
« en: 3 Enero 2015, 23:36 pm »

Hola. Edito mi pregunta para ser más preciso: Mi duda es: Puede el compilador agregar algo "de más" entre variables de la stack???

Tengo un Tiny C Compiler, sin protecciones ni a nivel de compilador ni a nivel de Windows XP.

Puede ser que algo llamado "alignment" esté haciendo fallar mi exploit?? He enviado la cantidad de bytes necesarios para desbordar mi propio TCP server. Cuando el buffer destino es de 20 bytes, funciona. Pero si es de 60, no lo hace.

Y estoy enviando la cantidad de bytes necesarios para desbordarlos + la shellcode, así, que en teoría debería hacer lo que quiero, pero en la práctica salta hacia un ret addr extraño.

Adjunto links a un sitio de tipo pastebin, para no abrumar aqui en el foro.
Aqui les dejo mis codigos fuente:

Todos ellos funcionan si el buffer small es de 20 y el big de 30. Cambiando el valor de ambos por 60 y 120, no funcionan. Ahi están mis sources, por si alguien los quiere ver.

(Uso winsock2.h, si alguna cosa lo renombran sin el 2)

Mi TCP server (source escrito por mi)
http://tny.cz/2dc66ee0

Mi TCP exploit
http://tny.cz/dc9295ba

Mi shellcode
http://tny.cz/c4426347

Aqui está el programa objetivo, ya compilado, a peticion de un usuario. Para que no digan que es que uno quiero que resuelvan por mi.
https://drive.google.com/file/d/0Bxshgu4STp1aUXpsYmMySWhqS3c/view?usp=sharing

Gracias de antemano por su atencion.
« Última modificación: 10 Enero 2015, 01:06 am por harry_the_blogger » En línea

Vista mi blog es enriquemesa.blogspot.com
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: Mi exploit funciona si el buffer tiene un tamaño pequeño, si es más grande, no.
« Respuesta #1 en: 5 Enero 2015, 00:09 am »

¿Cual es tu pregunta?  :laugh:
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
harry_the_blogger

Desconectado Desconectado

Mensajes: 105


Visita mi blog es enriquemesa.blogspot.com


Ver Perfil WWW
Re: Mi exploit funciona si el buffer tiene un tamaño pequeño, si es más grande, no.
« Respuesta #2 en: 6 Enero 2015, 02:18 am »

Mi pregunta es: ¿Estará el compilador cambiando algo que afecte la posicion de las variables??? en la pila??

Estoy usando Tiny C Compiler sin proteccion alguna, en Windows XP.

Es como si ebp y eip hubiesen sido movidos. Sera que el alineamiento de las variables hara algun efecto??

Es un small buffer de 60 bytes, y luego uno de 120 bytes. El mas peque declarado primero, y luego el otro.

Editare el post si es necesario.
En línea

Vista mi blog es enriquemesa.blogspot.com
Gh057


Desconectado Desconectado

Mensajes: 1.190



Ver Perfil
Re: Mi exploit funciona si el buffer tiene un tamaño pequeño, si es más grande, no.
« Respuesta #3 en: 6 Enero 2015, 03:37 am »

Perdón pero no entiendo... si aumentas el buffer que recibe, es lógico que no consigas el overflow... o me equivoco? No estás indicando justamente eso?
En línea

4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...
harry_the_blogger

Desconectado Desconectado

Mensajes: 105


Visita mi blog es enriquemesa.blogspot.com


Ver Perfil WWW
Re: Mi exploit funciona si el buffer tiene un tamaño pequeño, si es más grande, no.
« Respuesta #4 en: 6 Enero 2015, 04:51 am »

Hola amigos, disculpen por ser tan impreciso, (editare ahora la pregunta).

Digamos que tengo un buffer de 20 bytes. Ahi pongo la shellcode + los bytes basura.
Y tengo exito.

Pero si tengo un buffer de 60 bytes, y lo lleno con shellcode + los bytes basura necesarios para desbordarlo y todo eso, se desborda pero no con el dato que le quise cargar.

Es como si el buffer tuviera bytes "de más" o algo asi. No sé como explicarlo, pero así me parece que es. Adjuntaré los sources en un sitio de parecido a pastebin, para que lo vean (no uso pastebin porque en mi pais pareciera estar bloqueado...)

Gracias por su atencion, y ahora editare la pregunta.

Puede estar una cosa llamada "aligment" interfiriendo aqui?? Estoy leyendo sobre eso, pero no estoy seguro y no soy muy ducho en estos temas.

« Última modificación: 6 Enero 2015, 05:15 am por harry_the_blogger » En línea

Vista mi blog es enriquemesa.blogspot.com
dRak0

Desconectado Desconectado

Mensajes: 234


Ver Perfil WWW
Re: El compiler pareciera agregar algo entre variables de la stack desviando return
« Respuesta #5 en: 7 Enero 2015, 04:35 am »

No entendi muy bien tu pregunta , si te referis a hacer overflow en big_buffer , viendo un poco el codigo:

Código
  1. while((ret = recv(from_client_socket, big_buffer, sizeof(big_buffer), 0)) > 0) {
  2.        strcpy(small_buffer, big_buffer);
  3.  

Creo que el big_buffer lo limitas como se debe hacer , entonces no podes desbordar nada.
Desbordas cuando haces el strcpy de big_buffer a small_buffer  sin comprobar el tamaño.

Lo mire por arriba , posiblemente me equivoque.

Si tu problema es el calculo del buffer , desensambla el server y mira como lo ensamblo tu compilador , cuanto espacio va a reservar en el stack para esas variables , y luego calcula.
« Última modificación: 7 Enero 2015, 04:49 am por L0RdP3I » En línea

harry_the_blogger

Desconectado Desconectado

Mensajes: 105


Visita mi blog es enriquemesa.blogspot.com


Ver Perfil WWW
Re: El compiler pareciera agregar algo entre variables de la stack desviando return
« Respuesta #6 en: 7 Enero 2015, 14:59 pm »

LORdP3I:
Si tienes razón en decir que solo se desborda con strcpy(...). Y lo hice así porque pensé que sería más fácil de depurar con Olly si usaba un TCP.

Encontré algo curioso: He intentado variar un poco la shellcode, y depende de lo que sea funciona o no. No sé si esto tendrá que ver con el alignment. Solo le agregue una instruccion más, y dejo de funcionar. Estoy rellenando con basura hasta sobreescribir EBP, y poner EIP con mi valor deseado.

(Hecho con Flat Assembler)

Shellcode que NO funciona. (21 bytes)

Código
  1. use32
  2.  
  3. mov eax, 0xDEADBEEF
  4. mov ebx, 0xDEADBEEF
  5. mov ecx, 0xDEADBEEF
  6. mov edx, 0xDEADBEEF
  7. int3
  8.  
  9.  

Shellcode que si funciona: (15 bytes)

Código
  1. use32
  2.  
  3. mov eax, 0xDEADBEEF
  4. mov ebx, 0xDEADBEEF
  5. mov ecx, 0xDEADBEEF
  6. int3
  7.  
  8.  

He hecho todo lo posible para hacer funcionar la que es un poco más larga, pero no deja de falla. No sé si tendrá que ver con los bytes que contiene la shellcode 2, pero la revisé no hay ningún nulo por ahí. En teoría debería funcionar.

Será que habrá otros caracteres que puedan detener strcpy??? Revisé y no hay nulos allí, no sé si habrá otro que interfiera.

Estoy en proceso de entender la parte en donde reserva espacio en stack, pero el codigo es un poco largo y no lo encuentro. Supongo que sería un sub esp, x bytes, o no???

Bueno, espero su respuesta. Seguiré leyendo sobre como sacarle provecho a Olly en encontrar subrutinas.
« Última modificación: 7 Enero 2015, 21:42 pm por harry_the_blogger » En línea

Vista mi blog es enriquemesa.blogspot.com
dRak0

Desconectado Desconectado

Mensajes: 234


Ver Perfil WWW
Re: El compiler pareciera agregar algo entre variables de la stack desviando return
« Respuesta #7 en: 7 Enero 2015, 22:51 pm »

No deberia ser muy dificil :
.Rastrear el call a vulnerable()
Vas a ver :
.Prologo(Para crear el stack frame)push ebp mov ebp,esp
.Reseva espacio(Quizas alinea antes para que sea mas eficiente el proceso de lectura de memoria)sub esp,0xALGO
.Acciones que hace vulnerable()
.Epilogo(Libera argumentos si es que tiene(debido a la convencion de parametros) , vuelve a main)

Si tu shellcode no tiene bytes null , no deberia suceder nada raro con ella.
Partiendo de la premisa que tenes espacio para ella.
Si no tenes espacio , ya tenes que recurrir a otras tecnicas.(egg hunting).

En fin , debe ser que el compilador te esta alineando para que sea mas veloz la lectura de datos en memoria.Si bien recuerdo el parametro -a te permitia configurar el alignment.Pero es buena practica fijarse en el olly o en algun desensamblador(IDA), ver como lo alineo, ya que si te dan el binario y no el source , ¿como haces?

Perdona mi ignorancia , no soy de explotar mucho en windows.

« Última modificación: 7 Enero 2015, 22:56 pm por L0RdP3I » En línea

harry_the_blogger

Desconectado Desconectado

Mensajes: 105


Visita mi blog es enriquemesa.blogspot.com


Ver Perfil WWW
Re: El compiler pareciera agregar algo entre variables de la stack desviando return
« Respuesta #8 en: 8 Enero 2015, 01:39 am »

LORDPEI:

Oye, he estado tanteando y encontré que el programa reserva 280 bytes de stack, aparentemente (tomando tal cual el valor que me dio Olly, que no sé realmente si es decimal o hexadecimal). Pienso yo que está bien, aunque me costóp un poco seguir la subrutina.

Bueno, pareciera ser el alignment: ¿Puedes ayudarme a lograr que mis shellcodes no fallen por culpa de esto?? Reemplaze las 'A' de relleno por NOPs, pero igual.

Hice un cambio en la shellcode, agregando unas cuantas instrucciones, y funciona. Pero pareciera depender del tamaño de la shellcode: Hice una de 26 bytes, y funciona. Hice otra como de 15 bytes, y funciona.

Pero una de 21 bytes, y no funciono, saltando a una direccion rara que no tengo ni idea de donde salió.

Es como si el "tamaño" la afectara. ¿Como puedo lograr que la shellcode se ejecute bien a pesar del tamaño??? No puedo andar modificando el programa vulnerable, porque si fuera uno real no puedo.

He mirado lo que he hecho, y pareciera estar bien: Rellene con basura hasta alcanzar el limite, hay espacio suficiente, cargue bien la shellcode y la envié...Pero nada.

Importante:
Estoy usando FASM como ensamblador, y Tiny C Compiler. No sé si eso puede afectar, aunque lo compile con GCC e igual falla.

Gracias por tu ayuda, perdona por el mensaje extenso.
« Última modificación: 8 Enero 2015, 01:45 am por harry_the_blogger » En línea

Vista mi blog es enriquemesa.blogspot.com
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: El compiler pareciera agregar algo entre variables de la stack desviando return
« Respuesta #9 en: 8 Enero 2015, 03:36 am »

Puedes subir el programa compilado? el que hay que explotar? saludos
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pasar variables Entre Aplicaciones (SRC)
Programación Visual Basic
Dessa 2 5,299 Último mensaje 10 Febrero 2009, 18:00 pm
por Karcrack
Diferencia entre variables predefinidas [Batch]
Scripting
Nilrac 1 4,290 Último mensaje 12 Agosto 2010, 22:33 pm
por leogtz
Implementar Stack Trace (Walk through stack)
ASM
kub0x 5 3,700 Último mensaje 16 Marzo 2014, 19:21 pm
por Arkangel_0x7C5
Función con return de varias variables
Programación C/C++
Palante 1 1,886 Último mensaje 11 Febrero 2017, 02:29 am
por engel lex
[Aporte]Return en php - Devolver variables y arreglos desde funciones en PHP
PHP
korko 0 2,249 Último mensaje 7 Febrero 2021, 05:28 am
por korko
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines