
Formato di test delle vulnerabilità web leggibile da umani e macchine

explo è un semplice strumento per descrivere problemi di sicurezza web in un formato leggibile da umani e macchine.
Definendo un flusso di richieste/condizioni, explo è in grado di sfruttare vulnerabilità di sicurezza senza la necessità di scrivere uno script. Ciò consente di condividere vulnerabilità complesse in un formato semplice, leggibile ed eseguibile.
Esempio per estrarre un token csrf e usarlo in un form:
name: get_csrf
description: estrai token csrf
module: http
parameter:
url: http://example.com/contact
method: GET
header:
user-agent: Mozilla/5.0
extract:
csrf: [CSS, "#csrf"]
---
name: exploit
description: sfrutta la vulnerabilità SQL injection con token csrf valido
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
In questo file di definizione di esempio, la vulnerabilità viene testata eseguendo due passaggi che vengono eseguiti dall'alto verso il basso. L'ultimo passaggio restituisce un successo o un fallimento, a seconda che venga trovata la stringa '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
Nella cartella examples/ sono presenti alcuni casi di test di esempio.
$ explo examples/SQLI_simple_testphp.vulnweb.com.yaml
Puoi anche includere explo come libreria 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)
Un proxy http/https e un timeout per le richieste possono essere impostati tramite variabili d'ambiente. Il timeout predefinito è di 15 secondi.
$ export http_proxy=http://proxy:8089
$ export https_proxy=https://proxy:8090
$ export timeout=10
$ explo ...
I moduli possono essere aggiunti per migliorare la funzionalità e le classi di problemi di sicurezza.
Il modulo http consente di effettuare una richiesta http, estrarre contenuti e cercare/verificare contenuti.
I seguenti dati sono resi disponibili per i passaggi successivi:
stepname.response.contentstepname.response.cookiesresponse.extracted.variable_nameSe viene impostato un parametro find_regex, viene eseguita una corrispondenza tramite espressione regolare sul corpo della risposta. Se ciò fallisce, il modulo restituisce un fallimento e interrompe l'esecuzione del flusso di lavoro corrente (e di tutti i passaggi).
Quando si estrae tramite espressioni regolari, utilizzare il gruppo di cattura extract per contrassegnare il valore da estrarre (vedi esempio sotto).
Per fare riferimento ai cookie, fare riferimento al nome del passaggio precedente da cui devono essere presi i cookie (cookies: the_other_step.response.cookies).
Esempi di parametri:
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: cerca questa stringa
find_regex: search for (reg|ular)expression
find_in_headers: stringadicerca negli header
expect_response_code: 200
extract:
variable1: [CSS, '#csrf']
variable2: [REGEX, '<input(.*?)value="(?P<extract>.*?)"']
Il modulo http_header consente di verificare se una risposta manca di un insieme specificato di header (e valori). Tutti gli altri parametri sono identici al modulo http.
I seguenti dati sono resi disponibili per altri moduli:
stepname.response.contentstepname.response.cookiesEsempi di parametri:
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: . # tutti i valori sono validi
Il modulo sqli_blind è in grado di identificare SQL injection blind basate sul tempo.
I seguenti dati sono resi disponibili per altri moduli:
stepname.response.contentstepname.response.cookiesEsempi di parametri:
parameter:
url: http://example.com/vulnerable.php?id=1' waitfor delay '00:00:5'--
method: GET
delay_seconds: 5
Se la soglia di 5 secondi (delay_seconds) viene superata, il controllo restituisce true (e quindi un successo).
Il blocco metadati è un blocco speciale che può essere aggiunto come primo blocco in un file .yaml per aggiungere metadati a una vulnerabilità per elaborazioni successive. Ciò diventa utile quando explo viene utilizzato come libreria e i metadati per ogni descrizione di vulnerabilità possono essere letti con meta_from_content(content). Questo modulo non necessita di un nome o di una descrizione.
Esempi:
module: metadata
parameter:
cvss: 8.9
author: Robin Verton
---
name: login
description: login con credenziali di test
module: http
parameter:
url: http://testphp.vulnweb.com/userinfo.php
method: POST
body:
uname: test
pass: test