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")`.