Saltar al contenido
Portada » Blog – Laprovittera Carlos » TryHackMe – Linux Shells

TryHackMe – Linux Shells

Hola hacketones! Bienvenidos a este nuevo capítulo de TryHackMe – Linux Shells 

Tarea 1 Introducción a los shells de Linux

Como usuarios habituales de sistemas operativos, utilizamos ampliamente la interfaz gráfica de usuario ( GUI ) para realizar la mayoría de las operaciones. Con solo unos clics en diferentes opciones, la tarea está lista. Sin embargo, se pueden realizar casi todas las tareas escribiendo comandos en la CLI del sistema operativo en lugar de usar la GUI. Los shells ofrecen excelentes funciones para los comandos que se escriben en la CLI. Esta forma de interactuar con el sistema operativo es más eficiente en el uso de recursos.

Supongamos que está en un restaurante y tiene dos opciones para comer. La primera opción es pedir comida del menú y el camarero se la servirá. La segunda opción es cocinar el plato que desee en la cocina. En un sistema Linux , la cocina es el sistema operativo , y usar la interfaz gráfica de usuario (GUI) del sistema operativo es como pedir comida del menú y que el camarero se la sirva. Sin embargo, usar la CLI significa que tendría que ir a la cocina ( SO ) y cocinar lo que desee. En este ejemplo, Shell le ayudaría a cocinar su plato deseado ofreciéndole algunas sugerencias de recetas. Usar la CLI para realizar operaciones en un sistema Linux le brinda mayor poder y control al realizar las tareas.

Quizás hayas visto escenas de hacking en películas que muestran terminales geniales con muchos comandos ejecutándose. Esto se debe a que la mayoría de los usuarios de Linux prefieren realizar operaciones escribiendo comandos en la CLI usando shells en lugar de usar la GUI . En esta sala, aprenderemos a interactuar con un shell de Linux. También exploraremos diferentes shells disponibles en Linux y, al final, escribiremos algunos scripts de shell.

Objetivos de aprendizaje

  • Aprenda la interacción con el shell de Linux
  • Utilice comandos básicos de shell
  • Explora los tipos de shells de Linux disponibles
  • Escribe algunos scripts de shell

Requisitos previos de la habitación

Responda las preguntas a continuación

¿Quién es el facilitador entre el usuario y el sistema operativo?

Shell

Tarea 2 ¿Cómo interactuar con un Shell?

Si la máquina virtual no está visible, use el botón azul «Mostrar vista dividida» en la parte superior de la página. La máquina se abrirá automáticamente en la interfaz gráfica . También puede conectarse a la máquina mediante Attackbox o su propia máquina conectada a una VPN usando las credenciales SSH que aparecen a continuación:

Nombre de usuariousuario
Contraseñausuario@Tryhackme
Propiedad intelectual10.10.5.57

Una vez que la máquina se abra en la vista de pantalla dividida, tendrá el indicador de shell listo para aceptar comandos.

user@tryhackme:~$

La mayoría de las distribuciones de Linux usan Bash (Bourne Again Shell) como shell predeterminado. Sin embargo, el shell predeterminado que se muestra al abrir la terminal depende de la distribución de Linux .

Nota: En la próxima tarea, discutiremos diferentes tipos de shells.

Ya habrás explorado los comandos básicos de Linux en el módulo «Fundamentos de Linux» , mencionado en los prerrequisitos de esta sala. Analicemos brevemente algunos de los más importantes que usamos en el shell.

Al interactuar con un shell, debe estar en el directorio donde desea realizar operaciones. Por defecto, al abrir un shell en la mayoría de las distribuciones de Linux , se encontrará en su directorio personal. Para ver su directorio de trabajo actual, puede ejecutar pwd«Imprimir directorio de trabajo», como se muestra en la terminal a continuación:

Comprobar el directorio de trabajo actual

user@tryhackme:~$pwd/home/user

En los resultados del comando anterior, puede ver que su directorio de trabajo actual es/home/ubuntu

Sin embargo, también puedes cambiar de directorio. Para ello, usa cd(abreviatura de «Cambiar Directorio»), como se muestra en la terminal a continuación:

Cambiar directorio

user@tryhackme:~$cdDesktopuser@tryhackme:~$/Desktop$

Al usar la interfaz gráfica de un sistema operativo , puede ver el contenido de un directorio en pantalla. Sin embargo, al usar el shell, para ver el contenido de un directorio, debe introducir el siguiente comando:

Lista de contenidos del directorio

user@tryhackme:~$lsDesktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos

Si desea leer el contenido de un archivo, puede escribir el siguiente comando en su shell:

Visualización del contenido del archivo

user@tryhackme:~$catfilename.txtthis is a sample file
this is the second line of the file

El comando grep es muy popular entre los usuarios de Linux . Este potente comando puede buscar cualquier palabra o patrón dentro de un archivo. Supongamos que desea buscar entradas específicas en un archivo grande. Puede usar el comando grep junto con el patrón de esas entradas, que las extraerá automáticamente. También le ayuda a buscar una palabra clave específica en un archivo grande.

La siguiente terminal nos muestra cómo usar el comando grep para buscar la palabra » THM » dentro de un archivo de texto grande. La salida muestra la línea específica del archivo de texto que contiene esta palabra.

Cómo buscar una palabra en un archivo

user@tryhackme:~$grepTHMdictionary.txtThe flag is THM

Responda las preguntas a continuación

¿Cuál es el shell predeterminado en la mayoría de las distribuciones de Linux?

Bash

¿Qué utilidad de comando se utiliza para enumerar el contenido de un directorio?

ls

¿Qué utilidad de comando puede ayudarle a buscar cualquier cosa en un archivo?

grep

Tarea 3 Tipos de shells de Linux

Al igual que el Símbolo del sistema y PowerShell en el sistema operativo Windows , Linux tiene diferentes tipos de shells disponibles, cada uno con sus propias características y peculiaridades.

Se instalan varios shells en diferentes distribuciones de Linux . Para ver qué shell estás usando, escribe el siguiente comando:

user@tryhackme:~$echo$SHELL/bin/bash

También puedes listar los shells disponibles en tu sistema operativo Linux . El archivo contiene todos los shells instalados en un sistema Linux. Puedes listar los shells disponibles en tu sistema operativo Linux escribiendo en la terminal:/etc/shellscat /etc/shells

Conchas disponibles

user@tryhackme:~$cat/etc/shells#/etc/shells: valid login shells/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen
/bin/zsh
/usr/bin/zsh

Para cambiar entre estos shells, puede escribir el nombre del shell que está presente en su sistema operativo y se abrirá para usted, como se puede ver a continuación:

user@tryhackme:~$zshtryhackme%

Si desea cambiar permanentemente su shell predeterminado, puede usar el comando: chsh -s /usr/bin/zsh. Esto establecerá este shell como el predeterminado para su terminal.

Existen muchos tipos de shells de Linux . Analizaremos algunos de ellos y sus características.

Bourne otra vez Shell

Bourne Again Shell (Bash) es el shell predeterminado para la mayoría de las distribuciones de Linux . Al abrir la terminal, bash está disponible para que puedas introducir comandos. Antes de bash, algunos shells como sh, ksh y csh tenían capacidades diferentes. Bash surgió como un reemplazo mejorado para estos shells, adoptando las capacidades de todos ellos. Esto significa que conserva muchas de las características de estos antiguos shells y algunas de sus capacidades únicas. Algunas de las características clave que ofrece bash se enumeran a continuación:

  • Bash es un shell ampliamente utilizado con capacidades de scripting.
  • Ofrece una función de autocompletado con tabulación, lo que significa que, si estás completando un comando, puedes presionar la tecla de tabulación. Completará automáticamente el comando según una posible coincidencia o te dará varias sugerencias para completarlo.
  • Bash guarda un historial y registra todos tus comandos. Puedes usar las flechas arriba y abajo para usar los comandos anteriores sin tener que volver a escribirlos. También puedes escribir historypara ver todos tus comandos anteriores.

Shell interactivo amigable

Friendly Interactive Shell (Fish) tampoco es la opción predeterminada en la mayoría de las distribuciones de Linux . Como su nombre indica, se centra más en la facilidad de uso que otros shells. Algunas de las características clave que ofrece fish se enumeran a continuación:

  • Ofrece una sintaxis muy sencilla, factible para usuarios principiantes.
  • A diferencia de bash, tiene corrección ortográfica automática para los comandos que escribes.
  • Puedes personalizar el símbolo del sistema con algunos temas interesantes usando peces.
  • La función de resaltado de sintaxis de fish colorea diferentes partes de un comando según sus funciones, lo que mejora la legibilidad de los comandos. Además, sus colores únicos nos ayudan a detectar errores.
  • Fish también proporciona funciones de scripting, autocompletado de tabulaciones e historial de comandos como los shells mencionados en esta tarea.

Z Shell

Z Shell (Zsh) no se instala por defecto en la mayoría de las distribuciones de Linux . Se considera un shell moderno que combina las funcionalidades de algunos shells anteriores. Algunas de las características clave que ofrece zsh se enumeran a continuación:

  • Zsh proporciona autocompletado de tabulaciones avanzado y también es capaz de escribir scripts.
  • Al igual que Fish, también proporciona corrección ortográfica automática para los comandos.
  • Ofrece una amplia personalización que puede hacerlo más lento que otros shells.
  • También proporciona completar tabulaciones, funcionalidad de historial de comandos y varias otras funciones.
CaracterísticaIntentoPezZsh
Nombre completoLa forma completa de Bash es Bourne Again Shell.La forma completa de Fish es Friendly Interactive Shell.La forma completa de Zsh es Z Shell.
ScriptingOfrece scripts ampliamente compatibles con amplia documentación disponible.Tiene funciones de scripting limitadas en comparación con los otros dos shells.Ofrece un excelente nivel de scripting, combinando las capacidades tradicionales de Bash shell con algunas características adicionales.
Completar tabulacionesTiene una función básica de completar pestañas.Ofrece una función avanzada de completar pestañas al brindar sugerencias basadas en comandos anteriores.Su capacidad de completar pestañas se puede ampliar en gran medida mediante el uso de complementos.
PersonalizaciónNivel básico de personalización.Ofrece una buena personalización a través de herramientas interactivas.Personalización avanzada a través del marco oh-my-zsh.
Facilidad de usoEs menos fácil de usar, pero al ser un shell tradicional y ampliamente utilizado, sus usuarios están bastante familiarizados y cómodos con él.Es el shell más fácil de usar.Puede ser muy fácil de usar con una personalización adecuada.
Resaltado de sintaxisLa función de resaltado de sintaxis no está disponible en este shell.El resaltado de sintaxis está integrado en este shell.El resaltado de sintaxis se puede utilizar con este shell introduciendo algunos complementos.

Seleccionar el mejor shell de Linux depende de su uso y sus características. Los shells que se describen en esta tarea son algunos de los muchos disponibles en Linux . Puede comparar las características de estos shells y elegir el mejor según sus necesidades.

Responda las preguntas a continuación

¿Qué shell viene con resaltado de sintaxis como una característica lista para usar?

Fish

¿Qué shell no tiene corrección ortográfica automática?

Bash

¿Qué comando muestra todos los comandos ejecutados previamente de la sesión actual?

history

Tarea 4 Scripting de shell y componentes

Un script de shell no es más que un conjunto de comandos. Supongamos que una tarea repetitiva requiere que introduzcas varios comandos mediante un shell. En lugar de introducirlos uno tras otro en cada repetición de la tarea, lo que podría llevarte más tiempo, puedes combinarlos en un script. Para ejecutar todos esos comandos, solo tendrás que ejecutar el script, y todos los comandos se ejecutarán. Todos los shells mencionados en las tareas anteriores tienen funciones de scripting. Los scripting nos ayudan a automatizar tareas. Antes de aprender a escribir un script, debemos saber que, aunque los shells de Linux tienen funciones de scripting, esto no significa que solo se puedan crear scripts utilizando un shell. Se pueden crear scripts en varios lenguajes de programación. Sin embargo, el objetivo de esta sesión es cubrir el scripting mediante un shell.

El primer paso es abrir la terminal y seleccionar un shell. Usaremos el shell bash, el predeterminado y el más usado en la mayoría de las distribuciones.

A diferencia de los demás comandos que escribimos en la shell, primero necesitamos crear un archivo para el script con cualquier editor de texto. El archivo debe tener la extensión .sh, la extensión predeterminada para los scripts de bash. La siguiente terminal muestra la creación del archivo del script:

Crear archivo de script

user@tryhackme:~$nanofirst_script.sh

Todo script debe comenzar con shebang. Shebang es una combinación de caracteres que se añaden al principio del script, empezando por [ nombre del intérprete] y #!seguido del nombre del intérprete que se usará al ejecutarlo. Como estamos escribiendo nuestro script en bash, lo definiremos como el intérprete en el shebang.

primer_script.sh

#!/bin/bash

Ya estamos listos para escribir nuestro primer guion. Hay algunos componentes fundamentales que, en conjunto, conforman un guion eficiente. Aprendamos y utilicemos estas estructuras para escribir uno nosotros mismos.

Variables

Una variable almacena un valor. Supongamos que necesita usar valores complejos, como una URL, una ruta de archivo, etc., varias veces en su script. En lugar de memorizarlos y escribirlos repetidamente, puede almacenarlos en una variable y usar su nombre donde lo necesite.

El siguiente script muestra una cadena en pantalla: «Hola, ¿cómo te llamas?». Esto se realiza mediante echoun comando. La segunda línea del script contiene el código read name. readSe utiliza para recibir la entrada del usuario y namees la variable donde se almacenará. La última línea echomuestra la bienvenida del usuario, junto con su nombre almacenado en la variable.

Ahora, guarde el script pulsando CTRL+X. Confirme pulsando Yy luego ENTER.

Para ejecutar el script, primero debemos asegurarnos de que tenga permisos de ejecución. Para otorgarle estos permisos, podemos escribir el siguiente comando en nuestra terminal:

Permiso de ejecución de script

user@tryhackme:~$ chmod+x first_script.sh

Ahora que el script tiene permisos de ejecución, use ./`antes` del nombre del script para ejecutarlo. Usamos ./`antes` del script para ejecutarlo en lugar de escribir el nombre directamente, ya que ./le indica al shell que ejecute el archivo presente en el directorio actual. Si no define ` ./antes` del nombre del script, el shell buscará el script en la variable de entorno PATH (que contiene todos los directorios excepto el actual) y no lo encontrará en ninguno de ellos, generando un error. La siguiente terminal muestra el script en el que utilizamos las variables:

Ejecución de script

user@ubuntu:~$./first_script.sh

Hey, What’s your name?
John
Welcome, John

Bucles

Un bucle, como su nombre indica, es algo que se repite. Por ejemplo, si tienes una lista de muchos amigos y quieres enviarles el mismo mensaje, puedes crear un bucle en tu script, asignarle tu lista de amigos y el mensaje, y este se enviará a todos tus amigos.

Para una explicación general de los bucles, escribamos un bucle que muestre todos los números del 1 al 10 en la pantalla. Primero, cree un archivo llamado loop_script.shy luego introduzca el código a continuación. Guarde el archivo presionando CRTL+Xy luego confirme con  yy luego con ENTER.

La primera línea contiene la variable ique iterará del 1 al 10 y ejecutará el código siguiente cada vez. doIndica el inicio del código del bucle y doneel final. Entre ambos, se escribirá el código que queremos ejecutar en el bucle. El bucle for tomará cada número entre paréntesis y lo asignará a la variable ien cada iteración. echo $iMostrará el valor de esta variable en cada iteración.

Ahora, ejecutemos el script después de darle el permiso de ejecución.

Ejecución de script

user@tryhackme:~$./loop_script.sh

1
2
3

La salida de la terminal anterior se reduce a 3números solo para fines de demostración. Sin embargo, al ejecutarse según la lógica del script, mostraría los números de 1 to 10.

Declaraciones condicionales

Las sentencias condicionales son una parte esencial de la creación de scripts. Permiten ejecutar código específico solo cuando se cumple una condición; de lo contrario, se puede ejecutar otro código. Supongamos que desea crear un script que muestre un secreto al usuario. Sin embargo, desea que se muestre solo a algunos usuarios, y solo al usuario con alta autoridad. Creará una sentencia condicional que primero le preguntará al usuario su nombre y, si coincide con el del usuario con alta autoridad, mostrará el secreto. 

Primero, crea un archivo nuevo llamado conditional_script.sh, luego ingresa el código a continuación. Guarda el archivo presionando CRTL+X, luego confirma con yy luego ENTER.

El script anterior toma el nombre del usuario como entrada y lo almacena en una variable (estudiada en la sección «Variables»). La sentencia condicional comienza con «if» y compara el valor de esa variable con la cadena Stewart; si coincide, mostrará el secreto al usuario; de lo contrario, no. El «fi» se utiliza para finalizar la condición.

A continuación se muestra la terminal que muestra la ejecución del script cuando el nombre de usuario coincide con el autorizado definido en el script:

script condicional.sh

user@tryhackme:~$./conditional_script.sh

Please enter your name first:
Stewart
Welcome, Stewart! Here is the secret: THM_Script

Sin embargo, la siguiente terminal muestra la ejecución del script cuando el nombre de usuario no coincide con el autorizado definido en el script:

script condicional.sh

user@tryhackme:~$./conditional_script.sh

Please enter your name first:
Alex
Sorry! You are not authorized to access the secret.

Comentarios

A veces, el código puede ser muy largo. En este caso, podría resultar confuso al revisarlo después de un tiempo o al compartirlo con alguien. Una forma sencilla de resolver este problema es usar comentarios en diferentes partes del código. Un comentario es una oración que escribimos en el código simplemente para facilitar su comprensión. Se escribe con un signo # seguido de un espacio y la oración que necesitas escribir. Por ejemplo, reescribamos el script que vimos en la sección de sentencias condicionales y añadamos comentarios. Abra el archivo conditional_script.shcon nanoy luego agregue los comentarios que comiencen con un signo #. Guarde el archivo presionando CRTL+Xy luego confirme con yy luego con ENTER.

Vea lo fácil que se ve un script con comentarios. Los comentarios no afectan el funcionamiento de ningún script. Un buen script siempre incluye comentarios. El ejemplo anterior contiene un comentario por cada línea. Esto es solo una mejor explicación de su concepto. Sin embargo, la mejor manera de incluir comentarios es definirlos en las áreas principales y complejas del script.

Nota: También se pueden usar otros tipos de variables, bucles y sentencias condicionales para realizar diferentes tareas. Además, se pueden agregar varias líneas de comentarios dentro de un solo comentario. Sin embargo, este tema no está dentro del alcance de esta sección.

Responda las preguntas a continuación

¿Cuál es el shebang utilizado en un script Bash?

#!/bin/bash

¿Qué comando otorga permisos de ejecución a un script?

chmod +x

¿Qué funcionalidad de scripting nos ayuda a configurar tareas iterativas?

loops

Tarea 5 El guión del casillero

En la tarea anterior, estudiamos variables, bucles y sentencias condicionales en la programación de scripts de shell. Usemos ese conocimiento para crear un script de shell que utilice todos estos componentes.

Requisito

Un usuario tiene una taquilla en un banco. Para protegerla, necesitamos un script que verifique la identidad del usuario antes de abrirla. Al ejecutarse, el script debe solicitar al usuario su nombre, nombre de la empresa y PIN. Si el usuario proporciona esta información, se le permitirá el acceso; de lo contrario, se le denegará.

  • Nombre de usuario: John
  • Nombre de la empresa: Tryhackme
  • PIN: 7385

Guion

Ejecución de script

user@tryhackme:~$./locker_script.shEnter your Username:
John
Enter your Company name:
Tryhackme
Enter your PIN:
1349
Authentication Denied!!

Responda las preguntas a continuación

¿Cuál sería el PIN correcto para autenticarse en el script del locker?

7385

Tarea 6 Ejercicio práctico

Hemos colocado un script en el directorio de usuario predeterminado /home/userde la máquina Ubuntu conectada. Este script busca una palabra clave específica en todos los archivos (con extensión .log) de un directorio determinado.

Nota: Es necesario realizar algunos cambios en el archivo de script antes de ejecutarlo. Al abrir la máquina siguiendo las instrucciones de la tarea n.° 2, podrá acceder como usuario normal. Sin embargo, le recomendamos que se convierta en usuario root para buscar la bandera en todos los archivos del directorio especificado . Para ello, solo tiene que escribir el siguiente comando e introducir la contraseña del usuario (las credenciales se incluyen en la tarea 2):

Conviértete en usuario root

user@tryhackme:~$sudosu

[sudo] password for user:
root@tryhackme:/home/user#

Puedes realizar los cambios en el archivo de script teniendo en cuenta los siguientes detalles:

  • Bandera: thm-flag01-script
  • Directorio: /var/log

Sugerencia: Busca comillas dobles vacías » «dentro del archivo de script y rellénalas. Asegúrate de no dejar ningún espacio entre ellas.

Responda las siguientes preguntas

¿Qué archivo contiene la palabra clave?

authentication.log

¿Dónde está durmiendo el gato?

under the table

Tarea 7 Conclusión

En esta sala, estudiamos la importancia de los shells y nos adentramos en el mundo de los shells de Linux , explorando sus principales tipos. Adquirimos una buena comprensión de los scripts de shell y su papel en la automatización de tareas. Al final, creamos algunos scripts de shell interesantes y realizamos un laboratorio práctico sobre un script que encuentra elementos misteriosos en diferentes directorios.

Sigan entrenando, Hacketones, Nos vemos en el próximo laboratorio!!!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *