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.206System Information
La arquitectura de hardware de la máquina:
x86_64
$ uname -m
x86_64La ruta al directorio personal de usuario de htb-student:
/home/htb-student
$ pwd
/home/htb-studentLa 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.
La shell asignada al usuario htb-student:
/bin/bash
Para eso, podemos ver qué vale la variable de entorno $SHELL.
La versión del kernel instalada en el sistema:
4.15.0
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.
Navigation
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.
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
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.
El inode del archivo shadow.bak en el directorio /var/backups:
265293
Find Files and Directories
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
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:
La ruta absoluta del binario xxd:
/usr/bin/xxd
File Descriptors and Redirections
La cantidad de archivos existentes en el sistema que tienen la extensión .log:
32
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
La cantidad de servicios en escucha en el target en todas las interfaces (no en el localhost, solo por IPv4):
7
Determina bajo qué usuario está corriendo el sevidor ProFTPd:
proftpd
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
La opción para crear un directorio personal de usuario al añadir uno nuevo con el comando useradd:
-m
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.
La opción para ejecutar un comando como un usuario diferente usando el comando su:
--command
Service and Process Management
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
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
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.
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
La cantidad de particiones existentes en la Pwnbox:
3
Last updated