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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Mensajes
Páginas: 1 2 [3] 4 5 6
21  Sistemas Operativos / Unix/Unix-Like / ¿Que opinan de FreeBSD? en: 23 Agosto 2016, 23:27 pm
Pues eso, ¿Qué opinan de FreeBSD (y de *BSD en general), lo han usado alguna vez? ¿Es más recomendable que GNU/Linux?
22  Comunicaciones / Redes / Re: ¿Como funciona ACK? en: 18 Agosto 2016, 13:41 pm
los mensajes ACK tienen un numero de secuencia, la cosa es que es un ataque quirúrgico con mucho conocimiento de ambas partes sobre redes no cifradas... si mandas el numero de secuencia correcto, desincronizas a los conectados, quedando tu sincronizado por lo que veo... este no será el hearth bleed de este año, por lo dificil que es

Entonces, lo que quiere decir, es que para "mantener la conexión" se envian cada X segundos X número de paquetes ACK, y si dichos paquetes se falsean, desconectas a "foo" y te quedas tú sincronizado no? Tendría sentido, por que para "solucionar" temporalmente la vulnerabilidad, lo que se hace es aumentar el límite de paquetes ACK por segundo de 100 (que es el que viene por defecto y el que genera el problema) a 1000. ¿Estoy en lo cierto?
23  Comunicaciones / Redes / Re: ¿Como funciona ACK? en: 17 Agosto 2016, 21:51 pm
como afecta, no se, ya que no se a cual vulnerabilidad te refieres

el ack (acknowdelege o "entendido" en español) es un mensaje de respuesta en apertura de comunicacion...  la comunicacion tcp requiere de respuesta por cada mensaje para asegurar que la información llega entera, aqui entra el ack avisando que la información llego en cada caso, pero por lo que veo te refieres específicamente al del "saludo"

un pc quiere abrir una comunicación, envia syn (sincronización) al servidor, el servidor responde esto confirmando el syn, con syn-ack, pero aun requiere que el cliente confirme que sabe que la comunicación se abrió (espera el ack)

que vulnerabilidad es?

Gracias por responder. Más o menos entiendo para que sirve ACK, pero no entiendo lo suficiente como para comprender la vulnerabilidad que dije.

La vulnerabilidad es esta: http://muyseguridad.net/2016/08/12/vulnerabilidad-tcp-linux-android/ Está por todos lados últimamente.
24  Comunicaciones / Redes / ¿Como funciona ACK? en: 17 Agosto 2016, 16:15 pm
Buenas, estaba leyendo sobre el bug tan polémico que afecta a todos los kernels linux entre el 3.6 y el 4.6, pero creo que no entiendo muy bien el sistema ACK. Por lo que tengo entendido siempre que se abre una conexión TCP, se realizan los llamados 3 pasos. SYN/SYN-ACK/ACK y luego leo que el fallo es por el límite que establece por segundo, es decir, que por defecto se envian 100 peticiones ACK, que por lo que se ve es poco y por eso es vulnerable.

Pero sigo sin pillarlo del todo, ¿Qué es exactamente ACK y como afecta a ese límite en el kernel? Sé para que sirve, precisamente para evitar spoofing y garantizar la fiabilidad de los datos, pero no entiendo que es exactamente y como funciona.

Gracias.
25  Programación / Programación C/C++ / Re: Salida de stdout de un socket a otro en: 19 Mayo 2016, 20:15 pm
no tenías un proyecto ya con sockets?

Sí pero solo era un pequeño code para probar la libreria que habria escrito, ahora que ya funciona, estoy intentando crear una especie conexion shell remota y no se como redireccionar el stdout por el socket para verlo desde el otro lado.
26  Programación / Programación C/C++ / Salida de stdout de un socket a otro en: 19 Mayo 2016, 19:23 pm
Hola a todos de nuevo, estoy haciendo un pequeño programa que lanza comandos remotos, funciona bastante bien, solo quiero que cuando hago un ls o cualquier comando, la salida se redireccione para que desde el otro lado la pueda leer, no se por donde empezar.

Saludos.
27  Programación / Programación C/C++ / Re: Problemita con sockets en: 19 Mayo 2016, 16:18 pm
Una variable extern significa que existe, pero está en otro lugar. Si declaras una variable extern y luego no la declaras de forma normal, verás que te da una "undefined reference" al enlazar. Es porque no encuentra su declaración.

Por eso mismo, lo que he hecho es quitar la declaración de servidor.c y cliente.c, ¿Por que no da error?, es que en otro code que tengo, mucho más complejo, la declaración tengo que hacerla tanto en la biblioteca como en el resto de ficheros, sino me da ese error.
28  Programación / Programación C/C++ / Re: Problemita con sockets en: 19 Mayo 2016, 15:46 pm
Como detalle:
Código
  1. while(1) send(fd_client, "hola", 100, 0);
El tercer argumento es el tamaño de la cadena. En este caso, debería ser 4, o 5 si quieres enviar el caracter nulo.

A parte de eso: en el header declaras fd, fd_client y fs_server, como extern. En los main, debes usar esas variables. No tienes que declararlas de nuevo: ya están declaradas en ss.c. Quita las declaraciones de esas variables en los main, y prueba de nuevo.

Ostras, ya funciona, muchas gracias, pero es que yo tenía entendido que cuando tu declaras una variable en un header como extern, sólo estás diciendo que esa variable va a ser compartida, y que por ende hay que declararlo en cada fichero que se use.
29  Programación / Programación C/C++ / Re: Problemita con sockets en: 19 Mayo 2016, 15:14 pm
Gracias por vuestras respuestas, estoy ya hecho un lio, os pongo los sources:

Esta es la librería ss.c:

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. #include <netdb.h>  
  7. #include <arpa/inet.h>
  8. #include <unistd.h>
  9. #include <strings.h>
  10. #include "ss.h"
  11. /* El número máximo de datos en bytes */
  12.  
  13. int fd, fd_client, fd_server;
  14.  
  15. int client(char ip[25], int port)
  16. {
  17.  
  18.   /* ficheros descriptores */
  19.  
  20.   char buf[MAXDATASIZE];  
  21.   /* en donde es almacenará el texto recibido */
  22.  
  23.   struct hostent *he;        
  24.   /* estructura que recibirá información sobre el nodo remoto */
  25.  
  26.   struct sockaddr_in server;  
  27.   /* información sobre la dirección del servidor */
  28.  
  29.   if ((he=gethostbyname(ip))==NULL){      
  30.      /* llamada a gethostbyname() */
  31.      printf("gethostbyname() error\n");
  32.      return(1);
  33.   }
  34.  
  35.   if ((fd=socket(AF_INET, SOCK_STREAM, 0))==-1){  
  36.      /* llamada a socket() */
  37.      printf("socket() error\n");
  38.      return(1);
  39.   }
  40.  
  41.   server.sin_family = AF_INET;
  42.   server.sin_port = htons(port);
  43.   /* htons() es necesaria nuevamente ;-o */
  44.   server.sin_addr = *((struct in_addr *)he->h_addr);  
  45.   /*he->h_addr pasa la información de ``*he'' a "h_addr" */
  46.   bzero(&(server.sin_zero),8);
  47.  
  48.   if(connect(fd, (struct sockaddr *)&server,
  49.      sizeof(struct sockaddr))==-1){
  50.      /* llamada a connect() */
  51.      printf("connect() error\n");
  52.      return(1);
  53.   }
  54.   return(0);
  55.  
  56. }
  57.  
  58. int server(int port) {
  59.  
  60.   struct sockaddr_in server;
  61.   /* para la información de la dirección del servidor */
  62.  
  63.   struct sockaddr_in client;
  64.   /* para la información de la dirección del cliente */
  65.  
  66.   int sin_size;
  67.  
  68. /* A continuación la llamada a socket() */
  69.   if ((fd_server=socket(AF_INET, SOCK_STREAM, 0)) == -1 ) {  
  70.      printf("error en socket()\n");
  71.      return(1);
  72.   }
  73.  
  74.   server.sin_family = AF_INET;        
  75.  
  76.   server.sin_port = htons(port);
  77.  
  78.   server.sin_addr.s_addr = INADDR_ANY;
  79.   /* INADDR_ANY coloca nuestra dirección IP automáticamente */
  80.  
  81.   bzero(&(server.sin_zero),8);
  82.   /* escribimos ceros en el reto de la estructura */
  83.  
  84.  
  85.   /* A continuación la llamada a bind() */
  86.   if(bind(fd_server,(struct sockaddr*)&server,
  87.           sizeof(struct sockaddr))==-1) {
  88.      printf("error en bind() \n");
  89.      return(1);
  90.   }    
  91.  
  92.   if(listen(fd_server,2) == -1) {  /* llamada a listen() */
  93.      printf("error en listen()\n");
  94.      return(1);
  95.   }
  96.  
  97.   sin_size=sizeof(struct sockaddr_in);
  98.      /* A continuación la llamada a accept() */
  99.      if ((fd_client = accept(fd_server,(struct sockaddr *)&client,
  100.                        &sin_size))==-1) {
  101.         printf("error en accept()\n");
  102.        return(1);
  103.      }
  104.      return(0);
  105.  }
  106.  

Estos sus headers en un fichero .h:

Código
  1. #define MAXDATASIZE 100
  2. extern int fd;
  3. extern int fd_client;
  4. extern int fd_server;  
  5. int client(char[], int);
  6. int server(int);
  7.  

Este es el server:

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. #include <netdb.h>  
  7. #include <arpa/inet.h>
  8. #include <unistd.h>
  9. #include <strings.h>
  10. #include "ss.h"
  11.  
  12. int fd_client;
  13. int fd_server;
  14.  
  15. void main() {
  16.  
  17. if((server(3550))==1) printf("hubo un fallo abriendo el socket");
  18.  
  19. while(1) send(fd_client, "hola", 100, 0);
  20.  
  21. close(fd_client);
  22. }
  23.  

Y este el cliente:

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. #include <netdb.h>  
  7. #include <arpa/inet.h>
  8. #include <unistd.h>
  9. #include <strings.h>
  10. #include "ss.h"
  11.  
  12. void main() {
  13.  
  14. int fd;
  15. char buf[100];
  16. int numbytes;
  17.  
  18. if((client("localhost", 3550))==1) printf("hubo un fallo abriendo el socket");
  19. while(1){
  20.    if((numbytes=recv(fd,buf,100,0))==-1) printf("error recv");
  21.  
  22.   buf[numbytes]='\0';
  23.   printf("%s", buf);
  24.  
  25.   }
  26. close(fd);
  27. }
  28.  

Saludos.
30  Programación / Programación C/C++ / Re: Problemita con sockets en: 19 Mayo 2016, 14:13 pm
Coloca paréntesis:
Código
  1. if((numbytes=recv(fd,buf,100,0))==-1)

Gracias, pero lo he probado y sigue dando el mismo error.
Páginas: 1 2 [3] 4 5 6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines