Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: fary en 27 Marzo 2011, 14:48 pm



Título: Shell Remota en C
Publicado por: fary en 27 Marzo 2011, 14:48 pm
Buenas, estoi intentando hacer una Shell Remota en C  ya que nunca hice una en este lenguaje y me pica la curiosidad  :xD el caso es que no me sale...

El código que tengo es este:

Código
  1. #include <windows.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4.  
  5. int main()
  6. {
  7.    PHANDLE leer;
  8.    PHANDLE escribir;
  9.  
  10.    SECURITY_ATTRIBUTES sa;
  11.    STARTUPINFO si;
  12.    PROCESS_INFORMATION pi;
  13.  
  14.    DWORD bytes;
  15.  
  16.    CreatePipe(leer,escribir,&sa,0);
  17.  
  18.    si.cb = 68;
  19.    si.dwFlags = 257;
  20.  
  21.    si.hStdError = escribir;
  22.    si.hStdOutput = escribir;
  23.  
  24.    CreateProcessA(0,"cmd.exe /c ping 127.0.0.1", &sa, &sa, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi);
  25.    Sleep(100);
  26.    CloseHandle(escribir);
  27.  
  28.    char buffer[1024];
  29.    char total[1024];
  30.  
  31.    int ret = ReadFile(leer,buffer,250,&bytes,0);
  32.  
  33.    lstrcat(total,buffer);
  34.  
  35.    while(ret != 0)
  36.    {
  37.        ret = ReadFile(leer,buffer,250,&bytes,0);
  38.        lstrcat(total,buffer);      
  39.    }
  40.  
  41.    MessageBoxA(0,total,0,0);
  42.    system("PAUSE");
  43.  
  44.    return 0;
  45. }
  46.  

Alguien sabe que hago mal?

salu2!


Título: Re: Shell Remota en C
Publicado por: Karcrack en 27 Marzo 2011, 15:31 pm
Esta es la buen forma de hacerlo:
Código:
http://goodfellas.shellcode.com.ar/docz/asm/WritingSmallShellcode.pdf
:D


Título: Re: Shell Remota en C
Publicado por: fary en 27 Marzo 2011, 15:36 pm
Muchas gracias Karcrack sin duda lo leeré pero tambien me gustaria saber que ago mal en el código que postee.

salu2!


Título: Re: Shell Remota en C
Publicado por: [Zero] en 27 Marzo 2011, 16:53 pm
¿No tendrías que crear el pipe luego de iniciar la shell? Estas llamando a CreatePipe con dos handles nulos (o ni eso, que no están inicializados a 0), al igual que tampoco inicializaste a 0 los miembros de PROCESS_INFORMATION y STARTUPINFO (salvo cb, que sí lo pusiste bien).

Saludos


Título: Re: Shell Remota en C
Publicado por: fary en 27 Marzo 2011, 18:02 pm
Muchas gracias a los dos, ya lo consegui hacer... el caso es que me quedo así:

Código
  1. #include <windows.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4.  
  5. int main()
  6. {
  7.    SECURITY_ATTRIBUTES sa;
  8.    STARTUPINFO si;
  9.    PROCESS_INFORMATION pi;
  10.  
  11.    void * leer;
  12.    void * escribir;
  13.  
  14.    ZeroMemory(&sa,sizeof(&sa));
  15.  
  16.    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
  17.    sa.bInheritHandle = TRUE;
  18.    sa.lpSecurityDescriptor = NULL;
  19.  
  20.    CreatePipe(&leer,&escribir,&sa,0);
  21.  
  22.    GetStartupInfoA(&si);
  23.  
  24.    si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
  25.    si.wShowWindow = SW_HIDE;
  26.    si.hStdOutput = escribir;
  27.    si.hStdError  = escribir;
  28.    si.hStdInput = leer;
  29.  
  30.    CreateProcessA(0,"c:\\windows\\system32\\cmd.exe /c dir",0,0,TRUE,0,0,0,&si,&pi);
  31.    Sleep(200);
  32.    CloseHandle(escribir);
  33.  
  34.    char buffer[1024];
  35.    DWORD bleidos;
  36.    ReadFile(leer,buffer,1024,&bleidos,0);
  37.    MessageBoxA(0,buffer,0,0);
  38.  
  39.    system("PAUSE");
  40.    return 0;
  41. }


No es una "MegaShell" pero su "apaño" hace  :P
salu2!


Título: Re: Shell Remota en C
Publicado por: Karcrack en 27 Marzo 2011, 19:11 pm
@Drinky94: Mejor seria que en vez de utilizar una ruta hardcodeada pusieses la variable de entorno adecuada; %ComSpec% :) Y eso de usar Sleeps es muy cutre :P :P


Título: Re: Shell Remota en C
Publicado por: fary en 27 Marzo 2011, 20:34 pm
Te refieres a esperar a que se cree el proceso usando WaitForSingleObject, no?

salu2!


Título: Re: Shell Remota en C
Publicado por: Karcrack en 27 Marzo 2011, 21:26 pm
Hasta que el proceso no se crea no continua la ejecución de tu programa :D


Título: Re: Shell Remota en C
Publicado por: fary en 27 Marzo 2011, 23:42 pm
Hasta que el proceso no se crea no continua la ejecución de tu programa :D

No se me ocurre como hacerlo... de una forma rápida, alguna pista?

salu2!


Título: Re: Shell Remota en C
Publicado por: Karcrack en 28 Marzo 2011, 16:14 pm
No hay que hacer nada :huh: Con hacer CreateProces() sobra... hasta que el proceso no se ha creado no vuelve la ejecución a tu programa...


Título: Re: Shell Remota en C
Publicado por: fary en 31 Marzo 2011, 15:19 pm
Ah, vale...   ;D

thanks...