/ categories / Блоги / @webpwn / post #240
8575

Что если вы контролируете путь к файлу для чтения в 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-парсере или на уровне скрипта.


13:01 10.10.19
@webpwn
6724 +4

Уязвимости и атаки на веб-приложения. Без рекламы. Чат об одинарных, иногда даже двойных кавычках - @WebPwnChat '