
Formato de prueba de vulnerabilidades web legible por humanos y máquinas

explo es una herramienta simple para describir problemas de seguridad web en un formato legible por humanos y máquinas.
Al definir un flujo de trabajo de solicitud/condición, explo es capaz de explotar problemas de seguridad sin
necesidad de escribir un script. Esto permite compartir vulnerabilidades complejas en un formato simple, legible y ejecutable.
Ejemplo para extraer un token csrf y usarlo en un formulario:
name: get_csrf
description: extract csrf token
module: http
parameter:
url: http://example.com/contact
method: GET
header:
user-agent: Mozilla/5.0
extract:
csrf: [CSS, "#csrf"]
---
name: exploit
description: exploits sql injection vulnerability with valid csrf token
module: http
parameter:
url: http://example.com/contact
method: POST
body:
csrf: "{{get_csrf.extracted.csrf}}"
username: "' SQL INJECTION"
find: You have an error in your SQL syntax
En este archivo de definición de ejemplo, el problema de seguridad se prueba ejecutando dos pasos que se ejecutan de arriba a abajo. El último paso devuelve un éxito o fracaso, dependiendo de si se encuentra la cadena 'You have an error in your SQL syntax'.
pip install explo
git clone https://github.com/dtag-dev-sec/explo
cd explo
python setup.py install
explo [--verbose|-v] testcase.yaml
explo [--verbose|-v] examples/*.yaml
Hay algunos casos de prueba de ejemplo en la carpeta examples/.
$ explo examples/SQLI_simple_testphp.vulnweb.com.yaml
También puedes incluir explo como librería de Python:
from explo.core import from_content as explo_from_content
from explo.core import ExploException, ProxyException
def save_log(msg):
print(msg)
try:
result = explo_from_content(explo_yaml_file, save_log)
except ExploException as err:
print(err)
Se puede configurar un proxy http/https y un tiempo de espera para las solicitudes mediante variables de entorno. El tiempo de espera predeterminado es de 15 segundos.
$ export http_proxy=http://proxy:8089
$ export https_proxy=https://proxy:8090
$ export timeout=10
$ explo ...
Se pueden agregar módulos para mejorar la funcionalidad y las clases de problemas de seguridad.
El módulo http permite realizar una solicitud http, extraer contenido y buscar/verificar contenido.
Los siguientes datos están disponibles para los siguientes pasos:
stepname.response.contentstepname.response.cookiesresponse.extracted.variable_nameSi se establece un parámetro find_regex, se ejecuta una coincidencia de expresión regular en el cuerpo de la respuesta. Si falla, este módulo devuelve un fallo y detiene la ejecución del flujo de trabajo actual (y todos los pasos).
Al extraer mediante expresiones regulares, use el grupo de captura extract para marcar el valor a extraer (ver abajo un ejemplo).
Para hacer referencia a cookies, refiérase al nombre del paso anterior del cual se deben tomar las cookies (cookies: the_other_step.response.cookies).
Ejemplos de parámetros:
parameter:
url: http://example.com
method: GET
allow_redirects: True
headers:
User-Agent: explo
Content-Type: abc
cookies: stepname.response.cookies
body:
key: value
find: search for string
find_regex: search for (reg|ular)expression
find_in_headers: searchstring in headers
expect_response_code: 200
extract:
variable1: [CSS, '#csrf']
variable2: [REGEX, '<input(.*?)value="(?P<extract>.*?)"']
El módulo http_header permite comprobar si una respuesta carece de un conjunto especificado de cabeceras (y valores). Todos los demás parámetros son idénticos al módulo http.
Los siguientes datos están disponibles para otros módulos:
stepname.response.contentstepname.response.cookiesEjemplos de parámetros:
parameter:
url: http://example.com
method: GET
allow_redirects: True
headers:
User-Agent: explo
Content-Type: abc
body:
key: value
headers_required:
X-XSS-Protection: 1
Server: . # all values are valid
El módulo sqli_blind es capaz de identificar inyecciones SQL ciegas basadas en tiempo.
Los siguientes datos están disponibles para otros módulos:
stepname.response.contentstepname.response.cookiesEjemplos de parámetros:
parameter:
url: http://example.com/vulnerable.php?id=1' waitfor delay '00:00:5'--
method: GET
delay_seconds: 5
Si se excede el umbral de 5 segundos (delay_seconds), la comprobación devuelve verdadero (y por lo tanto resulta en un éxito).
El bloque de metadatos es un bloque especial que se puede agregar como el primer bloque en un archivo .yaml para añadir metadatos a una vulnerabilidad para su procesamiento posterior. Esto es útil cuando explo se usa como librería y los metadatos de cada descripción de vulnerabilidad se pueden leer con meta_from_content(content). Este módulo no necesita un nombre ni una descripción.
Ejemplos:
module: metadata
parameter:
cvss: 8.9
author: Robin Verton
---
name: login
description: login with test credentials
module: http
parameter:
url: http://testphp.vulnweb.com/userinfo.php
method: POST
body:
uname: test
pass: test