Всем ку! Прошу помощи знатоков 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. Пробовал передавать другие модели, но в методе подставляется условие ограничивающие выборку и ломает выполнение скрипта
Это не Code Injection, а Arbitrary Class Instantiation или в какой-то мере Arbitrary Object Injection. Что тоже неплохо, но не в текущем кейсе, так как метод жёстко прописан. Минимальные шансы есть в случае вайт-бокса, и то, с надеждой на какой нибудь походящий класс с похожим методом или __callStatic(). А дальше смотреть по коду, на что можно повлиять. Если есть другая поверхность атаки, то я предпочёл бы не тратить время здесь, так как шанс на успех очень мал.
Спасибо большое, не знал как это точно называется, обязательно погуглю. Да случай не простой, еще усложняет то, что весь код лежит выше DOCUMENT_ROOT и не получается даже по ответу сервера перебрать существующие модели. Сам по себе Yii2 из коробки очень секьюрный) куки шифруются, входные данные валидируются, все спрятано. Разраб должен быть прям очень безруким, чтобы совершить ошибку.