Linux Fundamentals II. Pre-Security Path (12)

Introducción

Bienvenidos a la sala «Linux Fundamentals II», segunda parte de la serie Linux Fundamentals. Aplicaremos el conocimiento adquirido en la primera parte de esta serie, por lo que os recomiendo que hayáis completado la sala anterior antes de proceder.

En esta segunda parte, dejaremos de lado la funcionalidad en el navegador y comenzaremos con lo que es una habilidad fundamental como la de acceder y controlar terminales de máquinas remotas. Y no nos limitaremos a eso, también encontraréis cómo:

  • Desbloquear el potencial de tus primeros comandos introduciéndote al uso de modificadores y argumentos.
  • Avanzar en tu conocimiento del sistema de archivos para hacer más útiles algunos comandos como copiar y mover archivos.
  • Introducirte en los mecanismos de acceso que hay para mantener la seguridad de archivos y carpetas, y cómo identificar aquello a las que nuestro usuario actual tiene acceso.
  • Ejecutar tus primeros scripts y ejecutables.

Accediendo a tu máquina Linux usando SSH

La funcionalidad del navegador ya se utilizó en la primera parte de Linux Fundamentals para mostrarte cómo conectar directamente a tu primera máquina Linux sin ninguna molestia.

De hecho, la funcionalidad del navegador utiliza el mismo protocolo que vamos a usar en esta sesión. Este protocolo se llama Secure Shell (SSH para abreviar) y es una de las formas más comunes de conectar e interactuar con la línea de comandos de una máquina Linux remota.

Desplegaremos dos máquina en esta sesión:

  • Tu máquina Linux.
  • La AttackBox de TryHackMe

¿Qué es SSH y cómo funciona?

Secure Shell o SSH es simplemente un protocolo entre dispositivos que usa un modo de cifrado. Usando criptografía, cualquier entrada que enviemos en un formato legible para el ser humano será cifrado al viajar por la red, y será descifrado una vez alcance la máquina remota, como se ve en el diagrama siguiente.

Cifrado y descifrado en comunicación

Puedes aprender acerca de varios tipos de cifrado en una sala de TryHackMe. Por ahora, solo necesitamos entender que:

  • SSH nos permite ejecutar comandos remotamente en otro dispositivo.
  • Cualquier dato enviado entre dispositivos es cifrado cuando se envía a través de una red como Internet.

Desplegando tu máquina Linux

Pulsa el botón verde de «Start Machine» en la parte superior derecha y después ve a la parte superior de la página para ver la información de despliegue:

La IP de la máquina Linux

La dirección IP mostrada es la dirección de tu máquina Linux con la que accederás al usar SSH. Toma nota de ella.

Desplegando la AttackBox de TryHackMe

Si miras en la parte superior de la página, podrás encontrar el botón «Start AttackBox» que deberás pulsar para desplegar la AttackBox de TryHackMe con la que interactuarás. Esta AttackBox es una máquina Ubuntu que está alojada en línea en la nube y puedes interactuar con ella a través de tu navegador. La usarás para interactuar con la máquina que has desplegado en esta tarea.

Botón de la AttackBox

Usando SSH para acceder a tu máquina Linux

La sintaxis de SSH es simple. Solo necesitamos proporcionarle dos datos:

  1. La dirección IP de la máquina remota.
  2. Las credenciales de una cuenta válida para acceder a la máquina remota.

Conectaremos con el usuario «tryhackme» cuya contraseña es «tryhackme» (sin las comillas). Usaremos la IP de la máquina desplegada que se puede ver en la parte superior y el usuario facilitado para construir un comando con el que acceder a la máquina remota usando SSH. El comando para hacerlo es ssh seguido del nombre de usuario de la cuenta, una @ y la dirección IP de la máquina.

Lo primero será abrir una terminal en la AttackBox de TryHackMe. Encontrarás un icono en el escritorio llamado «Terminal». Ahora podemos introducir los comandos necesarios.

Por ejemplo: ssh tryhackme@IP_MÁQUINA. Solo tendrás que sustituir IP_MÁQUINA por la dirección IP de la máquina objetivo. Una vez ejecutado, se nos preguntará si confiamos en el sistema anfitrión y nos pedirá la contraseña de la cuenta «tryhackme«, la cual es «tryhackme«.

Usando SSH

Ahora que ya estamos conectados, cualquier comando que ejecutemos será ejecutado en la máquina remota, no en la nuestra.

Nota: Cuando escribas una contraseña en un acceso por ssh no podrás visualizar dicha contraseña, ya que no aparecerá en pantalla. Eso no quiere decir que no funcione, por lo que escribe la contraseña y presiona Enter para acceder.

Introducción a los modificadores

La mayoría de comandos permiten proporcionarles argumentos. Estos argumentos se identifican por un guion y cierta palabra clave conocida como modificador.

Hablaremos más tarde sobre cómo identificar qué comandos permiten argumentos y qué hacen exactamente.

Cuando usamos un comando, si no se especifica lo contrario, este tendrá un comportamiento por defecto. Por ejemplo, ls lista el contenido del directorio actual. Sin embargo, los archivos ocultos no se mostrarán. Podemos usar modificadores para ampliar el comportamiento de los comandos.

Siguiendo con el ejemplo de ls, este nos informa de que solo hay una carpeta en la máquina remota llamada «folder1». Nótese que el contenido de las capturas a continuación solo forman parte de un ejemplo.

Comando ls

Sin embargo, usando el argumento -a (abreviatura de --all), podemos ver cómo de repente en la salida aparece otra carpeta llamada «.hiddenfolder». Los archivos y carpetas que comienzan por un «.» están configurados como ocultos.

Archivos ocultos

Los comandos que aceptan esto tienen una opción --help. Esta opción listará las posibles opciones que acepta el comando, proporcionando una breve descripción de cómo usarlas.

Esta opción es, de hecho, una forma formateada de lo que llamamos la página de man (abreviatura de manual), la cual contiene documentación para los comandos y aplicaciones de Linux.

La página de man(ual)

Las páginas de manual son una gran fuente de información tanto para comandos del sistema como para aplicaciones disponibles en cualquier máquina Linux. Se puede acceder al manual tanto en la misma máquina como online.

Para acceder a esta documentación, podemos usar el comando man y proporcionarle el nombre del comando del cual queremos leer la documentación. Siguiendo con el ejemplo de ls, el comando para ver la página de manual sería man ls.

Continuamos con la interacción con el sistema de archivos

Ya hemos cubierto algunos de los comandos fundamentales cuando interactuamos con el sistema de archivos de una máquina Linux. Por ejemplo, hemos visto cómo listar y encontrar el contenido de un directorio usando ls y find y navegar por el sistema de archivos con cd.

Ahora toca aprender algunos comandos más que sirven para interactuar con el sistema de archivos y que nos permitirán:

  • crear archivos y directorios
  • mover archivos y directorios
  • eliminar archivos y directorios

Todos estos comandos se pueden utilizar proporcionándoles la ruta completa del archivo.

Creando archivos y directorios (touch, mkdir)

La creación de archivos y directorios en Linux es un proceso simple. Comenzaremos por ver cómo crear un archivo. El comando touch toma un solo argumento, el nombre que queremos darle al archivo que vamos a crear. Por ejemplo, si queremos crear un archivo llamado «note», usaremos el comando touch note. Merece la pena comprender que esto solo crea un archivo en blanco. Es probable que necesites usar comandos como echo o editores de texto como nano para añadir contenido a tu archivo en blanco.

Comando touch

El proceso para crear un directorio es similar, pero utilizando el comando mkdir y proporcionando de nuevo el nombre que queremos darle al directorio. Por ejemplo, para crear el directorio «mydirectory» usaremos mkdir mydirectory.

Comando mkdir

Eliminando archivos y directorios (rm)

rm es un comando extraordinario comparado con los vistos hasta ahora. Puedes eliminar archivos con tan solo usar rm. Sin embargo, necesitarás proporcionarle el modificador -R en el caso de querer eliminar un directorio.

Comando rm
Comando rm -R

Copiando y moviendo archivos y directorios (cp, mv)

El copiar y mover archivos es una funcionalidad importante en Linux. Comenzando por cp, este comando toma dos argumentos:

  1. el nombre del archivo existente
  2. el nombre que queremos asignarle a la copia del archivo

cp copia el contenido completo de un archivo existente en el nuevo archivo.

Comando cp

Mover un archivo toma dos argumentos, como en el caso del comando cp. Sin embargo, en lugar de copiar y crear un nuevo archivo, con mv modificamos el segundo archivo que proporcionamos como argumento. No solo podemos usar mv para mover un archivo a otro directorio, también podemos usar mv para renombrar un archivo o un directorio.

Comando mv

Determinando el tipo de archivo

Algo que suele despistar a menudo a la gente es presuponer el contenido de un archivo o su propósito. Los archivos, normalmente, tienen lo que se conoce como una extensión para hacerlo más sencillo. Por ejemplo, los archivos de texto normalmente tienen la extensión «.txt». Aunque no siempre es necesaria.

Hasta ahora, los archivos que hemos usado en los ejemplos no tenían extensión. Sin conocer el contexto de por qué el archivo está ahí, no sabremos su verdadero propósito. Aquí entra en juego el comando file. Este comando toma un argumento y nos dice qué clase de contenido hay en el archivo.

Comando file

Permisos 101

Como es posible que ya hayas descubierto, no todos los usuarios pueden acceder a ciertos archivos o directorios. Hemos explorado anteriormente algunos comandos que pueden usarse para determinar qué acceso tenemos y dónde nos llevan.

En tareas anteriores, hemos aprendido a ampliar el uso de comandos a través de modificadores. Tomemos como ejemplo el comando ls, el cual lista el contenido del directorio en el que estemos. Si usamos el modificador -l, podremos ver diez columnas de datos. Sin embargo, solo nos interesan las tres primeras columnas:

Permisos de los archivos

Aunque parezca que intimida, estas tres columnas son muy importantes a la hora de determinar ciertas características de un archivo o directorio y si tenemos o no acceso a él. Un archivo o directorio puede tener un par de características que determinen qué acciones se pueden llevar a cabo y qué usuario o grupo tiene la capacidad de realizar dichas acciones, como las siguientes:

  • Leer
  • Escribir
  • Ejecutar

Si usamos su para cambiar al user2

Cambio de usuario con su

Usemos el archivo «cmnatic.pen» presente en la primera captura de este apartado . Tiene el indicador «-» para indicar que se trata de un archivo. A continuación encontramos «rw», lo que significa que solo el propietario del archivo puede leer y escribir en él, pero no ejecutarlo.

Brevemente: Diferencias entre usuarios y grupos

Vimos esto brevemente en Linux Fundamentals I (concretamente, las diferencias entre un usuario regular y un usuario de sistema). Lo mejor de Linux es que los permisos son granulares. Un usuario puede ser técnicamente el propietario de un archivo, pero si los permisos así lo indican, entonces un grupo de usuarios puede también tener los mismos o distintos permisos para el mismo archivo sin afectar al archivo en sí mismo.

Pongamos esto en un contexto real: el usuario del sistema que ejecuta un servidor web debe tener permisos para leer y escribir archivos para una aplicación web efectiva. Sin embargo, compañías como los hostings de webs querrán permitir a sus clientes actualizar sus propios archivos de la web sin ser usuario del sistema del servidor web, algo que podría comprometer la seguridad del resto de clientes.

Cambiando entre usuarios

Cambiar entre usuarios en una instalación de Linux es una tarea fácil gracias al comando su. A no ser que seas usuario root (o uses permisos de root a través de sudo), entonces necesitarás saber un par de cosas para facilitar la transición entre cuentas de usuarios:

  • El usuario al que queremos cambiar
  • La contraseña de ese usuario

El comando su tiene un par de modificadores que pueden ser relevantes. Por ejemplo, para ejecutar un comando una vez que hayas accedido o para especificar el tipo de shell a usar. Te insto a que leas la man page de su para aprender más al respecto. Sin embargo, veremos aquí el modificador -l o --login.

Simplemente, proporcionando el modificador -l a su, comenzamos una shell que es muy parecida a la del usuario en su acceso actual al sistema, heredamos muchas propiedades del nuevo usuario, por ejemplo, las variables de entorno.

Cambio de usuario con su

Al utilizar su para cambiar a «user2», nuestra sesión nos lleva al directorio principal del usuario anterior.

Cambio de usuario con su -l

Ahora, después de utilizar -l, nuestra nueva sesión nos lleva al directorio home del usuario automáticamente.

Directorios comunes

/etc

Este directorio raíz es uno de los más importantes directorios raíz de nuestro sistema. El directorio etc (abreviatura de etcétera) es una ubicación habitual en la que se almacenan archivos del sistema que se usan en nuestro sistema operativo.

Por ejemplo, el archivo sudoers contiene una lista de los usuarios y grupos que tienen permiso para ejecutar sudo o un conjunto de comandos como usuario root.

Como se ve en la siguiente imagen, podemos encontrar los archivos «passwd» y «shadow«. Estos dos archivos son especiales para Linux ya que muestran cómo se almacenan en nuestro sistema las contraseñas para cada usuario cifrados en formato SHA-512.

Directorio etc

/var

El directorio «/var», con «var» siendo abreviatura de datos variables, es uno de los directorios principales de la raíz que podemos encontrar en una instalación Linux. Este directorio almacena datos a los que se accede frecuentemente o escritos por servicios o aplicaciones ejecutándose en el sistema. Los archivos de registro de los servicios ejecutados y aplicaciones se escriben aquí (/var/log), u otros datos que no están necesariamente asociados a un usuario específico.

Directorio var

/root

A diferencia del directorio /home, el directorio /root es actualmente el equivalente al home para el usuario de sistema «root». No hay mucho más que decir sobre este directorio, más allá de eso. Vale la pena mencionar que a veces se presupone que este usuario debería tener sus datos en un directorio como «/home/root» por defecto.

Directorio root

/tmp

Es un directorio único en la raíz de la instalación de Linux. Abreviatura de «temporal«, este directorio es volátil y se usa para almacenar datos a los que solo se accederá una o dos veces. Parecido a la memoria de nuestro ordenador, una vez que el ordenador se reinicia, el contenido de este directorio se limpia por completo.

Lo que puede ser útil para nosotros en un pentesting es que cualquier usuario puede escribir en este directorio por defecto. Eso significa que, una vez tengamos acceso a una máquina, este directorio es un buen lugar para almacenar algunas cosas, como nuestros scripts de enumeración.

Directorio tmp

Conclusiones y resumen

Esta sesión ha sido bastante teórica y hemos cubierto una buena cantidad de fundamentos que te harán familiarizarte más con Linux.

Para recapitular, hemos aprendido:

  • Cómo conectar a una máquina Linux de forma remota usando SSH.
  • Uso avanzado de algunos comandos mediante sus modificadores y dónde dirigirnos para aprender acerca de cada comando (man pages).
  • Algunos comandos más que usarás frecuentemente para interactuar con el sistema de archivos y sus contenidos.
  • Una breve introducción a los permisos de archivo y el cambio de usuarios.
  • Un resumen de la importancia de los directorios raíz en una instalación Linux y cómo podemos usar los datos almacenados en ellos.

Te insto a que repases una o dos veces esta sesión para afianzar conceptos. Al fin y al cabo, la práctica hace al maestro.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ads Blocker Image Powered by Code Help Pro

¡¡¡Ads Blocker Detectado!!!

Hemos detectado que usas extensiones para bloquear anuncios. Por favor, si te interesa el contenido, no bloquees los anuncios, que son lo que nos ayuda a poder publicar más contenido como este 😊