Как я могу получить список предупреждений, связанных с правилами сканирования в OWASP ZAP? - PullRequest
0 голосов
/ 05 мая 2018

Я хочу получить список предупреждений в виде таблицы, как показано ниже. Я копирую URL в оповещениях и вручную готовлю такую ​​табличную таблицу. Однако мне нужно сделать это автоматически или полуавтоматически (по крайней мере)

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

1 Ответ

0 голосов
/ 05 мая 2018

Вы можете экспортировать отчет в 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:
Script tab separated output pasted in excel Script tab separated output pasted in excel

Подробные шаги:
(Предполагается, что ZAP запущен и сеанс, для которого вы хотите получить информацию, открыт / загружен).

1. Перейдите в дерево скриптов (за деревом сайтов) [если вы его не видите щелкните знак «плюс» рядом с вкладкой «Дерево сайтов» и добавьте «Сценарии»].
2. В дереве сценариев щелкните правой кнопкой мыши «Автономный» и выберите «Новый сценарий»: дать ему имя и выбрать JavaScript Script Engine ("EcmaScript : Oracle Nashorn ") [шаблон не требуется]. Нажмите" Сохранить "в окне" Новый " Диалоговое окно скрипта.
3. В новом окне скрипта (в области запроса / ответа) вставьте скрипт из ответа.
4. Запустите его (кнопка воспроизведения синего треугольника над сценарием панель ввода).
5. Результаты отобразятся на панели вывода под сценарий.
6. Скопируйте / вставьте вывод в Excel.

...