This site is the archived OWASP Foundation Wiki and is no longer accepting Account Requests.
To view the new OWASP Foundation website, please visit https://owasp.org

Category:OWASP WSFuzzer Project/es

From OWASP
Jump to: navigation, search

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



OWASP Inactive Banner.jpg
PROJECT IDENTIFICATION
Project Name OWASP WSFuzzer Project Project
Short Project Description

WSFuzzer is a LGPL'd program, written in Python, that currently targets Web Services. In the current version HTTP based SOAP services are the main target. This tool was created based on, and to automate, some real-world manual SOAP pen testing work. This tool is NOT meant to be a replacement for solid manual human analysis. Please view WSFuzzer as a tool to augment analysis performed by competent and knowledgable professionals. Web Services are not trivial in nature so expertise in this area is a must for proper pen testing.

Email Contacts Project Leader
Andres Andreu
Project Contributors
Cosmin Banciu
Mailing List/Subscribe
Mailing List/Use
First Reviewer
Achim Hoffmann
Profile
(TBC)
Second Reviewer
Name
OWASP Board Member
Name&Email
PROJECT MAIN LINKS

Check out a video of WSFuzzer in action
Get the tarball from sourceforge
Come and join the Linkedin Group also, or just search for "WSFuzzer" in the "Groups" section within Linkedin

RELATED PROJECTS

Featured in O'REILLY book - Web Security Testing Cookbook
Included in BackTrack - Backtrack->Vulnerability Identification->Fuzzers->WSFuzzer
Included in the OWASP Live CD
Featured in this Blog
Featured in HNN HNNCast

SPONSORS & GUIDELINES
Current Sponsor: neuroFuzz, LLC Goals/Guidelines/Roadmap
ASSESSMENT AND REVIEW PROCESS
Review/Reviewer Author's Self Evaluation
(applicable for Alpha Quality & further)
First Reviewer
(applicable for Alpha Quality & further)
Second Reviewer
(applicable for Beta Quality & further)
OWASP Board Member
(applicable just for Release Quality)
First Review Objectives & Deliveries reached?
Yes
---------
Which status has been reached?
Beta Status
---------
See&Edit: First Review/SelfEvaluation (A)
Objectives & Deliveries reached?
Not yet (To update)
---------
Which status has been reached?
Beta Status - (To update)
---------
See&Edit: First Review/1st Reviewer (B)
Objectives & Deliveries reached?
Yes/No (To update)
---------
Which status has been reached?
Beta Status - (To update)
---------
See&Edit: First Review/2nd Reviewer (C)
Objectives & Deliveries reached?
Yes/No (To update)
---------
Which status has been reached?
Beta Status - (To update)
---------
See/Edit: First Review/Board Member (D)

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: [1]

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:

  <?xml version="1.0" encoding="utf-8"?>
  <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
  xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
  <xpath xmlns="http://foundstone.com/Stringproc">
  <query>WHATEVER</query>
  </xpath>
  </soap:Body>
  </soap:Envelope>
    • 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 >>>
<?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> <v3 xsi:type="xsd:string">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': 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> <v3 xsi:type="xsd:string">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> <v3 xsi:type="xsd:string">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 [email protected]. 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

This category currently contains no pages or media.