- Регистрация
- 9 Май 2015
- Сообщения
- 1,483
- Баллы
- 155
Давай разберемся, как писать кастомные сканеры для Acunetix, на примере реальной CVE. От тебя потребуются только небольшие познания в JavaScript или TypeScript и желание сделать что‑то интересное. Внутри — эксклюзив, выстраданный потом и кровью.
Acunetix, он же «Окунь», — один из самых мощных сканеров безопасности. Люблю его за возможность одновременного сканирования до 25 таргетов и за широкий набор чекеров. Но охватить все невозможно, тем более если у тебя в руках собственная 0-day-уязвимость.
Я, конечно, не спалю 0-day, но поработаем с интересной уязвимостью, которая позволит раскрыть несколько скрытых и недокументированных механизмов в создании своих чекеров. Речь о , опасной дыре, которая позволяет хакеру легко получить 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, разработчики предоставили три объекта:
Выглядит просто и удобно, но... Есть большой недостаток — ужасная документация. Разработчики из Invicti сделали все, чтобы у тебя не возникло желания писать свои дополнения. Они будто говорят: рядовым пентестерам и менеджерам хватит стандартных возможностей, больше нужно только хакерам. Если же ты хакер, сможешь разобраться и без документации. Поэтому 90% свойств и методов не документированы.
Нам с тобой придется пройти трудный путь, чтобы решить поставленную задачу. Специально продемонстрирую не лучшее решение, чтобы показать свою логику и объяснить на примере детали.
info
Acunetix при любом профиле сканирования проходит три этапа: Discovery, Analysis, Testing. Discovery — по факту краулинг, он может сильно затянуть процесс. Учитывай это. Если нужен быстрый чекер, который пробежит по списку таргетов, лучше написать его на Python. Найденные уязвимости всегда можно добавить через Acunetix API. Чекеры пиши для рутинной работы или обучения.
Пишем чекер для CVE-2025-32432
Теории много, давай писать первый полезный скрипт. Будем чекать . Это уязвимость десериализации в Craft CMS, которая легко раскручивается в полноценный Remote Code Execution.
Машина для тестов
Для тестов можно скачать, например, версию . Обрати внимание, что тебе нужна именно 4.13.1.1. Без последней единички, указывающей на патч, ты столкнешься с ошибками при попытке установки.
Собери в Docker проект на базе образа php:8.2-apache в качестве веб‑сервера и mysql:8.0 — для базы данных. Подключись к контейнеру web. Установи в контейнер web композер и скачай указанный выше архив. Выполни composer install, чтобы подтянулись зависимости. Установка CMS выполняется через CLI, командой php craft install. Никаких действий для настройки самой Craft CMS не требуется.
Убедись, что веб‑интерфейс открывается. В моем случае это .
Приветственный экран Craft CMS
Давай добавим таргет и просканируем в Full-режиме. Убедимся, что «Окунь» не видит уязвимости и есть смысл написать кастомный чекер.
Тестовое сканирование, чтобы убедиться, что «Окунь» не видит CVE
Acunetix не нашел серьезных проблем, при том что CVE-2025-32432 точно есть!
Подробности о CVE
Уязвимый путь:
/index.php?p=admin/actions/assets/generate-transform
Это эндпоинт для трансформации изображений. Легитимный запрос должен передать идентификатор assetId и данные о необходимой трансформации. В ответ приходит объект со ссылкой на измененное изображение.
Acunetix, он же «Окунь», — один из самых мощных сканеров безопасности. Люблю его за возможность одновременного сканирования до 25 таргетов и за широкий набор чекеров. Но охватить все невозможно, тем более если у тебя в руках собственная 0-day-уязвимость.
Я, конечно, не спалю 0-day, но поработаем с интересной уязвимостью, которая позволит раскрыть несколько скрытых и недокументированных механизмов в создании своих чекеров. Речь о , опасной дыре, которая позволяет хакеру легко получить 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.job() создается HTTP-задача, а ax.http.execute(job) добавляет запрос в очередь движка Acunetix.
Выглядит просто и удобно, но... Есть большой недостаток — ужасная документация. Разработчики из Invicti сделали все, чтобы у тебя не возникло желания писать свои дополнения. Они будто говорят: рядовым пентестерам и менеджерам хватит стандартных возможностей, больше нужно только хакерам. Если же ты хакер, сможешь разобраться и без документации. Поэтому 90% свойств и методов не документированы.
Нам с тобой придется пройти трудный путь, чтобы решить поставленную задачу. Специально продемонстрирую не лучшее решение, чтобы показать свою логику и объяснить на примере детали.
info
Acunetix при любом профиле сканирования проходит три этапа: Discovery, Analysis, Testing. Discovery — по факту краулинг, он может сильно затянуть процесс. Учитывай это. Если нужен быстрый чекер, который пробежит по списку таргетов, лучше написать его на Python. Найденные уязвимости всегда можно добавить через Acunetix API. Чекеры пиши для рутинной работы или обучения.
Пишем чекер для CVE-2025-32432
Теории много, давай писать первый полезный скрипт. Будем чекать . Это уязвимость десериализации в Craft CMS, которая легко раскручивается в полноценный Remote Code Execution.
Машина для тестов
Для тестов можно скачать, например, версию . Обрати внимание, что тебе нужна именно 4.13.1.1. Без последней единички, указывающей на патч, ты столкнешься с ошибками при попытке установки.
Собери в Docker проект на базе образа php:8.2-apache в качестве веб‑сервера и mysql:8.0 — для базы данных. Подключись к контейнеру web. Установи в контейнер web композер и скачай указанный выше архив. Выполни composer install, чтобы подтянулись зависимости. Установка CMS выполняется через CLI, командой php craft install. Никаких действий для настройки самой Craft CMS не требуется.
Убедись, что веб‑интерфейс открывается. В моем случае это .

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

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