PHP injection в имени статического метода

Discussion in 'Песочница' started by Gasc0igne, 1 Mar 2022.

  1. Gasc0igne

    Gasc0igne New Member

    Joined:
    16 Feb 2022
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Всем ку! Прошу помощи знатоков PHP.
    На исследуемом сайте реализована интересная система формирования отчетов, в POST параметр передается полный namespace до модели и происходит вызов статического метода. По коду приблизительно выглядит это вот так (самого кода нет):

    Code:
    <?php
    
    $model = $_POST['model'];
    $dataProvider = new ActiveDataProvider([
        'query' => $model::find(),
        'sort' => [
            'defaultOrder' => [
                'id' => SORT_DESC
            ]
        ]
    ]);
    Передаю постом model = \common\models\Product получаю xlsx файл. Сайт работает на Yii2 (PHP7).

    Вопрос: Можно ли каким-то образом сделать RCE?
    P.S. Пробовал передавать другие модели, но в методе подставляется условие ограничивающие выборку и ломает выполнение скрипта
     
  2. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    683
    Likes Received:
    1,513
    Reputations:
    460
    Это не Code Injection, а Arbitrary Class Instantiation или в какой-то мере Arbitrary Object Injection. Что тоже неплохо, но не в текущем кейсе, так как метод жёстко прописан. Минимальные шансы есть в случае вайт-бокса, и то, с надеждой на какой нибудь походящий класс с похожим методом или __callStatic(). А дальше смотреть по коду, на что можно повлиять. Если есть другая поверхность атаки, то я предпочёл бы не тратить время здесь, так как шанс на успех очень мал.
     
  3. Gasc0igne

    Gasc0igne New Member

    Joined:
    16 Feb 2022
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Спасибо большое, не знал как это точно называется, обязательно погуглю. Да случай не простой, еще усложняет то, что весь код лежит выше DOCUMENT_ROOT и не получается даже по ответу сервера перебрать существующие модели. Сам по себе Yii2 из коробки очень секьюрный) куки шифруются, входные данные валидируются, все спрятано. Разраб должен быть прям очень безруким, чтобы совершить ошибку.