Серьезная уязвимость Log4j, посмотрите, как я воспроизведу и устраню ее

задняя часть
Серьезная уязвимость Log4j, посмотрите, как я воспроизведу и устраню ее
  • J3 - белый старт
  • Технология (log4j # безопасность)

Были ли вы удивлены лазейками в Log4j за последние два дня?

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

Давайте сначала взглянем на официальное описание уязвимости:

Apache Log4j2 — это инструмент ведения журнала на основе Java. Этот инструмент переписывает структуру Log4j и представляет ряд богатых функций. Структура журнала широко используется при разработке бизнес-систем для записи информации журнала.

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

Уровень опасности этой уязвимости: Серьезный

Область воздействия: 2.0

Объяснение заключается в том, что когда система использует log4j для печати введенной пользователем информации в журнал в виде ${}, то это вызовет проблему безопасности

демо

1. Создайте новый базовый проект maven

2. Добавьте следующие зависимости

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.14.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.14.0</version>
</dependency>

3. Пишите Java-код

public class Log4jErrorTest {

    private static final Logger logger = LogManager.getLogger();

    public static void main(String[] args) {
        // 注意这个变量
        String error = "${java:vm}";
        logger.error("==============危险打印,{}", error);
    }

}

4. Результаты

Snipaste_2021-12-11_15-57-43.png

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

смотри это, мы собираемсяразмышлениеодин раз

Затем, если хакер превратит значение переменной ошибки в доступную ссылку, log4j выполнит ее точно так же, как параметр выполнения!

Ответ очевиден, да.

Сейчас мыразмышлениеДалее поместите аналогичный${jndi:rmi//危险链接}Если строка введена в целевую программу, она может быть выполнена на атакуемом сервере.

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

принцип

На чем мы сосредоточены, так это на подстановке строк, log4j заменяет {} на переменные, которым нужны плейсхолдеры по принципу плейсхолдеров, и реализация этой функции — одна из log4jLookupФункции.

Официальный адрес документа Lookup:logging.apache.org/log4 просто/2.маленький/нет…

Однако я узнал, что эта функция основана на JNDI, поэтому уязвимость заключается в реализации пользовательской программы JNDI и отправке ее программе целевого сервера.Если они напечатают введенную нами строку, они будут пойманы.Выполнить мою пользовательскую программу в своей системе.

Уведомление,наша программа будет работать на их сервере, что представляет наибольшую опасность. (Али определяет фактор риска 10, что кажется полной опасностью)

Решение

Способ 1: Простой и грубый, то есть без логов log4j

Способ 2: Обновите версию, непосредственно обновите до2.15.0Версия

Snipaste_2021-12-11_16-30-30.png

Если в проекте не используется журнал log4j, а зависимость Maven введена в проект и связана с проектом, то можно использовать функцию исключения зависимостей Maven.

Давайте посмотрим, как мой проект проверяет наличие зависимостей log4j!

Проекты, которые я поддерживаю:git ee.com/just 3_white up/co…

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

Snipaste_2021-12-11_16-34-55.png

2. Плагин справки Maven для запроса зависимостей пакета jar

Сначала установите плагин

Snipaste_2021-12-11_16-37-30.png

3. Введите файл pom.xml для анализа и щелкните тот, который я отметил ниже, чтобы увидеть все зависимости.

Snipaste_2021-12-11_16-39-45.png

4. Затем найдите зависимости log4j, вы видите зависимости, как показано на рисунке

Snipaste_2021-12-11_16-43-04.png

5. Щелкните правой кнопкой мыши зависимость log4j и выберите «Исключить» и, наконец, обновите maven, чтобы обнаружить, что проект не имеет зависимостей, связанных с log4j, Это очень безопасно и прекрасно решено.

好了,今天的内容到这里就结束了,关注我,我们下期见

Контакты:

QQ: 1491989462, будь другом и поставь лайк.


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

  • Если вы считаете, что статья неплохая, ваша пересылка, обмен, лайки и комментарии будут для меня самой большой поддержкой.

  • Спасибо за прочтение, вам очень рады и ценим ваше внимание.

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

CSDN:J3 - белый старт

Самородки:J3-белый вверх

Знаю почти:J3-белый вверх

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

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^