Come ottenere token CSRF sulla richiesta di autorizzazione con OWASP ZAP in modalità bruteforce

1

Sono nuovo in OWASP ZAP, quindi ho bisogno del tuo aiuto.

Ho un sito di vulnerabilità - DVWA. Sto cercando di lavorare su token (CSRF) in bruteforce.

Quando la pagina si carica ho un modulo HTML con login, password e token dell'utente. Il terzo campo è occupato da token dinamici (CSRF).

Devo usare bruteforce con il token CSRF.

  1. Ricevi user_token dalla pagina caricata
  2. Invia modulo tramite Fuzzer

Come ho capito, ho bisogno di creare uno script per ricevere user_token dalla pagina caricata e quindi eseguire Attak - > Fuzz sul link di autorizzazione, quindi seleziona user_token value e aggiungi lo script playload che lo riempirà ad ogni richiesta.

Ma non riesco a trovare alcuna informazione su Internet su come creare questo script. Qualcuno può aiutarmi?

    
posta user2264941 31.01.2017 - 12:56
fonte

2 risposte

1

È davvero un'opzione più semplice quando si utilizza il fuzzer. Aggiungi il processore di messaggi 'Anti-CSRF Token Refresher' - che rigenererà automaticamente il token per te :) Se non è disponibile, dovresti solo comunicare a ZAP il nome del token.

Vale la pena notare che al momento supportiamo solo i token CSRF nel corpo, non nell'URL.

Oh, e FYI nella prossima versione del componente aggiuntivo fuzzer, questo Message Processor verrà aggiunto di default se rileviamo un token CSRF nel messaggio che è stato cancellato:)

    
risposta data 23.03.2017 - 12:30
fonte
0

Questa FAQ potrebbe aiutarti, copre dvwa e fuzzing mentre gestisci i token tramite script: link

var SOURCE_URL = "http://localhost/DVWA/vulnerabilities/brute/";
var CSRF_TOKEN_NAME = "user_token";
var REQUEST_URI = new org.apache.commons.httpclient.URI(SOURCE_URL, true);

function processMessage(utils, message) {
    var msg = message.cloneRequest();
    msg.getRequestHeader().setURI(REQUEST_URI);
    var csrfTokenValue = extractInputFieldValue(getPageContent(utils, msg), CSRF_TOKEN_NAME);

    var params = message.getUrlParams();
    replace(params, CSRF_TOKEN_NAME, encodeURIComponent(csrfTokenValue));
    message.getRequestHeader().setGetParams(params);
}

function processResult(utils, fuzzResult){
    return true;
}

function getPageContent(utils, msg) {
    utils.sendMessage(msg);
    utils.addMessageToResults("Refresh " + CSRF_TOKEN_NAME, msg)
    return msg.getResponseBody().toString();
}

function extractInputFieldValue(page, fieldName) {
    var Source = Java.type("net.htmlparser.jericho.Source");
    var src = new Source(page);

    var it = src.getAllElements('input').iterator();

    while (it.hasNext()) {
        var element = it.next();
        if (element.getAttributeValue('name') == fieldName) {
            return element.getAttributeValue('value');
        }
    }
    return '';
}

function replace(params, name, value) {
    var it = params.iterator();

    while (it.hasNext()) {
        var param = it.next();
        if (param.getName() == name) {
            param.setValue(value);
            return;
        }
    }
}
    
risposta data 22.03.2017 - 00:37
fonte

Leggi altre domande sui tag