elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
22 Agosto 2008, 05:53  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderador: ®®)
| | |-+  problema "pipes" funcion EON para contrlar cmd.exe con sockets
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: problema "pipes" funcion EON para contrlar cmd.exe con sockets  (Leído 350 veces)
octalh

Desconectado Desconectado

Mensajes: 533


"El sueño de la razón produce monstruos"


Ver Perfil WWW
problema "pipes" funcion EON para contrlar cmd.exe con sockets
« en: 01 Junio 2008, 10:31 »

Hola, resulta que estoy haciendo pruebas con sockets y basicamente estoy siguiendo los manuales que encontre en el foro...

hice mis funciones para controlar una shell remota como las del ejemplo de EON de este link:

http://foro.elhacker.net/programacion_cc/wsasocket_contra_socket-t210589.0.html

pero por alguna razon puedo hacer todo menos escribir datos de entrada en el PIPE. si alguien me puede decir que estoy haciendo mal seria de gran ayuda.. ya que por mas que relei el codigo no encuentro el error.

aqui estan mis funciones

Código
void datos_func::bshell() {
   SECURITY_ATTRIBUTES saPipe;  
STARTUPINFO sInfo;          
 
ZeroMemory(&saPipe,sizeof(saPipe));
saPipe.nLength = sizeof(saPipe);
saPipe.lpSecurityDescriptor = NULL;
saPipe.bInheritHandle = TRUE;
 
CreatePipe(&stdinRd, &stdinWr, &saPipe, 0);
CreatePipe(&stdoutRd, &stdoutWr, &saPipe, 0);
 
GetStartupInfo(&sInfo);
sInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
       sInfo.wShowWindow = SW_HIDE;
       sInfo.hStdOutput  = stdoutWr;
       sInfo.hStdError   = stdoutWr;
       sInfo.hStdInput   = stdinRd;
 
CreateProcess(NULL,"cmd.exe",NULL,NULL,TRUE,0,NULL,NULL,&sInfo,&pInfo);
 
Sleep(100);
   printf(" [ok] Shell iniciada");    
 
}
 
void datos_func::rshell() {
 
   char buf[1024];
DWORD bUsados;
 
//PeekNamedPipe(stdoutRd, NULL, NULL, NULL, &bTotales, NULL);
PeekNamedPipe(stdoutRd,buf,sizeof(buf),NULL,&bTotales,NULL);
ZeroMemory(buf,sizeof(buf));
ReadFile(stdoutRd, buf, sizeof(buf), &bUsados, NULL);
Sleep(10);
strcat(buf," \n");
send(inetsock,buf,sizeof(buf),0);
 
}
 
void datos_func::eshell(char comandox[100]) {
   printf(comandox);
  WriteFile(stdoutWr,comandox,strlen(comandox),&bUsados,NULL);
Sleep(100);
}
 

la funcion que crea el proceso y la que lee los datos de salida funcionan bien, pero no la de escribir datos nuevos para enviarlos al cmd.exe


que esta mal en la ultima funcion..  :-\
« Última modificación: 01 Junio 2008, 18:59 por octalh » En línea

「エステバン 」
ReCoLeCtAr DaToS eS SoLo El PriMeR pASo A la SaBiDuRIa
PeRo CoMpArTiR DaToS eS eL pRiMeR pAsO a La CoMuNidAD...

http://www.octalh.mx.gs/



http://www.aztekmindz.org
sirdarckcat
sdc
CoAdmin
*****
Desconectado Desconectado

Mensajes: 4.464


HAND


Ver Perfil WWW
Re: problema "pipes" funcion EON para contrlar cmd.exe con sockets
« Respuesta #1 en: 01 Junio 2008, 10:48 »

Cambia:
Código
   	WriteFile(stdoutWr,comandox,strlen(comandox),&bUsados,NULL);
por:
Código
   	WriteFile(stdinWr,comandox,strlen(comandox),&bUsados,NULL);

Saludos!!
En línea

octalh

Desconectado Desconectado

Mensajes: 533


"El sueño de la razón produce monstruos"


Ver Perfil WWW
Re: problema "pipes" funcion EON para contrlar cmd.exe con sockets
« Respuesta #2 en: 01 Junio 2008, 10:59 »

muchas gracias por responder sirdarckcat, de hecho ya habia intentando cambiando el handle de la entrada de datos del pipe y tampoco funciono :S, no se porque cuando ejecuto la primer funcion que arranca la shell, y luego la funcion que lee los datos me devuelve el:

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

C:\Documents and Settings\doku>

quiere decir que la funcion que lee funciona. pero al ejecutar la funcion que escribe el comando, y vuelvo a ejecutar la funcion que lee, ya no me regresa ningun dato en pantalla.

 :huh:


si sirve de algo esta es la forma en que ejecuto la funcion en el cliente.
Código:
void datos_func::eshell() {
cmd.comando = 9;
printf(" \n \n Ingrese comando: ");     
gets(cmd.param1);
send(inetsock1, (char *)&cmd, sizeof(cmd), 0);
}
asi la recibo

Código:
recv(inetsock, (char *)&cmd,sizeof(cmd),0);
else if(cmd.comando == 9) {
              eshell(cmd.param1);
}


asi se ejecuta

Código:
void datos_func::eshell(char comandox[100]) {
    printf(comandox);
    WriteFile(stdinWr,comandox,strlen(comandox),&bUsados,NULL);
Sleep(100);
}

en la ultima funcion añadi un print para saber si el comando esta llegando bien, y al parecer todo esta en orden pero no funciona.

Ya relei bastante el codigo y no parece haber errores, tendra algo que ver que utilizo una clase donde declare todas las variables ??

class datos_func {
public:
      void bshell();
      void rshell();
      void eshell(char comandox[100]);
      void cshell();
      
private:
 
 //shell
 HANDLE stdinRd, stdinWr, stdoutRd, stdoutWr; // Los pipes
 PROCESS_INFORMATION pInfo;
 DWORD bTotales;
 DWORD bUsados;

};


 :-\
« Última modificación: 01 Junio 2008, 18:46 por octalh » En línea

「エステバン 」
ReCoLeCtAr DaToS eS SoLo El PriMeR pASo A la SaBiDuRIa
PeRo CoMpArTiR DaToS eS eL pRiMeR pAsO a La CoMuNidAD...

http://www.octalh.mx.gs/



http://www.aztekmindz.org
E0N
Lab &
Colaborador

Desconectado Desconectado

Mensajes: 2.582


Por variar un poco de avatar.. :P


Ver Perfil WWW
Re: problema "pipes" funcion EON para contrlar cmd.exe con sockets
« Respuesta #3 en: 01 Junio 2008, 21:36 »

Wenas, reponidnedo a tu mp

No se muy bien por q te puede pasar, a mi hacer esas funciones me costó lo suyo y no me dio pocos problemas la verdad...

Pon un cout o printf detras de cada función (te recomiendo q lo testees el local y luego ya le añadas los sockets) y asi ves donde se atasca la funcion, q los pipes son muy dados a atascarse xDDDD

A lo mejor es una chorrada como q no estás escribiendo el caracter de fin de cadena o te falta el caracter \n (estuve dos tardes para darme cuenta de esa tontería  :¬¬ ) asi q mira a ver si se te atascan o q es lo q les pasa y nos cuentas, de todas formas las funciones tal y como yo las puse son 100% funcionales...

Salu2
En línea

SMALL CRYPTER PRIVATE VERSION A LA VENTA!!

PI & Bifrost 100% indetectables, stub de solo 5kb, encriptación rc4, source en asm y/o C a la venta y muchas cosas más... Ponte en contacto conmigo para más información.

SCAN PI & BIFROST

PRECIO: 60€, 100€ con source.
sirdarckcat
sdc
CoAdmin
*****
Desconectado Desconectado

Mensajes: 4.464


HAND


Ver Perfil WWW
Re: problema "pipes" funcion EON para contrlar cmd.exe con sockets
« Respuesta #4 en: 01 Junio 2008, 22:26 »

Este código:
Código
void datos_func::eshell(char comandox[100]) {
   printf(comandox);
  WriteFile(stdinWr,comandox,strlen(comandox),&bUsados,NULL);
Sleep(100);
}

Es vulnerable a FormatStringOverflow (FSoF), te recomiendo que no te acostumbres a hacer eso., %s esta para eso ;)

Saludos!!
En línea

octalh

Desconectado Desconectado

Mensajes: 533


"El sueño de la razón produce monstruos"


Ver Perfil WWW
Re: problema "pipes" funcion EON para contrlar cmd.exe con sockets
« Respuesta #5 en: 02 Junio 2008, 03:16 »

Gracias a ambos por responder  ;D, todo el problema era el "\n", pensaba que solo era para dar un salto de linea por "apariencia", no pense que fuera tan importante.  :laugh:
sirdarckcat gracias por el consejo lo tendre en cuenta..

ojala pudieras mostrarme un ejemplo de como debi de haber hecho la funcion para evitar esa vulnerabilidad..

bueno gracias y aki estamos  :rolleyes:
En línea

「エステバン 」
ReCoLeCtAr DaToS eS SoLo El PriMeR pASo A la SaBiDuRIa
PeRo CoMpArTiR DaToS eS eL pRiMeR pAsO a La CoMuNidAD...

http://www.octalh.mx.gs/



http://www.aztekmindz.org
sirdarckcat
sdc
CoAdmin
*****
Desconectado Desconectado

Mensajes: 4.464


HAND


Ver Perfil WWW
Re: problema "pipes" funcion EON para contrlar cmd.exe con sockets
« Respuesta #6 en: 02 Junio 2008, 07:39 »

printf("%s",comandox);
En línea

E0N
Lab &
Colaborador

Desconectado Desconectado

Mensajes: 2.582


Por variar un poco de avatar.. :P


Ver Perfil WWW
Re: problema "pipes" funcion EON para contrlar cmd.exe con sockets
« Respuesta #7 en: 02 Junio 2008, 15:38 »

Gracias a ambos por responder  ;D, todo el problema era el "\n", pensaba que solo era para dar un salto de linea por "apariencia", no pense que fuera tan importante.  :laugh:
sirdarckcat gracias por el consejo lo tendre en cuenta..

ojala pudieras mostrarme un ejemplo de como debi de haber hecho la funcion para evitar esa vulnerabilidad..

bueno gracias y aki estamos  :rolleyes:

Trankilo, sule pasar xDDD  :¬¬
En línea

SMALL CRYPTER PRIVATE VERSION A LA VENTA!!

PI & Bifrost 100% indetectables, stub de solo 5kb, encriptación rc4, source en asm y/o C a la venta y muchas cosas más... Ponte en contacto conmigo para más información.

SCAN PI & BIFROST

PRECIO: 60€, 100€ con source.
Páginas: [1] Ir Arriba Imprimir 
Ir a:  





Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.5 | SMF © 2006-2008, Simple Machines LLC