int catch_cookie(char **ressource , t_datathread *data) { char url[MAX_SIZE_URL]; memset(url, 0, MAX_SIZE_URL); char *auth=NULL; strncpy(url, "GET ", 4); url[4]='\0'; add_proxy_header(data, url); if( (strlen(url)+strlen(data->opt.url.url_pre))>MAX_SIZE_URL) return(-2); strncat(url,data->opt.url.url_pre, strlen(data->opt.url.url_pre)); if(!checkhost(data->opt.head, data->opt.headers)) { if( (strlen(url) + 17 + strlen(data->opt.url.host) + 2 + 1)> MAX_SIZE_URL) return(-2); strncat(url," HTTP/1.1\r\nHost: ", 17); strncat(url,data->opt.url.host, strlen(data->opt.url.host)); strncat(url,"\r\n", 2); } else { if((strlen(url) + 12)> MAX_SIZE_URL) return(-2); strncat(url," HTTP/1.1\r\n", 11); } if(data->opt.headers != NULL) { if( (strlen(url) + strlen(data->opt.headers) + 3 ) > MAX_SIZE_URL) return(-2); strncat(url, data->opt.headers, strlen(data->opt.headers)); strncat(url, "\r\n", 2); } if(data->opt.auth.user!=NULL && data->opt.auth.pass!=NULL) { auth=basic_authent(data->opt.auth.user, data->opt.auth.pass); if( (strlen(url) +21+ strlen(auth) +2+1 ) > MAX_SIZE_URL) return(-2); strcat(url, "Authorization: Basic "); strcat(url, auth); strcat(url, "\r\n"); FREE_BUF(auth); } if ( (strlen(url) +3) > MAX_SIZE_URL) return(-2); strncat(url,"\r\n", 2); *ressource = calloc(strlen(url)+1,1); memset(*ressource, 0, sizeof(*ressource)); EXIT_IFNULL(*ressource, "Memory Error"); strncpy(*ressource, url, strlen(url)); return(1); }
int inject_header( char **ressource, t_datathread *data, char *word1, int sock, SSL *ssl) { char url[MAX_SIZE_URL]; memset(url, 0, MAX_SIZE_URL); char *auth=NULL; char *receive=NULL; unsigned int cl; int i=0, size; time_t start_time, stop_time; int delay; t_response response; t_cookies local_cook=data->opt.cookies; bool dontup=false; const char *Header[]= { "Cookie", "Host", "User-Agent", "Accept", "Accept-Language", "Accept-Encoding", "Accept-Charset", "Keep-Alive", "Connection", "Referer", NULL }; while(Header[i] != NULL || local_cook!=NULL) { if(data->opt.method != NULL && strlen(data->opt.method)< (MAX_SIZE_URL-2)) { strncpy(url, data->opt.method, strlen(data->opt.method)); url[strlen(data->opt.method)]=' '; url[strlen(data->opt.method)+1]='\0'; } else { strncpy(url, "GET ", 4); url[4]='\0'; } add_proxy_header(data, url); if( (strlen(url)+strlen(data->opt.url.url_pre))>MAX_SIZE_URL) return(-2); strncat(url,data->opt.url.url_pre, strlen(data->opt.url.url_pre)); if(!checkhost(data->opt.head, data->opt.headers) && strcasecmp(Header[i],"Host")!=0) { if( (strlen(url) + 17 + strlen(data->opt.url.host) + 2 + 1)> MAX_SIZE_URL) return(-2); strncat(url," HTTP/1.1\r\nHost: ", 17); strncat(url,data->opt.url.host, strlen(data->opt.url.host)); strncat(url,"\r\n", 2); } else { if((strlen(url) + 12)> MAX_SIZE_URL) return(-2); strncat(url," HTTP/1.1\r\n", 11); } if(data->opt.headers != NULL) { if( (strlen(url) + strlen(data->opt.headers) + 1 ) > MAX_SIZE_URL) return(-2); strncat(url, data->opt.headers, strlen(data->opt.headers)); } if( (strlen(url) + strlen(Header[i]) + 5 +strlen(word1)) > MAX_SIZE_URL) return(-2); strcat(url, Header[i]); strcat(url, ": "); if(local_cook!=NULL) { if( (strlen(url) + strlen(local_cook->cookie) +3+strlen(word1)) > MAX_SIZE_URL) return(-2); strcat(url, local_cook->cookie); local_cook=local_cook->next_cook; dontup=true; } else dontup=false; if(strcasecmp(Header[i], "Host") ==0 && (strlen(url) + strlen(data->opt.url.host) )<MAX_SIZE_URL) strcat(url, data->opt.url.host); strncat(url, word1, strlen(word1)); strcat(url, "\r\n"); if(data->opt.auth.user!=NULL && data->opt.auth.pass!=NULL) { auth=basic_authent(data->opt.auth.user, data->opt.auth.pass); if( (strlen(url) +21+ strlen(auth) +2+1 ) > MAX_SIZE_URL) return(-2); strcat(url, "Authorization: Basic "); strcat(url, auth); strcat(url, "\r\n"); FREE_BUF(auth); } if ( (strlen(url) +3) > MAX_SIZE_URL) return(-2); strncat(url,"\r\n", 2); start_time=time(NULL); size = iosocket(sock, url, &receive, data->opt, ssl, &cl); stop_time=time(NULL); delay= stop_time-start_time; if(size == -1) { if(data->opt.debug) fprintf(stderr, "\n Read on socket "); continue; } response_inject(receive, size, cl, &response, &(data->opt), Header[i], word1, delay); memset(url, 0, MAX_SIZE_URL); sleep(data->opt.wait); if(data->opt.url.ssl) { closesocks(&ssl, sock); sock=opensock(data); if(data->opt.proxy.ip != NULL) prepare_connect(data, sock); ssl=opensocks(sock, &data->opt); } else { close(sock); sock=opensock(data); } if(!dontup) i++; } FREE_BUF(receive); return(1); }
bp_whoami_res * bootparamproc_whoami_1_svc(bp_whoami_arg *whoami, struct svc_req *req) { in_addr_t haddr; static bp_whoami_res res; if (debug) fprintf(stderr,"whoami got question for %d.%d.%d.%d\n", 255 & whoami->client_address.bp_address_u.ip_addr.net, 255 & whoami->client_address.bp_address_u.ip_addr.host, 255 & whoami->client_address.bp_address_u.ip_addr.lh, 255 & whoami->client_address.bp_address_u.ip_addr.impno); if (dolog) syslog(LOG_NOTICE, "whoami got question for %d.%d.%d.%d\n", 255 & whoami->client_address.bp_address_u.ip_addr.net, 255 & whoami->client_address.bp_address_u.ip_addr.host, 255 & whoami->client_address.bp_address_u.ip_addr.lh, 255 & whoami->client_address.bp_address_u.ip_addr.impno); bcopy((char *)&whoami->client_address.bp_address_u.ip_addr, (char *)&haddr, sizeof(haddr)); he = gethostbyaddr(&haddr,sizeof(haddr),AF_INET); if ( ! he ) goto failed; if (debug) warnx("this is host %s", he->h_name); if (dolog) syslog(LOG_NOTICE,"This is host %s\n", he->h_name); strncpy(askname, he->h_name, sizeof(askname)); askname[sizeof(askname)-1] = 0; if (checkhost(askname, hostname, sizeof hostname) ) { res.client_name = hostname; getdomainname(domain_name, MAX_MACHINE_NAME); res.domain_name = domain_name; if ( res.router_address.address_type != IP_ADDR_TYPE ) { res.router_address.address_type = IP_ADDR_TYPE; bcopy( &route_addr, &res.router_address.bp_address_u.ip_addr, sizeof(in_addr_t)); } if (debug) fprintf(stderr, "Returning %s %s %d.%d.%d.%d\n", res.client_name, res.domain_name, 255 & res.router_address.bp_address_u.ip_addr.net, 255 & res.router_address.bp_address_u.ip_addr.host, 255 & res.router_address.bp_address_u.ip_addr.lh, 255 & res.router_address.bp_address_u.ip_addr.impno); if (dolog) syslog(LOG_NOTICE, "Returning %s %s %d.%d.%d.%d\n", res.client_name, res.domain_name, 255 & res.router_address.bp_address_u.ip_addr.net, 255 & res.router_address.bp_address_u.ip_addr.host, 255 & res.router_address.bp_address_u.ip_addr.lh, 255 & res.router_address.bp_address_u.ip_addr.impno); return(&res); } failed: if (debug) warnx("whoami failed"); if (dolog) syslog(LOG_NOTICE,"whoami failed\n"); return(NULL); }