• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья CVE-2021-41282 Уязвимость PfSense Firewall, связанная с выполнением команд Getshell

вавилонец

CPU register
Пользователь
Регистрация
17.06.2021
Сообщения
1 116
Реакции
1 265
Информация об уязвимости


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

В брандмауэре PfSense существует уязвимость выполнения команд, затрагивающая версии <= 2.5.2. Проблемы могут быть записаны в веб-шелл с помощью команды sed файла `diag_routes.php`.

Создание окружающей среды

Загрузите его с официального сайта PfSense, разархивируйте и установите с помощью VMware:


1655125908600.png


После перезагрузки настройте систему и завершите настройку:

1655125937800.png


Сравнение патчей

Сравнивая коды версий 2.5.2 и 2.6.0, `diag_routes.php` добавляет параметр `Filter` для фильтрации:

1655125963200.png


Снова взглянем на версию кода 2.5.2, когда существуют параметры `isAjax` и `filter`, сначала используйте `htmlspecialchars` для обработки `filter`, а затем выполните `escapeshellarg`:

1655125981400.png


Так как используется версия php `7.4.26`, нет никаких сомнений в том, что проверки `escapeshellarg` и `htmlspecialchars` нельзя обойти, поэтому проблема не должна быть в самом коде PHP:

1655125995400.png


Произвольная запись файла

Просто измените `diag_route.php`, отправьте запрос GET `/diag_routes.php?isAjax=1&filter=abc` и напечатайте команду `netstat` следующим образом:

1655126013300.png


Обратите внимание, что здесь используется опция `-e` команды `SED`, которую можно использовать для выполнения скриптов. Опция `-w` может реализовать запись в файл. В качестве примера возьмем `/::1/w /tmp/testsed.txt`, его функция заключается в том, чтобы скопировать строку, содержащую строку `::1` в прочитанный файл, в `/tmp/testsed.txt`:

1655126027700.png


Протестировано в полезной нагрузке и получило полезную нагрузку, которая записывает в указанный файл:

1655126046400.png


Выполняемая команда `netstat` выглядит следующим образом: используйте `%0a%23`, чтобы выйти, чтобы получить `возврат каретки + #`, просто чтобы аннотировать последующую строку, вот скриншот локальной тестовой ситуации:

1655126069000.png


Наконец, контролируйте содержимое записи и замените строку `Flags` на код `s/Flags/VVV/g`:

1655126087900.png


Специальные символы, такие как `<>`, экранируются, и необходимо разрешить специальную кодировку:

1655126116000.png


Наконец, успешно записанный процесс кодирования:

1655126139700.png


Getshell

1655126159100.png


Получите доступ к Webshell, подключитесь как `https://ip/shell.php?a=system(id);`:

1655126180900.png


Уязвимость также может быть использована удаленно и анонимно из-за отсутствия защиты от CSRF.

А ну-ка вот так

Устаревшая обработка `sed` для `netstat` приводит к новой версии в пользу `egrep`:

1655126196200.png


Любые прямые или косвенные последствия и ущерб, вызванные распространением и использованием информации, представленной в данном документе, являются ответственностью пользователя, а команда безопасности и автор статьи не несут за это никакой ответственности.

Перевел эту статью
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх