PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])
Questa è essenzialmente una sintesi di https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
Introduzione
La creazione di nuovi oggetti arbitrari, come new $_GET["a"]($_GET["a"])
, può portare all'esecuzione remota di codice (RCE), come descritto in un articolo. Questo documento evidenzia diverse strategie per ottenere RCE.
RCE tramite classi personalizzate o autoloading
La sintassi new $a($b)
viene utilizzata per istanziare un oggetto in cui $a
rappresenta il nome della classe e $b
è il primo argomento passato al costruttore. Queste variabili possono provenire da input dell'utente come GET/POST, dove possono essere stringhe o array, o da JSON, dove potrebbero presentarsi come altri tipi.
Considera il frammento di codice seguente:
In questo caso, impostando $a
su App
o App2
e $b
su un comando di sistema (ad esempio, uname -a
), si ottiene l'esecuzione di tale comando.
Le funzioni di autoloading possono essere sfruttate se non sono direttamente accessibili classi corrispondenti. Queste funzioni caricano automaticamente le classi dai file quando necessario e vengono definite utilizzando spl_autoload_register
o __autoload
:
Il comportamento del caricamento automatico varia a seconda delle versioni di PHP, offrendo diverse possibilità di RCE.
RCE tramite classi integrate
In assenza di classi personalizzate o autoloaders, le classi integrate di PHP possono essere sufficienti per la RCE. Il numero di queste classi varia tra 100 e 200, a seconda della versione di PHP e delle estensioni. Possono essere elencate utilizzando get_declared_classes()
.
I costruttori di interesse possono essere identificati tramite l'API di reflection, come mostrato nell'esempio seguente e nel link https://3v4l.org/2JEGF.
La RCE tramite metodi specifici include:
SSRF + Deserializzazione di Phar
La classe SplFileObject
consente SSRF tramite il suo costruttore, consentendo connessioni a qualsiasi URL:
SSRF può portare ad attacchi di deserializzazione nelle versioni di PHP precedenti alla 8.0 utilizzando il protocollo Phar.
Sfruttare i PDO
Il costruttore della classe PDO consente di stabilire connessioni ai database tramite stringhe DSN, consentendo potenzialmente la creazione di file o altre interazioni:
SoapClient/SimpleXMLElement XXE
Le versioni di PHP fino alla 5.3.22 e 5.4.12 erano vulnerabili agli attacchi XXE attraverso i costruttori SoapClient
e SimpleXMLElement
, a seconda della versione di libxml2.
RCE tramite l'estensione Imagick
Nell'analisi delle dipendenze di un progetto, è stato scoperto che Imagick poteva essere sfruttato per l'esecuzione di comandi istanziando nuovi oggetti. Ciò offre un'opportunità per sfruttare vulnerabilità.
Parser VID
È stata identificata la capacità del parser VID di scrivere contenuti in un percorso specificato nel filesystem. Ciò potrebbe portare alla posizionamento di una shell PHP in una directory accessibile via web, ottenendo l'esecuzione remota di codice (RCE).
Parser VID + Caricamento file
Si nota che PHP memorizza temporaneamente i file caricati in /tmp/phpXXXXXX
. Il parser VID in Imagick, utilizzando il protocollo msl, può gestire caratteri jolly nei percorsi dei file, facilitando il trasferimento del file temporaneo in una posizione scelta. Questo metodo offre un approccio aggiuntivo per ottenere la scrittura arbitraria di file nel filesystem.
PHP Crash + Brute Force
Un metodo descritto nell'articolo originale prevede il caricamento di file che causano il crash del server prima della cancellazione. Attraverso un attacco di forza bruta sul nome del file temporaneo, diventa possibile per Imagick eseguire codice PHP arbitrario. Tuttavia, questa tecnica è risultata efficace solo in una versione obsoleta di ImageMagick.
Riferimenti
Last updated