Description: Support for client certificate Permit one to use a client-side certificate through a dedicated option. Forwarded: not-needed Author: Mathieu BAEUMLER Bug: https://bugs.debian.org/884733 --- a/src/estructuras.h +++ b/src/estructuras.h @@ -52,6 +52,7 @@ int use_pass; int use_cookie; int path_as_is; + int use_client_certificate; int verify_ssl; int use_agent; int ignore_nec; @@ -82,6 +83,7 @@ char exts_file[STRING_SIZE]; char exts_list[STRING_SIZE]; char proxy[STRING_SIZE]; + char client_certificate[STRING_SIZE]; char pass_string[STRING_SIZE]; char proxypass_string[STRING_SIZE]; char cookie[STRING_SIZE]; --- a/dirb.1 +++ b/dirb.1 @@ -43,6 +43,10 @@ .RB Set a cookie for the HTTP request. .TP +.B -E +.RB +Use the specified client certificate file. +.TP .B -f .RB Fine tunning of NOT_FOUND (404) detection. --- a/src/dirb.c +++ b/src/dirb.c @@ -6,6 +6,9 @@ */ #include "dirb.h" +/* lonely object file handling effective globals, other include +** ext_variables.h through dirb.h */ +#include "variables.h" /* @@ -30,6 +33,7 @@ options.speed=0; options.add_header=0; options.path_as_is=0; + options.use_client_certificate=0; encontradas=0; descargadas=0; @@ -67,7 +71,7 @@ optind+=2; } - while((c = getopt(argc,argv,"a:b:c:d:fgh:H:ilm:M:n:N:o:p:P:rRsSvwx:X:u:tz:"))!= -1){ + while((c = getopt(argc,argv,"a:b:c:d:fgh:E:H:ilm:M:n:N:o:p:P:rRsSvwx:X:u:tz:"))!= -1){ switch(c) { case 'a': options.use_agent=1; @@ -83,6 +87,10 @@ case 'd': options.debuging=atoi(optarg); break; + case 'E': + options.use_client_certificate=1; + strncpy(options.client_certificate, optarg, STRING_SIZE-1); + break; case 'f': options.finetunning=1; break; @@ -260,6 +268,7 @@ printf(" -b : Use path as is.\n"); printf(" -c : Set a cookie for the HTTP request.\n"); // printf(" -d : Activate DEBUGing.\n"); + printf(" -E : path to the client certificate.\n"); printf(" -f : Fine tunning of NOT_FOUND (404) detection.\n"); // printf(" -g : Save found URLs to disk. (Still not implemented)\n") // printf(" -h : Use your custom Virtual Host header.\n"); --- a/src/get_url.c +++ b/src/get_url.c @@ -60,6 +60,10 @@ curl_easy_setopt(curl, CURLOPT_PATH_AS_IS, 1); } + if (options.use_client_certificate) { + curl_easy_setopt(curl, CURLOPT_SSLCERT, options.client_certificate); + } + if(options.use_vhost) { strncpy(host_header, "Host: ", 6); strncat(host_header, options.vhost, STRING_SIZE-1-strlen(host_header)); --- a/src/options.c +++ b/src/options.c @@ -64,6 +64,12 @@ IMPRIME("DEBUG_LEVEL: %d\n", options.debuging); } + // -E + + if(options.use_client_certificate==1) { + IMPRIME("CLIENT_CERTIFICATE: %s\n", options.client_certificate); + } + // -f if(options.finetunning==1) {