Linux Fundamentals

Overview

Este es uno de los módulos que más tiempo me requirió para completarlo hasta ahora. Tiene muchos ejercicios prácticos para aprender a navegar por el sistema operativo y maniobrar en consola. Y como en la mayoría de los casos las preguntas no se resuelven con la información provista en la sección, te obliga a tener que investigar por cuenta propia y buscar en Internet para poder avanzar.

Entre los temas que se destacan se encuentran la historia y la filosofía de Linux, su arquitectura, el sistema de archivos, la shell, los permisos y los servicios. Vemos qué son las expresiones regulares, sumado a herramientas para filtrar contenido como find, grep, cut, tr, awk, sed, etc. También se tocan temas de contenedores, networking y hardening en sistemas Linux.

Ahora comencemos con los ejercicios. Primero desplegamos la Pwnbox y el target. Nos conectamos por SSH a la IP asignada al target. En mi caso, a la 10.129.97.206 con el usuario htb-student y la contraseña HTB_@cademy_stdnt!.

$ ssh htb-student@10.129.97.206

System Information

  1. La arquitectura de hardware de la máquina: x86_64

$ uname -m
x86_64
  1. La ruta al directorio personal de usuario de htb-student: /home/htb-student

$ pwd
/home/htb-student
  1. La ruta al mail de htb-student: /var/mail/htb-student

Para esta pregunta, tuve que investigar cuál es la ruta típica del mail en un sistema Linux.

  1. La shell asignada al usuario htb-student: /bin/bash

Para eso, podemos ver qué vale la variable de entorno $SHELL.

  1. La versión del kernel instalada en el sistema: 4.15.0

  1. El nombre de la interfaz de red cuyo MTU está establecido en 1500: ens192

Primero tuve que buscar qué es MTU. Encontré que el MTU (Maximum transmission unit) es una medida en bytes de la cantidad máxima de paquetes que un dispositivo conectado a Internet puede aceptar.

Con el comando ip a visualizamos todas las interfaces de red y sus direcciones IP asociadas. Ya podemos ver cuál tiene el MTU en 1500.


  1. El nombre del archivo histórico oculto en el directorio personal del usuario htb-student: .bash_history

Para listar archivos ocultos, ls no alcanza, necesitamos pasarle el parámetro -la de list all.

  1. El index number (o inode) del archivo sudoers en el directorio /etc: 147627

No tenía idea de qué era el index number, así que empecé a buscar. También se lo conoce como inode y es un número único que se le asigna a un archivo en el sistema de archivos Unix. El sistema operativo utiliza este número identificativo cuando almacena o recupera los datos.

Encontré dos formas de averiguar el inode de un archivo:


Working with Files and Directories

  1. El nombre del último archivo modificado en el directorio /var/backups: apt.extended_states.0

Nos movemos al directorio correspondiente y listamos los archivos con su información detallada, que incluye la última fecha en que fueron modificados.

  1. El inode del archivo shadow.bak en el directorio /var/backups: 265293


Find Files and Directories

  1. El nombre del archivo config que ha sido creado después del 2020-03-03 y es más pequeño que 28k pero más grande que 25k: 00-mesa-defaults.conf

  1. La cantidad de archivos existentes en el sistema que tienen la extensión .bak: 4

Hay cuatro archivos:

Si queremos que nos devuelva directamente la cantidad de archivos, usamos wc:

  1. La ruta absoluta del binario xxd: /usr/bin/xxd


File Descriptors and Redirections

  1. La cantidad de archivos existentes en el sistema que tienen la extensión .log: 32

  1. La cantidad total de paquetes instalado en el target: 737

Al output del comando hay que restarle uno porque cuenta la primera linea que dice "Listing…done."


Filter Contents

  1. La cantidad de servicios en escucha en el target en todas las interfaces (no en el localhost, solo por IPv4): 7

  1. Determina bajo qué usuario está corriendo el sevidor ProFTPd: proftpd

  1. Utiliza cURL desde la Pwnbox para obtener el código fuente de la página "https://www.inlanefreight.com" y filtra por las rutas únicas de ese dominio.

La cantidad de rutas es: 34. Para averiguarlo, lanzamos un cURL a la web y almacenamos el output en un archivo de texto.

Luego, convertimos los espacios en saltos de línea con tr. Nos quedamos con el segundo argumento tomando como delimitador tanto las comillas dobles como las comillas simples con cut; esto elimina el href= y el src= que se encuentran delante de lo que necesitamos. Aplicamos un ordenamiento y nos quedamos con las cadenas únicas para evitar repeticiones con sort. Finalmente, contamos la cantidad total de líneas y listo.


User Management

  1. La opción para crear un directorio personal de usuario al añadir uno nuevo con el comando useradd: -m

  1. La opción para bloquear una cuenta de usuario con el comando usermod: --lock

La opción --lock en el comando usermod se utiliza para bloquear una cuenta de usuario en un sistema Linux. Cuando se aplica esta opción a un usuario, se desactiva la cuenta, lo que impide que el usuario inicie sesión en el sistema.

  1. La opción para ejecutar un comando como un usuario diferente usando el comando su: --command


Service and Process Management

  1. El nombre de la unidad de servicio con la descripción "Load AppArmor profiles managed internally by snapd": snapd.apparmor.service

Usamos el comando systemctl para listar todos los servicios y filtramos por AppArmor.


Task Scheduling

  1. El tipo de servicio de syslog.service: notify

Usamos el comando systemctl con la opción show para ver la información relacionada al servicio, y para especificar una propiedad usamos el parámetro -p.


Working with Web Services

  1. El comando para arrancar un servicio HTTP con npm por el puerto 8080: http-server -p 8080

Cabe aclarar que, en este caso, no es necesario indicar el puerto 8080 ya que npm inicia el servidor por dicho puerto por defecto.

  1. El comando para arrancar un servidor HTTP con php por el localhost en el puerto 8080: php -S 127.0.0.1:8080


File System Management

  1. La cantidad de particiones existentes en la Pwnbox: 3

Last updated