stamin4
  • whoami
  • HTB Academy
    • Introduction to Academy
    • Learning Process
    • Vulnerability Assessment
    • Web Requests
    • Introduction to Networking
    • Linux Fundamentals
    • Brief Intro to Hardware Attacks
    • Setting Up
    • Using the Metasploit Framework
    • Security Incident Reporting
    • Introduction to Web Applications
    • JavaScript Deobfuscation
    • Attacking Web Applications with Ffuf
    • Windows Fundamentals
    • File Inclusion
  • HTB Machines
    • Windows
      • 馃煝Easy
      • 馃煚Medium
      • 馃敶Difficult
      • 馃煟Insane
    • Linux
      • 馃煝Easy
        • Cap
      • 馃煚Medium
      • 馃敶Difficult
      • 馃煟Insane
  • OverTheWire
    • Bandit
      • Nivel 0
      • Nivel 1
      • Nivel 2
      • Nivel 3
      • Nivel 4
      • Nivel 5
      • Nivel 6
      • Nivel 7
      • Nivel 8
      • Nivel 9
      • Nivel 10
  • Base de datos
    • SQL
      • SELECT queries 101
      • Queries with constraints (Pt. 1)
      • Queries with constraints (Pt. 2)
      • Filtering and sorting Query results
      • Simple SELECT Queries
      • Multi-table queries with JOINs
      • OUTER JOINs
      • A short note on NULLs
      • Queries with expressions
      • Queries with aggregates (Pt. 1)
      • Queries with aggregates (Pt. 2)
      • Order of execution of a Query
      • Inserting rows
      • Updating rows
      • Deleting rows
      • Creating tables
      • Altering tables
      • Dropping tables
  • PortSwigger
    • Path Traversal
  • Dockerlabs
    • Trust
    • Firsthacking
    • Upload
Powered by GitBook
On this page
  • Overview
  • System Information
  • Navigation
  • Working with Files and Directories
  • Find Files and Directories
  • File Descriptors and Redirections
  • Filter Contents
  • User Management
  • Service and Process Management
  • Task Scheduling
  • Working with Web Services
  • File System Management
  1. HTB Academy

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.

$ echo $SHELL
/bin/bash
  1. La versi贸n del kernel instalada en el sistema: 4.15.0

$ uname -r
4.15.0-123-generic
  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.

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:b9:6b:7c brd ff:ff:ff:ff:ff:ff
    inet 10.129.97.206/16 brd 10.129.255.255 scope global ens192
       valid_lft forever preferred_lft forever
    inet6 dead:beef::250:56ff:feb9:6b7c/64 scope global dynamic mngtmpaddr 
       valid_lft 86400sec preferred_lft 14400sec
    inet6 fe80::250:56ff:feb9:6b7c/64 scope link 
       valid_lft forever preferred_lft forever

Navigation

  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.

$ ls -la
total 32
drwxr-xr-x 4 htb-student htb-student 4096 Aug  3  2021 .
drwxr-xr-x 5 root        root        4096 Aug  3  2021 ..
-rw------- 1 htb-student htb-student    5 Sep 23  2020 .bash_history
-rw-r--r-- 1 htb-student htb-student  220 Apr  4  2018 .bash_logout
-rw-r--r-- 1 htb-student htb-student 3771 Apr  4  2018 .bashrc
drwx------ 2 htb-student htb-student 4096 Aug  3  2021 .cache
drwx------ 3 htb-student htb-student 4096 Aug  3  2021 .gnupg
-rw-r--r-- 1 htb-student htb-student  807 Apr  4  2018 .profile
  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:

$ ls -i /etc/sudoers
147627 /etc/sudoers
$ stat /etc/sudoers
  File: /etc/sudoers
  Size: 755       	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 147627      Links: 1
Access: (0440/-r--r-----)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-11-12 18:17:31.922746204 +0000
Modify: 2018-01-18 00:08:16.000000000 +0000
Change: 2021-08-03 12:08:36.494845988 +0000
 Birth: -

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.

$ cd /var/backups
$ ls -la
total 2168
drwxr-xr-x  2 root root     4096 Aug  3  2021 .
drwxr-xr-x 14 root root     4096 Sep 23  2020 ..
-rw-r--r--  1 root root    51200 Oct 29  2020 alternatives.tar.0
-rw-r--r--  1 root root     2497 Oct 16  2020 alternatives.tar.1.gz
-rw-r--r--  1 root root     2492 Sep 24  2020 alternatives.tar.2.gz
-rw-r--r--  1 root root    41872 Nov 12  2020 apt.extended_states.0
-rw-r--r--  1 root root     4437 Nov 12  2020 apt.extended_states.1.gz
-rw-r--r--  1 root root     4623 Oct 22  2020 apt.extended_states.2.gz
-rw-r--r--  1 root root     4601 Oct 15  2020 apt.extended_states.3.gz
-rw-r--r--  1 root root     4572 Sep 23  2020 apt.extended_states.4.gz
-rw-r--r--  1 root root      437 Aug  5  2019 dpkg.diversions.0
-rw-r--r--  1 root root      202 Aug  5  2019 dpkg.diversions.1.gz
-rw-r--r--  1 root root      202 Aug  5  2019 dpkg.diversions.2.gz
-rw-r--r--  1 root root      202 Aug  5  2019 dpkg.diversions.3.gz
-rw-r--r--  1 root root      202 Aug  5  2019 dpkg.diversions.4.gz
-rw-r--r--  1 root root      202 Aug  5  2019 dpkg.diversions.5.gz
-rw-r--r--  1 root root      202 Aug  5  2019 dpkg.diversions.6.gz
-rw-r--r--  1 root root      367 Sep 23  2020 dpkg.statoverride.0
-rw-r--r--  1 root root      229 Sep 23  2020 dpkg.statoverride.1.gz
-rw-r--r--  1 root root      229 Sep 23  2020 dpkg.statoverride.2.gz
-rw-r--r--  1 root root      229 Sep 23  2020 dpkg.statoverride.3.gz
-rw-r--r--  1 root root      229 Sep 23  2020 dpkg.statoverride.4.gz
-rw-r--r--  1 root root      229 Sep 23  2020 dpkg.statoverride.5.gz
-rw-r--r--  1 root root      229 Sep 23  2020 dpkg.statoverride.6.gz
-rw-r--r--  1 root root   742750 Nov 11  2020 dpkg.status.0
-rw-r--r--  1 root root   206270 Nov 11  2020 dpkg.status.1.gz
-rw-r--r--  1 root root   206270 Nov  5  2020 dpkg.status.2.gz
-rw-r--r--  1 root root   206270 Nov  5  2020 dpkg.status.3.gz
-rw-r--r--  1 root root   206270 Nov  5  2020 dpkg.status.4.gz
-rw-r--r--  1 root root   206270 Nov  5  2020 dpkg.status.5.gz
-rw-r--r--  1 root root   206270 Nov  5  2020 dpkg.status.6.gz
-rw-------  1 root root      860 Sep 23  2020 group.bak
-rw-------  1 root shadow    716 Sep 23  2020 gshadow.bak
-rw-------  1 root root     2014 Sep 23  2020 passwd.bak
-rw-------  1 root shadow   1362 Sep 23  2020 shadow.bak
  1. El inode del archivo shadow.bak en el directorio /var/backups: 265293

$ ls -i shadow.bak
265293 shadow.bak

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

$ find / -type f -size +25k -newermt 2020-03-03 -name *.conf  2>/dev/null
/usr/share/drirc.d/00-mesa-defaults.conf
  1. La cantidad de archivos existentes en el sistema que tienen la extensi贸n .bak: 4

Hay cuatro archivos:

$ find / -type f -name *.bak 2>/dev/null
./var/backups/shadow.bak
./var/backups/gshadow.bak
./var/backups/group.bak
./var/backups/passwd.bak

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

$ find / -type f -name *.bak 2>/dev/null | wc -l
4
  1. La ruta absoluta del binario xxd: /usr/bin/xxd

$ which xxd
/usr/bin/xxd

File Descriptors and Redirections

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

$ find / -type f -name *.log 2>/dev/null | wc -l
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鈥one."

$ apt list --installed | wc -l
738

Filter Contents

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

$ netstat -l | grep -vE '127.0.0.|tcp6'
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:995             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN    

$ netstat -nat | grep -vE 'localhost|127.0.0.|tcp6'| grep -i 'listen'| wc -l
7
  1. Determina bajo qu茅 usuario est谩 corriendo el sevidor ProFTPd: proftpd

$ ps aux | grep 'proftp'
proftpd   1579  0.0  0.1 126444  3648 ?        Ss   18:31   0:00 proftpd: (accepting connections)
  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.

$ curl https://www.inlanefreight.com > text.txt 

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.

$ cat text.txt | grep 'https://www.inlanefreight.com/' | tr " " "\n" | cut -d '""' -f2 | cut -d "'" -f2 | sort -u | wc -l 
34

User Management

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

$ man useradd

-m, --create-home
	        Create the user's home directory if it does not exist. The files and 
            directories contained in the skeleton directory (which can be defined 
            with the -k option) will be copied to the home directory.

           By default, if this option is not specified and CREATE_HOME is not 
           enabled, no home directories are created.
  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.

$ man usermod 

 -L, --lock
           Lock a user's password. This puts a '!' in front of the encrypted 
           password, effectively disabling the password. You can't use this option 
           with -p or -U.

           Note: if you wish to lock the account (not only access with a password), 
           you should also set the EXPIRE_DATE to 1.
  1. La opci贸n para ejecutar un comando como un usuario diferente usando el comando su: --command

$ man su

-c, --command=command
              Pass command to the shell with the -c option.

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.

$ systemctl | grep -i  'AppArmor'
apparmor.service                loaded active exited    Load AppArmor profiles

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.

$ systemctl show syslog.service -p Type
Type=notify

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.

$ http-server -p 8080
Starting up http-server, serving ./

http-server settings: 
CORS: disabled
Cache: 3600 seconds
Connection Timeout: 120 seconds
Directory Listings: visible
AutoIndex: visible
Serve GZIP Files: false
Serve Brotli Files: false
Default File Extension: none

Available on:
  http://127.0.0.1:8080
  http://209.94.56.95:8080
  http://10.10.15.63:8080
Hit CTRL-C to stop the server
  1. El comando para arrancar un servidor HTTP con php por el localhost en el puerto 8080: php -S 127.0.0.1:8080

$ php -S 127.0.0.1:8080

File System Management

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

$ sudo fdisk -l
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: BEDCBC1A-6B76-B743-8F21-D32E9B1310E5

Device        Start       End  Sectors  Size Type
/dev/vda1      2048  96471039 96468992   46G Linux filesystem
/dev/vda2  96471040  96473087     2048    1M BIOS boot
/dev/vda3  96724992 104855551  8130560  3.9G Linux swap
PreviousIntroduction to NetworkingNextBrief Intro to Hardware Attacks

Last updated 1 year ago