From e045accfc378020c027d4518ca9cc76a684e30b0 Mon Sep 17 00:00:00 2001 From: James Lee Date: Thu, 2 Feb 2012 00:11:52 -0700 Subject: [PATCH] Refactor interface listing [See #6328] --- data/meterpreter/ext_server_stdapi.lso | Bin 203476 -> 204666 bytes .../stdapi/server/net/config/interface.c | 408 ++++++++---------- 2 files changed, 191 insertions(+), 217 deletions(-) diff --git a/data/meterpreter/ext_server_stdapi.lso b/data/meterpreter/ext_server_stdapi.lso index b8b7adfab1152f57cff851fbedf058401b024f96..0a430f2b03917e22ac8a872de7f7feb5eeb51587 100755 GIT binary patch delta 23312 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 + unsigned int addr_size; + struct iface *iface = &(*ifaces)[i]; + + iface->name = malloc(strlen(item->ifr_name)+1); + memcpy(iface->name, item->ifr_name, strlen(item->ifr_name)+1); + + /* + * SIOCGIFCONF will have gotten the name and ip addr, store them + */ + switch (addr->sa_family) { + case AF_INET: + addr_size = 4; + iface->addr = malloc(addr_size); + memcpy(iface->addr, &(((struct sockaddr_in*)addr)->sin_addr), addr_size); + break; + case AF_INET6: + addr_size = 16; + iface->addr = malloc(addr_size); + memcpy(iface->addr, &(((struct sockaddr_in6*)addr)->sin6_addr), addr_size); + break; + default: + /* We don't know how to display this thing, it doesn't have an + * address, give up. This will likely result in bogus info in + * uninitialized memory being used for the remainder of the + * list. + * + * XXX Should we free this one and try to continue with the rest? + */ + result = ENOTSUP; + goto fail; + } + iface->addr_size = addr_size; + + /* Get the MAC address */ + if(ioctl(sck, SIOCGIFHWADDR, item) < 0) { + dprintf("ioctl SIOCGIFHWADDR: %d: %s", errno, strerror(errno)); + result = errno; break; } + iface->hwaddr = malloc(6); + memcpy(iface->hwaddr, &(item->ifr_hwaddr.sa_data), 6); - memcpy(mac, ifr.ifr_hwaddr.sa_data, 6); - result = 0; - } while(0); + /* Get the netmask */ + if(ioctl(sck, SIOCGIFNETMASK, item) < 0) { + dprintf("ioctl SIOCGIFNETMASK: %d: %s", errno, strerror(errno)); + result = errno; + break; + } + iface->netmask = malloc(addr_size); + switch (addr->sa_family) { + case AF_INET: + memcpy(iface->netmask, &((struct sockaddr_in*)&(item->ifr_netmask))->sin_addr, addr_size); + break; + case AF_INET6: + memcpy(iface->netmask, &((struct sockaddr_in6*)&(item->ifr_netmask))->sin6_addr, addr_size); + break; + } - if(fd != -1) close(fd); + } + return 0; + +fail: return result; } +/* + * mainly for debugging + */ +char *get_ip_str(const struct sockaddr *sa, char *s, size_t maxlen) +{ + switch(sa->sa_family) { + case AF_INET: + inet_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr), + s, maxlen); + break; + + case AF_INET6: + inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr), + s, maxlen); + break; + + default: + strncpy(s, "Unknown AF", maxlen); + return NULL; + } + + return s; +} + #endif /* @@ -116,220 +260,50 @@ DWORD request_net_config_get_interfaces(Remote *remote, Packet *packet) if (table) free(table); -#elif 0 - Tlv entries[5]; // xxx, we can probably support more. ip aliases, etc. - char errbuf[PCAP_ERRBUF_SIZE+4]; - pcap_if_t *interfaces, *iter; - pcap_addr_t *addresses; - unsigned char mac[6]; +#else + struct iface *ifaces; + int count; + int i; + int if_error; + Tlv entries[4]; - interfaces = iter = NULL; + if_error = get_ifaces(&ifaces, &count); - memset(entries, 0, sizeof(entries)); + if (if_error) { + result = if_error; + } else { + for (i = 0; i < count; i++) { - do { - if(pcap_findalldevs(&interfaces, errbuf) == -1) { - result = ENOMEM; // xxx, send errbuf to remote - break; - } + entries[0].header.length = strlen(ifaces[i].name)+1; + entries[0].header.type = TLV_TYPE_MAC_NAME; + entries[0].buffer = (PUCHAR)ifaces[i].name; - for(iter = interfaces; iter != NULL ; iter = iter->next ) { - entryCount = 0; + entries[1].header.length = 6; + entries[1].header.type = TLV_TYPE_MAC_ADDR; + entries[1].buffer = (PUCHAR)ifaces[i].hwaddr; - if(strcmp(iter->name, "any") == 0) continue; + entries[2].header.length = ifaces[i].addr_size; + entries[2].header.type = TLV_TYPE_IP; + entries[2].buffer = (PUCHAR)ifaces[i].addr; - dprintf("[%s] Processing %s", __FUNCTION__, iter->name); - - entries[entryCount].header.length = strlen(iter->name)+1; - entries[entryCount].header.type = TLV_TYPE_MAC_NAME; - entries[entryCount].buffer = (PUCHAR)iter->name; - entryCount++; - - for(addresses = iter->addresses ; addresses != NULL ; addresses = addresses->next) { - struct sockaddr_in *sin; - - dprintf("[%s/%s] addr = %p, netmask = %p, broadaddr = %p, dstaddr = %p", __FUNCTION__, iter->name); - dprintf("[%s/%s] addresses->addr.sa_family = %d", __FUNCTION__, iter->name, addresses->addr->sa_family); - - if(addresses->addr == NULL) { - dprintf("[%s/%s] addresses->addr = NULL ?", __FUNCTION__, iter->name); - break; - } - - if(addresses->addr->sa_family == AF_INET) { - sin = (struct sockaddr_in *)(addresses->addr); - - entries[entryCount].header.length = sizeof(DWORD); - entries[entryCount].header.type = TLV_TYPE_IP; - entries[entryCount].buffer = (PUCHAR)&sin->sin_addr.s_addr; - entryCount++; - - if(addresses->netmask) { - sin = (struct sockaddr_in *)(addresses->netmask); - entries[entryCount].header.length = sizeof(DWORD); - entries[entryCount].header.type = TLV_TYPE_NETMASK; - entries[entryCount].buffer = (PUCHAR)&sin->sin_addr.s_addr; - entryCount++; - } - - - - break; - } - - } + entries[3].header.length = ifaces[i].addr_size; + entries[3].header.type = TLV_TYPE_NETMASK; + entries[3].buffer = (PUCHAR)ifaces[i].netmask; - get_interface_mac_addr(iter->name, mac); - - entries[entryCount].header.length = 6; - entries[entryCount].header.type = TLV_TYPE_MAC_ADDR; - entries[entryCount].buffer = (PUCHAR)(mac); - entryCount++; - - - dprintf("[%s] adding response with %d entries", __FUNCTION__, entryCount); - packet_add_tlv_group(response, TLV_TYPE_NETWORK_INTERFACE, entries, entryCount); - dprintf("[%s] done with adding", __FUNCTION__); + packet_add_tlv_group(response, TLV_TYPE_NETWORK_INTERFACE, entries, 4); } - - } while(0); - - if(interfaces) { - dprintf("[%s] calling pcap_freealldevs()", __FUNCTION__); - pcap_freealldevs(interfaces); } - dprintf("[%s] and done!", __FUNCTION__); - -#else - // List of TLVs used for each interface. Will contain name, mac addr, ip addr, netmask - Tlv entries[5]; - - struct ifconf ifc = {0}; - struct ifreq *ifr = NULL; - char buf[1024] = {0}; - int sck = 0; - int i = 0; - unsigned int num_ifaces = 0; - - do { - /* Get a socket handle. */ - sck = socket(PF_INET, SOCK_DGRAM, 0); - if(sck < 0) { - dprintf("socket: %d: %s", errno, strerror(errno)); - result = errno; - break; - } - - /* Query available interfaces. */ - ifc.ifc_len = sizeof(buf); - ifc.ifc_buf = buf; - if(ioctl(sck, SIOCGIFCONF, &ifc) < 0) { - dprintf("ioctl SIOCGIFCONF: %d: %s", errno, strerror(errno)); - result = errno; - break; - } - - /* Iterate through the list of interfaces. */ - ifr = ifc.ifc_req; - num_ifaces = ifc.ifc_len / sizeof(struct ifreq); - - for(i = 0; i < num_ifaces; i++) - { - struct ifreq *item = &ifr[i]; - struct sockaddr *addr = &(item->ifr_addr); - unsigned int entryCount = 0; - unsigned int addr_size; - - switch (addr->sa_family) { - case AF_INET: - addr_size = 4; - entries[entryCount].buffer = malloc(addr_size); - memcpy(entries[entryCount].buffer, ((PUCHAR)&(((struct sockaddr_in*)addr)->sin_addr)), addr_size); - break; - case AF_INET6: - addr_size = 16; - entries[entryCount].buffer = malloc(addr_size); - memcpy(entries[entryCount].buffer, &(((struct sockaddr_in6*)addr)->sin6_addr), addr_size); - break; - } - entries[entryCount].header.length = addr_size; - entries[entryCount].header.type = TLV_TYPE_IP; - entryCount++; - - entries[entryCount].header.length = strlen(item->ifr_name)+1; - entries[entryCount].header.type = TLV_TYPE_MAC_NAME; - entries[entryCount].buffer = (PUCHAR)malloc(strlen(item->ifr_name)+1); - memcpy(entries[entryCount].buffer, item->ifr_name, strlen(item->ifr_name)+1); - entryCount++; - - /* Get the MAC address */ - if(ioctl(sck, SIOCGIFHWADDR, item) < 0) { - dprintf("ioctl SIOCGIFHWADDR: %d: %s", errno, strerror(errno)); - result = errno; - break; - } - entries[entryCount].header.length = 6; - entries[entryCount].header.type = TLV_TYPE_MAC_ADDR; - entries[entryCount].buffer = malloc(6); - memcpy(entries[entryCount].buffer, &(item->ifr_hwaddr.sa_data), 6); - entryCount++; - - /* Get the netmask */ - if(ioctl(sck, SIOCGIFNETMASK, item) < 0) { - dprintf("ioctl SIOCGIFNETMASK: %d: %s", errno, strerror(errno)); - result = errno; - break; - } - entries[entryCount].header.length = addr_size; - entries[entryCount].header.type = TLV_TYPE_NETMASK; - entries[entryCount].buffer = malloc(addr_size); - switch (addr->sa_family) { - case AF_INET: - memcpy(entries[entryCount].buffer, &((struct sockaddr_in*)&(item->ifr_netmask))->sin_addr, addr_size); - break; - case AF_INET6: - memcpy(entries[entryCount].buffer, &((struct sockaddr_in6*)&(item->ifr_netmask))->sin6_addr, addr_size); - break; - } - entryCount++; - - packet_add_tlv_group(response, TLV_TYPE_NETWORK_INTERFACE, entries, entryCount); - - } - } while (0); - + if (ifaces) + free_ifaces(ifaces, count); #endif // Transmit the response if valid packet_transmit_response(result, remote, response); - dprintf("after transmit"); - - for (i = 0; i < entryCount; i++) { - - } return result; } -char *get_ip_str(const struct sockaddr *sa, char *s, size_t maxlen) -{ - switch(sa->sa_family) { - case AF_INET: - inet_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr), - s, maxlen); - break; - case AF_INET6: - inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr), - s, maxlen); - break; - default: - strncpy(s, "Unknown AF", maxlen); - return NULL; - } - - return s; -}