Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DrKillador en 3 Enero 2013, 19:36 pm



Título: [PROBLEMA] Ejecución de comandos en consola (dir vs ipconfig) Qué puede ocurrir?
Publicado por: DrKillador en 3 Enero 2013, 19:36 pm
Hola! Les expongo un problema con el que me he encontrado mientras desarrollaba una app.

Dispongo de una app web en asp que envia instrucciones de CMD a un agente C desplegado en una máquina Windows.

Las instrucciones que recibe el agente las ejecuta utilizando las siguientes funciones, y el resultado es enviado de nuevo a la aplicación web asp:

Código:
char* ReadAndHandleOutput(HANDLE hPipeRead)
{
    char lpBuffer[256]="";
    DWORD nBytesRead;
    char *partialResult;
    char result[10000]="";
    while(1)
    {
        if (!ReadFile(hPipeRead,lpBuffer,sizeof(lpBuffer),&nBytesRead,NULL) || !nBytesRead)
        {
            if (GetLastError() == ERROR_BROKEN_PIPE)
                break;
        }
        partialResult = (char *) malloc(10000);
        strncpy(partialResult,lpBuffer,nBytesRead);
        sprintf(result,"%s%s",result,partialResult);
    }
    return result;
}

//Ejecuta un comando de CMD
char* execute(char *argument)
{
    SECURITY_ATTRIBUTES sa;
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    void * leer;
    void * escribir;

    ZeroMemory(&sa,sizeof(&sa));

    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
    sa.bInheritHandle = TRUE;
    sa.lpSecurityDescriptor = NULL;

    CreatePipe(&leer,&escribir,&sa,0);

    GetStartupInfoA(&si);

    si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_HIDE;
    si.hStdOutput = escribir;
    si.hStdError  = escribir;
    si.hStdInput = leer;

    CreateProcess(0,argument,0,0,TRUE,0,NULL,NULL,&si,&pi);

    CloseHandle(escribir);

    return ReadAndHandleOutput(leer);
}

Funciona correctamente si le solicito comandos como "ipconfig", "arp -a" o "systeminfo" (me devuelve el resultado del comando perfectamente) pero si le solicito que me haga un "dir" o un "powershell ls", no los ejecuta.

¿Alguna idea de que puede ocurrir? Me estoy rayando :S

gracias!