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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/rvermeulen/codeql-workshop-cve-2021-21380
Статический анализАнализ уязвимостейАнализ КодаВеб-безопасностьОбучение и ОбразованиеЛаборатории и Практика
GitHubrvermeulen/codeql-workshop-cve-2021-21380

codeql-workshop-cve-2021-21380

Семинар по CodeQL, посвящённый CVE-2021-21380

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

Популярное

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

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

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

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

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

Практикум по CodeQL для Java: поиск SQL-инъекции

В этом практикуме мы будем использовать синтаксические и семантические рассуждения, чтобы найти SQL-инъекцию в компоненте API рейтингов платформы XWiki, описанную в CVE-2021-21380.

Содержание

  • Практикум по CodeQL для Java: поиск SQL-инъекции
    • Содержание
    • Предварительные требования и инструкции по настройке
      • На вашем локальном компьютере
        • Установка
        • Шаги настройки
    • Практикум
      • Чему вы научитесь
      • Постановка задачи
      • Упражнения
        • Упражнение 1
        • Интермеццо 1
        • Упражнение 2
        • Упражнение 3
        • Интермеццо 2
        • Упражнение 4
        • Упражнение 5
        • Интермеццо 3
        • Упражнение 6
        • Упражнение 7
        • Упражнение 8
    • Что дальше?

Предварительные требования и инструкции по настройке

На вашем локальном компьютере

Пожалуйста, по возможности выполните этот раздел до начала практикума.

Установка

  • Установите Visual Studio Code.

  • Установите расширение CodeQL для Visual Studio Code.

  • Вам не нужно устанавливать CodeQL CLI: расширение сделает это за вас.

  • Клонируйте этот репозиторий:

    git clone https://github.com/advanced-security/codeql-workshop-cve-2021-21380.git
    

Шаги настройки

  • Импортируйте базу данных CodeQL, которая будет использоваться на практикуме:
    • Щёлкните правой кнопкой мыши по файлу xwiki-platform-CVE-2021-21380.zip в представлении Explorer и выберите команду CodeQL: Set Current Database.
    • База данных появится в представлении CodeQL databases, доступном через значок QL на панели действий (Activity Bar).
  • Установите зависимости для анализа Java-кода и для запуска тестов упражнений и решений.
    • В палитре команд (Cmd/Ctrl+Shift+P) найдите и выполните команду CodeQL: Install Pack Dependencies.
    • В верхней части окна VS Code введите github в поле, чтобы отфильтровать список.
    • Установите флажки рядом с cve-2021-21380-exercises, cve-2021-21380-exercises-tests, cve-2021-21380-solutions и cve-2021-21380-solutions-tests.
    • Нажмите OK/Enter.
  • Убедитесь, что всё работает должным образом, запустив тесты для решений.
    • Откройте представление Testing и нажмите run tests (значок воспроизведения появляется при наведении на solutions) рядом с элементом solutions в дереве.

Практикум

Чему вы научитесь

Практикум разделён на несколько упражнений, знакомящих с поддержкой языка QL для Java, и завершается итоговым запросом для поиска известной SQL-инъекции. В этих упражнениях вы научитесь:

  • Рассуждать о синтаксической информации.
  • Рассуждать о семантической информации.
  • Исследовать поддержку языка QL для Java для выражения паттернов.
  • Исследовать, как переиспользовать и расширять существующее моделирование.
  • Использовать несколько строительных блоков для составления итогового запроса.

Постановка задачи

На этом практикуме мы будем искать известные уязвимости SQL-инъекций в компоненте API рейтингов XWiki Platform. Такие уязвимости могут возникать в приложениях, когда информация, контролируемая внешним пользователем, попадает в код приложения, который небезопасно формирует SQL-запрос и выполняет его.

Известная SQL-инъекция, рассматриваемая на этом практикуме, описана в GHSA-79rg-7mv3-jrr5 в GitHub Advisory Database. Чтобы найти SQL-инъекцию и возможные варианты, мы перейдём к следующим подзадачам:

  • Определите источник недоверенной информации и смоделируйте его в QL.
  • Определите сток (sink) — метод, выполняющий SQL-запросы, — и смоделируйте его в QL.
  • Объедините приведённые выше решения, чтобы с помощью taint tracking определить, существует ли поток информации между источником и стоком.

Упражнения

В первых нескольких упражнениях мы будем рассуждать о синтаксической информации, используя абстрактное синтаксическое дерево (AST), чтобы определить:

  • метод, описанный в бюллетене безопасности, чтобы понять уязвимость;
  • параметры, содержащие недоверенные данные, — наши источники;
  • вызовы методов, принимающих SQL-выражения, — наши стоки.

Упражнение 1

Найдите все методы с именем getAverageRating и их объявляющий тип в программе, дополнив запрос exercise1.ql

Подсказки
  • Модуль java предоставляет класс Method для рассуждений о методах в программе.
  • Класс Method предоставляет предикаты-члены getName и hasName для рассуждений об имени метода.
  • Класс Method предоставляет член getDeclaringType для рассуждений о типе, который объявляет метод.

Решение можно найти в запросе exercise1.ql

Интермеццо 1

Решение упражнения 1 возвращает список методов. Некоторые из них определены в интерфейсе RatingsManager, а некоторые — в классах AbstractRatingsManager и RatingsScriptService.

На основе информации, возвращённой запросом, и документации по компонентам XWiki можно сделать вывод, что:

  • XWiki использует компонентно-ориентированную архитектуру, чтобы поддерживать расширения и настройки.
  • Уязвимый метод является частью компонента.
  • Компонент состоит из интерфейса, аннотированного Role, и реализации, аннотированной Component.
  • Компонент, расширяющий ScriptService, становится доступным вики-страницам через скрипты.

Упражнение 2

Найдите все классы, аннотированные аннотацией Component, дополнив запрос exercise2.ql. Обратите внимание, что полное имя типа аннотации — org.xwiki.component.annotation.Component.

Подсказки
  • К /доменному типу класса/ — пересечению его супертипов — можно обратиться с помощью ключевого слова this в /характеристическом предикате/.
  • Класс Class предоставляет метод getAnAnnotation для получения связанных аннотаций.
  • Класс Annotation предоставляет предикат-член getType для рассуждений о его типе.
  • Класс Type предоставляет предикаты-члены getName и hasName для рассуждений об имени типа.
  • Класс RefType, представляющий классы и интерфейсы, предоставляет предикаты-члены getQualifiedName и hasQualifiedName для рассуждений о полном имени ref-типа.

Решение можно найти в запросе exercise2.ql

Упражнение 3

Найдите все компоненты, которые реализуют интерфейс ScriptService, дополнив запрос excercise3.ql

Подсказки
  • Класс Class предоставляет предикат-член getASuperType для рассуждений о супертипах класса, то есть типах, которые он расширяет (extends) или реализует (implements).

Решение можно найти в запросе exercise3.ql

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