avatar
Кавычка
@webpwn
10.10.2019 13:21
Что если вы контролируете путь к файлу для чтения в PHP, но результат отображается только при соответствии каким-то условиям?

Например, это может быть проверка через getimagesize() на то, что прочитанный файл является изображением. Также содержимое может выводиться не целиком, а лишь частично.
Ещё ситуация: у вас XXE, и вы хотите читать файлы с угловыми скобками (те же PHP-скрипты). Просто так это зачастую не сделать из-за нарушения синтаксиса XML.

На помощь приходят обёртки и фильтры:
https://www.php.net/manual/ru/filters.convert.php
https://www.php.net/manual/ru/filters.compression.php
https://www.php.net/manual/ru/filters.string.php
https://www.php.net/manual/ru/migration53.new-stream-filters.php

PHP позволяет на лету преобразовывать содержимое, прочитанное из ресурса (как из файловой системы, так и по сети).
Например, вот так можно прочитать веб-страницу, на лету убрать из неё теги, сжать с zlib и закодировать в base64:
php://filter/read=string.strip_tags|zlib.deflate|convert.base64-encode/resource=http://localhost:1337/secret.xml

Комбинируя фильтры, можно зачастую извлечь данные, которые приложение не хотело отдавать из-за валидации в XML-парсере или на уровне скрипта.
114 17.6K

Обсуждение 0

Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.

Обсудить в Telegram