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-49132-PoC — Preuve de concept d'exploitation pour CVE-2025-49132 permettant une exécution de code à distance non authentifiée dans Pterodactyl Panel <= 1.11.10 via l'injection du paramètre locale. Inclut les modes de vérification et d'exploitation. | Kitploit
Outils/GitHubGitHub/kerburenthusiasm/cve-2025-49132-poc
Génération de PayloadsAnalyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebTests d'Intrusion
GitHubkerburenthusiasm/cve-2025-49132-poc

CVE-2025-49132-PoC

Preuve de concept d'exploitation pour CVE-2025-49132 permettant une exécution de code à distance non authentifiée dans Pterodactyl Panel <= 1.11.10 via l'injection du paramètre locale. Inclut les modes de vérification et d'exploitation.

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

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-49132-PoC

Preuve de concept pour CVE-2025-49132 pour l'exécution de code à distance dans Pterodactyl Panel <= 1.11.10

Ce PoC s'appuie sur les références suivantes

  • https://www.exploit-db.com/exploits/52341
  • https://github.com/63square/CVE-2025-49132

Utilisation

root@kitploit:~
# Check if the web application is vulnerable
python3 poc.py -u <url> -m check

# Do something funny 
python3 poc.py -u <url> -m exploit -p <path_to_pear_dir> -t <path_to_write_to>

Détails techniques

En analysant le git diff de LocaleController.php entre v1.11.10 et v1.11.11 (lien), on constate que le contrôleur accepte les paramètres locale et namespace sans aucune validation ni assainissement.

Pour comprendre pourquoi c'est dangereux, examinons le routage configuré dans panel/routes/base.php. La route supprime explicitement les middlewares liés à l'authentification, permettant aux utilisateurs non authentifiés d'appeler /locales/locale.json et de fournir les paramètres de requête requis tels que locale et namespace. Cela signifie que ces paramètres sont désormais contrôlés par l'utilisateur.

root@kitploit:~
Route::get('/locales/locale.json', Base\LocaleController::class)
    // Remove authentication middleware for this endpoint
    ->withoutMiddleware(['auth', RequireTwoFactorAuthentication::class]);

Revenons à LocalController.php, la ligne de code suivante fournit la magie RCE.

root@kitploit:~
$this->loader->load($locale, str_replace('.', '/', $namespace))

La fonction load provient du framework de traduction de Laravel (ici) :

root@kitploit:~
public function load($locale, $group, $namespace = null) # 1
{
    if ($group === '*' && $namespace === '*') { # 2
        return $this->loadJsonPaths($locale);
    }

    if (is_null($namespace) || $namespace === '*') { # 3
        return $this->loadPaths($this->paths, $locale, $group); # 4
    } 

    return $this->loadNamespaced($locale, $group, $namespace);
}
  • Au #1, on voit que la fonction load prend 3 arguments. Bien que déroutant au premier abord, la valeur str_replace('.', '/', $namespace) est en réalité passée au second argument $group.
  • Au #2, on voit que $namespace ne sera jamais * car il sera toujours NULL. De même, $group ne sera jamais * puisque nous contrôlons ce qui est passé ici.
  • Au #3, comme $namespace est null, la branche sera prise, ce qui entraîne l'exécution de loadPaths au #4.

À la lumière de ce qui précède, passons à l'analyse de loadPaths, là où la vraie magie opère.

root@kitploit:~
protected function loadPaths(array $paths, $locale, $group)
{
    return (new Collection($paths))
    ->reduce(function ($output, $path) use ($locale, $group) {
        if ($this->files->exists($full = "{$path}/{$locale}/{$group}.php")) { # 1
            $output = array_replace_recursive($output, $this->files->getRequire($full)); # 2
        }

        return $output;
    }, []);
}
  • Au #1, le chargeur construit le nom de fichier de traduction attendu en ajoutant .php.
  • Au #2, si ce fichier existe, il est chargé via getRequire(), qui exécute le fichier PHP et retourne son tableau.

Puisque nous contrôlons le paramètre d'URL namespace, nous pouvons influencer le fichier que l'application tente de charger. En fournissant une valeur qui correspond à un script .php, nous pouvons amener le serveur à exécuter ce script. Par exemple, pour charger phpinfo.php, nous pouvons définir le paramètre sur : namespace=phpinfo

Explications du PoC

Le PoC tente d'effectuer une écriture de fichier arbitraire via pearcmd.php. Cette méthode a été utilisée dans de nombreux PoC similaires et travaux de recherche en sécurité.

  • https://labs.watchtowr.com/form-tools-we-need-to-talk-about-php/
  • https://medium.com/@lashin0x/local-file-inclusion-to-remote-code-execution-rce-bea0ec06342a

Notez que pearcmd.php peut se trouver dans différents répertoires, par exemple :

  • /usr/share/php/pearcmd.php
  • /usr/share/php/PEAR/pearcmd.php
  • /usr/lib/php/pearcmd.php

et bien d'autres.

Le fichier écrit contiendra le code PHP malveillant typique.

Avertissement / Utilisation responsable

Pour tests autorisés uniquement. N'utilisez pas ceci sur des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de test.
Vous êtes responsable du respect de toutes les lois applicables ; les auteurs déclinent toute responsabilité en cas d'utilisation abusive.

Problème

La bibliothèque Python requests est un peu trop serviable : elle encode les caractères dans l'URL fournie. J'ai passé beaucoup de temps à essayer de résoudre ce problème et j'ai fini par utiliser directement curl. Je serais reconnaissant si quelqu'un pouvait m'aider sur ce problème.

Télécharger l’outil