O que são **PHP Wrappers** Em PHP, _wrappers_ (ou _stream wrappers_) são mecanismos que permitem tratar diferentes fontes ou protocolos como se fossem arquivos, utilizando as mesmas funções de manipulação de arquivos como `fopen()`, `file_get_contents()` etc. Essas fontes podem incluir não apenas o sistema de arquivos, mas também fluxos HTTP, FTP, dados embutidos, compressão, entre outros. ### Exemplos comuns de wrappers: - `file://` – acessa arquivos locais. - `http://` e `ftp://` – acessam recursos remotos via HTTP ou FTP. - `php://` – inclui fluxos como `php://input`, `php://output`, `php://memory`, entre outros - `php://filter` – permite aplicar filtros, como codificação em base64, a um fluxo - `data://` – permite embutir dados diretamente na URL usando o esquema `data:` (RFC 2397), ideal para dados pequenos como texto ou código em base64. - Outros: `glob://`, `phar://`, `zlib://`, `ssh2://`, `rar://`, entre outros. Esses wrappers permitem que o PHP leia ou interprete dados provenientes desses fluxos como se fossem arquivos convencionais, facilitando o uso de funções de leitura/escrita. ## O que o comando fez O URL que você compartilhou: ``` echo -n '<?php system(id);?>' | base64 ``` O comando faz uso do wrapper `data://` com os parâmetros `text/plain;base64,...`. A parte após `base64,` é uma string codificada em Base64: `PD9waHAgc3lzdGVtKGlkKTs/Pg==`. Ao decodificá-la, obtemos: ``` http://dominio.com.br/?page=data://text/plain;base64,PD9waHAgc3lzdGVtKGlkKTs/Pg== ``` Ou seja: um código PHP que executa o comando `system("id")`, que exibe informações do usuário do sistema no servidor. ### Para que isso funciona, é necessário que: 1. A configuração `allow_url_include` esteja ativada no `php.ini`, permitindo incluir fluxos externos via URL (inclusive via `data://`, `http://` etc.) 2. O parâmetro passado, como `?page=...`, seja utilizado diretamente em uma função como `include`, `require`, `file_get_contents`, ou similar, de forma não sanitizada. Se isso ocorrer, o PHP interpreta o código embutido na mensagem `data://...` e o executa — neste caso, rodando `system("id")`.