El fuzzing consiste en enviar datos aleatorios, inválidos y no esperados mediante los formularios de entrada de una aplicación buscando alguna vulnerabilidad en ella.

Estas pruebas se hacen de forma automatizadas o semi-automaticas, de esta forma se comprueba la seguridad de la validación de los datos de entrada de la aplicación . Un ejemplo muy básico para entenderlo: Imagínate en un formulario de registro de una Web donde te pide tu edad en números, lo lógico es que metas un número mayor que cero y no mucho más alto de 100, nos preguntamos qué pasaría si le introducimos una edad negativa para ver que ocurre al enviar dicho dato. Esto básicamente es un test de fuzzing.

Para hacer el testeo vamos a utilizar la herramienta Powerfuzzer , y vamos hacer el ataque sobre una aplicación vulnerable que nos ofrece OWASP y que podemos descargar desde su página oficial .

Powerfuzzer es un fuzzer web personalizable Open Source, con él podremos identificar ciertos errores como Cross Site Scripting (XSS), inyecciones (SQL, LDAP, código, comandos y XPath), CRLF, HTTP 500, entre otros.

Abrimos Powerfuzzer y nos encontraremos con una ventana como la que se muestra en la siguiente captura:

Imagen 0 en Cómo hacer Fuzzing




Vamos hacer la prueba sobre la siguiente url http://192.168.1.108/mutillidae/index.php?page=login.php , para no hacerla a la raíz y se nos demore mucho ejemplo. Introducimos la URL anterior en Target URL y pulsamos el botón de SCAN y empezará hacer las pruebas pertinentes en búsqueda de fallos.

Ahora nos mostrará e n azul las prueba que ha realizado y en rojo los errores que ha encontrado . En este caso, encuentra una URL vulnerable a inclusión de páginas remotas y XSS.

Imagen 1 en Cómo hacer Fuzzing

Copiamos en el navegador la url que nos arroja en el error de URL vulnerable http://192.168.1.108/mutillidae/index.php?page=http://google.com y veremos como la web de google aparece en esta aplicación, cambiando la dirección de Google por otra, por ejemplo openwebinars.net también aparece en la web como se puede apreciar en la captura siguiente:

Imagen 2 en Cómo hacer Fuzzing

Una vez que hemos relizado unas pruebas con Powerfuzzer, vamos a probar con otra herramienta, en este caso, Simple Fuzzer . Esta herramienta es más customizable que la anterior.

Lo iniciamos en la consola con sfuzz -h y nos mostrará todas las opciones del programa.


	root@kali:~# sfuzz -h
        Simple Fuzzer
By:  Aaron Conole
version: 0.7.0
url:     http://aconole.brad-x.com/programs/sfuzz.html
EMAIL:   apconole@yahoo.com
Build-prefix: /usr
    -h   This message.
    -V   Version information.

networking / output:
    -v   Verbose output
    -q   Silent output mode (generally for CLI fuzzing)
    -X   prints the output in hex

    -b   Begin fuzzing at the test specified.
    -e   End testing on failure.
    -t   Wait time for reading the socket
    -S   Remote host
    -p   Port
    -T|-U|-O TCP|UDP|Output mode
    -R   Refrain from closing connections (ie: "leak" them)

    -f   Config File
    -L   Log file
    -n   Create a new logfile after each fuzz
    -r   Trim the tailing newline
    -D   Define a symbol and value (X=y).
    -l   Only perform literal fuzzing
    -s   Only perform sequence fuzzing

Vamos a ver un ejemplo básico como el anterior, haremos el testeo en el servidor -S 192.168.1.108 sobre el puerto 80 p 80 que trabaje con el protocolo TCP -T , usando el fichero HTTP básico -f /usr/share/sfuzz/sfuzz-sample/basic.http .

Introducimos en la consola en comando completo: sfuzz -S 192.168.1.1 -p 10443 -T -f /usr/share/sfuzz/sfuzz-sample/basic.http y nos mostrará el resultado:


root@kali:~# sfuzz -S 192.168.1.1 -p 10443 -T -f /usr/share/sfuzz/sfuzz-sample/basic.http
[12:53:47] dumping options:
    filename: 
    state:    <8>
    lineno:   <56>
    literals:  [74]
    sequences: [34]
    symbols: [0]
    req_del:  <200>
    mseq_len: <10024>
    plugin: <none>
    s_syms: <0>
    literal[1] = [AREALLYBADSTRING]