Changeset 1579
- Timestamp:
- 02/28/08 21:49:03 (6 months ago)
- Files:
-
- honeytrap/trunk/src/modules/htm_submitMWserv.c (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
honeytrap/trunk/src/modules/htm_submitMWserv.c
r1578 r1579 14 14 * still to come... 15 15 */ 16 17 #define C(); { printf("%s:%u\n", __PRETTY_FUNCTION__, __LINE__); fflush(stdout); } 18 16 19 17 20 #define _GNU_SOURCE 1 … … 50 53 #define TSS_UNKNOWN 1 51 54 #define TSS_OK 2 52 #define TSS_HEARTBEAT 353 55 54 56 #define ST_SUBMIT 1 … … 68 70 69 71 const char *mwserv_url; 72 char * submit_url; 70 73 71 74 const char *guid; … … 87 90 void plugin_unload(void) { 88 91 unhook(PPRIO_SAVEDATA, module_name, "submit_mwserv"); 92 free(submit_url); 89 93 return; 90 94 } … … 115 119 if OPT_IS("mwserv_url") { 116 120 mwserv_url = value; 121 asprintf(&submit_url, "%shoneytrap/submit-binary", mwserv_url); 117 122 } else if OPT_IS("guid") { 118 123 guid = value; … … 167 172 168 173 int response_code(const bstr *response) { 169 if (response->len >= 7 && memcmp(response->data, "ERROR: ", 7) == 0) return(TSS_ERROR); 170 if (response->len >= 9 && memcmp(response->data, "UNKNOWN: ", 9) == 0) return(TSS_UNKNOWN); 171 if (response->len >= 4 && memcmp(response->data, "OK: ", 4) == 0) return(TSS_OK); 172 if (response->len >= 11 && memcmp(response->data, "HEARTBEAT: ", 4) == 0) return(TSS_HEARTBEAT); 173 return(-1); 174 if (response->len >= 7 && memcmp(response->data, "UNKNOWN", 7) == 0) return(TSS_UNKNOWN); 175 if (response->len >= 2 && memcmp(response->data, "OK", 2) == 0) return(TSS_OK); 176 return(TSS_ERROR); 174 177 } 175 178 … … 178 181 switch(response_code(response)) { 179 182 case TSS_OK: 183 C(); 180 184 logmsg(LOG_NOISY, 1, "SubmitMWServ - Server returned transfer status OK.\n"); 181 185 return(TSS_OK); 182 case TSS_HEARTBEAT:183 logmsg(LOG_NOISY, 1, "SubmitMWServ - Server returned transfer status HEARTBEAT.\n");184 return(TSS_HEARTBEAT);185 case TSS_ERROR:186 logmsg(LOG_ERR, 1, "SubmitMWServ - Server returned transfer status ERROR.\n");187 return(TSS_ERROR);188 186 case TSS_UNKNOWN: 187 C(); 188 logmsg(LOG_WARN, 1, "SubmitMWServ - Server returned status UNKNOWN.\n"); 189 return(TSS_UNKNOWN); 189 190 default: 190 logmsg(LOG_ERR, 1, "SubmitMWServ - Server returned status UNKNOWN.\n"); 191 return(TSS_UNKNOWN); 192 } 193 191 { 192 char buf[response->len + 1]; 193 194 memcpy(buf, response->data, response->len); 195 buf[response->len] = 0; 196 197 logmsg(LOG_ERR, 1, "SubmitMWServ - Server returned unexpected response \"%s\".\n", buf); 198 return TSS_ERROR; 199 } 200 } 194 201 } 195 202 196 203 int transfer_data(CURLM *mhandle, const bstr *response) { 197 int max_fd, rv, handles , resp;204 int max_fd, rv, handles; 198 205 fd_set rfds, wfds, efds; 199 206 struct timeval select_timeout; … … 201 208 202 209 rv = 1; 203 while(rv ) {210 while(rv >= 0) { 204 211 FD_ZERO(&rfds); 205 212 FD_ZERO(&wfds); … … 214 221 max_fd = MAX(max_fd, sigpipe[0]); 215 222 216 select_timeout.tv_sec = timeout;223 select_timeout.tv_sec = 1; 217 224 select_timeout.tv_usec = 0; 218 225 … … 226 233 } 227 234 break; 228 case 0:229 logmsg(LOG_WARN, 1, "SubmitMWServ Warning - Select timed out.\n");230 if ((resp = check_response(response)) == -1) return(-1);231 else if (resp == 1) return(1);232 break;233 235 default: 236 234 237 if (FD_ISSET(sigpipe[0], &rfds) && (check_sigpipe() == -1)) { 235 238 fprintf(stderr, "SubmitMWServ Error - Select failed.\n"); … … 239 242 handles = 0; 240 243 logmsg(LOG_DEBUG, 1, "SubmitMWServ - Data to process.\n"); 244 245 241 246 while(curl_multi_perform(mhandle, &handles) == CURLM_CALL_MULTI_PERFORM && handles); 242 243 switch (resp = check_response(response)) { 244 printf("response is %u\n", resp); 245 case TSS_UNKNOWN: 246 break; 247 case TSS_OK: 248 return(1); 249 default: 250 return(-1); 247 248 249 250 { 251 CURLMsg * message; 252 int messagesRemaining; 253 254 while((message = curl_multi_info_read(mhandle, &messagesRemaining))) 255 { 256 if(message->msg == CURLMSG_DONE) 257 { 258 if(message->data.result) 259 { 260 logmsg(LOG_ERR, 1, "SubmitMWServ Error - %s\n", curl_easy_strerror(message->data.result)); 261 return TSS_ERROR; 262 } 263 else 264 return check_response(response); 265 } 266 } 251 267 } 252 break;253 268 } 254 269 } … … 272 287 return(NULL); 273 288 } 274 275 289 290 276 291 logmsg(LOG_NOISY, 1, "SubmitMWServ - Constructing HTTP form for request type %d.\n", type); 277 292 … … 296 311 curl_easy_setopt(*curlhandle, CURLOPT_SSL_VERIFYHOST, 0); 297 312 curl_easy_setopt(*curlhandle, CURLOPT_SSL_VERIFYPEER, 0); 298 curl_easy_setopt(*curlhandle, CURLOPT_URL, mwserv_url);313 curl_easy_setopt(*curlhandle, CURLOPT_URL, submit_url); 299 314 curl_easy_setopt(*curlhandle, CURLOPT_USERAGENT, "honeytrap " VERSION " (" MY_OS ", " MY_ARCH ", " MY_COMPILER ")"); 300 315 curl_easy_setopt(*curlhandle, CURLOPT_WRITEDATA, response); 301 316 curl_easy_setopt(*curlhandle, CURLOPT_WRITEFUNCTION, get_response); 317 curl_easy_setopt(*curlhandle, CURLOPT_TIMEOUT, timeout); 302 318 303 319 logmsg(LOG_DEBUG, 1, "SubmitMWServ - Creating multi handle.\n"); … … 339 355 memset(&response, 0, sizeof(bstr)); 340 356 357 if (build_uri(&uri, attack->download[i]) == -1) { 358 logmsg(LOG_ERR, 1, "SubmitMWServ Error - Unable to create URI: %m.\n"); 359 return(0); 360 } 361 341 362 if ((pinfo = init_handle(&multihandle, &curlhandle, 342 363 attack->download[i].dl_payload.data, attack->download[i].dl_payload.size, … … 346 367 } 347 368 348 if (transfer_data(multihandle, &response) == TSS_OK) 369 switch (transfer_data(multihandle, &response)) 370 { 371 case TSS_OK: 349 372 logmsg(LOG_NOTICE, 1, "SubmitMWServ - Sample is already present at %s, skipping submission.\n", mwserv_url); 350 else 373 free(response.data); 374 375 continue; 376 377 case TSS_ERROR: 351 378 logmsg(LOG_ERR, 1, "SubmitMWServ Error - Hash test failed.\n"); 379 free(response.data); 380 381 continue; 382 } 352 383 353 384 free(response.data); … … 356 387 // submit sample 357 388 logmsg(LOG_INFO, 1, "SubmitMWServ - Submitting sample to %s.\n", mwserv_url); 358 359 if (build_uri(&uri, attack->download[i]) == -1) {360 logmsg(LOG_ERR, 1, "SubmitMWServ Error - Unable to create URI: %m.\n");361 return(0);362 }363 389 364 390 memset(&response, 0, sizeof(bstr));
