Los wrappers PHP son parte de la funcionalidad de PHP que permite a los usuarios acceder a varios flujos de datos. Los wrappers también pueden acceder o ejecutar código a través de protocolos PHP, lo que puede llevar a riesgos de seguridad importantes.
Por ejemplo, una aplicación vulnerable a LFI puede incluir archivos basado en input dado por el usuario sin validación suficiente. En dichos casos, los atacantes pueden usar el filtro php://filter. Este filtro permite a un usuario realizar operaciones de modificación básicas sobre la información antes de que se lea o escriba. Por ejemplo, si un atacante quiere encodear el contenido de un archivo como /etc/passwd en base64. Esto lo puede conseguir usando el filtro de conversión conver.base64-encode del wrapper. El payload final sería php://filter/conver.base64-encode/resource=/etc/passwd.
Por ejemplo, ve a http://IP/playground.php u usa el payload final allí.

Una vez que la aplicación procese este payload, el servidor devolverá el contenido encodeado de passwd.

El atacante puede decodearlo después.

Hay muchas categorías de filtros en PHP. Algunos son Filtros de String (string.rot13, string.toupper, string.tolower y string.strip_tags), Filtros de Conversión (convert.base64-encode, convert.base64-decode, convert.quoted-printable-encode y convert.quoted-printable-decode), Filtros de Compresión (zlib.deflate y zlib.inflate) y Filtros de Encriptación (mcrypt y mdecrypt).
Por ejemplo, la tabla de abajo representa el output del archivo .htaccess usando diferentes filtros de string:
| Payload | Output |
|---|---|
| php://filter/convert.base64-encode/resource=.htaccess | UmV3cml0ZUVuZ2luZSBvbgpPcHRpb25zIC1JbmRleGVz |
| php://filter/string.rot13/resource=.htaccess | ErjevgrRatvar ba Bcgvbaf -Vaqrkrf |
| php://filter/string.toupper/resource=.htaccess | REWRITEENGINE ON OPTIONS -INDEXES |
| php://filter/string.tolower/resource=.htaccess | rewriteengine on options -indexes |
| php://filter/string.strip_tags/resource=.htaccess | RewriteEngine on Options -Indexes |
| No filter applied | RewriteEngine on Options -Indexes |
Data Wrapper
El wrapper de flujo de información es otro ejemplo de la funcionalidad de wrappers de PHP. El wrapper data:// permite la incrustación de información en la propia linea. Se usa para incrustar pequeñas cantidades de información directamente en el código de la aplicación.
Por ejemplo, ve a http://IP/playground.php y usa el payload data:text/plain,<?php%20phpinfo();%20?>. En la imagen de abajo esta URL podría causar ejecución de código PHP, mostrando los detalles de su configuración.

El desglose del payload data:text/plain,<?php phpinfo(); ?> es:
data:Como URL.mime-type: Configurada comotext/plain.- La parte de los datos incluye una traza de código PHP:
<?php phpinfo(); ?>.
