PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Este é basicamente um resumo de https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
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.
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 obtidas 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:
Neste caso, definir $a
como App
ou App2
e $b
como um comando do sistema (por exemplo, uname -a
) resulta na execução desse comando.
Funções de Autoloading podem ser exploradas se tais classes não estiverem diretamente acessíveis. Essas funções carregam automaticamente classes de arquivos quando necessário e são definidas usando spl_autoload_register
ou __autoload
:
O comportamento do autoloading varia com as versões do PHP, oferecendo diferentes possibilidades de RCE.
Na falta de classes personalizadas ou autoloaders, classes integradas do PHP podem ser suficientes para RCE. O número dessas classes varia entre 100 a 200, com base na versão do PHP e nas extensões. Elas podem ser listadas usando get_declared_classes()
.
Construtores de interesse podem ser identificados através da API de reflexão, como mostrado no seguinte exemplo e no link https://3v4l.org/2JEGF.
RCE via métodos específicos inclui:
A classe SplFileObject
permite SSRF através de seu construtor, permitindo conexões a qualquer URL:
SSRF pode levar a ataques de desserialização em versões do PHP anteriores a 8.0 usando o protocolo Phar.
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:
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.
Na análise das dependências de um projeto, foi descoberto que Imagick poderia ser aproveitado para execução de comandos ao instanciar novos objetos. Isso apresenta uma oportunidade para explorar vulnerabilidades.
A capacidade do parser VID de escrever conteúdo em qualquer caminho especificado no sistema de arquivos foi identificada. Isso poderia levar à colocação de um shell PHP em um diretório acessível pela web, alcançando Execução Remota de Código (RCE).
Observa-se que o PHP armazena temporariamente arquivos enviados em /tmp/phpXXXXXX
. O parser 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 alcançar a escrita arbitrária de arquivos dentro do sistema de arquivos.
Um método descrito no escrito original envolve o upload de arquivos que provocam 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.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)