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.
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