Skip to main content

Arquivos e técnicas de nomenclatura | Solyd One

  • Técnicas de nomeação de arquivo | Solyd One

Exiftool

  • Ferramenta para ver / alterar os metadados.
danger

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

  1. 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 como end(explode('.', $nome_do_arquivo)) para pegar a extensão, ele pode aceitar esse arquivo, que na verdade é script PHP.

  2. Nome de arquivo com parâmetro “enganoso” na URL Por exemplo acessar:

    exemplo.php?arquivo=imagem.jpg

    Se exemplo.php interpretar esse parâmetro e, em algum lugar, fazer include ou require baseado nesse nome, pode acabar executando código PHP.

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

  4. Blacklist de extensões Verificar que o nome do arquivo não termine com .php, .phtml, .exe etc., mas não bloquear .php5, .pHp, .pHp.jpg etc. Exemplo:

    if (!preg_match('/\.(php|phtml)$/i', $nome)) {
    move_uploaded_file(...);
    }

    Ainda assim, alguém pode usar arquivo.php.jpg ou arquivo.PHP e driblar.

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

  6. 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 .htaccess que habilita, um arquivo enviado com script pode ser acessado pelo navegador e executado.

  7. Uso de move_uploaded_file() sem renomear

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

  8. 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.).