Содержание статьи
Acunetix, он же «Окунь», — один из самых мощных сканеров безопасности. Люблю его за возможность одновременного сканирования до 25 таргетов и за широкий набор чекеров. Но охватить все невозможно, тем более если у тебя в руках собственная 0-day-уязвимость.
Я, конечно, не спалю 0-day, но поработаем с интересной уязвимостью, которая позволит раскрыть несколько скрытых и недокументированных механизмов в создании своих чекеров. Речь о CVE-2025-32432, опасной дыре, которая позволяет хакеру легко получить RCE.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Как работают кастомные чекеры
Путь к папке с кастомными скриптами в Windows обычно выглядит так:
C:\ProgramData\Acunetix\shared\custom-scripts\
В Linux:
/home/acunetix/.acunetix/data/custom-scripts/
Там же можно найти и демофайлы, которые дадут базовое понимание структуры чекеров.
Кастомные чекеры представляют собой обычные файлы JavaScript, написанные по определенным принципам. В структуре файлов Acunetix есть две специализированные папки: target
и httpdata
. Лежат они прямо в custom-scripts
. Нас интересует первая. Скрипты в target
выполняются один раз на каждом таргете — это часть активного сканирования, когда мы формируем дополнительные запросы.
info
В папке httpdata
— скрипты, относящиеся к пассивному сканированию, когда у нас есть возможность «доразведать» ответы на запросы, сделанные другими чекерами. Эти чекеры выполняются при получении каждого response. О них поговорим в другой раз.
Чтобы интегрировать твой код в инфраструктуру Acunetix, разработчики предоставили три объекта:
-
scriptArg
— контекст вызова скрипта. Внутри три объектных свойства, из которых можно узнать информацию о таргете:location
,target
,http
. Например,location.
даст полную ссылку на объект, аurl target.
покажет IP-адрес. Объектip http
сообщает информацию о контексте взаимодействия с таргетом и относится к пассивному сканированию. Например, свойствоhttp.
может выглядеть так:response HTTP/
;1. 1 200 OK -
scanState
— объект, позволяющий взаимодействовать с состоянием сканирования. Обладает широким набором функций, но использовать будем в основномaddVuln(
;vulnDesckObject) -
ax
— интерфейс, который предоставляет функции и типы для работы с HTTP-запросами, логированием и интеграцией результатов скрипта в отчет сканера. Например, при помощиax.
создается HTTP-задача, аhttp. job( ) ax.
добавляет запрос в очередь движка Acunetix.http. execute( job)
Выглядит просто и удобно, но... Есть большой недостаток — ужасная документация. Разработчики из Invicti сделали все, чтобы у тебя не возникло желания писать свои дополнения. Они будто говорят: рядовым пентестерам и менеджерам хватит стандартных возможностей, больше нужно только хакерам. Если же ты хакер, сможешь разобраться и без документации. Поэтому 90% свойств и методов не документированы.
Нам с тобой придется пройти трудный путь, чтобы решить поставленную задачу. Специально продемонстрирую не лучшее решение, чтобы показать свою логику и объяснить на примере детали.
info
Acunetix при любом профиле сканирования проходит три этапа: Discovery, Analysis, Testing. Discovery — по факту краулинг, он может сильно затянуть процесс. Учитывай это. Если нужен быстрый чекер, который пробежит по списку таргетов, лучше написать его на Python. Найденные уязвимости всегда можно добавить через Acunetix API. Чекеры пиши для рутинной работы или обучения.
Пишем чекер для CVE-2025-32432
Теории много, давай писать первый полезный скрипт. Будем чекать CVE-2025-32432. Это уязвимость десериализации в Craft CMS, которая легко раскручивается в полноценный Remote Code Execution.
Машина для тестов
Для тестов можно скачать, например, версию Craft CMS v.4.13.1.1. Обрати внимание, что тебе нужна именно 4.13.1.1. Без последней единички, указывающей на патч, ты столкнешься с ошибками при попытке установки.
Собери в Docker проект на базе образа php:
в качестве веб‑сервера и mysql:
— для базы данных. Подключись к контейнеру web. Установи в контейнер web композер и скачай указанный выше архив. Выполни composer
, чтобы подтянулись зависимости. Установка CMS выполняется через CLI, командой php
. Никаких действий для настройки самой Craft CMS не требуется.
Убедись, что веб‑интерфейс открывается. В моем случае это http://
.

Давай добавим таргет и просканируем в Full-режиме. Убедимся, что «Окунь» не видит уязвимости и есть смысл написать кастомный чекер.

Acunetix не нашел серьезных проблем, при том что CVE-2025-32432 точно есть!
Подробности о CVE
Уязвимый путь:
/index.php?p=admin/actions/assets/generate-transform
Это эндпоинт для трансформации изображений. Легитимный запрос должен передать идентификатор assetId
и данные о необходимой трансформации. В ответ приходит объект со ссылкой на измененное изображение.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее