Changeset 1557

Show
Ignore:
Timestamp:
02/17/08 21:53:39 (6 months ago)
Author:
till
Message:

honeytrap
- reworked Nebula submission module

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • honeytrap/trunk/src/modules/htm_submitNebula.c

    r1556 r1557  
    104104                } else if OPT_IS("secret") { 
    105105                        nebula_secret = value; 
     106                        if (strlen(nebula_secret) > 255) { 
     107                                logmsg(LOG_ERR, 1, "SubmitNebula Error - Secret must not be longer than 255 characters.\n"); 
     108                                exit(EXIT_FAILURE); 
     109                        } 
    106110                } else { 
    107111                        fprintf(stderr, "  Error - Invalid configuration option for plugin %s: %s\n", module_name, node->keyword); 
     
    114118int submit_nebula(Attack *attack) { 
    115119        struct hostent          *host; 
    116         u_char                  *cbuf, response[8]; 
     120        u_char                  *cbuf, response[9]; 
    117121        u_int32_t               cbuf_len; 
    118122        struct sockaddr_in      sock; 
    119123        int                     sock_fd; 
    120         u_int16_t             secret_len; 
     124        u_char                secret_len; 
    121125 
    122126        cbuf_len        = 0; 
     
    137141        logmsg(LOG_NOISY, 1, "SubmitNebula - Submitting attack data to %s:%u.\n", 
    138142                inet_ntoa(*(struct in_addr*)host->h_addr), nebula_port); 
    139  
    140  
    141  
    142         logmsg(LOG_DEBUG, 1, "SubmitNebula - Compressing attack data.\n"); 
    143         cbuf_len = attack->a_conn.payload.size + (attack->a_conn.payload.size * 0.0001) + 12; 
    144         if ((cbuf = calloc(1, cbuf_len)) == NULL) { 
    145                 logmsg(LOG_ERR, 1, "SubmitNebula Error - Unable to allocate memory: %m.\n"); 
    146                 return(-1); 
    147         } 
    148         switch (compress(cbuf, (unsigned long *)&cbuf_len, attack->a_conn.payload.data, attack->a_conn.payload.size)) { 
    149         case Z_OK: 
    150                 break; 
    151         case Z_MEM_ERROR: 
    152                 logmsg(LOG_ERR, 1, "SubmitNebula Error - Cannot compress attack data: Out of memory.\n"); 
    153                 return(-1); 
    154         case Z_BUF_ERROR: 
    155                 logmsg(LOG_ERR, 1, "SubmitNebula Error - Cannot compress attack data: Output buffer too small.\n"); 
    156                 return(-1); 
    157         default: 
    158                 logmsg(LOG_ERR, 1, "SubmitNebula Error - Cannot compress attack data: Unknown error.\n"); 
    159                 return(-1); 
    160         } 
    161         logmsg(LOG_DEBUG, 1, "SubmitNebula - Compressed data has %u bytes.\n", cbuf_len); 
    162143 
    163144 
     
    183164        // send secret length 
    184165        secret_len = strlen(nebula_secret); 
    185         if (write(sock_fd, &secret_len, 2) == -1) { 
     166        if (write(sock_fd, &secret_len, 1) == -1) { 
    186167                logmsg(LOG_ERR, 1, "SubmitNebula Error - Writing to socket failed: %m.\n"); 
    187168                close(sock_fd); 
     
    204185 
    205186 
    206         if (!read_line(sock_fd, (char *) response, 8, 10)) { 
     187        if (!read_line(sock_fd, (char *) response, 9, 10)) { 
    207188                logmsg(LOG_WARN, 1, "SubmitNebula Warning - Nebula server did not respond within 10 seconds, skipping submission.\n"); 
    208189                close(sock_fd); 
     
    243224        } 
    244225 
     226        // compress attack 
     227        logmsg(LOG_DEBUG, 1, "SubmitNebula - Compressing attack data.\n"); 
     228        cbuf_len = attack->a_conn.payload.size + (attack->a_conn.payload.size * 0.002) + 12; 
     229        if ((cbuf = calloc(1, cbuf_len)) == NULL) { 
     230                logmsg(LOG_ERR, 1, "SubmitNebula Error - Unable to allocate memory: %m.\n"); 
     231                return(-1); 
     232        } 
     233        switch (compress(cbuf, (unsigned long *)&cbuf_len, attack->a_conn.payload.data, attack->a_conn.payload.size)) { 
     234        case Z_OK: 
     235                break; 
     236        case Z_MEM_ERROR: 
     237                logmsg(LOG_ERR, 1, "SubmitNebula Error - Cannot compress attack data: Out of memory.\n"); 
     238                return(-1); 
     239        case Z_BUF_ERROR: 
     240                logmsg(LOG_ERR, 1, "SubmitNebula Error - Cannot compress attack data: Output buffer too small.\n"); 
     241                return(-1); 
     242        default: 
     243                logmsg(LOG_ERR, 1, "SubmitNebula Error - Cannot compress attack data: Unknown error.\n"); 
     244                return(-1); 
     245        } 
     246        logmsg(LOG_DEBUG, 1, "SubmitNebula - Compressed data has %u bytes.\n", cbuf_len); 
     247 
    245248        // send length of compressed attack 
    246249        if (write(sock_fd, &cbuf_len, 4) == -1) { 
     
    257260        } 
    258261 
     262        // wait for OK 
     263        logmsg(LOG_DEBUG, 1, "SubmitNebula - Attack sent, waiting for OK.\n"); 
     264        if (!read_line(sock_fd, (char *) response, 8, 10)) { 
     265                logmsg(LOG_WARN, 1, "SubmitNebula Warning - Nebula server did not respond within 10 seconds.\n"); 
     266        } else if (strlen((char *) response) != 2 || strncmp((char *) response, "OK", 2) != 0) 
     267                logmsg(LOG_WARN, 1, "SubmitNebula - Invalid response from Nebula server.\n"); 
     268 
    259269        close(sock_fd); 
    260270        free(cbuf); 
    261271 
    262         logmsg(LOG_DEBUG, 1, "SubmitNebula - Done.\n"); 
     272        logmsg(LOG_NOISY, 1, "SubmitNebula - Submission complete.\n"); 
    263273 
    264274        return(0);