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

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

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

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

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

Категории

Все категории
Loading categories
shiro-cve-2022-32532 — Минимальное веб-приложение на Java для воспроизведения CVE-2022-32532, обхода аутентификации Apache Shiro RegExPatternMatcher через символы новой строки в URL. | Kitploit
Инструменты/GitHubGitHub/my0113/shiro-cve-2022-32532
Аутентификация и авторизацияАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и Образование
GitHubmy0113/shiro-cve-2022-32532

shiro-cve-2022-32532

Минимальное веб-приложение на Java для воспроизведения CVE-2022-32532, обхода аутентификации Apache Shiro RegExPatternMatcher через символы новой строки в URL.

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

Популярное

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

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

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

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

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

Apache Shiro CVE-2022-32532 Среда воспроизведения

Это минимальное веб-приложение для воспроизведения CVE-2022-32532 (обход аутентификации Apache Shiro RegExPatternMatcher).

Описание уязвимости

  • CVE: CVE-2022-32532
  • Версии под угрозой: Shiro < 1.9.1
  • Причина: RegExPatternMatcher неправильно закрепляет регулярное выражение, что может привести к обходу пути. В частности, используется логика сопоставления регекспов по умолчанию в Java, и когда встречается символ . как часть регекспа, игнорируются специальные символы, такие как \r (%0d) и \n (%0a). Необходимо явно использовать режим Pattern.DOTALL для корректной обработки \r и \n. Версии Shiro ниже 1.9.1 используют логику сопоставления по умолчанию, поэтому не могут корректно обрабатывать \r и \n, что приводит к обходу аутентификации.

Как воспроизвести

  1. Запустите приложение

    root@kitploit:~
    启动ShiroCve202232532Application
    
    
  2. URL-адрес, который при нормальной аутентификации через Shiro возвращает access denied:
    http://localhost:8080/permit/xxx, где xxx может быть любыми символами

  3. URL-адрес, который обходит аутентификацию Shiro и возвращает success:
    http://localhost:8080/permit/xxx, то есть вставьте в xxx символы переноса строки \n (%0a) и возврата каретки \r (%0d)

  4. Метод исправления

    1. Скопируйте полное содержимое RegExPatternMatcher.java и PatternMatcher.java из https://github.com/apache/shiro/blob/shiro-root-1.9.1/core/src/main/java/org/apache/shiro/util/.
    2. Скомпилируйте эти два .java файла в RegExPatternMatcher.class и PatternMatcher.class с помощью JDK 11.
    3. Поместите эти 2 class-файла в shiro-core-1.6.0.jar по пути org/apache/shiro/util/ с помощью WinRAR.
    4. Для тестирования исправления скопируйте код из RegExPatternMatcher.java из shiro-core-1.9.1 в данный пример, переименовав в , затем замените в строке 15 и строке 29 на .
root@kitploit:~
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.shiro.util;

import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
 * {@code PatternMatcher} implementation that uses standard {@link java.util.regex} objects.
 *
 * @see Pattern
 * @since 1.0
 */
public class RegExPatternMatcher implements PatternMatcher {

   private static final int DEFAULT = Pattern.DOTALL;

   private static final int CASE_INSENSITIVE = DEFAULT | Pattern.CASE_INSENSITIVE;

   private boolean caseInsensitive = false;

   /**
    * Simple implementation that merely uses the default pattern comparison logic provided by the
    * JDK.
    * <p/>This implementation essentially executes the following:
    * <pre>
    * Pattern p = Pattern.compile(pattern, Pattern.DOTALL);
    * Matcher m = p.matcher(source);
    * return m.matches();</pre>
    * @param pattern the pattern to match against
    * @param source  the source to match
    * @return {@code true} if the source matches the required pattern, {@code false} otherwise.
    */
   public boolean matches(String pattern, String source) {
      if (pattern == null) {
         throw new IllegalArgumentException("pattern argument cannot be null.");
      }
      Pattern p = Pattern.compile(pattern, caseInsensitive ? CASE_INSENSITIVE : DEFAULT);
      Matcher m = p.matcher(source);
      return m.matches();
   }

   /**
    * Returns true if regex match should be case-insensitive.
    * @return true if regex match should be case-insensitive.
    */
   public boolean isCaseInsensitive() {
      return caseInsensitive;
   }

   /**
    * Adds the Pattern.CASE_INSENSITIVE flag when compiling patterns.
    * @param caseInsensitive true if patterns should match case-insensitive.
    */
   public void setCaseInsensitive(boolean caseInsensitive) {
      this.caseInsensitive = caseInsensitive;
   }
}
Скачать инструмент
RegExPatternMatcher191.java
new RegExPatternMatcher()
MyFilter
MyShiroFilterFactoryBean
new RegExPatternMatcher191()
  • Логика реализации RegExPatternMatcher в shiro-core-1.9.1 следующая: