Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Давай разберемся, как писать кастомные сканеры для Acunetix, на примере реальной CVE. От тебя потребуются только небольшие познания в JavaScript или TypeScript и желание сделать что‑то интересное. Внутри — эксклюзив, выстраданный потом и кровью.
Acunetix, он же «Окунь», — один из самых мощных сканеров безопасности. Люблю его за возможность одновременного сканирования до 25 таргетов и за широкий набор чекеров. Но охватить все невозможно, тем более если у тебя в руках собственная 0-day-уязвимость.
Я, конечно, не спалю 0-day, но поработаем с интересной уязвимостью, которая позволит раскрыть несколько скрытых и недокументированных механизмов в создании своих чекеров. Речь о CVE-2025-32432, опасной дыре, которая позволяет хакеру легко получить RCE.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Путь к папке с кастомными скриптами в Windows обычно выглядит так:
C:ProgramDataAcunetixsharedcustom-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.
Для тестов можно скачать, например, версию Craft CMS v.4.13.1.1. Обрати внимание, что тебе нужна именно 4.13.1.1. Без последней единички, указывающей на патч, ты столкнешься с ошибками при попытке установки.
Собери в Docker проект на базе образа php:8.2-apache
в качестве веб‑сервера и mysql:8.0
— для базы данных. Подключись к контейнеру web. Установи в контейнер web композер и скачай указанный выше архив. Выполни composer install
, чтобы подтянулись зависимости. Установка CMS выполняется через CLI, командой php craft install
. Никаких действий для настройки самой Craft CMS не требуется.
Убедись, что веб‑интерфейс открывается. В моем случае это http://localhost:8080/web/
.
Приветственный экран Craft CMS
Давай добавим таргет и просканируем в Full-режиме. Убедимся, что «Окунь» не видит уязвимости и есть смысл написать кастомный чекер.
Тестовое сканирование, чтобы убедиться, что «Окунь» не видит CVE
Acunetix не нашел серьезных проблем, при том что CVE-2025-32432 точно есть!
Уязвимый путь:
/index.php?p=admin/actions/assets/generate-transform
Это эндпоинт для трансформации изображений. Легитимный запрос должен передать идентификатор assetId
и данные о необходимой трансформации. В ответ приходит объект со ссылкой на измененное изображение.
Источник: xakep.ru