
Escáner web que detecta versiones de CMS, plugins, librerías JavaScript vulnerables, direcciones de correo electrónico y números de teléfono en sitios web objetivo, evaluando el riesgo de fuga de información.
Primero ejecuta docker run --rm -p 8000:80 siwecos/infoleak-scanner.
Abre tu navegador y usa el escáner: http://localhost/?url=<URL>
Obtén php5, curl y un servidor web:
sudo apt-get install apache2 php5 php5-curl
Copia la aplicación al servidor web:
cp -R . /var/www/html/
Busca plugins para el CMS detectado. La lista más grande (WordPress) contiene 980 plugins diferentes.
Busca bibliotecas de JavaScript vulnerables y más utilizadas.
Busca direcciones de correo electrónico. Interesante para ataques de spam y/o ingeniería social.
Busca números de teléfono. Interesante para ataques de ingeniería social y/o estafas.
| Finding | Score (0-100) |
|---------------------+---------------|
| CMS_ONLY | 100 |
| CMS_VERSION | 96 |
| CMS_VERSION_VULN | see below |
| PLUGIN_ONLY | 99 |
| PLUGIN_VERSION | 96 |
| PLUGIN_VERSION_VULN | see below |
| JS_LIB_ONLY | 99 |
| JS_LIB_VERSION | 96 |
| JS_LIB_VULN_VERSION | see below |
| EMAIL_FOUND | 96 |
| NUMBER_FOUND | 98 |
If there was a finding like:
CMS_VERSION_VULN
PLUGIN_VERSION_VULN
JS_LIB_VULN_VERSION
then the overall score will capped to 20 and every additional vulnerability
will decrease the overall score by 10. Which means, that if
CMS_VERSION_VULN and PLUGIN_VERSION_VULN and JS_LIB_VULN_VERSION is returned, the
overall score will be 0.
Also a finding of jQuery v1.12.4 on a Wordpress website won't be rated like a usual vulnerable library.
This finding will result in a score of 90, but the placeholder will still be JS_LIB_VULN_VERSION as it is a vulnerable library.
Puedes ejecutar el escáner mediante solicitudes POST y GET.
Si deseas ejecutar el escáner con una solicitud POST, debes enviar los parámetros en un formato codificado JSON:
{
"url": "string",
"dangerLevel": 0,
"callbackurls": [
"string"
],
"userAgent": "string"
}
url define la URL que debe ser escaneada.
dangerLevel no es relevante, simplemente defínelo a 0.
callbackurls es un arreglo de URLs. Estas URLs recibirán el resultado del escáner (enviado mediante POST).
userAgent define tu agente de usuario individual que deseas que se envíe al escanear.
Ejecutar el escáner con una solicitud GET es mucho más simple. Todo lo que tienes que hacer es ejecutar la aplicación con una URL dada:
http://localhost/?url=<URL>
Sin hallazgos en ningún escaneo:
{
"name": "InfoLeak-Scanner",
"version": "1.0.0",
"hasError": false,
"errorMessage": null,
"score": 100,
"tests": [
{
"name": "CMS",
"hasError": false,
"errorMessage": null,
"score": 100,
"scoreType": "info",
"testDetails": null
},
{
"name": "CMS_PLUGINS",
"hasError": false,
"errorMessage": null,
"score": 100,
"scoreType": "warning",
"testDetails": null
},
{
"name": "JS_LIB",
"hasError": false,
"errorMessage": null,
"score": 100,
"scoreType": "warning",
"testDetails": null
},
{
"name": "EMAIL_ADDRESS",
"hasError": false,
"errorMessage": null,
"score": 100,
"scoreType": "info",
"testDetails": null
},
{
"name": "PHONE_NUMBER",
"hasError": false,
"errorMessage": null,
"score": 100,
"scoreType": "info",
"testDetails": null
}
]
}
Al menos un hallazgo en cada escaneo:
{
"name": "InfoLeak-Scanner",
"version": "1.0.0",
"hasError": false,
"errorMessage": null,
"score": 20,
"tests": [
{
"name": "CMS",
"hasError": false,
"errorMessage": null,
"score": 96,
"scoreType": "info",
"testDetails": [
{
"placeholder": "CMS_VERSION",
"values": {
"cms": "wordpress",
"version": "4.9.6",
"node": "meta",
"node_content": "WordPress 4.9.6"
}
}
]
},
{
"name": "CMS_PLUGINS",
"hasError": false,
"errorMessage": null,
"score": 99,
"scoreType": "warning",
"testDetails": [
{
"placeholder": "PLUGIN_ONLY",
"values": {
"plugin": "contact-form-7",
"node": "href",
"node_content": "https://[...]/wp-content/plugins/contact-form-7/includes/css/styles.css?ver=5.0.2"
}
}
]
},
{
"name": "JS_LIB",
"hasError": false,
"errorMessage": null,
"score": 0,
"scoreType": "warning",
"testDetails": [
{
"placeholder": "JS_LIB_VULN_VERSION",
"values": {
"js_lib_name": "jquery",
"js_lib_version": "1.12.4",
"node": "src",
"node_content": "https://[...]/wp-includes/js/jquery/jquery.js?ver=1.12.4"
}
}
]
},
{
"name": "EMAIL_ADDRESS",
"hasError": false,
"errorMessage": null,
"score": 96,
"scoreType": "info",
"testDetails": [
{
"placeholder": "EMAIL_FOUND",
"values": {
"email_adress": [
[
"[email protected]"
]
]
}
}
]
},
{
"name": "PHONE_NUMBER",
"hasError": false,
"errorMessage": null,
"score": 98,
"scoreType": "info",
"testDetails": [
{
"placeholder": "NUMBER_FOUND",
"values": {
"number": [
"1234-12 11 22-3",
"123-11 22 333-4"
]
}
}
]
}
]
}
Probado especialmente en:
Mozilla Firefox 45.7.0
PHP 5.6.30-0+deb8u1 (cli) (built: Feb 8 2017 08:50:21)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
Server version: Apache/2.4.10 (Debian)
Server built: Feb 24 2017 18:40:28
Server's Module Magic Number: 20120211:37
Server loaded: APR 1.5.1, APR-UTIL 1.5.4
Compiled using: APR 1.5.1, APR-UTIL 1.5.4
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
| Marcador de posición | Mensaje |
|---|
| ESCANEAR CMS | |
| CMS_ONLY | Sistema de Gestión de Contenidos {cms} detectado. |
| CMS_VERSION | Sistema de Gestión de Contenidos {cms} y su versión {version} detectados. |
| CMS_VERSION_VULN | Versión vulnerable del Sistema de Gestión de Contenidos {cms} {version} detectada. |
| ESCANEAR PLUGIN | |
| PLUGIN_ONLY | Plugin {plugin} del CMS en nodo DOM {node} mediante contenido de nodo {node_content} detectado. |
| PLUGIN_VERSION | Plugin {plugin} del CMS y su versión {plugin_version} en nodo DOM {node} mediante contenido de nodo {node_content} detectados. |
| PLUGIN_VERSION_VULN | Plugin {plugin} del CMS vulnerable y su versión {plugin_version} en nodo DOM {node} mediante contenido de nodo {node_content} detectados. |
| ESCANEAR JS | |
| JS_LIB_ONLY | Biblioteca JavaScript {js_lib_name} utilizada en nodo DOM {node} mediante contenido de nodo {node_content} detectada. |
| JS_LIB_VERSION | Biblioteca JavaScript {js_lib_name} utilizada y su versión {js_lib_version} en nodo DOM {node} mediante contenido de nodo {node_content} detectadas. |
| JS_LIB_VULN_VERSION | Biblioteca JavaScript {js_lib_name} vulnerable y su versión {js_lib_version} en nodo DOM {node} mediante contenido de nodo {node_content} detectadas. |
| ESCANEAR CORREO ELECTRÓNICO | |
| EMAIL_FOUND | Dirección de correo electrónico {email_address} encontrada. |
| ESCANEAR TELÉFONO | |
| NUMBER_FOUND | Número de teléfono {number} encontrado. |
| ERRORES | |
| NO_SOURCE_CODE | La URL proporcionada no tiene código fuente. |
| INVALID_URL | La URL proporcionada no es una URL válida. |
| INFOLEAK_LOCALHOST_SCAN_NOT_ALLOWED | No está permitido escanear localhost. |
| NO_RESPONSE | La URL proporcionada no es accesible. |
| INFOLEAK_PORT_DISALLOWED | La URL proporcionada contiene un puerto no permitido. |
| INFOLEAK_DONT_LEAK_USER_CREDS | La URL proporcionada contiene credenciales de usuario. |
| INFOLEAK_JSON_DECODE_ERROR | La solicitud POST proporcionada no pudo ser decodificada. |
| INFOLEAK_REDIRECT_ERROR | La URL realiza una redirección prohibida. |
| UNSUPPORTED_PROTOCOL | El sitio web está utilizando un protocolo que no está soportado. |
| FAILED_INIT | El escáner falló al inicializar la conexión. |
| URL_MALFORMAT | La URL no tiene el formato adecuado. |
| COULDNT_RESOLVE_HOST | El host remoto proporcionado no pudo ser resuelto. |
| COULDNT_CONNECT | Falló la conexión al host o al proxy. |
| REMOTE_ACCESS_DENIED | Se denegó el acceso al recurso especificado en la URL. |
| HTTP2_ERROR | Se detectó un problema en la capa de enmarcado HTTP2. |
| TOO_MANY_REDIRECTS | Hubo demasiadas redirecciones. |
| SEND_ERROR | Falló el envío de datos de red. |
| RECV_ERROR | Falló la recepción de datos de red. |
| BAD_CONTENT_ENCODING | Codificación de transferencia no reconocida. |
| SSL_ENGINE_INITFAILED | Falló la inicialización del motor SSL. |
| TIMEOUT | Se alcanzó el período de tiempo de espera especificado según las condiciones. |
| CONV_FAILED | Falló la conversión de caracteres. |
| REMOTE_FILE_NOT_FOUND | El recurso referenciado en la URL no existe. |
| HTTP2_STREAM | Error de flujo en la capa de enmarcado HTTP/2. |