disable_functions bypass - dl function

Support HackTricks

Nota importante:

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:

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 da 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 o 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 detalhado passo a passo 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.

Support HackTricks

Last updated