disable_functions bypass - dl function
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 desativadaA 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:
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; ?>
).
Aquisição da Origem do PHP:
Configuração Local do PHP:
Extrai e instala a versão específica do PHP em seu sistema.
Criação da Extensão:
Estuda criação de extensões do PHP e inspeciona o código-fonte do PHP.
Foca em duplicar a funcionalidade da função exec localizada em
ext/standard/exec.c
.
Notas para Compilar a Extensão Personalizada:
ZEND_MODULE_API_NO:
O
ZEND_MODULE_API_NO
embypass.c
deve corresponder à compilação atual da Extensão Zend, obtida com:
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:
Comandos de Compilação:
Usa
phpize
,./configure
emake
para compilar a extensão.O
bypass.so
resultante é então localizado no subdiretório de módulos.
Limpeza:
Executa
make clean
ephpize --clean
após a compilação.
Upload e Execução no Host da Vítima:
Compatibilidade de Versão:
Garante que as versões da API do PHP correspondam entre o sistema 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 upload de
bypass.so
e um script PHP para o servidor da vítima.O script usa a função
dl_local
para carregar dinamicamentebypass.so
e então chamabypass_exec
com um comando passado via o parâmetro de consultacmd
.
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.
Last updated