-5

我一直在关注使用 ZAP 对 Damn Vulnerable Web Application 进行基于脚本的身份验证的文档。我已经http://localhost/dvwa/login.php通过Manual Explore导航到它,它在我的 localhost 上打开了DVWA应用程序,如下所示:

dvwa_application

并将 URL 添加到Default Context

我还dvwa使用以下配置创建了脚本:

dvwa_script_configuration

并修改了dvwa脚本:

dvwa_script

现在,当我尝试Configure Context Authentication时,dvwa脚本确实被加载但该CSRF字段没有显示。

dvwa_script_based_authentication

此外,POST Data甚至不显示,但Extra POST Data显示。

我在步骤中遗漏了什么吗?有人可以帮我吗?

4

1 回答 1

-1

使用 ZAP 的该死的易受攻击的 Web 应用程序的基于脚本的身份验证部分文档中的修改脚本

auth_dvwa_zap_faulty_script

似乎不完整。

完整的脚本可在设置 ZAP 以测试该死的易受攻击的 Web 应用程序 (DVWA)中获得,如下所示:

function authenticate(helper, paramsValues, credentials) {
    var loginUrl = paramsValues.get("Login URL");
    var csrfTokenName = paramsValues.get("CSRF Field");
    var csrfTokenValue = extractInputFieldValue(getPageContent(helper, loginUrl), csrfTokenName);
    var postData = paramsValues.get("POST Data");

    postData = postData.replace('{%username%}', encodeURIComponent(credentials.getParam("Username")));
    postData = postData.replace('{%password%}', encodeURIComponent(credentials.getParam("Password")));
    postData = postData.replace('{%' + csrfTokenName + '%}', encodeURIComponent(csrfTokenValue));

    var msg = sendAndReceive(helper, loginUrl, postData);
    return msg;
}

function getRequiredParamsNames() {
    return [ "Login URL", "CSRF Field", "POST Data" ];
}

function getOptionalParamsNames() {
    return [];
}

function getCredentialsParamsNames() {
    return [ "Username", "Password" ];
}

function getPageContent(helper, url) {
    var msg = sendAndReceive(helper, url);
    return msg.getResponseBody().toString();
}

function sendAndReceive(helper, url, postData) {
    var msg = helper.prepareMessage();

    var method = "GET";
    if (postData) {
    method = "POST";
    msg.setRequestBody(postData);
    }

    var requestUri = new org.apache.commons.httpclient.URI(url, true);
    var requestHeader = new org.parosproxy.paros.network.HttpRequestHeader(method, requestUri, "HTTP/1.0");
    msg.setRequestHeader(requestHeader);

    helper.sendAndReceive(msg);

    return msg;
}

function extractInputFieldValue(page, fieldName) {
    // Rhino:
    var src = new net.htmlparser.jericho.Source(page);
    // Nashorn:
    // 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 '';
}

使用这个脚本,CSRF Field字段POST Data显示得非常完美。

dvwa_loaded

于 2020-07-30T12:54:17.633 回答