Bienvenidos a un nuevo post en Byte Mind. En el caso de hoy les traigo una herramienta llamada XSSChecker, desarrollada por mí, para la detección de vulnerabilidades XSS en portales web.
XSSChecker es una suite avanzada para la detección de vulnerabilidades XSS, escrita en Python, con la que posteriormente ayudar a la corrección de las mismas en nuestras aplicaciones web.
Instalación
La herramienta requiere disponer de la versión de Python 3.7 o superior instalada en nuestro sistema.
Para la instalación de esta herramienta, basta con descargar la misma desde su repositorio en github en la url https://github.com/shokone/XSSChecker y que podemos hacer con el siguiente comando:
1 |
git clone https://github.com/shokone/XSSChecker.git |
Una vez descargada, accedemos al directorio recién creado:
1 |
cd XSSChecker |
Y realizamos la instalación de las librerías necesarias para su ejecución:
1 |
pip3 install -r requirements.txt |
Uso de XSSChecker
Al igual que la gran mayoría de herramientas dispone de una ayuda muy completa con la que aprender a utilizar la misma. Para ello lanzaremos la tool con la opción -h:
1 |
python3 xsschecker.py -h |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
usage: xsschecker.py [-h] [-V] [-v] [-u URL] [-m METHOD] [-c COOKIE] [-p PARAMETER] [-d DATA] [--user-agent USERAGENT] [-l LEVEL] [--payload PAYLOAD] [--show-browser] [--no-check-browser] [--browser SELECT_BROWSER] optional arguments: -h, --help show this help message and exit -V, --version Show version number and exit. -v, --verbose Increase output verbosity Target: It is mandatory to specify a target on which to carry out the testing -u URL, --url URL Target URL. example: "http://example.com/index.php" Request: Use this options to specify how to connect to the target -m METHOD, --method METHOD Force usage of given HTTP method (GET, POST...). By default GET. -c COOKIE, --cookie COOKIE Cookie header value. -p PARAMETER, --parameter PARAMETER Type only one parameter name to check -d DATA, --data DATA Data string to be sent. If you don't specify, the script will search for possible forms. Example: "username=admin&pass=admin" --user-agent USERAGENT User-Agent header value Detection: Use this options to check if target is vulnerable to XSS -l LEVEL, --level LEVEL Level of tests to perform ( values 1-3, default 1 ) Use only with default payloads. Injection: These parameters can be used to specify custom payloads or another specific parameters to test. --payload PAYLOAD Custom payloads file. Customize: Use this options to customize your testing --show-browser By default browser is run in background. Add this option to show it. --no-check-browser By default use firefox to check XSS. Add this parameter to avoid it --browser SELECT_BROWSER Select browser to check XSS (firefox or chrome). By default use firefox. |
La herramienta dispone de varias formas de escaneo que pasamos a explicar a continuación.
Escaneo básico
Para el uso de la herramienta, el único parámetro obligatorio que se deberá introducir es la url objetivo de nuestro ataque. En esta opción básica, la herramienta buscará los formularios existentes en la url facilitada e intentará la explotación de los mismos, el comando quedaría de la siguiente forma:
1 |
python3 xsschecker.py -u "url" |
Para la detección de la vulnerabilidad el script realizará dos peticiones, una básica mediante el uso del módulo requests (algo parecido a un curl) y por otra parte lanzará un navegador en background para realizar la comprobación de que la ventana de alert se ha creado correctamente con los caracteres introducidos.
Para la comprobación del navegador, la herramienta incluye los webdrivers necesarios para el uso de los navegadores firefox (opción por defecto) o chrome, sin la necesidad de disponer de la instalación del navegador en nuestro equipo.
Si queremos especificar el mismo lo haríamos con el siguiente comando:
1 |
python3 xsschecker.py -u "url" --browser "firefox" |
Escaneo avanzado
Además de la opción básica, el script nos permite incluir diferentes parámetros para ajustar nuestro ataque.
Por ejemplo, podemos especificar los parámetros necesarios, ya sea a través de la url:
1 |
python3 xsschecker.py -u "http://example.com/index.php?query=1" |
de la opción “parameter” en la cual se indicaría sólo el nombre del mismo:
1 |
python3 xsschecker.py -u "http://example.com/index.php" -p "query" |
o la opción data para indicar varios parámetros a utilizar:
1 |
python3 xsschecker.py -u "http://example.com/index.php" -d "query=1&form=submit" |
Existe la opción de añadir cookies personalizadas para nuestro ataque:
1 |
python3 xsschecker.py -u "http://example.com/index.php" -c "cookie=12345" |
O el uso de un useragent concreto:
1 |
python3 xsschecker.py -u "http://example.com/index.php" --user-agent "mozilla 5.0 -" |
A continuación vemos un ejemplo en una captura de pantalla:
Personalización del ataque
Además de las opciones indicadas, existe la opción de especificar el método a utilizar, sea POST o GET:
1 |
python3 xsschecker.py -u "url" -m POST |
La herramienta dispone también de varios niveles de payloads a utilizar según la complicación de los mismos:
- Level 1 – Basic XSS
- Level 2 – Basic XSS, body, img and div
- Level 3 – Basic XSS, body, img, div, svg and polyglot
Y que se especificará con la opción -l como vemos en el siguiente ejemplo:
1 |
python3 xsschecker.py -u "url" -l 2 |
También es posible especificar un fichero propio de payloads a ejecutar, pero en este caso dispone de un requisito, que se especifique el string INJECTHERE para la verificación por parte de la herramienta, de la correcta ejecución del mismo, por ejemplo, podríamos crear nuestro fichero de la siguiente forma:
1 2 3 4 |
<ScRipT>alert(INJECTHERE)</ScRipT> <script>alert(/INJECTHERE)</script> <script>alert(/INJECTHERE/)</script> </script><script>alert(INJECTHERE)</script> |
Y cargar posteriormente como en el siguiente ejemplo:
1 |
python3 xsschecker.py -u "url" --payload "/home/user/payloads.txt |
Además dispone de un modo descriptivo con la opción verbose que mostrará más información del escaneo realizado:
1 |
python3 xsschecker.py -u "url" --verbose |
Esto ha sido todo por el momento, espero os sea de utilidad y como siempre cualquier aporte o duda es bienvenida en la sección de comentarios.