Category:OWASP WSFuzzer Project/es

Clic aquí para regresar a la pagina de proyectos de OWASP. Clic aquí para ver (y editar) la plantilla.

Descripción
WSFuzzer es un programa LGPL, escrito en Python, que actualmente apunta hacia Web Services. En la versión actual los servicios SOAP basados en http son el principal objetivo. Esta herramienta fue creada basada en, y para automatizar, el trabajo de pruebas de intrusión manual para SOAP en el mundo real. Esta herramienta NO esta destinada para ser un reemplazo del análisis humano manual sólido. Por favor vea a WSFuzzer como una herramienta para aumentar el análisis realizado por profesionales reconocidos y competentes. Los servicios Web no son de naturaleza trivial así que la experiencia en esta área es necesaria para las correctas pruebas de intrusión.

Objetivos
‡ Automatizar algunos de los procesos mas intensos en SOAP que llevarían mucho tiempo si se realizaran manualmente ‡ Hacer generación de vectores de ataque de una forma dinámica e inteligente basada en el objetivo en específico ‡ Proveer su funcionalidad/resultados a otras herramientas en una manera simple ‡ Facilitar el uso repetido de conocidos vectores de ataque exitosos, especialmente contra objetivos específicos ‡ Ser parte de un conjunto de sólidas herramientas para pruebas de intrusión en aplicaciones Web ‡ Ser tan fácil de usar dentro del espectro del entendimiento y trabajo con servicios SOAP

El objetivo de WSFuzzer no es reemplazar el análisis humano. AAMOF WSFuzzer actualmente no hace ningún tipo de análisis de los resultados adquiridos. El trabajo del análisis se deja al analista/ingeniero ejecutando una prueba de intrusión.

Esta herramienta esta últimamente pensada para aumentar el trabajo las pruebas de intrusión con respecto a los servicios SOAP.

Revise un video de WSFuzzer en acción en http://www.neurofuzz.com/modules/software/vidz.php

versión actual
1.9.3

Instalación
Tar y Gzip son usados para crear los archivos de wsfuzzer* “zippeados”. De ahí que tienen la extensión .tar.gz. El proceso de instalación es simplemente extraer los archivos de este archivo. Para extraer exprograma puede obviamente usar los comandos tar y gzip por separado. Pero una forma mas fácil toma en cuenta que la opción -z de tar alimenta el archivo gzip después de desempacarlo, entonces:

tar -xvzf wsfuzzer*.tar.gz

extrae todos los archivos del archivo gzip y los coloca en un directorio que refleja el numero de la versión. Por ejemplo:

cd /to/location/of/tarball tar -xvzf wsfuzzer-1.9.3.tar.gz

extrae todos los archivos a un directorio llamado:

version1.9.3

basado en la ubicación del archivo. Así que si el archivo esta en:

/opt/wsfuzzer

al final tendremos:

/opt/wsfuzzer/version1.9.3/

Después de la apropiada extracción del archivo la instalación esta completa. Puede avanzar a ejecutar el programa.

Obtenga el archivo desde sourceforge: http://sourceforge.net/project/showfiles.php?group_id=155697

Características
‡ Hace pruebas de intrusión en un servicio Web HTTP SOAP basado ya sea en un WSDL valido, o un punto final(endpoint) valido y un nombre (namespace). ‡ Puede tratar de detectar inteligentemente WSDL para un blanco dado. ‡ Incluye un scanner de puertos TCP simple. ‡ WSFuzzer tiene la habilidad de manipular métodos con múltiples parámetros. Hay 2 modos de ataque: "individual" y "simultaneo". Cada parámetro puede ser tratado como una entidad única (modo individual), y puede ser atacado o dejar en paz, o múltiples parámetros son atacados simultáneamente (de ahí el nombre – modo simultaneo) con un conjunto de datos dado. ‡ La generación de ataques consiste en una combinación de un archivo de diccionario, algunos grandes patrones de inyección dinámicos opcionales, y algunos ataques específicos al método opcionales incluyendo generación de ataques automáticos de XXE y WSSE. ‡ La herramienta también proporciona la opción de usar algunas técnicas de evasión de IDS, lo que lo hace una poderosa experiencia de pruebas de seguridad de infraestructura (IDS/IPS). ‡ Una medida de tiempo entre cada petición y respuesta es ahora proporcionada para ayudar potencialmente en el análisis de resultados. ‡ Para cualquier ejecución del programa los vectores de ataque generados son guardados en un archivo xml. El archivo XML es nombrado XXX y es ubicado en el mismo directorio donde se guardan el archivo de resultados HTML. ‡ Un archivo XML previamente generado de vectores de ataque puede ser utilizado en lugar de la combinación de diccionario/automatizado. Esto es para el bien de la repetibilidad cuando los mismos vectores necesitan ser usados una y otra vez.

Una fuente de las características de WSFuzzer es nuestra comunidad de usuarios. Así que si piensa que alguna característica podría ser útil por favor envíenosla a:

Uso en línea de comandos
Uso: WSFuzzer.py [-w wsdl_url | -e endpoint -n namespace | --xml | -h host | --conf  | --bauser username --bapass password |  --keyfile keyfile --certfile certfile |  --proxy proxyserver --proxyport port | --attacks]

-w WSDL_URL -- A FQDN WSDL URL – es decir http://host/service/service.asmx?wsdl Ejemplo: python WSFuzzer.py -w http://host/service/service.asmx?wsdl

-e endpoint -n namespace -- -e y -n son usados juntos -e es el endpoint del servicio Web-- es decir WSDL URL -n es el nombre del servicio Web-- es decir URI Cuando se usa -e y -n usted tendrá que establecer manualmente el método a ser atacado Ejemplo: python WSFuzzer.py -e "http://host/service/service.asmx" -n "urn:querySOAP" --xml --- Un archivo de texto de la carga XML a ser usada contra el objetivo -h host -- Una URL del objetivo. Esta opción hará una exploración en la URL objetivo, buscara por cualquier cosa relacionada con WSDL o DISCO y construirá una lista de URLs verificadas de WSDL Ejemplo: python WSFuzzer.py -h http://host --conf --- Un archivo que contiene algunos datos de configuración para automatizar algunas de las partes de WSFuzzer normalmente interacticas --bauser username --bapass password --- estos 2 argumentos opcionales son usados juntos cuando autenticación básica de HTTP necesite ser usada --bauser es un usuario de autenticación básica --bapass es una contraseña de autenticación básica para ser usada con el nombre de usuario "bauser" --keyfile keyfile --certfile certfile --- estos 2 argumentos opcionales son usados juntos cuando certificados del lado del cliente necesiten ser usados --keyfile es el archivo PEM formateado que contiene la respectiva llave privada a ser usada --certfile es el archivo PEM formateado que contiene el certificado X.509 a ser usado con el archivo "keyfile" --attacks es el nombre del archivo XML de vectores de ataque previamente generado por WSFuzzer

Ejemplo de archivo de configuración
La historia básica con los archivos de configuración es que cuanta mayor información le agregue a ellos, menor cantidad de preguntas le serán hechas por el programa.

Lo siguiente representa los posibles valores por opción para el apropiado uso de los archivos de configuración:

wsdl – ruta completa del recurso WSDL, incluyendo protocolo xml – ruta completa al archivo que contiene la carga XML endpoint – URL completa representando el objetivo namespace – el nombre del objetivo method – nombre del método objetivo parameters – lista separada por comas de nombres de parámetros, por ejemplo: param1, param2, param3 simultaneous - 'yes' host – URL completa, si el protocolo no esta presente, "http" será usado uri – ruta al recurso soapaction – nombre de la acción idsevasion - 'yes' o 'no' idsevasionopt - '0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','R'   directory – el nombre del directorio que quiere usar para una ejecución del programa dada alternatehost – ya sea la cadena representando el sitio alterno o 'no' attacks – ruta completa del archivo XML conteniendo los vectores de ataque que quiera usar dictionary – ruta completa a un diccionario de ataque automate - 'yes' o 'no' bauser – usuario de autenticación básica bapass - contraseña de autenticación básica keyfile – ruta completa al archivo de la llave certfile - ruta completa al archivo del certificado proxy - URL completa del servidor proxy a ser usado proxyport – numero del puerto a ser usado

Lo siguiente representa las opciones que cada modo va a leer:

Modo 1 va a leer en: wsdl simultaneous bauser bapass keyfile certfile proxy proxyport idsevasion idsevasionopt directory alternatehost attacks dictionary automate Mode 2 will read in: endpoint namespace method parameters simultaneous soapaction bauser bapass keyfile certfile proxy proxyport idsevasion idsevasionopt directory alternatehost attacks dictionary automate Mode 3 will read in: xml host uri soapaction bauser bapass keyfile certfile proxy proxyport idsevasion idsevasionopt directory alternatehost attacks dictionary automate

La estructura de los archivos debería parecerse a estos ejemplos:

# Mode 1 automates some parts of the -w switch Mode = 1 wsdl = http://target/resource.asmx?wsdl idsevasion = no   simultaneous = yes directory = directoryName dictionary = attack2.txt automate = no   alternatehost = no

# Mode 2 automates some of the endpoint (-e) and namespace (-n) options Mode = 2 endpoint = http://your.end.point namespace = the_namespace method = target_method parameters = param1, param2, param3 simultaneous = yes dictionary = dict.txt automate = no   idsevasion = yes idsevasionopt = 5 directory = directoryName

# Mode 3 automates some parts of the --xml switch Mode = 3 xml = payload.xml dictionary = dict.txt host = http://target:port automate = no   idsevasion = yes idsevasionopt = R   uri = /path/to/resource.jws simultaneous = yes directory = directoryName

Ejemplos en tiempo de ejecución
Aquí hay algunos ejemplos de diferentes tipos de ejecuciones:

‡ python WSFuzzer --conf confmode3.txt ‡ python WSFuzzer -w http://target/service/service.asmx?wsdl ‡ python WSFuzzer -e http://target/service/service.asmx -n urn:service ‡ python WSFuzzer --xml file.xml ‡ python WSFuzzer -h http://target

Al termino de una ejecución la salida actual esta basada en un directorio que el programa creara. Ese directorio es creado dentro del directorio raíz donde el programa esta instalado y se ejecuta. Por omisión, el patrón para la creación del directorio esta basado en la cadena FuzzingResults-N. N es dinámicamente calculado basado en directorios existentes que encajan en el patrón. Así que si ejecuta el programa desde "/opt/WSFuzzer" por ejemplo, al final tendrá algo como:

‡ /opt/WSFuzzer/FuzzingResults-0 ‡ /opt/WSFuzzer/FuzzingResults-1 ‡ ... ‡ /opt/WSFuzzer/FuzzingResults-N

En cada uno de estos directorios habrá un archivo index.html y un directorio llamado HeaderData.

index.html le dará una descripción de los resultados, como:

Method 	Request Params 	       IDS evasion 	                Response 	Http Info 	Round Trip xpath 	{'parameters': '%00'} 	/WSDIGGeR_WS/WSDiggER_WS.AsMX 	Soap Fault 	HTTP Log 	276.2158 M   xpath 	{'parameters': 'TRUE'} 	/WSDIggER_WS/WSDIgGer_WS.AsMx 	Soap Fault 	HTTP Log 	2.88 S

En el directorio HeaderData encontrara archivos que tienen un par de Petición / Respuesta para cada uno de los ataques enviados al objetivo. Cada archivo tiene una petición y una respuesta. En algunos casos no habrá respuesta si la petición atacante causo algún tipo de daño en el servidor (respuesta 500, etc). Cada uno de los enlaces en la columna Http Info le proporcionara una ruta en el respectivo archivo así como al resto de la información en ese fila.

En referencia a los valores de "Round Trip":

M = milisegundos S = segundos

Usando un XML conocido (el cambio --xml)
Este es un fragmento de una ejecución usando la opción estática de XML (--xml)

python2.4 WSFuzzer.py --xml xpath.xml Running WSFuzzer 1.9, the latest version Local "All_attack.txt" data matches that on neurofuzz.com Local "dirs.txt" data matches that on neurofuzz.com Local "filetypes.txt" data matches that on neurofuzz.com If you would like to establish the directory name for the results then type it in now (leave blank for the default): xmltest Since you are using the static XML feature we need some data from you...   Host to attack (es decir sec.neurofuzz.com): 192.168.1.207 URI to attack (es decir /axis/EchoHeaders.jws): /WSDigger_WS/WSDigger_WS.asmx Unless some serious masking/spoofing is in place, it seems you are targeting a .Net host so you will need to use a SOAPAction header ...   Enter the SOAPAction value: http://foundstone.com/Stringproc/xpath Method: xpath Param discovered: query, of type: xsi:string Simultaneous Mode activated Input name of Fuzzing dictionary(full path): attack.txt Dictionary Chosen: attack.txt Would you like to enable automated fuzzing to augment what you have already chosen? This option generates a lot of traffic, mostly with a bad attitude &-> Answer: n   Parameter: query Would you like to fuzz this param: y   Fuzzing this param adding parameter Would you like to enable IDS evasion(y/n)? Answer: n   Not using IDS evasion Shall I begin Fuzzing(y/n)? Answer: y   Commencing the fuzz ....    Starting to fuzz method (xpath) Generated 4 parameter based Attack Strings ...    Fuzzing completed for method (xpath)

Lo siguiente representa un ejemplo del contenido del archivo xml file pasado vía el argumento --xml. En referencia al ejemplo anterior, el archivo xpath.xml tiene lo siguiente como contenido:

    WHATEVER  


 * Esta opción (--xml) es ideal para el uso de WSFuzzer cuando apuntamos a servicios/sitios de .Net. Para poder usar esta opción exitosamente, necesita conocer/tener lo siguiente en referencia a su objetivo:

‡ Un XML valido. Todo lo que tiene que hacer es usar cualquier método que guste para generar un XML valido basado en su objetivo. Para los que realizan pruebas de intrusión, esto usualmente no es un problema ya que esta trabajando cercanamente con los desarrolladores/ingenieros del objetivo. ‡ Información del sitio apropiada en forma de host.domain o una dirección IP, es decir sec.neurofuzz.com o 192.168.1.207 ‡ URI apropiada, es decir /WSDigger_WS/WSDigger_WS.asmx ‡ Si esta apuntando a un servicio.Net, también necesitara saber el valor de una cabecera http valida de SOAPAction, esto puede ser el nombre de un método o un FQDN – depende completamente en como fueron construidos los servicios del objetivo. En el ejemplo anterior, el valor de SOAPAction es: http://foundstone.com/Stringproc/xpath

Modo Individual / Sin evasión de IDS
Aquí hay un fragmento de una ejecución utilizando modo individual sin evasión de IDS:

WSFuzzer.py -w http://jboss_target.Ejemplo.com/ws4ee/services/LoginService?wsdl Running WSFuzzer 1.9, the latest version Local "All_attack.txt" data matches that on neurofuzz.com Local "dirs.txt" data matches that on neurofuzz.com Local "filetypes.txt" data matches that on neurofuzz.com WSDL Discovered (http://jboss_target.Ejemplo.com/ws4ee/services/LoginService?wsdl) If you would like to establish the directory name for the results then type it in now (leave blank for the default): mytest Method(0): authenticateUser Params: in0(string) in1(string) in2(string) Method(1): setToken Params: in0(string) Select the methods you want to Fuzz(ex: 0,1,2,3 or A for All) Methods: 0 Would you like to attack all the chosen params simultaneously? n   Method: authenticateUser Parameter: in0 Type: string Choose fuzz type(ex. 1) 0) Do not fuzz this parameter  1) Dictionary (One entry per line) FuzzType: 1 Fuzzing using dictionary Input name of dictionary(full path): attack1.txt Dictionary Chosen: attack1.txt Would you like to enable automated fuzzing to augment what you have already chosen? This option generates a lot of traffic, mostly with a bad attitude &-> Answer: y   adding parameter Parameter: in1 Type: string Choose fuzz type(ex. 1) 0) Do not fuzz this parameter  1) Dictionary (One entry per line) FuzzType: 0 Not fuzzing this param adding parameter Parameter: in2 Type: string Choose fuzz type(ex. 1) 0) Do not fuzz this parameter  1) Dictionary (One entry per line) FuzzType: 1 Fuzzing using dictionary Input name of dictionary(full path): attack2.txt Dictionary Chosen: attack2.txt Would you like to enable automated fuzzing to augment what you have already chosen? This option generates a lot of traffic, mostly with a bad attitude &-> Answer: n   Would you like to enable IDS evasion(y/n)? Answer: n  Not using IDS evasion Shall I begin Fuzzing(y/n)? Answer: y   Commencing the fuzz ....    starting fuzzing method (authenticateUser) Generated 6101 Attack Strings ...   <<< Baseline XML Payload with Random data val's >>>     xdeiykUzTnXTlFPrEiyJvAszywDojsxbAQNDxVnysdjJrQKCYqGsrNeTQaHWfAZIuhcrohfygMilBDCTCJRGvplQi suDtTvYwFdbJxDSuvgnnUhzzXbsFrLQuTKfPPNTejarrVATMXUqD gGdVVAKWMmARMSBBlZhQdnBHzVVHGfgHwUoxFItflzKaTbxMNppRtWevzQxCJcXhdF </authenticateUser> </SOAP-ENV:Body> </SOAP-ENV:Envelope> <<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>   Fuzzing completed for method (authenticateUser)

Y aquí hay un fragmento del resultado arrojado de la ejecución anterior:

Method 	       Request Params 	                           IDS Evasion 	Response   Http Info 	Round Trip authenticateUser 	{'in0': '/*', 'in1': None, 'in2': None}   None 	0 	   HTTP Log 	276.2158 M    authenticateUser 	{'in0': '\\00', 'in1': None, 'in2': None}  None 	0 	   HTTP Log 	2.88 S

Modo Simultaneo / Sin evasión de IDS
Aquí esta un fragmento de una ejecución utilizando modo simultaneo sin evasión de IDS:

python WSFuzzer.py -w http://jboss_target.Ejemplo.com/ws4ee/services/LoginService?wsdl Running WSFuzzer 1.9, the latest version Local "All_attack.txt" data matches that on neurofuzz.com Local "dirs.txt" data matches that on neurofuzz.com Local "filetypes.txt" data matches that on neurofuzz.com WSDL Discovered (http://jboss_target.Ejemplo.com/ws4ee/services/LoginService?wsdl) If you would like to establish the directory name for the results then type it in now (leave blank for the default): mytest Method(0): authenticateUser Params: in0(string) in1(string) in2(string) Method(1): setToken Params: in0(string) Select the methods you want to Fuzz(ex: 0,1,2,3 or A for All) Methods: 0 Would you like to attack all the chosen params simultaneously? y  Input name of Fuzzing dictionary(full path): attack3.txt Dictionary Chosen: attack3.txt Would you like to enable automated fuzzing to augment what you have already chosen? This option generates a lot of traffic, mostly with a bad attitude &-> Answer: n   Method: authenticateUser Parameter: in0 Type: string Would you like to fuzz this param: y  Fuzzing using dictionary adding parameter Method: authenticateUser Parameter: in1 Type: string Would you like to fuzz this param: y  Fuzzing using dictionary adding parameter Method: authenticateUser Parameter: in2 Type: string Would you like to fuzz this param: y  Fuzzing using dictionary adding parameter Would you like to enable IDS evasion(y/n)? Answer: n  Not using IDS evasion Shall I begin Fuzzing(y/n)? Answer: y   Commencing the fuzz ....    starting fuzzing method (authenticateUser) <<< Baseline XML Payload with Random data val's >>> <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <authenticateUser SOAP-ENC:root="1"> <v1 xsi:type="xsd:string">xdeiykUzTnXTlFPrEiyJvAszywDojsxbAQNDxVnysdjJrQKCYqGsrNeTQaHWfAZIuhcrohfygMilBDCTCJRGvplQi</v1> <v2 xsi:type="xsd:string">suDtTvYwFdbJxDSuvgnnUhzzXbsFrLQuTKfPPNTejarrVATMXUqD</v2> gGdVVAKWMmARMSBBlZhQdnBHzVVHGfgHwUoxFItflzKaTbxMNppRtWevzQxCJcXhdF</v3> </authenticateUser> </SOAP-ENV:Body> </SOAP-ENV:Envelope> <<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>   Fuzzing completed for method (authenticateUser)

Y aquí hay un fragmento del resultado arrojado de la ejecución anterior:

Method 	       Request Params 	                                IDS Evasion 	Response 	Http Info 	Round Trip authenticateUser 	{'in0': '/*', 'in1': '/*', 'in2': '/*'} 	None 	       0 	        HTTP Log 	2.88 S    authenticateUser 	{'in0': '\\00', 'in1': '\\00', 'in2': '\\00'} 	None 	        0 	        HTTP Log 	276.2158 M

Descubrimiento / Evasión de IDS
Aquí esta una ejecución utilizando una de las técnicas de evasión de IDS:

python WSFuzzer.py -h http://jboss_target.Ejemplo.com Running WSFuzzer 1.9 If you would like to establish the directory name for the results then type it in now (leave blank for the default): mytest 0) Basic Discovery (faster but less accurate)  1) Advanced Discovery (slower and more intrusive but more thorough and accurate) 2) Advanced Discovery (like #1) with port scanning first   Probe Type: 2   Beginning TCP port for scan: 1   Ending TCP port for scan: 9090    Open TCP ports discovered for target localhost:   [0] 80   [1] 8080   [2] 8088   Pick one via numeric index (es decir 1 for [1]): 0    Would you like to Spider the target on top of the advanced probe: y    Checking 10077696 maximum number of dir combo's based on a depth of 7    Discovered WSDL links:   0 => http://jboss_target.Ejemplo.com/ws4ee/services/ERSService?wsdl   1 => http://jboss_target.Ejemplo.com/ws4ee/services/AuditService?wsdl   2 => http://jboss_target.Ejemplo.com/ws4ee/services/SyncService?wsdl   3 => http://jboss_target.Ejemplo.com/ws4ee/services/ThumbnailService?wsdl   4 => http://jboss_target.Ejemplo.com/ws4ee/services/OfficeDataService?wsdl   5 => http://jboss_target.Ejemplo.com/ws4ee/services/TestService?wsdl   6 => http://jboss_target.Ejemplo.com/ws4ee/services/LogsService?wsdl 7 => http://jboss_target.Ejemplo.com/ws4ee/services/LoginService?wsdl 8 => http://jboss_target.Ejemplo.com/ws4ee/services/AdminService?wsdl 9 => http://jboss_target.Ejemplo.com/ws4ee/services/VersionService?wsdl 10 => http://jboss_target.Ejemplo.com/ws4ee/services/UserService?wsdl 11 => http://jboss_target.Ejemplo.com/ws4ee/services/IKSService?wsdl 12 => http://jboss_target.Ejemplo.com/ws4ee/services/ExcelService?wsdl 13 => http://jboss_target.Ejemplo.com/ws4ee/services/AdminService2?wsdl 14 => http://jboss_target.Ejemplo.com/ws4ee/services/DirService?wsdl Please choose ONE link, via numeric index, from the above list 7   Method(0): authenticateUser Params: in0(string) in1(string) in2(string) Method(1): setToken Params: in0(string) Select the methods you want to Fuzz(ex: 0,1,2,3 or A for All) Methods: 0 Would you like to attack all the chosen params simultaneously? n  Method: authenticateUser Parameter: in0 Type: string Choose fuzz type(ex. 1) 0) Do not fuzz this parameter  1) Dictionary (One entry per line) FuzzType: 1 Fuzzing using dictionary Input name of dictionary(full path): attack1.txt Dictionary Chosen: attack1.txt Would you like to enable automated fuzzing to augment what you have already chosen? This option generates a lot of traffic, mostly with a bad attitude &-> Answer: y   adding parameter Parameter: in1 Type: string Choose fuzz type(ex. 1) 0) Do not fuzz this parameter  1) Dictionary (One entry per line) FuzzType: 0 Not fuzzing this param adding parameter Parameter: in2 Type: string Choose fuzz type(ex. 1) 0) Do not fuzz this parameter  1) Dictionary (One entry per line) FuzzType: 1 Fuzzing using dictionary Input name of dictionary(full path): attack2.txt Dictionary Chosen: attack2.txt Would you like to enable automated fuzzing to augment what you have already chosen? This option generates a lot of traffic, mostly with a bad attitude &-> Answer: n  adding parameter Would you like to enable IDS evasion(y/n)? Answer: y  Choose an option for IDS Evasion. 0) null method processing - ** Windows targets only  1) random URI (non-UTF8) encoding 2) directory self-reference (/./)  3) premature URL ending 4) prepend long random string  5) fake parameter 6) TAB as request spacer  7) random case sensitivity - ** Windows targets only 8) directory separator (\) - ** Windows targets only  10) URI (non-UTF8) encoding R) choose an option at random  Option: 1    Shall I begin Fuzzing(y/n)?   Answer: y    Commencing the fuzz ....    starting fuzzing method (authenticateUser)    Generated 6101 Attack Strings ...    <<< Baseline XML Payload with Random data val's >>>    <?xml version="1.0" encoding="UTF-8"?>   <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"   xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"   xmlns:xsd="http://www.w3.org/1999/XMLSchema">   <SOAP-ENV:Body>   <authenticateUser SOAP-ENC:root="1">   <v1 xsi:type="xsd:string">xdeiykUzTnXTlFPrEiyJvAszywDojsxbAQNDxVnysdjJrQKCYqGsrNeTQaHWfAZIuhcrohfygMilBDCTCJRGvplQi</v1>   <v2 xsi:type="xsd:string">suDtTvYwFdbJxDSuvgnnUhzzXbsFrLQuTKfPPNTejarrVATMXUqD</v2>   gGdVVAKWMmARMSBBlZhQdnBHzVVHGfgHwUoxFItflzKaTbxMNppRtWevzQxCJcXhdF</v3> </authenticateUser> </SOAP-ENV:Body> </SOAP-ENV:Envelope> <<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>   Fuzzing completed for method (authenticateUser)

Y aquí hay un fragmento del resultado arrojado de la ejecución anterior:

Method 	       Request Params 	                          IDS Evasion                                                       Response ...     authenticateUser 	{'in0': '/*', 'in1': None, 'in2': None}   /L%75g%68%53e%72vic%65/%41o%74hS%65%72vic%65S%65rv%69%63%65 	    0 ... authenticateUser 	{'in0': '\\00', 'in1': None, 'in2': None} /L%75%74i%53%65%72v%69%63%65/%41o%74%68Servi%63%65%53%65rv%69%63e 0 ...

Evasión de IDS
Las siguientes opciones están actualmente disponibles para los propósitos de evasión de IDS:

0) procesamiento de método nulo - ** Solo para objetivos Windows 1) codificación de URI (no-UTF8) aleatoria 2) auto-referencia de directorio (/./) 3) terminado prematuro de URL 4) anteponer larga cadena aleatoria 5) parámetro falso 6) TAB como espaciador de petición 7) mayúsculas y minúsculas al azar - ** Solo para objetivos Windows 8) separador de directorio (\) - ** Solo para objetivos Windows 10) codificación de URI (no-UTF8) 11) codificación hexadecimal de porcentaje doble - ** Solo para objetivos Windows 12) codificación hexadecimal de nibble doble - ** Solo para objetivos Windows 13) codificación hexadecimal del primer nibble - ** Solo para objetivos Windows 14) codificación hexadecimal del segundo nibble - ** Solo para objetivos Windows R) elegir una opción aleatoriamente

Trabajando con el siguiente URI como blanco: "/WSDigger_WS/WSDigger_WS.asmx" aquí hay una idea de cómo se verían los datos del URI cuando la evasión de IDS este en uso para los HTTP POST's:

* null method processing: %00%20/WSDigger_WS/WSDigger_WS.asmx * random URI (non-UTF8): /%57SDi%67g%65r%5fW%53/%57%53D%69gge%72_%57%53.asm%78 * directory self-reference (/./): /./WSDigger_WS/./WSDigger_WS.asmx * premature URL ending: /%20HTTP/1.1%0D%0A%0D%0AAccept%3A%20PTdOoYWl2A/../../WSDigger_WS/WSDigger_WS.asmx * prepend long random string: /UCD8SiuHKgBhOrUmmdRtn15khQD17fWScHMz6Wa3x65ihPOzBPCkj2M3e4Lr0lwAYgx0zrDAh7ZOUlAqE1vHpqvIFKj2hHQjUS4VdyUyOewrIDnEsaX5 WrpOYIphWuzZIT3J1nezbYxjwvg0R5u6QVbBJFiafkY2t5mIPexZd9Zwq9f9Nu3lHRJzRauoDP2VpewGimw9TVrcynp0NJFCEefV6ETCMbhdn9fUPC3dYN8 MyubOeLQqOMWDKI4y35prsntMfGX2WWbRFii912f75zVuaYDOR5CxVopXT6bU7eDbCea8YSAZAWxdt0kuGtEmFbH46WXl6cInovsY3nLmTgZ77XX 4JncWWatypv34az9iuMmr0GqyCgOuxLIW0600zGhTlAuZYf3I6rs0Lm4NHaEmLi7ZNdPywNV0IUs2Wwlu2EsbHcTXnNbZ00Za2ixKuIJGqVKTrgS7LhfP5e 16rR2D9mvBWkxVXIHhj30iniGoHhRl1XPs2mnO0ROb6CS0Xy3Nquzv/../WSDigger_WS/WSDigger_WS.asmx * fake parameter: /eLCk3rV3v1.html%3fyW0TziI2SP=/..//WSDigger_WS/WSDigger_WS.asmx * TAB as request spacer: /WSDigger_WS/WSDigger_WS.asmx * random case sensitivity: /WSDiggER_WS/WSDIgGER_WS.AsmX * directory separator (\): /WSDigger_WS\WSDigger_WS.asmx * URI (non-UTF8): /%57%53%44%69%67%67%65%72%5f%57%53/%57%53%44%69%67%67%65%72%5f%57%53%2e%61%73%6d%78 * double percent hex encoding: /%2557%2553%2544%2569%2567%2567%2565%2572%255f%2557%2553%2557%2553%2544%2569%2567%2567%2565%2572%255f%2557%2553%252e%2561%2573%256d%2578 * double nibble hex encoding: /%%35%37%%35%33%%34%34%%36%39%%36%37%%36%37%%36%35%%37%32%%35%66%%35%37%%35%33/%%35%37%%35%33%%34%34 %%36%39%%36%37%%36%37%%36%35%%37%32%%35%66%%35%37%%35%33%%32%65%%36%31%%37%33%%36%64%%37%38    * first nibble hex encoding: /%%357%%353%%344%%369%%367%%367%%365%%372%%35f%%357%%353/%%357%%353%%344%%369%%367%%367%%365%%372%%35f %%357%%353%%32e%%361%%373%%36d%%378 * second nibble hex encoding: /%5%37%5%33%4%34%6%39%6%37%6%37%6%35%7%32%5%66%5%37%5%33/%5%37%5%33%4%34%6%39%6%37%6%37%6%35%7%32%5%66 %5%37%5%33%2%65%6%31%7%33%6%64%7%38

Desarrollo futuro
‡ Mas tipos de ataques basados en contenido XML dinámico e inteligente ‡ Exponer la funcionalidad como un servicio (lo mas probable es vía SOAP) ‡ Desarrollo futuro de vectores de ataque para: o	WS-Security o	SAML o	Seguridad XML (Firmas digitales, cifrado XML, etc) ‡ Diferentes formatos de salida de resultados (posiblemente AVDL, NBE, etc)

Limitaciones/problemas conocidos
‡ Las bibliotecas de SOAP/WSDL que este programa usa son conocidas por tener algunos problemas consumiendo algunos WSDL's (basado en Doc/Literal en particular) creados dentro de infraestructuras .NET. En realidad depende en como fue generado el WSDL pero la biblioteca de consumo WSDL se estrangula en algunos de estos conjuntos basados en .NET. Este es enteramente subjetivo porque también lo hemos visto trabajar exitosamente contra muchos objetivos .NET. La opción --xml debería ayudar en esto. Úselo enviando un buen conocido XML para un objetivo dado (genere esta salida de WSFuzzer y guárdela en un archivo). ‡ Hemos tenido reportes de algunos usuarios diciendo que el ataque automático esta causando errores de memoria en el cliente. Es cierto que el ataque automático genera mucha información y es intenso :-) Pero ese es uno de los métodos de ataque así que esto no es accidental. En la versión 1.7 hemos rebajado estos tipos de ataques un poco y parece funcionar mejor. así que manténganos informados en estos tipos de problemas pero recuerde que el objetivo con algunos de estos vectores de ataque es romper las reglas y forzar anomalías para poder ver como se sostiene el servidor objetivo. En otras palabras no me escriba quejándose acerca del hecho de que la herramienta esta generando y enviando XML erróneo, si, esa es una de las cosas que esta herramienta hace a propósito. ‡ No hay GUI – No estoy completamente seguir de que esa sea enteramente una limitación.

Retroalimentación y participación
Esperamos que encuentre útil el proyecto OWASP WSFuzzer. Por favor contribuya con el proyecto ofreciéndose para alguna de las tareas, enviando sus comentarios, preguntas y sugerencias a owasp@owasp.org. Para unirse a la lista de correos del proyecto OWASP WSFuzzer o ver los archivos, por favor visite la página de subscripción.

WSFuzzer esta pensado para beneficiarnos a todos en este campo de seguridad de aplicación. Es completamente open source y para mantener esta herramienta como un jugador importante en las herramientas de los que realizan pruebas de intrusión el proyecto podría recibir ayuda en las áreas de:

* Codificación en Python * pruebas regulares de la herramienta * experiencia en seguridad de servicios Web

Si alguna persona tiene 2 de estas cualidades entonces esa persona seria una adición ideal a este proyecto. Si esta interesado envíe una nota a wsfuzzer [at] neurofuzz dot com.

Colaboradores del proyecto
El desarrollo actual de WSFuzzer es realizado por Andres Andreu <andres [at] neurofuzz dot com> y Cosmin Banciu <ccbanciu [at] gmail dot com>

Patrocinadores del proyecto
TBD