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

Статья Дебажим PyroCMS на примере CVE-2023-29689

grozdniyandy

White-Hat
Premium
Регистрация
11.08.2023
Сообщения
522
Реакции
677
Гарант сделки
2
Эта статья в основном посвящена отладке PHP приложений с помощью VSCode и немного уязвимости CVE-2023-29689. Мы рассмотрим шаги для настройки удаленной отладки через SSH и изучим, как использовать эти знания для анализа уязвимостей и тестирования эксплойтов.

Установка PyroCMS 3.9​

Уязвимость в версии 3.9, так что качаем её:
Код:
cd /var/www/html
git clone -o pyrocms https://github.com/pyrocms/pyrocms -b 3.9
chmmod www-data:www-data /var/www/html -R
Пишем конфигурацию для нгинх, но пока что не начинаем, тк не скачали php-fpm
Код:
sudo nano /etc/nginx/sites-available/pyro.conf
server {
  listen 80;

  server_name 192.168.147.131; # Check this
  root /var/www/html/pyrocms/public; # Check this

  index index.php index.html;
  charset utf-8;
  location / {
    try_files $uri $uri/ /index.php?$args;
  }

  location ~ \.php$ {
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Check this
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }

}
Создаём симлинк и качаем xdebug
Код:
sudo ln -s /etc/nginx/sites-available/pyro.conf /etc/nginx/sites-enabled/
sudo apt-get install php8.1-xdebug (на будущее)
Что такое отладка и зачем нам нужно отлаживать?
Отладка
— это процесс поиска и исправления ошибок или багов в исходном коде любого программного обеспечения. Проще говоря, это вывод результатов на экран. Отладка необходима, когда вы хотите найти уязвимости или написать эксплойты для уже существующих уязвимостей. Кроме того, отладка помогает разработчикам понять логику работы их кода.

Удаленная отладка через SSH с VSCode​

После развертывания PyroCMS 3.9 на нашем сервере Ubuntu (я использовал Ubuntu Server и Nginx - вы можете использовать что угодно), следующий шаг — это настройка удаленной отладки. Удаленная отладка полезна, так как позволяет вам отлаживать приложения, работающие на удаленных серверах, прямо из вашей среды разработки.

Сначала нужно открыть VSCode и скачать расширение "Remote - SSH". Это расширение позволяет подключаться к удаленным серверам через SSH прямо из VSCode, что значительно упрощает процесс отладки. Затем запустите SSH на вашем сервере Ubuntu:
Код:
sudo apt update
sudo apt install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
Подключение по SSH
Сначала настроим аутентификацию без пароля с нашего компьютера, на котором установлен VSCode (в моем случае это Kali), к нашему удаленному серверу (Ubuntu). Команда ssh-keygen используется для генерации новой пары ключей SSH, которая состоит из открытого и закрытого ключа. По умолчанию эта команда генерирует пару ключей RSA длиной 2048 бит. Закрытый ключ хранится в указанном файле (например, ~/.ssh/id_rsa). Открытый ключ хранится в указанном файле с расширением .pub (например, ~/.ssh/id_rsa.pub).
Код:
ssh-keygen -t rsa -b 4096 -C xss@xss.loc
Команда ssh-copy-id копирует открытый ключ на удаленный сервер, что позволяет осуществлять аутентификацию без пароля. Эта команда добавляет ваш открытый ключ в файл ~/.ssh/authorized_keys на удаленном сервере.
Код:
ssh-copy-id ubuntu@192.168.147.131

1721833480171.png

Изображение [1]​
Теперь нам нужно перейти в VSCode, нажать CTRL+SHIFT+P и найти SSH. Затем выберите "Add New Host"

1721833493212.png

Изображение [2]​
Нам нужно написать команду SSH для аутентификации.

1721833504176.png

Изображение [3]​
Выберите файл конфигурации (в моем случае он находится внутри /home/kali/.ssh и был создан при генерации ключа SSH).

1721833513771.png

Изображение [4]​
Теперь мы добавили наш хост, нам нужно подключиться к нему.

1721833550589.png

Изображение [5]​
Выберите удаленный сервер, который мы только что добавили.

1721833558475.png

Изображение [6]​
Выберите папку, где настроен PyroCMS.

1721833568709.png

Изображение [7]​

Включение отладки​

Я уже дал всем пользователям права на чтение/запись/выполнение в папке /var/www/html, поэтому у меня нет ошибок разрешения. Вы можете сделать то же самое:
Код:
chmod a+rwx /var/www/html
Создайте папку .vscode и файл launch.json. Этот файл конфигурации говорит VSCode, как подключиться к вашему серверу и начать отладку с помощью XDebug (отладчик и профайлер для PHP - скачайте если у вас нет)

1721833609020.png

Изображение [8]​
Код:
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for XDebug",
      "type": "php",
      "request": "launch",
      "port": 9003,
      "pathMappings": {
        "/var/www/html/pyrocms [ВАМ НУЖНО ЭТО ОТРЕДАКТИРОВАТЬ]": "${workspaceFolder}"
      }
    }
  ]
}
name: это описательное название конфигурации.
type: указывает на то, что конфигурация предназначена для отладки PHP.
request: указывает на тип запроса. Для XDebug laucnh выполняет прослушивание входящих подключений от отладчика.
port: номер порта, который VS Code будет прослушивать для подключений XDebug.
pathMappings: объект, который отображает пути между локальной машиной и удаленным сервером на котором выполняется PHP-код./var/www/html/pyrocms - путь к корневому каталогу вашего PHP-приложения на сервере.
Значение ("${workspaceFolder}") переменная VS Code, которая представляет корень вашей рабочей области (т.е. папку, которую вы открыли в VS Code).

Убедитесь что ваша конфигурация PyroCMS правильная. Обратите внимание, что я использую PHP 8.1:
Код:
nano /etc/nginx/sites-available/pyro.conf
server {
  listen 80;

  server_name 192.168.147.131; # Check this
  root /var/www/html/pyrocms/public; # Check this

  index index.php index.html;
  charset utf-8;
  location / {
    try_files $uri $uri/ /index.php?$args;
  }

  location ~ \.php$ {
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Check this
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }

}
1721834087953.png

Изображение [9]​
Скачайте php-fpm, если вы этого не сделали:
Код:
sudo apt install php8.1-fpm
service php8.1-fpm start
CGI (Common Gateway Interface):
CGI - это стандартный протокол, используемый для того, чтобы веб-серверы могли запускать внешние программы для динамической генерации веб-контента. Эти программы, известные как CGI-скрипты, могут быть написаны на различных языках программирования, таких как Python, Perl, PHP или C.
PHP-FPM (PHP FastCGI Process Manager) — это альтернативная реализация FastCGI для PHP

Отредактируйте php.ini и добавьте строки для отладки:
Код:
nano /etc/php/8.1/fpm/php.ini
[xdebug]
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
xdebug.log=/var/log/xdebug/xdebug.log
xdebug.idekey = VSCODE
Адрес клиента 127.0.0.1, так как мы подключились к нашему серверу Ubuntu через VSCode и будем запускать отладку оттуда (с Ubuntu).
1721834129587.png

Изображение [10]
Создайте файлы и директории для логирования и перезапустите службы:
1721834137103.png

Изображение [11]​
Код:
sudo mkdir -p /var/log/xdebug
sudo chown www-data:www-data /var/log/xdebug
sudo chmod 755 /var/log/xdebug
sudo touch /var/log/xdebug/xdebug.log
sudo chown www-data:www-data /var/log/xdebug/xdebug.log
sudo chmod 644 /var/log/xdebug/xdebug.log
sudo systemctl restart nginx
sudo systemctl restart php8.1-fpm
Перейдите в VSCode -> отладка -> старт

1721834160339.png

Изображение [12]​
Я решил перейти в public/app/default/assets/admin и создать файл info.php, чтобы проверить, работает ли отладка. Открыл info.php в браузере

1721834167523.png

Изображение [13]​
Установил точку останова, и отладка работает.
Точка останова — это маркер, который вы устанавливаете на строке кода, указывая отладчику временно остановить выполнение при достижении этой строки. Чтобы установить точку останова, щелкните в левом поле рядом с номером строки, где хотите установить точку останова. Появится красная точка, указывающая на то, что точка останова установлена.

1721834174199.png

Изображение [14]​

Тестирование эксплойта​

SSTI (Server-Side Template Injection) — это уязвимость, которая возникает, когда пользовательский ввод небезопасно включается в шаблон и интерпретируется сервером
Эксплойт для этого CVE доступен здесь - https://www.exploit-db.com/exploits/51669
Как видно из эксплойта, проблема возникает при редактировании ролей пользователей - /admin/users/roles/edit/1
1721834193819.png

Изображение [15]​
Когда мы возвращаемся к ролям, выполняется код шаблона
1721834202254.png

Изображение [16]​
Мы также можем увидеть это в VSCode

1721834210275.png

Изображение [17]​
Функция escape фильтра Twig - это функция escape в случае XSS и т.д. (насколько я понимаю). Это не защита от инъекций шаблонов

1721834217824.png

Изображение [18]​
Twig имеет свою собственную функцию в CoreExtension.php

1721834226902.png

Изображение [19]​
Мы также можем проверить функции, фильтры и теги Twig на https://twig.symfony.com/doc/
Одна из функций - include. Согласно Twig, "Оператор include включает шаблон и выводит отображаемое содержимое этого файла"
Это похоже на функцию include в PHP, поэтому мы можем включить некоторые файлы для получения их содержимого (или выполнения)

1721834234282.png

Изображение [20]

1721834241295.png

Изображение [21]
Если мы проверим нагрузки SSTI для Twig, мы наткнемся на такие нагрузки, как этoт:
Код:
{{['id']|map('system')|join}}
Он выполняeт код PHP, мы можем использовать функцию file_get_contents в PHP для чтения /etc/passwd снова

1721834257437.png

Изображение [22]​
Мы увидим тот же результат

1721834266558.png

Изображение [23]​
Теперь мы можем попробовать RCE

1721834274180.png

Изображение [24]

1721834281491.png

Изображение [25]
И если мы проверим VSCode, мы увидим, что id передается как аргумент для system

1721834288361.png

Изображение [26]​

Conclusion​

Мы рассмотрели, как настроить удаленную отладку PHP приложений с помощью VSCode и XDebug. Мы также рассмотрели уязвимость CVE-2023-29689 и как её эксплуатировать. Уязвимость CVE-2023-29689 не является критической, так как там нужна аутентификация (как админ).

Автор grozdniyandy

Источник https://xss.pro/​

 
Последнее редактирование:
имхо, тс сел на один и тот же конек - просмотр и попытки эксплуатации cve (как придется).
Ну и для "обвеса" в данном случае vscode+ssh+xdebug

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

1)vscode+ssh+xdebug как применить выложено много где с 2016 г
2) exploit CVE-2023-29689 написан и размножен.

А вот тема уязвимостей шаблонизатора, выбора нагрузки, не-раскрыта, а так, скомкана, к сожалению.
Шаблонизаторы если и создают проблемы, то в ряде движков, их использующих (помню уязвимости ...smarty).
А на twig-e есть еще CMS.

А вот здесь, например, PayloadsAllTheThings/Server%20Side%20Template%20Injection/
список багов , в которых Twig был уличен.

Жаль, что автор не копнул ни шире, ни глубже.
 
имхо, тс сел на один и тот же конек - просмотр и попытки эксплуатации cve (как придется).
Ну и для "обвеса" в данном случае vscode+ssh+xdebug

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

1)vscode+ssh+xdebug как применить выложено много где с 2016 г
2) exploit CVE-2023-29689 написан и размножен.

А вот тема уязвимостей шаблонизатора, выбора нагрузки, не-раскрыта, а так, скомкана, к сожалению.
Шаблонизаторы если и создают проблемы, то в ряде движков, их использующих (помню уязвимости ...smarty).
А на twig-e есть еще CMS.

А вот здесь, например, PayloadsAllTheThings/Server%20Side%20Template%20Injection/
список багов , в которых Twig был уличен.

Жаль, что автор не копнул ни шире, ни глубже.
Выложу кое что поинтересней особо для тебя
 
Уязвимость CVE-2023-29689 не является критической, так как там нужна аутентификация (как админ).

лолшто... SSTI по твоему мнению не критическая уязвимость просто потому что нужна авторизация? То есть в связке с XSS такое ну нереально проэксплутаировать обойдя авторизацию? Или пароли это что-то магическое что невозможно подобрать, учитывая статистику что Password11 у пол мира стоит, грубо говоря. Ты код эксплойта почитай там 3 реквеста, из них 2 можно откинуть если реализация через XSS, остается одни пост запрос на эксплуатацию.
Score: 9.8 CRITICAL - https://nvd.nist.gov/vuln/detail/CVE-2023-29689
 
выполнение кода которое приводит к внедрению команд, вот оно уже опасно
Я лет 10 как не встречаю уже сайты на пхп с disable_function, safe_mode тоже, остальные языки даже не заморачиваются с такими вещами, и правильно. Получается выполнение кода это и есть выполнение системных команд, грубо говоря. Мне кажется или ты ахинею несешь в каждом посте просто чтоб не согласиться со мной, это типа спор ради спора без какого либо смысла.
 


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