tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Nota importante:

image

dl é uma função PHP que pode ser usada para carregar extensões PHP. Se a função não estiver desativada, pode ser abusada para contornar disable_functions e executar comandos arbitrários.
No entanto, possui algumas limitações rigorosas:

  • A função dl deve estar presente no ambiente e não desativada
  • A extensão PHP deve ser compilada com a mesma versão principal (versão da API PHP) que o servidor está usando (você pode ver essa informação na saída do phpinfo)
  • A extensão PHP deve estar localizada no diretório que é definido pela diretiva extension_dir (você pode vê-la na saída do phpinfo). É muito improvável que um atacante tentando abusar do servidor tenha acesso de gravação a esse diretório, então esse requisito provavelmente impedirá que você abuse dessa técnica).

Se você atender a esses requisitos, continue lendo o post https://antichat.com/threads/70763/ para aprender como contornar disable_functions. Aqui está um resumo:

A função dl é usada para carregar extensões PHP dinamicamente durante a execução do script. Extensões PHP, tipicamente escritas em C/C++, aprimoram a funcionalidade do PHP. O atacante, ao notar que a função dl não está desativada, decide criar uma extensão PHP personalizada para executar comandos do sistema.

Passos Tomados pelo Atacante:

  1. Identificação da Versão PHP:
  • O atacante determina a versão PHP usando um script (<?php echo 'PHP Version is '.PHP_VERSION; ?>).
  1. Aquisição do Código Fonte PHP:
  1. Configuração Local do PHP:
  • Extrai e instala a versão específica do PHP em seu sistema.
  1. Criação da Extensão:

Notas para Compilar a Extensão Personalizada:

  1. ZEND_MODULE_API_NO:
  • O ZEND_MODULE_API_NO em bypass.c deve corresponder à versão atual da Zend Extension Build, recuperável com:
bash
php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}'
  1. Modificação de PHP_FUNCTION:
  • Para versões recentes do PHP (5, 7, 8), PHP_FUNCTION(bypass_exec) pode precisar de ajuste. O trecho de código fornecido detalha essa modificação.

Arquivos da Extensão Personalizada:

  • bypass.c:
  • Implementa a funcionalidade principal da extensão personalizada.
  • php_bypass.h:
  • Arquivo de cabeçalho, definindo propriedades da extensão.
  • config.m4:
  • Usado pelo phpize para configurar o ambiente de construção para a extensão personalizada.

Construindo a Extensão:

  1. Comandos de Compilação:
  • Usa phpize, ./configure e make para compilar a extensão.
  • O resultado bypass.so é então localizado no subdiretório de módulos.
  1. Limpeza:
  • Executa make clean e phpize --clean após a compilação.

Carregando e Executando no Host da Vítima:

  1. Compatibilidade de Versão:
  • Garante que as versões da API PHP correspondam entre os sistemas do atacante e da vítima.
  1. Carregamento da Extensão:
  • Utiliza a função dl, contornando restrições usando caminhos relativos ou um script para automatizar o processo.
  1. Execução do Script:
  • O atacante faz upload de bypass.so e um script PHP para o servidor da vítima.
  • O script usa a função dl_local para carregar dinamicamente bypass.so e então chama bypass_exec com um comando passado via o parâmetro de consulta cmd.

Execução de Comandos:

  • O atacante agora pode executar comandos acessando: http://www.example.com/script.php?cmd=<command>

Este detalhamento descreve o processo de criação e implantação de uma extensão PHP para executar comandos do sistema, explorando a função dl, que idealmente deve ser desativada para prevenir tais brechas de segurança.

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks