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í.

PHP Wrappers

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

PHP Wrappers

El atacante puede decodearlo después.

PHP Wrappers

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:

PayloadOutput
php://filter/convert.base64-encode/resource=.htaccessUmV3cml0ZUVuZ2luZSBvbgpPcHRpb25zIC1JbmRleGVz
php://filter/string.rot13/resource=.htaccessErjevgrRatvar ba Bcgvbaf -Vaqrkrf
php://filter/string.toupper/resource=.htaccessREWRITEENGINE ON OPTIONS -INDEXES
php://filter/string.tolower/resource=.htaccessrewriteengine on options -indexes
php://filter/string.strip_tags/resource=.htaccessRewriteEngine on Options -Indexes
No filter appliedRewriteEngine 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.

PHP Wrappers

El desglose del payload data:text/plain,<?php phpinfo(); ?> es:

  • data: Como URL.
  • mime-type: Configurada como text/plain.
  • La parte de los datos incluye una traza de código PHP: <?php phpinfo(); ?>.