disable_functions bypass - dl function

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Nota importante:

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

  • A função dl deve estar presente no ambiente e não desativada

  • A extensão do PHP deve ser compilada com a mesma versão principal (versão da API do PHP) que o servidor está usando (você pode ver essa informação na saída do phpinfo)

  • A extensão do PHP deve estar localizada no diretório definido pela diretiva extension_dir (você pode ver isso na saída do phpinfo). É muito improvável que um atacante tentando abusar do servidor tenha acesso de gravação sobre este diretório, então esse requisito provavelmente o impedirá de abusar dessa técnica).

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

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

Etapas Realizadas pelo Atacante:

  1. Identificação da Versão do PHP:

  • O atacante determina a versão do PHP usando um script (<?php echo 'A versão do PHP é '.PHP_VERSION; ?>).

  1. Aquisição da Origem do PHP:

  • Baixa a origem do PHP do site oficial do PHP ou do arquivo se a versão for mais antiga.

  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 à compilação atual da Extensão Zend, obtida com:

php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}'
  1. Modificação da Função PHP:

  • Para versões recentes do PHP (5, 7, 8), PHP_FUNCTION(bypass_exec) pode precisar de ajustes. 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 compilação para a extensão personalizada.

Compilando a Extensão:

  1. Comandos de Compilação:

  • Usa phpize, ./configure e make para compilar a extensão.

  • O bypass.so resultante é então localizado no subdiretório de módulos.

  1. Limpeza:

  • Executa make clean e phpize --clean após a compilação.

Upload e Execução no Host da Vítima:

  1. Compatibilidade de Versão:

  • Garante que as versões da API do PHP correspondam entre o sistema 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=<comando>

Este guia detalhado descreve o processo de criação e implantação de uma extensão do PHP para executar comandos do sistema, explorando a função dl, que idealmente deve ser desativada para evitar violações de segurança desse tipo.

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Last updated