Cómo obtener el token CSRF en la solicitud de autorización con OWASP ZAP en modo de fuerza bruta

1

Soy nuevo en OWASP ZAP, por lo que necesito tu ayuda.

Tengo sitio de vulnerabilidad - DVWA. Estoy tratando de trabajar en el token (CSRF) en bruteforce.

Cuando se carga la página, tengo un formulario HTML con inicio de sesión, contraseña y token de usuario. El tercer campo se rellena con el token dinámico (CSRF).

Necesito usar bruteforce con el token CSRF.

  1. Recibe user_token de la página cargada
  2. Enviar formulario a través de Fuzzer

Según tengo entendido, debo crear un script para recibir user_token de la página cargada y luego ejecutar Attak - > Fuzz en el enlace de autorización, luego seleccione user_token value y agregue el script de playload que lo llenará en cada solicitud.

Pero no puedo encontrar ninguna información en Internet sobre cómo crear este script. ¿Alguien puede ayudarme por favor?

    
pregunta user2264941 31.01.2017 - 12:56
fuente

2 respuestas

1

En realidad, hay una opción más fácil cuando se usa el fuzzer. Agregue el procesador de mensajes 'Anti-CSRF Token Refresher', que regenerará automáticamente el token :) Si no está disponible, solo debe informar a ZAP sobre el nombre del token.

Vale la pena señalar que actualmente solo admitimos tokens CSRF en el cuerpo, no en la URL.

Ah, y para tu información en la próxima versión del complemento fuzzer, este Procesador de mensajes se agregará de forma predeterminada si detectamos un token CSRF en el mensaje que se está borrando :)

    
respondido por el Simon Bennetts 23.03.2017 - 12:30
fuente
0

Estas preguntas frecuentes pueden ayudarlo, cubre dvwa y fuzzing mientras maneja tokens a través del script: enlace

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;
        }
    }
}
    
respondido por el kingthorin 22.03.2017 - 00:37
fuente

Lea otras preguntas en las etiquetas