Hace unas semanas
estuve viendo una herramienta denominada Ranger,
la cual estaba escrita en Python y me
quedé sorprendido del potencial que ofrecía. Ranger, la cual está disponible en Github para
su descarga, es una herramienta que permite acceder e interactuar con sistemas
remotos basados en Microsoft Windows. Según se indica en el manifiesto de su
sitio web el proyecto conceptualmente fue el de no reinventar la rueda, si no
hacerlo más eficiente. A la par que sus autores intentaban realizar acciones de
forma eficiente, se conseguía centralizar diferentes herramientas y
funcionalidades en una, tal y como se verá más adelante.
Ranger es una herramienta de
línea de comandos utilizada en test de intrusión, generalmente. Con ella
podemos realizar diferentes ataques contra sistemas Windows. Por ejemplo, de un
usuario del que se conoce el hash o un conjunto de hashes, podrían ser
utilizados con el objetivo de ganar y obtener acceso al sistema. Este tipo de
ataques lo hemos visto con Powershell Empire en un par de artículos como
fueron: Powershell
Empire – Post Explotación++ y Powershell
Empire – El imperio contraataca.
Con Ranger podemos lograr realizar un gran
número de cosas muy útiles en un pentest,
sobre todo cuando nos bloquean el uso de ciertas herramientas. A continuación
se enumeran algunas de las acciones que más pueden llamar la atención de un pentester:
-
Extraer credenciales en texto
plano fuera del ámbito de la memoria de un sistema.
-
Acceder al contenido de la SAM.
-
Ejecutar comandos de forma remota.
-
Ejecutar scripts de Powershell o binarios de Windows.
-
Bypassear la mayoría de soluciones IPS que
podemos encontrar, lo cual, solo por este hecho, merece la pena probarla.
La herramienta está
relacionada con los repositorios de PowerView,
Powershell Mimikatz y impacket teams.
Ahora vamos a ver cómo es de fácil realizar la instalación de la herramienta.
Simplemente hay que utilizar un git clone
del repositorio y ejecutar python ranger.py
–update para actualizar la herramienta a la última versión. Ranger utiliza dos elementos
fundamentales para entender su estructura. Por un lado, nos encontramos con el
método y por otro el ataque. Un método es una vía, protocolo o forma de
realizar una acción. El ataque implementa la acción que se quiere llevar a
cabo, por ejemplo la ejecución de un comando en la máquina remota a través de
un método (o vía).
Hay un par de
métodos que, además, son ataques. Estos son: scout y secrets-dump. Scout permite identificar usuarios
logados en la máquina remota. Por otro lado secrets-dump
nos permite extraer los hashes almacenados en la SAM, enumera usuarios del
sistema y almacena en el fichero credential_matrix
las credenciales obtenidas, en la mayoría de los casos hashes. Existen cuatro métodos que se enumeran a
continuación, y que son realmente conocidos por los pentesters:
-
Wmiexec. Se utiliza el protocolo de
instrumentación WMI para ejecutar comandos de forma remota.
-
Psexec. Un clásico para ejecutar procesos
remotos bajo autenticación SMB.
-
Smbexec. Permite ejecutar procesos y órdenes a
través del protocolo SMB.
-
Atexec. Permite ejecutar un ataque o comando a
través de la herramienta atexec.
Hay una gran
cantidad de ataques que pueden ser utilizados con Ranger a través de los métodos. Los ataques, según los creados de
la herramienta, se pueden dividir en invocadores, ejecutores y descargadores. A
continuación se enumeran los diferentes ataques que se pueden llevar a cabo:
-
Invoker. Ejecuta el script de Mimikatz para Powershell sobre la máquina remota.
-
Downloader. Configura el comando para utilizar
el módulo de Metasploit exploit/multi/script/web_delivery.
-
Executor. Ejecuta un script de Powershell.
-
Command. Ejecuta un comando que se indique.
Por defecto se ejecuta un cmd.exe.
Por esta razón, y como se verá más adelante, cuando utilizamos Psexec u otro método, por defecto se
obtiene una cmd.exe remota.
-
Domain-group-members. Identifica, a través de Powershell, miembros de un dominio.
-
Local-group-members. Identifica miembros de un
grupo local de la máquina.
-
Otras funciones basadas en scripts de Powershell que interactúan con el dominio y la máquina Windows con
el objetivo de recopilar más información.
PoC: Jugando con los métodos
Una de las primeras
pruebas que se pueden hacer es utilizar un método clásico. Uno de los métodos
más utilizados históricamente, con casi toda certeza, es el de psexec. Como se puede visualizar en la
imagen es fácil conseguir una shell a
través del uso de los hashes,
previamente obtenidos tras la explotación de una vulnerabilidad o reutilización
de hashes de una máquina. Los
parámetros base son –u para el usuario, -p para el password o hashLM:hashNT,
-d para el dominio o grupo de trabajo y –t para el target. Simplemente, hay que añadir el tipo de método que
utilizaremos, en este caso psexec.
En el siguiente ejemplo se puede ver cómo,
simplemente, modificando el método y utilizando smbexec se puede lograr el mismo resultado, es decir, obtener una shell. Hay que recordar que si
utilizáramos el parámetro –c o –command podríamos indicar qué orden o
instrucción debe ejecutarse por parte de Ranger
en la máquina remota.
En el siguiente
ejemplo utilizamos el método wmiexec
para conseguir acceso a la máquina remota con el hash que se puede ver en la imagen. En este caso, en vez de
ejecutar el comando por defecto, se utiliza whoami
como instrucción, por lo que la salida es distinta a la que se había obtenido
en casos anteriores.
PoC:
Jugando con Web Delivery de Metasploit y Ranger
En esta prueba de
concepto se propone un escenario dónde el pentester
invoque desde Ranger la operación de
descarga desde un recurso web, el cual habrá sido creado con Metasploit y el
módulo exploit/multi/script/web_delivery.
Con este módulo podremos configurar el código que será descargado y ejecutado
en la máquina remota.
A continuación
explicamos los roles y máquinas que participan en esta pequeña prueba de
concepto:
-
Pentester con máquina, por ejemplo,
Kali Linux en el que está ejecutando la herramienta Ranger.
-
Máquina remota un sistema Windows
7.
-
Segunda máquina, podría estar en
el mismo Kali Linux, controlada por el Pentester con un Metasploit configurado
con el módulo exploit/multi/script/web_delivery.
En primer lugar,
hablaremos de la configuración del módulo exploit/multi/script/web_delivery.
Es un módulo de tipo exploit muy sencillo de configurar. Los parámetros básicos
a configurar son los siguientes:
-
La elección del payload queda de la mano del usuario,
aunque para el ejemplo utilizaremos el clásico Meterpreter de tipo inverso tcp.
-
Hay que indicar por cuál interfaz
de red estará a la escucha el servicio web_delivery.
Esto se realiza a través del atributo SRVHOST,
que por defecto tiene por valor 0.0.0.0,
es decir, cualquier interfaz por la que se obtenga una petición.
-
El atributo LHOST del payload debe
ser la dirección dónde se encuentre el handler
de Metasploit configurado para
recibir la conexión.
A continuación se
puede ver un resumen de la configuración. Como se puede ver es realmente
sencillo configurarlo.
Al ejecutar el
comando exploit podremos ver como se
configura de manera transparente el handler
y, el propio Metasploit, nos indica que había que ejecutar en Python para obtener el payload. Si miramos los Jobs de Metasploit podemos ver cómo se
ha generado un servicio a través del módulo web_delivery.
Si quisiéramos detener esto deberíamos ejecutar Jobs –K.
La herramienta Ranger debe ser ejecutada de la
siguiente forma: ranger –u [user] –p
[password o hash] –d [domain] –t [target] –downloader. El parámetro downloader hace que Ranger se autentique en la máquina remota, ejecute un script encodeado en Powershell,
tal y como se puede ver en la imagen. Este script
lo que realizará es una llamada a
nuestra máquina para encontrar el payload
a ejecutar.
Si echamos un ojo a
lo que se descarga la máquina remota gracias a la interacción con Ranger y el uso de Powershell, podemos ver que es código python. Este código ejecutará el payload que hayamos configurado en el módulo web_delivery de Metasploit.
Como veis, Ranger aporta múltiples opciones,
métodos y ataques que pueden ser necesarios en un pentest. Además, Ranger incorpora otros ataques
interesantes, como por ejemplo la posibilidad de ejecutar un Mimikatz a través de un script de Powershell y obtener las credenciales logadas en la máquina en
plano. Sin duda, una herramienta a tener en cuenta y guardarla en nuestra
mochila para llevar a cabo un test de intrusión.