Ataques comuns do PHP: Directory Traversal
O que é Directory Traversal?
Durante um ataque de desvio de diretório, o invasor enviará um nome de arquivo contendo caracteres que permitirão acessar arquivos fora do diretório pretendido. Por exemplo, um único ponto (.) Refere-se ao diretório atual e dois pontos (..) ao diretório pai. Durante um ataque, o objetivo será acessar e ler arquivos restritos usando os privilégios elevados do PHP. Por exemplo, arquivos fora do diretório raiz (public_html, por exemplo, no Apache) não são acessíveis na Internet, mas o PHP provavelmente terá privilégios para ler e executar esses arquivos. Outro exemplo seria exibir o conteúdo dos arquivos PHP no servidor, que pode conter informações valiosas, como credenciais do banco de dados.
Exemplo:
Uso malicioso
view.php?page=../admin/login.php
Neste exemplo, em vez de obter um arquivo do diretório de páginas, o ../ passa para o diretório dos pais, obtendo o arquivo /admin/login.php. Isso é muito ruim, pois provavelmente conterão credenciais de administrador ou de banco de dados; caso contrário, poderia conter caminhos para outros arquivos PHP que conterão essas informações. O invasor pode então usar o mesmo método novamente para obter esses outros arquivos e obter informações valiosas. Essas credenciais poderiam então ser usadas para realizar um ataque mais desanimador de roubar detalhes do usuário, desfigurar, excluir arquivos / registros ou seqüestrar o site, espalhando software malicioso ... para citar alguns.
Solução
Você pode ficar tentado a usar o regex para remover todos os ../s, mas existem algumas boas funções incorporadas ao PHP que farão um trabalho muito melhor:
basename - remove todas as informações de diretório do caminho, por exemplo ../pages/about.php se tornaria about.php
realpath - retorna um caminho completo para o arquivo, por exemplo about.php se tornaria /home/www/pages/about.php, mas apenas se o arquivo existir.
Combinados, eles retornam apenas o nome dos arquivos, mas apenas se o arquivo existir.
realpath - retorna um caminho completo para o arquivo, por exemplo about.php se tornaria /home/www/pages/about.php, mas apenas se o arquivo existir.
Combinados, eles retornam apenas o nome dos arquivos, mas apenas se o arquivo existir.
Nenhum comentário:
Postar um comentário