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

如何在OWASP ZAP中列出与扫描规则关联的警报?,owasp,zap,Owasp,Zap,我想以如下表格形式获取警报列表。我复制警报中的URL,并亲自手动准备这样一个表格。但是,我需要自动或半自动(至少)执行此操作 您可以将报告导出为XML格式,并对其应用任何类型的XSL转换 您可以将XML报告拉入Excel(或任何电子表格程序)并对其进行操作 您可以从web API中提取警报,并将它们转换为XML或json格式,然后以编程方式处理它们 您可以编写一个独立脚本(在ZAP中)来遍历警报树并输出脚本控制台窗格中分隔的详细信息选项卡。例如: extAlert = org.parosprox

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


您可以将报告导出为XML格式,并对其应用任何类型的XSL转换

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

您可以从web 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
}
在Excel中粘贴效果良好:

详细步骤:
(这假设ZAP正在运行,并且您要获取信息的会话已打开/加载)。

1.转到脚本树(在站点树后面)[如果你看不到它 单击站点树选项卡附近的加号并添加“脚本”]。
2.在脚本树中,右键单击“独立”并选择“新建脚本”: 给它一个名称并选择JavaScript脚本引擎(“EcmaScript”) :Oracle Nashorn“[无需模板]。在新窗口上单击“保存” 脚本对话框。
3.在“新建脚本”窗口(在“请求/响应”区域)中,粘贴脚本 根据答案。
4.运行它(脚本上方的蓝色三角形播放按钮 输入窗格)。
5.结果将显示在下面的输出窗格中 脚本。

6.将输出复制/粘贴到Excel中。

请举例说明如何手动执行此操作,包括一些示例数据?这将有助于理解如何自动执行此操作。ZAP警报列表框以分组方式列出警报。我扩展了警报树的所有部分,并用鼠标和shift键选择它们。把它们复制到记事本上。稍后,我会将这些数据移动到excel中,并将alert_name列和url列分开。稍后我回到ZAP,点击每个警报,在右窗格中我看到包括WASCID、扫描名称等的描述。我返回excel并为每个警报编写此信息。我重复同一个警报,扫描该警报组中所有url的名称信息。如果这不可用,则具有警报名称的静态列表-扫描规则关联对我来说也可以。这样我就可以通过每个URL的alert_名称查询扫描规则。我一直在互联网上搜索警报名称扫描规则关联的适当列表,但我还没有找到。请在尝试提出更多问题之前阅读,以便您做好更好的准备,能够提出一个广受欢迎且更重要的是可回答的问题。谢谢您的详细回答。我想在ZAP上试用,但我以前没有为ZAP做过任何编程。你能提供更多的指导吗?1-这段代码将如何编译?2用户将如何从菜单或命令行触发它?3-是否必须将代码放在特定目录中4-将XSL文件与生成的XML放在同一目录中足以生成报告,还是执行XSL需要其他东西?5-我可以在ZAP菜单上为此报告添加菜单项吗?我期待着在ZAP上尝试这段代码,这对我来说将是一个挑战。转到脚本树(在站点树后面)[如果你看不到它,请单击站点树选项卡附近的加号并添加脚本控制台(我想这就是名称)]。在脚本树中右键单击Standalone并添加一个新脚本,给它一个名称并选择JavaScript引擎,无需模板。在tue新建脚本窗口(在tue请求/响应区域)中,粘贴答案中的脚本。运行它。结果将显示在脚本下方的tue输出窗格中。将输出复制/粘贴到Excel中。
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
}
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