Seguridad Sistemas y Redes (7)

No. 8 de 9 de articulos. Seguridad Sistemas

Cadenas identificativas y otros recursos 3

 

Telnet

Telnet (TELecommunication NETwork) es un protocolo que se utiliza para conectar de forma remota a través de una red con otra maquina y manejarla como si se estuviera sentado en la propia maquina. Aparte de recibir el nombre de Telnet el protocolo, también se denomina al programa cliente para conectar al servidor de la misma forma. El puerto utilizado normalmente por el protocolo y sus programas asociados es el numero 23.

El programa cliente permite normalmente acceder en modo consola o terminal, no se utilizan gráficos. Se solía utilizar normalmente para configurar, arreglar o consultar datos de forma remota. Uno de los principales problemas de este protocolo y sus programas asociados, es en si la comunicación que se realiza, ya que esta no es cifrada y por tanto son transmitidas como texto plano, así que si algún intruso consiguiera realizar un sniffer (fisgón), conseguiría fácilmente las contraseñas y nombres de usuarios de la personas que se conecten utilizando este servicio.

Actualmente si se utiliza es conveniente realizar una conexión cifrada SSH, la cual permite tener mas privacidad ante ataques de escuchas de red. Telnet funciona en un entorno de cliente/servidor, lo que significa que el equipo remoto es el que actúa como servidor y por tanto se ha de configurar para ello. En sistemas Unix/Linux este servicio es proporcionado por lo que se conoce como un daemon (demonio), El demonio utilizado para este servicio se denomina Telnetd.

Entre los programas cliente mas conocidos para acceder a un servidor y teniendo en cuenta de antemano el propio programa telnet, que por regla general esta incluido en todos los sistemas operativos, los mas famosos programas clientes son mTelnet!, NetRunner, Zoc, y quizás uno de los mas utilizados Putty.

Su forma de utilización básica es muy simple, la sintaxis de la orden es la siguiente:

telnet nombre_maquina_servidor

telnet dirección_ip_maquina_servidor

 

Una vez se haya realizado la conexión con la maquina servidor, el equipo remoto solicitara un nombre de usuario y contraseña como medida de seguridad, de esta forma el usuario se ha de identificar sobre los usuarios definidos en el servidor o equipo remoto.

los comandos mas usuales que se pueden utilizar son los que se muestran a continuación, aunque se ha de tener en cuenta que al tener acceso de forma remota a la maquina se tendrá a disposición por parte del usuario todos los comandos que el administrador del sistema haya permitido ejecutar sobre este tipo de conexiones.

?

visualiza la ayuda correspondiente al programa.

close

cierra la sesión de telnet

display

muestra información sobre la conexión en pantalla.

logout

cierra la sesión

mode

permite cambiar entre los modos de trasferencia ASCII y BINARIA.

open

Abrir otra conexión a la actual.

quit

Cierra la aplicación de telnet.

set

Cambia la configuración de la conexión.

unset

Cargar la configuración de conexión predeterminada.

 

 



Los motivos de seguridad por los que no se recomienda actualmente su utilización en sistemas actuales o modernos, pueden ser las siguientes: las aplicaciones de telnet tienen varias vulnerabilidades descubiertas a lo largo de los años. Otro de los motivos es que no cifra los datos transmitidos, por lo cual un “fisgón” podría intervenir la comunicación y conseguir datos relevantes para la seguridad del sistema, otro motivo es que telnet no tiene un sistema de autentificación que permita asegurar que la comunicación se realiza entre los dos anfitriones deseados y no sobre un tercero que haya interceptado la comunicación.

 


Ejercicios y practicas resueltas de c ( 6 )

No. 4 de 56 de articulos. Practicas C

Otro ejercicio de programación en c, para ir completando los ejercicios y practicas a resolver.

Enunciado del ejercicio:

Realizar un programa que solicite un numero entero por teclado y a continuación visualice por pantalla todos los números primos entre 1 y el numero introducido.

El ejercicio y practica resuelta a continuación:

#include <stdio.h>
#include <stdlib.h>
// Predefinición de funciones

int EsPrimo(int);
// Función principal

int main(int argc,char *argv[])
{
   int numero;
   int valores;
   // Solicitar por pantalla el numero
   printf(“Teclear No.: “);
   scanf(“ %d”,&numero);
   // Visualizar todos los números primos entre 1 y el numero
   // se utilizara una función para saber si un numero es primo o no
   for(valores=1;valores<=numero;valores++)
   {
       if(EsPrimo(valores)==0)
         printf(“El valor %d es primo\n”);
   }
   return 0;
}
// Funciones desarrolladas
// la funcion devuelve 0 si el numero es primo en caso contrario 1
int EsPrimo(int Valor)
{
  int primo=0;
  int divisores=0;
  // Calcular divisores del numero
  for(divisores=2;divisores<Valor-1 && primo==0;divisores++)
  {
    // Comprobar si existe un divisor
    if(Valor%divisores==0) primo=1;
  }
  return primo;
}

Ejercicios y practicas: Aclaraciones

Esperamos que os sean de ayuda estos ejercicios y practicas de programacion en lenguaje c en vuestros estudios, bien sean en modalidad de teleformacion o presenciales en vuestros institutos. Los cursos, practicas o ejercicios que se solucionan no pretenden ser la unica solucion posible, asi que si vuestro profesor os dice que hay un error, o es mejor realizar el ejercicio de otra forma, hacerle caso y ayudarnos a nosotros presentando diferentes soluciones utilizando para ello los comentarios.

Seguridad Sistemas y Redes ( 6 )

No. 6 de 9 de articulos. Seguridad Sistemas

Cadenas identificativas y otros recursos 2

 

Ftp

FTP son las siglas de File Transfer Protocol (Protocolo de Transferencia de Ficheros), en informática es un protocolo  de red orientado a la transferencia de archivos entre sistemas conectados a una red TCP (Transmission Control Protocol – Protocolo de control de transmisiones), esta basado en la arquitectura cliente-servidor, desde un equipo cliente se puede conectar a un equipo servidor para descargar archivos desde el servidor o enviar archivos al mismo, siendo independiente del sistema operativo utilizado. El servicio de FTP utiliza la capa de aplicación del modelo de capas TCP/IP y utiliza normalmente el puerto 20 o 21. Uno de los problemas identificados de este servicio es que esta pensando para ofrecer velocidad en la transferencia de archivos, pero no así seguridad ya que toda la información intercambiada entre los sistemas incluidos contraseñas y usuarios son enviados en formato de texto plano sin cifrado de ninguna clase. Por lo cual realizando sniffing sobre el servicio se podría obtener información valiosa para un atacante del sistema. La recomendación en seguridad seria utilizar un método alternativo como sFtp el cual esta incluido en el paquete SSH y permite cifrar la conexión en la transferencia de archivos.

Servidor ftp

Un servidor ftp es un programa que se ejecuta en un sistema servidor estando este ultimo normalmente conectado a internet, aunque también es posible que no tenga conexión a internet y si a una red interna. La función principal del servidor es permitir el intercambio de archivos o ficheros entre distintos sistemas servidores o clientes. Lo normal es que el servidor ftp no este instalado en un equipo personal, por lo cual un usuario normal utilizara el FTP para conectarse de forma remota al servidor y enviar o recibir información. Las funciones principales o para las que normalmente se utiliza un servidor FTP son las de alojamiento web o servidores de backup, de forma que los clientes del servicio puedan acceder al servicio y enviar sus archivos al sistema servidor utilizando el protocolo FTP o SFTP (Secure File Transfer Protocol).


Cliente ftp

Si un equipo personal no tiene instalado en su navegador el servicio de FTP, el usuario ha de instalar en su equipo un programa que le permita la transferencia de archivos entre su sistema y un sistema remoto, a este tipo de programas se les denomina clientes FTP, este tipo de programas facilitan el acceso al sistema servidor, teniendo el usuario simplemente que indicar el nombre del servidor, la cuenta de usuario y la contraseña en caso necesario asignada para la conexión, una vez establecida la misma se tendrá acceso al servidor y se podrá realizar la transferencia de archivos con el programa cliente. Los programas cliente pueden ser en modo consola de texto o grafica, siendo lógicamente los de entorno grafico mucho mas cómodos de utilizar, entre ellos se puede destacar Filezilla, CuteFTP, etc.,Mientras que en modo consola se suele utilizar el comando ftp tanto en sistemas linux como windows.

Modos de conexión

FTP permite dos modos de conexión del cliente. Los modos se denominan  Activo (también denominado estándar o PORT ya que el cliente envía comandos tipo PORT al servidor por el canal de control al establecer la conexión) y Pasivo o también denominado PASV ya que el cliente envía comandos tipo PASV, tanto en un modo u otro el cliente establece una conexión utilizando el puerto 21 que establece el canal de control.

Modo Activo

En el modo activo el servidor crea su canal de datos en el puerto 20, mientras que por parte del cliente el canal de datos se asocia con un puerto aleatorio mayor de 1024. Para realizar este proceso el cliente envía un comando PORT el cual indica al servidor el numero de puerto por el cual realizar la transmisión de datos. Esta acción hace que el cliente este preparado para abrir cualquier puerto aleatoriamente superior al 1024, teniendo en cuenta este hecho es inseguro utilizar el modo activo ya que dejamos expuesto puertos de forma aleatoria a un posible atacante. De hecho casi todos los cortafuegos que se instalan en los sistemas suelen bloquear o rechazar este tipo de conexiones.

Modo Pasivo

Para suplir la inseguridad del sistema activo se creo el modo pasivo, en este modo cuando el cliente envía un comando PASV sobre el canal de control, el servidor de FTP le indica al cliente por el canal de control el puerto mayor a 1023, por el cual conectarse el cliente.

Tipos de transferencia de archivos
 
Ascii

esta forma de transferencia es útil para transferir archivos que solo contengan caracteres imprimibles, es decir contengan texto ascii puro no transformado por un procesador de textos no ascii. Un ejemplo seria transferir un archivo html, php, código fuente, etc. Pero no se podría enviar una imagen.

Binary

esta otra forma de transferencia es la adecuada cuando se ha de transmitir otro tipos de archivos que no sean ascii, como archivos de imagen, comprimidos, audio, etc.

Comandos mas frecuentes

Se ha de tener en cuenta la forma de utilizar el cliente de ftp, si este es el incluido normalmente en el sistema operativo, bien sea linux o windows, o es un cliente grafico como filezilla o cuteftp.

la sintaxis para ejecutar el cliente, por ejemplo en windows 7 seria la siguiente:

ftp

los comandos mas frecuentes son los siguientes:

open servidor

Inicia una conexión con el “servidor” especificado.

close, disconnect

Finaliza la conexión con el servidor sin cerrar el programa cliente.

bye, quit

Finaliza la conexión con el servidor cerrando el programa cliente.

cd  directorio

Cambia de directorio de trabajo en el servidor.

delete archivo

Borra el archivo especificado en el servidor.

mdelete patrón

Borra archivos en el servidor según el “patrón” especificado.

dir, ls

Muestra el listado de directorio en el que nos encontramos.

get archivo

Obtiene o transfiere un archivo desde el servidor al cliente.

mget archivos

Obtener o transferir múltiples archivos desde el servidor al cliente.

hash

Activa la impresión de caracteres # , mientras se realiza la transmisión de archivos, como si de una barra de progreso se tratara.

lcd directorio

Cambia el directorio de trabajo local.

prompt

Activa/Desactiva la confirmación por parte del usuario la ejecución de comandos.

put archivo

Enviar “archivo” al directorio de trabajo del servidor.

mput archivos

Enviar múltiples “archivos” al servidor.

pwd

Mostrar el directorio activo del servidor.

rename

Cambiar el nombre a un archivo del servidor.

rmdir directorio

Elimina el “directorio” especificado en el servidor, siempre y cuando este vacio.

status

Muestra el estado actual de la conexión.

bin, binary

Activa el modo de transferencia binario.

ascii

Activa el modo de transferencia ascii.

help

Mostrar la lista de ordenes o comandos disponibles.

append archivo

Continua la descarga del “archivo” en caso de un corte en la transferencia del mismo.

send archivo

Enviar el archivo especificado al directorio activo del servidor.

user

Permite cambiar el nombre de usuario y contraseña sin abandonar la sesión.

 

Ejemplos de obtención de cadenas identificativas con el comando ftp:

$ ftp ftp.servidor.com
Conectado a servidor.com
220 ProFTPD 1.3.1 Server (ProFTPD) [86.45.123.43]
Usuario (servidor.com:(none)):

De esta forma se puede obtener las cadenas que proporciona el servidor de ftp, y si no están bien configuradas es posible saber la versión del servidor que se esta utilizando y poder consultar si existe algún tipo de vulnerabilidad sobre el mismo.


Ejercicios y practicas resueltas de c ( 5 )

No. 3 de 56 de articulos. Practicas C

Nueva practica o ejercicio resuelto de programación en el lenguaje c, para que completes tu teleformacion con nuestros cursos online gratuitos.

Enunciado del ejercicio:

Realizar un programa en el lenguaje de programación c, que lea una matriz de un fichero, realiza la traspuesta de dicha matriz y la almacene en un fichero nuevo. Los nombres de los archivos se han de solicitar utilizando la línea de comandos como si de un comando ms-dos o Linux se tratara. Se ha de solicitar tanto el nombre del archivo origen como el nombre del archivo destino.

El ejercicio y practicas resuelta a continuación:

#include <stdio.h>
#include <stdlib.h>
// Predefinición de funciones

int Existe(char *);


// Función principal

int main(int argc,char *argv[])
{
    // Comprobación del numero de parámetros recibido
    if(argc!=3) {
        printf("\n¡Faltan parámetros");
        printf("\nFormato: comando fichero_origen fichero_destino");
        exit(1);
    }

    // Comprobación de ficheros
    if(Existe(argv[1])==1) {
        printf("\nEl fichero de origen no se ha encontrado o no existe...");
        exit(1);
    }

    // Declaración de variables necesarias
    FILE *fichero;
    int filas;
    int columnas;
    float **matriz1=NULL;
    int contador;
    int contador1;

    // Abrir archivo en modo lectura
    fichero=fopen(argv[1],"rt");
    // Leer filas y columnas
    fscanf(fichero,"%d %d",&filas,&columnas);
    printf("%d %d",filas,columnas);
    // Realizar la reserva de memoria para las matrices
     matriz1=(float **)malloc(sizeof(float *)*filas);
    for(contador=0;contador<filas;contador++)
    {
        matriz1[contador]=(float *)malloc(sizeof(float)*columnas);
    }
    // Asignar datos de la matriz
    for(contador=0;contador<filas;contador++) 
    {
        for(contador1=0;contador1<columnas;contador1++) 
        {
            fscanf(fichero,"%f",&matriz1[contador][contador1]);
        }
    }
    fclose(fichero);
    printf("\n");
    for(contador=0;contador<filas;contador++) 
    {
        for(contador1=0;contador1<columnas;contador1++) 
        {
            printf("%.2f ",matriz1[contador][contador1]);
        }
        printf("\n");
    }

    // visualizar traspuesta
    printf("\n%d %d\n",columnas,filas);
    for(contador=0;contador<columnas;contador++) 
    {
        for(contador1=0;contador1<filas;contador1++) 
        {
            printf("%.2f ",matriz1[contador1][contador]);
        }
        printf("\n");
    }

    fichero=fopen(argv[2],"wt");
    if(!fichero) 
    {
        printf("\nERROR No se ha podido crear el archivo destino...");
        exit(1);
    }
    // grabar traspuesta
    fprintf(fichero,"%d %d\n",columnas,filas);
    for(contador=0;contador<columnas;contador++) 
    {
        for(contador1=0;contador1<filas;contador1++) 
        {
            fprintf(fichero,"%.2f ",matriz1[contador1][contador]);
        }
        fprintf(fichero,"\n");
    }
    // cerrar archivo
    fclose(fichero);
    // liberar memoria
    for(contador=0;contador<filas;contador++) 
    {
        free(matriz1[contador]);
    }
    free(matriz1);
    return 0;
}

// Funcion Existe

int Existe(char *nombre_fichero)
{
    FILE *fichero;
    int resultado=0;  // 0 = existe 1 = no existe

    fichero=fopen(nombre_fichero,"rt");
    if(fichero!=NULL) 
    {
        fclose(fichero);
    } 
    else
    {
        resultado=1;
    }
    return resultado;
}

 

Ejercicios y practicas resueltas de C ( 4 )

No. 2 de 56 de articulos. Practicas C

Otro nuevo ejercicio de c para seguir el curso de teleformacion y así poder practicas con ejemplos uno de tus lenguajes de programación favorito.

Enunciado del ejercicio:

Realizar un programa que invierta un fichero de texto creando uno nuevo ( es decir el fichero de destino o final ha de tener el contenido del primero u origen pero al revés ), en vez de solicitar los nombres de archivos en el programa se utiliza la línea de parámetros como si de una orden de linux o ms-dos se tratara. Se utiliza para leer y grabar las funciones fread y fwrite, realizando una reserva de memoria dinámica con la función malloc, y la función free para liberar la memoria utilizada. El ejercicio se ha realizado utilizando el editor Code Blocks bajo Windows 7 y probado en la consola de comandos de Windows 7.

El ejercicio resuelto es el siguiente:

#include <stdio.h>
#include <stdlib.h>

// Predefinición de funciones

int Existe(char *);
long int Tamanyo(char *);

// Función principal

int main(int argc,char *argv[])
{
    // Comprobación del numero de parámetros recibido
    if(argc!=3) {
        printf("\n¡Faltan parámetros");
        printf("\nFormato: comando fichero_origen fichero_destino");
        exit(1);
    }

    // Comprobación de ficheros
    if(Existe(argv[1])==1) {
        printf("\nEl fichero de origen no se ha encontrado o no existe...");
        exit(1);
    }

    // Declaración de variables necesarias
    FILE *fichero;
    long int cuantos;
    char *reserva=NULL;
    int contador;

    // Abrir archivo en modo lectura
    fichero=fopen(argv[1],"rt");
    // Averiguar el tamaño del archivo
    cuantos=Tamanyo(argv[1]);
    // Realizar la reserva de memoria correspondiente al tamanyo del fichero
    reserva=(char *)malloc(sizeof(char)*cuantos);
    // leer el archivo completo y almacenarlo en la variable reserva
    fread(reserva,sizeof(char),cuantos,fichero);
    // Cerrar fichero de origen
    fclose(fichero);
    // abrir archivo destino
    fichero=fopen(argv[2],"wt");
    // en caso de error devolver error y salir
    if(!fichero) {
        printf("\nNo se ha podido crear el archivo destino...");
        exit(1);
    }
    // si no existe error recorrer el vector creado en orden inverso
    // y almacenarlo en el archivo destino
    printf("\nInvertir archivo");
    for(contador=cuantos;contador>=0;contador--)
    {
        fwrite(&reserva[contador],sizeof(char),1,fichero);
        printf(".");
    }
    // cerrar el archivo destino
    fclose(fichero);
    // finalizar programa
    printf("Ok\n");
    // Liberar memoria
    free(reserva);
    return 0;
}

// Función Existe

int Existe(char *nombre_fichero)
{
    FILE *fichero;
    int resultado=0;  // 0 = existe 1 = no existe

    fichero=fopen(nombre_fichero,"rt");
    if(fichero!=NULL) {
        fclose(fichero);
    } else {
        resultado=1;
    }
    return resultado;
}

// Función contador

long int Tamanyo(char *nombre_fichero)
{
    FILE *fichero;
    long int contador=0;
    char caracter=0;

    fichero=fopen(nombre_fichero,"rt");
    fread(&caracter,1,sizeof(caracter),fichero);
    while(!feof(fichero))
    {
        contador++;
        fread(&caracter,1,sizeof(caracter),fichero);
    }
    fclose(fichero);
    return contador;
}

Seguridad Sistemas y Redes ( 5 )

No. 5 de 9 de articulos. Seguridad Sistemas

Cadenas identificativas y otros recursos

Una de las formas más artesanales de obtener información sobre una organización, es obtenerla a través del código fuente de sus portales corporativos o páginas Web, es decir revisar manualmente el código xhtml, html, asp o php. De esta forma se puede conocer que aplicaciones corren los servicios web e incluso es posible determinar, de una manera bastante aproximada, que sistema operativo esta instalado en la maquina. También es normal buscar los comentarios en el código fuente, para ver si proporcionan alguna información que pueda ser de utilidad. Para realizar este proceso de descargar un portal entero a nuestra maquina para analizarlo existen numerosas herramientas, entre ellas destacamos las siguientes:

wget (Linux)

En distribuciones Linux, desde la línea de comandos, existe la herramienta wget, que permite descargar a un disco local todas las paginas web de un portal, bien por vía HTTP, o por vía FTP, es una aplicación para ejecutarla desde la consola, aunque existen entornos gráficos. la sintaxis del comando es la siguiente:

wget [opciones] [lista de urls]

Siendo las opciones disponibles para el comando las siguientes:

-h
–help

Muestra la ayuda del comando.

-V

Muestra la versión del programa.

-i nombrefichero
–input-file=nombrefichero

Lee la lista de urls del fichero especificado en nombrefichero.

-o ficherolog
–output-file=ficherolog

Escribe los ficheros de log en ficherolog, en vez de utilizar la pantalla.

-a ficherolog
–append-output=ficherolog

Igual que la opción anterior, pero si el fichero existe añade en el mismo la información, en caso de no existir el fichero lo crea.

-t numero
–tries=numero

Especifica el numero de veces de intentos a realizar para la descarga, si se especifica el valor 0, indica un numero indefinido.

–follow-ftp

Sigue los enlaces ftp desde documentos HTML

-g on/off
–glob=on/off

Activa o desactiva el uso de caracteres especiales como ‘*’ para indicar todos los ficheros.

-r

especifica el modo recursivo.

-U

especifica identificación de navegador. Ya que muchos sitios web deniegan la descarga si no se realiza a través de un navegador.

–wait=tiempo

Especifica un tiempo de parada o pausa entre descargas.

–limit-rate=valor

Especifica el valor o velocidad de descarga indicada en valor.

-no-parent

Indica que el comando no descargue por debajo del directorio especificado.

-k

Una vez terminada la descarga convierte los enlaces o links de los documentos a rutas relativas, para poder navegar en modo local con la descarga realizada.

-c

Continua con la descarga desde el punto en el que se haya quedado.

Vea los siguientes ejemplos:

// Descargar un archivo

wget http://www.aprendoencasa.com/index.php

// Descargar utilizando distintos métodos

wget http://www.aprendoencasa.com/imagen1.jpg ftp://aprendoencasa.com/descargar/cursos.zip

// Descargar utilizando archivo de entrada

// se ha de crear un archivo el cual contendrá la uri de los archivos a descargar

wget –i archivos.txt


// Descargar después de una interrupción continuando por donde se haya quedado

wget –i –c archivos.txt

// Descargar y crear un informe 

wget –o informe.txt  http://www.aprendoencasa.com/index.html

// Descargar un archivo limitando el ancho de banda

wget –o informe.txt –-limit-rate=50k ftp://ftp.aprendoencasa.com/ubuntu910.iso

// Descargar especificando nombre de usuario y contraseña en caso de ser solicitado
// por un sitio

wget –http-user=admin –http-password=secreto http://www.aprendoencasa.com/archivo1.zip

// Descargar aumentando el numero de intentos, útil en casos de sitios con saturacion
// y descargar utilizando accesos infinitos

wget –t 50 http://www.aprendoencasa.com/fedora10.iso

wget –t inf http://www.aprendoencasa.com/suse11.iso

// Descargar pagina web entera con los elementos que incluyen la misma como imágenes,
// estilos, etc.

wget –p http://www.aprendoencasa.com


// Descargar pagina web entera especificando recursividad de hasta cinco niveles

wget –r http://www.aprendoencasa.com // Descargar pagina web entera especificando nivel de recursividad wget –r -l10 http://www.aprendoencasa.com // Descargar pagina web convirtiendo los enlaces a relativas para navegar offline wget –r ––convert-links http://www.aprendoencasa.com // Existen mas opciones seria interesante consultar el comando para averiguarlas.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies