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

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

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

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

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

Категории

Все категории
Loading categories
POC-CVE-2022-30600 — Доказательство концепции для CVE-2022-30600 | Kitploit
Инструменты/GitHubGitHub/boonjune/poc-cve-2022-30600
Атаки на ПаролиАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеАутентификация
GitHubboonjune/poc-cve-2022-30600

POC-CVE-2022-30600

Доказательство концепции для CVE-2022-30600

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

Популярное

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

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

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

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

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

Доказательство концепции для CVE-2022-30600

Обзор

Этот репозиторий содержит 2 реализации доказательства концепции, которое эксплуатирует CVE-2022-30600.

CVE-2022-30600 — это уязвимость безопасности, которая позволяет злоумышленнику обойти порог блокировки учетной записи в веб-приложении moodle.

Как указано в следующей записи в базе данных NVD https://nvd.nist.gov/vuln/detail/CVE-2022-30600, следующие версии известны как уязвимые для этой эксплуатации.

3.9 - 3.9.13

3.10 - 3.10.10

3.11 - 3.11.6

Детали атаки

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

https://git.moodle.org/gw?p=moodle.git;a=commitdiff;h=59b5858da200f63ecb59a9113af2b99ef1496fe5;hp=a0f47c8bc4d6f5971025de7d63f22475701d2f86

Если происходит более 1 одновременного запроса на вход, то веб-приложение moodle может не выполнить правильную проверку и обновление значения входа в приложении. Это приводит к тому, что 2 или более неудачных попытки входа учитываются только как 1 неудачная попытка.

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

root@kitploit:~
sequenceDiagram 
    participant C as Client 
    participant W as Webapp 
    participant D as Database 
    C->>W: Login Request 
    W->>D: Requests failed_login_attempt 
    D->>W: failed_login_attempt = 0 
    W->>W: local failed_login_attempt  = 0 
    W->>W: local failed_login_attempt  = 1 
    W->>D: failed_login_attempt = 1 
    W->>C: Login Failed

Результат состоит в том, что значение failed_login_attempt в базе данных корректно, и последующие попытки входа будут правильно его обновлять.

Если злоумышленник отправляет несколько одновременных запросов на вход, то возникает следующая проблема.

root@kitploit:~
sequenceDiagram 
    participant C as Client 
    participant W as Webapp 
    participant D as Database 
    C->>W: Login Request (session 1) 
    C->>W: Login Request (session 2) 
    W->>D: Requests failed_login_attempt (session 1) 
    W->>D: Requests failed_login_attempt (session 2) 
    D->>W: failed_login_attempt = 0 (session 1) 
    D->>W: failed_login_attempt = 0 (session 2) 
    W->>W: local failed_login_attempt = 0 (session 1) 
    W->>W: local failed_login_attempt = 0 (session 2) 
    W->>W: local failed_login_attempt = 1 (session 1) 
    W->>W: local failed_login_attempt = 1 (session 2) 
    W->>D: failed_login_attempt = 1 (session 1) 
    W->>D: failed_login_attempt = 1 (session 2) 
    W->>C: Login Failed (session 1) 
    W->>C: Login Failed (session 2)

Результатом этого взаимодействия является то, что значение failed_login_attempt в базе данных увеличивается только на 1, несмотря на 2 неудачных запроса на вход. Это можно масштабировать до сотен запросов, при этом ограничениями являются количество одновременных запросов, которое может отправить клиент, и количество запросов, которое веб-сервер может обрабатывать одновременно.

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

Реализация на Python3

Описание

poc.py — это реализация атаки на Python3. Она использует потоки для выполнения одновременных запросов. Хотя это доказательство концепции работает, глобальная блокировка интерпретатора (GIL) в Python3 мешает преимуществу использования нескольких потоков в данных обстоятельствах. Я настоятельно рекомендую использовать реализацию на C++, так как она работает лучше, когда атака выполняется с одного клиента.

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

poc.py [-h] -u USERNAME -url TARGET -w WORDLIST -t THREADS [-a ATTEMPTS] [-d DELAY]

опции: -h, --help
 показывает это справочное сообщение
-u USERNAME, --username USERNAME
 Имя пользователя целевой учетной записи
-url TARGET, --target TARGET
 Базовый URL целевого веб-приложения moodle
-w WORDLIST, --wordlist WORDLIST
 Путь к используемому файлу словаря
-t THREADS, --threads THREADS
 Количество потоков, создаваемых для каждой попытки
-a ATTEMPTS, --attempts ATTEMPTS
 Количество попыток, которое вы хотите сделать. По умолчанию 1
-d DELAY, --delay DELAY  Количество секунд между каждой попыткой. Значение по умолчанию 2

Пример

python3 poc.py -u admin -url https://moodle/ -w /usr/share/wordlists/rockyou.txt -t 15 -a 8

цель : https://moodle/
имя пользователя учетной записи : admin
словарь : /usr/share/wordlists/rockyou.txt
потоки : 15 запросов на вход будет выполнено в каждой попытке
попытки : атака повторится 8 раз в общей сложности.

В этом примере будет выполнено всего 120 (8 * 15) запросов на вход. Между каждой попыткой будет задержка в 2 секунды.

Реализация на C++

Описание

poc.cpp — это реализация атаки на C++, которая использует библиотеку curl для выполнения атаки. Поэтому для компиляции приложения требуются некоторые флаги компилятора. В целом, эта реализация работает лучше, чем версия на Python3, так как потоки могут использовать все ядра клиентского устройства, что позволяет выполнять больше одновременных соединений за более короткое время. Это означает, что эксплойт работает более стабильно.

Флаги компилятора

g++ poc.cpp -o poc -lcurl

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

Usage: poc [OPTION...]
-a, --attempts

 Количество раз, которое выполняется атака.
-t, --threads

 Количество потоков, используемых в каждой попытке.
-n, --username
 Имя пользователя целевой учетной записи
-u, --URL
 Базовый URL веб-приложения moodle
-d, --delay
 Задержка времени между попытками. По умолчанию 5
-v, --version
 Показать версию
-h, --help
 Вывести справочное сообщение
-w, --wordlist arg
 Словарь паролей.

Пример

./poc -w /usr/share/wordlists/rockyou.txt -u https://moodle/ -n admin -a 3 -t 5 -d 2

словарь : /usr/share/wordlists/rockyou.txt
URL : https://moodle/
имя пользователя учетной записи : admin
попытки : будет выполнено 3 попытки
потоки : в каждой попытке будет использовано 5 потоков
задержка : между каждой попыткой будет задержка в 2 секунды

Тестовая среда

Для разработки, тестирования и отладки этих скриптов я создал виртуальную машину. Эта виртуальная машина использовала следующее программное обеспечение и версии.

Moodle 3.9.0 PHP 7.2.34 MySQL 8.0.30 Ubuntu 5.15.0-41-generic Apache 2.4.52

Уведомление

Я не одобряю использование моего исходного кода в незаконной деятельности.

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