El día de hoy, después de algunos meses, he liberado la primera versión (espero que mas o menos estable) de W3AFRemote: http://sourceforge.net/projects/w3afremote/.

Es una librería que mencionado en alguna ocasión en mi twitter, pero que hasta el momento no había enseñado.

Antes que nada, explicaré un poco como ha surgido esto y para que sirve, como seguramente muchos de vosotros ya sabéis  W3AF es una potente herramienta que permite realizar actividades de pentesting sobre aplicaciones web y permite detectar y explotar vulnerabilidades utilizando uno o varios de los plugins incluidos en W3AF, los cuales se encuentran correctamente ordenados por familias, las que a su vez, representan una «fase» del procedimiento de auditoria y ataque, aunque esta muy bien, para desarrolladores (como yo) es difícil de integrar en aplicaciones existentes o que se encuentran en estado de desarrollo, en mi caso concreto, me encontraba desarrollando DENRIT (otra herramienta que espero liberar próximamente y de la que hablaré en una próxima entrada) y me encontraba con la necesidad de interactuar desde mi aplicación con W3AF, dado que W3AF es una aplicación que se ejecuta en modo «stand-alone» y no cuenta con un servicio que permita a otros desarrolladores interactuar con el framework de forma directa (tal como se suele hacer con Metasploit Framework con su servicio MSFRPCD) me encontraba con esta gran dificultad, querer integrar la potencia de W3AF en mi aplicación, pero no contar con una API o una interfaz que me permitiera enviar comandos al framework y dejar que esté «Haga lo suyo». Dado que supongo, que muchos otros desarolladores se han encontrado en una situación similar, me decidí por escribir un servicio XML-RPC para interactuar con las potencialidades de W3AF y es así como en un derroche de creatividad y originalidad, se me ocurrió nombrar a esta herramienta W3AFRemote… Si, adelante, reíros! XD
Toda esta historia comenzó el año pasado, aproximadamente en el mes de abril y después de estar cerca de un par de meses conociendo el funcionamiento del framework, escribiendo varias rutinas desde Python e intercambiando correos con Andres Riancho (creador de W3AF), me encontré con que la herramienta estaba prácticamente lista (salvo algunos retoques finales), de hecho, en la medida que iba escribiendo W3AFRemote, lo iba integrando en DENRIT para probar que todo iba bien, que las respuestas siguieran el esquema XSD definido, que la información retornada era correcta, encontrando errores que iban y venían en W3AF en cada nueva revisión de SVN, etc,etc,etc… Sin embargo, por aquel entonces, me llegarón «de golpe» muchas actividades, tanto académicas como laborales que requerían totalmente mi atención y por ese motivo, el desarrollo de ambas herramientas, que llevaba a un muy buen ritmo, lo tuve que detener por un poco más de 6 meses.
A comienzos de este año retome nuevamente el desarrollo de todo esto que se había quedado «a medias» y comencé nuevamente  a realizar algunos ajustes que hacían falta. Esta semana me he sentido cómodo con lo que se encuentra desarrollado hasta el momento y aunque aun me quedan algunos detalles que se pueden mejorar, así como realizar muchas más pruebas, he decidido «liberar» la primera versión de esta herramienta, con el fin de que otros desarrolladores puedan utilizarla y probarla desde sus propios entornos. A continuación indicaré brevemente los requerimientos necesarios para utilizar W3AFRemote y las características incluidas:

Requisitos:
Las pruebas las he realizado enteramente en un entorno Linux (Debian), sin embargo estoy seguro que funcionará exactamente igual en entornos Windows ya que las únicas dependencias que se deben cubrir es tener instalado Python versión 2.6 o superior y W3AF. Ademas, si se necesita utilizar desde una máquina diferente a la local, en cualquier punto de la red, es necesario permitir que el trafico en el puerto especificado por el servidor XML-RPC no se encuentre filtrado.

Funcionamiento:
El servidor XML-RPC es simplemente un script escrito en Python y que se ejecuta directamente desde linea de comandos, en donde se incluyen algunas opciones que permiten definir el comportamiento del servidor (puerto, nombre de usuario, password, directorio de instalación de W3AF) etc. Una vez que se arranca el servidor, recibirá peticiones de clientes, que deben conocer los diferentes métodos disponibles en el servidor (aquellos que hayan trabajado con servicios web REST, por ejemplo, entenderán lo que quiero decir, ya que es bastante similar). El servidor recibirá el nombre de la función solicitada por el cliente y sus correspondientes parámetros, con esa información, realiza la interacción con la instancia de W3AF la que se ha indicado previamente en el directorio de instalación de W3AF. Finalmente, cuando la instancia retorna una respuesta a la petición, se procede a generar una respuesta XML siguiendo el esquema XSD.
El cliente recibirá como respuesta, un contenido XML del que  evidentemente debe conocer el XSD para poder parsear el contenido (dicho XSD se encuentra en la raíz del directorio de instalación de W3AFRemote).

La interacción entre el cliente y servidor simple:

[CLIENTE]                                                [SERVIDOR XML-RPC]
/authenticate                   ->                        genera Token de autenticación
Parseo de XML               <-                         Fichero XML con Token de autenticación
Petición 1                       ->                        valida token, valida función y parametros
Parseo de XML               <-                         Fichero XML con respuesta de W3AF
Petición 2                       ->                        valida token, valida función y parametros
Parseo de XML               <-                         Fichero XML con respuesta de W3AF
Petición N                       ->                        valida token, valida función y parametros
Parseo de XML               <-                         Fichero XML con respuesta de W3AF
/logout                            ->                        Destruye token the autenticación asociado al cliente
Parseo de XML               <-                         Fichero XML con Token de autenticación
Con esto es suficiente para comprender el proceso de interacción entre el cliente, W3AFRemote y W3AF. En realidad es un proceso sencillo 🙂
Ahora, lo que debe conocer el cliente (ademas del formato del esquema XSD) es las funciones que tiene disponibles para su uso junto con sus correspondientes parámetros. Dichas funciones se encuentran detalladas aquí:
https://sourceforge.net/p/w3afremote/wiki/README/ ademas, para ver un ejemplo practico, se puede ver el código del cliente que viene incluido en esta versión y que utiliza todas las funciones disponibles.
Finalmente, he grabado mi escritorio utilizando W3AFRemote con una instancia de W3AF con la última versión disponible en su repositorio GIT, en este se puede apreciar con mayor claridad como es el funcionamiento de esta librería, las opciones disponibles en el servidor web y como utilizar el cliente Python que también viene incluido en esta versión.
En youtube poner calidad HD para que se pueda ver claramente.
NOTA SOBRE LA SEGURIDAD DE ESTA HERRAMIENTA.
Inicialmente esta desarrollada con un diseño sencillo y características como el cifrado de paquetes entre cliente y servidor NO se encuentra habilitado en esta versión de W3AFRemote, lo que quiere decir que simplemente con «escuchar» el trafico en la red con un sniffer, será suficiente para conseguir el token de autenticación entre cliente y servidor. En el caso de que se requiera un mecanismo de cifrado para este tipo de información, se aconseja establecer un canal de comunicación con SSH entre cliente y servidor y por medio de dicho túnel realizar la interacción entre cliente y servidor. Aunque supongo que serán pocos los casos que requieran esto, merece la pena mencionarlo.

Si alguien esta interesado en utilizarlo, probarlo (y reventarlo) le invito a hacerlo y contarme lo que ha encontrado, ademas también recomiendo utilizar el repositorio SVN para obtener en todo momento este software con cualquier característica que vaya añadiendo o problemas que vaya solucionando.

Espero que te sea util. :3
Adastra.