CTFShow Web153: Exploração de Vulnerabilidade com .user.ini
A questão Web153 do CTFShow apresenta um cenário de upload de arquivos que não pode ser explorado com as técnicas usadas em Web151. Ao acessar o diretório /upload/, a mansagem "nothing here" indica a presença de arquivos PHP, o que sugere a possibilidade de explorar vulnerabilidades através do upload de arquivos .user.ini.
Mecanismo do .user.ini
O arquivo .user.ini permite a configuração de diretivas do PHP, incluindo funcionalidades de inclusão automática de arquivos. Duas diretivas são particularmente úteis para fins maliciosos:
auto_prepend_file: Inclui um arquivo especificado antes da execução de qualquer script PHP.auto_append_file: Inclui um arquivo especificado após a execução de um script PHP (esta opção pode falhar se o script PHP contiver uma instruçãoexit()).
A exploração bem-sucedida depende da existência de um arquivo PHP executável no diretório de upload. Neste caso, a presença de index.php no diretório upload atende a este requisito.
Passos da Exploração
1. Criação do Arquivo .user.ini Malicioso
Crie um arquivo chamado .user.ini com o seguinte conteúdo:
auto_prepend_file=shell.gif
Observação: Pode-se optar por auto_prepend_file ou auto_append_file. A escolha afeta a ordem de inclusão. auto_prepend_file é preferível para garantir a inclusão antes do script principal.
2. Upload Modificado do .user.ini
Utilize uma ferramenta como o Burp Suite para itnerceptar a requisição de upload do arquivo .user.ini. Modifique o nome do arquivo para .user.ini durante o processo de upload.
3. Upload do Payload (shell.gif)
Prepare um arquivo com um payload de webshell, nomeado como shell.gif (ou outro nome que será referenciado no .user.ini). O conteúdo pode ser:
<?php @eval($_POST['cmd']); ?>
Faça o upload deste arquivo diretamente, sem modificações de nome.
4. Conexão com o Web Shell
Acesse o script PHP principal no diretório de upload (por exemplo, /upload/index.php). Utilize uma ferramenta de conexão de webshell, inserindo a URL e a senha definida no payload (cmd neste exemplo).
5. Obtenção do Flag
Após estabelecer a conexão com o webshell, navegue até o local do arquivo de flag (geralmente em www/html/flag.php) para obter a bandeira.
Causa da Vulnerabilidade e Contramedidas
Causa Raiz:
- Validação insuficiente do tipo de arquivo no lado do servidor.
- Configuração do PHP permitindo a diretiva
user_ini.filename(ou similar), habilitando a execução de código arbitrário através de arquivos de configuração.
Medidas de Defesa:
- Desabilitar Configurações Perigosas: Configure o PHP para não permitir a leitura de arquivos
.user.inidefinindouser_ini.filename = ""nophp.ini. - Validação Rigorosa de Uploads: Implemente validação robusta no lado do servidor para extensões de arquivo, tipos MIME e, se possível, verificação de conteúdo.
- Permissões de Arquivo: Restrinja as permissões de execução para diretórios de upload, permitindo apenas operações de leitura e escrita.
- Localização Segura de Arquivos: Evite armazenar arquivos sensíveis em diretórios diretamente acessíveis pela web.
Este guia detalha a exploração da vulnerabilidade de upload de arquivos em CTFShow Web153 usando arquivos .user.ini.