如何列出与 OWASP ZAP 中的扫描规则关联的警报?

How can I can list of alerts associated with scan rules in OWASP ZAP?

我想以如下表格形式获取警报列表。我复制了警报中的 URL,并自己手动准备了这样一个表格 table。但是,我需要自动或半自动(至少)执行此操作

Alert Name URL             Scan Type Scan_Name WASCID CWEID 
---------- --------------- --------- ---------  ----- ------

您可以在 XML 中导出报告并对其应用您可能喜欢的任何类型的 XSL 转换。

您可以将 XML 报告拉入 Excel(或任何电子表格程序)并对其进行操作。

您可以从网络 API 提取警报并将它们放在 XML 或 json 中,然后以编程方式处理它们。

您可以编写一个独立的脚本(在 ZAP 中)来遍历警报树并输出在脚本控制台窗格中分隔的详细信息选项卡。例如:

extAlert = org.parosproxy.paros.control.Control.getSingleton().
    getExtensionLoader().getExtension(
        org.zaproxy.zap.extension.alert.ExtensionAlert.NAME) 

extPscan = org.parosproxy.paros.control.Control.getSingleton().
    getExtensionLoader().getExtension(
        org.zaproxy.zap.extension.pscan.ExtensionPassiveScan.NAME);

var pf = Java.type("org.parosproxy.paros.core.scanner.PluginFactory");

printHeaders();

if (extAlert != null) {
    var Alert = org.parosproxy.paros.core.scanner.Alert;
    var alerts = extAlert.getAllAlerts();
    for (var i = 0; i < alerts.length; i++) {
        var alert = alerts[i]
        printAlert(alert);
    }
}

function printHeaders() {
    print('AlertName\tSource:PluginName\tWASC\tCWE');
}

function printAlert(alert) {
    var scanner = '';

    // If the session is loaded in ZAP and one of the extensions that provided a plugin for the 
    // existing alerts is missing (ex. uninstalled) then plugin (below) will be null, and hence scanner will end-up being empty

    if (alert.getSource() == Alert.Source.ACTIVE) {
        plugin = pf.getLoadedPlugin(alert.getPluginId());
        if (plugin != null) {
            scanner = plugin.getName();
        }
    }
    if (alert.getSource() == Alert.Source.PASSIVE && extPscan != null) {
        plugin = extPscan.getPluginPassiveScanner(alert.getPluginId());
        if (plugin != null) {
            scanner = plugin.getName();
        }
    }
    print(alert.getName() + '\t' + alert.getSource() + ':' + scanner + '\t' + alert.getWascId()  + '\t' + alert.getCweId());
    // For more alert properties see https://static.javadoc.io/org.zaproxy/zap/2.7.0/org/parosproxy/paros/core/scanner/Alert.html
}

生成如下脚本控制台输出(注意第 2、6 和 7 行,特定警报名称与一般扫描程序名称不同):

Alert_Name  Source:PluginName   WASC    CWE
Cross Site Scripting (DOM Based)    ACTIVE:Cross Site Scripting (DOM Based) 8   79
Non-Storable Content    PASSIVE:Content Cacheability    13  524
Content Security Policy (CSP) Header Not Set    PASSIVE:Content Security Policy (CSP) Header Not Set    15  16
Server Leaks Version Information via "Server" HTTP Response Header Field    PASSIVE:HTTP Server Response Header Scanner 13  200
Server Leaks Information via "X-Powered-By" HTTP Response Header Field(s)   PASSIVE:Server Leaks Information via "X-Powered-By" HTTP Response Header Field(s)   13  200
Non-Storable Content    PASSIVE:Content Cacheability    13  524
Timestamp Disclosure - Unix PASSIVE:Timestamp Disclosure    13  200

在 Excel 中粘贴得很好:

详细步骤:
(这假设 ZAP 是 运行,而您要获取信息的会话是 open/loaded)。

1. 转到脚本树(在站点树后面)[如果你看不到它 单击“站点树”选项卡附近的加号并添加 "Scripts"].
2. 在脚本树中右键单击 "Standalone" 和 select "New Script": 给它起个名字,然后 select JavaScript 脚本引擎(“EcmaScript : Oracle Nashorn") [不需要模板]。单击新建上的 "Save" 脚本对话框。
3.在新脚本window(在request/response区)粘贴脚本 来自答案。
4. 运行它(脚本上方的蓝色三角形播放按钮 输入窗格)。
5. 结果将显示在下面的输出窗格中 脚本。
6. Copy/paste输出成Excel.