Arquivos e técnicas de nomenclatura | Solyd One
- Técnicas de nomeação de arquivo | Solyd One
Exiftool
- Ferramenta para ver / alterar os metadados.
metadado chamado comments pode conter código em PHP para atacar. Aula de Vulnerabilidades WEB / Shell Upload contém a explicação
⚠ Exemplos de técnicas/vulnerabilidades ruins
-
Extensão dupla + renomeio fraco Um arquivo enviado chama-se
imagem.jpg.php. Se o sistema simplesmente verificar se termina com.jpg, ou fizer algo comoend(explode('.', $nome_do_arquivo))para pegar a extensão, ele pode aceitar esse arquivo, que na verdade é script PHP. -
Nome de arquivo com parâmetro “enganoso” na URL Por exemplo acessar:
exemplo.php?arquivo=imagem.jpgSe
exemplo.phpinterpretar esse parâmetro e, em algum lugar, fazerincludeourequirebaseado nesse nome, pode acabar executando código PHP. -
Upload baseado no Content-Type HTTP ou no tipo enviado pelo browser Exemplo:
if ($_FILES['file']['type'] == 'image/png') {
move_uploaded_file(...);
}Se o invasor fingir (spoof) esse
type, ele consegue enganar essa verificação. -
Blacklist de extensões Verificar que o nome do arquivo não termine com
.php,.phtml,.exeetc., mas não bloquear.php5,.pHp,.pHp.jpgetc. Exemplo:if (!preg_match('/\.(php|phtml)$/i', $nome)) {
move_uploaded_file(...);
}Ainda assim, alguém pode usar
arquivo.php.jpgouarquivo.PHPe driblar. -
Confiar em funções superficiais de verificação de imagem Exemplo de verificação de imagem com
getimagesize()no PHP ou algo similar. Isso pode falhar se alguém inserir código malicioso em metadados ou comentários da imagem, mantendo o header de imagem válido. -
Permitir execução de arquivos em diretório de uploads Mesmo que o upload seja controlado, se o diretório onde se guarda os arquivos permite execução de scripts (por exemplo,
.php), ou há uma.htaccessque habilita, um arquivo enviado com script pode ser acessado pelo navegador e executado. -
Uso de
move_uploaded_file()sem renomearmove_uploaded_file($_FILES['file']['tmp_name'], "uploads/" . $_FILES['file']['name']);Se o nome original vier do usuário, pode conter caminhos (
../../pastas), extensões perigosas, sobrescrever arquivos existentes, etc. -
Aceitar uploads sem limite de tamanho ou tipo Se qualquer arquivo for aceito, pode gerar negação de serviço (filling de disco), ou permitir upload de arquivos muito grandes que o servidor não aguente, ou tipos que exploram vulnerabilidades de bibliotecas (como arquivos SVG com script, ou PDFs com macros, etc.).