Questão de Sistemas Operacionais — Ubuntu — FGV 2024
Sistemas Operacionais›Ubuntu
Código
fg165647
Banca
FGV
Órgão
TCE PA
Ano
2024
Cargo
Aud CE (TCE-PA)
Um servidor Linux (Ubuntu) publicou uma página web. Durante a verificação de vulnerabilidades nessa página foi encontrada a falha conhecida como Local File Inclusion (LFI). Uma das evidências dessa falha foi constatada pelo analista de segurança quando ele manipulou a entrada da variável “page” demandada pela URL da página. O acesso idôneo deve ser realizado por meio da URL apresentada abaixo, na qual o arquivo “aplicacao.php” é passado como parâmetro para a vaiável “page”.
https://192.168.0.1/index.php?page=aplicacao.php
A tabela a seguir, apresenta o resultado da manipulação da vaiável “page”, realizada pelo analista de segurança desta empresa, com arquivos inexistentes no servidor.
Assinale a opção que apresenta o valor que esse analista deve passar como parâmetro para a variável “page”, explorando a vulnerabilidade de LFI encontrada, para obter acesso ao conteúdo do arquivo “/etc/hostname” desse servidor de páginas.
A/etc/hostname
B/hostname
C/../etc/hostname
D/../../etc/hostname
E/../../../../etc/hostname
Revelar gabarito e comentário▾
GabaritoE — /../../../../etc/hostname
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Local File Inclusion (LFI) e o caminho absoluto
Gabarito: letra E. Para explorar a vulnerabilidade de LFI e acessar o arquivo /etc/hostname, o analista deve usar o caminho absoluto /../../../../etc/hostname. A lógica é que, ao fornecer um caminho absoluto (que começa com /), o servidor web, ao concatenar com o diretório raiz da aplicação, acaba resolvendo o caminho para a raiz do sistema de arquivos, e os ../ adicionais são usados para "subir" até a raiz real, ignorando o diretório base da aplicação.
A vulnerabilidade de Local File Inclusion (LFI) é um tipo de falha de segurança em aplicações web que permite a um atacante incluir arquivos locais do servidor na resposta da página. Isso ocorre quando a aplicação utiliza um parâmetro (como page) para incluir dinamicamente um arquivo, mas não valida ou sanitiza corretamente a entrada do usuário. O atacante pode então manipular esse parâmetro para incluir arquivos que não deveriam ser acessíveis, como arquivos de configuração, senhas ou outros dados sensíveis.
A exploração clássica de LFI envolve o uso de path traversal (também conhecido como directory traversal). O atacante insere sequências de ../ (ou ..\\ em sistemas Windows) para navegar para fora do diretório raiz da aplicação web e acessar outros diretórios do sistema. No caso de um caminho absoluto (que começa com /), o servidor pode interpretar o caminho como relativo ao diretório raiz da aplicação, e os ../ são usados para subir na hierarquia até chegar à raiz do sistema de arquivos.
No exemplo do enunciado, a URL normal é https://192.168.0.1/index.php?page=aplicacao.php. O servidor provavelmente inclui o arquivo especificado no parâmetro page a partir de um diretório base, como /var/www/html/. Para acessar /etc/hostname, o atacante precisa subir até a raiz (/) e depois descer para etc/hostname. Cada ../ sobe um nível na hierarquia. Se o diretório base for /var/www/html/, são necessários quatro níveis para chegar à raiz: html → www → var → /. Portanto, o payload seria /../../../../etc/hostname.
A tabela a seguir mostra a resolução do caminho para cada alternativa, considerando o diretório base /var/www/html/:
Alternativa
Payload
Caminho resolvido
Acessa /etc/hostname?
A
/etc/hostname
/var/www/html/etc/hostname
Não
B
/hostname
/var/www/html/hostname
Não
C
/../etc/hostname
/var/www/etc/hostname
Não
D
/../../etc/hostname
/var/etc/hostname
Não
E
/../../../../etc/hostname
/etc/hostname
Sim
A pegadinha desta questão está em entender que o caminho absoluto fornecido pelo atacante é interpretado pelo servidor como relativo ao diretório raiz da aplicação, e não como um caminho absoluto do sistema de arquivos. Por isso, é necessário usar ../ para subir até a raiz real. A alternativa E é a única que sobe o número suficiente de níveis para alcançar /etc/hostname.
NÃO CAIA NESSA!
A banca explora a confusão entre caminho absoluto e relativo. O candidato pode pensar que basta usar /etc/hostname (alternativa A), mas o servidor interpreta esse caminho como relativo ao diretório base da aplicação. É preciso usar ../ para subir até a raiz do sistema de arquivos. A alternativa E é a única que sobe o número correto de níveis.
1Base: /var/www/html/
21º ../ → /var/www/
32º ../ → /var/
43º ../ → /
54º ../ → /etc/hostname
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
O payload /etc/hostname é um caminho absoluto, mas o servidor web, ao processar o parâmetro page, o interpreta como relativo ao diretório raiz da aplicação (por exemplo, /var/www/html/). Assim, o caminho resolvido seria /var/www/html/etc/hostname, que não existe. Para acessar o arquivo na raiz do sistema, é necessário subir na hierarquia com ../.
Alternativa B — ❌ Incorreta
O payload /hostname também é interpretado como relativo ao diretório base da aplicação, resultando em /var/www/html/hostname. Além disso, o arquivo correto é /etc/hostname, não /hostname. Esta alternativa não sobe nenhum nível na hierarquia e aponta para um arquivo inexistente.
Alternativa C — ❌ Incorreta
O payload /../etc/hostname sobe um nível a partir do diretório base. Se o base for /var/www/html/, o caminho resolvido seria /var/www/etc/hostname, que ainda não é o arquivo desejado. É necessário subir mais níveis para chegar à raiz.
Alternativa D — ❌ Incorreta
O payload /../../etc/hostname sobe dois níveis a partir do diretório base. Se o base for /var/www/html/, o caminho resolvido seria /var/etc/hostname, que ainda não é o arquivo desejado. É necessário subir mais níveis para chegar à raiz.
Alternativa E — ✅ Correta ⟵ GABARITO
O payload /../../../../etc/hostname sobe quatro níveis a partir do diretório base. Se o base for /var/www/html/, o caminho resolvido seria /etc/hostname, que é exatamente o arquivo desejado. Esta é a única alternativa que sobe o número suficiente de níveis para alcançar a raiz do sistema de arquivos e acessar o arquivo /etc/hostname.