
Formato de teste de vulnerabilidade web legível por humanos e máquinas

explo é uma ferramenta simples para descrever problemas de segurança web em um formato legível por humanos e máquinas.
Ao definir um fluxo de trabalho de requisição/condição, o explo é capaz de explorar problemas de segurança sem a
necessidade de escrever um script. Isso permite compartilhar vulnerabilidades complexas em um formato simples, legível e executável.
Exemplo para extrair um token csrf e usá-lo em um formulário:
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
Neste arquivo de definição de exemplo, o problema de segurança é testado executando duas etapas que são executadas de cima para baixo. A última etapa retorna sucesso ou falha, dependendo da string 'You have an error in your SQL syntax' ser encontrada.
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
Há alguns casos de teste de exemplo na pasta examples/.
$ explo examples/SQLI_simple_testphp.vulnweb.com.yaml
Você também pode incluir explo como uma biblioteca 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)
Um proxy http/https e um timeout para requisições podem ser definidos via variáveis de ambiente. O timeout padrão é de 15 segundos.
$ export http_proxy=http://proxy:8089
$ export https_proxy=https://proxy:8090
$ export timeout=10
$ explo ...
Módulos podem ser adicionados para melhorar a funcionalidade e classes de problemas de segurança.
O módulo http permite fazer uma requisição http, extrair conteúdo e pesquisar/verificar conteúdo.
Os seguintes dados são disponibilizados para os próximos passos:
stepname.response.contentstepname.response.cookiesresponse.extracted.variable_nameSe um parâmetro find_regex for definido, uma correspondência de expressão regular é executada no corpo da resposta. Se falhar, este módulo retorna uma falha e interrompe a execução do fluxo de trabalho atual (e todas as etapas).
Ao extrair por expressões regulares, use o grupo de captura extract para marcar o valor a ser extraído (veja abaixo um exemplo).
Para referenciar cookies, faça referência ao nome da etapa anterior de onde os cookies devem ser obtidos (cookies: the_other_step.response.cookies).
Exemplos 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>.*?)"']
O módulo http_header permite verificar se uma resposta não possui um conjunto específico de cabeçalhos (e valores). Todos os outros parâmetros são idênticos ao módulo http.
Os seguintes dados são disponibilizados para outros módulos:
stepname.response.contentstepname.response.cookiesExemplos 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
O módulo sqli_blind é capaz de identificar injeções SQL cegas baseadas em tempo.
Os seguintes dados são disponibilizados para outros módulos:
stepname.response.contentstepname.response.cookiesExemplos de parâmetros:
parameter:
url: http://example.com/vulnerable.php?id=1' waitfor delay '00:00:5'--
method: GET
delay_seconds: 5
Se o limite de 5 segundos (delay_seconds) for excedido, a verificação retorna verdadeiro (resultando em sucesso).
O bloco de metadados é um bloco especial que pode ser adicionado como o primeiro bloco em um arquivo .yaml para adicionar metadados a uma vulnerabilidade para processamento posterior. Isso se torna útil quando explo é usado como uma biblioteca e os metadados de cada descrição de vulnerabilidade podem ser lidos com meta_from_content(content). Este módulo não precisa de um nome ou descrição.
Exemplos:
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