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 usuario | usuario |
| Contraseña | usuario@Tryhackme |
| Propiedad intelectual | 10.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ística | Intento | Pez | Zsh |
| Nombre completo | La 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. |
| Scripting | Ofrece 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 tabulaciones | Tiene 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ón | Nivel 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 uso | Es 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 sintaxis | La 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!!!