miércoles, febrero 07, 2018

IRB: Pentesting desde el intérprete de Ruby en Metasploit

Hoy hablaré sobre una parte menos conocida de Metasploit y es la posibilidad de utilizar el IRB, o intérprete de Ruby, con el objetivo de entender que está ocurriendo por debajo. Esto es algo realmente útil, por ejemplo, cuando queremos escribir algún script para Meterpreter. En otras palabras, es muy recomendable entender lo que ocurre por debajo en esas capas y capas que tiene este magnífico framework. En otras ocasiones hemos trabajado con automatizaciones sobre RPC, lo cual era utilizado, por ejemplo, por Armitage.

Figura 1: IRB: Pentesting desde el intérprete de Ruby en Metasploit

Cuando tenemos una sesión de Meterpreter se puede obtener un intérprete de Ruby directamente con el que podemos interactuar, es decir, de manera directa con la máquina comprometida o dónde se tenga la sesión en curso. El artículo de hoy hablaré sobre qué cosas podemos construir e investigar gracias al IRB. Quería aprovechar que esta parte de Metasploit es mucho menos conocida que el uso de la herramienta y recordar que habrá un Rooted Lab sobre Metasploit en Rooted CON 2018.

Figura 2: En los Rootedlabs puedes usar los libros de
"Metasploit para pentesters 4ª Edicion" & "Ethical Hacking" como apoyo

El IRB puede utilizarse como primer elemento para ir probando diferente código y opciones y construir, de esta forma, diferentes scripts de Meterpreter. Además, el comando irb se encuentra disponible también desde la consola de Metasploit, pudiéndose utilizar también en el ámbito de la consola. Con él tenemos acceso a objetos, métodos y otros comandos interesantes:

Figura 3: Comando irb en la consola de Meterpreter
  • Objeto client: Este objeto representa la máquina comprometida y proporciona la mayoría de las acciones que podremos ir construyendo. Para entender las posibilidades que nos ofrece el objeto client, se puede ejecutar el método client.methods. Los primeros valores que nos devuelve la llamada client.methods son referentes a librerías que pueden ser utilizados con un gran número de funcionalidades: ui, fs, core, sys, priv, railgun, net o webcam.
  • Método commands: Este método reporta una serie de comandos disponibles desde el objeto client. Por ejemplo, si se ha cargado una extensión previamente, se dispondrá de los comandos que ofrece esta extensión también en el resultado de la ejecución de client.commands.
  • Context y Extensions:  Se pueden ejecutar con nuestro IRB. No son métodos del objeto client. El primero de ellos muestra atributos configurados sobre el workspace de Metasploit en el que estamos trabajando. El segundo muestra una serie de extensiones que se encuentran cargadas.
Ahora vamos a ver un ejemplo de uso de IRB para sacarle más partido a nuestro querido Metasploit en un trabajo de Ethical Hacking

Trabajando con el objeto client

Podemos interactuar con la máquina comprometida a través de este objeto directamente. Antes hemos ejecutado client sobre el IRB y nos han devuelto que existe una sesión contra una máquina, en este caso Windows 7, y con una identidad concreta, en este caso SYSTEM.

También hemos comentado los diferentes métodos que nos proporcionaba el comando methods, por lo que es hora de mostrar algo más. El primer ejemplo es ver hasta dónde podemos llevar con la librería fs. Para ello, ejecutamos client.fs y observamos que tiene tres clases y una extensión.

Figura 4: Ejecución de client.fs

Si ejecutamos client.fs.dir ya vemos que es un elemento final, en este caso, una clase. En ambas ejecuciones podríamos haber hecho uso del método “methods” para ver qué métodos existen alrededor de estos elementos.

Figura 5: Ejecución de client.fs.dir

Para ejemplificar un poco más, vamos a utilizar sys a través del objeto client para ver qué cosas podemos utilizar. En la imagen, se puede ver como hay varias clases:
  • process, la cual estará relacionada con la gestión de procesos de la máquina comprometida. 
  • registry, la cual nos permitirá realizar gestiones y manipulaciones en el registro.
  • eventlog, la cual nos permitirá leer y modificar el registro de eventos de Windows.
  • power, con la que podremos realizar operaciones de apagado de la máquina.
Además, se puede ver que hay un contexto proporcionado por sysinfo en el que se muestran datos de la máquina como el nombre de la máquina, la identidad del proceso, la arquitectura, el lenguaje, el dominio, el número de usuarios con sesión iniciada en la máquina, etcétera.

Figura 6: Ejecución del comando client.sys

En este caso, podemos ver qué métodos tiene client.sys.process ejecutando client.sys.process.methods. Vemos que hay diferentes métodos como kill, open, close, get_processes, get_pid, entre otros. Para mostrar de manera sencilla los procesos que hay ejecutándose en el sistema lanzamos la instrucción client.sys.process.get_processes y almacenamos su salida en una variable. Los resultados que proporciona el método son devueltos a través de una lista, por lo que fácilmente podemos ejecutar la sentencia:
procesos.each do |p|
print_line “PID: #{p[‘pid’]} Nombre: #{p[‘name’]}”
end
Figura 7: Ejecución del script con irb

Manejarse con el IRB a la hora de programar scripts de Meterpreter y módulos de Metasploit se ve indispensable y en el Lab de Rooted CON lo veremos. Puedes ver más sobre Meterpreter en el Github que Rapid7 ha publicado solo para él. Un interesante mundo que permite automatizar cualquier acción que se os ocurre en post-explotación. Crea tus propios scripts en Meterpreter, y luego súbelo al Github de Metasploit.

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en ElevenPaths

No hay comentarios:

Publicar un comentario