Come configurare i vettori di input di scansione attiva in ZAP?

0

Voglio sviluppare un'applicazione utilizzando l'API ZAP per Java che esegue una scansione attiva su un sito. Ho il seguente codice:

private static final String ZAP_ADDRESS = "localhost";
private static final int ZAP_PORT = 8090;
private static final String ZAP_API_KEY =
        null; // Change this if you have set the apikey in ZAP via Options / API

private static final String TARGET = "http://localhost:8080/examples/jsp/jsp2/el/basic-arithmetic.jsp";

public static void main(String[] args) {
    ClientApi api = new ClientApi(ZAP_ADDRESS, ZAP_PORT, ZAP_API_KEY);

    try {
         //*********** SPIDER *******************
        System.out.println("Spider : " + TARGET);


        //Probamos OPCIONES del spider
        String maxChildren="0";//Limite de hijos a explorar por nodo (0 es sin limite)
        String recurse="true";//Recursividad (boolean)
        String contextName=null;//nombre del contexto
        String subtreeOnly="false";//Para restringir el escaneo al subarbol de la url especificada (boolean)


        api.spider.setOptionMaxDepth(5);//Profundidad máxima para realizar el rastreo
        api.spider.setOptionMaxDuration(0);//Tiempo maximo del escaneo, 0 es hasta que explore todo
        api.spider.setOptionMaxParseSizeBytes(2621440); // Tamaño maximo  en bytes de las respuestas a analizar
        api.spider.setOptionSendRefererHeader(true);//si las consultas del spider han de incluir el ‘Referer’ header. 
        api.spider.setOptionAcceptCookies(true);//Si aceptamos o no cookies durante el spider
        api.spider.setOptionProcessForm(true);//Si se deben procesar los forms encontrados
        api.spider.setOptionPostForm(true);//Si los form que usen POST se procesan
        api.spider.setOptionParseComments(true);//Si se procesaran los comentarios html buscando enlaces a recursos
        api.spider.setOptionParseRobotsTxt(true);//Si se procesan los archivos robots.txt que se encuentren buscando enlaces a recursos
        api.spider.setOptionParseSitemapXml(true);//Si se procesa el siteMap.xml
        api.spider.setOptionParseSVNEntries(false);//Si se procesa metadata de SVN
        api.spider.setOptionParseGit(false);//Si se procesa metadata de Git
        api.spider.setOptionHandleODataParametersVisited(false);//Indica si se deben detectar parametros de OData


        ApiResponse resp = api.spider.scan(TARGET, maxChildren, recurse, contextName, subtreeOnly);



        // The scan now returns a scan id to support concurrent scanning
        String scanid = ((ApiResponseElement) resp).getValue();

        // Poll the status until it completes
        int progress;
        while (true) {
            progress =
                    Integer.parseInt(
                            ((ApiResponseElement) api.spider.status(scanid)).getValue());
            System.out.println("Spider progress : " + progress + "%");
            if (progress >= 100) {
                break;
            }
            Thread.sleep(1000);
        }
        System.out.println("Analisis Spider completo");

        //*********** ASCAN *******************

        System.out.println("Active scan : " + TARGET);

        //Probamos OPCIONES del Active Scan
          recurse="true";//Recursividad (boolean)
          String inScopeOnly="false";//se puede usar para restringir el escaneo a las URL que están en el alcance 
          String scanPolicyName=null;//permite especificar la política de exploración (si no se proporciona ninguna, usa la política de exploración predeterminada)
          String method=null;//
          String postData="true";//Si usa datos POST

          api.ascan.setOptionScanHeadersAllRequests(false);//Si se activa escanea las cabeceras de todas las peticiones, no solo las que envían parámetros.
          api.
          api.ascan.excludeFromScan("1234abc");//Expresion regular que indica los que se va ignorar en el escaneo

          resp = api.ascan.scan(TARGET, recurse, inScopeOnly, scanPolicyName, method, postData);

          // The scan now returns a scan id to support concurrent scanning
          scanid = ((ApiResponseElement) resp).getValue();
          // Poll the status until it completes
          while (true) {

              progress =
                      Integer.parseInt(
                              ((ApiResponseElement) api.ascan.status(scanid)).getValue());
              System.out.println("Active Scan progress : " + progress + "%");
              if (progress >= 100) {
                  break;
              }
              Thread.sleep(1000);
          }
          System.out.println("Active Scan complete");


        //GUARDO EL RESULTADO Conjunto
        //HTML
         System.out.println("Creando REPORT...");
         File archivo = new File("./REPORT.html");
         BufferedWriter bw = new BufferedWriter(new FileWriter(archivo));
         bw.write(new String(api.core.htmlreport()));
         bw.close();
         System.out.println("Resultado del SPIDER Y ASCAN guardado en REPORT.html");

         //JSON
         archivo = new File("./REPORT.json");
         bw = new BufferedWriter(new FileWriter(archivo));
         bw.write(new String(api.core.jsonreport()));
         bw.close();
         System.out.println("Resultado del SPIDER Y ASCAN guardado en REPORT.json");



    } catch (Exception e) {
        System.out.println("Exception : " + e.getMessage());
        e.printStackTrace();
    }
}

Questo codice esegue una scansione attiva su un sito con configurazione personalizzata. Ho impostato diverse opzioni per la scansione Spider, ma non ho potuto utilizzare le Opzioni vettoriali di input attivo per la scansione attiva. Come potrei farlo?

    
posta Sergio Rey 13.09.2018 - 11:46
fonte

1 risposta

0

Per la cronologia questa risposta ha avuto una discussione in un gruppo di utenti ZAP: link e su StackOverflow: link

La soluzione non è semplice ma qui va:

Se osservi i valori predefiniti (o i valori correnti) tramite i punti finali optionTargetParamsInjectable e optionTargetParamsEnabledRPC , vedrai due valori interi come: 11 e 39 rispettivamente.

Esaminando link

Possiamo dare un senso a questo:
1 + 2 + 8 = 11
1 + 2 + 4 + 32 = 39 [Multipart (1), XML (2), JSON (4) e DWR (32) è 39.]

Quindi per gli endpoint dell'API:

  • setOptionTargetParamsEnabledRPC (Integer *)
  • setOptionTargetParamsInjectable (Integer *)

Calcola il valore e passalo all'API ....

    
risposta data 18.09.2018 - 17:57
fonte

Leggi altre domande sui tag