Bienvenido a TryHackMe #6 – «Fundamentos de Linux 3», la entrega final de nuestra serie. En este artículo, profundizaremos aún más en los aspectos de Linux, brindándote las habilidades esenciales para enfrentar los desafíos de la seguridad informática.

¿Te gustaría enterarte de cuando lanzamos descuentos al Máximo o Nuevos Cursos?

Editores de texto de terminal

Nano

¡Es fácil comenzar con Nano! Para crear o editar un archivo usando nano, simplemente usamos nano filename— reemplazando “nombre de archivo” con el nombre del archivo que desea editar.

Puede navegar por cada línea usando las teclas de flecha “arriba” y “abajo” o comenzar una nueva línea usando la tecla “Enter” en su teclado. Nano cubre las cosas más generales de un editor de texto, que incluyen:

  • Buscar
  • Copiar y pegar
  • Saltar a un número de línea
  • Averiguar en qué número de línea estás

Puede usar estas funciones de nano presionando la tecla ” Ctrl ” (que se representa como ^en Linux) y la letra correspondiente. Por ejemplo podes usar ” Ctrl ” y ” X ” para salir de Nano.

VIM es un editor de texto mucho más avanzado. Algunos de los beneficios de VIM, aunque lleva mucho más tiempo familiarizarse con ellos, incluyen:

  • Personalizable:  puede modificar los atajos de teclado para que sean de su elección
  • Resaltado de sintaxis: esto es útil si está escribiendo o manteniendo código, lo que lo convierte en una opción popular para los desarrolladores de software.
  • VIM funciona en todos los terminales donde no se puede instalar nano
  • Hay una gran cantidad de recursos, como hojas de trucos  y tutoriales

Utilidades

Descargando archivos

Una característica fundamental de la informática es la capacidad de transferir archivos. Por ejemplo, es posible que desee descargar un programa, un libro o incluso una imagen. Hay varias formas en las que podemos recuperar estos archivos.

Vamos a cubrir el uso de wget. Este comando nos permite descargar archivos de la web a través de HTTP, como si estuviera accediendo al archivo en su navegador. Necesitamos proporcionar la dirección del recurso que deseamos descargar. Por ejemplo, si quisiera descargar un archivo llamado “myfile.txt” en mi máquina, suponiendo que supiera la dirección web, se vería así:

wget https://assets.tryhackme.com/additional/linux-fundamentals/part3/myfile.txt

Transferencia de archivos desde su host – SCP (SSH)

La copia segura, o SCP, es un medio para copiar archivos de forma segura. A diferencia del comando cp regular, este comando le permite transferir archivos entre dos computadoras utilizando el protocolo SSH para proporcionar autenticación y encriptación.

Trabajando en un modelo de ORIGEN y DESTINO, SCP le permite:

  • Copie archivos y directorios desde su sistema actual a un sistema remoto
  • Copie archivos y directorios desde un sistema remoto a su sistema actual

Siempre que conozcamos los nombres de usuario y las contraseñas. Por ejemplo, copiemos un archivo de ejemplo de nuestra máquina a una máquina remota, que he presentado cuidadosamente en la siguiente tabla:

VariableValor
La dirección IP del sistema remoto 192.168.1.30
Usuario en el sistema remotoubuntu
Nombre del archivo en el sistema localimportante.txt
Nombre con el que deseamos almacenar el archivo en el sistema remototransferido.txt

scp important.txt ubuntu@192.168.1.30:/home/ubuntu/transferred.txt

Y ahora invirtamos esto y diseñemos la sintaxis para usar scppara copiar un archivo desde una computadora remota en la que no hemos iniciado sesión 

VariableValor
Dirección IP del sistema remoto192.168.1.30
Usuario en el sistema remotoubuntu
Nombre del archivo en el sistema remotodocumentos.txt
Nombre con el que deseamos almacenar el archivo en nuestro sistemanotas.txt

El comando ahora se verá así:scp ubuntu@192.168.1.30:/home/ubuntu/documents.txt notes.txt 

Sirviendo archivos desde su host – WEB

Las máquinas Ubuntu vienen preempaquetadas con python3. Python proporciona un módulo liviano y fácil de usar llamado “HTTPServer”. Este módulo convierte su computadora en un servidor web rápido y fácil que puede usar para servir sus propios archivos, donde luego pueden ser descargados por otra computadora usando comandos como curly wget. 

El “HTTPServer” de Python3 servirá los archivos en el directorio en el que ejecuta el comando, pero esto se puede cambiar proporcionando opciones que se pueden encontrar en las páginas del manual. ¡Simplemente, todo lo que tenemos que hacer es ejecutar python3 -m  http.serverpara iniciar el módulo! En la captura de pantalla a continuación, estamos sirviendo desde un directorio llamado “servidor web”, que tiene un solo archivo llamado “file”.

Ahora, usemos wgetpara descargar el archivo usando la dirección IP de la computadora y el nombre del archivo. Una falla de este módulo es que no tiene forma de indexar, por lo que debe saber el nombre exacto y la ubicación del archivo que desea usar. Es por eso que prefiero usar Updog. ¿Qué es Updog ? Un servidor web más avanzado pero ligero. Pero por ahora, limitémonos a usar el “Servidor HTTP” de Python.

En la captura de pantalla anterior, podemos ver que wgetha descargado con éxito el archivo llamado “file” a nuestra máquina. SimpleHTTPServer registra esta solicitud como lo haría cualquier servidor web, lo cual he capturado en la siguiente captura de pantalla.

Procesos

Los procesos son los programas que se ejecutan en su máquina. Son administrados por el kernel, donde cada proceso tendrá una ID asociada, también conocida como su PID. Los incrementos de PID van en el orden en el que se inicia el proceso. Es decir, el proceso número 60 tendrá un PID de 60.

Visualización de procesos

Podemos usar el comando  ps para proporcionar una lista de los procesos en ejecución como la sesión de nuestro usuario y alguna información adicional, como su código de estado, la sesión que lo ejecuta, cuánto tiempo de uso de la CPU está usando y el nombre del programa o comando real que se está ejecutando:

Tenga en cuenta cómo en la captura de pantalla anterior, el segundo proceso ps tiene un PID de 204, y luego en el comando debajo de él, esto se incrementa a 205.

Para ver los procesos ejecutados por otros usuarios y aquellos que no se ejecutan desde una sesión (es decir, procesos del sistema), debemos proporcionar aux  de la siguiente manera:ps aux

Tenga en cuenta que podemos ver un total de 5 procesos; observe cómo ahora tenemos “raíz” y “cmnatic”

Top le brinda estadísticas en tiempo real sobre los procesos que se ejecutan en su sistema en lugar de una vista única. Estas estadísticas se actualizarán cada 10 segundos, pero también se actualizarán cuando use las teclas de flecha para navegar por las distintas filas. 

Gestión de procesos

Para matar un proceso podemos usar el kill comando con el nombre apropiado y el PID asociado que deseamos matar. es decir, para eliminar el PID 1337, usaríamos kill 1337.

Algunas de las señales que podemos enviar a un proceso cuando se elimina:

  • SIGTERM: elimina el proceso, y permite que realice algunas tareas de limpieza de antemano
  • SIGKILL – Mata el proceso – no hace ninguna limpieza
  • SIGSTOP – Detener/suspender un proceso

¿Cómo se inician los procesos?

El sistema operativo (SO) usa espacios de nombres para finalmente dividir los recursos disponibles en la computadora en procesos (como CPU, RAM y prioridad). Piense en ello como dividir su computadora en rebanadas, similar a un pastel. Los procesos dentro de ese segmento tendrán acceso a una cierta cantidad de poder de cómputo, sin embargo, será una pequeña porción de lo que realmente está disponible para cada proceso en general.

Los espacios de nombres son excelentes para la seguridad, ya que es una forma de aislar procesos de otros: solo aquellos que están en el mismo espacio de nombres podrán verse entre sí.

El proceso con una ID de 0 es un proceso que se inicia cuando se inicia el sistema como systemd , que se utiliza para proporcionar una forma de administrar los procesos de un usuario. 

Una vez que un sistema arranca y se inicializa, systemd es uno de los primeros procesos que se inician. Cualquier programa o pieza de software que queramos iniciar comenzará como un proceso secundario de systemd . Esto significa que está controlado por systemd , pero se ejecutará como un proceso propio (aunque compartiendo los recursos de systemd) para que nos sea más fácil identificarlo

 Hacer que los procesos/servicios se inicien en el arranque

Algunas aplicaciones se pueden iniciar en el arranque del sistema que poseemos. Por ejemplo, servidores web, servidores de bases de datos o servidores de transferencia de archivos. Este software suele ser crítico y, a menudo, los administradores le indican que se inicie durante el arranque del sistema.

Le vamos a decir al servidor web apache que inicie apache manualmente y luego le indicaremos al sistema que inicie apache2 en el arranque.

ystemctl— este comando nos permite interactuar con el proceso/demonio systemd . Continuando con nuestro ejemplo, systemctl es un comando fácil de usar que toma el siguiente formato:systemctl [option] [service]

Para decirle a apache que se inicie, usaremos systemctl start apache2. Lo mismo si quisiéramos detener apache, simplemente reemplazaríamos [option]con stop. Podemos hacer cuatro opciones con systemctl:

  • Start
  • Stop
  • Enable
  • Disable

Una introducción al segundo plano y al primer plano en Linux

Los procesos pueden ejecutarse en dos estados: en segundo plano y en primer plano. Los comandos que ejecuta en su terminal, como “echo” o cosas por el estilo, se ejecutarán en primer plano de su terminal, ya que es el único comando proporcionado que no se le ha indicado que se ejecute en segundo plano. “Echo” es un gran ejemplo, ya que la salida de echo volverá a usted en primer plano.

Aquí estamos ejecutando echo «Hi THM», donde esperamos que se nos devuelva la salida como estaba al principio. Pero después de agregar el &operador al comando, solo se nos da la ID del proceso de eco en lugar de la salida real, ya que se ejecuta en segundo plano.

Esto es excelente para comandos como copiar porque significa que podemos ejecutar el comando en segundo plano y continuar con cualquier otro comando que deseemos ejecutar (sin tener que esperar a que termine la copia del archivo)

Podemos hacer exactamente lo mismo cuando ejecutamos cosas como secuencias de comandos: en lugar de depender del operador &, podemos usar Ctrl + Nuestro teclado para respaldar un proceso. También es una forma efectiva de “pausar” la ejecución de un script o comando como en el siguiente ejemplo:

Este script seguirá repitiendo “¡Esto seguirá en bucle hasta que me detenga!” hasta que detenga o suspenda el proceso. Mediante el uso de Ctrl + Z(como lo indica T^Z). Ahora nuestro terminal ya no está lleno de mensajes, hasta que lo ponemos en primer plano.

Poner en primer plano un proceso

Ahora que tenemos un proceso ejecutándose en segundo plano, por ejemplo, nuestra secuencia de comandos “background.sh”, que se puede confirmar con el ps auxcomando, podemos retroceder y llevar este proceso al primer plano para interactuar con él.

Con nuestro proceso en segundo plano usando cualquiera Ctrl + Zo el operador&, podemos usar fgpara volver a usar el proceso en la terminal, donde la salida del script es ahora volvió a nosotros.

Mantenimiento de su sistema: automatización

Es posible que los usuarios deseen programar una determinada acción o tarea para que se lleve a cabo después de que se haya iniciado el sistema como ejecutar comandos, hacer copias de seguridad de archivos o iniciar sus programas favoritos, como Spotify o Google Chrome.

Vamos a hablar sobre el procesocron,  y cómo podemos interactuar con él mediante el uso de crontabs. Crontab es uno de los procesos que se inicia durante el arranque, que se encarga de facilitar y administrar los trabajos cron.

Un crontab es simplemente un archivo especial con formato que es reconocido por el procesocronpara ejecutar cada línea paso a paso. Los crontabs requieren 6 valores específicos:

ValorDescripción
MINEn que minuto ejecutar
HOURA que hora ejecutar
DOMEn qué día 
MONEn qué mes
DOWQué día de la semana
CMDEl comando que se ejecutará.

Usemos el ejemplo de hacer una copia de seguridad. Es posible que desee hacer una copia de seguridad de los “Documents” de “cmnatic” cada 12 horas. Usaríamos el siguiente formato: 

0 *12 * * * cp -R /home/cmnatic/Documents /var/backups/

Una característica interesante de los crontabs es que también admiten el comodín o el asterisco (*). Si no deseamos proporcionar un valor para ese campo específico, es decir, no nos importa en qué mes, día o año se ejecuta, solo que se ejecuta cada 12 horas, simplemente colocamos un asterisco.

Existen algunos recursos excelentes, como el ” Generador Crontab ” en línea, que le permite usar una aplicación amigable para generar su formato por usted. ¡Además del sitio ” Cron Guru “!

Los crontabs se pueden editar usando crontab -e, donde puede seleccionar un editor (como Nano) para editar su crontab.

Mantenimiento de su sistema: administración de paquetes

Presentación de paquetes y repositorios de software

Cuando los desarrolladores deseen enviar software a la comunidad, lo enviarán a un repositorio “apt”. Si se aprueba, sus programas y herramientas se liberarán. Si bien los proveedores de sistemas operativos mantendrán sus propios repositorios, ¡también puede agregar repositorios comunitarios a su lista! Esto le permite ampliar las capacidades de su sistema operativo. ¡Se pueden agregar repositorios adicionales usando el  add-apt-repositorycomando o enumerando otro proveedor! Por ejemplo, algunos proveedores tendrán un repositorio más cercano a su ubicación geográfica.

Administrar sus repositorios (agregar y eliminar)

El comando aptes parte del software de administración de paquetes. Apt contiene un conjunto completo de herramientas que nos permite administrar los paquetes y las fuentes de nuestro software, instalar o eliminar.

Un método para agregar repositorios es usar el comando add-apt-repositorypero vamos a ver cómo agregar y eliminar un repositorio manualmente. Si bien puede instalar software mediante el uso de instaladores de paquetes como dpkg, los beneficios de apt significan que cada vez que actualizamos nuestro sistema, el repositorio que contiene las piezas de software que agregamos también se verifica en busca de actualizaciones. 

En este ejemplo, vamos a agregar el editor de texto Sublime Text como repositorio. A la hora de añadir software, la integridad de lo que descargamos está garantizada mediante el uso de las llamadas claves GPG (Gnu Privacy Guard). Estas claves son esencialmente una verificación de seguridad de los desarrolladores que dicen: “aquí está nuestro software”. Si las claves no coinciden con las que confía su sistema y con las que usaron los desarrolladores, el software no se descargará.

Entonces, para comenzar, debemos agregar la clave GPG para los desarrolladores de Sublime Text 3. (Tenga en cuenta que las instancias de TryHackMe no tienen acceso a Internet, por lo que no esperamos que agregue esto a la máquina que implementa, ya que fallaría.)

Paso a paso

1. Descarguemos la clave GPG y usemos apt-key para confiar en ella:  wget -qO – https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add –

2. Ahora que hemos agregado esta clave a nuestra lista de confianza, ahora podemos agregar el repositorio de Sublime Text 3 a nuestra lista de fuentes aptas. Una buena práctica es tener un archivo separado para cada comunidad diferente/repositorio de terceros que agreguemos.

2.1. Vamos a crear un archivo llamado sublime-text.list en /etc/apt/sources.list.d e ingrese la información del repositorio así:

2.2. Y ahora use Nano para agregar y guardar el repositorio de Sublime Text 3 en este archivo recién creado:

2.3. Después de haber agregado esta entrada, debemos actualizar apt para reconocerla; esto se hace con apt update

2.4. Una vez actualizado con éxito, ya podemos proceder a instalar el software que hemos confiado y añadido a apt usando apt install sublime-text

Quitar paquetes es tan fácil como dar marcha atrás. Este proceso se realiza usando add-apt-repository –remove ppa:PPA_Name/ppa o eliminando manualmente el archivo que agregamos previamente. Una vez eliminado, solo podemos usar apt remove [software-name-here]ieapt remove sublime-text

Mantenimiento de su sistema: registros

Ubicados en el directorio /var/log, estos archivos y carpetas contienen información de registro para aplicaciones y servicios que se ejecutan en su sistema. El sistema operativo (SO) se ha vuelto bastante bueno en la gestión automática de estos registros en un proceso que se conoce como “rotación”. He resaltado algunos registros de tres servicios que se ejecutan en una máquina con Ubuntu:

  • Un servidor web Apache2
  • Registros para el servicio fail2ban, que se usa para monitorear intentos de fuerza bruta, por ejemplo
  • El servicio UFW que se utiliza como cortafuegos

Estos servicios y registros son una excelente manera de monitorear la salud de su sistema y protegerlo. Los registros de servicios como un servidor web contienen información sobre cada solicitud individual, lo que permite a los desarrolladores o administradores diagnosticar problemas de rendimiento o investigar la actividad de un intruso. Dos tipos de archivos de registro a continuación que son de interés:

  • registro de acceso
  • registro de errores

Hay registros que almacenan información sobre cómo se ejecuta el sistema operativo y las acciones que realizan los usuarios, como los intentos de autenticación.

Task 3 Terminal Text Editors

Edit “task3” located in “tryhackme”‘s home directory using Nano. What is the flag?

THM{TEXT_EDITORS}

Esta pregunta requiere que haya iniciado sesión en la máquina implementada (desde la Tarea 2) usando SSH desde la terminal AttackBox. Una vez que lo haya hecho, puede usar el mismo comando que usamos en la última pregunta (es decir, ‘nano <nombre de archivo>’) para abrir el archivo usando nano y obtener la bandera.

Task 4 General/Useful Utilities

Download the file http://MACHINE_IP:8000/.flag.txt onto the TryHackMe AttackBox

What are the contents?

THM{WGET_WEBSERVER}

Mientras está conectado a la máquina remota, use el siguiente comando para implementar un servidor web:

python3 -m http.server

El servidor requiere que mantengamos abierta la ventana de terminal actual. Abra una nueva ventana de terminal y use el comando ‘wget’ para descargar el archivo. Tenga en cuenta que es un archivo oculto, que se indica con el punto ‘.’ delante del nombre ‘.flag.txt’. No olvides el punto:

wget http://<IP>:8000/.flag.txt

Sustituya la dirección IP de la máquina implementada, reemplazando ‘<IP>’. El ‘:8000’ después de la dirección IP indica el puerto TCP al que intentamos conectarnos. Esto se corresponde con nuestro servidor, que utiliza el puerto 8000:

Podemos ver que hemos solicitado.flag.txt mediante una solicitud http GET. Volvamos a nuestra terminal AttackBox. Para ver nuestro archivo descargado en el directorio de inicio, use el comando ‘ls -a’ para mostrar todos los archivos y directorios, incluidos los que están ocultos. Para esta tarea, opté por el comando ‘cat’ más simple:

Task 5 Processes 101

If we were to launch a process where the previous ID was “300”, what would the ID of this new process be?

301

los PID se incrementan; es decir, a los procesos nuevos se les asigna un número de PID 1 mayor que el proceso con el último PID más alto.

If we wanted to cleanly kill a process, what signal would we send it?

SIGTERM

Las señales incluyen SIGTERM, SIGKILL y SIGSTOP. La señal que corresponde a matar un proceso limpiamente usa el comando ‘kill’ sin más opciones.

Locate the process that is running on the deployed instance (MACHINE_IP). What flag is given?

THM{PROCESSES}

Para completar esta tarea, debemos iniciar sesión en la máquina implementada desde la Tarea 3 mediante SSH. Mientras está conectado, use el comando ‘ps aux’ para ver todos los procesos. Uno de los procesos tiene un nombre que tiene la forma de un indicador TryHackMe, es decir, THM{<FLAG>} Podria haber buscado en la lista pero esta manera es mejor:

ps -aux | grep THM

What command would we use to stop the service “myservice”?

systemctl stop myservice

Esta pregunta se refiere a un servicio, por lo que deberíamos pensar en el comando ‘systemctl’. El comando ‘systemctl’ se puede usar para realizar una acción en un servicio usando la sintaxis: systemctl <acción> <servicio>

What command would we use to start the same service on the boot-up of the system?

systemctl enable myservice

Usaremos el comando systemctl nuevamente, pero esta vez queremos habilitar la función que le dice a systemd que inicie myservice en el arranque.

What command would we use to bring a previously backgrounded process back to the foreground?

fg

Este es uno de esos comandos que tiene un nombre apropiado ya que su función es poner en primer plano un proceso.

Task 6 Maintaining Your System: Automation

When will the crontab on the deployed instance (MACHINE_IP) run?

@reboot

Hay una tarea programada listada en el editor crontabs nano. La entrada comienza con el momento en que debe ejecutarse el crontab.

Task 8 Maintaining Your System: Logs

What is the IP address of the user who visited the site?

10.9.232.111

Al igual que con las otras preguntas en esta Sala, debemos iniciar sesión en la máquina implementada (Tarea 2) usando SSH. Navegue a la carpeta /var/log y use el comando ls:

Debería ver un directorio llamado apache2. Navegue a este directorio para encontrar los registros del servidor apache2.

What file did they access?

catsanddogs.jpg

Comience enumerando el contenido del directorio /var/log/apache2:

En el directorio, vemos una serie de archivos que incluyen registros de acceso y errores. Para esta pregunta, se nos pide que identifiquemos al usuario que visitó el sitio, por lo que buscaremos en access.log.1.

Utilice cat para leer el contenido del archivo. En el interior, encontrará una única entrada que se puede utilizar para responder a la pregunta.

Con TryHackMe #6, has completado tu inmersión en los Fundamentos de Linux. Estás ahora armado con conocimientos sólidos que te destacan en el vasto paisaje de la ciberseguridad.

Felicidades has finalizado. Nos vemos en #7 Introductory Networking. Happy Hacking!

Hacking Ético Ofensivo. 100% Practico en Red Team. +42hs

Aprende Hacking Ético y Pentesting 100% Practicando. Laboratorios donde te explicamos detalladamente cada herramienta: https://achirou.com/ctf-red-team

Lo que aprenderás

  • Hacking Ético Ofensivo
  • Ser un Hacker Ético Profesional Ofensivo (Red Team)
  • Utilizar Herramientas para Hacking
  • Montar un Laboratorio para hacer las Prácticas
  • Introducción a Redes
  • Modelo OSI
  • Dirección IP, Protocolos de Red y Puertos
  • Conexiones Inversas, Directas y Lado del Cliente
  • Las 5 Fases del Pentesting
  • Herramientas Útiles para Realizar Escaneo
  • Herramientas Útiles para Encontrar Vulnerabilidades
  • Herramientas Útiles para Obtener Acceso al Sistema
  • Utilizar Tryhackme
  • Diferencias entre Red Team y Blue Team
  • Cómo Realizar Investigaciones Autodidactas
  • Manejar Linux como todo un Profesional
  • Usa la Herramienta Nmap como todo un Profesional
  • Entender, Escanear y Explotar el Servicio de Red SMB
  • Entender, Escanear y Explotar el Servicio de Red Telnet
  • Entender, Escanear y Explotar el Servicio de Red FTP
  • Entender, Escanear y Explotar el Servicio de Red NFS
  • Entender, Escanear y Explotar el Servicio de Red SMTP
  • Entender, Escanear y Explotar el Servicio de Red MySQL
  • Cómo Funcionan y se Crean los Sitios Web
  • Cómo Funciona toda la Web
  • Uso de la Herramienta Burp Suite como todo un profesional
  • Entender, Enumerar, Explotar y Reconocer las TOP 10 Vulnerabilidades de OWASP
  • Poner en Práctica la Explotación de las Vulnerabilidades OWASP
  • Entender, Enumerar, Reconocer y Explotar la Vulnerabilidad de Carga de Archivos
  • Escenarios Reales donde Prácticar Pentesting Ofensivo

¿Te gustaría enterarte de cuando lanzamos descuentos al Máximo o Nuevos Cursos?