disable_functions bypass - dl function
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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. As 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.
Identificação da Versão do PHP:
O atacante determina a versão do PHP usando um script (<?php echo 'PHP Version is '.PHP_VERSION; ?>
).
Aquisição do Código Fonte do PHP:
Baixa o código fonte do PHP do site oficial ou do arquivo se a versão for mais antiga.
Configuração Local do PHP:
Extrai e instala a versão específica do PHP em seu sistema.
Criação da Extensão:
Estuda como criar extensões PHP e inspeciona o código fonte do PHP.
Foca em duplicar a funcionalidade da função exec localizada em ext/standard/exec.c
.
ZEND_MODULE_API_NO:
O ZEND_MODULE_API_NO
em bypass.c
deve corresponder à versão atual da Zend Extension Build, recuperável com:
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.
bypass.c:
Implementa a funcionalidade principal da extensão personalizada.
php_bypass.h:
Arquivo de cabeçalho, definindo as propriedades da extensão.
config.m4:
Usado pelo phpize
para configurar o ambiente de construção da extensão personalizada.
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.
Limpeza:
Executa make clean
e phpize --clean
após a compilação.
Compatibilidade de Versão:
Garante que as versões da API PHP correspondam entre os sistemas do atacante e da vítima.
Carregamento da Extensão:
Utiliza a função dl
, contornando restrições usando caminhos relativos ou um script para automatizar o processo.
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
.
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 deveria ser desativada para prevenir tais brechas de segurança.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)